Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(862)

Side by Side Diff: test/cctest/libplatform/test-tracing.cc

Issue 2137013006: [Tracing] V8 Tracing Controller (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix GN Build Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« include/libplatform/v8-tracing.h ('K') | « test/cctest/cctest.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "include/libplatform/v8-tracing.h"
6 #include "test/cctest/cctest.h"
7
8 namespace v8 {
9 namespace platform {
10 namespace tracing {
11
12 const char* test_str =
13 "{\"record_mode\":\"record-until-full\",\"enable_sampling\":1,\"enable_"
14 "systrace\":0,\"enable_argument_filter\":1,\"included_categories\":[\"v8."
15 "cpu_profile\",\"v8.cpu_profile.hires\"],\"excluded_categories\":[\"v8."
16 "runtime\"]}";
17
18 TEST(TraceConfigConstructor) {
19 LocalContext env;
20 TraceConfig* trace_config =
21 TraceConfig::CreateTraceConfigFromJSON(env->GetIsolate(), test_str);
22 CHECK_EQ(trace_config->IsSamplingEnabled(), true);
23 CHECK_EQ(trace_config->IsSystraceEnabled(), false);
24 CHECK_EQ(trace_config->IsArgumentFilterEnabled(), true);
25 CHECK_EQ(trace_config->IsCategoryGroupEnabled("v8"), false);
26 CHECK_EQ(trace_config->IsCategoryGroupEnabled("v8.cpu_profile"), true);
27 CHECK_EQ(trace_config->IsCategoryGroupEnabled("v8.cpu_profile.hires"), true);
28 CHECK_EQ(trace_config->IsCategoryGroupEnabled("v8.runtime"), false);
29 delete trace_config;
30 }
31
32 TEST(TestTraceObject) {
33 TraceObject trace_object;
34 trace_object.Initialize('X', "Test.Trace", "v8-cat", 42, 123, 0, 0);
35 CHECK_EQ('X', trace_object.phase());
36 CHECK_EQ("Test.Trace", trace_object.name());
37 CHECK_EQ("v8-cat", trace_object.category_group());
38 CHECK_EQ(0, trace_object.duration());
39 CHECK_EQ(0, trace_object.cpu_duration());
40 }
41
42 class MockTraceWriter : public TraceWriter {
43 public:
44 void AppendTraceEvent(TraceObject* trace_event) override {
45 events_.push_back(trace_event->name());
46 }
47
48 void Flush() override {}
49
50 std::vector<std::string> events() { return events_; }
51
52 private:
53 std::vector<std::string> events_;
54 };
55
56 TEST(TestTraceBufferRingBuffer) {
57 MockTraceWriter* writer = new MockTraceWriter();
58 TraceBuffer* ring_buffer =
59 TraceBuffer::CreateTraceBufferRingBuffer(2, writer);
60
61 // We should be able to add kChunkSize * 2 + 1 trace events.
62 std::vector<uint64_t> handles(TraceBufferChunk::kChunkSize * 2 + 1);
63 for (size_t i = 0; i < handles.size(); ++i) {
64 TraceObject* trace_object = ring_buffer->AddTraceEvent(&handles[i]);
65 CHECK_NOT_NULL(trace_object);
66 std::string name = "Test.Trace" + std::to_string(i);
67 trace_object->Initialize('X', name, "v8-cat", 42, 123, 0, 0);
68 trace_object = ring_buffer->GetEventByHandle(handles[i]);
69 CHECK_NOT_NULL(trace_object);
70 CHECK_EQ('X', trace_object->phase());
71 CHECK_EQ(name, trace_object->name());
72 CHECK_EQ("v8-cat", trace_object->category_group());
73 }
74
75 // We should only be able to retrieve the last kChunkSize + 1.
76 for (size_t i = 0; i < TraceBufferChunk::kChunkSize; ++i) {
77 CHECK_NULL(ring_buffer->GetEventByHandle(handles[i]));
78 }
79
80 for (size_t i = TraceBufferChunk::kChunkSize; i < handles.size(); ++i) {
81 TraceObject* trace_object = ring_buffer->GetEventByHandle(handles[i]);
82 CHECK_NOT_NULL(trace_object);
83 // The object properties should be correct.
84 CHECK_EQ('X', trace_object->phase());
85 CHECK_EQ("Test.Trace" + std::to_string(i), trace_object->name());
86 CHECK_EQ("v8-cat", trace_object->category_group());
87 }
88
89 // Check Flush(), that the writer wrote the last kChunkSize 1 event names.
90 ring_buffer->Flush();
91 auto events = writer->events();
92 CHECK_EQ(TraceBufferChunk::kChunkSize + 1, events.size());
93 for (size_t i = TraceBufferChunk::kChunkSize; i < handles.size(); ++i) {
94 CHECK_EQ("Test.Trace" + std::to_string(i),
95 events[i - TraceBufferChunk::kChunkSize]);
96 }
97
98 delete ring_buffer;
99 }
100
101 TEST(TestJSONTraceWriter) {
102 std::ostringstream stream;
103 TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream);
104 TraceObject trace_object;
105 trace_object.InitializeForTesting('X', "Test0", "v8-cat", 42, 123, 0, 0, 11,
106 22, 100, 50, 33, 44);
107 writer->AppendTraceEvent(&trace_object);
108 trace_object.InitializeForTesting('Y', "Test1", "v8-cat", 43, 456, 0, 0, 55,
109 66, 110, 55, 77, 88);
110 writer->AppendTraceEvent(&trace_object);
111 writer->Flush();
112 delete writer;
113
114 std::string trace_str = stream.str();
115 std::string expected_trace_str =
116 "{\"traceEvents\":[{\"pid\":11,\"tid\":22,\"ts\":100,\"tts\":50,"
117 "\"ph\":\"X\",\"cat\":\"v8-cat\",\"name\":\"Test0\",\"args\":{},"
118 "\"dur\":33,\"tdur\":44},{\"pid\":55,\"tid\":66,\"ts\":110,\"tts\":55,"
119 "\"ph\":\"Y\",\"cat\":\"v8-cat\",\"name\":\"Test1\",\"args\":{},\"dur\":"
120 "77,\"tdur\":88}]}";
121 CHECK_EQ(expected_trace_str, trace_str);
122 }
123
124 } // namespace tracing
125 } // namespace platform
126 } // namespace v8
OLDNEW
« include/libplatform/v8-tracing.h ('K') | « test/cctest/cctest.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698