OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |