Chromium Code Reviews| Index: test/cctest/libplatform/test-tracing.cc |
| diff --git a/test/cctest/libplatform/test-tracing.cc b/test/cctest/libplatform/test-tracing.cc |
| index 2e15d6af9e0e356f256b00eb0784fb248db196d3..2e707faf2c2d598a5ff72c789c4aa34f2b62039c 100644 |
| --- a/test/cctest/libplatform/test-tracing.cc |
| +++ b/test/cctest/libplatform/test-tracing.cc |
| @@ -307,6 +307,66 @@ TEST(TestTracingControllerMultipleArgsAndCopy) { |
| i::V8::SetPlatformForTesting(old_platform); |
| } |
| +namespace { |
| + |
| +class TraceStateObserverImpl : public Platform::TraceStateObserver { |
| + public: |
| + void OnTraceEnabled() override { ++enabled_count; } |
| + void OnTraceDisabled() override { ++disabled_count; } |
| + |
| + int enabled_count = 0; |
| + int disabled_count = 0; |
| +}; |
| + |
| +} // namespace |
| + |
| +TEST(TracingObservers) { |
| + v8::Platform* old_platform = i::V8::GetCurrentPlatform(); |
| + v8::Platform* default_platform = v8::platform::CreateDefaultPlatform(); |
| + i::V8::SetPlatformForTesting(default_platform); |
| + |
| + v8::platform::tracing::TracingController tracing_controller; |
| + v8::platform::SetTracingController(default_platform, &tracing_controller); |
| + MockTraceWriter* writer = new MockTraceWriter(); |
| + v8::platform::tracing::TraceBuffer* ring_buffer = |
| + v8::platform::tracing::TraceBuffer::CreateTraceBufferRingBuffer(1, |
| + writer); |
| + tracing_controller.Initialize(ring_buffer); |
| + v8::platform::tracing::TraceConfig* trace_config = |
| + new v8::platform::tracing::TraceConfig(); |
| + trace_config->AddIncludedCategory("v8"); |
| + |
| + TraceStateObserverImpl observer; |
| + default_platform->AddTraceStateObserver(&observer); |
| + |
| + CHECK_EQ(0, observer.enabled_count); |
| + CHECK_EQ(0, observer.disabled_count); |
| + |
| + tracing_controller.StartTracing(trace_config); |
|
fmeawad
2016/09/27 18:05:49
Can you add a second observer here?
alph
2016/09/27 19:10:53
Done.
|
| + |
| + CHECK_EQ(1, observer.enabled_count); |
| + CHECK_EQ(0, observer.disabled_count); |
| + |
| + tracing_controller.StopTracing(); |
| + |
| + CHECK_EQ(1, observer.enabled_count); |
| + CHECK_EQ(1, observer.disabled_count); |
| + |
| + default_platform->RemoveTraceStateObserver(&observer); |
| + |
| + CHECK_EQ(1, observer.enabled_count); |
| + CHECK_EQ(1, observer.disabled_count); |
| + |
| + trace_config = new v8::platform::tracing::TraceConfig(); |
| + tracing_controller.StartTracing(trace_config); |
| + tracing_controller.StopTracing(); |
| + |
| + CHECK_EQ(1, observer.enabled_count); |
| + CHECK_EQ(1, observer.disabled_count); |
| + |
| + i::V8::SetPlatformForTesting(old_platform); |
| +} |
| + |
| } // namespace tracing |
| } // namespace platform |
| } // namespace v8 |