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 |