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

Unified Diff: runtime/vm/timeline_test.cc

Issue 1386263002: Add support to timeline for begin and end events (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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 617e8fe493d08a6a49ea586337291093fa91ed79..bdd2fddf7e4e988a71f93703fd418e137622a159 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -65,6 +65,30 @@ class TimelineTestHelper : public AllStatic {
event->Duration(label, start, end);
}
+ static void FakeBegin(
+ TimelineEventRecorder* recorder,
+ const char* label,
+ int64_t start) {
+ ASSERT(recorder != NULL);
+ ASSERT(label != NULL);
+ ASSERT(start >= 0);
+ TimelineEvent* event = recorder->StartEvent();
+ ASSERT(event != NULL);
+ event->Begin(label, start);
+ }
+
+ static void FakeEnd(
+ TimelineEventRecorder* recorder,
+ const char* label,
+ int64_t end) {
+ ASSERT(recorder != NULL);
+ ASSERT(label != NULL);
+ ASSERT(end >= 0);
+ TimelineEvent* event = recorder->StartEvent();
+ ASSERT(event != NULL);
+ event->End(label, end);
+ }
+
static void Clear(TimelineEventEndlessRecorder* recorder) {
ASSERT(recorder != NULL);
recorder->Clear();
@@ -609,4 +633,212 @@ TEST_CASE(TimelinePauses_Basic) {
TimelineTestHelper::Clear(recorder);
}
+
+TEST_CASE(TimelinePauses_BeginEnd) {
+ TimelineEventEndlessRecorder* recorder = new TimelineEventEndlessRecorder();
+ ASSERT(recorder != NULL);
+ Zone* zone = thread->zone();
+ Isolate* isolate = thread->isolate();
+ ThreadId tid = OSThread::GetCurrentThreadTraceId();
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeEnd(recorder, "a", 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(10, pauses.MaxExclusiveTime("a"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeBegin(recorder, "b", 0);
+ TimelineTestHelper::FakeEnd(recorder, "b", 10);
+ TimelineTestHelper::FakeEnd(recorder, "a", 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
+ EXPECT_EQ(10, pauses.InclusiveTime("b"));
+ EXPECT_EQ(10, pauses.ExclusiveTime("b"));
+ EXPECT_EQ(10, pauses.MaxInclusiveTime("b"));
+ EXPECT_EQ(10, pauses.MaxExclusiveTime("b"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeBegin(recorder, "b", 1);
+ TimelineTestHelper::FakeEnd(recorder, "b", 8);
+ TimelineTestHelper::FakeEnd(recorder, "a", 10);
+
+ {
+ 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(3, pauses.MaxExclusiveTime("a"));
+ EXPECT_EQ(7, pauses.InclusiveTime("b"));
+ EXPECT_EQ(7, pauses.ExclusiveTime("b"));
+ EXPECT_EQ(7, pauses.MaxInclusiveTime("b"));
+ EXPECT_EQ(7, pauses.MaxExclusiveTime("b"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeDuration(recorder, "b", 0, 1);
+ TimelineTestHelper::FakeDuration(recorder, "b", 1, 2);
+ TimelineTestHelper::FakeDuration(recorder, "b", 2, 3);
+ TimelineTestHelper::FakeBegin(recorder, "b", 3);
+ TimelineTestHelper::FakeEnd(recorder, "b", 4);
+ TimelineTestHelper::FakeDuration(recorder, "b", 4, 5);
+ TimelineTestHelper::FakeDuration(recorder, "b", 5, 6);
+ TimelineTestHelper::FakeDuration(recorder, "b", 6, 7);
+ TimelineTestHelper::FakeBegin(recorder, "b", 7);
+ TimelineTestHelper::FakeEnd(recorder, "b", 8);
+ TimelineTestHelper::FakeBegin(recorder, "b", 8);
+ TimelineTestHelper::FakeEnd(recorder, "b", 9);
+ TimelineTestHelper::FakeDuration(recorder, "b", 9, 10);
+ TimelineTestHelper::FakeEnd(recorder, "a", 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
+ EXPECT_EQ(10, pauses.InclusiveTime("b"));
+ EXPECT_EQ(10, pauses.ExclusiveTime("b"));
+ EXPECT_EQ(1, pauses.MaxInclusiveTime("b"));
+ EXPECT_EQ(1, pauses.MaxExclusiveTime("b"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeBegin(recorder, "b", 0);
+ TimelineTestHelper::FakeBegin(recorder, "c", 1);
+ TimelineTestHelper::FakeEnd(recorder, "c", 4);
+ TimelineTestHelper::FakeEnd(recorder, "b", 5);
+ TimelineTestHelper::FakeBegin(recorder, "d", 5);
+ TimelineTestHelper::FakeEnd(recorder, "d", 10);
+ TimelineTestHelper::FakeEnd(recorder, "a", 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
+ EXPECT_EQ(5, pauses.InclusiveTime("b"));
+ EXPECT_EQ(2, pauses.ExclusiveTime("b"));
+ EXPECT_EQ(5, pauses.MaxInclusiveTime("b"));
+ EXPECT_EQ(2, pauses.MaxExclusiveTime("b"));
+ EXPECT_EQ(3, pauses.InclusiveTime("c"));
+ EXPECT_EQ(3, pauses.ExclusiveTime("c"));
+ EXPECT_EQ(3, pauses.MaxInclusiveTime("c"));
+ EXPECT_EQ(3, pauses.MaxExclusiveTime("c"));
+ EXPECT_EQ(5, pauses.InclusiveTime("d"));
+ EXPECT_EQ(5, pauses.ExclusiveTime("d"));
+ EXPECT_EQ(5, pauses.MaxInclusiveTime("d"));
+ EXPECT_EQ(5, pauses.MaxExclusiveTime("d"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeBegin(recorder, "b", 1);
+ TimelineTestHelper::FakeBegin(recorder, "c", 2);
+ TimelineTestHelper::FakeBegin(recorder, "d", 3);
+ TimelineTestHelper::FakeBegin(recorder, "e", 4);
+ TimelineTestHelper::FakeEnd(recorder, "e", 6);
+ TimelineTestHelper::FakeEnd(recorder, "d", 7);
+ TimelineTestHelper::FakeEnd(recorder, "c", 8);
+ TimelineTestHelper::FakeEnd(recorder, "b", 9);
+ TimelineTestHelper::FakeEnd(recorder, "a", 10);
+
+ {
+ 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(2, pauses.MaxExclusiveTime("a"));
+ EXPECT_EQ(8, pauses.InclusiveTime("b"));
+ EXPECT_EQ(2, pauses.ExclusiveTime("b"));
+ EXPECT_EQ(8, pauses.MaxInclusiveTime("b"));
+ EXPECT_EQ(2, pauses.MaxExclusiveTime("b"));
+ EXPECT_EQ(6, pauses.InclusiveTime("c"));
+ EXPECT_EQ(2, pauses.ExclusiveTime("c"));
+ EXPECT_EQ(6, pauses.MaxInclusiveTime("c"));
+ EXPECT_EQ(2, pauses.MaxExclusiveTime("c"));
+ EXPECT_EQ(4, pauses.InclusiveTime("d"));
+ EXPECT_EQ(2, pauses.ExclusiveTime("d"));
+ EXPECT_EQ(4, pauses.MaxInclusiveTime("d"));
+ EXPECT_EQ(2, pauses.MaxExclusiveTime("d"));
+ EXPECT_EQ(2, pauses.InclusiveTime("e"));
+ EXPECT_EQ(2, pauses.ExclusiveTime("e"));
+ EXPECT_EQ(2, pauses.MaxInclusiveTime("e"));
+ EXPECT_EQ(2, pauses.MaxExclusiveTime("e"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeBegin(recorder, "a", 1);
+ TimelineTestHelper::FakeEnd(recorder, "a", 9);
+ TimelineTestHelper::FakeEnd(recorder, "a", 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.MaxInclusiveTime("a"));
+ EXPECT_EQ(8, pauses.MaxExclusiveTime("a"));
+ }
+ TimelineTestHelper::Clear(recorder);
+
+ // Test case.
+ TimelineTestHelper::FakeBegin(recorder, "a", 0);
+ TimelineTestHelper::FakeBegin(recorder, "b", 1);
+ // Pop "a" without popping "b" first.
+ TimelineTestHelper::FakeEnd(recorder, "a", 10);
+
+ {
+ TimelinePauses pauses(zone, isolate, recorder);
+ pauses.Setup();
+ pauses.CalculatePauseTimesForThread(tid);
+ EXPECT(pauses.has_error());
+ }
+ 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