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

Unified Diff: cc/resources/one_copy_raster_worker_pool.h

Issue 670183003: Update from chromium 62675d9fb31fb8cedc40f68e78e8445a74f362e7 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 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/layer_updater.h ('k') | cc/resources/one_copy_raster_worker_pool.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/one_copy_raster_worker_pool.h
diff --git a/cc/resources/one_copy_raster_worker_pool.h b/cc/resources/one_copy_raster_worker_pool.h
index c84b5595e731a3bd4ed8f6f06f94df520e9fb7fc..7372fb7ae47f5b3b63cb7d8e8d4cbf9a559c7e8a 100644
--- a/cc/resources/one_copy_raster_worker_pool.h
+++ b/cc/resources/one_copy_raster_worker_pool.h
@@ -6,10 +6,13 @@
#define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
#include "base/memory/weak_ptr.h"
+#include "base/synchronization/lock.h"
#include "base/values.h"
+#include "cc/base/scoped_ptr_deque.h"
#include "cc/output/context_provider.h"
#include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
+#include "cc/resources/resource_provider.h"
namespace base {
namespace debug {
@@ -21,7 +24,8 @@ class TracedValue;
namespace cc {
class ResourcePool;
class ResourceProvider;
-class ScopedResource;
+
+typedef int64 CopySequenceNumber;
class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
public Rasterizer,
@@ -50,6 +54,17 @@ class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
const Resource* resource) override;
void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
+ // Schedule copy of |src| resource to |dst| resource. Returns a non-zero
+ // sequence number for this copy operation.
+ CopySequenceNumber ScheduleCopyOnWorkerThread(
+ scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock,
+ const Resource* src,
+ const Resource* dst);
+
+ // Issues copy operations until |sequence| has been processed. This will
+ // return immediately if |sequence| has already been processed.
+ void AdvanceLastIssuedCopyTo(CopySequenceNumber sequence);
+
protected:
OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
TaskGraphRunner* task_graph_runner,
@@ -58,7 +73,23 @@ class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
ResourcePool* resource_pool);
private:
+ struct CopyOperation {
+ typedef ScopedPtrDeque<CopyOperation> Deque;
+
+ CopyOperation(
+ scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock,
+ ResourceProvider::ResourceId src,
+ ResourceProvider::ResourceId dst);
+ ~CopyOperation();
+
+ scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock;
+ ResourceProvider::ResourceId src;
+ ResourceProvider::ResourceId dst;
+ };
+
void OnRasterFinished(TaskSet task_set);
+ void AdvanceLastFlushedCopyTo(CopySequenceNumber sequence);
+ void IssueCopyOperations(int64 count);
scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const;
@@ -71,12 +102,22 @@ class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
ResourcePool* resource_pool_;
TaskSetCollection raster_pending_;
scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
+ CopySequenceNumber last_issued_copy_operation_;
+ CopySequenceNumber last_flushed_copy_operation_;
// Task graph used when scheduling tasks and vector used to gather
// completed tasks.
TaskGraph graph_;
Task::Vector completed_tasks_;
+ base::Lock lock_;
+ // |lock_| must be acquired when accessing the following members.
+ CopyOperation::Deque pending_copy_operations_;
+ CopySequenceNumber next_copy_operation_sequence_;
+
+ base::WeakPtrFactory<OneCopyRasterWorkerPool> weak_ptr_factory_;
+ // "raster finished" tasks need their own factory as they need to be
+ // canceled when ScheduleTasks() is called.
base::WeakPtrFactory<OneCopyRasterWorkerPool>
raster_finished_weak_ptr_factory_;
« no previous file with comments | « cc/resources/layer_updater.h ('k') | cc/resources/one_copy_raster_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698