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. |