Prevent an unresponsive OOPIF from blocking events to main page |
||
Issue descriptionWhen events are targeted asynchronously, the events are queued in the browser for the entire tab until the renderer responds to the targeting request. If the renderer never responds, or responds very slowly, then that affects the event-dispatch for the entire tab. We need to have a failsafe in the browser for this. The approach we discussed is to give the renderer some deadline to respond (say, X seconds). If the renderer does not respond within that time, then the event is dispatched to its embedder instead. The offending renderer is no longer asked to target again until it responds to the earlier request (and probably also submits a compositor-frame ... although that may not be necessary). To start off: I think we should start with a fairly large value for X (say 5 or 10 seconds). We can gradually reduce the deadline over time.
,
Jan 17 2018
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/2d3141fd67830dd068b0bc14218afae8acc844fc commit 2d3141fd67830dd068b0bc14218afae8acc844fc Author: Ken Buchanan <kenrb@chromium.org> Date: Wed Jan 17 23:08:39 2018 Time out async hit test queries This CL adds a timer to RenderWidgetTargeter to detect when a request has been sent to an unresponsive renderer. When the timer fires, the following happens: - the renderer is tracked as unresponsive so that further queries will not be sent there; - the event is sent to the parent of the unresponsive renderer if it has one; - if the main frame is unresponsive, the event is sent there anyway If a hit test query response is later received from a renderer after the timer has fired, then that renderer is no longer tracked as unresponsive and the response is discarded. Bug: 801043 Change-Id: I854cd3179170367df233bb833fd69d0ff449e6e3 Reviewed-on: https://chromium-review.googlesource.com/865815 Reviewed-by: Alex Moshchuk <alexmos@chromium.org> Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org> Commit-Queue: Ken Buchanan <kenrb@chromium.org> Cr-Commit-Position: refs/heads/master@{#529941} [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/BUILD.gn [add] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/renderer_host/input/one_shot_timeout_monitor.cc [add] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/renderer_host/input/one_shot_timeout_monitor.h [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/renderer_host/render_widget_host_input_event_router.cc [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/renderer_host/render_widget_host_input_event_router.h [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/renderer_host/render_widget_targeter.cc [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/renderer_host/render_widget_targeter.h [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/browser/site_per_process_browsertest.cc [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/common/content_constants_internal.cc [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/common/content_constants_internal.h [add] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/test/data/frame_tree/busy_frame.html [add] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/content/test/data/frame_tree/page_with_positioned_busy_frame.html [modify] https://crrev.com/2d3141fd67830dd068b0bc14218afae8acc844fc/testing/buildbot/filters/viz.content_browsertests.filter
,
Jan 18 2018
|
||
►
Sign in to add a comment |
||
Comment 1 by sadrul@chromium.org
, Jan 16 2018