OLD | NEW |
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 Loading... |
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 Loading... |
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 const base::Callback<void(bool, const SkBitmap&)>& callback, | 99 const base::Callback<void(bool, const SkBitmap&)>& callback, |
103 scoped_ptr<cc::SingleReleaseCallback> release_callback, | 100 scoped_ptr<cc::SingleReleaseCallback> release_callback, |
(...skipping 26 matching lines...) Expand all Loading... |
130 latency_info.AddLatencyNumberWithTimestamp( | 127 latency_info.AddLatencyNumberWithTimestamp( |
131 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, | 128 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, |
132 0, | 129 0, |
133 0, | 130 0, |
134 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), | 131 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), |
135 1); | 132 1); |
136 } | 133 } |
137 return latency_info; | 134 return latency_info; |
138 } | 135 } |
139 | 136 |
140 OverscrollGlow::DisplayParameters CreateOverscrollDisplayParameters( | |
141 const cc::CompositorFrameMetadata& frame_metadata) { | |
142 const float scale_factor = | |
143 frame_metadata.page_scale_factor * frame_metadata.device_scale_factor; | |
144 | |
145 // Compute the size and offsets for each edge, where each effect is sized to | |
146 // the viewport and offset by the distance of each viewport edge to the | |
147 // respective content edge. | |
148 OverscrollGlow::DisplayParameters params; | |
149 params.size = gfx::ScaleSize( | |
150 frame_metadata.scrollable_viewport_size, scale_factor); | |
151 params.edge_offsets[OverscrollGlow::EDGE_TOP] = | |
152 -frame_metadata.root_scroll_offset.y() * scale_factor; | |
153 params.edge_offsets[OverscrollGlow::EDGE_LEFT] = | |
154 -frame_metadata.root_scroll_offset.x() * scale_factor; | |
155 params.edge_offsets[OverscrollGlow::EDGE_BOTTOM] = | |
156 (frame_metadata.root_layer_size.height() - | |
157 frame_metadata.root_scroll_offset.y() - | |
158 frame_metadata.scrollable_viewport_size.height()) * | |
159 scale_factor; | |
160 params.edge_offsets[OverscrollGlow::EDGE_RIGHT] = | |
161 (frame_metadata.root_layer_size.width() - | |
162 frame_metadata.root_scroll_offset.x() - | |
163 frame_metadata.scrollable_viewport_size.width()) * | |
164 scale_factor; | |
165 | |
166 return params; | |
167 } | |
168 | |
169 bool UseEdgeEffectL() { | |
170 static bool use_edge_effect_l = | |
171 base::android::BuildInfo::GetInstance()->sdk_int() > kKitKatMR2SDKVersion; | |
172 return use_edge_effect_l; | |
173 } | |
174 | |
175 scoped_ptr<EdgeEffectBase> CreateEdgeEffect( | |
176 ui::SystemUIResourceManager* resource_manager, | |
177 float device_scale_factor) { | |
178 DCHECK(resource_manager); | |
179 if (UseEdgeEffectL()) | |
180 return scoped_ptr<EdgeEffectBase>(new EdgeEffectL(resource_manager)); | |
181 | |
182 return scoped_ptr<EdgeEffectBase>( | |
183 new EdgeEffect(resource_manager, device_scale_factor)); | |
184 } | |
185 | |
186 scoped_ptr<OverscrollGlow> CreateOverscrollEffect( | |
187 ContentViewCore* content_view_core) { | |
188 DCHECK(content_view_core); | |
189 ui::WindowAndroidCompositor* compositor = | |
190 content_view_core->GetWindowAndroid()->GetCompositor(); | |
191 DCHECK(compositor); | |
192 ui::SystemUIResourceManager* system_resource_manager = | |
193 &compositor->GetSystemUIResourceManager(); | |
194 | |
195 if (UseEdgeEffectL()) | |
196 EdgeEffectL::PreloadResources(system_resource_manager); | |
197 else | |
198 EdgeEffect::PreloadResources(system_resource_manager); | |
199 | |
200 return make_scoped_ptr( | |
201 new OverscrollGlow(base::Bind(&CreateEdgeEffect, | |
202 system_resource_manager, | |
203 content_view_core->GetDpiScale()))); | |
204 } | |
205 | |
206 scoped_ptr<TouchSelectionController> CreateSelectionController( | 137 scoped_ptr<TouchSelectionController> CreateSelectionController( |
207 TouchSelectionControllerClient* client, | 138 TouchSelectionControllerClient* client, |
208 ContentViewCore* content_view_core) { | 139 ContentViewCore* content_view_core) { |
209 DCHECK(client); | 140 DCHECK(client); |
210 DCHECK(content_view_core); | 141 DCHECK(content_view_core); |
211 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs(); | 142 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs(); |
212 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels(); | 143 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels(); |
213 return make_scoped_ptr(new TouchSelectionController( | 144 return make_scoped_ptr(new TouchSelectionController( |
214 client, | 145 client, |
215 base::TimeDelta::FromMilliseconds(tap_timeout_ms), | 146 base::TimeDelta::FromMilliseconds(tap_timeout_ms), |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 197 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
267 RenderWidgetHostImpl* widget_host, | 198 RenderWidgetHostImpl* widget_host, |
268 ContentViewCoreImpl* content_view_core) | 199 ContentViewCoreImpl* content_view_core) |
269 : host_(widget_host), | 200 : host_(widget_host), |
270 outstanding_vsync_requests_(0), | 201 outstanding_vsync_requests_(0), |
271 is_showing_(!widget_host->is_hidden()), | 202 is_showing_(!widget_host->is_hidden()), |
272 content_view_core_(NULL), | 203 content_view_core_(NULL), |
273 ime_adapter_android_(this), | 204 ime_adapter_android_(this), |
274 cached_background_color_(SK_ColorWHITE), | 205 cached_background_color_(SK_ColorWHITE), |
275 last_output_surface_id_(kUndefinedOutputSurfaceId), | 206 last_output_surface_id_(kUndefinedOutputSurfaceId), |
276 overscroll_effect_enabled_( | 207 overscroll_controller_enabled_( |
277 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 208 !base::CommandLine::ForCurrentProcess()->HasSwitch( |
278 switches::kDisableOverscrollEdgeEffect)), | 209 switches::kDisableOverscrollEdgeEffect)), |
279 gesture_provider_(CreateGestureProviderConfig(), this), | 210 gesture_provider_(CreateGestureProviderConfig(), this), |
280 gesture_text_selector_(this), | 211 gesture_text_selector_(this), |
281 accelerated_surface_route_id_(0), | 212 accelerated_surface_route_id_(0), |
282 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 213 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( |
283 widget_host->GetProcess()->GetID(), | 214 widget_host->GetProcess()->GetID(), |
284 widget_host->GetRoutingID()) != NULL), | 215 widget_host->GetRoutingID()) != NULL), |
285 frame_evictor_(new DelegatedFrameEvictor(this)), | 216 frame_evictor_(new DelegatedFrameEvictor(this)), |
286 locks_on_frame_count_(0), | 217 locks_on_frame_count_(0), |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 void RenderWidgetHostViewAndroid::MovePluginWindows( | 399 void RenderWidgetHostViewAndroid::MovePluginWindows( |
469 const std::vector<WebPluginGeometry>& moves) { | 400 const std::vector<WebPluginGeometry>& moves) { |
470 // We don't have plugin windows on Android. Do nothing. Note: this is called | 401 // We don't have plugin windows on Android. Do nothing. Note: this is called |
471 // from RenderWidgetHost::OnUpdateRect which is itself invoked while | 402 // from RenderWidgetHost::OnUpdateRect which is itself invoked while |
472 // processing the corresponding message from Renderer. | 403 // processing the corresponding message from Renderer. |
473 } | 404 } |
474 | 405 |
475 void RenderWidgetHostViewAndroid::Focus() { | 406 void RenderWidgetHostViewAndroid::Focus() { |
476 host_->Focus(); | 407 host_->Focus(); |
477 host_->SetInputMethodActive(true); | 408 host_->SetInputMethodActive(true); |
478 if (overscroll_effect_) | 409 if (overscroll_controller_) |
479 overscroll_effect_->Enable(); | 410 overscroll_controller_->Enable(); |
480 if (selection_controller_) | 411 if (selection_controller_) |
481 selection_controller_->SetTemporarilyHidden(false); | 412 selection_controller_->SetTemporarilyHidden(false); |
482 } | 413 } |
483 | 414 |
484 void RenderWidgetHostViewAndroid::Blur() { | 415 void RenderWidgetHostViewAndroid::Blur() { |
485 host_->SetInputMethodActive(false); | 416 host_->SetInputMethodActive(false); |
486 host_->Blur(); | 417 host_->Blur(); |
487 if (overscroll_effect_) | 418 if (overscroll_controller_) |
488 overscroll_effect_->Disable(); | 419 overscroll_controller_->Disable(); |
489 if (selection_controller_) | 420 if (selection_controller_) |
490 selection_controller_->SetTemporarilyHidden(true); | 421 selection_controller_->SetTemporarilyHidden(true); |
491 } | 422 } |
492 | 423 |
493 bool RenderWidgetHostViewAndroid::HasFocus() const { | 424 bool RenderWidgetHostViewAndroid::HasFocus() const { |
494 if (!content_view_core_) | 425 if (!content_view_core_) |
495 return false; // ContentViewCore not created yet. | 426 return false; // ContentViewCore not created yet. |
496 | 427 |
497 return content_view_core_->HasFocus(); | 428 return content_view_core_->HasFocus(); |
498 } | 429 } |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1025 void RenderWidgetHostViewAndroid::ComputeContentsSize( | 956 void RenderWidgetHostViewAndroid::ComputeContentsSize( |
1026 const cc::CompositorFrameMetadata& frame_metadata) { | 957 const cc::CompositorFrameMetadata& frame_metadata) { |
1027 // Calculate the content size. This should be 0 if the texture_size is 0. | 958 // Calculate the content size. This should be 0 if the texture_size is 0. |
1028 gfx::Vector2dF offset; | 959 gfx::Vector2dF offset; |
1029 if (texture_size_in_layer_.IsEmpty()) | 960 if (texture_size_in_layer_.IsEmpty()) |
1030 content_size_in_layer_ = gfx::Size(); | 961 content_size_in_layer_ = gfx::Size(); |
1031 content_size_in_layer_ = gfx::ToCeiledSize(gfx::ScaleSize( | 962 content_size_in_layer_ = gfx::ToCeiledSize(gfx::ScaleSize( |
1032 frame_metadata.scrollable_viewport_size, | 963 frame_metadata.scrollable_viewport_size, |
1033 frame_metadata.device_scale_factor * frame_metadata.page_scale_factor)); | 964 frame_metadata.device_scale_factor * frame_metadata.page_scale_factor)); |
1034 | 965 |
1035 if (overscroll_effect_) { | |
1036 overscroll_effect_->UpdateDisplayParameters( | |
1037 CreateOverscrollDisplayParameters(frame_metadata)); | |
1038 } | |
1039 } | 966 } |
1040 | 967 |
1041 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( | 968 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
1042 uint32 output_surface_id, | 969 uint32 output_surface_id, |
1043 scoped_ptr<cc::CompositorFrame> frame) { | 970 scoped_ptr<cc::CompositorFrame> frame) { |
1044 last_scroll_offset_ = frame->metadata.root_scroll_offset; | 971 last_scroll_offset_ = frame->metadata.root_scroll_offset; |
1045 if (!frame->delegated_frame_data) { | 972 if (!frame->delegated_frame_data) { |
1046 LOG(ERROR) << "Non-delegated renderer path no longer supported"; | 973 LOG(ERROR) << "Non-delegated renderer path no longer supported"; |
1047 return; | 974 return; |
1048 } | 975 } |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1221 // web design, so text will be legible without zooming). Also disable | 1148 // web design, so text will be legible without zooming). Also disable |
1222 // double tap and pinch for pages that prevent zooming in or out. | 1149 // double tap and pinch for pages that prevent zooming in or out. |
1223 bool has_mobile_viewport = HasMobileViewport(frame_metadata); | 1150 bool has_mobile_viewport = HasMobileViewport(frame_metadata); |
1224 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata); | 1151 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata); |
1225 gesture_provider_.SetDoubleTapSupportForPageEnabled( | 1152 gesture_provider_.SetDoubleTapSupportForPageEnabled( |
1226 !has_fixed_page_scale && !has_mobile_viewport); | 1153 !has_fixed_page_scale && !has_mobile_viewport); |
1227 | 1154 |
1228 if (!content_view_core_) | 1155 if (!content_view_core_) |
1229 return; | 1156 return; |
1230 | 1157 |
| 1158 if (overscroll_controller_) |
| 1159 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata); |
| 1160 |
1231 if (selection_controller_) { | 1161 if (selection_controller_) { |
1232 selection_controller_->OnSelectionBoundsChanged( | 1162 selection_controller_->OnSelectionBoundsChanged( |
1233 frame_metadata.selection_start, frame_metadata.selection_end); | 1163 frame_metadata.selection_start, frame_metadata.selection_end); |
1234 } | 1164 } |
1235 | 1165 |
1236 // All offsets and sizes are in CSS pixels. | 1166 // All offsets and sizes are in CSS pixels. |
1237 content_view_core_->UpdateFrameInfo( | 1167 content_view_core_->UpdateFrameInfo( |
1238 frame_metadata.root_scroll_offset, | 1168 frame_metadata.root_scroll_offset, |
1239 frame_metadata.page_scale_factor, | 1169 frame_metadata.page_scale_factor, |
1240 gfx::Vector2dF(frame_metadata.min_page_scale_factor, | 1170 gfx::Vector2dF(frame_metadata.min_page_scale_factor, |
(...skipping 16 matching lines...) Expand all Loading... |
1257 accelerated_surface_route_id_ = route_id; | 1187 accelerated_surface_route_id_ = route_id; |
1258 } | 1188 } |
1259 | 1189 |
1260 void RenderWidgetHostViewAndroid::AttachLayers() { | 1190 void RenderWidgetHostViewAndroid::AttachLayers() { |
1261 if (!content_view_core_) | 1191 if (!content_view_core_) |
1262 return; | 1192 return; |
1263 if (!layer_.get()) | 1193 if (!layer_.get()) |
1264 return; | 1194 return; |
1265 | 1195 |
1266 content_view_core_->AttachLayer(layer_); | 1196 content_view_core_->AttachLayer(layer_); |
1267 if (overscroll_effect_) | 1197 if (overscroll_controller_) |
1268 overscroll_effect_->Enable(); | 1198 overscroll_controller_->Enable(); |
1269 layer_->SetHideLayerAndSubtree(!is_showing_); | 1199 layer_->SetHideLayerAndSubtree(!is_showing_); |
1270 } | 1200 } |
1271 | 1201 |
1272 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1202 void RenderWidgetHostViewAndroid::RemoveLayers() { |
1273 if (!content_view_core_) | 1203 if (!content_view_core_) |
1274 return; | 1204 return; |
1275 | 1205 |
1276 if (!layer_.get()) | 1206 if (!layer_.get()) |
1277 return; | 1207 return; |
1278 | 1208 |
1279 content_view_core_->RemoveLayer(layer_); | 1209 content_view_core_->RemoveLayer(layer_); |
1280 if (overscroll_effect_) | 1210 if (overscroll_controller_) |
1281 overscroll_effect_->Disable(); | 1211 overscroll_controller_->Disable(); |
1282 } | 1212 } |
1283 | 1213 |
1284 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { | 1214 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { |
1285 // The synchronous compositor does not requre BeginFrame messages. | 1215 // The synchronous compositor does not requre BeginFrame messages. |
1286 if (using_synchronous_compositor_) | 1216 if (using_synchronous_compositor_) |
1287 requests &= FLUSH_INPUT; | 1217 requests &= FLUSH_INPUT; |
1288 | 1218 |
1289 bool should_request_vsync = !outstanding_vsync_requests_ && requests; | 1219 bool should_request_vsync = !outstanding_vsync_requests_ && requests; |
1290 outstanding_vsync_requests_ |= requests; | 1220 outstanding_vsync_requests_ |= requests; |
1291 // Note that if we're not currently observing the root window, outstanding | 1221 // Note that if we're not currently observing the root window, outstanding |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 | 1260 |
1331 base::TimeTicks deadline = | 1261 base::TimeTicks deadline = |
1332 display_time - host_->GetEstimatedBrowserCompositeTime(); | 1262 display_time - host_->GetEstimatedBrowserCompositeTime(); |
1333 | 1263 |
1334 host_->Send(new ViewMsg_BeginFrame( | 1264 host_->Send(new ViewMsg_BeginFrame( |
1335 host_->GetRoutingID(), | 1265 host_->GetRoutingID(), |
1336 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period))); | 1266 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period))); |
1337 } | 1267 } |
1338 | 1268 |
1339 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 1269 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
1340 bool needs_animate = | 1270 bool needs_animate = false; |
1341 overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; | 1271 if (overscroll_controller_) |
| 1272 needs_animate |= overscroll_controller_->Animate(frame_time); |
1342 if (selection_controller_) | 1273 if (selection_controller_) |
1343 needs_animate |= selection_controller_->Animate(frame_time); | 1274 needs_animate |= selection_controller_->Animate(frame_time); |
1344 return needs_animate; | 1275 return needs_animate; |
1345 } | 1276 } |
1346 | 1277 |
1347 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { | 1278 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { |
1348 if (layer_.get()) | 1279 if (layer_.get()) |
1349 DestroyDelegatedContent(); | 1280 DestroyDelegatedContent(); |
1350 frame_evictor_->DiscardedFrame(); | 1281 frame_evictor_->DiscardedFrame(); |
1351 // We are evicting the delegated frame, | 1282 // We are evicting the delegated frame, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1389 void RenderWidgetHostViewAndroid::GestureEventAck( | 1320 void RenderWidgetHostViewAndroid::GestureEventAck( |
1390 const blink::WebGestureEvent& event, | 1321 const blink::WebGestureEvent& event, |
1391 InputEventAckState ack_result) { | 1322 InputEventAckState ack_result) { |
1392 // The overscroll effect requires an explicit release signal that may not be | 1323 // The overscroll effect requires an explicit release signal that may not be |
1393 // sent from the renderer compositor. | 1324 // sent from the renderer compositor. |
1394 if (event.type == blink::WebInputEvent::GestureScrollEnd || | 1325 if (event.type == blink::WebInputEvent::GestureScrollEnd || |
1395 event.type == blink::WebInputEvent::GestureFlingStart) { | 1326 event.type == blink::WebInputEvent::GestureFlingStart) { |
1396 DidOverscroll(DidOverscrollParams()); | 1327 DidOverscroll(DidOverscrollParams()); |
1397 } | 1328 } |
1398 | 1329 |
| 1330 if (overscroll_controller_) |
| 1331 overscroll_controller_->OnGestureEventAck(event, ack_result); |
| 1332 |
1399 if (content_view_core_) | 1333 if (content_view_core_) |
1400 content_view_core_->OnGestureEventAck(event, ack_result); | 1334 content_view_core_->OnGestureEventAck(event, ack_result); |
1401 } | 1335 } |
1402 | 1336 |
1403 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( | 1337 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( |
1404 const blink::WebInputEvent& input_event) { | 1338 const blink::WebInputEvent& input_event) { |
1405 if (selection_controller_) { | 1339 if (selection_controller_) { |
1406 switch (input_event.type) { | 1340 switch (input_event.type) { |
1407 case blink::WebInputEvent::GestureLongPress: | 1341 case blink::WebInputEvent::GestureLongPress: |
1408 selection_controller_->OnLongPressEvent(); | 1342 selection_controller_->OnLongPressEvent(); |
1409 break; | 1343 break; |
1410 case blink::WebInputEvent::GestureTap: | 1344 case blink::WebInputEvent::GestureTap: |
1411 selection_controller_->OnTapEvent(); | 1345 selection_controller_->OnTapEvent(); |
1412 break; | 1346 break; |
1413 default: | 1347 default: |
1414 break; | 1348 break; |
1415 } | 1349 } |
1416 } | 1350 } |
1417 | 1351 |
| 1352 if (overscroll_controller_ && |
| 1353 blink::WebInputEvent::isGestureEventType(input_event.type) && |
| 1354 overscroll_controller_->WillHandleGestureEvent( |
| 1355 static_cast<const blink::WebGestureEvent&>(input_event))) { |
| 1356 return INPUT_EVENT_ACK_STATE_CONSUMED; |
| 1357 } |
| 1358 |
1418 if (content_view_core_ && | 1359 if (content_view_core_ && |
1419 content_view_core_->FilterInputEvent(input_event)) | 1360 content_view_core_->FilterInputEvent(input_event)) |
1420 return INPUT_EVENT_ACK_STATE_CONSUMED; | 1361 return INPUT_EVENT_ACK_STATE_CONSUMED; |
1421 | 1362 |
1422 if (!host_) | 1363 if (!host_) |
1423 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 1364 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
1424 | 1365 |
1425 if (input_event.type == blink::WebInputEvent::GestureTapDown || | 1366 if (input_event.type == blink::WebInputEvent::GestureTapDown || |
1426 input_event.type == blink::WebInputEvent::TouchStart) { | 1367 input_event.type == blink::WebInputEvent::TouchStart) { |
1427 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); | 1368 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 | 1433 |
1493 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 1434 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
1494 const blink::WebMouseWheelEvent& event) { | 1435 const blink::WebMouseWheelEvent& event) { |
1495 if (host_) | 1436 if (host_) |
1496 host_->ForwardWheelEvent(event); | 1437 host_->ForwardWheelEvent(event); |
1497 } | 1438 } |
1498 | 1439 |
1499 void RenderWidgetHostViewAndroid::SendGestureEvent( | 1440 void RenderWidgetHostViewAndroid::SendGestureEvent( |
1500 const blink::WebGestureEvent& event) { | 1441 const blink::WebGestureEvent& event) { |
1501 // Sending a gesture that may trigger overscroll should resume the effect. | 1442 // Sending a gesture that may trigger overscroll should resume the effect. |
1502 if (overscroll_effect_) | 1443 if (overscroll_controller_) |
1503 overscroll_effect_->Enable(); | 1444 overscroll_controller_->Enable(); |
1504 | 1445 |
1505 if (host_) | 1446 if (host_) |
1506 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); | 1447 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); |
1507 } | 1448 } |
1508 | 1449 |
1509 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { | 1450 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { |
1510 if (host_) | 1451 if (host_) |
1511 host_->MoveCaret(point); | 1452 host_->MoveCaret(point); |
1512 } | 1453 } |
1513 | 1454 |
(...skipping 26 matching lines...) Expand all Loading... |
1540 | 1481 |
1541 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1482 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1542 return cached_background_color_; | 1483 return cached_background_color_; |
1543 } | 1484 } |
1544 | 1485 |
1545 void RenderWidgetHostViewAndroid::DidOverscroll( | 1486 void RenderWidgetHostViewAndroid::DidOverscroll( |
1546 const DidOverscrollParams& params) { | 1487 const DidOverscrollParams& params) { |
1547 if (!content_view_core_ || !layer_.get() || !is_showing_) | 1488 if (!content_view_core_ || !layer_.get() || !is_showing_) |
1548 return; | 1489 return; |
1549 | 1490 |
1550 const float device_scale_factor = content_view_core_->GetDpiScale(); | 1491 if (overscroll_controller_) |
1551 | 1492 overscroll_controller_->OnOverscrolled(params); |
1552 if (overscroll_effect_ && | |
1553 overscroll_effect_->OnOverscrolled( | |
1554 content_view_core_->GetLayer().get(), | |
1555 base::TimeTicks::Now(), | |
1556 gfx::ScaleVector2d(params.accumulated_overscroll, | |
1557 device_scale_factor), | |
1558 gfx::ScaleVector2d(params.latest_overscroll_delta, | |
1559 device_scale_factor), | |
1560 gfx::ScaleVector2d(params.current_fling_velocity, | |
1561 device_scale_factor), | |
1562 gfx::ScaleVector2d( | |
1563 params.causal_event_viewport_point.OffsetFromOrigin(), | |
1564 device_scale_factor))) { | |
1565 SetNeedsAnimate(); | |
1566 } | |
1567 } | 1493 } |
1568 | 1494 |
1569 void RenderWidgetHostViewAndroid::DidStopFlinging() { | 1495 void RenderWidgetHostViewAndroid::DidStopFlinging() { |
1570 if (content_view_core_) | 1496 if (content_view_core_) |
1571 content_view_core_->DidStopFlinging(); | 1497 content_view_core_->DidStopFlinging(); |
1572 } | 1498 } |
1573 | 1499 |
1574 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1500 void RenderWidgetHostViewAndroid::SetContentViewCore( |
1575 ContentViewCoreImpl* content_view_core) { | 1501 ContentViewCoreImpl* content_view_core) { |
1576 RemoveLayers(); | 1502 RemoveLayers(); |
1577 StopObservingRootWindow(); | 1503 StopObservingRootWindow(); |
1578 | 1504 |
1579 bool resize = false; | 1505 bool resize = false; |
1580 if (content_view_core != content_view_core_) { | 1506 if (content_view_core != content_view_core_) { |
1581 overscroll_effect_.reset(); | 1507 overscroll_controller_.reset(); |
1582 selection_controller_.reset(); | 1508 selection_controller_.reset(); |
1583 ReleaseLocksOnSurface(); | 1509 ReleaseLocksOnSurface(); |
1584 resize = true; | 1510 resize = true; |
1585 } | 1511 } |
1586 | 1512 |
1587 content_view_core_ = content_view_core; | 1513 content_view_core_ = content_view_core; |
1588 | 1514 |
1589 BrowserAccessibilityManager* manager = NULL; | 1515 BrowserAccessibilityManager* manager = NULL; |
1590 if (host_) | 1516 if (host_) |
1591 manager = host_->GetRootBrowserAccessibilityManager(); | 1517 manager = host_->GetRootBrowserAccessibilityManager(); |
(...skipping 10 matching lines...) Expand all Loading... |
1602 return; | 1528 return; |
1603 | 1529 |
1604 StartObservingRootWindow(); | 1530 StartObservingRootWindow(); |
1605 | 1531 |
1606 if (resize) | 1532 if (resize) |
1607 WasResized(); | 1533 WasResized(); |
1608 | 1534 |
1609 if (!selection_controller_) | 1535 if (!selection_controller_) |
1610 selection_controller_ = CreateSelectionController(this, content_view_core_); | 1536 selection_controller_ = CreateSelectionController(this, content_view_core_); |
1611 | 1537 |
1612 if (overscroll_effect_enabled_ && !overscroll_effect_ && | 1538 if (overscroll_controller_enabled_ && !overscroll_controller_ && |
1613 content_view_core_->GetWindowAndroid()->GetCompositor()) | 1539 content_view_core_->GetWindowAndroid()->GetCompositor()) { |
1614 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); | 1540 overscroll_controller_.reset( |
| 1541 new OverscrollControllerAndroid(content_view_core_)); |
| 1542 } |
1615 } | 1543 } |
1616 | 1544 |
1617 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1545 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
1618 while (!ack_callbacks_.empty()) { | 1546 while (!ack_callbacks_.empty()) { |
1619 ack_callbacks_.front().Run(); | 1547 ack_callbacks_.front().Run(); |
1620 ack_callbacks_.pop(); | 1548 ack_callbacks_.pop(); |
1621 } | 1549 } |
1622 } | 1550 } |
1623 | 1551 |
1624 void RenderWidgetHostViewAndroid::OnGestureEvent( | 1552 void RenderWidgetHostViewAndroid::OnGestureEvent( |
1625 const ui::GestureEventData& gesture) { | 1553 const ui::GestureEventData& gesture) { |
1626 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); | 1554 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); |
1627 } | 1555 } |
1628 | 1556 |
1629 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { | 1557 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { |
1630 RunAckCallbacks(); | 1558 RunAckCallbacks(); |
1631 } | 1559 } |
1632 | 1560 |
1633 void RenderWidgetHostViewAndroid::OnAttachCompositor() { | 1561 void RenderWidgetHostViewAndroid::OnAttachCompositor() { |
1634 DCHECK(content_view_core_); | 1562 DCHECK(content_view_core_); |
1635 if (overscroll_effect_enabled_ && !overscroll_effect_) | 1563 if (overscroll_controller_enabled_ && !overscroll_controller_) { |
1636 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); | 1564 overscroll_controller_.reset( |
| 1565 new OverscrollControllerAndroid(content_view_core_)); |
| 1566 } |
1637 } | 1567 } |
1638 | 1568 |
1639 void RenderWidgetHostViewAndroid::OnDetachCompositor() { | 1569 void RenderWidgetHostViewAndroid::OnDetachCompositor() { |
1640 DCHECK(content_view_core_); | 1570 DCHECK(content_view_core_); |
1641 DCHECK(!using_synchronous_compositor_); | 1571 DCHECK(!using_synchronous_compositor_); |
1642 RunAckCallbacks(); | 1572 RunAckCallbacks(); |
1643 overscroll_effect_.reset(); | 1573 overscroll_controller_.reset(); |
1644 } | 1574 } |
1645 | 1575 |
1646 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, | 1576 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, |
1647 base::TimeDelta vsync_period) { | 1577 base::TimeDelta vsync_period) { |
1648 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync"); | 1578 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync"); |
1649 if (!host_) | 1579 if (!host_) |
1650 return; | 1580 return; |
1651 | 1581 |
1652 const uint32 current_vsync_requests = outstanding_vsync_requests_; | 1582 const uint32 current_vsync_requests = outstanding_vsync_requests_; |
1653 outstanding_vsync_requests_ = 0; | 1583 outstanding_vsync_requests_ = 0; |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1805 results->orientationAngle = display.RotationAsDegree(); | 1735 results->orientationAngle = display.RotationAsDegree(); |
1806 results->orientationType = | 1736 results->orientationType = |
1807 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 1737 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
1808 gfx::DeviceDisplayInfo info; | 1738 gfx::DeviceDisplayInfo info; |
1809 results->depth = info.GetBitsPerPixel(); | 1739 results->depth = info.GetBitsPerPixel(); |
1810 results->depthPerComponent = info.GetBitsPerComponent(); | 1740 results->depthPerComponent = info.GetBitsPerComponent(); |
1811 results->isMonochrome = (results->depthPerComponent == 0); | 1741 results->isMonochrome = (results->depthPerComponent == 0); |
1812 } | 1742 } |
1813 | 1743 |
1814 } // namespace content | 1744 } // namespace content |
OLD | NEW |