Home | History | Annotate | Download | only in base
      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 // This file defines the interface for event tracing in WebRTC.
     12 //
     13 // Event log handlers are set through SetupEventTracer(). User of this API will
     14 // provide two function pointers to handle event tracing calls.
     15 //
     16 // * GetCategoryEnabledPtr
     17 //   Event tracing system calls this function to determine if a particular
     18 //   event category is enabled.
     19 //
     20 // * AddTraceEventPtr
     21 //   Adds a tracing event. It is the user's responsibility to log the data
     22 //   provided.
     23 //
     24 // Parameters for the above two functions are described in trace_event.h.
     25 
     26 #ifndef WEBRTC_BASE_EVENT_TRACER_H_
     27 #define WEBRTC_BASE_EVENT_TRACER_H_
     28 
     29 #include <stdio.h>
     30 
     31 namespace webrtc {
     32 
     33 typedef const unsigned char* (*GetCategoryEnabledPtr)(const char* name);
     34 typedef void (*AddTraceEventPtr)(char phase,
     35                                  const unsigned char* category_enabled,
     36                                  const char* name,
     37                                  unsigned long long id,
     38                                  int num_args,
     39                                  const char** arg_names,
     40                                  const unsigned char* arg_types,
     41                                  const unsigned long long* arg_values,
     42                                  unsigned char flags);
     43 
     44 // User of WebRTC can call this method to setup event tracing.
     45 //
     46 // This method must be called before any WebRTC methods. Functions
     47 // provided should be thread-safe.
     48 void SetupEventTracer(
     49     GetCategoryEnabledPtr get_category_enabled_ptr,
     50     AddTraceEventPtr add_trace_event_ptr);
     51 
     52 // This class defines interface for the event tracing system to call
     53 // internally. Do not call these methods directly.
     54 class EventTracer {
     55  public:
     56   static const unsigned char* GetCategoryEnabled(
     57       const char* name);
     58 
     59   static void AddTraceEvent(
     60       char phase,
     61       const unsigned char* category_enabled,
     62       const char* name,
     63       unsigned long long id,
     64       int num_args,
     65       const char** arg_names,
     66       const unsigned char* arg_types,
     67       const unsigned long long* arg_values,
     68       unsigned char flags);
     69 };
     70 
     71 }  // namespace webrtc
     72 
     73 namespace rtc {
     74 namespace tracing {
     75 // Set up internal event tracer.
     76 void SetupInternalTracer();
     77 bool StartInternalCapture(const char* filename);
     78 void StartInternalCaptureToFile(FILE* file);
     79 void StopInternalCapture();
     80 // Make sure we run this, this will tear down the internal tracing.
     81 void ShutdownInternalTracer();
     82 }  // namespace tracing
     83 }  // namespace rtc
     84 
     85 #endif  // WEBRTC_BASE_EVENT_TRACER_H_
     86