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

Unified Diff: cc/resources/gpu_tile_task_worker_pool.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/gpu_tile_task_worker_pool.h ('k') | cc/resources/one_copy_tile_task_worker_pool.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/gpu_tile_task_worker_pool.cc
diff --git a/cc/resources/gpu_tile_task_worker_pool.cc b/cc/resources/gpu_tile_task_worker_pool.cc
index 824945740b97b0bbd049f8790c85e599733a58c3..c57d25a27de533214ba2656c00bbfad32d2f5553 100644
--- a/cc/resources/gpu_tile_task_worker_pool.cc
+++ b/cc/resources/gpu_tile_task_worker_pool.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include "base/trace_event/trace_event.h"
+#include "cc/resources/gpu_rasterizer.h"
#include "cc/resources/raster_buffer.h"
#include "cc/resources/raster_source.h"
#include "cc/resources/resource.h"
@@ -22,39 +23,64 @@ namespace {
class RasterBufferImpl : public RasterBuffer {
public:
- RasterBufferImpl() {}
+ RasterBufferImpl(GpuRasterizer* rasterizer, const Resource* resource)
+ : rasterizer_(rasterizer),
+ lock_(rasterizer->resource_provider(), resource->id()),
+ resource_(resource) {}
// Overridden from RasterBuffer:
void Playback(const RasterSource* raster_source,
const gfx::Rect& rect,
float scale) override {
- // Don't do anything.
+ TRACE_EVENT0("cc", "RasterBufferImpl::Playback");
+ ContextProvider* context_provider = rasterizer_->resource_provider()
+ ->output_surface()
+ ->worker_context_provider();
+
+ // The context lock must be held while accessing the context on a
+ // worker thread.
+ base::AutoLock context_lock(*context_provider->GetLock());
+
+ // Allow this worker thread to bind to context_provider.
+ context_provider->DetachFromThread();
+
+ // Rasterize source into resource.
+ rasterizer_->RasterizeSource(true, &lock_, raster_source, rect, scale);
+
+ // Barrier to sync worker context output to cc context.
+ context_provider->ContextGL()->OrderingBarrierCHROMIUM();
+
+ // Allow compositor thread to bind to context_provider.
+ context_provider->DetachFromThread();
}
private:
+ GpuRasterizer* rasterizer_;
+ ResourceProvider::ScopedWriteLockGr lock_;
+ const Resource* resource_;
+
DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
};
} // namespace
+
// static
scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create(
base::SequencedTaskRunner* task_runner,
TaskGraphRunner* task_graph_runner,
- ResourceProvider* resource_provider) {
+ GpuRasterizer* rasterizer) {
return make_scoped_ptr<TileTaskWorkerPool>(
- new GpuTileTaskWorkerPool(
- task_runner, task_graph_runner, resource_provider));
+ new GpuTileTaskWorkerPool(task_runner, task_graph_runner, rasterizer));
}
-// TODO(hendrikw): This class should be removed. See crbug.com/444938.
GpuTileTaskWorkerPool::GpuTileTaskWorkerPool(
base::SequencedTaskRunner* task_runner,
TaskGraphRunner* task_graph_runner,
- ResourceProvider* resource_provider)
+ GpuRasterizer* rasterizer)
: task_runner_(task_runner),
task_graph_runner_(task_graph_runner),
namespace_token_(task_graph_runner_->GetNamespaceToken()),
- resource_provider_(resource_provider),
+ rasterizer_(rasterizer),
task_set_finished_weak_ptr_factory_(this),
weak_ptr_factory_(this) {
}
@@ -129,6 +155,14 @@ void GpuTileTaskWorkerPool::ScheduleTasks(TileTaskQueue* queue) {
}
ScheduleTasksOnOriginThread(this, &graph_);
+
+ // Barrier to sync any new resources to the worker context.
+ rasterizer_->resource_provider()
+ ->output_surface()
+ ->context_provider()
+ ->ContextGL()
+ ->OrderingBarrierCHROMIUM();
+
task_graph_runner_->ScheduleTasks(namespace_token_, &graph_);
std::copy(new_task_set_finished_tasks,
@@ -146,7 +180,7 @@ void GpuTileTaskWorkerPool::CheckForCompletedTasks() {
}
ResourceFormat GpuTileTaskWorkerPool::GetResourceFormat() {
- return resource_provider_->best_texture_format();
+ return rasterizer_->resource_provider()->best_texture_format();
}
void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) {
@@ -164,7 +198,8 @@ void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) {
scoped_ptr<RasterBuffer> GpuTileTaskWorkerPool::AcquireBufferForRaster(
const Resource* resource) {
- return make_scoped_ptr<RasterBuffer>(new RasterBufferImpl());
+ return make_scoped_ptr<RasterBuffer>(
+ new RasterBufferImpl(rasterizer_, resource));
}
void GpuTileTaskWorkerPool::ReleaseBufferForRaster(
« no previous file with comments | « cc/resources/gpu_tile_task_worker_pool.h ('k') | cc/resources/one_copy_tile_task_worker_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698