1b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org/*
2b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *
4b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *  Use of this source code is governed by a BSD-style license
5b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org */
10b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
11b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// This file defines the interface for event tracing in WebRTC.
12b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//
13b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// Event log handlers are set through SetupEventTracer(). User of this API will
14b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// provide two function pointers to handle event tracing calls.
15b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//
16b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// * GetCategoryEnabledPtr
17b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//   Event tracing system calls this function to determine if a particular
18b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//   event category is enabled.
19b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//
20b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// * AddTraceEventPtr
21b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//   Adds a tracing event. It is the user's responsibility to log the data
22b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//   provided.
23b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//
24b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// Parameters for the above two functions are described in trace_event.h.
25b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
26b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_EVENT_TRACER_H_
27b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_EVENT_TRACER_H_
28b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
29b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org#include "webrtc/common_types.h"
30b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
31b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgnamespace webrtc {
32b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
33b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgtypedef const unsigned char* (*GetCategoryEnabledPtr)(const char* name);
3462b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.orgtypedef void (*AddTraceEventPtr)(char phase,
3562b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const unsigned char* category_enabled,
3662b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const char* name,
3762b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 unsigned long long id,
3862b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 int num_args,
3962b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const char** arg_names,
4062b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const unsigned char* arg_types,
4162b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const unsigned long long* arg_values,
4262b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 unsigned char flags);
43b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
44b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// User of WebRTC can call this method to setup event tracing.
45b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org//
46b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// This method must be called before any WebRTC methods. Functions
47b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// provided should be thread-safe.
48b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgWEBRTC_DLLEXPORT void SetupEventTracer(
49b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    GetCategoryEnabledPtr get_category_enabled_ptr,
50b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    AddTraceEventPtr add_trace_event_ptr);
51b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
52b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// This class defines interface for the event tracing system to call
53b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org// internally. Do not call these methods directly.
54b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgclass EventTracer {
55b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org public:
56b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  static const unsigned char* GetCategoryEnabled(
57b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      const char* name);
58b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
5962b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org  static void AddTraceEvent(
60b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      char phase,
61b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      const unsigned char* category_enabled,
62b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      const char* name,
63b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      unsigned long long id,
64b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      int num_args,
65b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      const char** arg_names,
66b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      const unsigned char* arg_types,
67b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      const unsigned long long* arg_values,
68b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      unsigned char flags);
69b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org};
70b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
71b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}  // namespace webrtc
72b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
73b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org#endif  // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_EVENT_TRACER_H_
74