Index: runtime/vm/timeline.cc |
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc |
index ab28bee4e6219f5ff9dfe99f0f245a39e0bf7956..11187d72ef29f3505ce891c6cad583fba2142ddf 100644 |
--- a/runtime/vm/timeline.cc |
+++ b/runtime/vm/timeline.cc |
@@ -267,8 +267,12 @@ void TimelineEvent::End(const char* label, |
} |
-void TimelineEvent::SerializedJSON(const char* json) { |
+void TimelineEvent::SerializedJSON(const char* json, |
+ int64_t timestamp0, |
+ int64_t timestamp1) { |
Init(kSerializedJSON, "Dart"); |
+ set_timestamp0(timestamp0); |
+ set_timestamp1(timestamp1); |
SetNumArguments(1); |
CopyArgument(0, "Dart", json); |
} |
@@ -714,7 +718,12 @@ void TimelineBeginEndScope::EmitEnd() { |
} |
-TimelineEventFilter::TimelineEventFilter() { |
+TimelineEventFilter::TimelineEventFilter(int64_t time_origin_micros, |
+ int64_t time_extent_micros) |
+ : time_origin_micros_(time_origin_micros), |
+ time_extent_micros_(time_extent_micros) { |
+ ASSERT(time_origin_micros_ >= -1); |
+ ASSERT(time_extent_micros_ >= -1); |
} |
@@ -722,8 +731,29 @@ TimelineEventFilter::~TimelineEventFilter() { |
} |
-IsolateTimelineEventFilter::IsolateTimelineEventFilter(Dart_Port isolate_id) |
- : isolate_id_(isolate_id) { |
+bool TimelineEventFilter::EventInTimeRange(TimelineEvent* event) { |
+ if (event == NULL) { |
+ return false; |
+ } |
+ if ((time_origin_micros_ == -1) || |
+ (time_extent_micros_ == -1)) { |
+ // No time filter applied. |
+ return true; |
+ } |
+ // TODO(johnmccutchan): Some events span a range of time, check the range and |
+ // not just the start time. |
+ int64_t delta = event->TimeOrigin() - time_origin_micros_; |
+ return (delta >= 0) && (delta <= time_extent_micros_); |
+} |
+ |
+ |
+IsolateTimelineEventFilter::IsolateTimelineEventFilter( |
+ Dart_Port isolate_id, |
+ int64_t time_origin_micros, |
+ int64_t time_extent_micros) |
+ : TimelineEventFilter(time_origin_micros, |
+ time_extent_micros), |
+ isolate_id_(isolate_id) { |
} |
@@ -937,7 +967,7 @@ void TimelineEventRingRecorder::PrintJSONEvents( |
} |
for (intptr_t event_idx = 0; event_idx < block->length(); event_idx++) { |
TimelineEvent* event = block->At(event_idx); |
- if (filter->IncludeEvent(event)) { |
+ if (filter->IncludeEvent(event) && filter->EventInTimeRange(event)) { |
events->AddValue(event); |
} |
} |
@@ -1129,10 +1159,9 @@ void TimelineEventEndlessRecorder::PrintJSONEvents( |
intptr_t length = current->length(); |
for (intptr_t i = 0; i < length; i++) { |
TimelineEvent* event = current->At(i); |
- if (!filter->IncludeEvent(event)) { |
- continue; |
+ if (filter->IncludeEvent(event) && filter->EventInTimeRange(event)) { |
+ events->AddValue(event); |
} |
- events->AddValue(event); |
} |
current = current->next(); |
} |