Use integer storage and arithmetic for nanosec pcap
quint64 has larger range than double so has better accuracy. However, for calculating packet rate, use floating-point arithmetic since the packet rate is a double Updates #238
This commit is contained in:
parent
45d5e15f23
commit
226705f015
@ -503,12 +503,15 @@ _non_pdml:
|
|||||||
stream->mutable_control()->set_num_packets(1);
|
stream->mutable_control()->set_num_packets(1);
|
||||||
|
|
||||||
// setup packet rate to the timing in pcap (as close as possible)
|
// setup packet rate to the timing in pcap (as close as possible)
|
||||||
const double kXsecsInSec = nsecResolution ? 1e9 : 1e6;
|
// use quint64 rather than double to store micro/nano second as
|
||||||
|
// it has a larger range (~580 years) and therefore better accuracy
|
||||||
|
const quint64 kXsecsInSec = nsecResolution ? 1e9 : 1e6;
|
||||||
quint64 xsec = (pktHdr.tsSec*kXsecsInSec + pktHdr.tsUsec);
|
quint64 xsec = (pktHdr.tsSec*kXsecsInSec + pktHdr.tsUsec);
|
||||||
quint64 delta = xsec - lastXsec;
|
quint64 delta = xsec - lastXsec;
|
||||||
|
qDebug("pktCount = %d, delta = %llu", pktCount, delta);
|
||||||
|
|
||||||
if ((pktCount != 1) && delta)
|
if ((pktCount != 1) && delta)
|
||||||
stream->mutable_control()->set_packets_per_sec(kXsecsInSec/delta);
|
stream->mutable_control()->set_packets_per_sec(double(kXsecsInSec)/delta);
|
||||||
|
|
||||||
if (prevStream)
|
if (prevStream)
|
||||||
prevStream->mutable_control()->CopyFrom(stream->control());
|
prevStream->mutable_control()->CopyFrom(stream->control());
|
||||||
@ -516,7 +519,6 @@ _non_pdml:
|
|||||||
lastXsec = xsec;
|
lastXsec = xsec;
|
||||||
prevStream = stream;
|
prevStream = stream;
|
||||||
pktCount++;
|
pktCount++;
|
||||||
qDebug("pktCount = %d", pktCount);
|
|
||||||
byteCount += pktHdr.inclLen + sizeof(pktHdr);
|
byteCount += pktHdr.inclLen + sizeof(pktHdr);
|
||||||
emit progress(int(byteCount*100/byteTotal)); // in percentage
|
emit progress(int(byteCount*100/byteTotal)); // in percentage
|
||||||
if (stop_)
|
if (stop_)
|
||||||
|
Loading…
Reference in New Issue
Block a user