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

Unified Diff: cc/resources/gpu_tile_task_worker_pool.cc

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 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/picture.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 2cd4edd73d58a2e0223b89efbf356f2d2384fac5..52222db4f4df7dccf9b4e2a2919cb5f30bf0cc5b 100644
--- a/cc/resources/gpu_tile_task_worker_pool.cc
+++ b/cc/resources/gpu_tile_task_worker_pool.cc
@@ -7,11 +7,9 @@
#include <algorithm>
#include "base/debug/trace_event.h"
-#include "cc/output/context_provider.h"
#include "cc/resources/raster_buffer.h"
#include "cc/resources/raster_source.h"
#include "cc/resources/resource.h"
-#include "cc/resources/resource_provider.h"
#include "cc/resources/scoped_gpu_raster.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "third_party/skia/include/core/SkMultiPictureDraw.h"
@@ -24,81 +22,38 @@ namespace {
class RasterBufferImpl : public RasterBuffer {
public:
- RasterBufferImpl(ResourceProvider* resource_provider,
- const Resource* resource,
- SkMultiPictureDraw* multi_picture_draw,
- bool use_distance_field_text)
- : lock_(resource_provider, resource->id()),
- resource_(resource),
- multi_picture_draw_(multi_picture_draw),
- use_distance_field_text_(use_distance_field_text) {}
+ RasterBufferImpl() {}
// Overridden from RasterBuffer:
void Playback(const RasterSource* raster_source,
const gfx::Rect& rect,
float scale) override {
- // Turn on distance fields for layers that have ever animated.
- bool use_distance_field_text =
- use_distance_field_text_ ||
- raster_source->ShouldAttemptToUseDistanceFieldText();
- SkSurface* sk_surface = lock_.GetSkSurface(use_distance_field_text,
- raster_source->CanUseLCDText());
-
- if (!sk_surface)
- return;
-
- SkPictureRecorder recorder;
- gfx::Size size = resource_->size();
- const int flags = SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag;
- skia::RefPtr<SkCanvas> canvas = skia::SharePtr(
- recorder.beginRecording(size.width(), size.height(), NULL, flags));
-
- canvas->save();
- raster_source->PlaybackToCanvas(canvas.get(), rect, scale);
- canvas->restore();
-
- // Add the canvas and recorded picture to |multi_picture_draw_|.
- skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording());
- multi_picture_draw_->add(sk_surface->getCanvas(), picture.get());
+ // Don't do anything.
}
private:
- ResourceProvider::ScopedWriteLockGr lock_;
- const Resource* resource_;
- SkMultiPictureDraw* multi_picture_draw_;
- bool use_distance_field_text_;
-
DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
};
} // namespace
-
// static
scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create(
base::SequencedTaskRunner* task_runner,
- ContextProvider* context_provider,
- ResourceProvider* resource_provider,
- bool use_distance_field_text) {
+ TaskGraphRunner* task_graph_runner) {
return make_scoped_ptr<TileTaskWorkerPool>(
- new GpuTileTaskWorkerPool(task_runner, context_provider,
- resource_provider, use_distance_field_text));
+ new GpuTileTaskWorkerPool(task_runner, task_graph_runner));
}
+// TODO(hendrikw): This class should be removed. See crbug.com/444938.
GpuTileTaskWorkerPool::GpuTileTaskWorkerPool(
base::SequencedTaskRunner* task_runner,
- ContextProvider* context_provider,
- ResourceProvider* resource_provider,
- bool use_distance_field_text)
+ TaskGraphRunner* task_graph_runner)
: task_runner_(task_runner),
- task_graph_runner_(new TaskGraphRunner),
+ task_graph_runner_(task_graph_runner),
namespace_token_(task_graph_runner_->GetNamespaceToken()),
- context_provider_(context_provider),
- resource_provider_(resource_provider),
run_tasks_on_origin_thread_pending_(false),
- use_distance_field_text_(use_distance_field_text),
task_set_finished_weak_ptr_factory_(this),
weak_ptr_factory_(this) {
- DCHECK(context_provider_);
}
GpuTileTaskWorkerPool::~GpuTileTaskWorkerPool() {
@@ -172,8 +127,6 @@ void GpuTileTaskWorkerPool::ScheduleTasks(TileTaskQueue* queue) {
ScheduleTasksOnOriginThread(this, &graph_);
task_graph_runner_->ScheduleTasks(namespace_token_, &graph_);
- ScheduleRunTasksOnOriginThread();
-
std::copy(new_task_set_finished_tasks,
new_task_set_finished_tasks + kNumberOfTaskSets,
task_set_finished_tasks_);
@@ -184,24 +137,26 @@ void GpuTileTaskWorkerPool::CheckForCompletedTasks() {
task_graph_runner_->CollectCompletedTasks(namespace_token_,
&completed_tasks_);
- for (Task::Vector::const_iterator it = completed_tasks_.begin();
- it != completed_tasks_.end(); ++it) {
- TileTask* task = static_cast<TileTask*>(it->get());
+ CompleteTasks(completed_tasks_);
+ completed_tasks_.clear();
+}
+
+void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) {
+ for (auto& task : tasks) {
+ RasterTask* raster_task = static_cast<RasterTask*>(task.get());
- task->WillComplete();
- task->CompleteOnOriginThread(this);
- task->DidComplete();
+ raster_task->WillComplete();
+ raster_task->CompleteOnOriginThread(this);
+ raster_task->DidComplete();
- task->RunReplyOnOriginThread();
+ raster_task->RunReplyOnOriginThread();
}
completed_tasks_.clear();
}
scoped_ptr<RasterBuffer> GpuTileTaskWorkerPool::AcquireBufferForRaster(
const Resource* resource) {
- return make_scoped_ptr<RasterBuffer>(
- new RasterBufferImpl(resource_provider_, resource, &multi_picture_draw_,
- use_distance_field_text_));
+ return make_scoped_ptr<RasterBuffer>(new RasterBufferImpl());
}
void GpuTileTaskWorkerPool::ReleaseBufferForRaster(
@@ -218,28 +173,4 @@ void GpuTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) {
client_->DidFinishRunningTileTasks(task_set);
}
-void GpuTileTaskWorkerPool::ScheduleRunTasksOnOriginThread() {
- if (run_tasks_on_origin_thread_pending_)
- return;
-
- task_runner_->PostTask(
- FROM_HERE, base::Bind(&GpuTileTaskWorkerPool::RunTasksOnOriginThread,
- weak_ptr_factory_.GetWeakPtr()));
- run_tasks_on_origin_thread_pending_ = true;
-}
-
-void GpuTileTaskWorkerPool::RunTasksOnOriginThread() {
- TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::RunTasksOnOriginThread");
-
- DCHECK(run_tasks_on_origin_thread_pending_);
- run_tasks_on_origin_thread_pending_ = false;
-
- ScopedGpuRaster gpu_raster(context_provider_);
- task_graph_runner_->RunUntilIdle();
-
- // Draw each all of the pictures that were collected. This will also clear
- // the pictures and canvases added to |multi_picture_draw_|
- multi_picture_draw_.draw();
-}
-
} // namespace cc
« no previous file with comments | « cc/resources/gpu_tile_task_worker_pool.h ('k') | cc/resources/picture.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698