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

Side by Side Diff: test/cctest/test-trace-event.cc

Issue 988893003: Implement tracing interface for v8 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove v8-tracing in favor of v8-platform, make passing Isolate* explicit, still WIP Created 5 years, 2 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
OLDNEW
(Empty)
1 // Copyright 2015 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 #include <stdlib.h>
5
6 #include "src/v8.h"
7
8 #include "src/list.h"
9 #include "src/list-inl.h"
10 #include "test/cctest/cctest.h"
11
12 using v8::IdleTask;
13 using v8::Task;
14 using v8::Isolate;
15
16 #include "src/tracing/trace-event.h"
17
18 #define GET_TRACE_OBJECTS_LIST platform.GetMockTraceObjects()
19
20 #define GET_TRACE_OBJECT(Index) GET_TRACE_OBJECTS_LIST->at(Index)
21
22
23 struct MockTraceObject {
24 char phase;
25 const char* name;
26 uint64_t id;
27 uint64_t context_id;
28 uint64_t bind_id;
29 int numArgs;
noordhuis 2015/10/07 18:31:54 Style nit: mildly inconsistent mix of camelCase an
fmeawad 2015/11/19 02:00:47 Done.
30 unsigned int flags;
31 MockTraceObject(char phase, const char* name, uint64_t id,
32 uint64_t context_id, uint64_t bind_id, int numArgs, int flags)
33 : phase(phase),
34 name(name),
35 id(id),
36 context_id(context_id),
37 bind_id(bind_id),
38 numArgs(numArgs),
39 flags(flags) {}
40 };
41
42 typedef v8::internal::List<MockTraceObject*> MockTraceObjectList;
43
44 class MockTracingPlatform : public v8::Platform {
45 public:
46 explicit MockTracingPlatform(v8::Platform* platform) {}
47 virtual ~MockTracingPlatform() {
48 for (int i = 0; i < trace_object_list_.length(); ++i) {
49 delete trace_object_list_[i];
50 }
51 trace_object_list_.Clear();
52 }
53 void CallOnBackgroundThread(Task* task,
54 ExpectedRuntime expected_runtime) override {}
55
56 void CallOnForegroundThread(Isolate* isolate, Task* task) override {}
57
58 void CallDelayedOnForegroundThread(Isolate* isolate, Task* task,
59 double delay_in_seconds) override {}
60
61 double MonotonicallyIncreasingTime() override { return 0.0; }
62
63 void CallIdleOnForegroundThread(Isolate* isolate, IdleTask* task) override {}
64
65 bool IdleTasksEnabled(Isolate* isolate) override { return false; }
66
67 bool PendingIdleTask() { return false; }
68
69 void PerformIdleTask(double idle_time_in_seconds) {}
70
71 bool PendingDelayedTask() { return false; }
72
73 void PerformDelayedTask() {}
74
75 virtual uint64_t AddTraceEvent(char phase, const uint8_t* categoryEnabledFlag,
76 const char* name, uint64_t id,
77 uint64_t context_id, uint64_t bind_id,
78 int numArgs, const char** argNames,
79 const uint8_t* argTypes,
80 const uint64_t* argValues,
81 unsigned int flags) override {
82 MockTraceObject* to = new MockTraceObject(phase, name, id, context_id,
83 bind_id, numArgs, flags);
84 trace_object_list_.Add(to);
85 return 0;
86 }
87
88 virtual void UpdateTraceEventDuration(const uint8_t* categoryEnabledFlag,
89 const char* name,
90 uint64_t handle) override {}
91
92 virtual const uint8_t* GetCategoryGroupEnabled(const char* name) override {
93 if (strcmp(name, "v8-cat")) {
94 static uint8_t no = 0;
95 return &no;
96 } else {
97 static uint8_t yes = 0x7;
98 return &yes;
99 }
100 }
101
102 virtual const char* GetCategoryGroupName(
103 const uint8_t* categoryEnabledFlag) override {
104 static const char* dummy = "dummy";
105 return dummy;
106 }
107
108 MockTraceObjectList* GetMockTraceObjects() { return &trace_object_list_; }
109
110 private:
111 MockTraceObjectList trace_object_list_;
112 };
113
114
115 TEST(TraceEventDisabledCategory) {
116 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
117 MockTracingPlatform platform(old_platform);
118 i::V8::SetPlatformForTesting(&platform);
119
120 // Disabled category, will not add events.
121 TRACE_EVENT_BEGIN0("cat", "e1");
122 TRACE_EVENT_END0("cat", "e1");
123 CHECK_EQ(0, GET_TRACE_OBJECTS_LIST->length());
124
125 i::V8::SetPlatformForTesting(old_platform);
126 }
127
128
129 TEST(TraceEventNoArgs) {
130 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
131 MockTracingPlatform platform(old_platform);
132 i::V8::SetPlatformForTesting(&platform);
133
134 // Enabled category will add 2 events.
135 TRACE_EVENT_BEGIN0("v8-cat", "e1");
136 TRACE_EVENT_END0("v8-cat", "e1");
137
138 CHECK_EQ(2, GET_TRACE_OBJECTS_LIST->length());
139 CHECK_EQ('B', GET_TRACE_OBJECT(0)->phase);
140 CHECK_EQ("e1", GET_TRACE_OBJECT(0)->name);
141 CHECK_EQ(0, GET_TRACE_OBJECT(0)->numArgs);
142
143 CHECK_EQ('E', GET_TRACE_OBJECT(1)->phase);
144 CHECK_EQ("e1", GET_TRACE_OBJECT(1)->name);
145 CHECK_EQ(0, GET_TRACE_OBJECT(1)->numArgs);
146
147 i::V8::SetPlatformForTesting(old_platform);
148 }
149
150
151 TEST(TraceEventWithOneArg) {
152 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
153 MockTracingPlatform platform(old_platform);
154 i::V8::SetPlatformForTesting(&platform);
155
156 TRACE_EVENT_BEGIN1("v8-cat", "e1", "arg1", 42);
157 TRACE_EVENT_END1("v8-cat", "e1", "arg1", 42);
158 TRACE_EVENT_BEGIN1("v8-cat", "e2", "arg1", "abc");
159 TRACE_EVENT_END1("v8-cat", "e2", "arg1", "abc");
160
161 CHECK_EQ(4, GET_TRACE_OBJECTS_LIST->length());
162
163 CHECK_EQ(1, GET_TRACE_OBJECT(0)->numArgs);
164 CHECK_EQ(1, GET_TRACE_OBJECT(1)->numArgs);
165 CHECK_EQ(1, GET_TRACE_OBJECT(2)->numArgs);
166 CHECK_EQ(1, GET_TRACE_OBJECT(3)->numArgs);
167
168 i::V8::SetPlatformForTesting(old_platform);
169 }
170
171
172 TEST(TraceEventWithTwoArgs) {
173 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
174 MockTracingPlatform platform(old_platform);
175 i::V8::SetPlatformForTesting(&platform);
176
177 TRACE_EVENT_BEGIN2("v8-cat", "e1", "arg1", 42, "arg2", "abc");
178 TRACE_EVENT_END2("v8-cat", "e1", "arg1", 42, "arg2", "abc");
179 TRACE_EVENT_BEGIN2("v8-cat", "e2", "arg1", "abc", "arg2", 43);
180 TRACE_EVENT_END2("v8-cat", "e2", "arg1", "abc", "arg2", 43);
181
182 CHECK_EQ(4, GET_TRACE_OBJECTS_LIST->length());
183
184 CHECK_EQ(2, GET_TRACE_OBJECT(0)->numArgs);
185 CHECK_EQ(2, GET_TRACE_OBJECT(1)->numArgs);
186 CHECK_EQ(2, GET_TRACE_OBJECT(2)->numArgs);
187 CHECK_EQ(2, GET_TRACE_OBJECT(3)->numArgs);
188
189 i::V8::SetPlatformForTesting(old_platform);
190 }
191
192
193 TEST(ScopedTraceEvent) {
194 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
195 MockTracingPlatform platform(old_platform);
196 i::V8::SetPlatformForTesting(&platform);
197
198 { TRACE_EVENT0("v8-cat", "e"); }
199
200 CHECK_EQ(1, GET_TRACE_OBJECTS_LIST->length());
201 CHECK_EQ(0, GET_TRACE_OBJECT(0)->numArgs);
202
203 { TRACE_EVENT1("v8-cat", "e1", "arg1", "abc"); }
204
205 CHECK_EQ(2, GET_TRACE_OBJECTS_LIST->length());
206 CHECK_EQ(1, GET_TRACE_OBJECT(1)->numArgs);
207
208 { TRACE_EVENT2("v8-cat", "e1", "arg1", "abc", "arg2", 42); }
209
210 CHECK_EQ(3, GET_TRACE_OBJECTS_LIST->length());
211 CHECK_EQ(2, GET_TRACE_OBJECT(2)->numArgs);
212
213 i::V8::SetPlatformForTesting(old_platform);
214 }
215
216
217 TEST(TestWithContextId) {
218 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
219 MockTracingPlatform platform(old_platform);
220 i::V8::SetPlatformForTesting(&platform);
221
222 TRACE_EVENT_BEGIN_WITH_CONTEXT_ID0("v8-cat", "i1", 42);
223 TRACE_EVENT_BEGIN_WITH_CONTEXT_ID0("v8-cat", "i2", 43);
224
225 CHECK_EQ(2, GET_TRACE_OBJECTS_LIST->length());
226 CHECK_EQ(42, GET_TRACE_OBJECT(0)->context_id);
227 CHECK_EQ(TRACE_EVENT_FLAG_HAS_CONTEXT_ID, GET_TRACE_OBJECT(0)->flags);
228 CHECK_EQ(43, GET_TRACE_OBJECT(1)->context_id);
229 CHECK_EQ(TRACE_EVENT_FLAG_HAS_CONTEXT_ID, GET_TRACE_OBJECT(1)->flags);
230
231 i::V8::SetPlatformForTesting(old_platform);
232 }
233
234
235 TEST(TestEventWithFlow) {
236 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
237 MockTracingPlatform platform(old_platform);
238 i::V8::SetPlatformForTesting(&platform);
239
240 static uint64_t bind_id = 21;
241 {
242 TRACE_EVENT_WITH_FLOW0("v8-cat", "f1", bind_id, TRACE_EVENT_FLAG_FLOW_OUT);
243 }
244 {
245 TRACE_EVENT_WITH_FLOW0(
246 "v8-cat", "f2", bind_id,
247 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
248 }
249 { TRACE_EVENT_WITH_FLOW0("v8-cat", "f3", bind_id, TRACE_EVENT_FLAG_FLOW_IN); }
250
251 CHECK_EQ(3, GET_TRACE_OBJECTS_LIST->length());
252 CHECK_EQ(bind_id, GET_TRACE_OBJECT(0)->bind_id);
253 CHECK_EQ(TRACE_EVENT_FLAG_FLOW_OUT, GET_TRACE_OBJECT(0)->flags);
254 CHECK_EQ(bind_id, GET_TRACE_OBJECT(1)->bind_id);
255 CHECK_EQ(TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT,
256 GET_TRACE_OBJECT(1)->flags);
257 CHECK_EQ(bind_id, GET_TRACE_OBJECT(2)->bind_id);
258 CHECK_EQ(TRACE_EVENT_FLAG_FLOW_IN, GET_TRACE_OBJECT(2)->flags);
259
260 i::V8::SetPlatformForTesting(old_platform);
261 }
262
263
264 TEST(TestEventWithId) {
265 v8::Platform* old_platform = i::V8::GetCurrentPlatform();
266 MockTracingPlatform platform(old_platform);
267 i::V8::SetPlatformForTesting(&platform);
268
269 static uint64_t event_id = 21;
270 TRACE_EVENT_ASYNC_BEGIN0("v8-cat", "a1", event_id);
271 TRACE_EVENT_ASYNC_END0("v8-cat", "a1", event_id);
272
273 CHECK_EQ(2, GET_TRACE_OBJECTS_LIST->length());
274 CHECK_EQ(TRACE_EVENT_PHASE_ASYNC_BEGIN, GET_TRACE_OBJECT(0)->phase);
275 CHECK_EQ(event_id, GET_TRACE_OBJECT(0)->id);
276 CHECK_EQ(TRACE_EVENT_PHASE_ASYNC_END, GET_TRACE_OBJECT(1)->phase);
277 CHECK_EQ(event_id, GET_TRACE_OBJECT(1)->id);
278
279 i::V8::SetPlatformForTesting(old_platform);
280 }
281 #undef INTERNAL_GET_TRACE_CONTEXT_ID
OLDNEW
« src/log-inl.h ('K') | « test/cctest/test-incremental-marking.cc ('k') | tools/gyp/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698