Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(896)

Side by Side Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 577273003: Add new latency_info for tracking browser composite time. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sievers Review Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_impl.h" 5 #include "content/browser/renderer_host/render_widget_host_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 using blink::WebKeyboardEvent; 82 using blink::WebKeyboardEvent;
83 using blink::WebMouseEvent; 83 using blink::WebMouseEvent;
84 using blink::WebMouseWheelEvent; 84 using blink::WebMouseWheelEvent;
85 using blink::WebTextDirection; 85 using blink::WebTextDirection;
86 86
87 namespace content { 87 namespace content {
88 namespace { 88 namespace {
89 89
90 bool g_check_for_pending_resize_ack = true; 90 bool g_check_for_pending_resize_ack = true;
91 91
92 const size_t kBrowserCompositeLatencyHistorySize = 60;
93 const double kBrowserCompositeLatencyEstimationPercentile = 90.0;
94 const double kBrowserCompositeLatencyEstimationSlack = 1.1;
95
92 typedef std::pair<int32, int32> RenderWidgetHostID; 96 typedef std::pair<int32, int32> RenderWidgetHostID;
93 typedef base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*> 97 typedef base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*>
94 RoutingIDWidgetMap; 98 RoutingIDWidgetMap;
95 base::LazyInstance<RoutingIDWidgetMap> g_routing_id_widget_map = 99 base::LazyInstance<RoutingIDWidgetMap> g_routing_id_widget_map =
96 LAZY_INSTANCE_INITIALIZER; 100 LAZY_INSTANCE_INITIALIZER;
97 101
98 int GetInputRouterViewFlagsFromCompositorFrameMetadata( 102 int GetInputRouterViewFlagsFromCompositorFrameMetadata(
99 const cc::CompositorFrameMetadata metadata) { 103 const cc::CompositorFrameMetadata metadata) {
100 int view_flags = InputRouter::VIEW_FLAGS_NONE; 104 int view_flags = InputRouter::VIEW_FLAGS_NONE;
101 105
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 input_method_active_(false), 183 input_method_active_(false),
180 text_direction_updated_(false), 184 text_direction_updated_(false),
181 text_direction_(blink::WebTextDirectionLeftToRight), 185 text_direction_(blink::WebTextDirectionLeftToRight),
182 text_direction_canceled_(false), 186 text_direction_canceled_(false),
183 suppress_next_char_events_(false), 187 suppress_next_char_events_(false),
184 pending_mouse_lock_request_(false), 188 pending_mouse_lock_request_(false),
185 allow_privileged_mouse_lock_(false), 189 allow_privileged_mouse_lock_(false),
186 has_touch_handler_(false), 190 has_touch_handler_(false),
187 last_input_number_(static_cast<int64>(GetProcess()->GetID()) << 32), 191 last_input_number_(static_cast<int64>(GetProcess()->GetID()) << 32),
188 next_browser_snapshot_id_(1), 192 next_browser_snapshot_id_(1),
193 browser_composite_latency_history_(kBrowserCompositeLatencyHistorySize),
189 weak_factory_(this) { 194 weak_factory_(this) {
190 CHECK(delegate_); 195 CHECK(delegate_);
191 if (routing_id_ == MSG_ROUTING_NONE) { 196 if (routing_id_ == MSG_ROUTING_NONE) {
192 routing_id_ = process_->GetNextRoutingID(); 197 routing_id_ = process_->GetNextRoutingID();
193 surface_id_ = GpuSurfaceTracker::Get()->AddSurfaceForRenderer( 198 surface_id_ = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
194 process_->GetID(), 199 process_->GetID(),
195 routing_id_); 200 routing_id_);
196 } else { 201 } else {
197 // TODO(piman): This is a O(N) lookup, where we could forward the 202 // TODO(piman): This is a O(N) lookup, where we could forward the
198 // information from the RenderWidgetHelper. The problem is that doing so 203 // information from the RenderWidgetHelper. The problem is that doing so
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 param.b.AssignTo(frame.get()); 1497 param.b.AssignTo(frame.get());
1493 std::vector<IPC::Message> messages_to_deliver_with_frame; 1498 std::vector<IPC::Message> messages_to_deliver_with_frame;
1494 messages_to_deliver_with_frame.swap(param.c); 1499 messages_to_deliver_with_frame.swap(param.c);
1495 1500
1496 for (size_t i = 0; i < frame->metadata.latency_info.size(); i++) 1501 for (size_t i = 0; i < frame->metadata.latency_info.size(); i++)
1497 AddLatencyInfoComponentIds(&frame->metadata.latency_info[i]); 1502 AddLatencyInfoComponentIds(&frame->metadata.latency_info[i]);
1498 1503
1499 input_router_->OnViewUpdated( 1504 input_router_->OnViewUpdated(
1500 GetInputRouterViewFlagsFromCompositorFrameMetadata(frame->metadata)); 1505 GetInputRouterViewFlagsFromCompositorFrameMetadata(frame->metadata));
1501 1506
1507 for (size_t i = 0; i < frame->metadata.latency_info.size(); ++i) {
1508 frame->metadata.latency_info[i].AddLatencyNumber(
1509 ui::INPUT_EVENT_BROWSER_COMPOSITE_COMPONENT, 0, 0);
1510 }
1511
1502 if (view_) { 1512 if (view_) {
1503 view_->OnSwapCompositorFrame(output_surface_id, frame.Pass()); 1513 view_->OnSwapCompositorFrame(output_surface_id, frame.Pass());
1504 view_->DidReceiveRendererFrame(); 1514 view_->DidReceiveRendererFrame();
1505 } else { 1515 } else {
1506 cc::CompositorFrameAck ack; 1516 cc::CompositorFrameAck ack;
1507 if (frame->gl_frame_data) { 1517 if (frame->gl_frame_data) {
1508 ack.gl_frame_data = frame->gl_frame_data.Pass(); 1518 ack.gl_frame_data = frame->gl_frame_data.Pass();
1509 ack.gl_frame_data->sync_point = 0; 1519 ack.gl_frame_data->sync_point = 0;
1510 } else if (frame->delegated_frame_data) { 1520 } else if (frame->delegated_frame_data) {
1511 cc::TransferableResource::ReturnResources( 1521 cc::TransferableResource::ReturnResources(
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after
2172 swap_component.event_time - original_component.event_time; 2182 swap_component.event_time - original_component.event_time;
2173 for (size_t i = 0; i < original_component.event_count; i++) { 2183 for (size_t i = 0; i < original_component.event_count; i++) {
2174 UMA_HISTOGRAM_CUSTOM_COUNTS( 2184 UMA_HISTOGRAM_CUSTOM_COUNTS(
2175 "Event.Latency.TouchToScrollUpdateSwap", 2185 "Event.Latency.TouchToScrollUpdateSwap",
2176 delta.InMicroseconds(), 2186 delta.InMicroseconds(),
2177 1, 2187 1,
2178 1000000, 2188 1000000,
2179 100); 2189 100);
2180 } 2190 }
2181 } 2191 }
2192
2193 ui::LatencyInfo::LatencyComponent gpu_swap_component;
2194 if (!latency_info.FindLatency(
2195 ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, 0, &gpu_swap_component)) {
2196 return;
2197 }
2198
2199 ui::LatencyInfo::LatencyComponent composite_component;
2200 if (latency_info.FindLatency(ui::INPUT_EVENT_BROWSER_COMPOSITE_COMPONENT,
2201 0,
2202 &composite_component)) {
2203 base::TimeDelta delta =
2204 gpu_swap_component.event_time - composite_component.event_time;
2205 browser_composite_latency_history_.InsertSample(delta);
2206 }
2182 } 2207 }
2183 2208
2184 void RenderWidgetHostImpl::DidReceiveRendererFrame() { 2209 void RenderWidgetHostImpl::DidReceiveRendererFrame() {
2185 view_->DidReceiveRendererFrame(); 2210 view_->DidReceiveRendererFrame();
2186 } 2211 }
2187 2212
2188 void RenderWidgetHostImpl::WindowSnapshotAsyncCallback( 2213 void RenderWidgetHostImpl::WindowSnapshotAsyncCallback(
2189 int routing_id, 2214 int routing_id,
2190 int snapshot_id, 2215 int snapshot_id,
2191 gfx::Size snapshot_size, 2216 gfx::Size snapshot_size,
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
2345 RenderWidgetHostImpl::GetRootBrowserAccessibilityManager() { 2370 RenderWidgetHostImpl::GetRootBrowserAccessibilityManager() {
2346 return delegate_ ? delegate_->GetRootBrowserAccessibilityManager() : NULL; 2371 return delegate_ ? delegate_->GetRootBrowserAccessibilityManager() : NULL;
2347 } 2372 }
2348 2373
2349 BrowserAccessibilityManager* 2374 BrowserAccessibilityManager*
2350 RenderWidgetHostImpl::GetOrCreateRootBrowserAccessibilityManager() { 2375 RenderWidgetHostImpl::GetOrCreateRootBrowserAccessibilityManager() {
2351 return delegate_ ? 2376 return delegate_ ?
2352 delegate_->GetOrCreateRootBrowserAccessibilityManager() : NULL; 2377 delegate_->GetOrCreateRootBrowserAccessibilityManager() : NULL;
2353 } 2378 }
2354 2379
2380 base::TimeDelta RenderWidgetHostImpl::GetEstimatedBrowserCompositeTime() {
2381 // TODO(orglofch) remove lower bound on estimate once we're sure it won't
2382 // cause regressions
2383 return std::max(
2384 browser_composite_latency_history_.Percentile(
2385 kBrowserCompositeLatencyEstimationPercentile) *
2386 kBrowserCompositeLatencyEstimationSlack,
2387 base::TimeDelta::FromMicroseconds(
2388 (1.0f * base::Time::kMicrosecondsPerSecond) / (3.0f * 60)));
2389 }
2390
2355 #if defined(OS_WIN) 2391 #if defined(OS_WIN)
2356 gfx::NativeViewAccessible 2392 gfx::NativeViewAccessible
2357 RenderWidgetHostImpl::GetParentNativeViewAccessible() { 2393 RenderWidgetHostImpl::GetParentNativeViewAccessible() {
2358 return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL; 2394 return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL;
2359 } 2395 }
2360 #endif 2396 #endif
2361 2397
2362 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { 2398 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() {
2363 if (view_) 2399 if (view_)
2364 return view_->PreferredReadbackFormat(); 2400 return view_->PreferredReadbackFormat();
2365 return kN32_SkColorType; 2401 return kN32_SkColorType;
2366 } 2402 }
2367 2403
2368 } // namespace content 2404 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698