blob: f181ad2177d907e3a60b4669d804430901932b18 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
henrike@webrtc.org0e7c0602012-02-08 18:53:50 +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
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000011#include "webrtc/system_wrappers/source/trace_posix.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
pbos@webrtc.org12dc1a32013-08-05 16:22:53 +000013#include <assert.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000014#include <stdarg.h>
15#include <stdio.h>
16#include <string.h>
henrike@webrtc.org0e7c0602012-02-08 18:53:50 +000017#include <sys/time.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000018#include <time.h>
pbos@webrtc.org12dc1a32013-08-05 16:22:53 +000019
niklase@google.com470e71d2011-07-07 08:21:25 +000020namespace webrtc {
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000021
kthelgasond701dfd2017-03-27 07:24:57 -070022TracePosix::TracePosix() {
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000023 struct timeval system_time_high_res;
24 gettimeofday(&system_time_high_res, 0);
25 prev_api_tick_count_ = prev_tick_count_ = system_time_high_res.tv_sec;
niklase@google.com470e71d2011-07-07 08:21:25 +000026}
27
pbos@webrtc.org046deb92013-04-09 09:06:11 +000028int32_t TracePosix::AddTime(char* trace_message, const TraceLevel level) const {
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000029 struct timeval system_time_high_res;
30 if (gettimeofday(&system_time_high_res, 0) == -1) {
31 return -1;
32 }
33 struct tm buffer;
34 const struct tm* system_time =
35 localtime_r(&system_time_high_res.tv_sec, &buffer);
henrike@webrtc.org0e7c0602012-02-08 18:53:50 +000036
pbos@webrtc.org046deb92013-04-09 09:06:11 +000037 const uint32_t ms_time = system_time_high_res.tv_usec / 1000;
38 uint32_t prev_tickCount = 0;
henrika@webrtc.org19da7192013-04-05 14:34:57 +000039 {
kthelgasond701dfd2017-03-27 07:24:57 -070040 rtc::CritScope lock(&crit_sect_);
henrika@webrtc.org19da7192013-04-05 14:34:57 +000041 if (level == kTraceApiCall) {
42 prev_tickCount = prev_tick_count_;
43 prev_tick_count_ = ms_time;
44 } else {
45 prev_tickCount = prev_api_tick_count_;
46 prev_api_tick_count_ = ms_time;
47 }
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000048 }
henrika@webrtc.org19da7192013-04-05 14:34:57 +000049
pbos@webrtc.org046deb92013-04-09 09:06:11 +000050 uint32_t dw_delta_time = ms_time - prev_tickCount;
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000051 if (prev_tickCount == 0) {
52 dw_delta_time = 0;
53 }
54 if (dw_delta_time > 0x0fffffff) {
55 // Either wraparound or data race.
56 dw_delta_time = 0;
57 }
58 if (dw_delta_time > 99999) {
59 dw_delta_time = 99999;
60 }
henrike@webrtc.org0e7c0602012-02-08 18:53:50 +000061
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000062 sprintf(trace_message, "(%2u:%2u:%2u:%3u |%5lu) ", system_time->tm_hour,
63 system_time->tm_min, system_time->tm_sec, ms_time,
64 static_cast<unsigned long>(dw_delta_time));
65 // Messages are 22 characters.
66 return 22;
niklase@google.com470e71d2011-07-07 08:21:25 +000067}
68
pbos@webrtc.org046deb92013-04-09 09:06:11 +000069int32_t TracePosix::AddDateTimeInfo(char* trace_message) const {
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000070 time_t t;
71 time(&t);
72 char buffer[26]; // man ctime says buffer should have room for >=26 bytes.
73 sprintf(trace_message, "Local Date: %s", ctime_r(&t, buffer));
pbos@webrtc.org046deb92013-04-09 09:06:11 +000074 int32_t len = static_cast<int32_t>(strlen(trace_message));
niklase@google.com470e71d2011-07-07 08:21:25 +000075
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000076 if ('\n' == trace_message[len - 1]) {
77 trace_message[len - 1] = '\0';
78 --len;
79 }
niklase@google.com470e71d2011-07-07 08:21:25 +000080
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000081 // Messages is 12 characters.
82 return len + 1;
niklase@google.com470e71d2011-07-07 08:21:25 +000083}
phoglund@webrtc.orgdaabfd22013-01-03 09:37:03 +000084
85} // namespace webrtc