| Index: runtime/vm/timeline_test.cc
|
| diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
|
| index fc13306ceb877adfd718d5fbb5f4b307eda783b1..a589cf8cb8af9599de18aae0161846575836703a 100644
|
| --- a/runtime/vm/timeline_test.cc
|
| +++ b/runtime/vm/timeline_test.cc
|
| @@ -35,6 +35,24 @@ class TimelineTestHelper : public AllStatic {
|
| }
|
| return event;
|
| }
|
| +
|
| + static void FakeDuration(
|
| + TimelineEventRecorder* recorder,
|
| + const char* label,
|
| + int64_t start,
|
| + int64_t end) {
|
| + ASSERT(recorder != NULL);
|
| + ASSERT(start < end);
|
| + ASSERT(label != NULL);
|
| + TimelineEvent* event = recorder->StartEvent();
|
| + ASSERT(event != NULL);
|
| + event->Duration(label, start, end);
|
| + }
|
| +
|
| + static void Clear(TimelineEventEndlessRecorder* recorder) {
|
| + ASSERT(recorder != NULL);
|
| + recorder->Clear();
|
| + }
|
| };
|
|
|
|
|
| @@ -393,4 +411,158 @@ TEST_CASE(TimelineRingRecorderJSONOrder) {
|
| EXPECT(alpha < beta);
|
| }
|
|
|
| +
|
| +TEST_CASE(TimelinePauses_Basic) {
|
| + TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
|
| + ASSERT(recorder != NULL);
|
| + Thread* thread = Thread::Current();
|
| + Zone* zone = thread->zone();
|
| + Isolate* isolate = thread->isolate();
|
| + ThreadId tid = OSThread::GetCurrentThreadId();
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(10, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 0, 10);
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(10, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(0, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + EXPECT_EQ(10, pauses.InclusiveTime("b"));
|
| + EXPECT_EQ(10, pauses.ExclusiveTime("b"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("b"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 1, 8);
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(10, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(3, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + EXPECT_EQ(7, pauses.InclusiveTime("b"));
|
| + EXPECT_EQ(7, pauses.ExclusiveTime("b"));
|
| + EXPECT_EQ(7, pauses.MaxDurationTime("b"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 0, 1);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 1, 2);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 2, 3);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 3, 4);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 4, 5);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 5, 6);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 6, 7);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 7, 8);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 8, 9);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 9, 10);
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(10, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(0, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + EXPECT_EQ(10, pauses.InclusiveTime("b"));
|
| + EXPECT_EQ(10, pauses.ExclusiveTime("b"));
|
| + EXPECT_EQ(1, pauses.MaxDurationTime("b"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 0, 5);
|
| + TimelineTestHelper::FakeDuration(recorder, "c", 1, 4);
|
| + TimelineTestHelper::FakeDuration(recorder, "d", 5, 10);
|
| +
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(10, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(0, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + EXPECT_EQ(5, pauses.InclusiveTime("b"));
|
| + EXPECT_EQ(2, pauses.ExclusiveTime("b"));
|
| + EXPECT_EQ(5, pauses.MaxDurationTime("b"));
|
| + EXPECT_EQ(3, pauses.InclusiveTime("c"));
|
| + EXPECT_EQ(3, pauses.ExclusiveTime("c"));
|
| + EXPECT_EQ(3, pauses.MaxDurationTime("c"));
|
| + EXPECT_EQ(5, pauses.InclusiveTime("d"));
|
| + EXPECT_EQ(5, pauses.ExclusiveTime("d"));
|
| + EXPECT_EQ(5, pauses.MaxDurationTime("d"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + TimelineTestHelper::FakeDuration(recorder, "b", 1, 9);
|
| + TimelineTestHelper::FakeDuration(recorder, "c", 2, 8);
|
| + TimelineTestHelper::FakeDuration(recorder, "d", 3, 7);
|
| + TimelineTestHelper::FakeDuration(recorder, "e", 4, 6);
|
| +
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(10, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(2, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + EXPECT_EQ(8, pauses.InclusiveTime("b"));
|
| + EXPECT_EQ(2, pauses.ExclusiveTime("b"));
|
| + EXPECT_EQ(8, pauses.MaxDurationTime("b"));
|
| + EXPECT_EQ(6, pauses.InclusiveTime("c"));
|
| + EXPECT_EQ(2, pauses.ExclusiveTime("c"));
|
| + EXPECT_EQ(6, pauses.MaxDurationTime("c"));
|
| + EXPECT_EQ(4, pauses.InclusiveTime("d"));
|
| + EXPECT_EQ(2, pauses.ExclusiveTime("d"));
|
| + EXPECT_EQ(4, pauses.MaxDurationTime("d"));
|
| + EXPECT_EQ(2, pauses.InclusiveTime("e"));
|
| + EXPECT_EQ(2, pauses.ExclusiveTime("e"));
|
| + EXPECT_EQ(2, pauses.MaxDurationTime("e"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +
|
| + // Test case.
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
|
| + TimelineTestHelper::FakeDuration(recorder, "a", 1, 9);
|
| +
|
| + {
|
| + TimelinePauses pauses(zone, isolate, recorder);
|
| + pauses.Setup();
|
| + pauses.CalculatePauseTimesForThread(tid);
|
| + EXPECT(!pauses.has_error());
|
| + EXPECT_EQ(18, pauses.InclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.ExclusiveTime("a"));
|
| + EXPECT_EQ(10, pauses.MaxDurationTime("a"));
|
| + }
|
| + TimelineTestHelper::Clear(recorder);
|
| +}
|
| +
|
| } // namespace dart
|
|
|