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

Unified Diff: runtime/vm/timeline.cc

Issue 1657843003: Output TimelineEventBlocks in sorted order (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/timeline.cc
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 2cf812bceece0f7d77036169aa0ca041db654a14..ca6e9a2fd189f652030f11c10def8de6b8857880 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -721,6 +721,7 @@ void TimelineBeginEndScope::EmitBegin() {
TimelineEvent* event = stream()->StartEvent();
if (event == NULL) {
// Stream is now disabled.
+ set_enabled(false);
return;
}
ASSERT(event != NULL);
@@ -737,6 +738,7 @@ void TimelineBeginEndScope::EmitEnd() {
TimelineEvent* event = stream()->StartEvent();
if (event == NULL) {
// Stream is now disabled.
+ set_enabled(false);
return;
}
ASSERT(event != NULL);
@@ -1160,17 +1162,35 @@ TimelineEventBlock* TimelineEventEndlessRecorder::GetNewBlockLocked() {
return head_;
}
+static int TimelineEventBlockCompare(TimelineEventBlock* const* a,
+ TimelineEventBlock* const* b) {
+ return (*a)->LowerTimeBound() - (*b)->LowerTimeBound();
+}
+
void TimelineEventEndlessRecorder::PrintJSONEvents(
JSONArray* events,
TimelineEventFilter* filter) {
MutexLocker ml(&lock_);
+ // Collect all interesting blocks.
+ MallocGrowableArray<TimelineEventBlock*> blocks(8);
TimelineEventBlock* current = head_;
while (current != NULL) {
- if (!filter->IncludeBlock(current)) {
- current = current->next();
- continue;
+ if (filter->IncludeBlock(current)) {
+ blocks.Add(current);
}
+ current = current->next();
+ }
+ // Bail early.
+ if (blocks.length() == 0) {
+ return;
+ }
+ // Sort the interesting blocks so that blocks with earlier events are
+ // outputted first.
+ blocks.Sort(TimelineEventBlockCompare);
+ // Output blocks in sorted order.
+ for (intptr_t block_idx = 0; block_idx < blocks.length(); block_idx++) {
+ current = blocks[block_idx];
intptr_t length = current->length();
for (intptr_t i = 0; i < length; i++) {
TimelineEvent* event = current->At(i);
@@ -1180,7 +1200,6 @@ void TimelineEventEndlessRecorder::PrintJSONEvents(
events->AddValue(event);
}
}
- current = current->next();
}
}
« no previous file with comments | « runtime/vm/timeline.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698