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

Side by Side Diff: cc/tile_manager.cc

Issue 11421171: cc: Add experimental --num-raster-threads option. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years 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
« no previous file with comments | « cc/switches.cc ('k') | content/browser/renderer_host/render_process_host_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/tile_manager.h" 5 #include "cc/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 11 #include "base/debug/trace_event.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/string_number_conversions.h"
12 #include "base/threading/sequenced_worker_pool.h" 14 #include "base/threading/sequenced_worker_pool.h"
13 #include "cc/platform_color.h" 15 #include "cc/platform_color.h"
14 #include "cc/rendering_stats.h" 16 #include "cc/rendering_stats.h"
15 #include "cc/resource_pool.h" 17 #include "cc/resource_pool.h"
18 #include "cc/switches.h"
16 #include "cc/tile.h" 19 #include "cc/tile.h"
17 #include "third_party/skia/include/core/SkDevice.h" 20 #include "third_party/skia/include/core/SkDevice.h"
18 21
19 namespace { 22 namespace {
20 23
21 void RasterizeTile(cc::PicturePileImpl* picture_pile, 24 void RasterizeTile(cc::PicturePileImpl* picture_pile,
22 uint8_t* mapped_buffer, 25 uint8_t* mapped_buffer,
23 const gfx::Rect& rect, 26 const gfx::Rect& rect,
24 cc::RenderingStats* stats) { 27 cc::RenderingStats* stats) {
25 TRACE_EVENT0("cc", "RasterizeTile"); 28 TRACE_EVENT0("cc", "RasterizeTile");
26 DCHECK(mapped_buffer); 29 DCHECK(mapped_buffer);
27 DCHECK(picture_pile); 30 DCHECK(picture_pile);
28 SkBitmap bitmap; 31 SkBitmap bitmap;
29 bitmap.setConfig(SkBitmap::kARGB_8888_Config, rect.width(), rect.height()); 32 bitmap.setConfig(SkBitmap::kARGB_8888_Config, rect.width(), rect.height());
30 bitmap.setPixels(mapped_buffer); 33 bitmap.setPixels(mapped_buffer);
31 SkDevice device(bitmap); 34 SkDevice device(bitmap);
32 SkCanvas canvas(&device); 35 SkCanvas canvas(&device);
33 picture_pile->Raster(&canvas, rect, stats); 36 picture_pile->Raster(&canvas, rect, stats);
34 } 37 }
35 38
36 const int kMaxRasterThreads = 1; 39 const int kMaxRasterThreads = 64;
40 const int kDefaultNumberOfRasterThreads = 1;
37 41
38 const char* kRasterThreadNamePrefix = "CompositorRaster"; 42 const char* kRasterThreadNamePrefix = "CompositorRaster";
39 43
40 // Allow two pending raster tasks per thread. This keeps resource usage 44 // Allow two pending raster tasks per thread. This keeps resource usage
41 // low while making sure raster threads aren't unnecessarily idle. 45 // low while making sure raster threads aren't unnecessarily idle.
42 const int kNumPendingRasterTasksPerThread = 2; 46 const int kNumPendingRasterTasksPerThread = 2;
43 47
44 } // namespace 48 } // namespace
45 49
46 namespace cc { 50 namespace cc {
(...skipping 10 matching lines...) Expand all
57 DCHECK(!resource_id); 61 DCHECK(!resource_id);
58 DCHECK(!resource_id_is_being_initialized); 62 DCHECK(!resource_id_is_being_initialized);
59 } 63 }
60 64
61 TileManager::TileManager( 65 TileManager::TileManager(
62 TileManagerClient* client, ResourceProvider* resource_provider) 66 TileManagerClient* client, ResourceProvider* resource_provider)
63 : client_(client), 67 : client_(client),
64 resource_pool_(ResourcePool::Create(resource_provider, 68 resource_pool_(ResourcePool::Create(resource_provider,
65 Renderer::ImplPool)), 69 Renderer::ImplPool)),
66 manage_tiles_pending_(false), 70 manage_tiles_pending_(false),
67 pending_raster_tasks_(0), 71 pending_raster_tasks_(0) {
68 worker_pool_(new base::SequencedWorkerPool(kMaxRasterThreads, 72 size_t worker_threads = kDefaultNumberOfRasterThreads;
69 kRasterThreadNamePrefix)) { 73 if (CommandLine::ForCurrentProcess()->HasSwitch(
enne (OOO) 2012/12/03 17:47:42 Given that ubercompositor may want to set properti
74 cc::switches::kNumRasterThreads)) {
75 std::string num_raster_threads =
76 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
77 cc::switches::kNumRasterThreads);
78 int num_threads;
79 if (base::StringToInt(num_raster_threads, &num_threads) &&
80 num_threads > 0 && num_threads <= kMaxRasterThreads) {
81 worker_threads = num_threads;
82 } else {
83 LOG(WARNING) << "Bad number of raster threads: " << num_raster_threads;
84 }
85 }
86 worker_pool_ = new base::SequencedWorkerPool(worker_threads,
87 kRasterThreadNamePrefix);
70 } 88 }
71 89
72 TileManager::~TileManager() { 90 TileManager::~TileManager() {
73 // Reset global state and manage. This should cause 91 // Reset global state and manage. This should cause
74 // our memory usage to drop to zero. 92 // our memory usage to drop to zero.
75 global_state_ = GlobalStateThatImpactsTilePriority(); 93 global_state_ = GlobalStateThatImpactsTilePriority();
76 ManageTiles(); 94 ManageTiles();
77 DCHECK(tiles_.size() == 0); 95 DCHECK(tiles_.size() == 0);
78 // This should finish all pending raster tasks and release any 96 // This should finish all pending raster tasks and release any
79 // uninitialized resources. 97 // uninitialized resources.
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 Tile* tile, ResourceProvider::ResourceId resource_id) { 399 Tile* tile, ResourceProvider::ResourceId resource_id) {
382 ManagedTileState& managed_tile_state = tile->managed_state(); 400 ManagedTileState& managed_tile_state = tile->managed_state();
383 DCHECK(!managed_tile_state.resource_id); 401 DCHECK(!managed_tile_state.resource_id);
384 managed_tile_state.resource_id = resource_id; 402 managed_tile_state.resource_id = resource_id;
385 managed_tile_state.resource_id_is_being_initialized = false; 403 managed_tile_state.resource_id_is_being_initialized = false;
386 // TODO(qinmin): Make this conditional on managed_tile_state.bin == NOW_BIN. 404 // TODO(qinmin): Make this conditional on managed_tile_state.bin == NOW_BIN.
387 client_->ScheduleRedraw(); 405 client_->ScheduleRedraw();
388 } 406 }
389 407
390 } 408 }
OLDNEW
« no previous file with comments | « cc/switches.cc ('k') | content/browser/renderer_host/render_process_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698