| 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 |