|  | // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/debug/trace_event_system_stats_monitor.h" | 
|  |  | 
|  | #include <sstream> | 
|  | #include <string> | 
|  |  | 
|  | #include "base/debug/trace_event_impl.h" | 
|  | #include "base/message_loop/message_loop.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace debug { | 
|  |  | 
|  | #if !defined(OS_IOS) | 
|  | // Tests for the system stats monitor. | 
|  | // Exists as a class so it can be a friend of TraceEventSystemStatsMonitor. | 
|  | class TraceSystemStatsMonitorTest : public testing::Test { | 
|  | public: | 
|  | TraceSystemStatsMonitorTest() {} | 
|  | virtual ~TraceSystemStatsMonitorTest() {} | 
|  |  | 
|  | private: | 
|  | DISALLOW_COPY_AND_ASSIGN(TraceSystemStatsMonitorTest); | 
|  | }; | 
|  |  | 
|  | ////////////////////////////////////////////////////////////////////////////// | 
|  |  | 
|  | TEST_F(TraceSystemStatsMonitorTest, TraceEventSystemStatsMonitor) { | 
|  | MessageLoop message_loop; | 
|  |  | 
|  | // Start with no observers of the TraceLog. | 
|  | EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 
|  |  | 
|  | // Creating a system stats monitor adds it to the TraceLog observer list. | 
|  | scoped_ptr<TraceEventSystemStatsMonitor> system_stats_monitor( | 
|  | new TraceEventSystemStatsMonitor( | 
|  | message_loop.message_loop_proxy())); | 
|  | EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); | 
|  | EXPECT_TRUE( | 
|  | TraceLog::GetInstance()->HasEnabledStateObserver( | 
|  | system_stats_monitor.get())); | 
|  |  | 
|  | // By default the observer isn't dumping memory profiles. | 
|  | EXPECT_FALSE(system_stats_monitor->IsTimerRunningForTest()); | 
|  |  | 
|  | // Simulate enabling tracing. | 
|  | system_stats_monitor->StartProfiling(); | 
|  | message_loop.RunUntilIdle(); | 
|  | EXPECT_TRUE(system_stats_monitor->IsTimerRunningForTest()); | 
|  |  | 
|  | // Simulate disabling tracing. | 
|  | system_stats_monitor->StopProfiling(); | 
|  | message_loop.RunUntilIdle(); | 
|  | EXPECT_FALSE(system_stats_monitor->IsTimerRunningForTest()); | 
|  |  | 
|  | // Deleting the observer removes it from the TraceLog observer list. | 
|  | system_stats_monitor.reset(); | 
|  | EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 
|  | } | 
|  | #endif  // !defined(OS_IOS) | 
|  |  | 
|  | }  // namespace debug | 
|  | }  // namespace base |