Index: cc/debug/frame_timing_tracker.cc |
diff --git a/cc/debug/frame_timing_tracker.cc b/cc/debug/frame_timing_tracker.cc |
index 50aa92be5aabed16abef231f50ba5509e8bd9842..38977ee6f326e3fe36cee65551101cfec6fd0a7d 100644 |
--- a/cc/debug/frame_timing_tracker.cc |
+++ b/cc/debug/frame_timing_tracker.cc |
@@ -8,9 +8,13 @@ |
#include <limits> |
#include "base/metrics/histogram.h" |
+#include "cc/trees/layer_tree_host_impl.h" |
#include "cc/trees/proxy.h" |
namespace cc { |
+namespace { |
+int kSendTimingIntervalMS = 200; |
+} |
FrameTimingTracker::CompositeTimingEvent::CompositeTimingEvent( |
int _frame_id, |
@@ -32,11 +36,19 @@ FrameTimingTracker::MainFrameTimingEvent::~MainFrameTimingEvent() { |
} |
// static |
-scoped_ptr<FrameTimingTracker> FrameTimingTracker::Create() { |
- return make_scoped_ptr(new FrameTimingTracker); |
+scoped_ptr<FrameTimingTracker> FrameTimingTracker::Create( |
+ LayerTreeHostImpl* layer_tree_host_impl) { |
+ return make_scoped_ptr(new FrameTimingTracker(layer_tree_host_impl)); |
} |
-FrameTimingTracker::FrameTimingTracker() { |
+FrameTimingTracker::FrameTimingTracker(LayerTreeHostImpl* layer_tree_host_impl) |
+ : layer_tree_host_impl_(layer_tree_host_impl), |
+ post_events_notifier_( |
+ layer_tree_host_impl_->proxy()->HasImplThread() |
+ ? layer_tree_host_impl_->proxy()->ImplThreadTaskRunner() |
+ : layer_tree_host_impl_->proxy()->MainThreadTaskRunner(), |
+ base::Bind(&FrameTimingTracker::PostEvents, base::Unretained(this)), |
+ base::TimeDelta::FromMilliseconds(kSendTimingIntervalMS)) { |
} |
FrameTimingTracker::~FrameTimingTracker() { |
@@ -51,6 +63,8 @@ void FrameTimingTracker::SaveTimeStamps( |
(*composite_events_)[pair.second].push_back( |
CompositeTimingEvent(pair.first, timestamp)); |
} |
+ if (!post_events_notifier_.HasPendingNotification()) |
+ post_events_notifier_.Schedule(); |
} |
void FrameTimingTracker::SaveMainFrameTimeStamps( |
@@ -65,6 +79,8 @@ void FrameTimingTracker::SaveMainFrameTimeStamps( |
events.push_back( |
MainFrameTimingEvent(source_frame_number, main_frame_time, end_time)); |
} |
+ if (!post_events_notifier_.HasPendingNotification()) |
+ post_events_notifier_.Schedule(); |
} |
scoped_ptr<FrameTimingTracker::CompositeTimingSet> |
@@ -95,4 +111,9 @@ FrameTimingTracker::GroupMainFrameCountsByRectId() { |
return main_frame_events_.Pass(); |
} |
+void FrameTimingTracker::PostEvents() { |
+ layer_tree_host_impl_->PostFrameTimingEvents(GroupCompositeCountsByRectId(), |
+ GroupMainFrameCountsByRectId()); |
+} |
+ |
} // namespace cc |