summaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/libplatform/test-tracing.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/cctest/libplatform/test-tracing.cc')
-rw-r--r--deps/v8/test/cctest/libplatform/test-tracing.cc112
1 files changed, 105 insertions, 7 deletions
diff --git a/deps/v8/test/cctest/libplatform/test-tracing.cc b/deps/v8/test/cctest/libplatform/test-tracing.cc
index 2e15d6af9e..66fa0e05a5 100644
--- a/deps/v8/test/cctest/libplatform/test-tracing.cc
+++ b/deps/v8/test/cctest/libplatform/test-tracing.cc
@@ -35,7 +35,8 @@ TEST(TestTraceObject) {
TraceObject trace_object;
uint8_t category_enabled_flag = 41;
trace_object.Initialize('X', &category_enabled_flag, "Test.Trace",
- "Test.Scope", 42, 123, 0, NULL, NULL, NULL, 0);
+ "Test.Scope", 42, 123, 0, nullptr, nullptr, nullptr,
+ nullptr, 0);
CHECK_EQ('X', trace_object.phase());
CHECK_EQ(category_enabled_flag, *trace_object.category_enabled_flag());
CHECK_EQ(std::string("Test.Trace"), std::string(trace_object.name()));
@@ -44,6 +45,19 @@ TEST(TestTraceObject) {
CHECK_EQ(0, trace_object.cpu_duration());
}
+class ConvertableToTraceFormatMock : public v8::ConvertableToTraceFormat {
+ public:
+ explicit ConvertableToTraceFormatMock(int value) : value_(value) {}
+ void AppendAsTraceFormat(std::string* out) const override {
+ *out += "[" + std::to_string(value_) + "," + std::to_string(value_) + "]";
+ }
+
+ private:
+ int value_;
+
+ DISALLOW_COPY_AND_ASSIGN(ConvertableToTraceFormatMock);
+};
+
class MockTraceWriter : public TraceWriter {
public:
void AppendTraceEvent(TraceObject* trace_event) override {
@@ -75,7 +89,8 @@ TEST(TestTraceBufferRingBuffer) {
TraceObject* trace_object = ring_buffer->AddTraceEvent(&handles[i]);
CHECK_NOT_NULL(trace_object);
trace_object->Initialize('X', &category_enabled_flag, names[i].c_str(),
- "Test.Scope", 42, 123, 0, NULL, NULL, NULL, 0);
+ "Test.Scope", 42, 123, 0, nullptr, nullptr,
+ nullptr, nullptr, 0);
trace_object = ring_buffer->GetEventByHandle(handles[i]);
CHECK_NOT_NULL(trace_object);
CHECK_EQ('X', trace_object->phase());
@@ -128,13 +143,13 @@ TEST(TestJSONTraceWriter) {
TraceObject trace_object;
trace_object.InitializeForTesting(
'X', tracing_controller.GetCategoryGroupEnabled("v8-cat"), "Test0",
- v8::internal::tracing::kGlobalScope, 42, 123, 0, NULL, NULL, NULL,
- TRACE_EVENT_FLAG_HAS_ID, 11, 22, 100, 50, 33, 44);
+ v8::internal::tracing::kGlobalScope, 42, 123, 0, nullptr, nullptr,
+ nullptr, nullptr, TRACE_EVENT_FLAG_HAS_ID, 11, 22, 100, 50, 33, 44);
writer->AppendTraceEvent(&trace_object);
trace_object.InitializeForTesting(
'Y', tracing_controller.GetCategoryGroupEnabled("v8-cat"), "Test1",
- v8::internal::tracing::kGlobalScope, 43, 456, 0, NULL, NULL, NULL, 0,
- 55, 66, 110, 55, 77, 88);
+ v8::internal::tracing::kGlobalScope, 43, 456, 0, nullptr, nullptr,
+ nullptr, nullptr, 0, 55, 66, 110, 55, 77, 88);
writer->AppendTraceEvent(&trace_object);
tracing_controller.StopTracing();
}
@@ -264,6 +279,14 @@ TEST(TestTracingControllerMultipleArgsAndCopy) {
mm = "CHANGED";
mmm = "CHANGED";
+ TRACE_EVENT_INSTANT1("v8", "v8.Test", TRACE_EVENT_SCOPE_THREAD, "a1",
+ new ConvertableToTraceFormatMock(42));
+ std::unique_ptr<ConvertableToTraceFormatMock> trace_event_arg(
+ new ConvertableToTraceFormatMock(42));
+ TRACE_EVENT_INSTANT2("v8", "v8.Test", TRACE_EVENT_SCOPE_THREAD, "a1",
+ std::move(trace_event_arg), "a2",
+ new ConvertableToTraceFormatMock(123));
+
tracing_controller.StopTracing();
}
@@ -274,7 +297,7 @@ TEST(TestTracingControllerMultipleArgsAndCopy) {
GetJSONStrings(all_names, trace_str, "\"name\"", "\"", "\"");
GetJSONStrings(all_cats, trace_str, "\"cat\"", "\"", "\"");
- CHECK_EQ(all_args.size(), 22);
+ CHECK_EQ(all_args.size(), 24);
CHECK_EQ(all_args[0], "\"aa\":11");
CHECK_EQ(all_args[1], "\"bb\":22");
CHECK_EQ(all_args[2], "\"cc\":33");
@@ -303,6 +326,81 @@ TEST(TestTracingControllerMultipleArgsAndCopy) {
CHECK_EQ(all_names[20], "INIT");
CHECK_EQ(all_names[21], "INIT");
CHECK_EQ(all_args[21], "\"mm1\":\"INIT\",\"mm2\":\"\\\"INIT\\\"\"");
+ CHECK_EQ(all_args[22], "\"a1\":[42,42]");
+ CHECK_EQ(all_args[23], "\"a1\":[42,42],\"a2\":[123,123]");
+
+ 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);
+
+ CHECK_EQ(1, observer.enabled_count);
+ CHECK_EQ(0, observer.disabled_count);
+
+ TraceStateObserverImpl observer2;
+ default_platform->AddTraceStateObserver(&observer2);
+
+ CHECK_EQ(1, observer2.enabled_count);
+ CHECK_EQ(0, observer2.disabled_count);
+
+ default_platform->RemoveTraceStateObserver(&observer2);
+
+ CHECK_EQ(1, observer2.enabled_count);
+ CHECK_EQ(0, observer2.disabled_count);
+
+ tracing_controller.StopTracing();
+
+ CHECK_EQ(1, observer.enabled_count);
+ CHECK_EQ(1, observer.disabled_count);
+ CHECK_EQ(1, observer2.enabled_count);
+ CHECK_EQ(0, observer2.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);
}