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

Unified Diff: cc/resources/rasterizer.h

Issue 228173002: cc: Separate RasterWorkerPool interface from implementation details. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review feedback Created 6 years, 8 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/raster_worker_pool_unittest.cc ('k') | cc/resources/rasterizer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/rasterizer.h
diff --git a/cc/resources/rasterizer.h b/cc/resources/rasterizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..d53e400b4f81ff09731d7bee2e1a132480c685de
--- /dev/null
+++ b/cc/resources/rasterizer.h
@@ -0,0 +1,177 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_RESOURCES_RASTERIZER_H_
+#define CC_RESOURCES_RASTERIZER_H_
+
+#include <vector>
+
+#include "base/callback.h"
+#include "cc/resources/resource_format.h"
+#include "cc/resources/task_graph_runner.h"
+
+class SkCanvas;
+
+namespace cc {
+class Resource;
+
+namespace internal {
+class RasterTask;
+
+class CC_EXPORT RasterizerTaskClient {
+ public:
+ virtual SkCanvas* AcquireCanvasForRaster(RasterTask* task) = 0;
+ virtual void ReleaseCanvasForRaster(RasterTask* task) = 0;
+
+ protected:
+ virtual ~RasterizerTaskClient() {}
+};
+
+class ImageDecodeTask;
+
+class CC_EXPORT RasterizerTask : public Task {
+ public:
+ typedef std::vector<scoped_refptr<RasterizerTask> > Vector;
+
+ virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) = 0;
+ virtual void RunOnOriginThread() = 0;
+ virtual void CompleteOnOriginThread(RasterizerTaskClient* client) = 0;
+ virtual void RunReplyOnOriginThread() = 0;
+
+ // Type-checking downcast routines.
+ virtual ImageDecodeTask* AsImageDecodeTask();
+ virtual RasterTask* AsRasterTask();
+
+ void WillSchedule();
+ void DidSchedule();
+ bool HasBeenScheduled() const;
+
+ void WillComplete();
+ void DidComplete();
+ bool HasCompleted() const;
+
+ protected:
+ RasterizerTask();
+ virtual ~RasterizerTask();
+
+ bool did_schedule_;
+ bool did_complete_;
+};
+
+class CC_EXPORT ImageDecodeTask : public RasterizerTask {
+ public:
+ typedef std::vector<scoped_refptr<ImageDecodeTask> > Vector;
+
+ // Overridden from RasterizerTask:
+ virtual ImageDecodeTask* AsImageDecodeTask() OVERRIDE;
+
+ protected:
+ ImageDecodeTask();
+ virtual ~ImageDecodeTask();
+};
+
+class CC_EXPORT RasterTask : public RasterizerTask {
+ public:
+ typedef std::vector<scoped_refptr<RasterTask> > Vector;
+
+ // Overridden from RasterizerTask:
+ virtual RasterTask* AsRasterTask() OVERRIDE;
+
+ const Resource* resource() const { return resource_; }
+ const ImageDecodeTask::Vector& dependencies() const { return dependencies_; }
+
+ protected:
+ RasterTask(const Resource* resource, ImageDecodeTask::Vector* dependencies);
+ virtual ~RasterTask();
+
+ private:
+ const Resource* resource_;
+ ImageDecodeTask::Vector dependencies_;
+};
+
+} // namespace internal
+
+class CC_EXPORT RasterizerClient {
+ public:
+ virtual bool ShouldForceTasksRequiredForActivationToComplete() const = 0;
+ virtual void DidFinishRunningTasks() = 0;
+ virtual void DidFinishRunningTasksRequiredForActivation() = 0;
+
+ protected:
+ virtual ~RasterizerClient() {}
+};
+
+struct CC_EXPORT RasterTaskQueue {
+ struct CC_EXPORT Item {
+ class TaskComparator {
+ public:
+ explicit TaskComparator(const internal::RasterTask* task) : task_(task) {}
+
+ bool operator()(const Item& item) const { return item.task == task_; }
+
+ private:
+ const internal::RasterTask* task_;
+ };
+
+ typedef std::vector<Item> Vector;
+
+ Item(internal::RasterTask* task, bool required_for_activation);
+ ~Item();
+
+ static bool IsRequiredForActivation(const Item& item) {
+ return item.required_for_activation;
+ }
+
+ internal::RasterTask* task;
+ bool required_for_activation;
+ };
+
+ RasterTaskQueue();
+ ~RasterTaskQueue();
+
+ void Swap(RasterTaskQueue* other);
+ void Reset();
+
+ Item::Vector items;
+ size_t required_for_activation_count;
+};
+
+// This interface can be used to schedule and run raster tasks. The client will
+// be notified asynchronously when the set of tasks marked as "required for
+// activation" have finished running and when all scheduled tasks have finished
+// running. The client can call CheckForCompletedTasks() at any time to dispatch
+// pending completion callbacks for all tasks that have finished running.
+class CC_EXPORT Rasterizer {
+ public:
+ // Set the client instance to be notified when finished running tasks.
+ virtual void SetClient(RasterizerClient* client) = 0;
+
+ // Tells the worker pool to shutdown after canceling all previously scheduled
+ // tasks. Reply callbacks are still guaranteed to run when
+ // CheckForCompletedTasks() is called.
+ virtual void Shutdown() = 0;
+
+ // Schedule running of raster tasks in |queue| and all dependencies.
+ // Previously scheduled tasks that are not in |queue| will be canceled unless
+ // already running. Once scheduled, reply callbacks are guaranteed to run for
+ // all tasks even if they later get canceled by another call to
+ // ScheduleTasks().
+ virtual void ScheduleTasks(RasterTaskQueue* queue) = 0;
+
+ // Check for completed tasks and dispatch reply callbacks.
+ virtual void CheckForCompletedTasks() = 0;
+
+ // Returns the target that needs to be used for raster task resources.
+ virtual unsigned GetResourceTarget() const = 0;
+
+ // Returns the format that needs to be used for raster task resources.
+ virtual ResourceFormat GetResourceFormat() const = 0;
+
+ protected:
+ virtual ~Rasterizer() {}
+};
+
+} // namespace cc
+
+#endif // CC_RESOURCES_RASTERIZER_H_
« no previous file with comments | « cc/resources/raster_worker_pool_unittest.cc ('k') | cc/resources/rasterizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698