summaryrefslogtreecommitdiff
path: root/system_wrappers/source/trace_posix.cc
diff options
context:
space:
mode:
authorandrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2012-10-22 18:19:23 +0000
committerandrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2012-10-22 18:19:23 +0000
commitb015cbede88899f67a53fbbe581b02ce8e327949 (patch)
tree530a64a3cfdbbabacab974c183326517d49e761e /system_wrappers/source/trace_posix.cc
downloadwebrtc-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.cc120
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