Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 170783014: android: Expose content locks in RenderWidgetHostViewAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698