Home | History | Annotate | Download | only in source
      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 "trace_win.h"
     12 
     13 #include <cassert>
     14 #include <stdarg.h>
     15 
     16 #include "Mmsystem.h"
     17 
     18 #if defined(_DEBUG)
     19     #define BUILDMODE "d"
     20 #elif defined(DEBUG)
     21     #define BUILDMODE "d"
     22 #elif defined(NDEBUG)
     23     #define BUILDMODE "r"
     24 #else
     25     #define BUILDMODE "?"
     26 #endif
     27 #define BUILDTIME __TIME__
     28 #define BUILDDATE __DATE__
     29 // Example: "Oct 10 2002 12:05:30 r"
     30 #define BUILDINFO BUILDDATE " " BUILDTIME " " BUILDMODE
     31 
     32 namespace webrtc {
     33 TraceWindows::TraceWindows()
     34     : _prevAPITickCount(0),
     35       _prevTickCount(0)
     36 {
     37 }
     38 
     39 TraceWindows::~TraceWindows()
     40 {
     41     StopThread();
     42 }
     43 
     44 WebRtc_Word32 TraceWindows::AddTime(char* traceMessage,
     45                                     const TraceLevel level) const
     46 {
     47     WebRtc_UWord32 dwCurrentTime = timeGetTime();
     48     SYSTEMTIME systemTime;
     49     GetSystemTime(&systemTime);
     50 
     51     if(level == kTraceApiCall)
     52     {
     53         WebRtc_UWord32 dwDeltaTime = dwCurrentTime- _prevTickCount;
     54         _prevTickCount = dwCurrentTime;
     55 
     56         if(_prevTickCount == 0)
     57         {
     58             dwDeltaTime = 0;
     59         }
     60         if(dwDeltaTime > 0x0fffffff)
     61         {
     62             // Either wraparound or data race.
     63             dwDeltaTime = 0;
     64         }
     65         if(dwDeltaTime > 99999)
     66         {
     67             dwDeltaTime = 99999;
     68         }
     69 
     70         sprintf (traceMessage, "(%2u:%2u:%2u:%3u |%5lu) ", systemTime.wHour,
     71                  systemTime.wMinute, systemTime.wSecond,
     72                  systemTime.wMilliseconds, dwDeltaTime);
     73     } else {
     74         WebRtc_UWord32 dwDeltaTime = dwCurrentTime - _prevAPITickCount;
     75         _prevAPITickCount = dwCurrentTime;
     76 
     77         if(_prevAPITickCount == 0)
     78         {
     79             dwDeltaTime = 0;
     80         }
     81         if(dwDeltaTime > 0x0fffffff)
     82         {
     83             // Either wraparound or data race.
     84             dwDeltaTime = 0;
     85         }
     86         if(dwDeltaTime > 99999)
     87         {
     88             dwDeltaTime = 99999;
     89         }
     90         sprintf (traceMessage, "(%2u:%2u:%2u:%3u |%5lu) ", systemTime.wHour,
     91                  systemTime.wMinute, systemTime.wSecond,
     92                  systemTime.wMilliseconds, dwDeltaTime);
     93     }
     94     // Messages is 12 characters.
     95     return 22;
     96 }
     97 
     98 WebRtc_Word32 TraceWindows::AddBuildInfo(char* traceMessage) const
     99 {
    100     // write data and time to text file
    101     sprintf(traceMessage, "Build info: %s", BUILDINFO);
    102     // Include NULL termination (hence + 1).
    103     return static_cast<WebRtc_Word32>(strlen(traceMessage)+1);
    104 }
    105 
    106 WebRtc_Word32 TraceWindows::AddDateTimeInfo(char* traceMessage) const
    107 {
    108     _prevAPITickCount = timeGetTime();
    109     _prevTickCount = _prevAPITickCount;
    110 
    111     SYSTEMTIME sysTime;
    112     GetLocalTime (&sysTime);
    113 
    114     TCHAR szDateStr[20];
    115     TCHAR szTimeStr[20];
    116 
    117     // Create date string (e.g. Apr 04 2002)
    118     GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, TEXT("MMM dd yyyy"),
    119                   szDateStr, 20);
    120 
    121     // Create time string (e.g. 15:32:08)
    122     GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, TEXT("HH':'mm':'ss"),
    123                   szTimeStr, 20);
    124 
    125     sprintf(traceMessage, "Local Date: %s Local Time: %s", szDateStr,
    126             szTimeStr);
    127 
    128     // Include NULL termination (hence + 1).
    129     return static_cast<WebRtc_Word32>(strlen(traceMessage)+ 1);
    130 }
    131 } // namespace webrtc
    132