diff options
author | andrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-10-22 18:19:23 +0000 |
---|---|---|
committer | andrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-10-22 18:19:23 +0000 |
commit | b015cbede88899f67a53fbbe581b02ce8e327949 (patch) | |
tree | 530a64a3cfdbbabacab974c183326517d49e761e /system_wrappers/source/trace_posix.cc | |
download | webrtc-b015cbede88899f67a53fbbe581b02ce8e327949.tar.gz |
Move src/ -> webrtc/
TBR=niklas.enbom@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/915006
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@2963 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'system_wrappers/source/trace_posix.cc')
-rw-r--r-- | system_wrappers/source/trace_posix.cc | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/system_wrappers/source/trace_posix.cc b/system_wrappers/source/trace_posix.cc new file mode 100644 index 00000000..1b8dd934 --- /dev/null +++ b/system_wrappers/source/trace_posix.cc @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "trace_posix.h" + +#include <cassert> +#include <stdarg.h> +#include <stdio.h> +#include <string.h> +#include <sys/time.h> +#include <time.h> +#ifdef WEBRTC_ANDROID + #include <pthread.h> +#else + #include <iostream> +#endif + +#if defined(_DEBUG) + #define BUILDMODE "d" +#elif defined(DEBUG) + #define BUILDMODE "d" +#elif defined(NDEBUG) + #define BUILDMODE "r" +#else + #define BUILDMODE "?" +#endif +#define BUILDTIME __TIME__ +#define BUILDDATE __DATE__ +// example: "Oct 10 2002 12:05:30 r" +#define BUILDINFO BUILDDATE " " BUILDTIME " " BUILDMODE + +namespace webrtc { +TracePosix::TracePosix() +{ + struct timeval systemTimeHighRes; + gettimeofday(&systemTimeHighRes, 0); + _prevAPITickCount = _prevTickCount = systemTimeHighRes.tv_sec; +} + +TracePosix::~TracePosix() +{ + StopThread(); +} + +WebRtc_Word32 TracePosix::AddTime(char* traceMessage, + const TraceLevel level) const +{ + struct timeval systemTimeHighRes; + if (gettimeofday(&systemTimeHighRes, 0) == -1) + { + return -1; + } + struct tm buffer; + const struct tm* systemTime = + localtime_r(&systemTimeHighRes.tv_sec, &buffer); + + const WebRtc_UWord32 ms_time = systemTimeHighRes.tv_usec / 1000; + WebRtc_UWord32 prevTickCount = 0; + if (level == kTraceApiCall) + { + prevTickCount = _prevTickCount; + _prevTickCount = ms_time; + } else { + prevTickCount = _prevAPITickCount; + _prevAPITickCount = ms_time; + } + WebRtc_UWord32 dwDeltaTime = ms_time - prevTickCount; + if (prevTickCount == 0) + { + dwDeltaTime = 0; + } + if (dwDeltaTime > 0x0fffffff) + { + // Either wraparound or data race. + dwDeltaTime = 0; + } + if(dwDeltaTime > 99999) + { + dwDeltaTime = 99999; + } + + sprintf(traceMessage, "(%2u:%2u:%2u:%3u |%5lu) ", systemTime->tm_hour, + systemTime->tm_min, systemTime->tm_sec, ms_time, + static_cast<unsigned long>(dwDeltaTime)); + // Messages are 22 characters. + return 22; +} + +WebRtc_Word32 TracePosix::AddBuildInfo(char* traceMessage) const +{ + sprintf(traceMessage, "Build info: %s", BUILDINFO); + // Include NULL termination (hence + 1). + return strlen(traceMessage) + 1; +} + +WebRtc_Word32 TracePosix::AddDateTimeInfo(char* traceMessage) const +{ + time_t t; + time(&t); + char buffer[26]; // man ctime says buffer should have room for >=26 bytes. + sprintf(traceMessage, "Local Date: %s", ctime_r(&t, buffer)); + WebRtc_Word32 len = static_cast<WebRtc_Word32>(strlen(traceMessage)); + + if ('\n' == traceMessage[len - 1]) + { + traceMessage[len - 1] = '\0'; + --len; + } + + // Messages is 12 characters. + return len + 1; +} +} // namespace webrtc |