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

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

Issue 11194042: Implement TextureImageTransportSurface using texture mailbox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | Annotate | Revision Log
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/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 } // namespace 47 } // namespace
48 48
49 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 49 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
50 RenderWidgetHostImpl* widget_host, 50 RenderWidgetHostImpl* widget_host,
51 ContentViewCoreImpl* content_view_core) 51 ContentViewCoreImpl* content_view_core)
52 : host_(widget_host), 52 : host_(widget_host),
53 is_layer_attached_(true), 53 is_layer_attached_(true),
54 content_view_core_(NULL), 54 content_view_core_(NULL),
55 ime_adapter_android_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 55 ime_adapter_android_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
56 cached_background_color_(SK_ColorWHITE), 56 cached_background_color_(SK_ColorWHITE),
57 texture_id_in_layer_(0) { 57 texture_id_in_layer_(0),
58 current_buffer_id_(0) {
58 if (CompositorImpl::UsesDirectGL()) { 59 if (CompositorImpl::UsesDirectGL()) {
59 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); 60 surface_texture_transport_.reset(new SurfaceTextureTransportClient());
60 layer_ = surface_texture_transport_->Initialize(); 61 layer_ = surface_texture_transport_->Initialize();
61 } else { 62 } else {
62 // TODO: Cannot use CompositorImpl::CompositorSupport() in unit tests. 63 // TODO: Cannot use CompositorImpl::CompositorSupport() in unit tests.
63 texture_layer_.reset(WebKit::WebExternalTextureLayer::create()); 64 texture_layer_.reset(WebKit::WebExternalTextureLayer::create());
64 layer_ = texture_layer_->layer(); 65 layer_ = texture_layer_->layer();
65 } 66 }
66 67
67 layer_->setOpaque(true); 68 layer_->setOpaque(true);
68 layer_->setDrawsContent(true); 69 layer_->setDrawsContent(true);
69 70
70 host_->SetView(this); 71 host_->SetView(this);
71 SetContentViewCore(content_view_core); 72 SetContentViewCore(content_view_core);
72 } 73 }
73 74
74 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { 75 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() {
75 SetContentViewCore(NULL); 76 SetContentViewCore(NULL);
76 if (!shared_surface_.is_null()) { 77 if (!shared_surface_.is_null()) {
77 ImageTransportFactoryAndroid::GetInstance()->DestroySharedSurfaceHandle( 78 ImageTransportFactoryAndroid::GetInstance()->DestroySharedSurfaceHandle(
78 shared_surface_); 79 shared_surface_);
79 } 80 }
81 if (texture_id_in_layer_) {
82 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture(
83 texture_id_in_layer_);
84 }
80 } 85 }
81 86
82 void RenderWidgetHostViewAndroid::InitAsChild(gfx::NativeView parent_view) { 87 void RenderWidgetHostViewAndroid::InitAsChild(gfx::NativeView parent_view) {
83 NOTIMPLEMENTED(); 88 NOTIMPLEMENTED();
84 } 89 }
85 90
86 void RenderWidgetHostViewAndroid::InitAsPopup( 91 void RenderWidgetHostViewAndroid::InitAsPopup(
87 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) { 92 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) {
88 NOTIMPLEMENTED(); 93 NOTIMPLEMENTED();
89 } 94 }
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 385
381 content_view_core_->ShowDisambiguationPopup(target_rect, zoomed_bitmap); 386 content_view_core_->ShowDisambiguationPopup(target_rect, zoomed_bitmap);
382 } 387 }
383 388
384 void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() { 389 void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() {
385 } 390 }
386 391
387 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped( 392 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped(
388 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params, 393 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
389 int gpu_host_id) { 394 int gpu_host_id) {
390 texture_layer_->setTextureId(params.surface_handle); 395 ImageTransportFactoryAndroid* factory =
391 DCHECK(texture_layer_->layer() == layer_); 396 ImageTransportFactoryAndroid::GetInstance();
392 layer_->setBounds(params.size); 397
393 texture_id_in_layer_ = params.surface_handle; 398 // TODO(sievers): When running the impl thread in the browser we
399 // need to delay the ACK until after commit and use more than a single
400 // texture.
401 DCHECK(!CompositorImpl::CompositorSupport()->isThreadingEnabled());
402
403 uint64 previous_buffer = current_buffer_id_;
404 if (previous_buffer && texture_id_in_layer_) {
405 DCHECK(id_to_mailbox_.find(previous_buffer) != id_to_mailbox_.end());
406 ImageTransportFactoryAndroid::GetInstance()->ReleaseTexture(
407 texture_id_in_layer_,
408 reinterpret_cast<const signed char*>(
409 id_to_mailbox_[previous_buffer].c_str()));
410 }
411
412 current_buffer_id_ = params.surface_handle;
413 if (!texture_id_in_layer_) {
414 texture_id_in_layer_ = factory->CreateTexture();
415 texture_layer_->setTextureId(texture_id_in_layer_);
416 }
417
418 DCHECK(id_to_mailbox_.find(current_buffer_id_) != id_to_mailbox_.end());
419 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture(
420 texture_id_in_layer_,
421 reinterpret_cast<const signed char*>(
422 id_to_mailbox_[current_buffer_id_].c_str()));
423 texture_layer_->layer()->invalidate();
424 texture_layer_->layer()->setBounds(params.size);
394 texture_size_in_layer_ = params.size; 425 texture_size_in_layer_ = params.size;
395 426
396 // TODO(sievers): When running the impl thread in the browser we
397 // need to delay the ACK until after commit.
398 DCHECK(!CompositorImpl::CompositorSupport()->isThreadingEnabled());
399 uint32 sync_point = 427 uint32 sync_point =
400 ImageTransportFactoryAndroid::GetInstance()->InsertSyncPoint(); 428 ImageTransportFactoryAndroid::GetInstance()->InsertSyncPoint();
401 RenderWidgetHostImpl::AcknowledgeBufferPresent( 429 RenderWidgetHostImpl::AcknowledgeBufferPresent(
402 params.route_id, gpu_host_id, true, sync_point); 430 params.route_id, gpu_host_id, previous_buffer, sync_point);
403 } 431 }
404 432
405 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( 433 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer(
406 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, 434 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params,
407 int gpu_host_id) { 435 int gpu_host_id) {
408 NOTREACHED(); 436 NOTREACHED();
409 } 437 }
410 438
411 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { 439 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() {
412 NOTREACHED(); 440 NOTREACHED();
413 } 441 }
414 442
443 void RenderWidgetHostViewAndroid::AcceleratedSurfaceNew(
444 int32 width_in_pixel, int32 height_in_pixel, uint64 surface_id,
445 const std::string& mailbox_name) {
446 DCHECK(surface_id == 1 || surface_id == 2);
447 id_to_mailbox_[surface_id] = mailbox_name;
448 }
449
450 void RenderWidgetHostViewAndroid::AcceleratedSurfaceRelease(uint64 surface_id) {
451 // This tells us we should free the frontbuffer.
452 if (texture_id_in_layer_) {
453 texture_layer_->setTextureId(0);
454 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture(
455 texture_id_in_layer_);
456 texture_id_in_layer_ = 0;
457 }
458 }
459
415 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface( 460 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface(
416 const gfx::Size& desired_size) { 461 const gfx::Size& desired_size) {
417 NOTREACHED(); 462 NOTREACHED();
418 return false; 463 return false;
419 } 464 }
420 465
421 void RenderWidgetHostViewAndroid::StartContentIntent( 466 void RenderWidgetHostViewAndroid::StartContentIntent(
422 const GURL& content_url) { 467 const GURL& content_url) {
423 if (content_view_core_) 468 if (content_view_core_)
424 content_view_core_->StartContentIntent(content_url); 469 content_view_core_->StartContentIntent(content_url);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 // RenderWidgetHostView, public: 639 // RenderWidgetHostView, public:
595 640
596 // static 641 // static
597 RenderWidgetHostView* 642 RenderWidgetHostView*
598 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 643 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
599 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 644 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
600 return new RenderWidgetHostViewAndroid(rwhi, NULL); 645 return new RenderWidgetHostViewAndroid(rwhi, NULL);
601 } 646 }
602 647
603 } // namespace content 648 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698