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

Side by Side Diff: runtime/vm/timeline_test.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 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
« no previous file with comments | « runtime/vm/timeline_analysis.cc ('k') | runtime/vm/timer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include <cstring> 5 #include <cstring>
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 8
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_state.h" 10 #include "vm/dart_api_state.h"
(...skipping 12 matching lines...) Expand all
23 : recorder_(Timeline::recorder()) { 23 : recorder_(Timeline::recorder()) {
24 Timeline::recorder_ = new_recorder; 24 Timeline::recorder_ = new_recorder;
25 } 25 }
26 26
27 ~TimelineRecorderOverride() { Timeline::recorder_ = recorder_; } 27 ~TimelineRecorderOverride() { Timeline::recorder_ = recorder_; }
28 28
29 private: 29 private:
30 TimelineEventRecorder* recorder_; 30 TimelineEventRecorder* recorder_;
31 }; 31 };
32 32
33
34 class TimelineTestHelper : public AllStatic { 33 class TimelineTestHelper : public AllStatic {
35 public: 34 public:
36 static void SetStream(TimelineEvent* event, TimelineStream* stream) { 35 static void SetStream(TimelineEvent* event, TimelineStream* stream) {
37 event->StreamInit(stream); 36 event->StreamInit(stream);
38 } 37 }
39 38
40 static void FakeThreadEvent(TimelineEventBlock* block, 39 static void FakeThreadEvent(TimelineEventBlock* block,
41 intptr_t ftid, 40 intptr_t ftid,
42 const char* label = "fake", 41 const char* label = "fake",
43 TimelineStream* stream = NULL) { 42 TimelineStream* stream = NULL) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 } 91 }
93 92
94 static void Clear(TimelineEventRecorder* recorder) { 93 static void Clear(TimelineEventRecorder* recorder) {
95 ASSERT(recorder != NULL); 94 ASSERT(recorder != NULL);
96 recorder->Clear(); 95 recorder->Clear();
97 } 96 }
98 97
99 static void FinishBlock(TimelineEventBlock* block) { block->Finish(); } 98 static void FinishBlock(TimelineEventBlock* block) { block->Finish(); }
100 }; 99 };
101 100
102
103 TEST_CASE(TimelineEventIsValid) { 101 TEST_CASE(TimelineEventIsValid) {
104 // Create a test stream. 102 // Create a test stream.
105 TimelineStream stream; 103 TimelineStream stream;
106 stream.Init("testStream", true); 104 stream.Init("testStream", true);
107 105
108 TimelineEvent event; 106 TimelineEvent event;
109 TimelineTestHelper::SetStream(&event, &stream); 107 TimelineTestHelper::SetStream(&event, &stream);
110 108
111 // Starts invalid. 109 // Starts invalid.
112 EXPECT(!event.IsValid()); 110 EXPECT(!event.IsValid());
113 111
114 // Becomes valid. 112 // Becomes valid.
115 event.Instant("hello"); 113 event.Instant("hello");
116 EXPECT(event.IsValid()); 114 EXPECT(event.IsValid());
117 115
118 // Becomes invalid. 116 // Becomes invalid.
119 event.Reset(); 117 event.Reset();
120 EXPECT(!event.IsValid()); 118 EXPECT(!event.IsValid());
121 } 119 }
122 120
123
124 TEST_CASE(TimelineEventDuration) { 121 TEST_CASE(TimelineEventDuration) {
125 // Create a test stream. 122 // Create a test stream.
126 TimelineStream stream; 123 TimelineStream stream;
127 stream.Init("testStream", true); 124 stream.Init("testStream", true);
128 125
129 // Create a test event. 126 // Create a test event.
130 TimelineEvent event; 127 TimelineEvent event;
131 TimelineTestHelper::SetStream(&event, &stream); 128 TimelineTestHelper::SetStream(&event, &stream);
132 event.DurationBegin("apple"); 129 event.DurationBegin("apple");
133 // Measure the duration. 130 // Measure the duration.
134 int64_t current_duration = event.TimeDuration(); 131 int64_t current_duration = event.TimeDuration();
135 event.DurationEnd(); 132 event.DurationEnd();
136 // Verify that duration is larger. 133 // Verify that duration is larger.
137 EXPECT_GE(event.TimeDuration(), current_duration); 134 EXPECT_GE(event.TimeDuration(), current_duration);
138 } 135 }
139 136
140
141 TEST_CASE(TimelineEventDurationPrintJSON) { 137 TEST_CASE(TimelineEventDurationPrintJSON) {
142 // Create a test stream. 138 // Create a test stream.
143 TimelineStream stream; 139 TimelineStream stream;
144 stream.Init("testStream", true); 140 stream.Init("testStream", true);
145 141
146 // Create a test event. 142 // Create a test event.
147 TimelineEvent event; 143 TimelineEvent event;
148 TimelineTestHelper::SetStream(&event, &stream); 144 TimelineTestHelper::SetStream(&event, &stream);
149 event.DurationBegin("apple"); 145 event.DurationBegin("apple");
150 { 146 {
151 // Test printing to JSON. 147 // Test printing to JSON.
152 JSONStream js; 148 JSONStream js;
153 event.PrintJSON(&js); 149 event.PrintJSON(&js);
154 // Check category 150 // Check category
155 EXPECT_SUBSTRING("\"cat\":\"testStream\"", js.ToCString()); 151 EXPECT_SUBSTRING("\"cat\":\"testStream\"", js.ToCString());
156 // Check name. 152 // Check name.
157 EXPECT_SUBSTRING("\"name\":\"apple\"", js.ToCString()); 153 EXPECT_SUBSTRING("\"name\":\"apple\"", js.ToCString());
158 // Check phase. 154 // Check phase.
159 EXPECT_SUBSTRING("\"ph\":\"X\"", js.ToCString()); 155 EXPECT_SUBSTRING("\"ph\":\"X\"", js.ToCString());
160 // Check that ts key is present. 156 // Check that ts key is present.
161 EXPECT_SUBSTRING("\"ts\":", js.ToCString()); 157 EXPECT_SUBSTRING("\"ts\":", js.ToCString());
162 // Check that dur key is present. 158 // Check that dur key is present.
163 EXPECT_SUBSTRING("\"dur\":", js.ToCString()); 159 EXPECT_SUBSTRING("\"dur\":", js.ToCString());
164 } 160 }
165 event.DurationEnd(); 161 event.DurationEnd();
166 } 162 }
167 163
168
169 TEST_CASE(TimelineEventPrintSystrace) { 164 TEST_CASE(TimelineEventPrintSystrace) {
170 const intptr_t kBufferLength = 1024; 165 const intptr_t kBufferLength = 1024;
171 char buffer[kBufferLength]; 166 char buffer[kBufferLength];
172 167
173 // Create a test stream. 168 // Create a test stream.
174 TimelineStream stream; 169 TimelineStream stream;
175 stream.Init("testStream", true); 170 stream.Init("testStream", true);
176 171
177 // Create a test event. 172 // Create a test event.
178 TimelineEvent event; 173 TimelineEvent event;
(...skipping 23 matching lines...) Expand all
202 EXPECT_SUBSTRING("C|", buffer); 197 EXPECT_SUBSTRING("C|", buffer);
203 EXPECT_SUBSTRING("|CTR|4", buffer); 198 EXPECT_SUBSTRING("|CTR|4", buffer);
204 199
205 // Test a duration event. This event kind is not supported so we should 200 // Test a duration event. This event kind is not supported so we should
206 // serialize it to an empty string. 201 // serialize it to an empty string.
207 event.Duration("DUR", 0, 1, 2, 3); 202 event.Duration("DUR", 0, 1, 2, 3);
208 event.PrintSystrace(&buffer[0], kBufferLength); 203 event.PrintSystrace(&buffer[0], kBufferLength);
209 EXPECT_STREQ("", buffer); 204 EXPECT_STREQ("", buffer);
210 } 205 }
211 206
212
213 TEST_CASE(TimelineEventArguments) { 207 TEST_CASE(TimelineEventArguments) {
214 // Create a test stream. 208 // Create a test stream.
215 TimelineStream stream; 209 TimelineStream stream;
216 stream.Init("testStream", true); 210 stream.Init("testStream", true);
217 211
218 // Create a test event. 212 // Create a test event.
219 TimelineEvent event; 213 TimelineEvent event;
220 TimelineTestHelper::SetStream(&event, &stream); 214 TimelineTestHelper::SetStream(&event, &stream);
221 215
222 // Allocate room for four arguments. 216 // Allocate room for four arguments.
223 event.SetNumArguments(4); 217 event.SetNumArguments(4);
224 // Reset. 218 // Reset.
225 event.Reset(); 219 event.Reset();
226 220
227 event.DurationBegin("apple"); 221 event.DurationBegin("apple");
228 event.SetNumArguments(2); 222 event.SetNumArguments(2);
229 event.CopyArgument(0, "arg1", "value1"); 223 event.CopyArgument(0, "arg1", "value1");
230 event.CopyArgument(1, "arg2", "value2"); 224 event.CopyArgument(1, "arg2", "value2");
231 event.DurationEnd(); 225 event.DurationEnd();
232 } 226 }
233 227
234
235 TEST_CASE(TimelineEventArgumentsPrintJSON) { 228 TEST_CASE(TimelineEventArgumentsPrintJSON) {
236 // Create a test stream. 229 // Create a test stream.
237 TimelineStream stream; 230 TimelineStream stream;
238 stream.Init("testStream", true); 231 stream.Init("testStream", true);
239 232
240 // Create a test event. 233 // Create a test event.
241 TimelineEvent event; 234 TimelineEvent event;
242 TimelineTestHelper::SetStream(&event, &stream); 235 TimelineTestHelper::SetStream(&event, &stream);
243 236
244 event.DurationBegin("apple"); 237 event.DurationBegin("apple");
245 event.SetNumArguments(2); 238 event.SetNumArguments(2);
246 event.CopyArgument(0, "arg1", "value1"); 239 event.CopyArgument(0, "arg1", "value1");
247 event.CopyArgument(1, "arg2", "value2"); 240 event.CopyArgument(1, "arg2", "value2");
248 event.DurationEnd(); 241 event.DurationEnd();
249 242
250 { 243 {
251 // Test printing to JSON. 244 // Test printing to JSON.
252 JSONStream js; 245 JSONStream js;
253 event.PrintJSON(&js); 246 event.PrintJSON(&js);
254 247
255 // Check both arguments. 248 // Check both arguments.
256 EXPECT_SUBSTRING("\"arg1\":\"value1\"", js.ToCString()); 249 EXPECT_SUBSTRING("\"arg1\":\"value1\"", js.ToCString());
257 EXPECT_SUBSTRING("\"arg2\":\"value2\"", js.ToCString()); 250 EXPECT_SUBSTRING("\"arg2\":\"value2\"", js.ToCString());
258 } 251 }
259 } 252 }
260 253
261
262 TEST_CASE(TimelineEventBufferPrintJSON) { 254 TEST_CASE(TimelineEventBufferPrintJSON) {
263 TimelineEventRecorder* recorder = Timeline::recorder(); 255 TimelineEventRecorder* recorder = Timeline::recorder();
264 JSONStream js; 256 JSONStream js;
265 TimelineEventFilter filter; 257 TimelineEventFilter filter;
266 recorder->PrintJSON(&js, &filter); 258 recorder->PrintJSON(&js, &filter);
267 // Check the type. This test will fail if we ever make Timeline public. 259 // Check the type. This test will fail if we ever make Timeline public.
268 EXPECT_SUBSTRING("\"type\":\"_Timeline\"", js.ToCString()); 260 EXPECT_SUBSTRING("\"type\":\"_Timeline\"", js.ToCString());
269 // Check that there is a traceEvents array. 261 // Check that there is a traceEvents array.
270 EXPECT_SUBSTRING("\"traceEvents\":[", js.ToCString()); 262 EXPECT_SUBSTRING("\"traceEvents\":[", js.ToCString());
271 } 263 }
272 264
273
274 // Count the number of each event type seen. 265 // Count the number of each event type seen.
275 class EventCounterRecorder : public TimelineEventCallbackRecorder { 266 class EventCounterRecorder : public TimelineEventCallbackRecorder {
276 public: 267 public:
277 EventCounterRecorder() { 268 EventCounterRecorder() {
278 for (intptr_t i = 0; i < TimelineEvent::kNumEventTypes; i++) { 269 for (intptr_t i = 0; i < TimelineEvent::kNumEventTypes; i++) {
279 counts_[i] = 0; 270 counts_[i] = 0;
280 } 271 }
281 } 272 }
282 273
283 void OnEvent(TimelineEvent* event) { counts_[event->event_type()]++; } 274 void OnEvent(TimelineEvent* event) { counts_[event->event_type()]++; }
284 275
285 intptr_t CountFor(TimelineEvent::EventType type) { return counts_[type]; } 276 intptr_t CountFor(TimelineEvent::EventType type) { return counts_[type]; }
286 277
287 private: 278 private:
288 intptr_t counts_[TimelineEvent::kNumEventTypes]; 279 intptr_t counts_[TimelineEvent::kNumEventTypes];
289 }; 280 };
290 281
291
292 TEST_CASE(TimelineEventCallbackRecorderBasic) { 282 TEST_CASE(TimelineEventCallbackRecorderBasic) {
293 EventCounterRecorder* recorder = new EventCounterRecorder(); 283 EventCounterRecorder* recorder = new EventCounterRecorder();
294 TimelineRecorderOverride override(recorder); 284 TimelineRecorderOverride override(recorder);
295 285
296 // Initial counts are all zero. 286 // Initial counts are all zero.
297 for (intptr_t i = TimelineEvent::kNone + 1; i < TimelineEvent::kNumEventTypes; 287 for (intptr_t i = TimelineEvent::kNone + 1; i < TimelineEvent::kNumEventTypes;
298 i++) { 288 i++) {
299 EXPECT_EQ(0, recorder->CountFor(static_cast<TimelineEvent::EventType>(i))); 289 EXPECT_EQ(0, recorder->CountFor(static_cast<TimelineEvent::EventType>(i)));
300 } 290 }
301 291
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 event = stream.StartEvent(); 330 event = stream.StartEvent();
341 EXPECT_EQ(0, recorder->CountFor(TimelineEvent::kAsyncEnd)); 331 EXPECT_EQ(0, recorder->CountFor(TimelineEvent::kAsyncEnd));
342 event->AsyncEnd("asyncEndCabbage", async_id); 332 event->AsyncEnd("asyncEndCabbage", async_id);
343 EXPECT_EQ(0, recorder->CountFor(TimelineEvent::kAsyncEnd)); 333 EXPECT_EQ(0, recorder->CountFor(TimelineEvent::kAsyncEnd));
344 event->Complete(); 334 event->Complete();
345 EXPECT_EQ(1, recorder->CountFor(TimelineEvent::kAsyncEnd)); 335 EXPECT_EQ(1, recorder->CountFor(TimelineEvent::kAsyncEnd));
346 336
347 delete recorder; 337 delete recorder;
348 } 338 }
349 339
350
351 static bool LabelMatch(TimelineEvent* event, const char* label) { 340 static bool LabelMatch(TimelineEvent* event, const char* label) {
352 ASSERT(event != NULL); 341 ASSERT(event != NULL);
353 return strcmp(event->label(), label) == 0; 342 return strcmp(event->label(), label) == 0;
354 } 343 }
355 344
356
357 TEST_CASE(TimelineAnalysis_ThreadBlockCount) { 345 TEST_CASE(TimelineAnalysis_ThreadBlockCount) {
358 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder(); 346 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
359 ASSERT(recorder != NULL); 347 ASSERT(recorder != NULL);
360 // Blocks owned by thread "1". 348 // Blocks owned by thread "1".
361 TimelineEventBlock* block_1_0 = recorder->GetNewBlock(); 349 TimelineEventBlock* block_1_0 = recorder->GetNewBlock();
362 TimelineTestHelper::SetBlockThread(block_1_0, 1); 350 TimelineTestHelper::SetBlockThread(block_1_0, 1);
363 TimelineEventBlock* block_1_1 = recorder->GetNewBlock(); 351 TimelineEventBlock* block_1_1 = recorder->GetNewBlock();
364 TimelineTestHelper::SetBlockThread(block_1_1, 1); 352 TimelineTestHelper::SetBlockThread(block_1_1, 1);
365 TimelineEventBlock* block_1_2 = recorder->GetNewBlock(); 353 TimelineEventBlock* block_1_2 = recorder->GetNewBlock();
366 TimelineTestHelper::SetBlockThread(block_1_2, 1); 354 TimelineTestHelper::SetBlockThread(block_1_2, 1);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 EXPECT(LabelMatch(it.Next(), "E")); 454 EXPECT(LabelMatch(it.Next(), "E"));
467 EXPECT(it.HasNext()); 455 EXPECT(it.HasNext());
468 EXPECT(LabelMatch(it.Next(), "F")); 456 EXPECT(LabelMatch(it.Next(), "F"));
469 EXPECT(!it.HasNext()); 457 EXPECT(!it.HasNext());
470 } 458 }
471 459
472 TimelineTestHelper::Clear(recorder); 460 TimelineTestHelper::Clear(recorder);
473 delete recorder; 461 delete recorder;
474 } 462 }
475 463
476
477 TEST_CASE(TimelineRingRecorderJSONOrder) { 464 TEST_CASE(TimelineRingRecorderJSONOrder) {
478 TimelineStream stream; 465 TimelineStream stream;
479 stream.Init("testStream", true); 466 stream.Init("testStream", true);
480 467
481 TimelineEventRingRecorder* recorder = 468 TimelineEventRingRecorder* recorder =
482 new TimelineEventRingRecorder(TimelineEventBlock::kBlockSize * 2); 469 new TimelineEventRingRecorder(TimelineEventBlock::kBlockSize * 2);
483 470
484 TimelineEventBlock* block_0 = recorder->GetNewBlock(); 471 TimelineEventBlock* block_0 = recorder->GetNewBlock();
485 EXPECT(block_0 != NULL); 472 EXPECT(block_0 != NULL);
486 TimelineEventBlock* block_1 = recorder->GetNewBlock(); 473 TimelineEventBlock* block_1 = recorder->GetNewBlock();
(...skipping 18 matching lines...) Expand all
505 // Verify that "Alpha" comes before "Beta" even though "Beta" is in the first 492 // Verify that "Alpha" comes before "Beta" even though "Beta" is in the first
506 // block. 493 // block.
507 const char* alpha = strstr(js.ToCString(), "Alpha"); 494 const char* alpha = strstr(js.ToCString(), "Alpha");
508 const char* beta = strstr(js.ToCString(), "Beta"); 495 const char* beta = strstr(js.ToCString(), "Beta");
509 EXPECT(alpha < beta); 496 EXPECT(alpha < beta);
510 497
511 TimelineTestHelper::Clear(recorder); 498 TimelineTestHelper::Clear(recorder);
512 delete recorder; 499 delete recorder;
513 } 500 }
514 501
515
516 TEST_CASE(TimelinePauses_Basic) { 502 TEST_CASE(TimelinePauses_Basic) {
517 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder(); 503 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
518 ASSERT(recorder != NULL); 504 ASSERT(recorder != NULL);
519 Zone* zone = thread->zone(); 505 Zone* zone = thread->zone();
520 Isolate* isolate = thread->isolate(); 506 Isolate* isolate = thread->isolate();
521 OSThread* os_thread = thread->os_thread(); 507 OSThread* os_thread = thread->os_thread();
522 ASSERT(os_thread != NULL); 508 ASSERT(os_thread != NULL);
523 ThreadId tid = os_thread->trace_id(); 509 ThreadId tid = os_thread->trace_id();
524 510
525 // Test case. 511 // Test case.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 EXPECT_EQ(10, pauses.InclusiveTime("a")); 665 EXPECT_EQ(10, pauses.InclusiveTime("a"));
680 EXPECT_EQ(10, pauses.ExclusiveTime("a")); 666 EXPECT_EQ(10, pauses.ExclusiveTime("a"));
681 EXPECT_EQ(10, pauses.MaxInclusiveTime("a")); 667 EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
682 EXPECT_EQ(8, pauses.MaxExclusiveTime("a")); 668 EXPECT_EQ(8, pauses.MaxExclusiveTime("a"));
683 } 669 }
684 TimelineTestHelper::Clear(recorder); 670 TimelineTestHelper::Clear(recorder);
685 671
686 delete recorder; 672 delete recorder;
687 } 673 }
688 674
689
690 TEST_CASE(TimelinePauses_BeginEnd) { 675 TEST_CASE(TimelinePauses_BeginEnd) {
691 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder(); 676 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
692 ASSERT(recorder != NULL); 677 ASSERT(recorder != NULL);
693 Zone* zone = thread->zone(); 678 Zone* zone = thread->zone();
694 Isolate* isolate = thread->isolate(); 679 Isolate* isolate = thread->isolate();
695 OSThread* os_thread = thread->os_thread(); 680 OSThread* os_thread = thread->os_thread();
696 ASSERT(os_thread != NULL); 681 ASSERT(os_thread != NULL);
697 ThreadId tid = os_thread->trace_id(); 682 ThreadId tid = os_thread->trace_id();
698 683
699 // Test case. 684 // Test case.
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 EXPECT(pauses.has_error()); 879 EXPECT(pauses.has_error());
895 } 880 }
896 TimelineTestHelper::Clear(recorder); 881 TimelineTestHelper::Clear(recorder);
897 882
898 delete recorder; 883 delete recorder;
899 } 884 }
900 885
901 #endif // !PRODUCT 886 #endif // !PRODUCT
902 887
903 } // namespace dart 888 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/timeline_analysis.cc ('k') | runtime/vm/timer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698