Commit 876e9e87 authored by reveman@chromium.org's avatar reveman@chromium.org

cc: Move --num-raster-threads setting to LayerTreeSettings.

BUG=154637


Review URL: https://chromiumcodereview.appspot.com/11316333

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171032 0039d316-1c4b-4281-b951-d872f2087c98
parent 688119f6
......@@ -7,6 +7,7 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/message_loop.h"
#include "base/string_number_conversions.h"
#include "cc/font_atlas.h"
#include "cc/graphics_context.h"
#include "cc/heads_up_display_layer.h"
......@@ -105,6 +106,7 @@ LayerTreeSettings::LayerTreeSettings()
, showOverdrawInTracing(false)
, refreshRate(0)
, maxPartialTextureUpdates(std::numeric_limits<size_t>::max())
, numRasterThreads(1)
, defaultTileSize(gfx::Size(256, 256))
, maxUntiledLayerSize(gfx::Size(512, 512))
, minimumOcclusionTrackingSize(gfx::Size(160, 160))
......@@ -121,6 +123,22 @@ LayerTreeSettings::LayerTreeSettings()
initialDebugState.showReplicaScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects);
initialDebugState.showOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowOccludingRects);
initialDebugState.showNonOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowNonOccludingRects);
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kNumRasterThreads)) {
const size_t kMaxRasterThreads = 64;
std::string num_raster_threads =
CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kNumRasterThreads);
int num_threads;
if (base::StringToInt(num_raster_threads, &num_threads) &&
num_threads > 0 && num_threads <= kMaxRasterThreads) {
numRasterThreads = num_threads;
} else {
LOG(WARNING) << "Bad number of raster threads: " <<
num_raster_threads;
}
}
}
LayerTreeSettings::~LayerTreeSettings()
......
......@@ -88,6 +88,7 @@ struct CC_EXPORT LayerTreeSettings {
bool showOverdrawInTracing;
double refreshRate;
size_t maxPartialTextureUpdates;
size_t numRasterThreads;
gfx::Size defaultTileSize;
gfx::Size maxUntiledLayerSize;
gfx::Size minimumOcclusionTrackingSize;
......
......@@ -1006,7 +1006,7 @@ bool LayerTreeHostImpl::initializeRenderer(scoped_ptr<GraphicsContext> context)
return false;
if (m_settings.implSidePainting)
m_tileManager.reset(new TileManager(this, resourceProvider.get()));
m_tileManager.reset(new TileManager(this, resourceProvider.get(), m_settings.numRasterThreads));
if (context->context3D())
m_renderer = GLRenderer::create(this, resourceProvider.get());
......
......@@ -7,7 +7,7 @@
namespace cc {
FakePictureLayerTilingClient::FakePictureLayerTilingClient()
: tile_manager_(&tile_manager_client_, NULL),
: tile_manager_(&tile_manager_client_, NULL, 1),
pile_(PicturePileImpl::Create()) {
}
......
......@@ -10,7 +10,6 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/logging.h"
#include "base/string_number_conversions.h"
#include "base/threading/sequenced_worker_pool.h"
#include "cc/platform_color.h"
#include "cc/rendering_stats.h"
......@@ -36,9 +35,6 @@ void RasterizeTile(cc::PicturePileImpl* picture_pile,
picture_pile->Raster(&canvas, rect, stats);
}
const int kMaxRasterThreads = 64;
const int kDefaultNumberOfRasterThreads = 1;
const char* kRasterThreadNamePrefix = "CompositorRaster";
// Allow two pending raster tasks per thread. This keeps resource usage
......@@ -63,28 +59,17 @@ ManagedTileState::~ManagedTileState() {
}
TileManager::TileManager(
TileManagerClient* client, ResourceProvider* resource_provider)
TileManagerClient* client,
ResourceProvider* resource_provider,
size_t num_raster_threads)
: client_(client),
resource_pool_(ResourcePool::Create(resource_provider,
Renderer::ImplPool)),
manage_tiles_pending_(false),
pending_raster_tasks_(0) {
size_t worker_threads = kDefaultNumberOfRasterThreads;
if (CommandLine::ForCurrentProcess()->HasSwitch(
cc::switches::kNumRasterThreads)) {
std::string num_raster_threads =
CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
cc::switches::kNumRasterThreads);
int num_threads;
if (base::StringToInt(num_raster_threads, &num_threads) &&
num_threads > 0 && num_threads <= kMaxRasterThreads) {
worker_threads = num_threads;
} else {
LOG(WARNING) << "Bad number of raster threads: " << num_raster_threads;
}
}
worker_pool_ = new base::SequencedWorkerPool(worker_threads,
kRasterThreadNamePrefix);
pending_raster_tasks_(0),
num_raster_threads_(num_raster_threads),
worker_pool_(new base::SequencedWorkerPool(num_raster_threads,
kRasterThreadNamePrefix)) {
}
TileManager::~TileManager() {
......@@ -302,7 +287,7 @@ void TileManager::FreeResourcesForTile(Tile* tile) {
void TileManager::DispatchMoreRasterTasks() {
while (!tiles_that_need_to_be_rasterized_.empty()) {
int max_pending_tasks = kNumPendingRasterTasksPerThread *
kMaxRasterThreads;
num_raster_threads_;
// Stop dispatching raster tasks when too many are pending.
if (pending_raster_tasks_ >= max_pending_tasks)
......
......@@ -68,7 +68,9 @@ class CC_EXPORT ManagedTileState {
// created, and unregister from the manager when they are deleted.
class CC_EXPORT TileManager {
public:
TileManager(TileManagerClient* client, ResourceProvider *resource_provider);
TileManager(TileManagerClient* client,
ResourceProvider *resource_provider,
size_t num_raster_threads);
virtual ~TileManager();
const GlobalStateThatImpactsTilePriority& GlobalState() const { return global_state_; }
......@@ -102,6 +104,7 @@ class CC_EXPORT TileManager {
scoped_ptr<ResourcePool> resource_pool_;
bool manage_tiles_pending_;
int pending_raster_tasks_;
size_t num_raster_threads_;
scoped_refptr<base::SequencedWorkerPool> worker_pool_;
GlobalStateThatImpactsTilePriority global_state_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment