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/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 ContentViewCoreImpl* content_view_core) | 106 ContentViewCoreImpl* content_view_core) |
| 107 : host_(widget_host), | 107 : host_(widget_host), |
| 108 needs_begin_frame_(false), | 108 needs_begin_frame_(false), |
| 109 are_layers_attached_(true), | 109 are_layers_attached_(true), |
| 110 content_view_core_(NULL), | 110 content_view_core_(NULL), |
| 111 ime_adapter_android_(this), | 111 ime_adapter_android_(this), |
| 112 cached_background_color_(SK_ColorWHITE), | 112 cached_background_color_(SK_ColorWHITE), |
| 113 texture_id_in_layer_(0), | 113 texture_id_in_layer_(0), |
| 114 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), | 114 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), |
| 115 weak_ptr_factory_(this), | 115 weak_ptr_factory_(this), |
| 116 overscroll_effect_enabled_(true) { | 116 overscroll_effect_enabled_(true), |
| 117 flush_input_requested_(false) { | |
| 117 if (CompositorImpl::UsesDirectGL()) { | 118 if (CompositorImpl::UsesDirectGL()) { |
| 118 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); | 119 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); |
| 119 layer_ = surface_texture_transport_->Initialize(); | 120 layer_ = surface_texture_transport_->Initialize(); |
| 120 layer_->SetIsDrawable(true); | 121 layer_->SetIsDrawable(true); |
| 121 } else { | 122 } else { |
| 122 if (CommandLine::ForCurrentProcess()->HasSwitch( | 123 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 123 switches::kEnableDelegatedRenderer)) { | 124 switches::kEnableDelegatedRenderer)) { |
| 124 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this); | 125 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this); |
| 125 layer_ = delegated_renderer_layer_; | 126 layer_ = delegated_renderer_layer_; |
| 126 } else { | 127 } else { |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 448 return; | 449 return; |
| 449 | 450 |
| 450 cached_background_color_ = color; | 451 cached_background_color_ = color; |
| 451 if (content_view_core_) | 452 if (content_view_core_) |
| 452 content_view_core_->OnBackgroundColorChanged(color); | 453 content_view_core_->OnBackgroundColorChanged(color); |
| 453 } | 454 } |
| 454 | 455 |
| 455 void RenderWidgetHostViewAndroid::SendBeginFrame( | 456 void RenderWidgetHostViewAndroid::SendBeginFrame( |
| 456 const cc::BeginFrameArgs& args) { | 457 const cc::BeginFrameArgs& args) { |
| 457 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::SendBeginFrame"); | 458 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::SendBeginFrame"); |
| 458 if (host_) | 459 if (!host_) |
| 459 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); | 460 return; |
| 461 | |
| 462 if (flush_input_requested_) { | |
| 463 flush_input_requested_ = false; | |
| 464 host_->FlushInput(); | |
| 465 RemoveBeginFrameSubscriber(); | |
| 466 } | |
| 467 | |
| 468 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); | |
| 460 } | 469 } |
| 461 | 470 |
| 462 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( | 471 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( |
| 463 bool enabled) { | 472 bool enabled) { |
| 464 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame", | 473 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame", |
| 465 "enabled", enabled); | 474 "enabled", enabled); |
| 466 // ContentViewCoreImpl handles multiple subscribers to the BeginFrame, so | 475 // ContentViewCoreImpl handles multiple subscribers to the BeginFrame, so |
| 467 // we have to make sure calls to ContentViewCoreImpl's SetNeedsBeginFrame | 476 // we have to make sure calls to ContentViewCoreImpl's SetNeedsBeginFrame |
| 468 // are balanced, even if RenderWidgetHostViewAndroid's may not be. | 477 // are balanced, even if RenderWidgetHostViewAndroid's may not be. |
| 469 if (content_view_core_ && needs_begin_frame_ != enabled) { | 478 if (content_view_core_ && needs_begin_frame_ != enabled) { |
| 470 content_view_core_->SetNeedsBeginFrame(enabled); | 479 if (enabled) |
| 480 AddBeginFrameSubscriber(); | |
| 481 else | |
| 482 RemoveBeginFrameSubscriber(); | |
| 471 needs_begin_frame_ = enabled; | 483 needs_begin_frame_ = enabled; |
| 472 } | 484 } |
| 473 } | 485 } |
| 474 | 486 |
| 475 void RenderWidgetHostViewAndroid::OnStartContentIntent( | 487 void RenderWidgetHostViewAndroid::OnStartContentIntent( |
| 476 const GURL& content_url) { | 488 const GURL& content_url) { |
| 477 if (content_view_core_) | 489 if (content_view_core_) |
| 478 content_view_core_->StartContentIntent(content_url); | 490 content_view_core_->StartContentIntent(content_url); |
| 479 } | 491 } |
| 480 | 492 |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 827 void RenderWidgetHostViewAndroid::RemoveLayers() { | 839 void RenderWidgetHostViewAndroid::RemoveLayers() { |
| 828 if (!content_view_core_) | 840 if (!content_view_core_) |
| 829 return; | 841 return; |
| 830 | 842 |
| 831 if (overscroll_effect_) | 843 if (overscroll_effect_) |
| 832 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); | 844 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); |
| 833 | 845 |
| 834 content_view_core_->RemoveLayer(layer_); | 846 content_view_core_->RemoveLayer(layer_); |
| 835 } | 847 } |
| 836 | 848 |
| 849 void RenderWidgetHostViewAndroid::AddBeginFrameSubscriber() { | |
| 850 content_view_core_->SetNeedsBeginFrame(true); | |
|
brianderson
2013/09/13 21:49:27
Can you rename ContentViewCore's SetNeedsBeginFram
jdduke (slow)
2013/09/16 15:16:04
Done.
| |
| 851 } | |
| 852 | |
| 853 void RenderWidgetHostViewAndroid::RemoveBeginFrameSubscriber() { | |
| 854 content_view_core_->SetNeedsBeginFrame(false); | |
| 855 } | |
| 856 | |
| 837 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 857 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
| 838 if (!overscroll_effect_) | 858 if (!overscroll_effect_) |
| 839 return false; | 859 return false; |
| 840 return overscroll_effect_->Animate(frame_time); | 860 return overscroll_effect_->Animate(frame_time); |
| 841 } | 861 } |
| 842 | 862 |
| 843 void RenderWidgetHostViewAndroid::CreateOverscrollEffectIfNecessary() { | 863 void RenderWidgetHostViewAndroid::CreateOverscrollEffectIfNecessary() { |
| 844 if (!overscroll_effect_enabled_ || overscroll_effect_) | 864 if (!overscroll_effect_enabled_ || overscroll_effect_) |
| 845 return; | 865 return; |
| 846 | 866 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 959 if (host_) { | 979 if (host_) { |
| 960 SynchronousCompositorImpl* compositor = | 980 SynchronousCompositorImpl* compositor = |
| 961 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), | 981 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), |
| 962 host_->GetRoutingID()); | 982 host_->GetRoutingID()); |
| 963 if (compositor) | 983 if (compositor) |
| 964 return compositor->HandleInputEvent(input_event); | 984 return compositor->HandleInputEvent(input_event); |
| 965 } | 985 } |
| 966 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 986 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 967 } | 987 } |
| 968 | 988 |
| 989 void RenderWidgetHostViewAndroid::OnSetNeedsFlushInput() { | |
| 990 if (flush_input_requested_) | |
| 991 return; | |
| 992 flush_input_requested_ = true; | |
| 993 AddBeginFrameSubscriber(); | |
| 994 } | |
| 995 | |
| 969 void RenderWidgetHostViewAndroid::OnAccessibilityEvents( | 996 void RenderWidgetHostViewAndroid::OnAccessibilityEvents( |
| 970 const std::vector<AccessibilityHostMsg_EventParams>& params) { | 997 const std::vector<AccessibilityHostMsg_EventParams>& params) { |
| 971 if (!host_ || | 998 if (!host_ || |
| 972 host_->accessibility_mode() != AccessibilityModeComplete || | 999 host_->accessibility_mode() != AccessibilityModeComplete || |
| 973 !content_view_core_) { | 1000 !content_view_core_) { |
| 974 return; | 1001 return; |
| 975 } | 1002 } |
| 976 | 1003 |
| 977 if (!GetBrowserAccessibilityManager()) { | 1004 if (!GetBrowserAccessibilityManager()) { |
| 978 SetBrowserAccessibilityManager( | 1005 SetBrowserAccessibilityManager( |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1303 // RenderWidgetHostView, public: | 1330 // RenderWidgetHostView, public: |
| 1304 | 1331 |
| 1305 // static | 1332 // static |
| 1306 RenderWidgetHostView* | 1333 RenderWidgetHostView* |
| 1307 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1334 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1308 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1335 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1309 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1336 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1310 } | 1337 } |
| 1311 | 1338 |
| 1312 } // namespace content | 1339 } // namespace content |
| OLD | NEW |