Tracing these list lengths sometimes dominates performance, so manually keep count for now.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3756 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
7ba1e6980f
commit
e1f868730f
69
src/ssb.c
69
src/ssb.c
@ -145,19 +145,28 @@ typedef struct _tf_ssb_t {
|
||||
uint8_t pub[crypto_sign_PUBLICKEYBYTES];
|
||||
uint8_t priv[crypto_sign_SECRETKEYBYTES];
|
||||
|
||||
int connections_changed_count;
|
||||
|
||||
tf_ssb_connection_t* connections;
|
||||
int connections_count;
|
||||
|
||||
tf_ssb_connections_t* connections_tracker;
|
||||
|
||||
tf_ssb_broadcast_t* broadcasts;
|
||||
int broadcasts_count;
|
||||
|
||||
tf_ssb_rpc_callback_node_t* rpc;
|
||||
int rpc_count;
|
||||
|
||||
tf_ssb_connections_changed_callback_node_t* connections_changed;
|
||||
int connections_changed_count;
|
||||
|
||||
tf_ssb_message_added_callback_node_t* message_added;
|
||||
int message_added_count;
|
||||
|
||||
tf_ssb_blob_want_added_callback_node_t* blob_want_added;
|
||||
int blob_want_added_count;
|
||||
|
||||
tf_ssb_broadcasts_changed_callback_node_t* broadcasts_changed;
|
||||
int broadcasts_changed_count;
|
||||
} tf_ssb_t;
|
||||
|
||||
typedef struct _tf_ssb_connection_t {
|
||||
@ -1201,6 +1210,7 @@ static void _tf_ssb_connection_on_close(uv_handle_t* handle)
|
||||
{
|
||||
*it = connection->next;
|
||||
connection->next = NULL;
|
||||
ssb->connections_count--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1484,29 +1494,6 @@ static bool _tf_ssb_save_keys(tf_ssb_t* ssb)
|
||||
static void _tf_ssb_trace_timer(uv_timer_t* timer)
|
||||
{
|
||||
tf_ssb_t* ssb = timer->data;
|
||||
int connections = 0;
|
||||
int broadcasts = 0;
|
||||
int rpc = 0;
|
||||
int connections_changed = 0;
|
||||
int message_added = 0;
|
||||
int blob_want_added = 0;
|
||||
int broadcasts_changed = 0;
|
||||
|
||||
#define COUNT(type, name) \
|
||||
for (type* it = ssb->name; it; it = it->next) \
|
||||
{ \
|
||||
name++; \
|
||||
}
|
||||
|
||||
COUNT(tf_ssb_connection_t, connections);
|
||||
COUNT(tf_ssb_broadcast_t, broadcasts);
|
||||
COUNT(tf_ssb_rpc_callback_node_t, rpc);
|
||||
COUNT(tf_ssb_connections_changed_callback_node_t, connections_changed);
|
||||
COUNT(tf_ssb_message_added_callback_node_t, message_added);
|
||||
COUNT(tf_ssb_blob_want_added_callback_node_t, blob_want_added);
|
||||
COUNT(tf_ssb_broadcasts_changed_callback_node_t, broadcasts_changed);
|
||||
|
||||
#undef COUNT
|
||||
|
||||
const char* names[] =
|
||||
{
|
||||
@ -1520,13 +1507,13 @@ static void _tf_ssb_trace_timer(uv_timer_t* timer)
|
||||
};
|
||||
int64_t values[] =
|
||||
{
|
||||
connections,
|
||||
broadcasts,
|
||||
rpc,
|
||||
connections_changed,
|
||||
message_added,
|
||||
blob_want_added,
|
||||
broadcasts_changed,
|
||||
ssb->connections_count,
|
||||
ssb->broadcasts_count,
|
||||
ssb->rpc_count,
|
||||
ssb->connections_changed_count,
|
||||
ssb->message_added_count,
|
||||
ssb->blob_want_added_count,
|
||||
ssb->broadcasts_changed_count,
|
||||
};
|
||||
|
||||
tf_trace_counter(ssb->trace, "lists", _countof(values), names, values);
|
||||
@ -1692,6 +1679,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
{
|
||||
tf_ssb_rpc_callback_node_t* node = ssb->rpc;
|
||||
ssb->rpc = node->next;
|
||||
ssb->rpc_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -1703,6 +1691,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
{
|
||||
tf_ssb_connections_changed_callback_node_t* node = ssb->connections_changed;
|
||||
ssb->connections_changed = node->next;
|
||||
ssb->connections_changed_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -1713,6 +1702,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
{
|
||||
tf_ssb_message_added_callback_node_t* node = ssb->message_added;
|
||||
ssb->message_added = node->next;
|
||||
ssb->message_added_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -1723,6 +1713,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
{
|
||||
tf_ssb_blob_want_added_callback_node_t* node = ssb->blob_want_added;
|
||||
ssb->blob_want_added = node->next;
|
||||
ssb->blob_want_added_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -1733,6 +1724,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
{
|
||||
tf_ssb_broadcasts_changed_callback_node_t* node = ssb->broadcasts_changed;
|
||||
ssb->broadcasts_changed = node->next;
|
||||
ssb->broadcasts_changed_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -1752,6 +1744,7 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
{
|
||||
tf_ssb_broadcast_t* broadcast = ssb->broadcasts;
|
||||
ssb->broadcasts = broadcast->next;
|
||||
ssb->broadcasts_count--;
|
||||
free(broadcast);
|
||||
}
|
||||
free(ssb);
|
||||
@ -1835,6 +1828,7 @@ tf_ssb_connection_t* tf_ssb_connection_create(tf_ssb_t* ssb, const char* host, c
|
||||
|
||||
connection->next = ssb->connections;
|
||||
ssb->connections = connection;
|
||||
ssb->connections_count++;
|
||||
_tf_ssb_notify_connections_changed(ssb, k_tf_ssb_change_create, connection);
|
||||
return connection;
|
||||
}
|
||||
@ -1930,6 +1924,7 @@ static void _tf_ssb_on_connection(uv_stream_t* stream, int status)
|
||||
|
||||
connection->next = ssb->connections;
|
||||
ssb->connections = connection;
|
||||
ssb->connections_count++;
|
||||
_tf_ssb_notify_connections_changed(ssb, k_tf_ssb_change_create, connection);
|
||||
|
||||
connection->state = k_tf_ssb_state_server_wait_hello;
|
||||
@ -2133,6 +2128,7 @@ static void _tf_ssb_add_broadcast(tf_ssb_t* ssb, const tf_ssb_broadcast_t* broad
|
||||
node->ctime = time(NULL);
|
||||
node->mtime = node->ctime;
|
||||
ssb->broadcasts = node;
|
||||
ssb->broadcasts_count++;
|
||||
|
||||
_tf_ssb_notify_broadcasts_changed(ssb);
|
||||
}
|
||||
@ -2269,6 +2265,7 @@ void tf_ssb_add_broadcasts_changed_callback(tf_ssb_t* ssb, tf_ssb_broadcasts_cha
|
||||
.next = ssb->broadcasts_changed,
|
||||
};
|
||||
ssb->broadcasts_changed = node;
|
||||
ssb->broadcasts_changed_count++;
|
||||
}
|
||||
|
||||
void tf_ssb_remove_broadcasts_changed_callback(tf_ssb_t* ssb, tf_ssb_broadcasts_changed_callback_t* callback, void* user_data)
|
||||
@ -2281,6 +2278,7 @@ void tf_ssb_remove_broadcasts_changed_callback(tf_ssb_t* ssb, tf_ssb_broadcasts_
|
||||
{
|
||||
tf_ssb_broadcasts_changed_callback_node_t* node = *it;
|
||||
*it = node->next;
|
||||
ssb->broadcasts_changed_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -2305,6 +2303,7 @@ void tf_ssb_add_connections_changed_callback(tf_ssb_t* ssb, tf_ssb_connections_c
|
||||
.next = ssb->connections_changed,
|
||||
};
|
||||
ssb->connections_changed = node;
|
||||
ssb->connections_changed_count++;
|
||||
}
|
||||
|
||||
void tf_ssb_remove_connections_changed_callback(tf_ssb_t* ssb, tf_ssb_connections_changed_callback_t* callback, void* user_data)
|
||||
@ -2317,6 +2316,7 @@ void tf_ssb_remove_connections_changed_callback(tf_ssb_t* ssb, tf_ssb_connection
|
||||
{
|
||||
tf_ssb_connections_changed_callback_node_t* node = *it;
|
||||
*it = node->next;
|
||||
ssb->connections_changed_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -2358,6 +2358,7 @@ void tf_ssb_add_rpc_callback(tf_ssb_t* ssb, const char** name, tf_ssb_rpc_callba
|
||||
}
|
||||
node->name[name_count] = NULL;
|
||||
ssb->rpc = node;
|
||||
ssb->rpc_count++;
|
||||
}
|
||||
|
||||
JSContext* tf_ssb_connection_get_context(tf_ssb_connection_t* connection)
|
||||
@ -2396,6 +2397,7 @@ void tf_ssb_add_message_added_callback(tf_ssb_t* ssb, void (*callback)(tf_ssb_t*
|
||||
.next = ssb->message_added,
|
||||
};
|
||||
ssb->message_added = node;
|
||||
ssb->message_added_count++;
|
||||
}
|
||||
|
||||
void tf_ssb_remove_message_added_callback(tf_ssb_t* ssb, tf_ssb_message_added_callback_t* callback, void* user_data)
|
||||
@ -2408,6 +2410,7 @@ void tf_ssb_remove_message_added_callback(tf_ssb_t* ssb, tf_ssb_message_added_ca
|
||||
{
|
||||
tf_ssb_message_added_callback_node_t* node = *it;
|
||||
*it = node->next;
|
||||
ssb->message_added_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
@ -2442,6 +2445,7 @@ void tf_ssb_add_blob_want_added_callback(tf_ssb_t* ssb, void (*callback)(tf_ssb_
|
||||
.next = ssb->blob_want_added,
|
||||
};
|
||||
ssb->blob_want_added = node;
|
||||
ssb->blob_want_added_count++;
|
||||
}
|
||||
|
||||
void tf_ssb_remove_blob_want_added_callback(tf_ssb_t* ssb, tf_ssb_blob_want_added_callback_t* callback, void* user_data)
|
||||
@ -2454,6 +2458,7 @@ void tf_ssb_remove_blob_want_added_callback(tf_ssb_t* ssb, tf_ssb_blob_want_adde
|
||||
{
|
||||
tf_ssb_blob_want_added_callback_node_t* node = *it;
|
||||
*it = node->next;
|
||||
ssb->blob_want_added_count--;
|
||||
if (node->cleanup)
|
||||
{
|
||||
node->cleanup(ssb, node->user_data);
|
||||
|
Loading…
Reference in New Issue
Block a user