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 @@ ...@@ -7,6 +7,7 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/debug/trace_event.h" #include "base/debug/trace_event.h"
#include "base/message_loop.h" #include "base/message_loop.h"
#include "base/string_number_conversions.h"
#include "cc/font_atlas.h" #include "cc/font_atlas.h"
#include "cc/graphics_context.h" #include "cc/graphics_context.h"
#include "cc/heads_up_display_layer.h" #include "cc/heads_up_display_layer.h"
...@@ -105,6 +106,7 @@ LayerTreeSettings::LayerTreeSettings() ...@@ -105,6 +106,7 @@ LayerTreeSettings::LayerTreeSettings()
, showOverdrawInTracing(false) , showOverdrawInTracing(false)
, refreshRate(0) , refreshRate(0)
, maxPartialTextureUpdates(std::numeric_limits<size_t>::max()) , maxPartialTextureUpdates(std::numeric_limits<size_t>::max())
, numRasterThreads(1)
, defaultTileSize(gfx::Size(256, 256)) , defaultTileSize(gfx::Size(256, 256))
, maxUntiledLayerSize(gfx::Size(512, 512)) , maxUntiledLayerSize(gfx::Size(512, 512))
, minimumOcclusionTrackingSize(gfx::Size(160, 160)) , minimumOcclusionTrackingSize(gfx::Size(160, 160))
...@@ -121,6 +123,22 @@ LayerTreeSettings::LayerTreeSettings() ...@@ -121,6 +123,22 @@ LayerTreeSettings::LayerTreeSettings()
initialDebugState.showReplicaScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects); initialDebugState.showReplicaScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects);
initialDebugState.showOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowOccludingRects); initialDebugState.showOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowOccludingRects);
initialDebugState.showNonOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowNonOccludingRects); 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() LayerTreeSettings::~LayerTreeSettings()
......
...@@ -88,6 +88,7 @@ struct CC_EXPORT LayerTreeSettings { ...@@ -88,6 +88,7 @@ struct CC_EXPORT LayerTreeSettings {
bool showOverdrawInTracing; bool showOverdrawInTracing;
double refreshRate; double refreshRate;
size_t maxPartialTextureUpdates; size_t maxPartialTextureUpdates;
size_t numRasterThreads;
gfx::Size defaultTileSize; gfx::Size defaultTileSize;
gfx::Size maxUntiledLayerSize; gfx::Size maxUntiledLayerSize;
gfx::Size minimumOcclusionTrackingSize; gfx::Size minimumOcclusionTrackingSize;
......
...@@ -1006,7 +1006,7 @@ bool LayerTreeHostImpl::initializeRenderer(scoped_ptr<GraphicsContext> context) ...@@ -1006,7 +1006,7 @@ bool LayerTreeHostImpl::initializeRenderer(scoped_ptr<GraphicsContext> context)
return false; return false;
if (m_settings.implSidePainting) 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()) if (context->context3D())
m_renderer = GLRenderer::create(this, resourceProvider.get()); m_renderer = GLRenderer::create(this, resourceProvider.get());
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
namespace cc { namespace cc {
FakePictureLayerTilingClient::FakePictureLayerTilingClient() FakePictureLayerTilingClient::FakePictureLayerTilingClient()
: tile_manager_(&tile_manager_client_, NULL), : tile_manager_(&tile_manager_client_, NULL, 1),
pile_(PicturePileImpl::Create()) { pile_(PicturePileImpl::Create()) {
} }
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/debug/trace_event.h" #include "base/debug/trace_event.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/string_number_conversions.h"
#include "base/threading/sequenced_worker_pool.h" #include "base/threading/sequenced_worker_pool.h"
#include "cc/platform_color.h" #include "cc/platform_color.h"
#include "cc/rendering_stats.h" #include "cc/rendering_stats.h"
...@@ -36,9 +35,6 @@ void RasterizeTile(cc::PicturePileImpl* picture_pile, ...@@ -36,9 +35,6 @@ void RasterizeTile(cc::PicturePileImpl* picture_pile,
picture_pile->Raster(&canvas, rect, stats); picture_pile->Raster(&canvas, rect, stats);
} }
const int kMaxRasterThreads = 64;
const int kDefaultNumberOfRasterThreads = 1;
const char* kRasterThreadNamePrefix = "CompositorRaster"; const char* kRasterThreadNamePrefix = "CompositorRaster";
// Allow two pending raster tasks per thread. This keeps resource usage // Allow two pending raster tasks per thread. This keeps resource usage
...@@ -63,28 +59,17 @@ ManagedTileState::~ManagedTileState() { ...@@ -63,28 +59,17 @@ ManagedTileState::~ManagedTileState() {
} }
TileManager::TileManager( TileManager::TileManager(
TileManagerClient* client, ResourceProvider* resource_provider) TileManagerClient* client,
ResourceProvider* resource_provider,
size_t num_raster_threads)
: client_(client), : client_(client),
resource_pool_(ResourcePool::Create(resource_provider, resource_pool_(ResourcePool::Create(resource_provider,
Renderer::ImplPool)), Renderer::ImplPool)),
manage_tiles_pending_(false), manage_tiles_pending_(false),
pending_raster_tasks_(0) { pending_raster_tasks_(0),
size_t worker_threads = kDefaultNumberOfRasterThreads; num_raster_threads_(num_raster_threads),
if (CommandLine::ForCurrentProcess()->HasSwitch( worker_pool_(new base::SequencedWorkerPool(num_raster_threads,
cc::switches::kNumRasterThreads)) { kRasterThreadNamePrefix)) {
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);
} }
TileManager::~TileManager() { TileManager::~TileManager() {
...@@ -302,7 +287,7 @@ void TileManager::FreeResourcesForTile(Tile* tile) { ...@@ -302,7 +287,7 @@ void TileManager::FreeResourcesForTile(Tile* tile) {
void TileManager::DispatchMoreRasterTasks() { void TileManager::DispatchMoreRasterTasks() {
while (!tiles_that_need_to_be_rasterized_.empty()) { while (!tiles_that_need_to_be_rasterized_.empty()) {
int max_pending_tasks = kNumPendingRasterTasksPerThread * int max_pending_tasks = kNumPendingRasterTasksPerThread *
kMaxRasterThreads; num_raster_threads_;
// Stop dispatching raster tasks when too many are pending. // Stop dispatching raster tasks when too many are pending.
if (pending_raster_tasks_ >= max_pending_tasks) if (pending_raster_tasks_ >= max_pending_tasks)
......
...@@ -68,7 +68,9 @@ class CC_EXPORT ManagedTileState { ...@@ -68,7 +68,9 @@ class CC_EXPORT ManagedTileState {
// created, and unregister from the manager when they are deleted. // created, and unregister from the manager when they are deleted.
class CC_EXPORT TileManager { class CC_EXPORT TileManager {
public: public:
TileManager(TileManagerClient* client, ResourceProvider *resource_provider); TileManager(TileManagerClient* client,
ResourceProvider *resource_provider,
size_t num_raster_threads);
virtual ~TileManager(); virtual ~TileManager();
const GlobalStateThatImpactsTilePriority& GlobalState() const { return global_state_; } const GlobalStateThatImpactsTilePriority& GlobalState() const { return global_state_; }
...@@ -102,6 +104,7 @@ class CC_EXPORT TileManager { ...@@ -102,6 +104,7 @@ class CC_EXPORT TileManager {
scoped_ptr<ResourcePool> resource_pool_; scoped_ptr<ResourcePool> resource_pool_;
bool manage_tiles_pending_; bool manage_tiles_pending_;
int pending_raster_tasks_; int pending_raster_tasks_;
size_t num_raster_threads_;
scoped_refptr<base::SequencedWorkerPool> worker_pool_; scoped_refptr<base::SequencedWorkerPool> worker_pool_;
GlobalStateThatImpactsTilePriority global_state_; 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