Add a "Sum" column to the Service Response Time (SRT) window.

The Service Response Time (SRT) window currently provides the
columns: Index, Procedure, Calls, Min SRT, Max SRT, and Avg SRT.
A Sum column has been found useful in some customer situations
to understand the total time spent doing a set of procedures.
For example, in one case we were trying to isolate whether most
time was being spent on a client thread or in the act of making
outbound calls. We knew the start and end time of the client call,
so with the "Sum" of time spent in that period, we could isolate
a particular set of procedures driving the slow down.

Additional changes made in this patch:
* Add " (s)" to Min, Max, Avg, and Sum columns to make it clear
  that times are in seconds.
* Refactor out width and height constants used in calls to
  gtk_window_set_default_size in most of the SRT users into
  #define SRT_PREFERRED_WIDTH and SRT_PREFERRED_HEIGHT. Also
  increase the common width of 550 to 650 to account for the
  additional column.

Change-Id: I20f152eecbcd0bbf69f71c6c6b9f9463e8867e23
Reviewed-on: https://code.wireshark.org/review/7047
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Kevin Grigorenko 2015-02-09 17:20:38 -08:00 committed by Anders Broman
parent 895b0130de
commit 3b2954208a
14 changed files with 27 additions and 14 deletions

View File

@ -127,7 +127,7 @@ gtk_afpstat_init(const char *opt_arg, void *userdata _U_)
ss->win=dlg_window_new("afp-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(ss->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(ss->win), 550, 600);
gtk_window_set_default_size(GTK_WINDOW(ss->win), SRT_PREFERRED_WIDTH, 600);
afpstat_set_title(ss);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -149,7 +149,7 @@ static void gtk_camelsrt_init(const char *opt_arg, void *userdata _U_)
p_camelsrt->win= dlg_window_new("camel-srt"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(p_camelsrt->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(p_camelsrt->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(p_camelsrt->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
camelsrt_set_title(p_camelsrt);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -739,7 +739,7 @@ gtk_comparestat_init(const char *opt_arg, void* userdata _U_)
/* transient_for top_level */
cs->win=dlg_window_new("compare-stat");
gtk_window_set_destroy_with_parent (GTK_WINDOW(cs->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(cs->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(cs->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
comparestat_set_title(cs);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -261,7 +261,7 @@ gtk_dcerpcstat_init(const char *opt_arg, void* userdata _U_)
gtk_window_set_destroy_with_parent(GTK_WINDOW(rs->win), TRUE);
dcerpcstat_set_title(rs);
gtk_window_set_default_size(GTK_WINDOW(rs->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(rs->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
vbox =ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
gtk_container_add(GTK_CONTAINER(rs->win), vbox);

View File

@ -146,7 +146,7 @@ gtk_diameterstat_init(const char *opt_arg, void *userdata _U_)
diameter->win = dlg_window_new("diameter-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(diameter->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(diameter->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(diameter->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
diameterstat_set_title(diameter);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -131,7 +131,7 @@ gtk_fcstat_init(const char *opt_arg, void *userdata _U_)
fc->win = dlg_window_new("fc-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(fc->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(fc->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(fc->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
fcstat_set_title(fc);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -150,7 +150,7 @@ gtk_gtpstat_init(const char *opt_arg, void *userdata _U_)
gtp->win = dlg_window_new("gtp-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(gtp->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(gtp->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(gtp->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
gtpstat_set_title(gtp);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -143,7 +143,7 @@ gtk_ldapstat_init(const char *opt_arg, void *userdata _U_)
ldap->win = dlg_window_new("ldap-stat");
gtk_window_set_destroy_with_parent (GTK_WINDOW(ldap->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(ldap->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(ldap->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
ldapstat_set_title(ldap);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -249,7 +249,7 @@ gtk_rpcstat_init(const char *opt_arg, void* userdata _U_)
rs->win = dlg_window_new("rpc-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(rs->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(rs->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(rs->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
rpcstat_set_title(rs);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -211,7 +211,7 @@ gtk_scsistat_init(const char *opt_arg, void* userdata _U_)
rs->win = dlg_window_new("scsi-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(rs->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(rs->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(rs->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
scsistat_set_title(rs);
vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -44,6 +44,7 @@ enum
MIN_SRT_COLUMN,
MAX_SRT_COLUMN,
AVG_SRT_COLUMN,
SUM_SRT_COLUMN,
N_COLUMNS
};
@ -401,7 +402,7 @@ init_srt_table(srt_stat_table *rst, int num_procs, GtkWidget *vbox, const char *
GtkTreeSortable *sortable;
GtkTreeSelection *sel;
static const char *default_titles[] = { "Index", "Procedure", "Calls", "Min SRT", "Max SRT", "Avg SRT" };
static const char *default_titles[] = { "Index", "Procedure", "Calls", "Min SRT (s)", "Max SRT (s)", "Avg SRT (s)", "Sum SRT (s)" };
/* Create the store */
store = gtk_list_store_new (N_COLUMNS, /* Total number of columns */
@ -410,7 +411,8 @@ init_srt_table(srt_stat_table *rst, int num_procs, GtkWidget *vbox, const char *
G_TYPE_UINT, /* Calls */
G_TYPE_POINTER, /* Min SRT */
G_TYPE_POINTER, /* Max SRT */
G_TYPE_UINT64); /* Avg SRT */
G_TYPE_UINT64, /* Avg SRT */
G_TYPE_UINT64); /* Sum SRT */
/* Create a view */
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
@ -440,6 +442,7 @@ init_srt_table(srt_stat_table *rst, int num_procs, GtkWidget *vbox, const char *
gtk_tree_sortable_set_sort_func(sortable, i, srt_time_sort_func, GINT_TO_POINTER(i), NULL);
break;
case AVG_SRT_COLUMN:
case SUM_SRT_COLUMN:
column = gtk_tree_view_column_new_with_attributes (default_titles[i], renderer, NULL);
gtk_tree_view_column_set_cell_data_func(column, renderer, srt_avg_func, GINT_TO_POINTER(i), NULL);
break;
@ -538,6 +541,7 @@ add_srt_table_data(srt_stat_table *rst, int indx, const nstime_t *req_time, pack
MIN_SRT_COLUMN, NULL,
MAX_SRT_COLUMN, NULL,
AVG_SRT_COLUMN, (guint64)0,
SUM_SRT_COLUMN, (guint64)0,
-1);
}
@ -553,6 +557,7 @@ draw_srt_table_data(srt_stat_table *rst)
{
int i;
guint64 td;
guint64 sum;
GtkListStore *store = GTK_LIST_STORE(gtk_tree_view_get_model(rst->table));
for(i=0;i<rst->num_procs;i++){
@ -566,6 +571,7 @@ draw_srt_table_data(srt_stat_table *rst)
would take a capture with a duration of over 136 *years* to
overflow the secs portion of td. */
td = ((guint64)(rst->procedures[i].stats.tot.secs))*NANOSECS_PER_SEC + rst->procedures[i].stats.tot.nsecs;
sum = (td + 500) / 1000;
td = ((td / rst->procedures[i].stats.num) + 500) / 1000;
gtk_list_store_set(store, &rst->procedures[i].iter,
@ -573,6 +579,7 @@ draw_srt_table_data(srt_stat_table *rst)
MIN_SRT_COLUMN, &rst->procedures[i].stats.min,
MAX_SRT_COLUMN, &rst->procedures[i].stats.max,
AVG_SRT_COLUMN, td,
SUM_SRT_COLUMN, sum,
-1);
}
}

View File

@ -29,6 +29,12 @@
#include "wsutil/nstime.h"
#include "epan/timestats.h"
/** Suggested width of SRT window */
#define SRT_PREFERRED_WIDTH 650
/** Suggested height of SRT window */
#define SRT_PREFERRED_HEIGHT 400
/** @file
* Helper routines common to all service response time statistics tap.
*/

View File

@ -138,7 +138,7 @@ gtk_smb2stat_init(const char *opt_arg, void *userdata _U_)
ss->win = dlg_window_new("smb2-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(ss->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(ss->win), 550, 400);
gtk_window_set_default_size(GTK_WINDOW(ss->win), SRT_PREFERRED_WIDTH, SRT_PREFERRED_HEIGHT);
smb2stat_set_title(ss);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);

View File

@ -151,7 +151,7 @@ gtk_smbstat_init(const char *opt_arg, void *userdata _U_)
ss->win = dlg_window_new("smb-stat"); /* transient_for top_level */
gtk_window_set_destroy_with_parent (GTK_WINDOW(ss->win), TRUE);
gtk_window_set_default_size(GTK_WINDOW(ss->win), 550, 600);
gtk_window_set_default_size(GTK_WINDOW(ss->win), SRT_PREFERRED_WIDTH, 600);
smbstat_set_title(ss);
vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);