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

Issue 2558763002: aw: Fix race between first frame draw and view detach causing deadlock. (Closed)

Created:
4 years ago by Tobias Sargeant
Modified:
4 years ago
Reviewers:
CC:
chromium-reviews
Target Ref:
refs/pending/branch-heads/2924
Project:
chromium
Visibility:
Public.

Description

aw: Fix race between first frame draw and view detach causing deadlock. If a AwContents.onDetachedFromWindow occurs at simulaneously with RenderThreadManager::DrawGL, then the following sequence of events can occur: * RenderThreadManager::DrawGL creates hardware_renderer_ because a frame is ready to be committed to the HardwareRenderer. * BrowserViewRenderer::OnDetachedFromWindow calls the uncommitted frame to be returned to the child compositor. * RenderThreadManager tries to commit the frame that is just returned, leaving it in a state where neither the RenderThreadManager, nor its HardwareRenderer has a frame. Then subsequently when deleting native objects, DeleteHardwareRendererOnUI does no work, meaning that hardware_renderer_ remains set at the time that the RenderThreadManager destructor is called, leading to a DCHECK, or deadlock. In order to avoid this, we consider RenderThreadManager to have a frame (and thus need to run the synchronous RenderThread cleanup in DeleteHardwareRendererOnUI) if it has ever received a frame (stored in has_received_frame_), rather than if it or hardware_renderer_ currently has a frame. In order that BrowserViewRenderer receives the right signal post deletion of hardware_renderer_, we reset has_received_frame_ when RenderThreadManager deletes hardware_renderer_, if RenderThreadManager does not currently have a frame to commit to a new HardwareRenderer instance. BUG=668692 Review-Url: https://codereview.chromium.org/2560463002 Cr-Commit-Position: refs/heads/master@{#436672} (cherry picked from commit ff08fc807243b2317ef1c8b42f3f423496d12a76) Committed: https://chromium.googlesource.com/chromium/src/+/45dbc1970abbac1c4a48da2ba2075205f397ae09

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+24 lines, -14 lines) Patch
M android_webview/browser/browser_view_renderer.h View 1 chunk +5 lines, -1 line 0 comments Download
M android_webview/browser/render_thread_manager.h View 2 chunks +3 lines, -1 line 0 comments Download
M android_webview/browser/render_thread_manager.cc View 7 chunks +16 lines, -12 lines 0 comments Download

Messages

Total messages: 2 (1 generated)
Tobias Sargeant
4 years ago (2016-12-07 11:32:44 UTC) #2
Message was sent while issue was closed.
Committed patchset #1 (id:1) manually as
45dbc1970abbac1c4a48da2ba2075205f397ae09.

Powered by Google App Engine
This is Rietveld 408576698