Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1218)

Side by Side Diff: android_webview/browser/browser_view_renderer.cc

Issue 274323004: NOT FOR LANDING - [WebView] Allow fling animation via the LayerScrollOffsetDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/browser_view_renderer_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698