DescriptionMac Ü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 #
Messages
Total messages: 3 (0 generated)
|