Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 4ef92d6

Browse files
committed
Add Stopwatch shim for Silverlight
1 parent bdc9db0 commit 4ef92d6

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

src/ServiceStack.Text/PclExport.Sl5.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,78 @@ public override WebResponse GetResponse(WebRequest webRequest)
9696
return webRes;
9797
}
9898
}
99+
100+
// Stopwatch shim for Silverlight
101+
public sealed class Stopwatch
102+
{
103+
private long startTick;
104+
private long elapsed;
105+
private bool isRunning;
106+
107+
public static Stopwatch StartNew()
108+
{
109+
Stopwatch sw = new Stopwatch();
110+
sw.Start();
111+
return sw;
112+
}
113+
114+
public Stopwatch() {}
115+
116+
public void Reset()
117+
{
118+
elapsed = 0;
119+
isRunning = false;
120+
startTick = 0;
121+
}
122+
123+
public void Start()
124+
{
125+
if (!isRunning)
126+
{
127+
startTick = GetCurrentTicks();
128+
isRunning = true;
129+
}
130+
}
131+
132+
public void Stop()
133+
{
134+
if (isRunning)
135+
{
136+
elapsed += GetCurrentTicks() - startTick;
137+
isRunning = false;
138+
}
139+
}
140+
141+
public bool IsRunning
142+
{
143+
get { return isRunning; }
144+
}
145+
146+
public TimeSpan Elapsed
147+
{
148+
get { return TimeSpan.FromMilliseconds(ElapsedMilliseconds); }
149+
}
150+
151+
public long ElapsedMilliseconds
152+
{
153+
get { return GetCurrentElapsedTicks() / TimeSpan.TicksPerMillisecond; }
154+
}
155+
156+
public long ElapsedTicks
157+
{
158+
get { return GetCurrentElapsedTicks(); }
159+
}
160+
161+
private long GetCurrentElapsedTicks()
162+
{
163+
return (long) (this.elapsed + (IsRunning ? (GetCurrentTicks() - startTick) : 0));
164+
}
165+
166+
private long GetCurrentTicks()
167+
{
168+
return Environment.TickCount * TimeSpan.TicksPerMillisecond;
169+
}
170+
}
99171
}
100172

101173
#endif

0 commit comments

Comments
 (0)