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

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

Issue 23983036: [Android] Provide synchronized input flush with BeginFrame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Collapse conditionals Created 7 years, 2 months 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
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/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 ContentViewCoreImpl* content_view_core) 107 ContentViewCoreImpl* content_view_core)
108 : host_(widget_host), 108 : host_(widget_host),
109 needs_begin_frame_(false), 109 needs_begin_frame_(false),
110 are_layers_attached_(true), 110 are_layers_attached_(true),
111 content_view_core_(NULL), 111 content_view_core_(NULL),
112 ime_adapter_android_(this), 112 ime_adapter_android_(this),
113 cached_background_color_(SK_ColorWHITE), 113 cached_background_color_(SK_ColorWHITE),
114 texture_id_in_layer_(0), 114 texture_id_in_layer_(0),
115 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), 115 current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId),
116 weak_ptr_factory_(this), 116 weak_ptr_factory_(this),
117 overscroll_effect_enabled_(true) { 117 overscroll_effect_enabled_(true),
118 flush_input_requested_(false) {
118 if (CompositorImpl::UsesDirectGL()) { 119 if (CompositorImpl::UsesDirectGL()) {
119 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); 120 surface_texture_transport_.reset(new SurfaceTextureTransportClient());
120 layer_ = surface_texture_transport_->Initialize(); 121 layer_ = surface_texture_transport_->Initialize();
121 layer_->SetIsDrawable(true); 122 layer_->SetIsDrawable(true);
122 } else { 123 } else {
123 if (CommandLine::ForCurrentProcess()->HasSwitch( 124 if (CommandLine::ForCurrentProcess()->HasSwitch(
124 switches::kEnableDelegatedRenderer)) { 125 switches::kEnableDelegatedRenderer)) {
125 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this); 126 delegated_renderer_layer_ = cc::DelegatedRendererLayer::Create(this);
126 layer_ = delegated_renderer_layer_; 127 layer_ = delegated_renderer_layer_;
127 } else { 128 } else {
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 return; 454 return;
454 455
455 cached_background_color_ = color; 456 cached_background_color_ = color;
456 if (content_view_core_) 457 if (content_view_core_)
457 content_view_core_->OnBackgroundColorChanged(color); 458 content_view_core_->OnBackgroundColorChanged(color);
458 } 459 }
459 460
460 void RenderWidgetHostViewAndroid::SendBeginFrame( 461 void RenderWidgetHostViewAndroid::SendBeginFrame(
461 const cc::BeginFrameArgs& args) { 462 const cc::BeginFrameArgs& args) {
462 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::SendBeginFrame"); 463 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::SendBeginFrame");
463 if (host_) 464 if (!host_)
464 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); 465 return;
466
467 if (flush_input_requested_) {
468 flush_input_requested_ = false;
469 host_->FlushInput();
470 content_view_core_->RemoveBeginFrameSubscriber();
471 }
472
473 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args));
465 } 474 }
466 475
467 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( 476 void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame(
468 bool enabled) { 477 bool enabled) {
469 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame", 478 TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame",
470 "enabled", enabled); 479 "enabled", enabled);
471 // ContentViewCoreImpl handles multiple subscribers to the BeginFrame, so 480 // ContentViewCoreImpl handles multiple subscribers to the BeginFrame, so
472 // we have to make sure calls to ContentViewCoreImpl's SetNeedsBeginFrame 481 // we have to make sure calls to ContentViewCoreImpl's
473 // are balanced, even if RenderWidgetHostViewAndroid's may not be. 482 // {Add,Remove}BeginFrameSubscriber are balanced, even if
483 // RenderWidgetHostViewAndroid's may not be.
474 if (content_view_core_ && needs_begin_frame_ != enabled) { 484 if (content_view_core_ && needs_begin_frame_ != enabled) {
475 content_view_core_->SetNeedsBeginFrame(enabled); 485 if (enabled)
486 content_view_core_->AddBeginFrameSubscriber();
487 else
488 content_view_core_->RemoveBeginFrameSubscriber();
476 needs_begin_frame_ = enabled; 489 needs_begin_frame_ = enabled;
477 } 490 }
478 } 491 }
479 492
480 void RenderWidgetHostViewAndroid::OnStartContentIntent( 493 void RenderWidgetHostViewAndroid::OnStartContentIntent(
481 const GURL& content_url) { 494 const GURL& content_url) {
482 if (content_view_core_) 495 if (content_view_core_)
483 content_view_core_->StartContentIntent(content_url); 496 content_view_core_->StartContentIntent(content_url);
484 } 497 }
485 498
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 if (host_) { 977 if (host_) {
965 SynchronousCompositorImpl* compositor = 978 SynchronousCompositorImpl* compositor =
966 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), 979 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(),
967 host_->GetRoutingID()); 980 host_->GetRoutingID());
968 if (compositor) 981 if (compositor)
969 return compositor->HandleInputEvent(input_event); 982 return compositor->HandleInputEvent(input_event);
970 } 983 }
971 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 984 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
972 } 985 }
973 986
987 void RenderWidgetHostViewAndroid::OnSetNeedsFlushInput() {
988 if (flush_input_requested_ || !content_view_core_)
989 return;
990 flush_input_requested_ = true;
991 content_view_core_->AddBeginFrameSubscriber();
992 }
993
974 void RenderWidgetHostViewAndroid::OnAccessibilityEvents( 994 void RenderWidgetHostViewAndroid::OnAccessibilityEvents(
975 const std::vector<AccessibilityHostMsg_EventParams>& params) { 995 const std::vector<AccessibilityHostMsg_EventParams>& params) {
976 if (!host_ || 996 if (!host_ ||
977 host_->accessibility_mode() != AccessibilityModeComplete || 997 host_->accessibility_mode() != AccessibilityModeComplete ||
978 !content_view_core_) { 998 !content_view_core_) {
979 return; 999 return;
980 } 1000 }
981 1001
982 if (!GetBrowserAccessibilityManager()) { 1002 if (!GetBrowserAccessibilityManager()) {
983 SetBrowserAccessibilityManager( 1003 SetBrowserAccessibilityManager(
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 // RenderWidgetHostView, public: 1331 // RenderWidgetHostView, public:
1312 1332
1313 // static 1333 // static
1314 RenderWidgetHostView* 1334 RenderWidgetHostView*
1315 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1335 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1316 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1336 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1317 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1337 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1318 } 1338 }
1319 1339
1320 } // namespace content 1340 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698