summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/browser_view_renderer_impl.cc15
-rw-r--r--android_webview/browser/browser_view_renderer_impl.h2
2 files changed, 15 insertions, 2 deletions
diff --git a/android_webview/browser/browser_view_renderer_impl.cc b/android_webview/browser/browser_view_renderer_impl.cc
index ce5821f..3c3a1fd 100644
--- a/android_webview/browser/browser_view_renderer_impl.cc
+++ b/android_webview/browser/browser_view_renderer_impl.cc
@@ -147,7 +147,8 @@ BrowserViewRendererImpl::BrowserViewRendererImpl(
web_contents_(NULL),
update_frame_info_callback_(
base::Bind(&BrowserViewRendererImpl::OnFrameInfoUpdated,
- base::Unretained(ALLOW_THIS_IN_INITIALIZER_LIST(this)))) {
+ base::Unretained(ALLOW_THIS_IN_INITIALIZER_LIST(this)))),
+ prevent_client_invalidate_(false) {
DCHECK(java_helper);
@@ -233,7 +234,15 @@ void BrowserViewRendererImpl::DrawGL(AwDrawGLInfo* draw_info) {
}
compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height));
+
+ // We need to trigger a compositor invalidate because otherwise, if nothing
+ // has changed since last draw the compositor will early out (Android may
+ // trigger a draw at anytime). However, we don't want to trigger a client
+ // (i.e. Android View system) invalidate as a result of this (otherwise we'll
+ // end up in a loop of DrawGL calls).
+ prevent_client_invalidate_ = true;
compositor_->SetNeedsRedraw();
+ prevent_client_invalidate_ = false;
if (draw_info->is_layer) {
// When rendering into a separate layer no view clipping, transform,
@@ -441,7 +450,9 @@ void BrowserViewRendererImpl::ScheduleComposite() {
return;
is_composite_pending_ = true;
- Invalidate();
+
+ if (!prevent_client_invalidate_)
+ Invalidate();
}
skia::RefPtr<SkPicture> BrowserViewRendererImpl::GetLastCapturedPicture() {
diff --git a/android_webview/browser/browser_view_renderer_impl.h b/android_webview/browser/browser_view_renderer_impl.h
index 1de1794..d9b0b06 100644
--- a/android_webview/browser/browser_view_renderer_impl.h
+++ b/android_webview/browser/browser_view_renderer_impl.h
@@ -136,6 +136,8 @@ class BrowserViewRendererImpl
// Used to observe frame metadata updates.
content::ContentViewCore::UpdateFrameInfoCallback update_frame_info_callback_;
+ bool prevent_client_invalidate_;
+
DISALLOW_COPY_AND_ASSIGN(BrowserViewRendererImpl);
};