Chromium Code Reviews| 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. |