1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file.
4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/debug/trace_event_system_stats_monitor.h"
6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <sstream>
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <string>
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/debug/trace_event_impl.h"
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/message_loop/message_loop.h"
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace base {
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace debug {
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if !defined(OS_IOS)
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Tests for the system stats monitor.
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Exists as a class so it can be a friend of TraceEventSystemStatsMonitor.
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class TraceSystemStatsMonitorTest : public testing::Test {
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public:
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  TraceSystemStatsMonitorTest() {}
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual ~TraceSystemStatsMonitorTest() {}
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private:
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TraceSystemStatsMonitorTest);
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)};
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(TraceSystemStatsMonitorTest, TraceEventSystemStatsMonitor) {
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  MessageLoop message_loop;
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Start with no observers of the TraceLog.
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Creating a system stats monitor adds it to the TraceLog observer list.
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<TraceEventSystemStatsMonitor> system_stats_monitor(
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      new TraceEventSystemStatsMonitor(
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)          message_loop.message_loop_proxy()));
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest());
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      TraceLog::GetInstance()->HasEnabledStateObserver(
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)          system_stats_monitor.get()));
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // By default the observer isn't dumping memory profiles.
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(system_stats_monitor->IsTimerRunningForTest());
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Simulate enabling tracing.
50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  system_stats_monitor->StartProfiling();
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  message_loop.RunUntilIdle();
52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(system_stats_monitor->IsTimerRunningForTest());
53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Simulate disabling tracing.
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  system_stats_monitor->StopProfiling();
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  message_loop.RunUntilIdle();
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(system_stats_monitor->IsTimerRunningForTest());
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Deleting the observer removes it from the TraceLog observer list.
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  system_stats_monitor.reset();
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif  // !defined(OS_IOS)
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace debug
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace base
67