forked from osmocom/wireshark
Qt: support selecting the min/max packet from IO Graph
GTK+ supports selecting the first packet (via the "left mouse button") and the last packet (via the "right mouse button") in an interval, and Qt supports selecting the last packet of an interval. This patch enables picking the packet matching the extreme value in Qt. Bug: 12401 Change-Id: If0b7f2f1bf8c384ea0d68b5f5fae2d1e8b4b0ac2 Reviewed-on: https://code.wireshark.org/review/20769 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Peter Wu <peter@lekensteyn.nl>
This commit is contained in:
parent
a5f9b4e06d
commit
023cf320eb
|
@ -65,6 +65,7 @@ typedef struct _io_graph_item_t {
|
||||||
nstime_t time_min;
|
nstime_t time_min;
|
||||||
nstime_t time_tot;
|
nstime_t time_tot;
|
||||||
guint32 first_frame_in_invl;
|
guint32 first_frame_in_invl;
|
||||||
|
guint32 extreme_frame_in_invl; /* frame with min/max value */
|
||||||
guint32 last_frame_in_invl;
|
guint32 last_frame_in_invl;
|
||||||
} io_graph_item_t;
|
} io_graph_item_t;
|
||||||
|
|
||||||
|
@ -97,6 +98,7 @@ reset_io_graph_items(io_graph_item_t *items, gsize count) {
|
||||||
nstime_set_zero(&item->time_min);
|
nstime_set_zero(&item->time_min);
|
||||||
nstime_set_zero(&item->time_tot);
|
nstime_set_zero(&item->time_tot);
|
||||||
item->first_frame_in_invl = 0;
|
item->first_frame_in_invl = 0;
|
||||||
|
item->extreme_frame_in_invl = 0;
|
||||||
item->last_frame_in_invl = 0;
|
item->last_frame_in_invl = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,9 +175,15 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
|
|
||||||
if ((new_int > item->int_max) || (item->fields == 0)) {
|
if ((new_int > item->int_max) || (item->fields == 0)) {
|
||||||
item->int_max = new_int;
|
item->int_max = new_int;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((new_int < item->int_min) || (item->fields == 0)) {
|
if ((new_int < item->int_min) || (item->fields == 0)) {
|
||||||
item->int_min = new_int;
|
item->int_min = new_int;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item->int_tot += new_int;
|
item->int_tot += new_int;
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
@ -187,9 +195,15 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
new_int = fvalue_get_sinteger(&((field_info *)gp->pdata[i])->value);
|
new_int = fvalue_get_sinteger(&((field_info *)gp->pdata[i])->value);
|
||||||
if ((new_int > item->int_max) || (item->fields == 0)) {
|
if ((new_int > item->int_max) || (item->fields == 0)) {
|
||||||
item->int_max = new_int;
|
item->int_max = new_int;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((new_int < item->int_min) || (item->fields == 0)) {
|
if ((new_int < item->int_min) || (item->fields == 0)) {
|
||||||
item->int_min = new_int;
|
item->int_min = new_int;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item->int_tot += new_int;
|
item->int_tot += new_int;
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
@ -201,9 +215,15 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
new_int64 = fvalue_get_uinteger64(&((field_info *)gp->pdata[i])->value);
|
new_int64 = fvalue_get_uinteger64(&((field_info *)gp->pdata[i])->value);
|
||||||
if ((new_int64 > item->int_max) || (item->fields == 0)) {
|
if ((new_int64 > item->int_max) || (item->fields == 0)) {
|
||||||
item->int_max = new_int64;
|
item->int_max = new_int64;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((new_int64 < item->int_min) || (item->fields == 0)) {
|
if ((new_int64 < item->int_min) || (item->fields == 0)) {
|
||||||
item->int_min = new_int64;
|
item->int_min = new_int64;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item->int_tot += new_int64;
|
item->int_tot += new_int64;
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
@ -215,9 +235,15 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
new_int64 = fvalue_get_sinteger64(&((field_info *)gp->pdata[i])->value);
|
new_int64 = fvalue_get_sinteger64(&((field_info *)gp->pdata[i])->value);
|
||||||
if ((new_int64 > item->int_max) || (item->fields == 0)) {
|
if ((new_int64 > item->int_max) || (item->fields == 0)) {
|
||||||
item->int_max = new_int64;
|
item->int_max = new_int64;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((new_int64 < item->int_min) || (item->fields == 0)) {
|
if ((new_int64 < item->int_min) || (item->fields == 0)) {
|
||||||
item->int_min = new_int64;
|
item->int_min = new_int64;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item->int_tot += new_int64;
|
item->int_tot += new_int64;
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
@ -226,9 +252,15 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
new_float = (gfloat)fvalue_get_floating(&((field_info *)gp->pdata[i])->value);
|
new_float = (gfloat)fvalue_get_floating(&((field_info *)gp->pdata[i])->value);
|
||||||
if ((new_float > item->float_max) || (item->fields == 0)) {
|
if ((new_float > item->float_max) || (item->fields == 0)) {
|
||||||
item->float_max = new_float;
|
item->float_max = new_float;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((new_float < item->float_min) || (item->fields == 0)) {
|
if ((new_float < item->float_min) || (item->fields == 0)) {
|
||||||
item->float_min = new_float;
|
item->float_min = new_float;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item->float_tot += new_float;
|
item->float_tot += new_float;
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
@ -237,9 +269,15 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
new_double = fvalue_get_floating(&((field_info *)gp->pdata[i])->value);
|
new_double = fvalue_get_floating(&((field_info *)gp->pdata[i])->value);
|
||||||
if ((new_double > item->double_max) || (item->fields == 0)) {
|
if ((new_double > item->double_max) || (item->fields == 0)) {
|
||||||
item->double_max = new_double;
|
item->double_max = new_double;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((new_double < item->double_min) || (item->fields == 0)) {
|
if ((new_double < item->double_min) || (item->fields == 0)) {
|
||||||
item->double_min = new_double;
|
item->double_min = new_double;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item->double_tot += new_double;
|
item->double_tot += new_double;
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
@ -296,12 +334,18 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d
|
||||||
&& (new_time->nsecs > item->time_max.nsecs))
|
&& (new_time->nsecs > item->time_max.nsecs))
|
||||||
|| (item->fields == 0)) {
|
|| (item->fields == 0)) {
|
||||||
item->time_max = *new_time;
|
item->time_max = *new_time;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MAX) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( (new_time->secs<item->time_min.secs)
|
if ( (new_time->secs<item->time_min.secs)
|
||||||
|| ( (new_time->secs == item->time_min.secs)
|
|| ( (new_time->secs == item->time_min.secs)
|
||||||
&& (new_time->nsecs < item->time_min.nsecs))
|
&& (new_time->nsecs < item->time_min.nsecs))
|
||||||
|| (item->fields == 0)) {
|
|| (item->fields == 0)) {
|
||||||
item->time_min = *new_time;
|
item->time_min = *new_time;
|
||||||
|
if (item_unit == IOG_ITEM_UNIT_CALC_MIN) {
|
||||||
|
item->extreme_frame_in_invl = pinfo->num;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nstime_add(&item->time_tot, new_time);
|
nstime_add(&item->time_tot, new_time);
|
||||||
item->fields++;
|
item->fields++;
|
||||||
|
|
|
@ -1951,8 +1951,14 @@ int IOGraph::packetFromTime(double ts)
|
||||||
{
|
{
|
||||||
int idx = ts * 1000 / interval_;
|
int idx = ts * 1000 / interval_;
|
||||||
if (idx >= 0 && idx < (int) cur_idx_) {
|
if (idx >= 0 && idx < (int) cur_idx_) {
|
||||||
|
switch (val_units_) {
|
||||||
|
case IOG_ITEM_UNIT_CALC_MAX:
|
||||||
|
case IOG_ITEM_UNIT_CALC_MIN:
|
||||||
|
return items_[idx].extreme_frame_in_invl;
|
||||||
|
default:
|
||||||
return items_[idx].last_frame_in_invl;
|
return items_[idx].last_frame_in_invl;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue