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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 679493002: [Android] Add a native pull-to-refresh overscroll effect (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix findbugs... Created 6 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "base/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 16 matching lines...) Expand all
27 #include "cc/output/copy_output_result.h" 27 #include "cc/output/copy_output_result.h"
28 #include "cc/output/viewport_selection_bound.h" 28 #include "cc/output/viewport_selection_bound.h"
29 #include "cc/resources/single_release_callback.h" 29 #include "cc/resources/single_release_callback.h"
30 #include "cc/trees/layer_tree_host.h" 30 #include "cc/trees/layer_tree_host.h"
31 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 31 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
32 #include "content/browser/android/composited_touch_handle_drawable.h" 32 #include "content/browser/android/composited_touch_handle_drawable.h"
33 #include "content/browser/android/content_view_core_impl.h" 33 #include "content/browser/android/content_view_core_impl.h"
34 #include "content/browser/android/edge_effect.h" 34 #include "content/browser/android/edge_effect.h"
35 #include "content/browser/android/edge_effect_l.h" 35 #include "content/browser/android/edge_effect_l.h"
36 #include "content/browser/android/in_process/synchronous_compositor_impl.h" 36 #include "content/browser/android/in_process/synchronous_compositor_impl.h"
37 #include "content/browser/android/overscroll_glow.h" 37 #include "content/browser/android/overscroll_controller_android.h"
38 #include "content/browser/devtools/render_view_devtools_agent_host.h" 38 #include "content/browser/devtools/render_view_devtools_agent_host.h"
39 #include "content/browser/gpu/compositor_util.h" 39 #include "content/browser/gpu/compositor_util.h"
40 #include "content/browser/gpu/gpu_data_manager_impl.h" 40 #include "content/browser/gpu/gpu_data_manager_impl.h"
41 #include "content/browser/gpu/gpu_process_host_ui_shim.h" 41 #include "content/browser/gpu/gpu_process_host_ui_shim.h"
42 #include "content/browser/gpu/gpu_surface_tracker.h" 42 #include "content/browser/gpu/gpu_surface_tracker.h"
43 #include "content/browser/media/media_web_contents_observer.h" 43 #include "content/browser/media/media_web_contents_observer.h"
44 #include "content/browser/renderer_host/compositor_impl_android.h" 44 #include "content/browser/renderer_host/compositor_impl_android.h"
45 #include "content/browser/renderer_host/dip_util.h" 45 #include "content/browser/renderer_host/dip_util.h"
46 #include "content/browser/renderer_host/image_transport_factory_android.h" 46 #include "content/browser/renderer_host/image_transport_factory_android.h"
47 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h " 47 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h "
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 namespace { 82 namespace {
83 83
84 const int kUndefinedOutputSurfaceId = -1; 84 const int kUndefinedOutputSurfaceId = -1;
85 85
86 // Used to accomodate finite precision when comparing scaled viewport and 86 // Used to accomodate finite precision when comparing scaled viewport and
87 // content widths. While this value may seem large, width=device-width on an N7 87 // content widths. While this value may seem large, width=device-width on an N7
88 // V1 saw errors of ~0.065 between computed window and content widths. 88 // V1 saw errors of ~0.065 between computed window and content widths.
89 const float kMobileViewportWidthEpsilon = 0.15f; 89 const float kMobileViewportWidthEpsilon = 0.15f;
90 90
91 // Used for conditional creation of EdgeEffect types for overscroll.
92 const int kKitKatMR2SDKVersion = 19;
93
94 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime"; 91 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime";
95 92
96 // Sends an acknowledgement to the renderer of a processed IME event. 93 // Sends an acknowledgement to the renderer of a processed IME event.
97 void SendImeEventAck(RenderWidgetHostImpl* host) { 94 void SendImeEventAck(RenderWidgetHostImpl* host) {
98 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID())); 95 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID()));
99 } 96 }
100 97
101 void CopyFromCompositingSurfaceFinished( 98 void CopyFromCompositingSurfaceFinished(
102 ReadbackRequestCallback& callback, 99 ReadbackRequestCallback& callback,
103 scoped_ptr<cc::SingleReleaseCallback> release_callback, 100 scoped_ptr<cc::SingleReleaseCallback> release_callback,
(...skipping 27 matching lines...) Expand all
131 latency_info.AddLatencyNumberWithTimestamp( 128 latency_info.AddLatencyNumberWithTimestamp(
132 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 129 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
133 0, 130 0,
134 0, 131 0,
135 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), 132 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros),
136 1); 133 1);
137 } 134 }
138 return latency_info; 135 return latency_info;
139 } 136 }
140 137
141 OverscrollGlow::DisplayParameters CreateOverscrollDisplayParameters(
142 const cc::CompositorFrameMetadata& frame_metadata) {
143 const float scale_factor =
144 frame_metadata.page_scale_factor * frame_metadata.device_scale_factor;
145
146 // Compute the size and offsets for each edge, where each effect is sized to
147 // the viewport and offset by the distance of each viewport edge to the
148 // respective content edge.
149 OverscrollGlow::DisplayParameters params;
150 params.size = gfx::ScaleSize(
151 frame_metadata.scrollable_viewport_size, scale_factor);
152 params.edge_offsets[OverscrollGlow::EDGE_TOP] =
153 -frame_metadata.root_scroll_offset.y() * scale_factor;
154 params.edge_offsets[OverscrollGlow::EDGE_LEFT] =
155 -frame_metadata.root_scroll_offset.x() * scale_factor;
156 params.edge_offsets[OverscrollGlow::EDGE_BOTTOM] =
157 (frame_metadata.root_layer_size.height() -
158 frame_metadata.root_scroll_offset.y() -
159 frame_metadata.scrollable_viewport_size.height()) *
160 scale_factor;
161 params.edge_offsets[OverscrollGlow::EDGE_RIGHT] =
162 (frame_metadata.root_layer_size.width() -
163 frame_metadata.root_scroll_offset.x() -
164 frame_metadata.scrollable_viewport_size.width()) *
165 scale_factor;
166
167 return params;
168 }
169
170 bool UseEdgeEffectL() {
171 static bool use_edge_effect_l =
172 base::android::BuildInfo::GetInstance()->sdk_int() > kKitKatMR2SDKVersion;
173 return use_edge_effect_l;
174 }
175
176 scoped_ptr<EdgeEffectBase> CreateEdgeEffect(
177 ui::SystemUIResourceManager* resource_manager,
178 float device_scale_factor) {
179 DCHECK(resource_manager);
180 if (UseEdgeEffectL())
181 return scoped_ptr<EdgeEffectBase>(new EdgeEffectL(resource_manager));
182
183 return scoped_ptr<EdgeEffectBase>(
184 new EdgeEffect(resource_manager, device_scale_factor));
185 }
186
187 scoped_ptr<OverscrollGlow> CreateOverscrollEffect(
188 ContentViewCore* content_view_core) {
189 DCHECK(content_view_core);
190 ui::WindowAndroidCompositor* compositor =
191 content_view_core->GetWindowAndroid()->GetCompositor();
192 DCHECK(compositor);
193 ui::SystemUIResourceManager* system_resource_manager =
194 &compositor->GetSystemUIResourceManager();
195
196 if (UseEdgeEffectL())
197 EdgeEffectL::PreloadResources(system_resource_manager);
198 else
199 EdgeEffect::PreloadResources(system_resource_manager);
200
201 return make_scoped_ptr(
202 new OverscrollGlow(base::Bind(&CreateEdgeEffect,
203 system_resource_manager,
204 content_view_core->GetDpiScale())));
205 }
206
207 scoped_ptr<TouchSelectionController> CreateSelectionController( 138 scoped_ptr<TouchSelectionController> CreateSelectionController(
208 TouchSelectionControllerClient* client, 139 TouchSelectionControllerClient* client,
209 ContentViewCore* content_view_core) { 140 ContentViewCore* content_view_core) {
210 DCHECK(client); 141 DCHECK(client);
211 DCHECK(content_view_core); 142 DCHECK(content_view_core);
212 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs(); 143 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs();
213 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels(); 144 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels();
214 return make_scoped_ptr(new TouchSelectionController( 145 return make_scoped_ptr(new TouchSelectionController(
215 client, 146 client,
216 base::TimeDelta::FromMilliseconds(tap_timeout_ms), 147 base::TimeDelta::FromMilliseconds(tap_timeout_ms),
217 touch_slop_pixels / content_view_core->GetDpiScale())); 148 touch_slop_pixels / content_view_core->GetDpiScale()));
218 } 149 }
219 150
151 scoped_ptr<OverscrollControllerAndroid> CreateOverscrollController(
152 ContentViewCore* content_view_core) {
153 DCHECK(content_view_core);
154 ui::WindowAndroid* window = content_view_core->GetWindowAndroid();
155 DCHECK(window);
156 ui::WindowAndroidCompositor* compositor = window->GetCompositor();
157 DCHECK(compositor);
158 return make_scoped_ptr(new OverscrollControllerAndroid(
159 content_view_core->GetWebContents(),
160 compositor,
161 content_view_core->GetDpiScale()));
162 }
163
220 ui::GestureProvider::Config CreateGestureProviderConfig() { 164 ui::GestureProvider::Config CreateGestureProviderConfig() {
221 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig(); 165 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
222 config.disable_click_delay = 166 config.disable_click_delay =
223 base::CommandLine::ForCurrentProcess()->HasSwitch( 167 base::CommandLine::ForCurrentProcess()->HasSwitch(
224 switches::kDisableClickDelay); 168 switches::kDisableClickDelay);
225 return config; 169 return config;
226 } 170 }
227 171
228 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) { 172 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) {
229 return frame_metadata.min_page_scale_factor == 173 return frame_metadata.min_page_scale_factor ==
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 210 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
267 RenderWidgetHostImpl* widget_host, 211 RenderWidgetHostImpl* widget_host,
268 ContentViewCoreImpl* content_view_core) 212 ContentViewCoreImpl* content_view_core)
269 : host_(widget_host), 213 : host_(widget_host),
270 outstanding_vsync_requests_(0), 214 outstanding_vsync_requests_(0),
271 is_showing_(!widget_host->is_hidden()), 215 is_showing_(!widget_host->is_hidden()),
272 content_view_core_(NULL), 216 content_view_core_(NULL),
273 ime_adapter_android_(this), 217 ime_adapter_android_(this),
274 cached_background_color_(SK_ColorWHITE), 218 cached_background_color_(SK_ColorWHITE),
275 last_output_surface_id_(kUndefinedOutputSurfaceId), 219 last_output_surface_id_(kUndefinedOutputSurfaceId),
276 overscroll_effect_enabled_( 220 overscroll_controller_enabled_(
277 !base::CommandLine::ForCurrentProcess()->HasSwitch( 221 !base::CommandLine::ForCurrentProcess()->HasSwitch(
278 switches::kDisableOverscrollEdgeEffect)), 222 switches::kDisableOverscrollEdgeEffect)),
279 gesture_provider_(CreateGestureProviderConfig(), this), 223 gesture_provider_(CreateGestureProviderConfig(), this),
280 gesture_text_selector_(this), 224 gesture_text_selector_(this),
281 accelerated_surface_route_id_(0), 225 accelerated_surface_route_id_(0),
282 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( 226 using_synchronous_compositor_(SynchronousCompositorImpl::FromID(
283 widget_host->GetProcess()->GetID(), 227 widget_host->GetProcess()->GetID(),
284 widget_host->GetRoutingID()) != NULL), 228 widget_host->GetRoutingID()) != NULL),
285 frame_evictor_(new DelegatedFrameEvictor(this)), 229 frame_evictor_(new DelegatedFrameEvictor(this)),
286 locks_on_frame_count_(0), 230 locks_on_frame_count_(0),
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 void RenderWidgetHostViewAndroid::MovePluginWindows( 412 void RenderWidgetHostViewAndroid::MovePluginWindows(
469 const std::vector<WebPluginGeometry>& moves) { 413 const std::vector<WebPluginGeometry>& moves) {
470 // We don't have plugin windows on Android. Do nothing. Note: this is called 414 // We don't have plugin windows on Android. Do nothing. Note: this is called
471 // from RenderWidgetHost::OnUpdateRect which is itself invoked while 415 // from RenderWidgetHost::OnUpdateRect which is itself invoked while
472 // processing the corresponding message from Renderer. 416 // processing the corresponding message from Renderer.
473 } 417 }
474 418
475 void RenderWidgetHostViewAndroid::Focus() { 419 void RenderWidgetHostViewAndroid::Focus() {
476 host_->Focus(); 420 host_->Focus();
477 host_->SetInputMethodActive(true); 421 host_->SetInputMethodActive(true);
478 if (overscroll_effect_) 422 if (overscroll_controller_)
479 overscroll_effect_->Enable(); 423 overscroll_controller_->Enable();
480 } 424 }
481 425
482 void RenderWidgetHostViewAndroid::Blur() { 426 void RenderWidgetHostViewAndroid::Blur() {
483 host_->SetInputMethodActive(false); 427 host_->SetInputMethodActive(false);
484 host_->Blur(); 428 host_->Blur();
485 if (overscroll_effect_) 429 if (overscroll_controller_)
486 overscroll_effect_->Disable(); 430 overscroll_controller_->Disable();
487 } 431 }
488 432
489 bool RenderWidgetHostViewAndroid::HasFocus() const { 433 bool RenderWidgetHostViewAndroid::HasFocus() const {
490 if (!content_view_core_) 434 if (!content_view_core_)
491 return false; // ContentViewCore not created yet. 435 return false; // ContentViewCore not created yet.
492 436
493 return content_view_core_->HasFocus(); 437 return content_view_core_->HasFocus();
494 } 438 }
495 439
496 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { 440 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const {
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 void RenderWidgetHostViewAndroid::ComputeContentsSize( 966 void RenderWidgetHostViewAndroid::ComputeContentsSize(
1023 const cc::CompositorFrameMetadata& frame_metadata) { 967 const cc::CompositorFrameMetadata& frame_metadata) {
1024 // Calculate the content size. This should be 0 if the texture_size is 0. 968 // Calculate the content size. This should be 0 if the texture_size is 0.
1025 gfx::Vector2dF offset; 969 gfx::Vector2dF offset;
1026 if (texture_size_in_layer_.IsEmpty()) 970 if (texture_size_in_layer_.IsEmpty())
1027 content_size_in_layer_ = gfx::Size(); 971 content_size_in_layer_ = gfx::Size();
1028 content_size_in_layer_ = gfx::ToCeiledSize(gfx::ScaleSize( 972 content_size_in_layer_ = gfx::ToCeiledSize(gfx::ScaleSize(
1029 frame_metadata.scrollable_viewport_size, 973 frame_metadata.scrollable_viewport_size,
1030 frame_metadata.device_scale_factor * frame_metadata.page_scale_factor)); 974 frame_metadata.device_scale_factor * frame_metadata.page_scale_factor));
1031 975
1032 if (overscroll_effect_) {
1033 overscroll_effect_->UpdateDisplayParameters(
1034 CreateOverscrollDisplayParameters(frame_metadata));
1035 }
1036 } 976 }
1037 977
1038 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( 978 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
1039 uint32 output_surface_id, 979 uint32 output_surface_id,
1040 scoped_ptr<cc::CompositorFrame> frame) { 980 scoped_ptr<cc::CompositorFrame> frame) {
1041 last_scroll_offset_ = frame->metadata.root_scroll_offset; 981 last_scroll_offset_ = frame->metadata.root_scroll_offset;
1042 if (!frame->delegated_frame_data) { 982 if (!frame->delegated_frame_data) {
1043 LOG(ERROR) << "Non-delegated renderer path no longer supported"; 983 LOG(ERROR) << "Non-delegated renderer path no longer supported";
1044 return; 984 return;
1045 } 985 }
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 // web design, so text will be legible without zooming). Also disable 1164 // web design, so text will be legible without zooming). Also disable
1225 // double tap and pinch for pages that prevent zooming in or out. 1165 // double tap and pinch for pages that prevent zooming in or out.
1226 bool has_mobile_viewport = HasMobileViewport(frame_metadata); 1166 bool has_mobile_viewport = HasMobileViewport(frame_metadata);
1227 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata); 1167 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata);
1228 gesture_provider_.SetDoubleTapSupportForPageEnabled( 1168 gesture_provider_.SetDoubleTapSupportForPageEnabled(
1229 !has_fixed_page_scale && !has_mobile_viewport); 1169 !has_fixed_page_scale && !has_mobile_viewport);
1230 1170
1231 if (!content_view_core_) 1171 if (!content_view_core_)
1232 return; 1172 return;
1233 1173
1174 if (overscroll_controller_)
1175 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata);
1176
1234 if (selection_controller_) { 1177 if (selection_controller_) {
1235 selection_controller_->OnSelectionBoundsChanged( 1178 selection_controller_->OnSelectionBoundsChanged(
1236 frame_metadata.selection_start, frame_metadata.selection_end); 1179 frame_metadata.selection_start, frame_metadata.selection_end);
1237 } 1180 }
1238 1181
1239 // All offsets and sizes are in CSS pixels. 1182 // All offsets and sizes are in CSS pixels.
1240 content_view_core_->UpdateFrameInfo( 1183 content_view_core_->UpdateFrameInfo(
1241 frame_metadata.root_scroll_offset, 1184 frame_metadata.root_scroll_offset,
1242 frame_metadata.page_scale_factor, 1185 frame_metadata.page_scale_factor,
1243 gfx::Vector2dF(frame_metadata.min_page_scale_factor, 1186 gfx::Vector2dF(frame_metadata.min_page_scale_factor,
(...skipping 16 matching lines...) Expand all
1260 accelerated_surface_route_id_ = route_id; 1203 accelerated_surface_route_id_ = route_id;
1261 } 1204 }
1262 1205
1263 void RenderWidgetHostViewAndroid::AttachLayers() { 1206 void RenderWidgetHostViewAndroid::AttachLayers() {
1264 if (!content_view_core_) 1207 if (!content_view_core_)
1265 return; 1208 return;
1266 if (!layer_.get()) 1209 if (!layer_.get())
1267 return; 1210 return;
1268 1211
1269 content_view_core_->AttachLayer(layer_); 1212 content_view_core_->AttachLayer(layer_);
1270 if (overscroll_effect_) 1213 if (overscroll_controller_)
1271 overscroll_effect_->Enable(); 1214 overscroll_controller_->Enable();
1272 layer_->SetHideLayerAndSubtree(!is_showing_); 1215 layer_->SetHideLayerAndSubtree(!is_showing_);
1273 } 1216 }
1274 1217
1275 void RenderWidgetHostViewAndroid::RemoveLayers() { 1218 void RenderWidgetHostViewAndroid::RemoveLayers() {
1276 if (!content_view_core_) 1219 if (!content_view_core_)
1277 return; 1220 return;
1278 1221
1279 if (!layer_.get()) 1222 if (!layer_.get())
1280 return; 1223 return;
1281 1224
1282 content_view_core_->RemoveLayer(layer_); 1225 content_view_core_->RemoveLayer(layer_);
1283 if (overscroll_effect_) 1226 if (overscroll_controller_)
1284 overscroll_effect_->Disable(); 1227 overscroll_controller_->Disable();
1285 } 1228 }
1286 1229
1287 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { 1230 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) {
1288 // The synchronous compositor does not requre BeginFrame messages. 1231 // The synchronous compositor does not requre BeginFrame messages.
1289 if (using_synchronous_compositor_) 1232 if (using_synchronous_compositor_)
1290 requests &= FLUSH_INPUT; 1233 requests &= FLUSH_INPUT;
1291 1234
1292 bool should_request_vsync = !outstanding_vsync_requests_ && requests; 1235 bool should_request_vsync = !outstanding_vsync_requests_ && requests;
1293 outstanding_vsync_requests_ |= requests; 1236 outstanding_vsync_requests_ |= requests;
1294 // Note that if we're not currently observing the root window, outstanding 1237 // Note that if we're not currently observing the root window, outstanding
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 1276
1334 base::TimeTicks deadline = 1277 base::TimeTicks deadline =
1335 display_time - host_->GetEstimatedBrowserCompositeTime(); 1278 display_time - host_->GetEstimatedBrowserCompositeTime();
1336 1279
1337 host_->Send(new ViewMsg_BeginFrame( 1280 host_->Send(new ViewMsg_BeginFrame(
1338 host_->GetRoutingID(), 1281 host_->GetRoutingID(),
1339 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period))); 1282 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period)));
1340 } 1283 }
1341 1284
1342 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { 1285 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
1343 bool needs_animate = 1286 bool needs_animate = false;
1344 overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; 1287 if (overscroll_controller_) {
1288 needs_animate |= overscroll_controller_->Animate(
1289 frame_time, content_view_core_->GetLayer().get());
1290 }
1345 if (selection_controller_) 1291 if (selection_controller_)
1346 needs_animate |= selection_controller_->Animate(frame_time); 1292 needs_animate |= selection_controller_->Animate(frame_time);
1347 return needs_animate; 1293 return needs_animate;
1348 } 1294 }
1349 1295
1350 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { 1296 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() {
1351 if (layer_.get()) 1297 if (layer_.get())
1352 DestroyDelegatedContent(); 1298 DestroyDelegatedContent();
1353 frame_evictor_->DiscardedFrame(); 1299 frame_evictor_->DiscardedFrame();
1354 // We are evicting the delegated frame, 1300 // We are evicting the delegated frame,
(...skipping 30 matching lines...) Expand all
1385 1331
1386 void RenderWidgetHostViewAndroid::ProcessAckedTouchEvent( 1332 void RenderWidgetHostViewAndroid::ProcessAckedTouchEvent(
1387 const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) { 1333 const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) {
1388 const bool event_consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED; 1334 const bool event_consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED;
1389 gesture_provider_.OnTouchEventAck(event_consumed); 1335 gesture_provider_.OnTouchEventAck(event_consumed);
1390 } 1336 }
1391 1337
1392 void RenderWidgetHostViewAndroid::GestureEventAck( 1338 void RenderWidgetHostViewAndroid::GestureEventAck(
1393 const blink::WebGestureEvent& event, 1339 const blink::WebGestureEvent& event,
1394 InputEventAckState ack_result) { 1340 InputEventAckState ack_result) {
1395 // The overscroll effect requires an explicit release signal that may not be 1341 if (overscroll_controller_)
1396 // sent from the renderer compositor. 1342 overscroll_controller_->OnGestureEventAck(event, ack_result);
1397 if (event.type == blink::WebInputEvent::GestureScrollEnd ||
1398 event.type == blink::WebInputEvent::GestureFlingStart) {
1399 DidOverscroll(DidOverscrollParams());
1400 }
1401 1343
1402 if (content_view_core_) 1344 if (content_view_core_)
1403 content_view_core_->OnGestureEventAck(event, ack_result); 1345 content_view_core_->OnGestureEventAck(event, ack_result);
1404 } 1346 }
1405 1347
1406 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( 1348 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
1407 const blink::WebInputEvent& input_event) { 1349 const blink::WebInputEvent& input_event) {
1408 if (selection_controller_) { 1350 if (selection_controller_) {
1409 switch (input_event.type) { 1351 switch (input_event.type) {
1410 case blink::WebInputEvent::GestureLongPress: 1352 case blink::WebInputEvent::GestureLongPress:
1411 selection_controller_->OnLongPressEvent(); 1353 selection_controller_->OnLongPressEvent();
1412 break; 1354 break;
1413 case blink::WebInputEvent::GestureTap: 1355 case blink::WebInputEvent::GestureTap:
1414 selection_controller_->OnTapEvent(); 1356 selection_controller_->OnTapEvent();
1415 break; 1357 break;
1416 default: 1358 default:
1417 break; 1359 break;
1418 } 1360 }
1419 } 1361 }
1420 1362
1363 if (overscroll_controller_ &&
1364 blink::WebInputEvent::isGestureEventType(input_event.type) &&
1365 overscroll_controller_->WillHandleGestureEvent(
1366 static_cast<const blink::WebGestureEvent&>(input_event))) {
1367 return INPUT_EVENT_ACK_STATE_CONSUMED;
1368 }
1369
1421 if (content_view_core_ && 1370 if (content_view_core_ &&
1422 content_view_core_->FilterInputEvent(input_event)) 1371 content_view_core_->FilterInputEvent(input_event))
1423 return INPUT_EVENT_ACK_STATE_CONSUMED; 1372 return INPUT_EVENT_ACK_STATE_CONSUMED;
1424 1373
1425 if (!host_) 1374 if (!host_)
1426 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 1375 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1427 1376
1428 if (input_event.type == blink::WebInputEvent::GestureTapDown || 1377 if (input_event.type == blink::WebInputEvent::GestureTapDown ||
1429 input_event.type == blink::WebInputEvent::TouchStart) { 1378 input_event.type == blink::WebInputEvent::TouchStart) {
1430 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); 1379 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1495 1444
1496 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( 1445 void RenderWidgetHostViewAndroid::SendMouseWheelEvent(
1497 const blink::WebMouseWheelEvent& event) { 1446 const blink::WebMouseWheelEvent& event) {
1498 if (host_) 1447 if (host_)
1499 host_->ForwardWheelEvent(event); 1448 host_->ForwardWheelEvent(event);
1500 } 1449 }
1501 1450
1502 void RenderWidgetHostViewAndroid::SendGestureEvent( 1451 void RenderWidgetHostViewAndroid::SendGestureEvent(
1503 const blink::WebGestureEvent& event) { 1452 const blink::WebGestureEvent& event) {
1504 // Sending a gesture that may trigger overscroll should resume the effect. 1453 // Sending a gesture that may trigger overscroll should resume the effect.
1505 if (overscroll_effect_) 1454 if (overscroll_controller_)
1506 overscroll_effect_->Enable(); 1455 overscroll_controller_->Enable();
1507 1456
1508 if (host_) 1457 if (host_)
1509 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); 1458 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event));
1510 } 1459 }
1511 1460
1512 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { 1461 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) {
1513 if (host_) 1462 if (host_)
1514 host_->MoveCaret(point); 1463 host_->MoveCaret(point);
1515 } 1464 }
1516 1465
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 1497
1549 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1498 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1550 return cached_background_color_; 1499 return cached_background_color_;
1551 } 1500 }
1552 1501
1553 void RenderWidgetHostViewAndroid::DidOverscroll( 1502 void RenderWidgetHostViewAndroid::DidOverscroll(
1554 const DidOverscrollParams& params) { 1503 const DidOverscrollParams& params) {
1555 if (!content_view_core_ || !layer_.get() || !is_showing_) 1504 if (!content_view_core_ || !layer_.get() || !is_showing_)
1556 return; 1505 return;
1557 1506
1558 const float device_scale_factor = content_view_core_->GetDpiScale(); 1507 if (overscroll_controller_)
1559 1508 overscroll_controller_->OnOverscrolled(params);
1560 if (overscroll_effect_ &&
1561 overscroll_effect_->OnOverscrolled(
1562 content_view_core_->GetLayer().get(),
1563 base::TimeTicks::Now(),
1564 gfx::ScaleVector2d(params.accumulated_overscroll,
1565 device_scale_factor),
1566 gfx::ScaleVector2d(params.latest_overscroll_delta,
1567 device_scale_factor),
1568 gfx::ScaleVector2d(params.current_fling_velocity,
1569 device_scale_factor),
1570 gfx::ScaleVector2d(
1571 params.causal_event_viewport_point.OffsetFromOrigin(),
1572 device_scale_factor))) {
1573 SetNeedsAnimate();
1574 }
1575 } 1509 }
1576 1510
1577 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1511 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1578 if (content_view_core_) 1512 if (content_view_core_)
1579 content_view_core_->DidStopFlinging(); 1513 content_view_core_->DidStopFlinging();
1580 } 1514 }
1581 1515
1582 void RenderWidgetHostViewAndroid::SetContentViewCore( 1516 void RenderWidgetHostViewAndroid::SetContentViewCore(
1583 ContentViewCoreImpl* content_view_core) { 1517 ContentViewCoreImpl* content_view_core) {
1584 RemoveLayers(); 1518 RemoveLayers();
1585 StopObservingRootWindow(); 1519 StopObservingRootWindow();
1586 1520
1587 bool resize = false; 1521 bool resize = false;
1588 if (content_view_core != content_view_core_) { 1522 if (content_view_core != content_view_core_) {
1589 overscroll_effect_.reset(); 1523 overscroll_controller_.reset();
1590 selection_controller_.reset(); 1524 selection_controller_.reset();
1591 ReleaseLocksOnSurface(); 1525 ReleaseLocksOnSurface();
1592 resize = true; 1526 resize = true;
1593 } 1527 }
1594 1528
1595 content_view_core_ = content_view_core; 1529 content_view_core_ = content_view_core;
1596 1530
1597 BrowserAccessibilityManager* manager = NULL; 1531 BrowserAccessibilityManager* manager = NULL;
1598 if (host_) 1532 if (host_)
1599 manager = host_->GetRootBrowserAccessibilityManager(); 1533 manager = host_->GetRootBrowserAccessibilityManager();
(...skipping 10 matching lines...) Expand all
1610 return; 1544 return;
1611 1545
1612 StartObservingRootWindow(); 1546 StartObservingRootWindow();
1613 1547
1614 if (resize) 1548 if (resize)
1615 WasResized(); 1549 WasResized();
1616 1550
1617 if (!selection_controller_) 1551 if (!selection_controller_)
1618 selection_controller_ = CreateSelectionController(this, content_view_core_); 1552 selection_controller_ = CreateSelectionController(this, content_view_core_);
1619 1553
1620 if (overscroll_effect_enabled_ && !overscroll_effect_ && 1554 if (overscroll_controller_enabled_ && !overscroll_controller_ &&
1621 content_view_core_->GetWindowAndroid()->GetCompositor()) 1555 content_view_core_->GetWindowAndroid()->GetCompositor()) {
1622 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); 1556 overscroll_controller_ = CreateOverscrollController(content_view_core_);
1557 }
1623 } 1558 }
1624 1559
1625 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1560 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1626 while (!ack_callbacks_.empty()) { 1561 while (!ack_callbacks_.empty()) {
1627 ack_callbacks_.front().Run(); 1562 ack_callbacks_.front().Run();
1628 ack_callbacks_.pop(); 1563 ack_callbacks_.pop();
1629 } 1564 }
1630 } 1565 }
1631 1566
1632 void RenderWidgetHostViewAndroid::OnGestureEvent( 1567 void RenderWidgetHostViewAndroid::OnGestureEvent(
1633 const ui::GestureEventData& gesture) { 1568 const ui::GestureEventData& gesture) {
1634 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); 1569 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture));
1635 } 1570 }
1636 1571
1637 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { 1572 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
1638 RunAckCallbacks(); 1573 RunAckCallbacks();
1639 } 1574 }
1640 1575
1641 void RenderWidgetHostViewAndroid::OnAttachCompositor() { 1576 void RenderWidgetHostViewAndroid::OnAttachCompositor() {
1642 DCHECK(content_view_core_); 1577 DCHECK(content_view_core_);
1643 if (overscroll_effect_enabled_ && !overscroll_effect_) 1578 if (overscroll_controller_enabled_ && !overscroll_controller_)
1644 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); 1579 overscroll_controller_ = CreateOverscrollController(content_view_core_);
1645 } 1580 }
1646 1581
1647 void RenderWidgetHostViewAndroid::OnDetachCompositor() { 1582 void RenderWidgetHostViewAndroid::OnDetachCompositor() {
1648 DCHECK(content_view_core_); 1583 DCHECK(content_view_core_);
1649 DCHECK(!using_synchronous_compositor_); 1584 DCHECK(!using_synchronous_compositor_);
1650 RunAckCallbacks(); 1585 RunAckCallbacks();
1651 overscroll_effect_.reset(); 1586 overscroll_controller_.reset();
1652 } 1587 }
1653 1588
1654 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, 1589 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
1655 base::TimeDelta vsync_period) { 1590 base::TimeDelta vsync_period) {
1656 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync"); 1591 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync");
1657 if (!host_) 1592 if (!host_)
1658 return; 1593 return;
1659 1594
1660 const uint32 current_vsync_requests = outstanding_vsync_requests_; 1595 const uint32 current_vsync_requests = outstanding_vsync_requests_;
1661 outstanding_vsync_requests_ = 0; 1596 outstanding_vsync_requests_ = 0;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 results->orientationAngle = display.RotationAsDegree(); 1748 results->orientationAngle = display.RotationAsDegree();
1814 results->orientationType = 1749 results->orientationType =
1815 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); 1750 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display);
1816 gfx::DeviceDisplayInfo info; 1751 gfx::DeviceDisplayInfo info;
1817 results->depth = info.GetBitsPerPixel(); 1752 results->depth = info.GetBitsPerPixel();
1818 results->depthPerComponent = info.GetBitsPerComponent(); 1753 results->depthPerComponent = info.GetBitsPerComponent();
1819 results->isMonochrome = (results->depthPerComponent == 0); 1754 results->isMonochrome = (results->depthPerComponent == 0);
1820 } 1755 }
1821 1756
1822 } // namespace content 1757 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_android.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698