blob: f81ed8b044fe0dc5312b5f844e4664ea259aa354 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
andrew@webrtc.orge713fd02012-04-10 07:13:46 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
andrew@webrtc.org59ccd5c2011-12-15 00:17:43 +000011#include "trace_win.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
13#include <cassert>
14#include <stdarg.h>
15
16#include "Mmsystem.h"
17
18#if defined(_DEBUG)
19 #define BUILDMODE "d"
20#elif defined(DEBUG)
21 #define BUILDMODE "d"
22#elif defined(NDEBUG)
23 #define BUILDMODE "r"
24#else
25 #define BUILDMODE "?"
26#endif
27#define BUILDTIME __TIME__
28#define BUILDDATE __DATE__
29// Example: "Oct 10 2002 12:05:30 r"
30#define BUILDINFO BUILDDATE " " BUILDTIME " " BUILDMODE
31
32namespace webrtc {
33TraceWindows::TraceWindows()
34 : _prevAPITickCount(0),
35 _prevTickCount(0)
36{
37}
38
39TraceWindows::~TraceWindows()
40{
41 StopThread();
42}
43
niklase@google.com470e71d2011-07-07 08:21:25 +000044WebRtc_Word32 TraceWindows::AddTime(char* traceMessage,
45 const TraceLevel level) const
46{
47 WebRtc_UWord32 dwCurrentTime = timeGetTime();
48 SYSTEMTIME systemTime;
49 GetSystemTime(&systemTime);
50
51 if(level == kTraceApiCall)
52 {
53 WebRtc_UWord32 dwDeltaTime = dwCurrentTime- _prevTickCount;
54 _prevTickCount = dwCurrentTime;
55
56 if(_prevTickCount == 0)
57 {
58 dwDeltaTime = 0;
59 }
60 if(dwDeltaTime > 0x0fffffff)
61 {
62 // Either wraparound or data race.
63 dwDeltaTime = 0;
64 }
65 if(dwDeltaTime > 99999)
66 {
67 dwDeltaTime = 99999;
68 }
69
70 sprintf (traceMessage, "(%2u:%2u:%2u:%3u |%5lu) ", systemTime.wHour,
71 systemTime.wMinute, systemTime.wSecond,
72 systemTime.wMilliseconds, dwDeltaTime);
73 } else {
74 WebRtc_UWord32 dwDeltaTime = dwCurrentTime - _prevAPITickCount;
75 _prevAPITickCount = dwCurrentTime;
76
77 if(_prevAPITickCount == 0)
78 {
79 dwDeltaTime = 0;
80 }
81 if(dwDeltaTime > 0x0fffffff)
82 {
83 // Either wraparound or data race.
84 dwDeltaTime = 0;
85 }
86 if(dwDeltaTime > 99999)
87 {
88 dwDeltaTime = 99999;
89 }
90 sprintf (traceMessage, "(%2u:%2u:%2u:%3u |%5lu) ", systemTime.wHour,
91 systemTime.wMinute, systemTime.wSecond,
92 systemTime.wMilliseconds, dwDeltaTime);
93 }
94 // Messages is 12 characters.
95 return 22;
96}
97
98WebRtc_Word32 TraceWindows::AddBuildInfo(char* traceMessage) const
99{
100 // write data and time to text file
101 sprintf(traceMessage, "Build info: %s", BUILDINFO);
102 // Include NULL termination (hence + 1).
103 return static_cast<WebRtc_Word32>(strlen(traceMessage)+1);
104}
105
106WebRtc_Word32 TraceWindows::AddDateTimeInfo(char* traceMessage) const
107{
108 _prevAPITickCount = timeGetTime();
109 _prevTickCount = _prevAPITickCount;
110
111 SYSTEMTIME sysTime;
112 GetLocalTime (&sysTime);
113
114 TCHAR szDateStr[20];
115 TCHAR szTimeStr[20];
niklase@google.com470e71d2011-07-07 08:21:25 +0000116
117 // Create date string (e.g. Apr 04 2002)
118 GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, TEXT("MMM dd yyyy"),
119 szDateStr, 20);
120
121 // Create time string (e.g. 15:32:08)
122 GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, TEXT("HH':'mm':'ss"),
123 szTimeStr, 20);
124
125 sprintf(traceMessage, "Local Date: %s Local Time: %s", szDateStr,
126 szTimeStr);
127
128 // Include NULL termination (hence + 1).
129 return static_cast<WebRtc_Word32>(strlen(traceMessage)+ 1);
130}
131} // namespace webrtc