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

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

Powered by Google App Engine
This is Rietveld 408576698