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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 overscroll_effect_enabled_( | 137 overscroll_effect_enabled_( |
138 !CommandLine::ForCurrentProcess()-> | 138 !CommandLine::ForCurrentProcess()-> |
139 HasSwitch(switches::kDisableOverscrollEdgeEffect)), | 139 HasSwitch(switches::kDisableOverscrollEdgeEffect)), |
140 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), | 140 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), |
141 flush_input_requested_(false), | 141 flush_input_requested_(false), |
142 accelerated_surface_route_id_(0), | 142 accelerated_surface_route_id_(0), |
143 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 143 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( |
144 widget_host->GetProcess()->GetID(), | 144 widget_host->GetProcess()->GetID(), |
145 widget_host->GetRoutingID()) != NULL), | 145 widget_host->GetRoutingID()) != NULL), |
146 frame_evictor_(new DelegatedFrameEvictor(this)), | 146 frame_evictor_(new DelegatedFrameEvictor(this)), |
| 147 frame_locked_(false), |
147 using_delegated_renderer_(CommandLine::ForCurrentProcess()->HasSwitch( | 148 using_delegated_renderer_(CommandLine::ForCurrentProcess()->HasSwitch( |
148 switches::kEnableDelegatedRenderer) && | 149 switches::kEnableDelegatedRenderer) && |
149 !CommandLine::ForCurrentProcess()->HasSwitch( | 150 !CommandLine::ForCurrentProcess()->HasSwitch( |
150 switches::kDisableDelegatedRenderer)) { | 151 switches::kDisableDelegatedRenderer)) { |
151 if (!using_delegated_renderer_) { | 152 if (!using_delegated_renderer_) { |
152 texture_layer_ = cc::TextureLayer::Create(NULL); | 153 texture_layer_ = cc::TextureLayer::Create(NULL); |
153 layer_ = texture_layer_; | 154 layer_ = texture_layer_; |
154 } | 155 } |
155 | 156 |
156 host_->SetView(this); | 157 host_->SetView(this); |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 // ContentViewCoreImpl represents the native side of the Java | 405 // ContentViewCoreImpl represents the native side of the Java |
405 // ContentViewCore. It being NULL means that it is not attached | 406 // ContentViewCore. It being NULL means that it is not attached |
406 // to the View system yet, so we treat this RWHVA as hidden. | 407 // to the View system yet, so we treat this RWHVA as hidden. |
407 return is_showing_ && content_view_core_; | 408 return is_showing_ && content_view_core_; |
408 } | 409 } |
409 | 410 |
410 void RenderWidgetHostViewAndroid::LockResources() { | 411 void RenderWidgetHostViewAndroid::LockResources() { |
411 DCHECK(HasValidFrame()); | 412 DCHECK(HasValidFrame()); |
412 DCHECK(host_); | 413 DCHECK(host_); |
413 DCHECK(!host_->is_hidden()); | 414 DCHECK(!host_->is_hidden()); |
| 415 DCHECK(!frame_locked_); |
414 frame_evictor_->LockFrame(); | 416 frame_evictor_->LockFrame(); |
| 417 frame_locked_ = true; |
415 } | 418 } |
416 | 419 |
417 void RenderWidgetHostViewAndroid::UnlockResources() { | 420 void RenderWidgetHostViewAndroid::UnlockResources() { |
418 DCHECK(HasValidFrame()); | 421 DCHECK(HasValidFrame()); |
| 422 DCHECK(frame_locked_); |
| 423 frame_locked_ = false; |
419 frame_evictor_->UnlockFrame(); | 424 frame_evictor_->UnlockFrame(); |
420 } | 425 } |
421 | 426 |
422 gfx::Rect RenderWidgetHostViewAndroid::GetViewBounds() const { | 427 gfx::Rect RenderWidgetHostViewAndroid::GetViewBounds() const { |
423 if (!content_view_core_) | 428 if (!content_view_core_) |
424 return gfx::Rect(default_size_); | 429 return gfx::Rect(default_size_); |
425 | 430 |
426 gfx::Size size = content_view_core_->GetViewportSizeDip(); | 431 gfx::Size size = content_view_core_->GetViewportSizeDip(); |
427 gfx::Size offset = content_view_core_->GetViewportSizeOffsetDip(); | 432 gfx::Size offset = content_view_core_->GetViewportSizeOffsetDip(); |
428 size.Enlarge(-offset.width(), -offset.height()); | 433 size.Enlarge(-offset.width(), -offset.height()); |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 new cc::LatencyInfoSwapPromise(frame->metadata.latency_info[i])); | 847 new cc::LatencyInfoSwapPromise(frame->metadata.latency_info[i])); |
843 layer_->layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); | 848 layer_->layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); |
844 } | 849 } |
845 } | 850 } |
846 | 851 |
847 if (frame->delegated_frame_data) { | 852 if (frame->delegated_frame_data) { |
848 DCHECK(using_delegated_renderer_); | 853 DCHECK(using_delegated_renderer_); |
849 | 854 |
850 DCHECK(frame->delegated_frame_data); | 855 DCHECK(frame->delegated_frame_data); |
851 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); | 856 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
| 857 if (frame_locked_) { |
| 858 base::Closure ack_callback = |
| 859 base::Bind(&RenderWidgetHostViewAndroid::SendDelegatedFrameAck, |
| 860 weak_ptr_factory_.GetWeakPtr(), |
| 861 output_surface_id); |
| 862 |
| 863 if (host_->is_hidden()) |
| 864 ack_callback.Run(); |
| 865 else |
| 866 ack_callbacks_.push(ack_callback); |
| 867 return; |
| 868 } |
852 | 869 |
853 cc::RenderPass* root_pass = | 870 cc::RenderPass* root_pass = |
854 frame->delegated_frame_data->render_pass_list.back(); | 871 frame->delegated_frame_data->render_pass_list.back(); |
855 texture_size_in_layer_ = root_pass->output_rect.size(); | 872 texture_size_in_layer_ = root_pass->output_rect.size(); |
856 ComputeContentsSize(frame->metadata); | 873 ComputeContentsSize(frame->metadata); |
857 | 874 |
858 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); | 875 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
859 frame_evictor_->SwappedFrame(!host_->is_hidden()); | 876 frame_evictor_->SwappedFrame(!host_->is_hidden()); |
860 return; | 877 return; |
861 } | 878 } |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1374 RunAckCallbacks(); | 1391 RunAckCallbacks(); |
1375 } | 1392 } |
1376 | 1393 |
1377 void RenderWidgetHostViewAndroid::OnDetachCompositor() { | 1394 void RenderWidgetHostViewAndroid::OnDetachCompositor() { |
1378 DCHECK(content_view_core_); | 1395 DCHECK(content_view_core_); |
1379 DCHECK(!using_synchronous_compositor_); | 1396 DCHECK(!using_synchronous_compositor_); |
1380 RunAckCallbacks(); | 1397 RunAckCallbacks(); |
1381 } | 1398 } |
1382 | 1399 |
1383 void RenderWidgetHostViewAndroid::OnLostResources() { | 1400 void RenderWidgetHostViewAndroid::OnLostResources() { |
| 1401 if (frame_locked_) |
| 1402 UnlockResources(); |
1384 if (texture_layer_.get()) | 1403 if (texture_layer_.get()) |
1385 texture_layer_->SetIsDrawable(false); | 1404 texture_layer_->SetIsDrawable(false); |
1386 if (delegated_renderer_layer_.get()) | 1405 if (delegated_renderer_layer_.get()) |
1387 DestroyDelegatedContent(); | 1406 DestroyDelegatedContent(); |
1388 texture_id_in_layer_ = 0; | 1407 texture_id_in_layer_ = 0; |
1389 RunAckCallbacks(); | 1408 RunAckCallbacks(); |
1390 } | 1409 } |
1391 | 1410 |
1392 // static | 1411 // static |
1393 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( | 1412 void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1498 // RenderWidgetHostView, public: | 1517 // RenderWidgetHostView, public: |
1499 | 1518 |
1500 // static | 1519 // static |
1501 RenderWidgetHostView* | 1520 RenderWidgetHostView* |
1502 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1521 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
1503 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1522 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
1504 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1523 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
1505 } | 1524 } |
1506 | 1525 |
1507 } // namespace content | 1526 } // namespace content |
OLD | NEW |