| Index: content/browser/renderer_host/render_widget_host_view_android.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| index 62b98a736ba704483d65ce39502ad9049c317703..6f9ccf2d24c177c0e5c3e8bad1ba6f3b81b7e457 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| @@ -34,7 +34,7 @@
|
| #include "content/browser/android/edge_effect.h"
|
| #include "content/browser/android/edge_effect_l.h"
|
| #include "content/browser/android/in_process/synchronous_compositor_impl.h"
|
| -#include "content/browser/android/overscroll_glow.h"
|
| +#include "content/browser/android/overscroll_controller_android.h"
|
| #include "content/browser/devtools/render_view_devtools_agent_host.h"
|
| #include "content/browser/gpu/compositor_util.h"
|
| #include "content/browser/gpu/gpu_data_manager_impl.h"
|
| @@ -88,9 +88,6 @@ const int kUndefinedOutputSurfaceId = -1;
|
| // V1 saw errors of ~0.065 between computed window and content widths.
|
| const float kMobileViewportWidthEpsilon = 0.15f;
|
|
|
| -// Used for conditional creation of EdgeEffect types for overscroll.
|
| -const int kKitKatMR2SDKVersion = 19;
|
| -
|
| static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime";
|
|
|
| // Sends an acknowledgement to the renderer of a processed IME event.
|
| @@ -137,72 +134,6 @@ ui::LatencyInfo CreateLatencyInfo(const blink::WebInputEvent& event) {
|
| return latency_info;
|
| }
|
|
|
| -OverscrollGlow::DisplayParameters CreateOverscrollDisplayParameters(
|
| - const cc::CompositorFrameMetadata& frame_metadata) {
|
| - const float scale_factor =
|
| - frame_metadata.page_scale_factor * frame_metadata.device_scale_factor;
|
| -
|
| - // Compute the size and offsets for each edge, where each effect is sized to
|
| - // the viewport and offset by the distance of each viewport edge to the
|
| - // respective content edge.
|
| - OverscrollGlow::DisplayParameters params;
|
| - params.size = gfx::ScaleSize(
|
| - frame_metadata.scrollable_viewport_size, scale_factor);
|
| - params.edge_offsets[OverscrollGlow::EDGE_TOP] =
|
| - -frame_metadata.root_scroll_offset.y() * scale_factor;
|
| - params.edge_offsets[OverscrollGlow::EDGE_LEFT] =
|
| - -frame_metadata.root_scroll_offset.x() * scale_factor;
|
| - params.edge_offsets[OverscrollGlow::EDGE_BOTTOM] =
|
| - (frame_metadata.root_layer_size.height() -
|
| - frame_metadata.root_scroll_offset.y() -
|
| - frame_metadata.scrollable_viewport_size.height()) *
|
| - scale_factor;
|
| - params.edge_offsets[OverscrollGlow::EDGE_RIGHT] =
|
| - (frame_metadata.root_layer_size.width() -
|
| - frame_metadata.root_scroll_offset.x() -
|
| - frame_metadata.scrollable_viewport_size.width()) *
|
| - scale_factor;
|
| -
|
| - return params;
|
| -}
|
| -
|
| -bool UseEdgeEffectL() {
|
| - static bool use_edge_effect_l =
|
| - base::android::BuildInfo::GetInstance()->sdk_int() > kKitKatMR2SDKVersion;
|
| - return use_edge_effect_l;
|
| -}
|
| -
|
| -scoped_ptr<EdgeEffectBase> CreateEdgeEffect(
|
| - ui::SystemUIResourceManager* resource_manager,
|
| - float device_scale_factor) {
|
| - DCHECK(resource_manager);
|
| - if (UseEdgeEffectL())
|
| - return scoped_ptr<EdgeEffectBase>(new EdgeEffectL(resource_manager));
|
| -
|
| - return scoped_ptr<EdgeEffectBase>(
|
| - new EdgeEffect(resource_manager, device_scale_factor));
|
| -}
|
| -
|
| -scoped_ptr<OverscrollGlow> CreateOverscrollEffect(
|
| - ContentViewCore* content_view_core) {
|
| - DCHECK(content_view_core);
|
| - ui::WindowAndroidCompositor* compositor =
|
| - content_view_core->GetWindowAndroid()->GetCompositor();
|
| - DCHECK(compositor);
|
| - ui::SystemUIResourceManager* system_resource_manager =
|
| - &compositor->GetSystemUIResourceManager();
|
| -
|
| - if (UseEdgeEffectL())
|
| - EdgeEffectL::PreloadResources(system_resource_manager);
|
| - else
|
| - EdgeEffect::PreloadResources(system_resource_manager);
|
| -
|
| - return make_scoped_ptr(
|
| - new OverscrollGlow(base::Bind(&CreateEdgeEffect,
|
| - system_resource_manager,
|
| - content_view_core->GetDpiScale())));
|
| -}
|
| -
|
| scoped_ptr<TouchSelectionController> CreateSelectionController(
|
| TouchSelectionControllerClient* client,
|
| ContentViewCore* content_view_core) {
|
| @@ -273,7 +204,7 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
|
| ime_adapter_android_(this),
|
| cached_background_color_(SK_ColorWHITE),
|
| last_output_surface_id_(kUndefinedOutputSurfaceId),
|
| - overscroll_effect_enabled_(
|
| + overscroll_controller_enabled_(
|
| !base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kDisableOverscrollEdgeEffect)),
|
| gesture_provider_(CreateGestureProviderConfig(), this),
|
| @@ -475,8 +406,8 @@ void RenderWidgetHostViewAndroid::MovePluginWindows(
|
| void RenderWidgetHostViewAndroid::Focus() {
|
| host_->Focus();
|
| host_->SetInputMethodActive(true);
|
| - if (overscroll_effect_)
|
| - overscroll_effect_->Enable();
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Enable();
|
| if (selection_controller_)
|
| selection_controller_->SetTemporarilyHidden(false);
|
| }
|
| @@ -484,8 +415,8 @@ void RenderWidgetHostViewAndroid::Focus() {
|
| void RenderWidgetHostViewAndroid::Blur() {
|
| host_->SetInputMethodActive(false);
|
| host_->Blur();
|
| - if (overscroll_effect_)
|
| - overscroll_effect_->Disable();
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Disable();
|
| if (selection_controller_)
|
| selection_controller_->SetTemporarilyHidden(true);
|
| }
|
| @@ -1032,10 +963,6 @@ void RenderWidgetHostViewAndroid::ComputeContentsSize(
|
| frame_metadata.scrollable_viewport_size,
|
| frame_metadata.device_scale_factor * frame_metadata.page_scale_factor));
|
|
|
| - if (overscroll_effect_) {
|
| - overscroll_effect_->UpdateDisplayParameters(
|
| - CreateOverscrollDisplayParameters(frame_metadata));
|
| - }
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
|
| @@ -1226,6 +1153,9 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
|
| if (!content_view_core_)
|
| return;
|
|
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->OnFrameMetadataUpdated(frame_metadata);
|
| +
|
| if (selection_controller_) {
|
| selection_controller_->OnSelectionBoundsChanged(
|
| frame_metadata.selection_start, frame_metadata.selection_end);
|
| @@ -1262,8 +1192,8 @@ void RenderWidgetHostViewAndroid::AttachLayers() {
|
| return;
|
|
|
| content_view_core_->AttachLayer(layer_);
|
| - if (overscroll_effect_)
|
| - overscroll_effect_->Enable();
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Enable();
|
| layer_->SetHideLayerAndSubtree(!is_showing_);
|
| }
|
|
|
| @@ -1275,8 +1205,8 @@ void RenderWidgetHostViewAndroid::RemoveLayers() {
|
| return;
|
|
|
| content_view_core_->RemoveLayer(layer_);
|
| - if (overscroll_effect_)
|
| - overscroll_effect_->Disable();
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Disable();
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) {
|
| @@ -1335,8 +1265,9 @@ void RenderWidgetHostViewAndroid::SendBeginFrame(base::TimeTicks frame_time,
|
| }
|
|
|
| bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
|
| - bool needs_animate =
|
| - overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false;
|
| + bool needs_animate = false;
|
| + if (overscroll_controller_)
|
| + needs_animate |= overscroll_controller_->Animate(frame_time);
|
| if (selection_controller_)
|
| needs_animate |= selection_controller_->Animate(frame_time);
|
| return needs_animate;
|
| @@ -1394,6 +1325,9 @@ void RenderWidgetHostViewAndroid::GestureEventAck(
|
| DidOverscroll(DidOverscrollParams());
|
| }
|
|
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->OnGestureEventAck(event, ack_result);
|
| +
|
| if (content_view_core_)
|
| content_view_core_->OnGestureEventAck(event, ack_result);
|
| }
|
| @@ -1413,6 +1347,13 @@ InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
|
| }
|
| }
|
|
|
| + if (overscroll_controller_ &&
|
| + blink::WebInputEvent::isGestureEventType(input_event.type) &&
|
| + overscroll_controller_->WillHandleGestureEvent(
|
| + static_cast<const blink::WebGestureEvent&>(input_event))) {
|
| + return INPUT_EVENT_ACK_STATE_CONSUMED;
|
| + }
|
| +
|
| if (content_view_core_ &&
|
| content_view_core_->FilterInputEvent(input_event))
|
| return INPUT_EVENT_ACK_STATE_CONSUMED;
|
| @@ -1497,8 +1438,8 @@ void RenderWidgetHostViewAndroid::SendMouseWheelEvent(
|
| void RenderWidgetHostViewAndroid::SendGestureEvent(
|
| const blink::WebGestureEvent& event) {
|
| // Sending a gesture that may trigger overscroll should resume the effect.
|
| - if (overscroll_effect_)
|
| - overscroll_effect_->Enable();
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Enable();
|
|
|
| if (host_)
|
| host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event));
|
| @@ -1545,23 +1486,8 @@ void RenderWidgetHostViewAndroid::DidOverscroll(
|
| if (!content_view_core_ || !layer_.get() || !is_showing_)
|
| return;
|
|
|
| - const float device_scale_factor = content_view_core_->GetDpiScale();
|
| -
|
| - if (overscroll_effect_ &&
|
| - overscroll_effect_->OnOverscrolled(
|
| - content_view_core_->GetLayer().get(),
|
| - base::TimeTicks::Now(),
|
| - gfx::ScaleVector2d(params.accumulated_overscroll,
|
| - device_scale_factor),
|
| - gfx::ScaleVector2d(params.latest_overscroll_delta,
|
| - device_scale_factor),
|
| - gfx::ScaleVector2d(params.current_fling_velocity,
|
| - device_scale_factor),
|
| - gfx::ScaleVector2d(
|
| - params.causal_event_viewport_point.OffsetFromOrigin(),
|
| - device_scale_factor))) {
|
| - SetNeedsAnimate();
|
| - }
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->OnOverscrolled(params);
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::DidStopFlinging() {
|
| @@ -1576,7 +1502,7 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
|
|
|
| bool resize = false;
|
| if (content_view_core != content_view_core_) {
|
| - overscroll_effect_.reset();
|
| + overscroll_controller_.reset();
|
| selection_controller_.reset();
|
| ReleaseLocksOnSurface();
|
| resize = true;
|
| @@ -1607,9 +1533,11 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
|
| if (!selection_controller_)
|
| selection_controller_ = CreateSelectionController(this, content_view_core_);
|
|
|
| - if (overscroll_effect_enabled_ && !overscroll_effect_ &&
|
| - content_view_core_->GetWindowAndroid()->GetCompositor())
|
| - overscroll_effect_ = CreateOverscrollEffect(content_view_core_);
|
| + if (overscroll_controller_enabled_ && !overscroll_controller_ &&
|
| + content_view_core_->GetWindowAndroid()->GetCompositor()) {
|
| + overscroll_controller_.reset(
|
| + new OverscrollControllerAndroid(content_view_core_));
|
| + }
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::RunAckCallbacks() {
|
| @@ -1630,15 +1558,17 @@ void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
|
|
|
| void RenderWidgetHostViewAndroid::OnAttachCompositor() {
|
| DCHECK(content_view_core_);
|
| - if (overscroll_effect_enabled_ && !overscroll_effect_)
|
| - overscroll_effect_ = CreateOverscrollEffect(content_view_core_);
|
| + if (overscroll_controller_enabled_ && !overscroll_controller_) {
|
| + overscroll_controller_.reset(
|
| + new OverscrollControllerAndroid(content_view_core_));
|
| + }
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::OnDetachCompositor() {
|
| DCHECK(content_view_core_);
|
| DCHECK(!using_synchronous_compositor_);
|
| RunAckCallbacks();
|
| - overscroll_effect_.reset();
|
| + overscroll_controller_.reset();
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
|
|
|