diff options
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/browser/browser_view_renderer.cc | 15 | ||||
-rw-r--r-- | android_webview/browser/browser_view_renderer.h | 4 | ||||
-rw-r--r-- | android_webview/browser/browser_view_renderer_client.h | 11 | ||||
-rw-r--r-- | android_webview/browser/shared_renderer_state.cc | 2 | ||||
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwContents.java | 16 | ||||
-rw-r--r-- | android_webview/native/aw_contents.cc | 10 | ||||
-rw-r--r-- | android_webview/native/aw_contents.h | 2 |
7 files changed, 29 insertions, 31 deletions
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc index 6518f4f..f897b0c 100644 --- a/android_webview/browser/browser_view_renderer.cc +++ b/android_webview/browser/browser_view_renderer.cc @@ -107,9 +107,8 @@ SharedRendererState* BrowserViewRenderer::GetSharedRendererState() { return &shared_renderer_state_; } -bool BrowserViewRenderer::RequestDrawGL(jobject canvas, - bool wait_for_completion) { - return client_->RequestDrawGL(canvas, wait_for_completion); +bool BrowserViewRenderer::RequestDrawGL(bool wait_for_completion) { + return client_->RequestDrawGL(wait_for_completion); } // This function updates the resource allocation in GlobalTileManager. @@ -208,14 +207,14 @@ bool BrowserViewRenderer::OnDraw(jobject java_canvas, if (is_hardware_canvas && attached_to_window_ && !switches::ForceAuxiliaryBitmap()) { - return OnDrawHardware(java_canvas); + return OnDrawHardware(); } // Perform a software draw return OnDrawSoftware(java_canvas); } -bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { +bool BrowserViewRenderer::OnDrawHardware() { TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware"); if (!compositor_) return false; @@ -237,7 +236,7 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { "EarlyOut_EmptyVisibleRect", TRACE_EVENT_SCOPE_THREAD); shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(true); - return client_->RequestDrawGL(java_canvas, false); + return true; } ReturnResourceFromParent(); @@ -246,7 +245,7 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { "EarlyOut_PreviousFrameUnconsumed", TRACE_EVENT_SCOPE_THREAD); DidSkipCompositeInDraw(); - return client_->RequestDrawGL(java_canvas, false); + return true; } scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); @@ -255,7 +254,7 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), false); GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); - return client_->RequestDrawGL(java_canvas, false); + return true; } scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { diff --git a/android_webview/browser/browser_view_renderer.h b/android_webview/browser/browser_view_renderer.h index 95ec894..b0852fd 100644 --- a/android_webview/browser/browser_view_renderer.h +++ b/android_webview/browser/browser_view_renderer.h @@ -67,7 +67,7 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, virtual ~BrowserViewRenderer(); SharedRendererState* GetSharedRendererState(); - bool RequestDrawGL(jobject canvas, bool wait_for_completion); + bool RequestDrawGL(bool wait_for_completion); // Main handler for view drawing: performs a SW draw immediately, or sets up // a subsequent GL Draw (via BrowserViewRendererClient::RequestDrawGL) and @@ -162,7 +162,7 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, const gfx::Vector2dF& total_scroll_offset_dip, const gfx::SizeF& scrollable_size_dip); - bool OnDrawHardware(jobject java_canvas); + bool OnDrawHardware(); scoped_ptr<cc::CompositorFrame> CompositeHw(); void ReturnUnusedResource(scoped_ptr<cc::CompositorFrame> frame); void ReturnResourceFromParent(); diff --git a/android_webview/browser/browser_view_renderer_client.h b/android_webview/browser/browser_view_renderer_client.h index ebf5b7b..dfa5ff0 100644 --- a/android_webview/browser/browser_view_renderer_client.h +++ b/android_webview/browser/browser_view_renderer_client.h @@ -14,12 +14,11 @@ namespace android_webview { class BrowserViewRendererClient { public: - // Request DrawGL be called. Passing null |canvas| implies the request - // will be of AwDrawGLInfo::kModeProcess type. |wait_for_completion| - // will cause the call to block until DrawGL has happened; it does not - // work when |canvas| is not NULL. The callback may never be made, and - // the mode may be promoted to kModeDraw. - virtual bool RequestDrawGL(jobject canvas, bool wait_for_completion) = 0; + // Request DrawGL to be in called AwDrawGLInfo::kModeProcess type. + // |wait_for_completion| will cause the call to block until DrawGL has + // happened. The callback may never be made, and the mode may be promoted to + // kModeDraw. + virtual bool RequestDrawGL(bool wait_for_completion) = 0; // Called when a new Picture is available. Needs to be enabled // via the EnableOnNewPicture method. diff --git a/android_webview/browser/shared_renderer_state.cc b/android_webview/browser/shared_renderer_state.cc index 6cb417b..da12c34 100644 --- a/android_webview/browser/shared_renderer_state.cc +++ b/android_webview/browser/shared_renderer_state.cc @@ -119,7 +119,7 @@ void SharedRendererState::ResetRequestDrawGLCallback() { void SharedRendererState::ClientRequestDrawGLOnUIThread() { DCHECK(ui_loop_->BelongsToCurrentThread()); ResetRequestDrawGLCallback(); - if (!browser_view_renderer_->RequestDrawGL(NULL, false)) { + if (!browser_view_renderer_->RequestDrawGL(false)) { g_request_draw_gl_tracker.Get().ResetPending(); LOG(ERROR) << "Failed to request GL process. Deadlock likely"; } diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index ac3bf8b..cb996fa 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -2070,8 +2070,8 @@ public class AwContents { } @CalledByNative - private boolean requestDrawGL(Canvas canvas, boolean waitForCompletion) { - return mNativeGLDelegate.requestDrawGL(canvas, waitForCompletion, mContainerView); + private boolean requestDrawGL(boolean waitForCompletion) { + return mNativeGLDelegate.requestDrawGL(null, waitForCompletion, mContainerView); } private static final boolean SUPPORTS_ON_ANIMATION = @@ -2255,13 +2255,15 @@ public class AwContents { mScrollOffsetManager.syncScrollOffsetFromOnDraw(); Rect globalVisibleRect = getGlobalVisibleRect(); - if (!nativeOnDraw(mNativeAwContents, canvas, canvas.isHardwareAccelerated(), + boolean did_draw = nativeOnDraw( + mNativeAwContents, canvas, canvas.isHardwareAccelerated(), mContainerView.getScrollX(), mContainerView.getScrollY(), globalVisibleRect.left, globalVisibleRect.top, - globalVisibleRect.right, globalVisibleRect.bottom)) { - // Can happen during initialization when compositor is not set - // up. Or when clearView - // is in effect. Just draw background color instead. + globalVisibleRect.right, globalVisibleRect.bottom); + if (did_draw && canvas.isHardwareAccelerated()) { + did_draw = mNativeGLDelegate.requestDrawGL(canvas, false, mContainerView); + } + if (!did_draw) { canvas.drawColor(getEffectiveBackgroundColor()); } diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc index 1994e89..4bd68b7 100644 --- a/android_webview/native/aw_contents.cc +++ b/android_webview/native/aw_contents.cc @@ -748,15 +748,13 @@ void AwContents::OnReceivedTouchIconUrl(const std::string& url, env, obj.obj(), ConvertUTF8ToJavaString(env, url).obj(), precomposed); } -bool AwContents::RequestDrawGL(jobject canvas, bool wait_for_completion) { +bool AwContents::RequestDrawGL(bool wait_for_completion) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - DCHECK(!canvas || !wait_for_completion); JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); if (obj.is_null()) return false; - return Java_AwContents_requestDrawGL( - env, obj.obj(), canvas, wait_for_completion); + return Java_AwContents_requestDrawGL(env, obj.obj(), wait_for_completion); } void AwContents::PostInvalidate() { @@ -907,7 +905,7 @@ void AwContents::ReleaseHardwareDrawIfNeeded() { bool hardware_initialized = browser_view_renderer_.hardware_enabled(); if (hardware_initialized) { - bool draw_functor_succeeded = RequestDrawGL(NULL, true); + bool draw_functor_succeeded = RequestDrawGL(true); if (!draw_functor_succeeded) { LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?"; // Calling release on wrong thread intentionally. @@ -931,7 +929,7 @@ void AwContents::ReleaseHardwareDrawIfNeeded() { if (hardware_initialized) { // Flush any invoke functors that's caused by OnDetachedFromWindow. - RequestDrawGL(NULL, true); + RequestDrawGL(true); } } diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h index 7ada436..8f42a92 100644 --- a/android_webview/native/aw_contents.h +++ b/android_webview/native/aw_contents.h @@ -189,7 +189,7 @@ class AwContents : public FindHelper::Listener, const gfx::Size& contents_size) override; // BrowserViewRendererClient implementation. - virtual bool RequestDrawGL(jobject canvas, bool wait_for_completion) override; + virtual bool RequestDrawGL(bool wait_for_completion) override; virtual void PostInvalidate() override; virtual void UpdateParentDrawConstraints() override; virtual void DidSkipCommitFrame() override; |