Chromium Code Reviews| 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 12 matching lines...) Expand all Loading... | |
| 23 #include "cc/output/copy_output_request.h" | 23 #include "cc/output/copy_output_request.h" |
| 24 #include "cc/output/copy_output_result.h" | 24 #include "cc/output/copy_output_result.h" |
| 25 #include "cc/resources/single_release_callback.h" | 25 #include "cc/resources/single_release_callback.h" |
| 26 #include "cc/trees/layer_tree_host.h" | 26 #include "cc/trees/layer_tree_host.h" |
| 27 #include "content/browser/accessibility/browser_accessibility_manager_android.h" | 27 #include "content/browser/accessibility/browser_accessibility_manager_android.h" |
| 28 #include "content/browser/android/content_view_core_impl.h" | 28 #include "content/browser/android/content_view_core_impl.h" |
| 29 #include "content/browser/android/in_process/synchronous_compositor_impl.h" | 29 #include "content/browser/android/in_process/synchronous_compositor_impl.h" |
| 30 #include "content/browser/android/overscroll_glow.h" | 30 #include "content/browser/android/overscroll_glow.h" |
| 31 #include "content/browser/gpu/gpu_surface_tracker.h" | 31 #include "content/browser/gpu/gpu_surface_tracker.h" |
| 32 #include "content/browser/renderer_host/compositor_impl_android.h" | 32 #include "content/browser/renderer_host/compositor_impl_android.h" |
| 33 #include "content/browser/renderer_host/compositor_observer.h" | |
| 33 #include "content/browser/renderer_host/dip_util.h" | 34 #include "content/browser/renderer_host/dip_util.h" |
| 34 #include "content/browser/renderer_host/generic_touch_gesture_android.h" | 35 #include "content/browser/renderer_host/generic_touch_gesture_android.h" |
| 35 #include "content/browser/renderer_host/image_transport_factory_android.h" | 36 #include "content/browser/renderer_host/image_transport_factory_android.h" |
| 36 #include "content/browser/renderer_host/render_widget_host_impl.h" | 37 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 37 #include "content/common/gpu/client/gl_helper.h" | 38 #include "content/common/gpu/client/gl_helper.h" |
| 38 #include "content/common/gpu/gpu_messages.h" | 39 #include "content/common/gpu/gpu_messages.h" |
| 39 #include "content/common/input_messages.h" | 40 #include "content/common/input_messages.h" |
| 40 #include "content/common/view_messages.h" | 41 #include "content/common/view_messages.h" |
| 41 #include "content/public/common/content_switches.h" | 42 #include "content/public/common/content_switches.h" |
| 42 #include "skia/ext/image_operations.h" | 43 #include "skia/ext/image_operations.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 are_layers_attached_(true), | 116 are_layers_attached_(true), |
| 116 content_view_core_(NULL), | 117 content_view_core_(NULL), |
| 117 ime_adapter_android_(this), | 118 ime_adapter_android_(this), |
| 118 cached_background_color_(SK_ColorWHITE), | 119 cached_background_color_(SK_ColorWHITE), |
| 119 texture_id_in_layer_(0), | 120 texture_id_in_layer_(0), |
| 120 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), | 121 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), |
| 121 weak_ptr_factory_(this), | 122 weak_ptr_factory_(this), |
| 122 overscroll_effect_enabled_(true), | 123 overscroll_effect_enabled_(true), |
| 123 flush_input_requested_(false) { | 124 flush_input_requested_(false) { |
| 124 if (!UsingDelegatedRenderer()) { | 125 if (!UsingDelegatedRenderer()) { |
| 125 texture_layer_ = cc::TextureLayer::Create(this); | 126 texture_layer_ = cc::TextureLayer::Create(NULL); |
| 126 layer_ = texture_layer_; | 127 layer_ = texture_layer_; |
| 127 } | 128 } |
| 128 | 129 |
| 129 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> | 130 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> |
| 130 HasSwitch(switches::kDisableOverscrollEdgeEffect); | 131 HasSwitch(switches::kDisableOverscrollEdgeEffect); |
| 131 // Don't block the main thread with effect resource loading. | 132 // Don't block the main thread with effect resource loading. |
| 132 // Actual effect creation is deferred until an overscroll event is received. | 133 // Actual effect creation is deferred until an overscroll event is received. |
| 133 if (overscroll_effect_enabled_) { | 134 if (overscroll_effect_enabled_) { |
| 134 base::WorkerPool::PostTask(FROM_HERE, | 135 base::WorkerPool::PostTask(FROM_HERE, |
| 135 base::Bind(&OverscrollGlow::EnsureResources), | 136 base::Bind(&OverscrollGlow::EnsureResources), |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 499 const std::vector<gfx::Rect>& copy_rects, | 500 const std::vector<gfx::Rect>& copy_rects, |
| 500 const ui::LatencyInfo& latency_info) { | 501 const ui::LatencyInfo& latency_info) { |
| 501 NOTIMPLEMENTED(); | 502 NOTIMPLEMENTED(); |
| 502 } | 503 } |
| 503 | 504 |
| 504 void RenderWidgetHostViewAndroid::RenderProcessGone( | 505 void RenderWidgetHostViewAndroid::RenderProcessGone( |
| 505 base::TerminationStatus status, int error_code) { | 506 base::TerminationStatus status, int error_code) { |
| 506 Destroy(); | 507 Destroy(); |
| 507 } | 508 } |
| 508 | 509 |
| 510 void RenderWidgetHostViewAndroid::DetachFromContentViewCore( | |
|
no sievers
2013/10/16 23:34:23
Can we make the changes to this file really simple
powei
2013/10/19 00:05:18
Done. WasHidden is not always guarranteed to run
| |
| 511 bool check_layers_attached) { | |
| 512 RunAckCallbacks(); | |
| 513 | |
| 514 if (!check_layers_attached || are_layers_attached_) { | |
| 515 RemoveLayers(); | |
| 516 } | |
| 517 if (content_view_core_) { | |
| 518 Compositor* compositor = content_view_core_->GetCompositor(); | |
| 519 if (compositor) { | |
| 520 compositor->RemoveObserver(this); | |
| 521 } | |
| 522 } | |
| 523 content_view_core_ = NULL; | |
| 524 } | |
| 525 | |
| 509 void RenderWidgetHostViewAndroid::Destroy() { | 526 void RenderWidgetHostViewAndroid::Destroy() { |
| 510 RemoveLayers(); | 527 ack_callbacks_ = std::queue<base::Closure>(); |
|
no sievers
2013/10/16 23:34:23
Why this?
powei
2013/10/19 00:05:18
Done. Removed.
| |
| 511 content_view_core_ = NULL; | 528 |
| 529 bool check_layers_attached = false; | |
| 530 DetachFromContentViewCore(check_layers_attached); | |
| 512 | 531 |
| 513 // The RenderWidgetHost's destruction led here, so don't call it. | 532 // The RenderWidgetHost's destruction led here, so don't call it. |
| 514 host_ = NULL; | 533 host_ = NULL; |
| 515 | 534 |
| 516 delete this; | 535 delete this; |
| 517 } | 536 } |
| 518 | 537 |
| 519 void RenderWidgetHostViewAndroid::SetTooltipText( | 538 void RenderWidgetHostViewAndroid::SetTooltipText( |
| 520 const string16& tooltip_text) { | 539 const string16& tooltip_text) { |
| 521 // Tooltips don't makes sense on Android. | 540 // Tooltips don't makes sense on Android. |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 692 resource_collection_ = new cc::DelegatedFrameResourceCollection; | 711 resource_collection_ = new cc::DelegatedFrameResourceCollection; |
| 693 resource_collection_->SetClient(this); | 712 resource_collection_->SetClient(this); |
| 694 } | 713 } |
| 695 if (!frame_provider_ || | 714 if (!frame_provider_ || |
| 696 texture_size_in_layer_ != frame_provider_->frame_size()) { | 715 texture_size_in_layer_ != frame_provider_->frame_size()) { |
| 697 if (are_layers_attached_) | 716 if (are_layers_attached_) |
| 698 RemoveLayers(); | 717 RemoveLayers(); |
| 699 frame_provider_ = new cc::DelegatedFrameProvider( | 718 frame_provider_ = new cc::DelegatedFrameProvider( |
| 700 resource_collection_.get(), frame_data.Pass()); | 719 resource_collection_.get(), frame_data.Pass()); |
| 701 delegated_renderer_layer_ = | 720 delegated_renderer_layer_ = |
| 702 cc::DelegatedRendererLayer::Create(this, frame_provider_); | 721 cc::DelegatedRendererLayer::Create(NULL, frame_provider_); |
| 703 layer_ = delegated_renderer_layer_; | 722 layer_ = delegated_renderer_layer_; |
| 704 if (are_layers_attached_) | 723 if (are_layers_attached_) |
| 705 AttachLayers(); | 724 AttachLayers(); |
| 706 } else { | 725 } else { |
| 707 frame_provider_->SetFrameData(frame_data.Pass()); | 726 frame_provider_->SetFrameData(frame_data.Pass()); |
| 708 } | 727 } |
| 709 } | 728 } |
| 710 | 729 |
| 711 if (delegated_renderer_layer_.get()) { | 730 if (delegated_renderer_layer_.get()) { |
| 712 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); | 731 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 854 ImageTransportFactoryAndroid* factory = | 873 ImageTransportFactoryAndroid* factory = |
| 855 ImageTransportFactoryAndroid::GetInstance(); | 874 ImageTransportFactoryAndroid::GetInstance(); |
| 856 | 875 |
| 857 // TODO(sievers): When running the impl thread in the browser we | 876 // TODO(sievers): When running the impl thread in the browser we |
| 858 // need to delay the ACK until after commit and use more than a single | 877 // need to delay the ACK until after commit and use more than a single |
| 859 // texture. | 878 // texture. |
| 860 DCHECK(!CompositorImpl::IsThreadingEnabled()); | 879 DCHECK(!CompositorImpl::IsThreadingEnabled()); |
| 861 | 880 |
| 862 if (!texture_id_in_layer_) { | 881 if (!texture_id_in_layer_) { |
| 863 texture_id_in_layer_ = factory->CreateTexture(); | 882 texture_id_in_layer_ = factory->CreateTexture(); |
| 883 texture_layer_->SetTextureId(texture_id_in_layer_); | |
| 864 texture_layer_->SetIsDrawable(true); | 884 texture_layer_->SetIsDrawable(true); |
| 865 texture_layer_->SetContentsOpaque(true); | 885 texture_layer_->SetContentsOpaque(true); |
| 866 } | 886 } |
| 867 | 887 |
| 868 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture( | 888 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture( |
| 869 texture_id_in_layer_, mailbox.name); | 889 texture_id_in_layer_, mailbox.name); |
| 870 | 890 |
| 871 ResetClipping(); | 891 ResetClipping(); |
| 872 | 892 |
| 873 current_mailbox_ = mailbox; | 893 current_mailbox_ = mailbox; |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1228 return; | 1248 return; |
| 1229 | 1249 |
| 1230 overscroll_effect_->OnOverscrolled(base::TimeTicks::Now(), | 1250 overscroll_effect_->OnOverscrolled(base::TimeTicks::Now(), |
| 1231 accumulated_overscroll, | 1251 accumulated_overscroll, |
| 1232 current_fling_velocity); | 1252 current_fling_velocity); |
| 1233 ScheduleAnimationIfNecessary(); | 1253 ScheduleAnimationIfNecessary(); |
| 1234 } | 1254 } |
| 1235 | 1255 |
| 1236 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1256 void RenderWidgetHostViewAndroid::SetContentViewCore( |
| 1237 ContentViewCoreImpl* content_view_core) { | 1257 ContentViewCoreImpl* content_view_core) { |
| 1238 RunAckCallbacks(); | 1258 if (content_view_core != content_view_core_) { |
| 1239 | 1259 bool check_layers_attached = true; |
| 1240 if (are_layers_attached_) | 1260 DetachFromContentViewCore(check_layers_attached); |
| 1241 RemoveLayers(); | 1261 } |
| 1242 | 1262 |
| 1243 content_view_core_ = content_view_core; | 1263 content_view_core_ = content_view_core; |
| 1244 | 1264 |
| 1265 if (content_view_core_) { | |
| 1266 Compositor* compositor = content_view_core_->GetCompositor(); | |
| 1267 if (compositor && !compositor->HasObserver(this)) { | |
| 1268 compositor->AddObserver(this); | |
| 1269 } | |
| 1270 } | |
| 1271 | |
| 1245 if (are_layers_attached_) | 1272 if (are_layers_attached_) |
| 1246 AttachLayers(); | 1273 AttachLayers(); |
| 1247 } | 1274 } |
| 1248 | 1275 |
| 1249 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1276 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
| 1250 while (!ack_callbacks_.empty()) { | 1277 while (!ack_callbacks_.empty()) { |
| 1251 ack_callbacks_.front().Run(); | 1278 ack_callbacks_.front().Run(); |
| 1252 ack_callbacks_.pop(); | 1279 ack_callbacks_.pop(); |
| 1253 } | 1280 } |
| 1254 } | 1281 } |
| 1255 | 1282 |
| 1256 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( | 1283 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( |
| 1257 bool need_touch_events) { | 1284 bool need_touch_events) { |
| 1258 if (content_view_core_) | 1285 if (content_view_core_) |
| 1259 content_view_core_->HasTouchEventHandlers(need_touch_events); | 1286 content_view_core_->HasTouchEventHandlers(need_touch_events); |
| 1260 } | 1287 } |
| 1261 | 1288 |
| 1262 unsigned RenderWidgetHostViewAndroid::PrepareTexture() { | 1289 void RenderWidgetHostViewAndroid::OnCompositingDidCommit( |
| 1263 RunAckCallbacks(); | 1290 Compositor* compositor) { |
| 1264 return texture_id_in_layer_; | |
| 1265 } | |
| 1266 | |
| 1267 void RenderWidgetHostViewAndroid::DidCommitFrameData() { | |
| 1268 RunAckCallbacks(); | 1291 RunAckCallbacks(); |
| 1269 } | 1292 } |
| 1270 | 1293 |
| 1271 WebKit::WebGraphicsContext3D* RenderWidgetHostViewAndroid::Context3d() { | |
| 1272 return ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); | |
| 1273 } | |
| 1274 | |
| 1275 bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( | |
| 1276 cc::TextureMailbox* mailbox, | |
| 1277 scoped_ptr<cc::SingleReleaseCallback>* release_callback, | |
| 1278 bool use_shared_memory) { | |
| 1279 return false; | |
| 1280 } | |
| 1281 | |
| 1282 void RenderWidgetHostViewAndroid::OnLostResources() { | 1294 void RenderWidgetHostViewAndroid::OnLostResources() { |
| 1283 if (texture_layer_.get()) | 1295 if (texture_layer_.get()) |
| 1284 texture_layer_->SetIsDrawable(false); | 1296 texture_layer_->SetIsDrawable(false); |
| 1285 if (delegated_renderer_layer_.get()) | 1297 if (delegated_renderer_layer_.get()) |
| 1286 DestroyDelegatedContent(); | 1298 DestroyDelegatedContent(); |
| 1287 texture_id_in_layer_ = 0; | 1299 texture_id_in_layer_ = 0; |
| 1288 RunAckCallbacks(); | 1300 RunAckCallbacks(); |
| 1289 } | 1301 } |
| 1290 | 1302 |
| 1291 // static | 1303 // static |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1383 // RenderWidgetHostView, public: | 1395 // RenderWidgetHostView, public: |
| 1384 | 1396 |
| 1385 // static | 1397 // static |
| 1386 RenderWidgetHostView* | 1398 RenderWidgetHostView* |
| 1387 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1399 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1388 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1400 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1389 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1401 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1390 } | 1402 } |
| 1391 | 1403 |
| 1392 } // namespace content | 1404 } // namespace content |
| OLD | NEW |