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

Issue 388793003: Mac ÜC: Fix white page hangs (Closed)

Created:
6 years, 5 months ago by ccameron
Modified:
6 years, 5 months ago
CC:
chromium-reviews, jam, sievers+watch_chromium.org, jbauman+watch_chromium.org, darin-cc_chromium.org, kalyank, piman+watch_chromium.org, danakj+watch_chromium.org, enne (OOO)
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Project:
chromium
Visibility:
Public.

Description

Mac ÜC: Fix white page hangs The root cause of the white page hangs is that messages sent to a RenderWidgetHelper (as was added in r281866 to enable smooth resize), the message could be dropped if the RenderWidgetHelper was destroyed. This is a valid behavior for messages that are specifically for a given renderer process, but it is not a valid behavior for browser compositor swaps (because we use these messages to throttle the compositor, and will hang if they never arrive). To fix this, always post a task to handle ViewHostMsg_CompositorSurfaceBuffersSwapped messages, in addition to forwarding the message to the RenderWidgetHelper. Add a unique token to each ViewHostMsg_CompositorSurfaceBuffersSwapped and track which tokens are outstanding, to ensure that each message is only sent once. This is a somewhat bulky way of solving the problem, because the RenderWidgetHost does its filtering during resize through IPCs, which can't have pointers to unique data structures in them. A bug on doing something more sensible is already open. While in the neighborhood, make the behavior of client-less swaps more explicit -- un-block the renderer, but do not draw them. The situation where a swap for a removed client arrived was somewhat dangerous, in that it may be that the efforts to draw the frame would fail, resulting in a failure to ack the frame, and a hang. Also while in the neighborhood, replace the setNeedsDisplay+displayIfNeeded call with a immediatelyForceDisplayAndAck, because it has been shown that displayIfNeeded can sometimes do nothing (in which case we might never ack). BUG=392760

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+66 lines, -16 lines) Patch
M content/browser/compositor/browser_compositor_view_private_mac.mm View 4 chunks +21 lines, -6 lines 0 comments Download
M content/browser/gpu/gpu_process_host.cc View 2 chunks +12 lines, -6 lines 0 comments Download
M content/browser/renderer_host/render_widget_helper.h View 1 chunk +8 lines, -0 lines 0 comments Download
M content/browser/renderer_host/render_widget_helper_mac.mm View 5 chunks +24 lines, -4 lines 0 comments Download
M content/common/view_messages.h View 1 chunk +1 line, -0 lines 0 comments Download

Messages

Total messages: 3 (0 generated)
ccameron
This is a hack on top of a hack. I can't wait to get RenderWidgetHelper's ...
6 years, 5 months ago (2014-07-11 12:04:38 UTC) #1
danakj
After all the discussion we've had about the synchronous composite, I'm inclined to suggest reverting ...
6 years, 5 months ago (2014-07-11 15:37:12 UTC) #2
danakj
6 years, 5 months ago (2014-07-11 16:52:51 UTC) #3

          

Powered by Google App Engine
This is Rietveld 408576698