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

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

Issue 26753005: Adding compositor callbacks to RenderWidgetHostViewAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change RWHVA to add itself to the compositor as per sievers@ comment Created 7 years, 2 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 12 matching lines...) Expand all
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698