| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |