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#include "webrtc/system_wrappers/interface/event_tracer.h"
12b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
13c6d6fed3c0a82bb7a09095381b974e8e5eebcb35pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h"
14b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org#include "webrtc/system_wrappers/interface/static_instance.h"
15b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org#include "webrtc/system_wrappers/interface/trace_event.h"
16b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
17b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgnamespace {
18b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
19b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgclass TestStatistics {
20b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org public:
21b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  TestStatistics() : events_logged_(0) {
22b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  }
23b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
24b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  void Reset() {
25b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    events_logged_ = 0;
26b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  }
27b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
28b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  void Increment() {
29b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    ++events_logged_;
30b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  }
31b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
32b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  int Count() const { return events_logged_; }
33b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
34b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  static TestStatistics* Get() {
35b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    static TestStatistics* test_stats = NULL;
36b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    if (!test_stats)
37b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org      test_stats = new TestStatistics();
38b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    return test_stats;
39b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  }
40b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
41b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org private:
42b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  int events_logged_;
43b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org};
44b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
45b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgstatic const unsigned char* GetCategoryEnabledHandler(const char* name) {
46b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  return reinterpret_cast<const unsigned char*>("test");
47b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}
48b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
4962b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.orgstatic void AddTraceEventHandler(char phase,
5062b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const unsigned char* category_enabled,
5162b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const char* name,
5262b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 unsigned long long id,
5362b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 int num_args,
5462b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const char** arg_names,
5562b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const unsigned char* arg_types,
5662b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 const unsigned long long* arg_values,
5762b6fbb187a5f7bb74f723651b78ef0fedffd643hclam@chromium.org                                 unsigned char flags) {
58b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  TestStatistics::Get()->Increment();
59b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}
60b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
61b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}  // namespace
62b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
63b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgnamespace webrtc {
64b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
65b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgTEST(EventTracerTest, EventTracerDisabled) {
66b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  {
67b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    TRACE_EVENT0("test", "EventTracerDisabled");
68b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  }
69b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  EXPECT_FALSE(TestStatistics::Get()->Count());
70b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  TestStatistics::Get()->Reset();
71b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}
72b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
73b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.orgTEST(EventTracerTest, ScopedTraceEvent) {
74b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  SetupEventTracer(&GetCategoryEnabledHandler, &AddTraceEventHandler);
75b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  {
76b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org    TRACE_EVENT0("test", "ScopedTraceEvent");
77b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  }
78b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  EXPECT_EQ(2, TestStatistics::Get()->Count());
79b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org  TestStatistics::Get()->Reset();
80b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}
81b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org
82b3395ecff385514a116c32d47b2a57e4f72f225ehclam@chromium.org}  // namespace webrtc
83