| 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/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 117 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( |
| 118 widget_host->GetProcess()->GetID(), | 118 widget_host->GetProcess()->GetID(), |
| 119 widget_host->GetRoutingID()) != NULL) { | 119 widget_host->GetRoutingID()) != NULL) { |
| 120 if (!UsingDelegatedRenderer()) { | 120 if (!UsingDelegatedRenderer()) { |
| 121 texture_layer_ = cc::TextureLayer::Create(NULL); | 121 texture_layer_ = cc::TextureLayer::Create(NULL); |
| 122 layer_ = texture_layer_; | 122 layer_ = texture_layer_; |
| 123 } | 123 } |
| 124 | 124 |
| 125 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> | 125 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> |
| 126 HasSwitch(switches::kDisableOverscrollEdgeEffect); | 126 HasSwitch(switches::kDisableOverscrollEdgeEffect); |
| 127 // Don't block the main thread with effect resource loading. | |
| 128 // Actual effect creation is deferred until an overscroll event is received. | |
| 129 if (overscroll_effect_enabled_) { | |
| 130 base::WorkerPool::PostTask(FROM_HERE, | |
| 131 base::Bind(&OverscrollGlow::EnsureResources), | |
| 132 true); | |
| 133 } | |
| 134 | 127 |
| 135 host_->SetView(this); | 128 host_->SetView(this); |
| 136 SetContentViewCore(content_view_core); | 129 SetContentViewCore(content_view_core); |
| 137 ImageTransportFactoryAndroid::AddObserver(this); | 130 ImageTransportFactoryAndroid::AddObserver(this); |
| 138 } | 131 } |
| 139 | 132 |
| 140 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { | 133 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { |
| 141 ImageTransportFactoryAndroid::RemoveObserver(this); | 134 ImageTransportFactoryAndroid::RemoveObserver(this); |
| 142 SetContentViewCore(NULL); | 135 SetContentViewCore(NULL); |
| 143 DCHECK(ack_callbacks_.empty()); | 136 DCHECK(ack_callbacks_.empty()); |
| (...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 858 content_view_core_->AttachLayer(layer_); | 851 content_view_core_->AttachLayer(layer_); |
| 859 } | 852 } |
| 860 | 853 |
| 861 void RenderWidgetHostViewAndroid::RemoveLayers() { | 854 void RenderWidgetHostViewAndroid::RemoveLayers() { |
| 862 if (!content_view_core_) | 855 if (!content_view_core_) |
| 863 return; | 856 return; |
| 864 if (!layer_.get()) | 857 if (!layer_.get()) |
| 865 return; | 858 return; |
| 866 | 859 |
| 867 if (overscroll_effect_) | 860 if (overscroll_effect_) |
| 868 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); | 861 overscroll_effect_->RemoveLayer(); |
| 869 | 862 |
| 870 content_view_core_->RemoveLayer(layer_); | 863 content_view_core_->RemoveLayer(layer_); |
| 871 } | 864 } |
| 872 | 865 |
| 873 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 866 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
| 874 if (!overscroll_effect_) | 867 if (!overscroll_effect_) |
| 875 return false; | 868 return false; |
| 876 | 869 |
| 877 bool overscroll_running = overscroll_effect_->Animate(frame_time); | 870 bool overscroll_running = overscroll_effect_->Animate(frame_time); |
| 878 if (!overscroll_running) | 871 if (!overscroll_running) |
| 879 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); | 872 overscroll_effect_->RemoveLayer(); |
| 880 | 873 |
| 881 return overscroll_running; | 874 return overscroll_running; |
| 882 } | 875 } |
| 883 | 876 |
| 884 void RenderWidgetHostViewAndroid::CreateOverscrollEffectIfNecessary() { | 877 void RenderWidgetHostViewAndroid::CreateOverscrollEffectIfNecessary() { |
| 885 if (!overscroll_effect_enabled_ || overscroll_effect_) | 878 if (!overscroll_effect_enabled_ || overscroll_effect_) |
| 886 return; | 879 return; |
| 887 | 880 |
| 888 overscroll_effect_ = OverscrollGlow::Create(true, content_size_in_layer_); | 881 overscroll_effect_ = OverscrollGlow::Create(true, content_size_in_layer_); |
| 889 | 882 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 904 overscroll_effect_->set_vertical_overscroll_enabled( | 897 overscroll_effect_->set_vertical_overscroll_enabled( |
| 905 ceiled_viewport_size.height() < frame_metadata.root_layer_size.height()); | 898 ceiled_viewport_size.height() < frame_metadata.root_layer_size.height()); |
| 906 overscroll_effect_->set_size(content_size_in_layer_); | 899 overscroll_effect_->set_size(content_size_in_layer_); |
| 907 } | 900 } |
| 908 | 901 |
| 909 void RenderWidgetHostViewAndroid::ScheduleAnimationIfNecessary() { | 902 void RenderWidgetHostViewAndroid::ScheduleAnimationIfNecessary() { |
| 910 if (!content_view_core_ || !overscroll_effect_) | 903 if (!content_view_core_ || !overscroll_effect_) |
| 911 return; | 904 return; |
| 912 | 905 |
| 913 if (overscroll_effect_->NeedsAnimate() && are_layers_attached_) { | 906 if (overscroll_effect_->NeedsAnimate() && are_layers_attached_) { |
| 914 if (!overscroll_effect_->root_layer()->parent()) | 907 if (!overscroll_effect_->IsAttached()) |
| 915 content_view_core_->AttachLayer(overscroll_effect_->root_layer()); | 908 overscroll_effect_->AttachLayerTo(content_view_core_->GetLayer()); |
| 916 content_view_core_->SetNeedsAnimate(); | 909 content_view_core_->SetNeedsAnimate(); |
| 917 } else { | 910 } else { |
| 918 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); | 911 overscroll_effect_->RemoveLayer(); |
| 919 } | 912 } |
| 920 } | 913 } |
| 921 | 914 |
| 922 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( | 915 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( |
| 923 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, | 916 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, |
| 924 int gpu_host_id) { | 917 int gpu_host_id) { |
| 925 NOTREACHED(); | 918 NOTREACHED(); |
| 926 } | 919 } |
| 927 | 920 |
| 928 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { | 921 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1255 ack_callbacks_.pop(); | 1248 ack_callbacks_.pop(); |
| 1256 } | 1249 } |
| 1257 } | 1250 } |
| 1258 | 1251 |
| 1259 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( | 1252 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( |
| 1260 bool need_touch_events) { | 1253 bool need_touch_events) { |
| 1261 if (content_view_core_) | 1254 if (content_view_core_) |
| 1262 content_view_core_->HasTouchEventHandlers(need_touch_events); | 1255 content_view_core_->HasTouchEventHandlers(need_touch_events); |
| 1263 } | 1256 } |
| 1264 | 1257 |
| 1265 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { | 1258 void RenderWidgetHostViewAndroid::OnCompositingDidCommit( |
| 1259 Compositor* compositor) { |
| 1266 RunAckCallbacks(); | 1260 RunAckCallbacks(); |
| 1261 if (overscroll_effect_) { |
| 1262 cc::UIResourceId edge_id = compositor->GetOverscrollEdgeId(); |
| 1263 cc::UIResourceId glow_id = compositor->GetOverscrollGlowId(); |
| 1264 if (edge_id && glow_id) { |
| 1265 bool updated_resources = overscroll_effect_->SetLayerResources( |
| 1266 edge_id, |
| 1267 glow_id, |
| 1268 compositor->GetUIResourceSize(edge_id), |
| 1269 compositor->GetUIResourceSize(glow_id)); |
| 1270 if (updated_resources) |
| 1271 ScheduleAnimationIfNecessary(); |
| 1272 } |
| 1273 } |
| 1267 } | 1274 } |
| 1268 | 1275 |
| 1269 void RenderWidgetHostViewAndroid::OnDetachCompositor() { | 1276 void RenderWidgetHostViewAndroid::OnDetachCompositor() { |
| 1270 DCHECK(content_view_core_); | 1277 DCHECK(content_view_core_); |
| 1271 DCHECK(!using_synchronous_compositor_); | 1278 DCHECK(!using_synchronous_compositor_); |
| 1272 RunAckCallbacks(); | 1279 RunAckCallbacks(); |
| 1273 } | 1280 } |
| 1274 | 1281 |
| 1275 void RenderWidgetHostViewAndroid::OnLostResources() { | 1282 void RenderWidgetHostViewAndroid::OnLostResources() { |
| 1276 if (texture_layer_.get()) | 1283 if (texture_layer_.get()) |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 // RenderWidgetHostView, public: | 1383 // RenderWidgetHostView, public: |
| 1377 | 1384 |
| 1378 // static | 1385 // static |
| 1379 RenderWidgetHostView* | 1386 RenderWidgetHostView* |
| 1380 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1387 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1381 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1388 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1382 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1389 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1383 } | 1390 } |
| 1384 | 1391 |
| 1385 } // namespace content | 1392 } // namespace content |
| OLD | NEW |