@@ -721,6 +721,7 @@ void TimelineBeginEndScope::EmitBegin() {
721
721
TimelineEvent* event = stream ()->StartEvent ();
722
722
if (event == NULL ) {
723
723
// Stream is now disabled.
724
+ set_enabled (false );
724
725
return ;
725
726
}
726
727
ASSERT (event != NULL );
@@ -737,6 +738,7 @@ void TimelineBeginEndScope::EmitEnd() {
737
738
TimelineEvent* event = stream ()->StartEvent ();
738
739
if (event == NULL ) {
739
740
// Stream is now disabled.
741
+ set_enabled (false );
740
742
return ;
741
743
}
742
744
ASSERT (event != NULL );
@@ -1160,17 +1162,35 @@ TimelineEventBlock* TimelineEventEndlessRecorder::GetNewBlockLocked() {
1160
1162
return head_;
1161
1163
}
1162
1164
1165
+ static int TimelineEventBlockCompare (TimelineEventBlock* const * a,
1166
+ TimelineEventBlock* const * b) {
1167
+ return (*a)->LowerTimeBound () - (*b)->LowerTimeBound ();
1168
+ }
1169
+
1163
1170
1164
1171
void TimelineEventEndlessRecorder::PrintJSONEvents (
1165
1172
JSONArray* events,
1166
1173
TimelineEventFilter* filter) {
1167
1174
MutexLocker ml (&lock_);
1175
+ // Collect all interesting blocks.
1176
+ MallocGrowableArray<TimelineEventBlock*> blocks (8 );
1168
1177
TimelineEventBlock* current = head_;
1169
1178
while (current != NULL ) {
1170
- if (!filter->IncludeBlock (current)) {
1171
- current = current->next ();
1172
- continue ;
1179
+ if (filter->IncludeBlock (current)) {
1180
+ blocks.Add (current);
1173
1181
}
1182
+ current = current->next ();
1183
+ }
1184
+ // Bail early.
1185
+ if (blocks.length () == 0 ) {
1186
+ return ;
1187
+ }
1188
+ // Sort the interesting blocks so that blocks with earlier events are
1189
+ // outputted first.
1190
+ blocks.Sort (TimelineEventBlockCompare);
1191
+ // Output blocks in sorted order.
1192
+ for (intptr_t block_idx = 0 ; block_idx < blocks.length (); block_idx++) {
1193
+ current = blocks[block_idx];
1174
1194
intptr_t length = current->length ();
1175
1195
for (intptr_t i = 0 ; i < length; i++) {
1176
1196
TimelineEvent* event = current->At (i);
@@ -1180,7 +1200,6 @@ void TimelineEventEndlessRecorder::PrintJSONEvents(
1180
1200
events->AddValue (event);
1181
1201
}
1182
1202
}
1183
- current = current->next ();
1184
1203
}
1185
1204
}
1186
1205
0 commit comments