webrtc/system_wrappers/source/trace_windows.cc

142 lines
3.8 KiB
C++

/*
* Copyright (c) 2011 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_windows.h"
#include <cassert>
#include <stdarg.h>
#include "Mmsystem.h"
#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 {
TraceWindows::TraceWindows()
: _prevAPITickCount(0),
_prevTickCount(0)
{
}
TraceWindows::~TraceWindows()
{
StopThread();
}
WebRtc_Word32 TraceWindows::AddThreadId(char* traceMessage) const
{
WebRtc_UWord32 threadId= GetCurrentThreadId();
sprintf (traceMessage, "%10u; ", threadId);
// Messages is 12 characters.
return 12;
}
WebRtc_Word32 TraceWindows::AddTime(char* traceMessage,
const TraceLevel level) const
{
WebRtc_UWord32 dwCurrentTime = timeGetTime();
SYSTEMTIME systemTime;
GetSystemTime(&systemTime);
if(level == kTraceApiCall)
{
WebRtc_UWord32 dwDeltaTime = dwCurrentTime- _prevTickCount;
_prevTickCount = dwCurrentTime;
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.wHour,
systemTime.wMinute, systemTime.wSecond,
systemTime.wMilliseconds, dwDeltaTime);
} else {
WebRtc_UWord32 dwDeltaTime = dwCurrentTime - _prevAPITickCount;
_prevAPITickCount = dwCurrentTime;
if(_prevAPITickCount == 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.wHour,
systemTime.wMinute, systemTime.wSecond,
systemTime.wMilliseconds, dwDeltaTime);
}
// Messages is 12 characters.
return 22;
}
WebRtc_Word32 TraceWindows::AddBuildInfo(char* traceMessage) const
{
// write data and time to text file
sprintf(traceMessage, "Build info: %s", BUILDINFO);
// Include NULL termination (hence + 1).
return static_cast<WebRtc_Word32>(strlen(traceMessage)+1);
}
WebRtc_Word32 TraceWindows::AddDateTimeInfo(char* traceMessage) const
{
_prevAPITickCount = timeGetTime();
_prevTickCount = _prevAPITickCount;
SYSTEMTIME sysTime;
GetLocalTime (&sysTime);
TCHAR szDateStr[20];
TCHAR szTimeStr[20];
TCHAR *pSzDateStr = szDateStr;
TCHAR *pSzTimeStr = szTimeStr;
// Create date string (e.g. Apr 04 2002)
GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, TEXT("MMM dd yyyy"),
szDateStr, 20);
// Create time string (e.g. 15:32:08)
GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, TEXT("HH':'mm':'ss"),
szTimeStr, 20);
sprintf(traceMessage, "Local Date: %s Local Time: %s", szDateStr,
szTimeStr);
// Include NULL termination (hence + 1).
return static_cast<WebRtc_Word32>(strlen(traceMessage)+ 1);
}
} // namespace webrtc