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

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: rebase Created 7 years 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 27 matching lines...) Expand all
38 #include "content/browser/renderer_host/render_widget_host_impl.h" 38 #include "content/browser/renderer_host/render_widget_host_impl.h"
39 #include "content/common/gpu/client/gl_helper.h" 39 #include "content/common/gpu/client/gl_helper.h"
40 #include "content/common/gpu/gpu_messages.h" 40 #include "content/common/gpu/gpu_messages.h"
41 #include "content/common/input_messages.h" 41 #include "content/common/input_messages.h"
42 #include "content/common/view_messages.h" 42 #include "content/common/view_messages.h"
43 #include "content/public/common/content_switches.h" 43 #include "content/public/common/content_switches.h"
44 #include "gpu/config/gpu_driver_bug_workaround_type.h" 44 #include "gpu/config/gpu_driver_bug_workaround_type.h"
45 #include "skia/ext/image_operations.h" 45 #include "skia/ext/image_operations.h"
46 #include "third_party/khronos/GLES2/gl2.h" 46 #include "third_party/khronos/GLES2/gl2.h"
47 #include "third_party/khronos/GLES2/gl2ext.h" 47 #include "third_party/khronos/GLES2/gl2ext.h"
48 #include "ui/base/android/window_android.h"
48 #include "ui/gfx/android/device_display_info.h" 49 #include "ui/gfx/android/device_display_info.h"
49 #include "ui/gfx/android/java_bitmap.h" 50 #include "ui/gfx/android/java_bitmap.h"
50 #include "ui/gfx/display.h" 51 #include "ui/gfx/display.h"
51 #include "ui/gfx/screen.h" 52 #include "ui/gfx/screen.h"
52 #include "ui/gfx/size_conversions.h" 53 #include "ui/gfx/size_conversions.h"
53 54
54 namespace content { 55 namespace content {
55 56
56 namespace { 57 namespace {
57 58
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 needs_begin_frame_(false), 106 needs_begin_frame_(false),
106 are_layers_attached_(true), 107 are_layers_attached_(true),
107 content_view_core_(NULL), 108 content_view_core_(NULL),
108 ime_adapter_android_(this), 109 ime_adapter_android_(this),
109 cached_background_color_(SK_ColorWHITE), 110 cached_background_color_(SK_ColorWHITE),
110 texture_id_in_layer_(0), 111 texture_id_in_layer_(0),
111 last_output_surface_id_(kUndefinedOutputSurfaceId), 112 last_output_surface_id_(kUndefinedOutputSurfaceId),
112 weak_ptr_factory_(this), 113 weak_ptr_factory_(this),
113 overscroll_effect_enabled_(true), 114 overscroll_effect_enabled_(true),
114 flush_input_requested_(false), 115 flush_input_requested_(false),
115 accelerated_surface_route_id_(0) { 116 accelerated_surface_route_id_(0),
117 using_synchronous_compositor_(SynchronousCompositorImpl::FromID(
118 widget_host->GetProcess()->GetID(),
119 widget_host->GetRoutingID()) != NULL) {
116 if (!UsingDelegatedRenderer()) { 120 if (!UsingDelegatedRenderer()) {
117 texture_layer_ = cc::TextureLayer::Create(this); 121 texture_layer_ = cc::TextureLayer::Create(NULL);
118 layer_ = texture_layer_; 122 layer_ = texture_layer_;
119 } 123 }
120 124
121 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> 125 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()->
122 HasSwitch(switches::kDisableOverscrollEdgeEffect); 126 HasSwitch(switches::kDisableOverscrollEdgeEffect);
123 // Don't block the main thread with effect resource loading. 127 // Don't block the main thread with effect resource loading.
124 // Actual effect creation is deferred until an overscroll event is received. 128 // Actual effect creation is deferred until an overscroll event is received.
125 if (overscroll_effect_enabled_) { 129 if (overscroll_effect_enabled_) {
126 base::WorkerPool::PostTask(FROM_HERE, 130 base::WorkerPool::PostTask(FROM_HERE,
127 base::Bind(&OverscrollGlow::EnsureResources), 131 base::Bind(&OverscrollGlow::EnsureResources),
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 RenderWidgetHost* 187 RenderWidgetHost*
184 RenderWidgetHostViewAndroid::GetRenderWidgetHost() const { 188 RenderWidgetHostViewAndroid::GetRenderWidgetHost() const {
185 return host_; 189 return host_;
186 } 190 }
187 191
188 void RenderWidgetHostViewAndroid::WasShown() { 192 void RenderWidgetHostViewAndroid::WasShown() {
189 if (!host_ || !host_->is_hidden()) 193 if (!host_ || !host_->is_hidden())
190 return; 194 return;
191 195
192 host_->WasShown(); 196 host_->WasShown();
197
198 if (content_view_core_ && !using_synchronous_compositor_)
199 content_view_core_->GetWindowAndroid()->AddObserver(this);
193 } 200 }
194 201
195 void RenderWidgetHostViewAndroid::WasHidden() { 202 void RenderWidgetHostViewAndroid::WasHidden() {
196 RunAckCallbacks(); 203 RunAckCallbacks();
197 204
198 if (!host_ || host_->is_hidden()) 205 if (!host_ || host_->is_hidden())
199 return; 206 return;
200 207
201 // Inform the renderer that we are being hidden so it can reduce its resource 208 // Inform the renderer that we are being hidden so it can reduce its resource
202 // utilization. 209 // utilization.
203 host_->WasHidden(); 210 host_->WasHidden();
211
212 if (content_view_core_ && !using_synchronous_compositor_)
213 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
204 } 214 }
205 215
206 void RenderWidgetHostViewAndroid::WasResized() { 216 void RenderWidgetHostViewAndroid::WasResized() {
207 host_->WasResized(); 217 host_->WasResized();
208 } 218 }
209 219
210 void RenderWidgetHostViewAndroid::SetSize(const gfx::Size& size) { 220 void RenderWidgetHostViewAndroid::SetSize(const gfx::Size& size) {
211 // Ignore the given size as only the Java code has the power to 221 // Ignore the given size as only the Java code has the power to
212 // resize the view on Android. 222 // resize the view on Android.
213 default_size_ = size; 223 default_size_ = size;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 NOTIMPLEMENTED(); 507 NOTIMPLEMENTED();
498 } 508 }
499 509
500 void RenderWidgetHostViewAndroid::RenderProcessGone( 510 void RenderWidgetHostViewAndroid::RenderProcessGone(
501 base::TerminationStatus status, int error_code) { 511 base::TerminationStatus status, int error_code) {
502 Destroy(); 512 Destroy();
503 } 513 }
504 514
505 void RenderWidgetHostViewAndroid::Destroy() { 515 void RenderWidgetHostViewAndroid::Destroy() {
506 RemoveLayers(); 516 RemoveLayers();
507 content_view_core_ = NULL; 517 SetContentViewCore(NULL);
508 518
509 // The RenderWidgetHost's destruction led here, so don't call it. 519 // The RenderWidgetHost's destruction led here, so don't call it.
510 host_ = NULL; 520 host_ = NULL;
511 521
512 delete this; 522 delete this;
513 } 523 }
514 524
515 void RenderWidgetHostViewAndroid::SetTooltipText( 525 void RenderWidgetHostViewAndroid::SetTooltipText(
516 const string16& tooltip_text) { 526 const string16& tooltip_text) {
517 // Tooltips don't makes sense on Android. 527 // Tooltips don't makes sense on Android.
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 resource_collection_ = new cc::DelegatedFrameResourceCollection; 685 resource_collection_ = new cc::DelegatedFrameResourceCollection;
676 resource_collection_->SetClient(this); 686 resource_collection_->SetClient(this);
677 } 687 }
678 if (!frame_provider_ || 688 if (!frame_provider_ ||
679 texture_size_in_layer_ != frame_provider_->frame_size()) { 689 texture_size_in_layer_ != frame_provider_->frame_size()) {
680 if (are_layers_attached_) 690 if (are_layers_attached_)
681 RemoveLayers(); 691 RemoveLayers();
682 frame_provider_ = new cc::DelegatedFrameProvider( 692 frame_provider_ = new cc::DelegatedFrameProvider(
683 resource_collection_.get(), frame_data.Pass()); 693 resource_collection_.get(), frame_data.Pass());
684 delegated_renderer_layer_ = 694 delegated_renderer_layer_ =
685 cc::DelegatedRendererLayer::Create(this, frame_provider_); 695 cc::DelegatedRendererLayer::Create(NULL, frame_provider_);
686 layer_ = delegated_renderer_layer_; 696 layer_ = delegated_renderer_layer_;
687 if (are_layers_attached_) 697 if (are_layers_attached_)
688 AttachLayers(); 698 AttachLayers();
689 } else { 699 } else {
690 frame_provider_->SetFrameData(frame_data.Pass()); 700 frame_provider_->SetFrameData(frame_data.Pass());
691 } 701 }
692 } 702 }
693 703
694 if (delegated_renderer_layer_.get()) { 704 if (delegated_renderer_layer_.get()) {
695 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); 705 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_);
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 823
814 void RenderWidgetHostViewAndroid::BuffersSwapped( 824 void RenderWidgetHostViewAndroid::BuffersSwapped(
815 const gpu::Mailbox& mailbox, 825 const gpu::Mailbox& mailbox,
816 uint32_t output_surface_id, 826 uint32_t output_surface_id,
817 const base::Closure& ack_callback) { 827 const base::Closure& ack_callback) {
818 ImageTransportFactoryAndroid* factory = 828 ImageTransportFactoryAndroid* factory =
819 ImageTransportFactoryAndroid::GetInstance(); 829 ImageTransportFactoryAndroid::GetInstance();
820 830
821 if (!texture_id_in_layer_) { 831 if (!texture_id_in_layer_) {
822 texture_id_in_layer_ = factory->CreateTexture(); 832 texture_id_in_layer_ = factory->CreateTexture();
833 texture_layer_->SetTextureId(texture_id_in_layer_);
823 texture_layer_->SetIsDrawable(true); 834 texture_layer_->SetIsDrawable(true);
824 texture_layer_->SetContentsOpaque(true); 835 texture_layer_->SetContentsOpaque(true);
825 } 836 }
826 837
827 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture( 838 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture(
828 texture_id_in_layer_, mailbox.name); 839 texture_id_in_layer_, mailbox.name);
829 840
830 ResetClipping(); 841 ResetClipping();
831 842
832 current_mailbox_ = mailbox; 843 current_mailbox_ = mailbox;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 ScheduleAnimationIfNecessary(); 1222 ScheduleAnimationIfNecessary();
1212 } 1223 }
1213 1224
1214 void RenderWidgetHostViewAndroid::SetContentViewCore( 1225 void RenderWidgetHostViewAndroid::SetContentViewCore(
1215 ContentViewCoreImpl* content_view_core) { 1226 ContentViewCoreImpl* content_view_core) {
1216 RunAckCallbacks(); 1227 RunAckCallbacks();
1217 1228
1218 if (are_layers_attached_) 1229 if (are_layers_attached_)
1219 RemoveLayers(); 1230 RemoveLayers();
1220 1231
1232 if (content_view_core_ && !using_synchronous_compositor_)
1233 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1234
1221 content_view_core_ = content_view_core; 1235 content_view_core_ = content_view_core;
1222 1236
1223 if (GetBrowserAccessibilityManager()) { 1237 if (GetBrowserAccessibilityManager()) {
1224 base::android::ScopedJavaLocalRef<jobject> obj; 1238 base::android::ScopedJavaLocalRef<jobject> obj;
1225 if (content_view_core_) 1239 if (content_view_core_)
1226 obj = content_view_core_->GetJavaObject(); 1240 obj = content_view_core_->GetJavaObject();
1227 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1241 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1228 SetContentViewCore(obj); 1242 SetContentViewCore(obj);
1229 } 1243 }
1230 1244
1231 if (are_layers_attached_) 1245 if (are_layers_attached_) {
1232 AttachLayers(); 1246 AttachLayers();
1247 if (content_view_core_ && !using_synchronous_compositor_)
1248 content_view_core_->GetWindowAndroid()->AddObserver(this);
1249 }
1233 } 1250 }
1234 1251
1235 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1252 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1236 while (!ack_callbacks_.empty()) { 1253 while (!ack_callbacks_.empty()) {
1237 ack_callbacks_.front().Run(); 1254 ack_callbacks_.front().Run();
1238 ack_callbacks_.pop(); 1255 ack_callbacks_.pop();
1239 } 1256 }
1240 } 1257 }
1241 1258
1242 void RenderWidgetHostViewAndroid::HasTouchEventHandlers( 1259 void RenderWidgetHostViewAndroid::HasTouchEventHandlers(
1243 bool need_touch_events) { 1260 bool need_touch_events) {
1244 if (content_view_core_) 1261 if (content_view_core_)
1245 content_view_core_->HasTouchEventHandlers(need_touch_events); 1262 content_view_core_->HasTouchEventHandlers(need_touch_events);
1246 } 1263 }
1247 1264
1248 unsigned RenderWidgetHostViewAndroid::PrepareTexture() { 1265 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
1249 RunAckCallbacks();
1250 return texture_id_in_layer_;
1251 }
1252
1253 void RenderWidgetHostViewAndroid::DidCommitFrameData() {
1254 RunAckCallbacks(); 1266 RunAckCallbacks();
1255 } 1267 }
1256 1268
1257 bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( 1269 void RenderWidgetHostViewAndroid::OnDetachCompositor() {
1258 cc::TextureMailbox* mailbox, 1270 DCHECK(content_view_core_);
1259 scoped_ptr<cc::SingleReleaseCallback>* release_callback, 1271 DCHECK(!using_synchronous_compositor_);
1260 bool use_shared_memory) { 1272 RunAckCallbacks();
1261 return false;
1262 } 1273 }
1263 1274
1264 void RenderWidgetHostViewAndroid::OnLostResources() { 1275 void RenderWidgetHostViewAndroid::OnLostResources() {
1265 if (texture_layer_.get()) 1276 if (texture_layer_.get())
1266 texture_layer_->SetIsDrawable(false); 1277 texture_layer_->SetIsDrawable(false);
1267 if (delegated_renderer_layer_.get()) 1278 if (delegated_renderer_layer_.get())
1268 DestroyDelegatedContent(); 1279 DestroyDelegatedContent();
1269 texture_id_in_layer_ = 0; 1280 texture_id_in_layer_ = 0;
1270 RunAckCallbacks(); 1281 RunAckCallbacks();
1271 } 1282 }
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 // RenderWidgetHostView, public: 1376 // RenderWidgetHostView, public:
1366 1377
1367 // static 1378 // static
1368 RenderWidgetHostView* 1379 RenderWidgetHostView*
1369 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1380 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1370 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1381 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1371 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1382 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1372 } 1383 }
1373 1384
1374 } // namespace content 1385 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698