summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/browser_view_renderer.cc15
-rw-r--r--android_webview/browser/browser_view_renderer.h4
-rw-r--r--android_webview/browser/browser_view_renderer_client.h11
-rw-r--r--android_webview/browser/shared_renderer_state.cc2
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java16
-rw-r--r--android_webview/native/aw_contents.cc10
-rw-r--r--android_webview/native/aw_contents.h2
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;