-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMeasureSimple.cs
More file actions
149 lines (118 loc) · 3.62 KB
/
Copy pathMeasureSimple.cs
File metadata and controls
149 lines (118 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace webtest
{
class MeasureSimple : IMeasurement
{
protected long CurrentTimeMks()
{
return Stopwatch.GetTimestamp() * nanosecondsPerTick / 1000;
}
public void Start()
{
startMks = CurrentTimeMks();
}
public void Sent(UInt32 sent)
{
long currentTime = CurrentTimeMks();
if (startMks == 0)
startMks = currentTime;
if (sentFirstMks == 0)
sentFirstMks = currentTime;
sentLastMks = currentTime;
sentBytes += sent;
}
public void DoneSend()
{
sentLastMks = CurrentTimeMks();
}
public void DoneReceived()
{
receivedLastMks = CurrentTimeMks();
}
public void Received(UInt32 received)
{
long currentTime = CurrentTimeMks();
if (startMks == 0)
startMks = currentTime;
if (receivedFirstMks == 0)
receivedFirstMks = currentTime;
receivedLastMks = currentTime;
receivedBytes += received;
}
public long SendLatency {
get {
if (startMks != 0 && sentFirstMks != 0)
return sentFirstMks - startMks;
return 0;
}
}
public long ReceiveLatency
{
get {
if (receivedFirstMks == 0)
return 0;
if (sentFirstMks != 0)
return receivedFirstMks - sentFirstMks;
else if (startMks != 0)
return receivedFirstMks - startMks;
else
return 0;
}
}
public long SendReceiveLatency
{
get
{
if (receivedFirstMks == 0)
return 0;
if (startMks != 0)
return receivedFirstMks - startMks;
else
if (sentFirstMks != 0)
return receivedFirstMks - sentFirstMks;
else
return 0;
}
}
public long ReceiveCompletionTime
{
get
{
if (receivedFirstMks == 0)
{
return 0;
}
return receivedLastMks - receivedLastMks;
}
}
public long SendRate()
{
if (sentFirstMks != 0 && sentLastMks != 0 && sentLastMks != sentFirstMks)
return sentBytes * 1000L * 1000L / (sentLastMks - sentFirstMks);
return 0;
}
public long ReceivedRate()
{
if (receivedFirstMks != 0 && receivedLastMks != 0 && receivedLastMks != receivedFirstMks)
{
return receivedBytes * 1000L * 1000L / (receivedLastMks - receivedFirstMks);
}
return 0;
}
public long ReceivedBytes { get { return receivedBytes; } }
public long SendBytes { get { return receivedBytes; } }
private long startMks;
private long sentFirstMks = 0;
private long sentLastMks = 0;
private long receivedFirstMks = 0;
private long receivedLastMks = 0;
private long sentBytes = 0;
private long receivedBytes = 0;
private long nanosecondsPerTick = (1000L*1000L*1000L) / Stopwatch.Frequency;
}
}