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

Unified Diff: runtime/vm/timeline_test.cc

Issue 1283093004: Ensure TimelineEventRingRecorder outputs blocks in increasing time order (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.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 69db5bf3c9c12153057846c5bf81cbc5dace5d48..816a4cbb66ac91e506423a54e2ee0551c507e81d 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+#include <cstring>
+
#include "platform/assert.h"
#include "vm/dart_api_impl.h"
@@ -20,11 +22,17 @@ class TimelineTestHelper : public AllStatic {
}
static TimelineEvent* FakeThreadEvent(
- TimelineEventBlock* block, intptr_t ftid) {
+ TimelineEventBlock* block,
+ intptr_t ftid,
+ const char* label = "fake",
+ TimelineStream* stream = NULL) {
TimelineEvent* event = block->StartEvent();
ASSERT(event != NULL);
- event->DurationBegin("fake");
+ event->DurationBegin(label);
event->thread_ = OSThread::ThreadIdFromIntPtr(ftid);
+ if (stream != NULL) {
+ event->StreamInit(stream);
+ }
return event;
}
};
@@ -311,4 +319,36 @@ TEST_CASE(TimelineAnalysis_ThreadBlockCount) {
EXPECT_EQ(6, block_2_0->length());
}
+
+TEST_CASE(TimelineRingRecorderJSONOrder) {
+ TimelineStream stream;
+ stream.Init("testStream", true);
+
+ TimelineEventRingRecorder* recorder =
+ new TimelineEventRingRecorder(TimelineEventBlock::kBlockSize * 2);
+
+ TimelineEventBlock* block_0 = recorder->GetNewBlock();
+ EXPECT(block_0 != NULL);
+ TimelineEventBlock* block_1 = recorder->GetNewBlock();
+ EXPECT(block_1 != NULL);
+ // Test that we wrapped.
+ EXPECT(block_0 == recorder->GetNewBlock());
+
+ // Emit the earlier event into block_1.
+ TimelineTestHelper::FakeThreadEvent(block_1, 2, "Alpha", &stream);
+ OS::Sleep(1);
+ // Emit the later event into block_0.
+ TimelineTestHelper::FakeThreadEvent(block_0, 2, "Beta", &stream);
+
+ JSONStream js;
+ recorder->PrintJSON(&js);
+ // trace-event has a requirement that events for a thread must have
+ // monotonically increasing timestamps.
+ // Verify that "Alpha" comes before "Beta" even though "Beta" is in the first
+ // block.
+ const char* alpha = strstr(js.ToCString(), "Alpha");
+ const char* beta = strstr(js.ToCString(), "Beta");
+ EXPECT(alpha < beta);
+}
+
} // namespace dart
« no previous file with comments | « runtime/vm/timeline.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698