Index: content/browser/renderer_host/render_widget_host_latency_tracker.h |
diff --git a/content/browser/renderer_host/render_widget_host_latency_tracker.h b/content/browser/renderer_host/render_widget_host_latency_tracker.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0d7391b7a80dbdf583af8a09a4096d0388fed206 |
--- /dev/null |
+++ b/content/browser/renderer_host/render_widget_host_latency_tracker.h |
@@ -0,0 +1,70 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_LATENCY_TRACKER_H_ |
+#define CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_LATENCY_TRACKER_H_ |
+ |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "content/browser/renderer_host/event_with_latency_info.h" |
+#include "ui/events/latency_info.h" |
+ |
+namespace content { |
+ |
+// Utility class for tracking the latency of events passing through |
+// a given RenderWidgetHost. |
+class RenderWidgetHostLatencyTracker { |
+ public: |
+ RenderWidgetHostLatencyTracker(); |
+ ~RenderWidgetHostLatencyTracker(); |
+ |
+ // Associates the latency tracker with a given route and process. |
+ // Called once after the RenderWidgetHost is fully initialized. |
+ void Initialize(int routing_id, int process_id); |
+ |
+ // Populates the LatencyInfo with relevant entries for latency tracking. |
+ // Called when an event is received by the RenderWidgetHost, prior to |
+ // that event being forwarded to the renderer (via the InputRouter). |
+ void OnInputEvent(const blink::WebInputEvent& event, |
+ ui::LatencyInfo* latency); |
+ |
+ // Populates the LatencyInfo with relevant entries for latency tracking, also |
+ // terminating latency tracking for events that did not trigger rendering and |
+ // performing relevant UMA latency reporting. Called when an event is ack'ed |
+ // to the RenderWidgetHost (from the InputRouter). |
+ void OnInputEventAck(const blink::WebInputEvent& event, |
+ ui::LatencyInfo* latency); |
+ |
+ // Populates renderer-created LatencyInfo entries with the appropriate latency |
+ // component id. Called when the RenderWidgetHost receives a compositor swap |
+ // update from the renderer. |
+ void OnSwapCompositorFrame(std::vector<ui::LatencyInfo>* latencies); |
+ |
+ // Terminates latency tracking for events that triggered rendering, also |
+ // performing relevant UMA latency reporting. |
+ // Called when the RenderWidgetHost receives a swap update from the GPU. |
+ void OnFrameSwapped(const ui::LatencyInfo& latency); |
+ |
+ // WebInputEvent coordinates are in DPIs, while LatencyInfo expects |
+ // coordinates in device pixels. |
+ void set_device_scale_factor(float device_scale_factor) { |
+ device_scale_factor_ = device_scale_factor; |
+ } |
+ |
+ // Returns the ID that uniquely describes this component to the latency |
+ // subsystem. |
+ int64 latency_component_id() const { return latency_component_id_; } |
+ |
+ private: |
+ int64 last_event_id_; |
+ int64 latency_component_id_; |
+ float device_scale_factor_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTracker); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_LATENCY_TRACKER_H_ |