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

Side by Side Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 22900018: cc: Set the mapped memory reclaim limit for the renderer compositor on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add comment Created 7 years, 4 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/renderer/gpu/render_widget_compositor.h" 5 #include "content/renderer/gpu/render_widget_compositor.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 9
10 #if defined(OS_ANDROID)
11 #include "base/android/sys_utils.h"
12 #endif
13
10 #include "base/command_line.h" 14 #include "base/command_line.h"
11 #include "base/logging.h" 15 #include "base/logging.h"
12 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
13 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
14 #include "base/time/time.h" 18 #include "base/time/time.h"
15 #include "cc/base/switches.h" 19 #include "cc/base/switches.h"
16 #include "cc/debug/layer_tree_debug_state.h" 20 #include "cc/debug/layer_tree_debug_state.h"
17 #include "cc/layers/layer.h" 21 #include "cc/layers/layer.h"
18 #include "cc/trees/layer_tree_host.h" 22 #include "cc/trees/layer_tree_host.h"
19 #include "content/common/gpu/client/context_provider_command_buffer.h" 23 #include "content/common/gpu/client/context_provider_command_buffer.h"
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 widget->UsingSynchronousRendererCompositor(); 283 widget->UsingSynchronousRendererCompositor();
280 #elif !defined(OS_MACOSX) 284 #elif !defined(OS_MACOSX)
281 if (cmd->HasSwitch(switches::kEnableOverlayScrollbars)) { 285 if (cmd->HasSwitch(switches::kEnableOverlayScrollbars)) {
282 settings.use_linear_fade_scrollbar_animator = true; 286 settings.use_linear_fade_scrollbar_animator = true;
283 settings.solid_color_scrollbars = true; 287 settings.solid_color_scrollbars = true;
284 settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 288 settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128);
285 settings.solid_color_scrollbar_thickness_dip = 3; 289 settings.solid_color_scrollbar_thickness_dip = 3;
286 } 290 }
287 #endif 291 #endif
288 292
293 // If we raster too fast we become upload bound, and pending
294 // uploads consume memory. For maximum upload throughput, we would
295 // want to allow for upload_throughput * pipeline_time of pending
296 // uploads, after which we are just wasting memory. Since we don't
297 // know our upload throughput yet, this just caps our memory usage.
298 #if defined(OS_ANDROID)
299 size_t divider = 1;
300 if (base::android::SysUtils::IsLowEndDevice())
301 divider = 3;
302
303 // For reference Nexus10 can upload 1MB in about 2.5ms.
304 const size_t kMaxBytesUploadedPerMs = (2 * 1024 * 1024) / (5 * divider);
305 #else
306 // For reference Chromebook Pixel can upload 1MB in about 0.5ms.
307 const size_t kMaxBytesUploadedPerMs = 1024 * 1024 * 2;
308 #endif
309
310 // Assuming a two frame deep pipeline.
311 const size_t kMsPerFrame = 16;
312 settings.max_bytes_pending_upload = 2 * kMsPerFrame * kMaxBytesUploadedPerMs;
313 compositor->SetMaxBytesPendingUpload(settings.max_bytes_pending_upload);
314
289 if (!compositor->initialize(settings)) 315 if (!compositor->initialize(settings))
290 return scoped_ptr<RenderWidgetCompositor>(); 316 return scoped_ptr<RenderWidgetCompositor>();
291 317
292 return compositor.Pass(); 318 return compositor.Pass();
293 } 319 }
294 320
295 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 321 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget,
296 bool threaded) 322 bool threaded)
297 : threaded_(threaded), 323 : threaded_(threaded),
298 suppress_schedule_composite_(false), 324 suppress_schedule_composite_(false),
299 widget_(widget) { 325 widget_(widget),
326 max_bytes_pending_upload_(0) {
300 } 327 }
301 328
302 RenderWidgetCompositor::~RenderWidgetCompositor() {} 329 RenderWidgetCompositor::~RenderWidgetCompositor() {}
303 330
304 const base::WeakPtr<cc::InputHandler>& 331 const base::WeakPtr<cc::InputHandler>&
305 RenderWidgetCompositor::GetInputHandler() { 332 RenderWidgetCompositor::GetInputHandler() {
306 return layer_tree_host_->GetInputHandler(); 333 return layer_tree_host_->GetInputHandler();
307 } 334 }
308 335
309 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 336 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 widget_->webwidget()->layout(); 572 widget_->webwidget()->layout();
546 } 573 }
547 574
548 void RenderWidgetCompositor::ApplyScrollAndScale(gfx::Vector2d scroll_delta, 575 void RenderWidgetCompositor::ApplyScrollAndScale(gfx::Vector2d scroll_delta,
549 float page_scale) { 576 float page_scale) {
550 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); 577 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
551 } 578 }
552 579
553 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( 580 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface(
554 bool fallback) { 581 bool fallback) {
555 return widget_->CreateOutputSurface(fallback); 582 return widget_->CreateOutputSurface(fallback, max_bytes_pending_upload_);
556 } 583 }
557 584
558 void RenderWidgetCompositor::DidInitializeOutputSurface(bool success) { 585 void RenderWidgetCompositor::DidInitializeOutputSurface(bool success) {
559 if (!success) 586 if (!success)
560 widget_->webwidget()->didExitCompositingMode(); 587 widget_->webwidget()->didExitCompositingMode();
561 } 588 }
562 589
563 void RenderWidgetCompositor::WillCommit() { 590 void RenderWidgetCompositor::WillCommit() {
564 widget_->InstrumentWillComposite(); 591 widget_->InstrumentWillComposite();
565 } 592 }
(...skipping 20 matching lines...) Expand all
586 RenderWidgetCompositor::OffscreenContextProviderForMainThread() { 613 RenderWidgetCompositor::OffscreenContextProviderForMainThread() {
587 return RenderThreadImpl::current()->OffscreenContextProviderForMainThread(); 614 return RenderThreadImpl::current()->OffscreenContextProviderForMainThread();
588 } 615 }
589 616
590 scoped_refptr<cc::ContextProvider> 617 scoped_refptr<cc::ContextProvider>
591 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() { 618 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() {
592 return RenderThreadImpl::current()-> 619 return RenderThreadImpl::current()->
593 OffscreenContextProviderForCompositorThread(); 620 OffscreenContextProviderForCompositorThread();
594 } 621 }
595 622
623 void RenderWidgetCompositor::SetMaxBytesPendingUpload(
624 size_t max_bytes_pending_upload) {
625 max_bytes_pending_upload_ = max_bytes_pending_upload;
626 }
627
596 } // namespace content 628 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698