diff options
author | sohan.jyoti@samsung.com <sohan.jyoti@samsung.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-03 08:50:11 +0000 |
---|---|---|
committer | sohan.jyoti@samsung.com <sohan.jyoti@samsung.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-03 08:50:11 +0000 |
commit | 2ea1a58ee9449609c2200ee3975c98e97fa8dacd (patch) | |
tree | e0e68c16aa59f3b885593615dc2441f69f11a1b4 /cc/resources | |
parent | 5ff62e44b2cd33d2cc9225c63c19f20263c645b1 (diff) | |
download | chromium_src-2ea1a58ee9449609c2200ee3975c98e97fa8dacd.zip chromium_src-2ea1a58ee9449609c2200ee3975c98e97fa8dacd.tar.gz chromium_src-2ea1a58ee9449609c2200ee3975c98e97fa8dacd.tar.bz2 |
cc: Hide Gpu Rasterization details in Resource Provider.
This moves ganesh and gl context code out to resource
provider from gpurasterworkerpool to avoid making any
assumptions how the gpu raster buffers are implemented.
BUG=390399
Review URL: https://codereview.chromium.org/363563006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281225 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/resources')
-rw-r--r-- | cc/resources/gpu_raster_worker_pool.cc | 31 | ||||
-rw-r--r-- | cc/resources/gpu_raster_worker_pool.h | 7 | ||||
-rw-r--r-- | cc/resources/raster_worker_pool_perftest.cc | 6 | ||||
-rw-r--r-- | cc/resources/raster_worker_pool_unittest.cc | 6 | ||||
-rw-r--r-- | cc/resources/resource_provider.cc | 38 | ||||
-rw-r--r-- | cc/resources/resource_provider.h | 17 |
6 files changed, 66 insertions, 39 deletions
diff --git a/cc/resources/gpu_raster_worker_pool.cc b/cc/resources/gpu_raster_worker_pool.cc index f26d827..70aab17 100644 --- a/cc/resources/gpu_raster_worker_pool.cc +++ b/cc/resources/gpu_raster_worker_pool.cc @@ -16,26 +16,22 @@ namespace cc { // static scoped_ptr<RasterWorkerPool> GpuRasterWorkerPool::Create( base::SequencedTaskRunner* task_runner, - ResourceProvider* resource_provider, - ContextProvider* context_provider) { - return make_scoped_ptr<RasterWorkerPool>(new GpuRasterWorkerPool( - task_runner, resource_provider, context_provider)); + ResourceProvider* resource_provider) { + return make_scoped_ptr<RasterWorkerPool>( + new GpuRasterWorkerPool(task_runner, resource_provider)); } GpuRasterWorkerPool::GpuRasterWorkerPool(base::SequencedTaskRunner* task_runner, - ResourceProvider* resource_provider, - ContextProvider* context_provider) + ResourceProvider* resource_provider) : task_runner_(task_runner), task_graph_runner_(new TaskGraphRunner), namespace_token_(task_graph_runner_->GetNamespaceToken()), resource_provider_(resource_provider), - context_provider_(context_provider), run_tasks_on_origin_thread_pending_(false), raster_tasks_pending_(false), raster_tasks_required_for_activation_pending_(false), raster_finished_weak_ptr_factory_(this), weak_ptr_factory_(this) { - DCHECK(context_provider_); } GpuRasterWorkerPool::~GpuRasterWorkerPool() { @@ -189,25 +185,8 @@ void GpuRasterWorkerPool::RunTasksOnOriginThread() { DCHECK(run_tasks_on_origin_thread_pending_); run_tasks_on_origin_thread_pending_ = false; - DCHECK(context_provider_->ContextGL()); - // TODO(alokp): Use a trace macro to push/pop markers. - // Using push/pop functions directly incurs cost to evaluate function - // arguments even when tracing is disabled. - context_provider_->ContextGL()->PushGroupMarkerEXT( - 0, "GpuRasterWorkerPool::RunTasksOnOriginThread"); - - GrContext* gr_context = context_provider_->GrContext(); - // TODO(alokp): Implement TestContextProvider::GrContext(). - if (gr_context) - gr_context->resetContext(); - + ResourceProvider::ScopedGpuRaster gpu_raster(resource_provider_); task_graph_runner_->RunUntilIdle(); - - // TODO(alokp): Implement TestContextProvider::GrContext(). - if (gr_context) - gr_context->flush(); - - context_provider_->ContextGL()->PopGroupMarkerEXT(); } } // namespace cc diff --git a/cc/resources/gpu_raster_worker_pool.h b/cc/resources/gpu_raster_worker_pool.h index 6aed86f..97829df 100644 --- a/cc/resources/gpu_raster_worker_pool.h +++ b/cc/resources/gpu_raster_worker_pool.h @@ -21,8 +21,7 @@ class CC_EXPORT GpuRasterWorkerPool : public RasterWorkerPool, static scoped_ptr<RasterWorkerPool> Create( base::SequencedTaskRunner* task_runner, - ResourceProvider* resource_provider, - ContextProvider* context_provider); + ResourceProvider* resource_provider); // Overridden from RasterWorkerPool: virtual Rasterizer* AsRasterizer() OVERRIDE; @@ -39,8 +38,7 @@ class CC_EXPORT GpuRasterWorkerPool : public RasterWorkerPool, private: GpuRasterWorkerPool(base::SequencedTaskRunner* task_runner, - ResourceProvider* resource_provider, - ContextProvider* context_provider); + ResourceProvider* resource_provider); void OnRasterFinished(); void OnRasterRequiredForActivationFinished(); @@ -53,7 +51,6 @@ class CC_EXPORT GpuRasterWorkerPool : public RasterWorkerPool, const NamespaceToken namespace_token_; RasterizerClient* client_; ResourceProvider* resource_provider_; - ContextProvider* context_provider_; bool run_tasks_on_origin_thread_pending_; diff --git a/cc/resources/raster_worker_pool_perftest.cc b/cc/resources/raster_worker_pool_perftest.cc index a04f5b0..320f573 100644 --- a/cc/resources/raster_worker_pool_perftest.cc +++ b/cc/resources/raster_worker_pool_perftest.cc @@ -235,10 +235,8 @@ class RasterWorkerPoolPerfTest staging_resource_pool_.get()); break; case RASTER_WORKER_POOL_TYPE_GPU: - raster_worker_pool_ = - GpuRasterWorkerPool::Create(base::MessageLoopProxy::current().get(), - resource_provider_.get(), - context_provider_.get()); + raster_worker_pool_ = GpuRasterWorkerPool::Create( + base::MessageLoopProxy::current().get(), resource_provider_.get()); break; } diff --git a/cc/resources/raster_worker_pool_unittest.cc b/cc/resources/raster_worker_pool_unittest.cc index 30073b4..3aa6594 100644 --- a/cc/resources/raster_worker_pool_unittest.cc +++ b/cc/resources/raster_worker_pool_unittest.cc @@ -141,10 +141,8 @@ class RasterWorkerPoolTest staging_resource_pool_.get()); break; case RASTER_WORKER_POOL_TYPE_GPU: - raster_worker_pool_ = - GpuRasterWorkerPool::Create(base::MessageLoopProxy::current().get(), - resource_provider_.get(), - context_provider_.get()); + raster_worker_pool_ = GpuRasterWorkerPool::Create( + base::MessageLoopProxy::current().get(), resource_provider_.get()); break; } diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index 79104d7..cf79940 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc @@ -1229,6 +1229,16 @@ ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { resource_provider_->UnlockForWrite(resource_id_); } +ResourceProvider::ScopedGpuRaster::ScopedGpuRaster( + ResourceProvider* resource_provider) + : resource_provider_(resource_provider) { + resource_provider_->BeginGpuRaster(); +} + +ResourceProvider::ScopedGpuRaster::~ScopedGpuRaster() { + resource_provider_->EndGpuRaster(); +} + ResourceProvider::ResourceProvider(OutputSurface* output_surface, SharedBitmapManager* shared_bitmap_manager, int highp_threshold_min, @@ -2273,4 +2283,32 @@ class GrContext* ResourceProvider::GrContext() const { return context_provider ? context_provider->GrContext() : NULL; } +void ResourceProvider::BeginGpuRaster() { + GLES2Interface* gl = ContextGL(); + DCHECK(gl); + + // TODO(alokp): Use a trace macro to push/pop markers. + // Using push/pop functions directly incurs cost to evaluate function + // arguments even when tracing is disabled. + gl->PushGroupMarkerEXT(0, "GpuRasterization"); + + class GrContext* gr_context = GrContext(); + if (gr_context) + gr_context->resetContext(); +} + +void ResourceProvider::EndGpuRaster() { + GLES2Interface* gl = ContextGL(); + DCHECK(gl); + + class GrContext* gr_context = GrContext(); + if (gr_context) + gr_context->flush(); + + // TODO(alokp): Use a trace macro to push/pop markers. + // Using push/pop functions directly incurs cost to evaluate function + // arguments even when tracing is disabled. + gl->PopGroupMarkerEXT(); +} + } // namespace cc diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index e56f9f9..5a828b1 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h @@ -306,6 +306,20 @@ class CC_EXPORT ResourceProvider { DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware); }; + // The following class is needed to modify GL resources using GPU + // raster. The user must ensure that they only use GPU raster on + // GL resources while an instance of this class is alive. + class CC_EXPORT ScopedGpuRaster { + public: + ScopedGpuRaster(ResourceProvider* resource_provider); + ~ScopedGpuRaster(); + + private: + ResourceProvider* resource_provider_; + + DISALLOW_COPY_AND_ASSIGN(ScopedGpuRaster); + }; + class Fence : public base::RefCounted<Fence> { public: Fence() {} @@ -627,6 +641,9 @@ class CC_EXPORT ResourceProvider { gpu::gles2::GLES2Interface* ContextGL() const; class GrContext* GrContext() const; + void BeginGpuRaster(); + void EndGpuRaster(); + OutputSurface* output_surface_; SharedBitmapManager* shared_bitmap_manager_; bool lost_output_surface_; |