| Index: content/browser/renderer_host/render_widget_host_latency_tracker.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_latency_tracker.cc b/content/browser/renderer_host/render_widget_host_latency_tracker.cc
|
| index 2280e34a321d859e1218dd6e91fc3f0da8c6985e..d47562b2c3ec210e8b1400561ca779873ac975f1 100644
|
| --- a/content/browser/renderer_host/render_widget_host_latency_tracker.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_latency_tracker.cc
|
| @@ -19,6 +19,9 @@ namespace content {
|
| namespace {
|
|
|
| const uint32 kMaxInputCoordinates = LatencyInfo::kMaxInputCoordinates;
|
| +const size_t kBrowserCompositeLatencyHistorySize = 60;
|
| +const double kBrowserCompositeLatencyEstimationPercentile = 90.0;
|
| +const double kBrowserCompositeLatencyEstimationSlack = 1.1;
|
|
|
| void UpdateLatencyCoordinatesImpl(const blink::WebTouchEvent& touch,
|
| LatencyInfo* latency) {
|
| @@ -163,7 +166,10 @@ void AddLatencyInfoComponentIds(LatencyInfo* latency,
|
| } // namespace
|
|
|
| RenderWidgetHostLatencyTracker::RenderWidgetHostLatencyTracker()
|
| - : last_event_id_(0), latency_component_id_(0), device_scale_factor_(1) {
|
| + : last_event_id_(0),
|
| + latency_component_id_(0),
|
| + device_scale_factor_(1),
|
| + browser_composite_latency_history_(kBrowserCompositeLatencyHistorySize) {
|
| }
|
|
|
| RenderWidgetHostLatencyTracker::~RenderWidgetHostLatencyTracker() {
|
| @@ -257,8 +263,11 @@ void RenderWidgetHostLatencyTracker::OnInputEventAck(
|
| void RenderWidgetHostLatencyTracker::OnSwapCompositorFrame(
|
| std::vector<LatencyInfo>* latencies) {
|
| DCHECK(latencies);
|
| - for (LatencyInfo& latency : *latencies)
|
| + for (LatencyInfo& latency : *latencies) {
|
| AddLatencyInfoComponentIds(&latency, latency_component_id_);
|
| + latency.AddLatencyNumber(
|
| + ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, 0, 0);
|
| + }
|
| }
|
|
|
| void RenderWidgetHostLatencyTracker::OnFrameSwapped(
|
| @@ -303,6 +312,33 @@ void RenderWidgetHostLatencyTracker::OnFrameSwapped(
|
| 100);
|
| }
|
| }
|
| +
|
| + ui::LatencyInfo::LatencyComponent gpu_swap_component;
|
| + if (!latency.FindLatency(ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, 0,
|
| + &gpu_swap_component)) {
|
| + return;
|
| + }
|
| +
|
| + ui::LatencyInfo::LatencyComponent browser_swap_component;
|
| + if (latency.FindLatency(
|
| + ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, 0,
|
| + &browser_swap_component)) {
|
| + base::TimeDelta delta =
|
| + gpu_swap_component.event_time - browser_swap_component.event_time;
|
| + browser_composite_latency_history_.InsertSample(delta);
|
| + }
|
| +}
|
| +
|
| +base::TimeDelta
|
| +RenderWidgetHostLatencyTracker::GetEstimatedBrowserCompositeTime() const {
|
| + // TODO(brianderson): Remove lower bound on estimate once we're sure it won't
|
| + // cause regressions.
|
| + return std::max(
|
| + browser_composite_latency_history_.Percentile(
|
| + kBrowserCompositeLatencyEstimationPercentile) *
|
| + kBrowserCompositeLatencyEstimationSlack,
|
| + base::TimeDelta::FromMicroseconds(
|
| + (1.0f * base::Time::kMicrosecondsPerSecond) / (3.0f * 60)));
|
| }
|
|
|
| } // namespace content
|
|
|