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

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

Issue 16290002: Android: Throttle BeginFrame messages sent from the browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: only allow one pending beginFrame Created 7 years, 6 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 | 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/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_android.h ('k') | content/renderer/gpu/mailbox_output_surface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698