forked from osmocom/wireshark
Qt: Add elements back to the tcptrace graph.
Segment and SACK elements in the tcptrace graph are plotted using QCustomPlot's error bars. This part of QCP's API changed from version 1 to 2, and were #ifdef'ed out as part of the switch to QCP 2.0.1. Update our code to use the new API. Bug: 16281 Change-Id: Ieae2808686ddc631e0cd18c0c32fc7a2c0f396b7 Reviewed-on: https://code.wireshark.org/review/35726 Reviewed-by: Gerald Combs <gerald@wireshark.org> Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
0db890ba59
commit
999e63543f
|
@ -57,10 +57,8 @@ const int moving_avg_period_ = 20;
|
|||
const QRgb graph_color_1 = tango_sky_blue_5;
|
||||
const QRgb graph_color_2 = tango_butter_6;
|
||||
const QRgb graph_color_3 = tango_chameleon_5;
|
||||
#if 0 // Deactivated due to function not implemented in v2
|
||||
const QRgb graph_color_4 = tango_scarlet_red_4;
|
||||
const QRgb graph_color_5 = tango_scarlet_red_6;
|
||||
#endif
|
||||
|
||||
// Size of selectable packet points in the base graph
|
||||
const double pkt_point_size_ = 3.0;
|
||||
|
@ -84,21 +82,24 @@ TCPStreamDialog::TCPStreamDialog(QWidget *parent, capture_file *cf, tcp_graph_ty
|
|||
ts_origin_conn_(true),
|
||||
seq_offset_(0),
|
||||
seq_origin_zero_(true),
|
||||
title_(NULL),
|
||||
base_graph_(NULL),
|
||||
tput_graph_(NULL),
|
||||
goodput_graph_(NULL),
|
||||
seg_graph_(NULL),
|
||||
ack_graph_(NULL),
|
||||
sack_graph_(NULL),
|
||||
sack2_graph_(NULL),
|
||||
rwin_graph_(NULL),
|
||||
dup_ack_graph_(NULL),
|
||||
zero_win_graph_(NULL),
|
||||
tracer_(NULL),
|
||||
title_(nullptr),
|
||||
base_graph_(nullptr),
|
||||
tput_graph_(nullptr),
|
||||
goodput_graph_(nullptr),
|
||||
seg_graph_(nullptr),
|
||||
seg_eb_(nullptr),
|
||||
ack_graph_(nullptr),
|
||||
sack_graph_(nullptr),
|
||||
sack_eb_(nullptr),
|
||||
sack2_graph_(nullptr),
|
||||
sack2_eb_(nullptr),
|
||||
rwin_graph_(nullptr),
|
||||
dup_ack_graph_(nullptr),
|
||||
zero_win_graph_(nullptr),
|
||||
tracer_(nullptr),
|
||||
packet_num_(0),
|
||||
mouse_drags_(true),
|
||||
rubber_band_(NULL),
|
||||
rubber_band_(nullptr),
|
||||
graph_updater_(this),
|
||||
num_dsegs_(-1),
|
||||
num_acks_(-1),
|
||||
|
@ -230,52 +231,63 @@ TCPStreamDialog::TCPStreamDialog(QWidget *parent, capture_file *cf, tcp_graph_ty
|
|||
// Base Graph - enables selecting segments (both data and SACKs)
|
||||
base_graph_ = sp->addGraph();
|
||||
base_graph_->setPen(QPen(QBrush(graph_color_1), pen_width));
|
||||
|
||||
// Throughput Graph - rate of sent bytes
|
||||
tput_graph_ = sp->addGraph(sp->xAxis, sp->yAxis2);
|
||||
tput_graph_->setPen(QPen(QBrush(graph_color_2), pen_width));
|
||||
tput_graph_->setLineStyle(QCPGraph::lsStepLeft);
|
||||
|
||||
// Goodput Graph - rate of ACKed bytes
|
||||
goodput_graph_ = sp->addGraph(sp->xAxis, sp->yAxis2);
|
||||
goodput_graph_->setPen(QPen(QBrush(graph_color_3), pen_width));
|
||||
goodput_graph_->setLineStyle(QCPGraph::lsStepLeft);
|
||||
|
||||
// Seg Graph - displays forward data segments on tcptrace graph
|
||||
seg_graph_ = sp->addGraph();
|
||||
seg_graph_->setLineStyle(QCPGraph::lsNone);
|
||||
seg_graph_->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDot, Qt::transparent, 0));
|
||||
#if 0 // Deactivated due to function not implemented in v2
|
||||
seg_graph_->setErrorType(QCPGraph::etValue);
|
||||
seg_graph_->setErrorPen(QPen(QBrush(graph_color_1), pen_width));
|
||||
seg_graph_->setErrorBarSkipSymbol(false); // draw error spine as single line
|
||||
seg_graph_->setErrorBarSize(pkt_point_size_);
|
||||
#endif
|
||||
seg_eb_ = new QCPErrorBars(sp->xAxis, sp->yAxis);
|
||||
seg_eb_->setErrorType(QCPErrorBars::etValueError);
|
||||
seg_eb_->setPen(QPen(QBrush(graph_color_1), pen_width));
|
||||
seg_eb_->setSymbolGap(0.0); // draw error spine as single line
|
||||
seg_eb_->setWhiskerWidth(pkt_point_size_);
|
||||
seg_eb_->removeFromLegend();
|
||||
seg_eb_->setDataPlottable(seg_graph_);
|
||||
|
||||
// Ack Graph - displays ack numbers from reverse packets
|
||||
ack_graph_ = sp->addGraph();
|
||||
ack_graph_->setPen(QPen(QBrush(graph_color_2), pen_width));
|
||||
ack_graph_->setLineStyle(QCPGraph::lsStepLeft);
|
||||
|
||||
// Sack Graph - displays highest number (most recent) SACK block
|
||||
sack_graph_ = sp->addGraph();
|
||||
sack_graph_->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDot, Qt::transparent, 0));
|
||||
#if 0 // Deactivated due to function not implemented in v2
|
||||
sack_graph_->setErrorType(QCPGraph::etValue);
|
||||
sack_graph_->setLineStyle(QCPGraph::lsNone);
|
||||
sack_graph_->setErrorPen(QPen(QBrush(graph_color_4), pen_width));
|
||||
sack_graph_->setErrorBarSkipSymbol(false);
|
||||
sack_graph_->setErrorBarSize(0.0);
|
||||
#endif
|
||||
// RWin graph - displays upper extent of RWIN advertised on reverse packets
|
||||
sack_graph_->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDot, Qt::transparent, 0));
|
||||
sack_eb_ = new QCPErrorBars(sp->xAxis, sp->yAxis);
|
||||
sack_eb_->setErrorType(QCPErrorBars::etValueError);
|
||||
sack_eb_->setPen(QPen(QBrush(graph_color_4), pen_width));
|
||||
sack_eb_->setSymbolGap(0.0); // draw error spine as single line
|
||||
sack_eb_->setWhiskerWidth(0.0);
|
||||
sack_eb_->removeFromLegend();
|
||||
sack_eb_->setDataPlottable(sack_graph_);
|
||||
|
||||
// Sack Graph 2 - displays subsequent SACK blocks
|
||||
sack2_graph_ = sp->addGraph();
|
||||
sack2_graph_->setLineStyle(QCPGraph::lsNone);
|
||||
sack2_graph_->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDot, Qt::transparent, 0));
|
||||
#if 0 // Deactivated due to function not implemented in v2
|
||||
sack2_graph_->setErrorType(QCPGraph::etValue);
|
||||
sack2_graph_->setErrorPen(QPen(QBrush(graph_color_5), pen_width));
|
||||
sack2_graph_->setErrorBarSkipSymbol(false);
|
||||
sack2_graph_->setErrorBarSize(0.0);
|
||||
#endif
|
||||
sack2_eb_ = new QCPErrorBars(sp->xAxis, sp->yAxis);
|
||||
sack2_eb_->setErrorType(QCPErrorBars::etValueError);
|
||||
sack2_eb_->setPen(QPen(QBrush(graph_color_5), pen_width));
|
||||
sack2_eb_->setSymbolGap(0.0); // draw error spine as single line
|
||||
sack2_eb_->setWhiskerWidth(0.0);
|
||||
sack2_eb_->removeFromLegend();
|
||||
sack2_eb_->setDataPlottable(sack2_graph_);
|
||||
|
||||
// RWin graph - displays upper extent of RWIN advertised on reverse packets
|
||||
rwin_graph_ = sp->addGraph();
|
||||
rwin_graph_->setPen(QPen(QBrush(graph_color_3), pen_width));
|
||||
rwin_graph_->setLineStyle(QCPGraph::lsStepLeft);
|
||||
|
||||
// Duplicate ACK Graph - displays duplicate ack ticks
|
||||
// QCustomPlot doesn't have QCPScatterStyle::ssTick so we have to make our own.
|
||||
int tick_len = 3;
|
||||
|
@ -293,6 +305,7 @@ TCPStreamDialog::TCPStreamDialog(QWidget *parent, capture_file *cf, tcp_graph_ty
|
|||
QCPScatterStyle da_ss = QCPScatterStyle(QCPScatterStyle::ssPixmap, graph_color_2, 0);
|
||||
da_ss.setPixmap(da_tick_pm);
|
||||
dup_ack_graph_->setScatterStyle(da_ss);
|
||||
|
||||
// Zero Window Graph - displays zero window crosses (x)
|
||||
zero_win_graph_ = sp->addGraph();
|
||||
zero_win_graph_->setLineStyle(QCPGraph::lsNone);
|
||||
|
@ -862,11 +875,12 @@ void TCPStreamDialog::fillTcptrace()
|
|||
}
|
||||
base_graph_->setData(pkt_time, pkt_seqnums);
|
||||
ack_graph_->setData(ackrwin_time, ack);
|
||||
#if 0 // Deactivated due to function not implemented in v2
|
||||
seg_graph_->setDataValueError(sb_time, sb_center, sb_span);
|
||||
sack_graph_->setDataValueError(sack_time, sack_center, sack_span);
|
||||
sack2_graph_->setDataValueError(sack2_time, sack2_center, sack2_span);
|
||||
#endif
|
||||
seg_graph_->setData(sb_time, sb_center);
|
||||
seg_eb_->setData(sb_span);
|
||||
sack_graph_->setData(sack_time, sack_center);
|
||||
sack_eb_->setData(sack_span);
|
||||
sack2_graph_->setData(sack2_time, sack2_center);
|
||||
sack2_eb_->setData(sack2_span);
|
||||
rwin_graph_->setData(ackrwin_time, rwin);
|
||||
dup_ack_graph_->setData(dup_ack_time, dup_ack);
|
||||
zero_win_graph_->setData(zero_win_time, zero_win);
|
||||
|
|
|
@ -68,9 +68,12 @@ private:
|
|||
QCPGraph *tput_graph_;
|
||||
QCPGraph *goodput_graph_;
|
||||
QCPGraph *seg_graph_;
|
||||
QCPErrorBars *seg_eb_;
|
||||
QCPGraph *ack_graph_;
|
||||
QCPGraph *sack_graph_;
|
||||
QCPErrorBars *sack_eb_;
|
||||
QCPGraph *sack2_graph_;
|
||||
QCPErrorBars *sack2_eb_;
|
||||
QCPGraph *rwin_graph_;
|
||||
QCPGraph *dup_ack_graph_;
|
||||
QCPGraph *zero_win_graph_;
|
||||
|
|
Loading…
Reference in New Issue