Chromium Code Reviews| 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/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 | 74 |
| 75 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 75 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
| 76 RenderWidgetHostImpl* widget_host, | 76 RenderWidgetHostImpl* widget_host, |
| 77 ContentViewCoreImpl* content_view_core) | 77 ContentViewCoreImpl* content_view_core) |
| 78 : host_(widget_host), | 78 : host_(widget_host), |
| 79 are_layers_attached_(true), | 79 are_layers_attached_(true), |
| 80 content_view_core_(NULL), | 80 content_view_core_(NULL), |
| 81 ime_adapter_android_(this), | 81 ime_adapter_android_(this), |
| 82 cached_background_color_(SK_ColorWHITE), | 82 cached_background_color_(SK_ColorWHITE), |
| 83 texture_id_in_layer_(0), | 83 texture_id_in_layer_(0), |
| 84 weak_ptr_factory_(this) { | 84 weak_ptr_factory_(this), |
| 85 begin_frame_pending_(false) { | |
| 85 if (CompositorImpl::UsesDirectGL()) { | 86 if (CompositorImpl::UsesDirectGL()) { |
| 86 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); | 87 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); |
| 87 layer_ = surface_texture_transport_->Initialize(); | 88 layer_ = surface_texture_transport_->Initialize(); |
| 88 layer_->SetIsDrawable(true); | 89 layer_->SetIsDrawable(true); |
| 89 } else { | 90 } else { |
| 90 if (CommandLine::ForCurrentProcess()->HasSwitch( | 91 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 91 switches::kEnableDelegatedRenderer)) { | 92 switches::kEnableDelegatedRenderer)) { |
| 92 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this); | 93 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this); |
| 93 layer_ = delegated_renderer_layer_; | 94 layer_ = delegated_renderer_layer_; |
| 94 } else { | 95 } else { |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 402 if (cached_background_color_ == color) | 403 if (cached_background_color_ == color) |
| 403 return; | 404 return; |
| 404 | 405 |
| 405 cached_background_color_ = color; | 406 cached_background_color_ = color; |
| 406 if (content_view_core_) | 407 if (content_view_core_) |
| 407 content_view_core_->OnBackgroundColorChanged(color); | 408 content_view_core_->OnBackgroundColorChanged(color); |
| 408 } | 409 } |
| 409 | 410 |
| 410 void RenderWidgetHostViewAndroid::SendBeginFrame( | 411 void RenderWidgetHostViewAndroid::SendBeginFrame( |
| 411 base::TimeTicks frame_time) { | 412 base::TimeTicks frame_time) { |
| 412 if (host_) | 413 // Throttle the renderer if we are behind. Also only send another beginFrame |
| 414 // if we received a frame for the last beginFrame. | |
| 415 if (!ack_callbacks_.empty() || begin_frame_pending_) { | |
| 416 if (content_view_core_) | |
| 417 content_view_core_->SetVSyncNotificationEnabled(true); | |
| 418 return; | |
| 419 } | |
| 420 | |
| 421 if (host_) { | |
| 422 begin_frame_pending_ = true; | |
| 413 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), | 423 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), |
| 414 frame_time)); | 424 frame_time)); |
| 425 } | |
| 415 } | 426 } |
| 416 | 427 |
| 417 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( | 428 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( |
| 418 bool enabled) { | 429 bool enabled) { |
|
Sami
2013/06/04 11:24:55
We should probably get rid of |enabled| on this me
| |
| 419 if (content_view_core_) | 430 if (content_view_core_) |
| 420 content_view_core_->SetVSyncNotificationEnabled(enabled); | 431 content_view_core_->SetVSyncNotificationEnabled(enabled); |
| 421 } | 432 } |
| 422 | 433 |
| 423 void RenderWidgetHostViewAndroid::OnStartContentIntent( | 434 void RenderWidgetHostViewAndroid::OnStartContentIntent( |
| 424 const GURL& content_url) { | 435 const GURL& content_url) { |
| 425 if (content_view_core_) | 436 if (content_view_core_) |
| 426 content_view_core_->StartContentIntent(content_url); | 437 content_view_core_->StartContentIntent(content_url); |
| 427 } | 438 } |
| 428 | 439 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 585 offset.Scale(frame->metadata.device_scale_factor); | 596 offset.Scale(frame->metadata.device_scale_factor); |
| 586 content_size_in_layer_ = | 597 content_size_in_layer_ = |
| 587 gfx::Size(texture_size_in_layer_.width() - offset.x(), | 598 gfx::Size(texture_size_in_layer_.width() - offset.x(), |
| 588 texture_size_in_layer_.height() - offset.y()); | 599 texture_size_in_layer_.height() - offset.y()); |
| 589 // Content size changes should be reflected in associated animation effects. | 600 // Content size changes should be reflected in associated animation effects. |
| 590 UpdateAnimationSize(frame); | 601 UpdateAnimationSize(frame); |
| 591 } | 602 } |
| 592 | 603 |
| 593 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame( | 604 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame( |
| 594 scoped_ptr<cc::CompositorFrame> frame) { | 605 scoped_ptr<cc::CompositorFrame> frame) { |
| 606 begin_frame_pending_ = false; | |
| 595 // Always let ContentViewCore know about the new frame first, so it can decide | 607 // Always let ContentViewCore know about the new frame first, so it can decide |
| 596 // to schedule a Draw immediately when it sees the texture layer invalidation. | 608 // to schedule a Draw immediately when it sees the texture layer invalidation. |
| 597 if (content_view_core_) { | 609 if (content_view_core_) { |
| 598 // All offsets and sizes are in CSS pixels. | 610 // All offsets and sizes are in CSS pixels. |
| 599 content_view_core_->UpdateFrameInfo( | 611 content_view_core_->UpdateFrameInfo( |
| 600 frame->metadata.root_scroll_offset, | 612 frame->metadata.root_scroll_offset, |
| 601 frame->metadata.page_scale_factor, | 613 frame->metadata.page_scale_factor, |
| 602 gfx::Vector2dF(frame->metadata.min_page_scale_factor, | 614 gfx::Vector2dF(frame->metadata.min_page_scale_factor, |
| 603 frame->metadata.max_page_scale_factor), | 615 frame->metadata.max_page_scale_factor), |
| 604 frame->metadata.root_layer_size, | 616 frame->metadata.root_layer_size, |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1005 // RenderWidgetHostView, public: | 1017 // RenderWidgetHostView, public: |
| 1006 | 1018 |
| 1007 // static | 1019 // static |
| 1008 RenderWidgetHostView* | 1020 RenderWidgetHostView* |
| 1009 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1021 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1010 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1022 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1011 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1023 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1012 } | 1024 } |
| 1013 | 1025 |
| 1014 } // namespace content | 1026 } // namespace content |
| OLD | NEW |