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 "base/auto_reset.h" | 8 #include "base/auto_reset.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 size_.SetSize(width, height); | 415 size_.SetSize(width, height); |
416 } | 416 } |
417 | 417 |
418 void BrowserViewRenderer::OnDetachedFromWindow() { | 418 void BrowserViewRenderer::OnDetachedFromWindow() { |
419 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); | 419 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); |
420 shared_renderer_state_.ReleaseHardwareDrawIfNeededOnUI(); | 420 shared_renderer_state_.ReleaseHardwareDrawIfNeededOnUI(); |
421 attached_to_window_ = false; | 421 attached_to_window_ = false; |
422 DCHECK(!hardware_enabled_); | 422 DCHECK(!hardware_enabled_); |
423 } | 423 } |
424 | 424 |
| 425 void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) { |
| 426 if (pending_fling_animation_.is_null()) |
| 427 return; |
| 428 FlushPendingFlingAnimation(animation_time); |
| 429 } |
| 430 |
425 void BrowserViewRenderer::ReleaseHardware() { | 431 void BrowserViewRenderer::ReleaseHardware() { |
426 DCHECK(hardware_enabled_); | 432 DCHECK(hardware_enabled_); |
427 ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI()); | 433 ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI()); |
428 ReturnResourceFromParent(); | 434 ReturnResourceFromParent(); |
429 DCHECK(shared_renderer_state_.ReturnedResourcesEmptyOnUI()); | 435 DCHECK(shared_renderer_state_.ReturnedResourcesEmptyOnUI()); |
430 | 436 |
431 if (compositor_) { | 437 if (compositor_) { |
432 compositor_->ReleaseHwDraw(); | 438 compositor_->ReleaseHwDraw(); |
433 } | 439 } |
434 | 440 |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 state->SetDouble("max_scroll_offset_dip.x", max_scroll_offset_dip_.x()); | 625 state->SetDouble("max_scroll_offset_dip.x", max_scroll_offset_dip_.x()); |
620 state->SetDouble("max_scroll_offset_dip.y", max_scroll_offset_dip_.y()); | 626 state->SetDouble("max_scroll_offset_dip.y", max_scroll_offset_dip_.y()); |
621 | 627 |
622 state->SetDouble("scrollable_size_dip.width", scrollable_size_dip.width()); | 628 state->SetDouble("scrollable_size_dip.width", scrollable_size_dip.width()); |
623 state->SetDouble("scrollable_size_dip.height", scrollable_size_dip.height()); | 629 state->SetDouble("scrollable_size_dip.height", scrollable_size_dip.height()); |
624 | 630 |
625 state->SetDouble("page_scale_factor", page_scale_factor_); | 631 state->SetDouble("page_scale_factor", page_scale_factor_); |
626 return state; | 632 return state; |
627 } | 633 } |
628 | 634 |
| 635 void BrowserViewRenderer::SetNeedsAnimateFling( |
| 636 const AnimationCallback& fling_animation) { |
| 637 // TODO(jdduke): Skip invalidate if animation already pending? |
| 638 pending_fling_animation_ = fling_animation; |
| 639 client_->PostInvalidate(); |
| 640 } |
| 641 |
629 void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll, | 642 void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll, |
630 gfx::Vector2dF latest_overscroll_delta, | 643 gfx::Vector2dF latest_overscroll_delta, |
631 gfx::Vector2dF current_fling_velocity) { | 644 gfx::Vector2dF current_fling_velocity) { |
632 const float physical_pixel_scale = dip_scale_ * page_scale_factor_; | 645 const float physical_pixel_scale = dip_scale_ * page_scale_factor_; |
633 if (accumulated_overscroll == latest_overscroll_delta) | 646 if (accumulated_overscroll == latest_overscroll_delta) |
634 overscroll_rounding_error_ = gfx::Vector2dF(); | 647 overscroll_rounding_error_ = gfx::Vector2dF(); |
635 gfx::Vector2dF scaled_overscroll_delta = | 648 gfx::Vector2dF scaled_overscroll_delta = |
636 gfx::ScaleVector2d(latest_overscroll_delta, physical_pixel_scale); | 649 gfx::ScaleVector2d(latest_overscroll_delta, physical_pixel_scale); |
637 gfx::Vector2d rounded_overscroll_delta = gfx::ToRoundedVector2d( | 650 gfx::Vector2d rounded_overscroll_delta = gfx::ToRoundedVector2d( |
638 scaled_overscroll_delta + overscroll_rounding_error_); | 651 scaled_overscroll_delta + overscroll_rounding_error_); |
639 overscroll_rounding_error_ = | 652 overscroll_rounding_error_ = |
640 scaled_overscroll_delta - rounded_overscroll_delta; | 653 scaled_overscroll_delta - rounded_overscroll_delta; |
641 client_->DidOverscroll(rounded_overscroll_delta); | 654 |
| 655 gfx::Vector2dF fling_velocity_pixels = gfx::ScaleVector2d( |
| 656 current_fling_velocity, physical_pixel_scale); |
| 657 |
| 658 const bool first_overscroll_x = |
| 659 accumulated_overscroll.x() && |
| 660 accumulated_overscroll.x() == latest_overscroll_delta.x(); |
| 661 const bool first_overscroll_y = |
| 662 accumulated_overscroll.y() && |
| 663 accumulated_overscroll.y() == latest_overscroll_delta.y(); |
| 664 |
| 665 client_->DidOverscroll(rounded_overscroll_delta, |
| 666 fling_velocity_pixels, |
| 667 first_overscroll_x, |
| 668 first_overscroll_y); |
642 } | 669 } |
643 | 670 |
644 void BrowserViewRenderer::EnsureContinuousInvalidation( | 671 void BrowserViewRenderer::EnsureContinuousInvalidation( |
645 bool force_invalidate, | 672 bool force_invalidate, |
646 bool skip_reschedule_tick) { | 673 bool skip_reschedule_tick) { |
647 if (force_invalidate) | 674 if (force_invalidate) |
648 invalidate_after_composite_ = true; | 675 invalidate_after_composite_ = true; |
649 | 676 |
650 // This method should be called again when any of these conditions change. | 677 // This method should be called again when any of these conditions change. |
651 bool need_invalidate = | 678 bool need_invalidate = |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 | 762 |
736 void BrowserViewRenderer::ForceFakeCompositeSW() { | 763 void BrowserViewRenderer::ForceFakeCompositeSW() { |
737 DCHECK(compositor_); | 764 DCHECK(compositor_); |
738 SkBitmap bitmap; | 765 SkBitmap bitmap; |
739 bitmap.allocN32Pixels(1, 1); | 766 bitmap.allocN32Pixels(1, 1); |
740 bitmap.eraseColor(0); | 767 bitmap.eraseColor(0); |
741 SkCanvas canvas(bitmap); | 768 SkCanvas canvas(bitmap); |
742 CompositeSW(&canvas); | 769 CompositeSW(&canvas); |
743 } | 770 } |
744 | 771 |
| 772 void BrowserViewRenderer::FlushPendingFlingAnimation( |
| 773 base::TimeTicks animation_time) { |
| 774 TRACE_EVENT0("android_webview", |
| 775 "BrowserViewRenderer::FlushPendingFlingAnimation"); |
| 776 DCHECK(!pending_fling_animation_.is_null()); |
| 777 AnimationCallback animation = pending_fling_animation_; |
| 778 pending_fling_animation_.Reset(); |
| 779 animation.Run(animation_time); |
| 780 } |
| 781 |
745 bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) { | 782 bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) { |
746 DCHECK(compositor_); | 783 DCHECK(compositor_); |
747 ReturnResourceFromParent(); | 784 ReturnResourceFromParent(); |
748 bool result = compositor_->DemandDrawSw(canvas); | 785 bool result = compositor_->DemandDrawSw(canvas); |
749 DidComposite(); | 786 DidComposite(); |
750 return result; | 787 return result; |
751 } | 788 } |
752 | 789 |
753 void BrowserViewRenderer::DidComposite() { | 790 void BrowserViewRenderer::DidComposite() { |
754 block_invalidates_ = false; | 791 block_invalidates_ = false; |
(...skipping 29 matching lines...) Expand all Loading... |
784 base::StringAppendF(&str, | 821 base::StringAppendF(&str, |
785 "overscroll_rounding_error_: %s ", | 822 "overscroll_rounding_error_: %s ", |
786 overscroll_rounding_error_.ToString().c_str()); | 823 overscroll_rounding_error_.ToString().c_str()); |
787 base::StringAppendF( | 824 base::StringAppendF( |
788 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); | 825 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); |
789 base::StringAppendF(&str, "clear_view: %d ", clear_view_); | 826 base::StringAppendF(&str, "clear_view: %d ", clear_view_); |
790 return str; | 827 return str; |
791 } | 828 } |
792 | 829 |
793 } // namespace android_webview | 830 } // namespace android_webview |
OLD | NEW |