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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/timeline_analysis.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« 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