2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System.Data.Linq / src / DbLinq / Util / Profiler.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Linq;\r
4 using System.Text;\r
5 using System.Diagnostics;\r
6 using System.IO;\r
7 \r
8 namespace DbLinq.Util\r
9 {\r
10 #if !MONO_STRICT\r
11     public\r
12 #endif\r
13     static class Profiler\r
14     {\r
15         [ThreadStatic]\r
16         private static Stopwatch timer = new Stopwatch();\r
17 \r
18         private static Stopwatch Timer\r
19         {\r
20             get \r
21             {\r
22                 if (timer == null)\r
23                     timer = new Stopwatch();\r
24                 return timer;\r
25             }\r
26         }\r
27 \r
28         [ThreadStatic]\r
29         private static long prevTicks;\r
30         [ThreadStatic]\r
31         private static bool profiling;\r
32         [ThreadStatic]\r
33         private static TextWriter log;\r
34 \r
35         private static TextWriter Log\r
36         {\r
37             get\r
38             {\r
39                 if (log == null)\r
40                     log = Console.Out;\r
41                 return log;\r
42             }\r
43             set \r
44             { \r
45                 log = value; \r
46             }\r
47         }\r
48 \r
49         [Conditional("DEBUG")]\r
50         public static void Start()\r
51         {\r
52             profiling = true;\r
53             prevTicks = 0;\r
54             Timer.Reset();\r
55             Timer.Start();\r
56         }\r
57 \r
58         [Conditional("DEBUG")]\r
59         public static void At(string format, params object[] args)\r
60         {\r
61             if (profiling)\r
62             {\r
63                 Timer.Stop();\r
64                 Log.Write("#AT(time={0:D12}, elapsed={1:D12}) ", Timer.ElapsedTicks, Timer.ElapsedTicks - prevTicks);\r
65                 prevTicks = Timer.ElapsedTicks;\r
66                 Log.WriteLine(format, args);\r
67                 Timer.Start();\r
68             }\r
69         }\r
70 \r
71         [Conditional("DEBUG")]\r
72         public static void Stop()\r
73         {\r
74             profiling = false;\r
75             Timer.Stop();\r
76         }\r
77     }\r
78 }