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

Unified Diff: android_webview/browser/in_process_view_renderer.cc

Issue 136753015: aw: Move clearView implementaiton to native (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: invalidate to native too Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/in_process_view_renderer.cc
diff --git a/android_webview/browser/in_process_view_renderer.cc b/android_webview/browser/in_process_view_renderer.cc
index ca649f178daeaa92c1127a9b01b2ed4baebdafc1..1becdf1d5a885a2b4830b64ae44b5b70bd96d163 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -229,6 +229,7 @@ InProcessViewRenderer::InProcessViewRenderer(
dip_scale_(0.0),
page_scale_factor_(1.0),
on_new_picture_enable_(false),
+ clear_view_(false),
compositor_needs_continuous_invalidate_(false),
block_invalidates_(false),
width_(0),
@@ -375,6 +376,8 @@ bool InProcessViewRenderer::OnDraw(jobject java_canvas,
const gfx::Vector2d& scroll,
const gfx::Rect& clip) {
scroll_at_start_of_frame_ = scroll;
+ if (clear_view_)
+ return false;
if (is_hardware_canvas && attached_to_window_ && HardwareEnabled()) {
// We should be performing a hardware draw here. If we don't have the
// comositor yet or if RequestDrawGL fails, it means we failed this draw and
@@ -627,6 +630,18 @@ void InProcessViewRenderer::EnableOnNewPicture(bool enabled) {
EnsureContinuousInvalidation(NULL, false);
}
+void InProcessViewRenderer::ClearView() {
+ TRACE_EVENT_INSTANT0("android_webview",
+ "InProcessViewRenderer::ClearView",
+ TRACE_EVENT_SCOPE_THREAD);
+ if (clear_view_)
+ return;
+
+ clear_view_ = true;
+ // Always invalidate ignoring the compositor to actually clear the webview.
+ EnsureContinuousInvalidation(NULL, true);
+}
+
void InProcessViewRenderer::SetIsPaused(bool paused) {
TRACE_EVENT_INSTANT1("android_webview",
"InProcessViewRenderer::SetIsPaused",
@@ -792,6 +807,11 @@ void InProcessViewRenderer::ScrollTo(gfx::Vector2d scroll_offset) {
}
void InProcessViewRenderer::DidUpdateContent() {
+ TRACE_EVENT_INSTANT0("android_webview",
+ "InProcessViewRenderer::DidUpdateContent",
+ TRACE_EVENT_SCOPE_THREAD);
+ clear_view_ = false;
+ EnsureContinuousInvalidation(NULL, false);
if (on_new_picture_enable_)
client_->OnNewPicture();
}
@@ -883,6 +903,8 @@ void InProcessViewRenderer::EnsureContinuousInvalidation(
if (!need_invalidate || block_invalidates_)
return;
+ // Always call view invalidate. We rely the Android framework to ignore the
+ // invalidate when it's not needed such as when view is not visible.
if (draw_info) {
draw_info->dirty_left = cached_global_visible_rect_.x();
draw_info->dirty_top = cached_global_visible_rect_.y();
@@ -893,8 +915,14 @@ void InProcessViewRenderer::EnsureContinuousInvalidation(
client_->PostInvalidate();
}
- bool throttle_fallback_tick = (is_paused_ && !on_new_picture_enable_) ||
- (attached_to_window_ && !window_visible_);
+ // Stop fallback ticks when one of these is true.
+ // 1) Webview is paused. Also need to check we are not in clear view since
+ // paused, offscreen still expect clear view to recover.
+ // 2) If we are attached to window and the window is not visible (eg when
+ // app is in the background). We are sure in this case the webview is used
+ // "on-screen" but that updates are not needed when in the background.
+ bool throttle_fallback_tick =
+ (is_paused_ && !clear_view_) || (attached_to_window_ && !window_visible_);
if (throttle_fallback_tick)
return;
@@ -977,6 +1005,7 @@ std::string InProcessViewRenderer::ToString(AwDrawGLInfo* draw_info) const {
overscroll_rounding_error_.ToString().c_str());
base::StringAppendF(
&str, "on_new_picture_enable: %d ", on_new_picture_enable_);
+ base::StringAppendF(&str, "clear_view: %d ", clear_view_);
if (draw_info) {
base::StringAppendF(&str,
"clip left top right bottom: [%d %d %d %d] ",

Powered by Google App Engine
This is Rietveld 408576698