| 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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1219 // web design, so text will be legible without zooming). Also disable | 1146 // web design, so text will be legible without zooming). Also disable |
| 1220 // double tap and pinch for pages that prevent zooming in or out. | 1147 // double tap and pinch for pages that prevent zooming in or out. |
| 1221 bool has_mobile_viewport = HasMobileViewport(frame_metadata); | 1148 bool has_mobile_viewport = HasMobileViewport(frame_metadata); |
| 1222 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata); | 1149 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata); |
| 1223 gesture_provider_.SetDoubleTapSupportForPageEnabled( | 1150 gesture_provider_.SetDoubleTapSupportForPageEnabled( |
| 1224 !has_fixed_page_scale && !has_mobile_viewport); | 1151 !has_fixed_page_scale && !has_mobile_viewport); |
| 1225 | 1152 |
| 1226 if (!content_view_core_) | 1153 if (!content_view_core_) |
| 1227 return; | 1154 return; |
| 1228 | 1155 |
| 1156 if (overscroll_controller_) |
| 1157 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata); |
| 1158 |
| 1229 if (selection_controller_) { | 1159 if (selection_controller_) { |
| 1230 selection_controller_->OnSelectionBoundsChanged( | 1160 selection_controller_->OnSelectionBoundsChanged( |
| 1231 frame_metadata.selection_start, frame_metadata.selection_end); | 1161 frame_metadata.selection_start, frame_metadata.selection_end); |
| 1232 } | 1162 } |
| 1233 | 1163 |
| 1234 // All offsets and sizes are in CSS pixels. | 1164 // All offsets and sizes are in CSS pixels. |
| 1235 content_view_core_->UpdateFrameInfo( | 1165 content_view_core_->UpdateFrameInfo( |
| 1236 frame_metadata.root_scroll_offset, | 1166 frame_metadata.root_scroll_offset, |
| 1237 frame_metadata.page_scale_factor, | 1167 frame_metadata.page_scale_factor, |
| 1238 gfx::Vector2dF(frame_metadata.min_page_scale_factor, | 1168 gfx::Vector2dF(frame_metadata.min_page_scale_factor, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1255 accelerated_surface_route_id_ = route_id; | 1185 accelerated_surface_route_id_ = route_id; |
| 1256 } | 1186 } |
| 1257 | 1187 |
| 1258 void RenderWidgetHostViewAndroid::AttachLayers() { | 1188 void RenderWidgetHostViewAndroid::AttachLayers() { |
| 1259 if (!content_view_core_) | 1189 if (!content_view_core_) |
| 1260 return; | 1190 return; |
| 1261 if (!layer_.get()) | 1191 if (!layer_.get()) |
| 1262 return; | 1192 return; |
| 1263 | 1193 |
| 1264 content_view_core_->AttachLayer(layer_); | 1194 content_view_core_->AttachLayer(layer_); |
| 1265 if (overscroll_effect_) | 1195 if (overscroll_controller_) |
| 1266 overscroll_effect_->Enable(); | 1196 overscroll_controller_->Enable(); |
| 1267 layer_->SetHideLayerAndSubtree(!is_showing_); | 1197 layer_->SetHideLayerAndSubtree(!is_showing_); |
| 1268 } | 1198 } |
| 1269 | 1199 |
| 1270 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1200 void RenderWidgetHostViewAndroid::RemoveLayers() { |
| 1271 if (!content_view_core_) | 1201 if (!content_view_core_) |
| 1272 return; | 1202 return; |
| 1273 | 1203 |
| 1274 if (!layer_.get()) | 1204 if (!layer_.get()) |
| 1275 return; | 1205 return; |
| 1276 | 1206 |
| 1277 content_view_core_->RemoveLayer(layer_); | 1207 content_view_core_->RemoveLayer(layer_); |
| 1278 if (overscroll_effect_) | 1208 if (overscroll_controller_) |
| 1279 overscroll_effect_->Disable(); | 1209 overscroll_controller_->Disable(); |
| 1280 } | 1210 } |
| 1281 | 1211 |
| 1282 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { | 1212 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { |
| 1283 // The synchronous compositor does not requre BeginFrame messages. | 1213 // The synchronous compositor does not requre BeginFrame messages. |
| 1284 if (using_synchronous_compositor_) | 1214 if (using_synchronous_compositor_) |
| 1285 requests &= FLUSH_INPUT; | 1215 requests &= FLUSH_INPUT; |
| 1286 | 1216 |
| 1287 bool should_request_vsync = !outstanding_vsync_requests_ && requests; | 1217 bool should_request_vsync = !outstanding_vsync_requests_ && requests; |
| 1288 outstanding_vsync_requests_ |= requests; | 1218 outstanding_vsync_requests_ |= requests; |
| 1289 // Note that if we're not currently observing the root window, outstanding | 1219 // 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... |
| 1328 | 1258 |
| 1329 base::TimeTicks deadline = | 1259 base::TimeTicks deadline = |
| 1330 display_time - host_->GetEstimatedBrowserCompositeTime(); | 1260 display_time - host_->GetEstimatedBrowserCompositeTime(); |
| 1331 | 1261 |
| 1332 host_->Send(new ViewMsg_BeginFrame( | 1262 host_->Send(new ViewMsg_BeginFrame( |
| 1333 host_->GetRoutingID(), | 1263 host_->GetRoutingID(), |
| 1334 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period))); | 1264 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period))); |
| 1335 } | 1265 } |
| 1336 | 1266 |
| 1337 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 1267 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
| 1338 bool needs_animate = | 1268 bool needs_animate = false; |
| 1339 overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; | 1269 if (overscroll_controller_) |
| 1270 needs_animate |= overscroll_controller_->Animate(frame_time); |
| 1340 if (selection_controller_) | 1271 if (selection_controller_) |
| 1341 needs_animate |= selection_controller_->Animate(frame_time); | 1272 needs_animate |= selection_controller_->Animate(frame_time); |
| 1342 return needs_animate; | 1273 return needs_animate; |
| 1343 } | 1274 } |
| 1344 | 1275 |
| 1345 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { | 1276 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { |
| 1346 if (layer_.get()) | 1277 if (layer_.get()) |
| 1347 DestroyDelegatedContent(); | 1278 DestroyDelegatedContent(); |
| 1348 frame_evictor_->DiscardedFrame(); | 1279 frame_evictor_->DiscardedFrame(); |
| 1349 // We are evicting the delegated frame, | 1280 // We are evicting the delegated frame, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1387 void RenderWidgetHostViewAndroid::GestureEventAck( | 1318 void RenderWidgetHostViewAndroid::GestureEventAck( |
| 1388 const blink::WebGestureEvent& event, | 1319 const blink::WebGestureEvent& event, |
| 1389 InputEventAckState ack_result) { | 1320 InputEventAckState ack_result) { |
| 1390 // The overscroll effect requires an explicit release signal that may not be | 1321 // The overscroll effect requires an explicit release signal that may not be |
| 1391 // sent from the renderer compositor. | 1322 // sent from the renderer compositor. |
| 1392 if (event.type == blink::WebInputEvent::GestureScrollEnd || | 1323 if (event.type == blink::WebInputEvent::GestureScrollEnd || |
| 1393 event.type == blink::WebInputEvent::GestureFlingStart) { | 1324 event.type == blink::WebInputEvent::GestureFlingStart) { |
| 1394 DidOverscroll(DidOverscrollParams()); | 1325 DidOverscroll(DidOverscrollParams()); |
| 1395 } | 1326 } |
| 1396 | 1327 |
| 1328 if (overscroll_controller_) |
| 1329 overscroll_controller_->OnGestureEventAck(event, ack_result); |
| 1330 |
| 1397 if (content_view_core_) | 1331 if (content_view_core_) |
| 1398 content_view_core_->OnGestureEventAck(event, ack_result); | 1332 content_view_core_->OnGestureEventAck(event, ack_result); |
| 1399 } | 1333 } |
| 1400 | 1334 |
| 1401 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( | 1335 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( |
| 1402 const blink::WebInputEvent& input_event) { | 1336 const blink::WebInputEvent& input_event) { |
| 1403 if (selection_controller_) { | 1337 if (selection_controller_) { |
| 1404 switch (input_event.type) { | 1338 switch (input_event.type) { |
| 1405 case blink::WebInputEvent::GestureLongPress: | 1339 case blink::WebInputEvent::GestureLongPress: |
| 1406 selection_controller_->OnLongPressEvent(); | 1340 selection_controller_->OnLongPressEvent(); |
| 1407 break; | 1341 break; |
| 1408 case blink::WebInputEvent::GestureTap: | 1342 case blink::WebInputEvent::GestureTap: |
| 1409 selection_controller_->OnTapEvent(); | 1343 selection_controller_->OnTapEvent(); |
| 1410 break; | 1344 break; |
| 1411 default: | 1345 default: |
| 1412 break; | 1346 break; |
| 1413 } | 1347 } |
| 1414 } | 1348 } |
| 1415 | 1349 |
| 1350 if (overscroll_controller_ && |
| 1351 blink::WebInputEvent::isGestureEventType(input_event.type) && |
| 1352 overscroll_controller_->WillHandleGestureEvent( |
| 1353 static_cast<const blink::WebGestureEvent&>(input_event))) { |
| 1354 return INPUT_EVENT_ACK_STATE_CONSUMED; |
| 1355 } |
| 1356 |
| 1416 if (content_view_core_ && | 1357 if (content_view_core_ && |
| 1417 content_view_core_->FilterInputEvent(input_event)) | 1358 content_view_core_->FilterInputEvent(input_event)) |
| 1418 return INPUT_EVENT_ACK_STATE_CONSUMED; | 1359 return INPUT_EVENT_ACK_STATE_CONSUMED; |
| 1419 | 1360 |
| 1420 if (!host_) | 1361 if (!host_) |
| 1421 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 1362 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 1422 | 1363 |
| 1423 if (input_event.type == blink::WebInputEvent::GestureTapDown || | 1364 if (input_event.type == blink::WebInputEvent::GestureTapDown || |
| 1424 input_event.type == blink::WebInputEvent::TouchStart) { | 1365 input_event.type == blink::WebInputEvent::TouchStart) { |
| 1425 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); | 1366 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1490 | 1431 |
| 1491 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 1432 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
| 1492 const blink::WebMouseWheelEvent& event) { | 1433 const blink::WebMouseWheelEvent& event) { |
| 1493 if (host_) | 1434 if (host_) |
| 1494 host_->ForwardWheelEvent(event); | 1435 host_->ForwardWheelEvent(event); |
| 1495 } | 1436 } |
| 1496 | 1437 |
| 1497 void RenderWidgetHostViewAndroid::SendGestureEvent( | 1438 void RenderWidgetHostViewAndroid::SendGestureEvent( |
| 1498 const blink::WebGestureEvent& event) { | 1439 const blink::WebGestureEvent& event) { |
| 1499 // Sending a gesture that may trigger overscroll should resume the effect. | 1440 // Sending a gesture that may trigger overscroll should resume the effect. |
| 1500 if (overscroll_effect_) | 1441 if (overscroll_controller_) |
| 1501 overscroll_effect_->Enable(); | 1442 overscroll_controller_->Enable(); |
| 1502 | 1443 |
| 1503 if (host_) | 1444 if (host_) |
| 1504 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); | 1445 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); |
| 1505 } | 1446 } |
| 1506 | 1447 |
| 1507 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { | 1448 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { |
| 1508 if (host_) | 1449 if (host_) |
| 1509 host_->MoveCaret(point); | 1450 host_->MoveCaret(point); |
| 1510 } | 1451 } |
| 1511 | 1452 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1538 | 1479 |
| 1539 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1480 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
| 1540 return cached_background_color_; | 1481 return cached_background_color_; |
| 1541 } | 1482 } |
| 1542 | 1483 |
| 1543 void RenderWidgetHostViewAndroid::DidOverscroll( | 1484 void RenderWidgetHostViewAndroid::DidOverscroll( |
| 1544 const DidOverscrollParams& params) { | 1485 const DidOverscrollParams& params) { |
| 1545 if (!content_view_core_ || !layer_.get() || !is_showing_) | 1486 if (!content_view_core_ || !layer_.get() || !is_showing_) |
| 1546 return; | 1487 return; |
| 1547 | 1488 |
| 1548 const float device_scale_factor = content_view_core_->GetDpiScale(); | 1489 if (overscroll_controller_) |
| 1549 | 1490 overscroll_controller_->OnOverscrolled(params); |
| 1550 if (overscroll_effect_ && | |
| 1551 overscroll_effect_->OnOverscrolled( | |
| 1552 content_view_core_->GetLayer().get(), | |
| 1553 base::TimeTicks::Now(), | |
| 1554 gfx::ScaleVector2d(params.accumulated_overscroll, | |
| 1555 device_scale_factor), | |
| 1556 gfx::ScaleVector2d(params.latest_overscroll_delta, | |
| 1557 device_scale_factor), | |
| 1558 gfx::ScaleVector2d(params.current_fling_velocity, | |
| 1559 device_scale_factor), | |
| 1560 gfx::ScaleVector2d( | |
| 1561 params.causal_event_viewport_point.OffsetFromOrigin(), | |
| 1562 device_scale_factor))) { | |
| 1563 SetNeedsAnimate(); | |
| 1564 } | |
| 1565 } | 1491 } |
| 1566 | 1492 |
| 1567 void RenderWidgetHostViewAndroid::DidStopFlinging() { | 1493 void RenderWidgetHostViewAndroid::DidStopFlinging() { |
| 1568 if (content_view_core_) | 1494 if (content_view_core_) |
| 1569 content_view_core_->DidStopFlinging(); | 1495 content_view_core_->DidStopFlinging(); |
| 1570 } | 1496 } |
| 1571 | 1497 |
| 1572 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1498 void RenderWidgetHostViewAndroid::SetContentViewCore( |
| 1573 ContentViewCoreImpl* content_view_core) { | 1499 ContentViewCoreImpl* content_view_core) { |
| 1574 RemoveLayers(); | 1500 RemoveLayers(); |
| 1575 StopObservingRootWindow(); | 1501 StopObservingRootWindow(); |
| 1576 | 1502 |
| 1577 bool resize = false; | 1503 bool resize = false; |
| 1578 if (content_view_core != content_view_core_) { | 1504 if (content_view_core != content_view_core_) { |
| 1579 overscroll_effect_.reset(); | 1505 overscroll_controller_.reset(); |
| 1580 selection_controller_.reset(); | 1506 selection_controller_.reset(); |
| 1581 ReleaseLocksOnSurface(); | 1507 ReleaseLocksOnSurface(); |
| 1582 resize = true; | 1508 resize = true; |
| 1583 } | 1509 } |
| 1584 | 1510 |
| 1585 content_view_core_ = content_view_core; | 1511 content_view_core_ = content_view_core; |
| 1586 | 1512 |
| 1587 BrowserAccessibilityManager* manager = NULL; | 1513 BrowserAccessibilityManager* manager = NULL; |
| 1588 if (host_) | 1514 if (host_) |
| 1589 manager = host_->GetRootBrowserAccessibilityManager(); | 1515 manager = host_->GetRootBrowserAccessibilityManager(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1600 return; | 1526 return; |
| 1601 | 1527 |
| 1602 StartObservingRootWindow(); | 1528 StartObservingRootWindow(); |
| 1603 | 1529 |
| 1604 if (resize) | 1530 if (resize) |
| 1605 WasResized(); | 1531 WasResized(); |
| 1606 | 1532 |
| 1607 if (!selection_controller_) | 1533 if (!selection_controller_) |
| 1608 selection_controller_ = CreateSelectionController(this, content_view_core_); | 1534 selection_controller_ = CreateSelectionController(this, content_view_core_); |
| 1609 | 1535 |
| 1610 if (overscroll_effect_enabled_ && !overscroll_effect_ && | 1536 if (overscroll_controller_enabled_ && !overscroll_controller_ && |
| 1611 content_view_core_->GetWindowAndroid()->GetCompositor()) | 1537 content_view_core_->GetWindowAndroid()->GetCompositor()) { |
| 1612 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); | 1538 overscroll_controller_.reset( |
| 1539 new OverscrollControllerAndroid(content_view_core_)); |
| 1540 } |
| 1613 } | 1541 } |
| 1614 | 1542 |
| 1615 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1543 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
| 1616 while (!ack_callbacks_.empty()) { | 1544 while (!ack_callbacks_.empty()) { |
| 1617 ack_callbacks_.front().Run(); | 1545 ack_callbacks_.front().Run(); |
| 1618 ack_callbacks_.pop(); | 1546 ack_callbacks_.pop(); |
| 1619 } | 1547 } |
| 1620 } | 1548 } |
| 1621 | 1549 |
| 1622 void RenderWidgetHostViewAndroid::OnGestureEvent( | 1550 void RenderWidgetHostViewAndroid::OnGestureEvent( |
| 1623 const ui::GestureEventData& gesture) { | 1551 const ui::GestureEventData& gesture) { |
| 1624 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); | 1552 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); |
| 1625 } | 1553 } |
| 1626 | 1554 |
| 1627 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { | 1555 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { |
| 1628 RunAckCallbacks(); | 1556 RunAckCallbacks(); |
| 1629 } | 1557 } |
| 1630 | 1558 |
| 1631 void RenderWidgetHostViewAndroid::OnAttachCompositor() { | 1559 void RenderWidgetHostViewAndroid::OnAttachCompositor() { |
| 1632 DCHECK(content_view_core_); | 1560 DCHECK(content_view_core_); |
| 1633 if (overscroll_effect_enabled_ && !overscroll_effect_) | 1561 if (overscroll_controller_enabled_ && !overscroll_controller_) { |
| 1634 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); | 1562 overscroll_controller_.reset( |
| 1563 new OverscrollControllerAndroid(content_view_core_)); |
| 1564 } |
| 1635 } | 1565 } |
| 1636 | 1566 |
| 1637 void RenderWidgetHostViewAndroid::OnDetachCompositor() { | 1567 void RenderWidgetHostViewAndroid::OnDetachCompositor() { |
| 1638 DCHECK(content_view_core_); | 1568 DCHECK(content_view_core_); |
| 1639 DCHECK(!using_synchronous_compositor_); | 1569 DCHECK(!using_synchronous_compositor_); |
| 1640 RunAckCallbacks(); | 1570 RunAckCallbacks(); |
| 1641 overscroll_effect_.reset(); | 1571 overscroll_controller_.reset(); |
| 1642 } | 1572 } |
| 1643 | 1573 |
| 1644 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, | 1574 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, |
| 1645 base::TimeDelta vsync_period) { | 1575 base::TimeDelta vsync_period) { |
| 1646 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync"); | 1576 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync"); |
| 1647 if (!host_) | 1577 if (!host_) |
| 1648 return; | 1578 return; |
| 1649 | 1579 |
| 1650 const uint32 current_vsync_requests = outstanding_vsync_requests_; | 1580 const uint32 current_vsync_requests = outstanding_vsync_requests_; |
| 1651 outstanding_vsync_requests_ = 0; | 1581 outstanding_vsync_requests_ = 0; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1803 results->orientationAngle = display.RotationAsDegree(); | 1733 results->orientationAngle = display.RotationAsDegree(); |
| 1804 results->orientationType = | 1734 results->orientationType = |
| 1805 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 1735 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
| 1806 gfx::DeviceDisplayInfo info; | 1736 gfx::DeviceDisplayInfo info; |
| 1807 results->depth = info.GetBitsPerPixel(); | 1737 results->depth = info.GetBitsPerPixel(); |
| 1808 results->depthPerComponent = info.GetBitsPerComponent(); | 1738 results->depthPerComponent = info.GetBitsPerComponent(); |
| 1809 results->isMonochrome = (results->depthPerComponent == 0); | 1739 results->isMonochrome = (results->depthPerComponent == 0); |
| 1810 } | 1740 } |
| 1811 | 1741 |
| 1812 } // namespace content | 1742 } // namespace content |
| OLD | NEW |