Ethereal-dev: [Ethereal-dev] Conversation/Endpoint list performance patch
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Ian Schorr <ethereal@xxxxxxxxxxxxx>
Date: Tue, 13 Jul 2004 00:49:12 -0400
Hi all,Attached are a couple of simple patches that should improve performance of the Conversation List and Endpoint List features tremendously.
In my testing I saw about 2x to over 500x improvement.We were able to get away with the lists the way they were in GTK-1.x, but in GTK-2.x the features are nearly unusable with captures containing moderately large numbers of conversations/hosts. These patches should improve performance in both, though.
There's quite a bit more optimization that can be done, I just figured I'd hit the lowest-hanging fruit first.
Ian
--- endpoint_talkers_table.c 2004-07-13 00:36:55.033630400 -0400
+++ endpoint_talkers_table.c.bak 2004-07-13 00:36:24.589854400 -0400
@@ -225,9 +225,7 @@
}
/* remove all entries from the clist */
- for(i=0;i<et->num_endpoints;i++){
- gtk_clist_remove(et->table, et->num_endpoints-i-1);
- }
+ gtk_clist_clear(et->table);
/* delete all endpoints */
for(i=0;i<et->num_endpoints;i++){
@@ -317,9 +315,11 @@
gtk_widget_show(col_arrows[column].descend_pm);
gtk_clist_set_sort_column(clist, column);
}
- gtk_clist_thaw(clist);
gtk_clist_sort(clist);
+
+ gtk_clist_thaw(clist);
+
}
@@ -1007,8 +1007,6 @@
}
-
-/* XXX should freeze/thaw table here and in the srt thingy? */
static void
draw_ett_table_data(endpoints_table *et)
{
@@ -1016,6 +1014,9 @@
int j;
char title[256];
+ /* Freeze the Endpoint table since quite a few changes will occur */
+ gtk_clist_freeze(et->table);
+
if (et->page_lb) {
if(et->num_endpoints) {
g_snprintf(title, 255, "%s: %u", et->name, et->num_endpoints);
@@ -1053,6 +1054,8 @@
/* update table, so resolved addresses will be shown now */
draw_ett_table_addresses(et);
+
+ gtk_clist_thaw(et->table);
}
@@ -1484,6 +1487,8 @@
char *entries[NUM_COLS];
char frames[16],bytes[16],txframes[16],txbytes[16],rxframes[16],rxbytes[16];
+ /* Freeze the endpoint table while performing updates */
+ gtk_clist_freeze(et->table);
/* these values will be filled by call to draw_ett_table_addresses() below */
entries[0] = "";
@@ -1509,7 +1514,7 @@
gtk_clist_insert(et->table, talker_idx, entries);
gtk_clist_set_row_data(et->table, talker_idx, (gpointer) talker_idx);
- draw_ett_table_addresses(et);
+ gtk_clist_thaw(et->table);
}
}
--- hostlist_table.c 2004-07-13 00:21:31.976339200 -0400
+++ hostlist_table.c.bak 2004-07-13 00:04:47.522004800 -0400
@@ -156,9 +156,7 @@
}
/* remove all entries from the clist */
- for(i=0;i<hosts->num_hosts;i++){
- gtk_clist_remove(hosts->table, hosts->num_hosts-i-1);
- }
+ gtk_clist_clear(hosts->table);
/* delete all hosts */
for(i=0;i<hosts->num_hosts;i++){
@@ -243,9 +241,10 @@
gtk_widget_show(col_arrows[column].descend_pm);
gtk_clist_set_sort_column(clist, column);
}
- gtk_clist_thaw(clist);
gtk_clist_sort(clist);
+
+ gtk_clist_thaw(clist);
}
@@ -493,7 +492,6 @@
}
-/* XXX should freeze/thaw table here and in the srt thingy? */
static void
draw_hostlist_table_data(hostlist_table *hl)
{
@@ -501,6 +499,9 @@
int j;
char title[256];
+ /* Freeze the Hostlist since quite a few changes will occur */
+ gtk_clist_freeze(hl->table);
+
if (hl->page_lb) {
if(hl->num_hosts) {
g_snprintf(title, 255, "%s: %u", hl->name, hl->num_hosts);
@@ -538,6 +539,8 @@
/* update table, so resolved addresses will be shown now */
draw_hostlist_table_addresses(hl);
+
+ gtk_clist_thaw(hl->table);
}
static gboolean
@@ -934,6 +937,9 @@
char frames[16],bytes[16],txframes[16],txbytes[16],rxframes[16],rxbytes[16];
+ /* Freeze the hostlist while performing updates */
+ gtk_clist_freeze(hl->table);
+
/* these values will be filled by call to draw_hostlist_table_addresses() below */
entries[0]="";
entries[1]="";
@@ -956,7 +962,7 @@
gtk_clist_insert(hl->table, talker_idx, entries);
gtk_clist_set_row_data(hl->table, talker_idx, (gpointer) talker_idx);
- draw_hostlist_table_addresses(hl);
+ gtk_clist_thaw(hl->table);
}
}
- Follow-Ups:
- Re: [Ethereal-dev] Conversation/Endpoint list performance patch
- From: Ulf Lamping
- Re: [Ethereal-dev] Conversation/Endpoint list performance patch
- Prev by Date: Re: [Ethereal-dev] problems compiling dissector with new ethereal version
- Next by Date: [Ethereal-dev] Fun PRI[doxu]64 problem on AIX 4.3.2 for 0.10.5
- Previous by thread: [Ethereal-dev] Error building RPM package on SuSE 9.1 with current CVS
- Next by thread: Re: [Ethereal-dev] Conversation/Endpoint list performance patch
- Index(es):





