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

Unified Diff: android_webview/browser/in_process_view_renderer.cc

Issue 17136003: [Android WebView] Fallback tick (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 a7fb3c1a00c86ba7ee8ebb1c1d7de14b98c3446f..5db427420d3b4ba2c5f96da5dacb5bb818ca787c 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -275,6 +275,8 @@ AwDrawSWFunctionTable* g_sw_draw_functions = NULL;
// as a fallback mechanism, which will have an important performance impact.
bool g_is_skia_version_compatible = false;
+const int64 kFallbackTickTimeoutInMilliseconds = 500;
+
} // namespace
// static
@@ -319,6 +321,7 @@ InProcessViewRenderer::InProcessViewRenderer(
CHECK(web_contents_);
web_contents_->SetUserData(kUserDataKey, new UserData(this));
content::SynchronousCompositor::SetClientForWebContents(web_contents_, this);
+
// Currently the logic in this class relies on |compositor_| remaining NULL
// until the DidInitializeCompositor() call, hence it is not set here.
}
@@ -345,6 +348,7 @@ bool InProcessViewRenderer::OnDraw(jobject java_canvas,
bool is_hardware_canvas,
const gfx::Vector2d& scroll,
const gfx::Rect& clip) {
+ fallback_tick_.Cancel();
scroll_at_start_of_frame_ = scroll;
if (is_hardware_canvas && attached_to_window_ && compositor_ &&
HardwareEnabled() && client_->RequestDrawGL(java_canvas)) {
@@ -637,7 +641,6 @@ void InProcessViewRenderer::SetContinuousInvalidate(bool invalidate) {
"invalidate",
invalidate);
continuous_invalidate_ = invalidate;
- // TODO(boliu): Handle if not attached to window case.
EnsureContinuousInvalidation(NULL);
}
@@ -698,10 +701,35 @@ void InProcessViewRenderer::EnsureContinuousInvalidation(
} else {
client_->PostInvalidate();
}
+
+ fallback_tick_.Reset(base::Bind(&InProcessViewRenderer::FallbackTick,
+ base::Unretained(this)));
joth 2013/06/21 20:22:01 comment cancelation
boliu 2013/06/21 21:49:41 Done.
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ fallback_tick_.callback(),
+ base::TimeDelta::FromMilliseconds(kFallbackTickTimeoutInMilliseconds));
+
block_invalidates_ = true;
}
}
+void InProcessViewRenderer::FallbackTick() {
joth 2013/06/21 20:22:01 OnFallbackTick? meh FallbackTickFired()
boliu 2013/06/21 21:49:41 Done. FallbackTickFired.
+ TRACE_EVENT1("android_webview",
+ "InProcessViewRenderer::FallbackTick",
+ "continuous_invalidate_",
+ continuous_invalidate_);
+ if (continuous_invalidate_) {
+ SkBitmap bitmap;
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
+ bitmap.allocPixels();
joth 2013/06/21 20:22:01 SkDevice device(SkBitmap::kARGB_8888_Config, 1, 1)
boliu 2013/06/21 21:49:41 Done.
+ SkCanvas canvas(bitmap);
+ block_invalidates_ = true;
+ RenderSW(&canvas);
+ }
+ block_invalidates_ = false;
+ EnsureContinuousInvalidation(NULL);
+}
+
bool InProcessViewRenderer::RenderSW(SkCanvas* canvas) {
// TODO(joth): BrowserViewRendererImpl had a bunch of logic for dpi and page
// scale here. Determine what if any needs bringing over to this class.

Powered by Google App Engine
This is Rietveld 408576698