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 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |