Chromium Code Reviews| Index: android_webview/browser/browser_view_renderer.cc |
| diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc |
| index ea9d60312836a4a3c45dc9dd20850bf05028defd..3d843e934e65498e9ae8358a2cd7e7e927f834cd 100644 |
| --- a/android_webview/browser/browser_view_renderer.cc |
| +++ b/android_webview/browser/browser_view_renderer.cc |
| @@ -98,7 +98,6 @@ BrowserViewRenderer::BrowserViewRenderer( |
| clear_view_(false), |
| offscreen_pre_raster_(false), |
| compositor_needs_continuous_invalidate_(false), |
| - invalidate_after_composite_(false), |
| block_invalidates_(false), |
| fallback_tick_pending_(false) { |
| } |
| @@ -216,27 +215,11 @@ bool BrowserViewRenderer::OnDrawHardware() { |
| return false; |
| } |
| - ReturnResourceFromParent(); |
| - if (shared_renderer_state_.HasCompositorFrameOnUI()) { |
| - TRACE_EVENT_INSTANT0("android_webview", |
| - "EarlyOut_PreviousFrameUnconsumed", |
| - TRACE_EVENT_SCOPE_THREAD); |
| - DidSkipCompositeInDraw(); |
| - return true; |
| - } |
| - |
| - scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); |
| - if (!frame.get()) { |
| - TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame", |
| - TRACE_EVENT_SCOPE_THREAD); |
| - return false; |
| - } |
| - |
| - shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), false); |
| - return true; |
| + return CompositeHw(); |
| } |
| -scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { |
| +bool BrowserViewRenderer::CompositeHw() { |
| + ReturnResourceFromParent(); |
| compositor_->SetMemoryPolicy(CalculateDesiredMemoryPolicy()); |
| parent_draw_constraints_ = |
| @@ -254,8 +237,7 @@ scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { |
| // Leave viewport_rect_for_tile_priority empty if offscreen_pre_raster_ is on. |
| if (!offscreen_pre_raster_) { |
| - if (parent_draw_constraints_.is_layer || |
| - last_on_draw_global_visible_rect_.IsEmpty()) { |
| + if (parent_draw_constraints_.is_layer) { |
| viewport_rect_for_tile_priority = parent_draw_constraints_.surface_rect; |
| } else { |
| viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_; |
| @@ -269,21 +251,22 @@ scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { |
| clip, |
| viewport_rect_for_tile_priority, |
| transform_for_tile_priority); |
| - if (frame.get()) |
| - DidComposite(); |
| - return frame.Pass(); |
| + if (!frame.get()) { |
| + TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame", |
| + TRACE_EVENT_SCOPE_THREAD); |
| + return false; |
| + } |
| + |
| + DidComposite(); |
| + ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI()); |
|
hush (inactive)
2015/03/13 18:45:17
so this is the case where the kModeDraw does not c
boliu
2015/03/18 02:02:22
This is copied from fallback tick run. So if there
|
| + shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass()); |
| + return true; |
| } |
| void BrowserViewRenderer::UpdateParentDrawConstraints() { |
| - // Post an invalidate if the parent draw constraints are stale and there is |
| - // no pending invalidate. |
| - bool needs_force_invalidate = |
| - shared_renderer_state_.NeedsForceInvalidateOnNextDrawGLOnUI(); |
| - if (needs_force_invalidate || |
| - !parent_draw_constraints_.Equals( |
| + if (!parent_draw_constraints_.Equals( |
| shared_renderer_state_.GetParentDrawConstraintsOnUI())) { |
| - shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(false); |
| - EnsureContinuousInvalidation(true, needs_force_invalidate); |
| + EnsureContinuousInvalidation(true); |
| } |
| } |
| @@ -307,11 +290,6 @@ void BrowserViewRenderer::ReturnResourceFromParent() { |
| } |
| } |
| -void BrowserViewRenderer::DidSkipCommitFrame() { |
| - // Treat it the same way as skipping onDraw. |
| - DidSkipCompositeInDraw(); |
| -} |
| - |
| void BrowserViewRenderer::DetachFunctorFromView() { |
| client_->DetachFunctorFromView(); |
| } |
| @@ -356,7 +334,7 @@ void BrowserViewRenderer::ClearView() { |
| clear_view_ = true; |
| // Always invalidate ignoring the compositor to actually clear the webview. |
| - EnsureContinuousInvalidation(true, false); |
| + EnsureContinuousInvalidation(true); |
| } |
| void BrowserViewRenderer::SetOffscreenPreRaster(bool enable) { |
| @@ -371,7 +349,7 @@ void BrowserViewRenderer::SetIsPaused(bool paused) { |
| "paused", |
| paused); |
| is_paused_ = paused; |
| - EnsureContinuousInvalidation(false, false); |
| + EnsureContinuousInvalidation(false); |
| } |
| void BrowserViewRenderer::SetViewVisibility(bool view_visible) { |
| @@ -390,7 +368,7 @@ void BrowserViewRenderer::SetWindowVisibility(bool window_visible) { |
| "window_visible", |
| window_visible); |
| window_visible_ = window_visible; |
| - EnsureContinuousInvalidation(false, false); |
| + EnsureContinuousInvalidation(false); |
| } |
| void BrowserViewRenderer::OnSizeChanged(int width, int height) { |
| @@ -471,7 +449,7 @@ void BrowserViewRenderer::SetContinuousInvalidate(bool invalidate) { |
| invalidate); |
| compositor_needs_continuous_invalidate_ = invalidate; |
| - EnsureContinuousInvalidation(false, false); |
| + EnsureContinuousInvalidation(false); |
| } |
| void BrowserViewRenderer::SetDipScale(float dip_scale) { |
| @@ -642,20 +620,13 @@ void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll, |
| } |
| void BrowserViewRenderer::EnsureContinuousInvalidation( |
| - bool force_invalidate, |
| - bool skip_reschedule_tick) { |
| - if (force_invalidate) |
| - invalidate_after_composite_ = true; |
| - |
| + bool force_invalidate) { |
| // This method should be called again when any of these conditions change. |
| bool need_invalidate = |
| - compositor_needs_continuous_invalidate_ || invalidate_after_composite_; |
| + compositor_needs_continuous_invalidate_ || force_invalidate; |
| if (!need_invalidate || block_invalidates_) |
| return; |
| - if (!compositor_needs_continuous_invalidate_ && invalidate_after_composite_) |
| - invalidate_after_composite_ = false; |
| - |
| // 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. |
| client_->PostInvalidate(); |
| @@ -672,7 +643,7 @@ void BrowserViewRenderer::EnsureContinuousInvalidation( |
| return; |
| block_invalidates_ = compositor_needs_continuous_invalidate_; |
| - if (skip_reschedule_tick && fallback_tick_pending_) |
| + if (fallback_tick_pending_) |
| return; |
| // Unretained here is safe because the callbacks are cancelled when |
| @@ -718,12 +689,7 @@ void BrowserViewRenderer::FallbackTickFired() { |
| fallback_tick_pending_ = false; |
| if (compositor_needs_continuous_invalidate_ && compositor_) { |
| if (hardware_enabled_) { |
| - ReturnResourceFromParent(); |
| - ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI()); |
| - scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); |
| - if (frame.get()) { |
| - shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), true); |
| - } |
| + CompositeHw(); |
| } else { |
| ForceFakeCompositeSW(); |
| } |
| @@ -755,12 +721,7 @@ void BrowserViewRenderer::DidComposite() { |
| post_fallback_tick_.Cancel(); |
| fallback_tick_fired_.Cancel(); |
| fallback_tick_pending_ = false; |
| - EnsureContinuousInvalidation(false, false); |
| -} |
| - |
| -void BrowserViewRenderer::DidSkipCompositeInDraw() { |
| - block_invalidates_ = false; |
| - EnsureContinuousInvalidation(true, true); |
| + EnsureContinuousInvalidation(false); |
| } |
| std::string BrowserViewRenderer::ToString() const { |