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