1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
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
11 #include "webrtc/system_wrappers/source/trace_win.h"
12
13 #include <assert.h>
14 #include <stdarg.h>
15
16 #include "Mmsystem.h"
17
18 namespace webrtc {
TraceWindows()19 TraceWindows::TraceWindows()
20 : prev_api_tick_count_(0),
21 prev_tick_count_(0) {
22 }
23
~TraceWindows()24 TraceWindows::~TraceWindows() {
25 }
26
AddTime(char * trace_message,const TraceLevel level) const27 int32_t TraceWindows::AddTime(char* trace_message,
28 const TraceLevel level) const {
29 uint32_t dw_current_time = timeGetTime();
30 SYSTEMTIME system_time;
31 GetSystemTime(&system_time);
32
33 if (level == kTraceApiCall) {
34 uint32_t dw_delta_time = dw_current_time - prev_tick_count_;
35 prev_tick_count_ = dw_current_time;
36
37 if (prev_tick_count_ == 0) {
38 dw_delta_time = 0;
39 }
40 if (dw_delta_time > 0x0fffffff) {
41 // Either wrap-around or data race.
42 dw_delta_time = 0;
43 }
44 if (dw_delta_time > 99999) {
45 dw_delta_time = 99999;
46 }
47
48 sprintf(trace_message, "(%2u:%2u:%2u:%3u |%5u) ", system_time.wHour,
49 system_time.wMinute, system_time.wSecond,
50 system_time.wMilliseconds, dw_delta_time);
51 } else {
52 uint32_t dw_delta_time = dw_current_time - prev_api_tick_count_;
53 prev_api_tick_count_ = dw_current_time;
54
55 if (prev_api_tick_count_ == 0) {
56 dw_delta_time = 0;
57 }
58 if (dw_delta_time > 0x0fffffff) {
59 // Either wraparound or data race.
60 dw_delta_time = 0;
61 }
62 if (dw_delta_time > 99999) {
63 dw_delta_time = 99999;
64 }
65 sprintf(trace_message, "(%2u:%2u:%2u:%3u |%5u) ", system_time.wHour,
66 system_time.wMinute, system_time.wSecond,
67 system_time.wMilliseconds, dw_delta_time);
68 }
69 return 22;
70 }
71
AddDateTimeInfo(char * trace_message) const72 int32_t TraceWindows::AddDateTimeInfo(char* trace_message) const {
73 prev_api_tick_count_ = timeGetTime();
74 prev_tick_count_ = prev_api_tick_count_;
75
76 SYSTEMTIME sys_time;
77 GetLocalTime(&sys_time);
78
79 TCHAR sz_date_str[20];
80 TCHAR sz_time_str[20];
81
82 // Create date string (e.g. Apr 04 2002)
83 GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &sys_time, TEXT("MMM dd yyyy"),
84 sz_date_str, 20);
85
86 // Create time string (e.g. 15:32:08)
87 GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, &sys_time, TEXT("HH':'mm':'ss"),
88 sz_time_str, 20);
89
90 sprintf(trace_message, "Local Date: %ls Local Time: %ls", sz_date_str,
91 sz_time_str);
92
93 // Include NULL termination (hence + 1).
94 return static_cast<int32_t>(strlen(trace_message) + 1);
95 }
96
97 } // namespace webrtc
98