Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "android_webview/browser/browser_view_renderer.h" | 5 #include "android_webview/browser/browser_view_renderer.h" |
| 6 | 6 |
| 7 #include "android_webview/browser/browser_view_renderer_client.h" | 7 #include "android_webview/browser/browser_view_renderer_client.h" |
| 8 #include "android_webview/browser/shared_renderer_state.h" | 8 #include "android_webview/browser/shared_renderer_state.h" |
| 9 #include "android_webview/common/aw_switches.h" | 9 #include "android_webview/common/aw_switches.h" |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 299 bool needs_force_invalidate = | 299 bool needs_force_invalidate = |
| 300 shared_renderer_state_.NeedsForceInvalidateOnNextDrawGLOnUI(); | 300 shared_renderer_state_.NeedsForceInvalidateOnNextDrawGLOnUI(); |
| 301 if (needs_force_invalidate || | 301 if (needs_force_invalidate || |
| 302 !parent_draw_constraints_.Equals( | 302 !parent_draw_constraints_.Equals( |
| 303 shared_renderer_state_.GetParentDrawConstraintsOnUI())) { | 303 shared_renderer_state_.GetParentDrawConstraintsOnUI())) { |
| 304 shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(false); | 304 shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(false); |
| 305 EnsureContinuousInvalidation(true, needs_force_invalidate); | 305 EnsureContinuousInvalidation(true, needs_force_invalidate); |
| 306 } | 306 } |
| 307 } | 307 } |
| 308 | 308 |
| 309 void BrowserViewRenderer::ReturnUnusedResource( | |
| 310 scoped_ptr<cc::CompositorFrame> frame) { | |
| 311 if (!frame.get()) | |
| 312 return; | |
| 313 | |
| 314 cc::CompositorFrameAck frame_ack; | |
| 315 cc::TransferableResource::ReturnResources( | |
| 316 frame->delegated_frame_data->resource_list, &frame_ack.resources); | |
| 317 if (compositor_ && !frame_ack.resources.empty()) | |
| 318 compositor_->ReturnResources(frame_ack); | |
| 319 } | |
| 320 | |
| 321 void BrowserViewRenderer::ReturnResourceFromParent() { | 309 void BrowserViewRenderer::ReturnResourceFromParent() { |
| 322 cc::CompositorFrameAck frame_ack; | 310 cc::CompositorFrameAck frame_ack; |
| 323 shared_renderer_state_.SwapReturnedResourcesOnUI(&frame_ack.resources); | 311 shared_renderer_state_.SwapReturnedResourcesOnUI(&frame_ack.resources); |
| 324 if (compositor_ && !frame_ack.resources.empty()) { | 312 if (compositor_ && !frame_ack.resources.empty()) { |
| 325 compositor_->ReturnResources(frame_ack); | 313 compositor_->ReturnResources(frame_ack); |
| 326 } | 314 } |
| 327 } | 315 } |
| 328 | 316 |
| 329 void BrowserViewRenderer::DidSkipCommitFrame() { | 317 void BrowserViewRenderer::DidSkipCommitFrame() { |
| 330 // Treat it the same way as skipping onDraw. | 318 // Treat it the same way as skipping onDraw. |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 446 } | 434 } |
| 447 | 435 |
| 448 void BrowserViewRenderer::OnDetachedFromWindow() { | 436 void BrowserViewRenderer::OnDetachedFromWindow() { |
| 449 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); | 437 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); |
| 450 attached_to_window_ = false; | 438 attached_to_window_ = false; |
| 451 DCHECK(!hardware_enabled_); | 439 DCHECK(!hardware_enabled_); |
| 452 } | 440 } |
| 453 | 441 |
| 454 void BrowserViewRenderer::ReleaseHardware() { | 442 void BrowserViewRenderer::ReleaseHardware() { |
| 455 DCHECK(hardware_enabled_); | 443 DCHECK(hardware_enabled_); |
| 456 // TODO(hush): do this in somewhere else. Either in hardware render or in | |
| 457 // shared renderer state. | |
| 458 ReturnUnusedResource(shared_renderer_state_.PassCompositorFrame()); | |
| 459 ReturnResourceFromParent(); | 444 ReturnResourceFromParent(); |
| 460 DCHECK(shared_renderer_state_.ReturnedResourcesEmpty()); | 445 DCHECK(shared_renderer_state_.ReturnedResourcesEmptyOnUI()); |
| 461 | 446 |
| 462 if (compositor_) { | 447 if (compositor_) { |
| 463 compositor_->ReleaseHwDraw(); | 448 compositor_->ReleaseHwDraw(); |
| 464 SynchronousCompositorMemoryPolicy zero_policy; | 449 SynchronousCompositorMemoryPolicy zero_policy; |
| 465 RequestMemoryPolicy(zero_policy); | 450 RequestMemoryPolicy(zero_policy); |
| 466 } | 451 } |
| 467 | 452 |
| 468 hardware_enabled_ = false; | 453 hardware_enabled_ = false; |
| 469 GlobalTileManager::GetInstance()->Remove(tile_manager_key_); | 454 GlobalTileManager::GetInstance()->Remove(tile_manager_key_); |
| 470 } | 455 } |
| 471 | 456 |
| 457 void BrowserViewRenderer::InvalidateOnFunctorDestroy() { | |
| 458 client_->InvalidateOnFunctorDestroy(); | |
| 459 } | |
| 460 | |
| 472 bool BrowserViewRenderer::IsVisible() const { | 461 bool BrowserViewRenderer::IsVisible() const { |
| 473 // Ignore |window_visible_| if |attached_to_window_| is false. | 462 // Ignore |window_visible_| if |attached_to_window_| is false. |
| 474 return view_visible_ && (!attached_to_window_ || window_visible_); | 463 return view_visible_ && (!attached_to_window_ || window_visible_); |
| 475 } | 464 } |
| 476 | 465 |
| 477 gfx::Rect BrowserViewRenderer::GetScreenRect() const { | 466 gfx::Rect BrowserViewRenderer::GetScreenRect() const { |
| 478 return gfx::Rect(client_->GetLocationOnScreen(), gfx::Size(width_, height_)); | 467 return gfx::Rect(client_->GetLocationOnScreen(), gfx::Size(width_, height_)); |
| 479 } | 468 } |
| 480 | 469 |
| 481 void BrowserViewRenderer::DidInitializeCompositor( | 470 void BrowserViewRenderer::DidInitializeCompositor( |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 747 "compositor_needs_continuous_invalidate_", | 736 "compositor_needs_continuous_invalidate_", |
| 748 compositor_needs_continuous_invalidate_); | 737 compositor_needs_continuous_invalidate_); |
| 749 | 738 |
| 750 // This should only be called if OnDraw or DrawGL did not come in time, which | 739 // This should only be called if OnDraw or DrawGL did not come in time, which |
| 751 // means block_invalidates_ must still be true. | 740 // means block_invalidates_ must still be true. |
| 752 DCHECK(block_invalidates_); | 741 DCHECK(block_invalidates_); |
| 753 fallback_tick_pending_ = false; | 742 fallback_tick_pending_ = false; |
| 754 if (compositor_needs_continuous_invalidate_ && compositor_) { | 743 if (compositor_needs_continuous_invalidate_ && compositor_) { |
| 755 if (hardware_enabled_) { | 744 if (hardware_enabled_) { |
| 756 ReturnResourceFromParent(); | 745 ReturnResourceFromParent(); |
| 757 ReturnUnusedResource(shared_renderer_state_.PassCompositorFrame()); | |
|
boliu
2014/10/28 19:49:43
This isn't quite the same anymore.
This used to r
hush (inactive)
2014/10/29 19:57:04
The resources in SRS::returned_resources_ will be
| |
| 758 scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); | 746 scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); |
| 759 if (frame.get()) { | 747 if (frame.get()) { |
| 748 // Unused resource will be returned in SetCompositorFrameOnUI. | |
| 760 shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), true); | 749 shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), true); |
| 761 } | 750 } |
| 762 } else { | 751 } else { |
| 763 ForceFakeCompositeSW(); | 752 ForceFakeCompositeSW(); |
| 764 } | 753 } |
| 765 } else { | 754 } else { |
| 766 // Pretend we just composited to unblock further invalidates. | 755 // Pretend we just composited to unblock further invalidates. |
| 767 DidComposite(); | 756 DidComposite(); |
| 768 } | 757 } |
| 769 } | 758 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 819 base::StringAppendF(&str, | 808 base::StringAppendF(&str, |
| 820 "overscroll_rounding_error_: %s ", | 809 "overscroll_rounding_error_: %s ", |
| 821 overscroll_rounding_error_.ToString().c_str()); | 810 overscroll_rounding_error_.ToString().c_str()); |
| 822 base::StringAppendF( | 811 base::StringAppendF( |
| 823 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); | 812 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); |
| 824 base::StringAppendF(&str, "clear_view: %d ", clear_view_); | 813 base::StringAppendF(&str, "clear_view: %d ", clear_view_); |
| 825 return str; | 814 return str; |
| 826 } | 815 } |
| 827 | 816 |
| 828 } // namespace android_webview | 817 } // namespace android_webview |
| OLD | NEW |