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

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

Issue 1289113003: Add TimelinePauses analysis and tests (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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') | 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
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 17 matching lines...) Expand all
28 TimelineStream* stream = NULL) { 28 TimelineStream* stream = NULL) {
29 TimelineEvent* event = block->StartEvent(); 29 TimelineEvent* event = block->StartEvent();
30 ASSERT(event != NULL); 30 ASSERT(event != NULL);
31 event->DurationBegin(label); 31 event->DurationBegin(label);
32 event->thread_ = OSThread::ThreadIdFromIntPtr(ftid); 32 event->thread_ = OSThread::ThreadIdFromIntPtr(ftid);
33 if (stream != NULL) { 33 if (stream != NULL) {
34 event->StreamInit(stream); 34 event->StreamInit(stream);
35 } 35 }
36 return event; 36 return event;
37 } 37 }
38
39 static void FakeDuration(
40 TimelineEventRecorder* recorder,
41 const char* label,
42 int64_t start,
43 int64_t end) {
44 ASSERT(recorder != NULL);
45 ASSERT(start < end);
46 ASSERT(label != NULL);
47 TimelineEvent* event = recorder->StartEvent();
48 ASSERT(event != NULL);
49 event->Duration(label, start, end);
50 }
51
52 static void Clear(TimelineEventEndlessRecorder* recorder) {
53 ASSERT(recorder != NULL);
54 recorder->Clear();
55 }
38 }; 56 };
39 57
40 58
41 TEST_CASE(TimelineEventIsValid) { 59 TEST_CASE(TimelineEventIsValid) {
42 // Create a test stream. 60 // Create a test stream.
43 TimelineStream stream; 61 TimelineStream stream;
44 stream.Init("testStream", true); 62 stream.Init("testStream", true);
45 63
46 TimelineEvent event; 64 TimelineEvent event;
47 TimelineTestHelper::SetStream(&event, &stream); 65 TimelineTestHelper::SetStream(&event, &stream);
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 recorder->PrintJSON(&js); 404 recorder->PrintJSON(&js);
387 // trace-event has a requirement that events for a thread must have 405 // trace-event has a requirement that events for a thread must have
388 // monotonically increasing timestamps. 406 // monotonically increasing timestamps.
389 // Verify that "Alpha" comes before "Beta" even though "Beta" is in the first 407 // Verify that "Alpha" comes before "Beta" even though "Beta" is in the first
390 // block. 408 // block.
391 const char* alpha = strstr(js.ToCString(), "Alpha"); 409 const char* alpha = strstr(js.ToCString(), "Alpha");
392 const char* beta = strstr(js.ToCString(), "Beta"); 410 const char* beta = strstr(js.ToCString(), "Beta");
393 EXPECT(alpha < beta); 411 EXPECT(alpha < beta);
394 } 412 }
395 413
414
415 TEST_CASE(TimelinePauses_Basic) {
416 TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
417 ASSERT(recorder != NULL);
418 Thread* thread = Thread::Current();
419 Zone* zone = thread->zone();
420 Isolate* isolate = thread->isolate();
421 ThreadId tid = OSThread::GetCurrentThreadId();
422
423 // Test case.
424 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
425 {
426 TimelinePauses pauses(zone, isolate, recorder);
427 pauses.Setup();
428 pauses.CalculatePauseTimesForThread(tid);
429 EXPECT(!pauses.has_error());
430 EXPECT_EQ(10, pauses.InclusiveTime("a"));
431 EXPECT_EQ(10, pauses.ExclusiveTime("a"));
432 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
433 }
434 TimelineTestHelper::Clear(recorder);
435
436 // Test case.
437 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
438 TimelineTestHelper::FakeDuration(recorder, "b", 0, 10);
439 {
440 TimelinePauses pauses(zone, isolate, recorder);
441 pauses.Setup();
442 pauses.CalculatePauseTimesForThread(tid);
443 EXPECT(!pauses.has_error());
444 EXPECT_EQ(10, pauses.InclusiveTime("a"));
445 EXPECT_EQ(0, pauses.ExclusiveTime("a"));
446 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
447 EXPECT_EQ(10, pauses.InclusiveTime("b"));
448 EXPECT_EQ(10, pauses.ExclusiveTime("b"));
449 EXPECT_EQ(10, pauses.MaxDurationTime("b"));
450 }
451 TimelineTestHelper::Clear(recorder);
452
453 // Test case.
454 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
455 TimelineTestHelper::FakeDuration(recorder, "b", 1, 8);
456 {
457 TimelinePauses pauses(zone, isolate, recorder);
458 pauses.Setup();
459 pauses.CalculatePauseTimesForThread(tid);
460 EXPECT(!pauses.has_error());
461 EXPECT_EQ(10, pauses.InclusiveTime("a"));
462 EXPECT_EQ(3, pauses.ExclusiveTime("a"));
463 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
464 EXPECT_EQ(7, pauses.InclusiveTime("b"));
465 EXPECT_EQ(7, pauses.ExclusiveTime("b"));
466 EXPECT_EQ(7, pauses.MaxDurationTime("b"));
467 }
468 TimelineTestHelper::Clear(recorder);
469
470 // Test case.
471 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
472 TimelineTestHelper::FakeDuration(recorder, "b", 0, 1);
473 TimelineTestHelper::FakeDuration(recorder, "b", 1, 2);
474 TimelineTestHelper::FakeDuration(recorder, "b", 2, 3);
475 TimelineTestHelper::FakeDuration(recorder, "b", 3, 4);
476 TimelineTestHelper::FakeDuration(recorder, "b", 4, 5);
477 TimelineTestHelper::FakeDuration(recorder, "b", 5, 6);
478 TimelineTestHelper::FakeDuration(recorder, "b", 6, 7);
479 TimelineTestHelper::FakeDuration(recorder, "b", 7, 8);
480 TimelineTestHelper::FakeDuration(recorder, "b", 8, 9);
481 TimelineTestHelper::FakeDuration(recorder, "b", 9, 10);
482 {
483 TimelinePauses pauses(zone, isolate, recorder);
484 pauses.Setup();
485 pauses.CalculatePauseTimesForThread(tid);
486 EXPECT(!pauses.has_error());
487 EXPECT_EQ(10, pauses.InclusiveTime("a"));
488 EXPECT_EQ(0, pauses.ExclusiveTime("a"));
489 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
490 EXPECT_EQ(10, pauses.InclusiveTime("b"));
491 EXPECT_EQ(10, pauses.ExclusiveTime("b"));
492 EXPECT_EQ(1, pauses.MaxDurationTime("b"));
493 }
494 TimelineTestHelper::Clear(recorder);
495
496 // Test case.
497 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
498 TimelineTestHelper::FakeDuration(recorder, "b", 0, 5);
499 TimelineTestHelper::FakeDuration(recorder, "c", 1, 4);
500 TimelineTestHelper::FakeDuration(recorder, "d", 5, 10);
501
502 {
503 TimelinePauses pauses(zone, isolate, recorder);
504 pauses.Setup();
505 pauses.CalculatePauseTimesForThread(tid);
506 EXPECT(!pauses.has_error());
507 EXPECT_EQ(10, pauses.InclusiveTime("a"));
508 EXPECT_EQ(0, pauses.ExclusiveTime("a"));
509 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
510 EXPECT_EQ(5, pauses.InclusiveTime("b"));
511 EXPECT_EQ(2, pauses.ExclusiveTime("b"));
512 EXPECT_EQ(5, pauses.MaxDurationTime("b"));
513 EXPECT_EQ(3, pauses.InclusiveTime("c"));
514 EXPECT_EQ(3, pauses.ExclusiveTime("c"));
515 EXPECT_EQ(3, pauses.MaxDurationTime("c"));
516 EXPECT_EQ(5, pauses.InclusiveTime("d"));
517 EXPECT_EQ(5, pauses.ExclusiveTime("d"));
518 EXPECT_EQ(5, pauses.MaxDurationTime("d"));
519 }
520 TimelineTestHelper::Clear(recorder);
521
522 // Test case.
523 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
524 TimelineTestHelper::FakeDuration(recorder, "b", 1, 9);
525 TimelineTestHelper::FakeDuration(recorder, "c", 2, 8);
526 TimelineTestHelper::FakeDuration(recorder, "d", 3, 7);
527 TimelineTestHelper::FakeDuration(recorder, "e", 4, 6);
528
529 {
530 TimelinePauses pauses(zone, isolate, recorder);
531 pauses.Setup();
532 pauses.CalculatePauseTimesForThread(tid);
533 EXPECT(!pauses.has_error());
534 EXPECT_EQ(10, pauses.InclusiveTime("a"));
535 EXPECT_EQ(2, pauses.ExclusiveTime("a"));
536 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
537 EXPECT_EQ(8, pauses.InclusiveTime("b"));
538 EXPECT_EQ(2, pauses.ExclusiveTime("b"));
539 EXPECT_EQ(8, pauses.MaxDurationTime("b"));
540 EXPECT_EQ(6, pauses.InclusiveTime("c"));
541 EXPECT_EQ(2, pauses.ExclusiveTime("c"));
542 EXPECT_EQ(6, pauses.MaxDurationTime("c"));
543 EXPECT_EQ(4, pauses.InclusiveTime("d"));
544 EXPECT_EQ(2, pauses.ExclusiveTime("d"));
545 EXPECT_EQ(4, pauses.MaxDurationTime("d"));
546 EXPECT_EQ(2, pauses.InclusiveTime("e"));
547 EXPECT_EQ(2, pauses.ExclusiveTime("e"));
548 EXPECT_EQ(2, pauses.MaxDurationTime("e"));
549 }
550 TimelineTestHelper::Clear(recorder);
551
552 // Test case.
553 TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
554 TimelineTestHelper::FakeDuration(recorder, "a", 1, 9);
555
556 {
557 TimelinePauses pauses(zone, isolate, recorder);
558 pauses.Setup();
559 pauses.CalculatePauseTimesForThread(tid);
560 EXPECT(!pauses.has_error());
561 EXPECT_EQ(18, pauses.InclusiveTime("a"));
562 EXPECT_EQ(10, pauses.ExclusiveTime("a"));
563 EXPECT_EQ(10, pauses.MaxDurationTime("a"));
564 }
565 TimelineTestHelper::Clear(recorder);
566 }
567
396 } // namespace dart 568 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/timeline_analysis.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698