// Copyright 2017 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 "gin/public/v8_platform.h" #include "base/trace_event/trace_event.h" #include "testing/gtest/include/gtest/gtest.h" class TestTraceStateObserver : public NON_EXPORTED_BASE(v8::Platform::TraceStateObserver) { public: void OnTraceEnabled() final { ++enabled_; } void OnTraceDisabled() final { ++disabled_; } int Enabled() { return enabled_; } int Disabled() { return disabled_; } private: int enabled_ = 0; int disabled_ = 0; }; namespace gin { TEST(V8PlatformTest, TraceStateObserverAPI) { TestTraceStateObserver* test_observer = new TestTraceStateObserver(); ASSERT_EQ(0, test_observer->Enabled()); ASSERT_EQ(0, test_observer->Disabled()); V8Platform::Get()->AddTraceStateObserver(test_observer); base::trace_event::TraceLog::GetInstance()->SetEnabled( base::trace_event::TraceConfig("*", ""), base::trace_event::TraceLog::RECORDING_MODE); ASSERT_EQ(1, test_observer->Enabled()); ASSERT_EQ(0, test_observer->Disabled()); base::trace_event::TraceLog::GetInstance()->SetDisabled(); ASSERT_EQ(1, test_observer->Enabled()); ASSERT_EQ(1, test_observer->Disabled()); V8Platform::Get()->RemoveTraceStateObserver(test_observer); base::trace_event::TraceLog::GetInstance()->SetEnabled( base::trace_event::TraceConfig("*", ""), base::trace_event::TraceLog::RECORDING_MODE); base::trace_event::TraceLog::GetInstance()->SetDisabled(); ASSERT_EQ(1, test_observer->Enabled()); ASSERT_EQ(1, test_observer->Disabled()); } TEST(V8PlatformTest, TraceStateObserverFired) { TestTraceStateObserver* test_observer = new TestTraceStateObserver(); ASSERT_EQ(0, test_observer->Enabled()); ASSERT_EQ(0, test_observer->Disabled()); base::trace_event::TraceLog::GetInstance()->SetEnabled( base::trace_event::TraceConfig("*", ""), base::trace_event::TraceLog::RECORDING_MODE); V8Platform::Get()->AddTraceStateObserver(test_observer); ASSERT_EQ(1, test_observer->Enabled()); ASSERT_EQ(0, test_observer->Disabled()); } } // namespace gin