diff options
author | boliu <boliu@chromium.org> | 2014-10-24 19:06:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-25 02:07:00 +0000 |
commit | 22c7532e45a063071f2e8aa17a6127f4f89f4d7c (patch) | |
tree | 728500ebead8870b2b369986b1c736d675a3bfb8 /android_webview | |
parent | ded7ece08808790a5f86c11eb0873e2d3c3b6329 (diff) | |
download | chromium_src-22c7532e45a063071f2e8aa17a6127f4f89f4d7c.zip chromium_src-22c7532e45a063071f2e8aa17a6127f4f89f4d7c.tar.gz chromium_src-22c7532e45a063071f2e8aa17a6127f4f89f4d7c.tar.bz2 |
aw: Remove jobject canvas from native RequestDrawGL
For onDraw with java canvas, the RequestDrawGL can be made from Java
side. All other uses pass NULL for java canvas, so remove it.
BUG=
Review URL: https://codereview.chromium.org/679513002
Cr-Commit-Position: refs/heads/master@{#301261}
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; |