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

Side by Side Diff: cc/resources/one_copy_raster_worker_pool.h

Issue 578053002: cc: Have 1-copy rasterizer issue copy commands at the rate of raster. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@raster-buffer-refactor
Patch Set: rebase 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ 5 #ifndef CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
6 #define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ 6 #define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
7 7
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/synchronization/lock.h"
9 #include "base/values.h" 10 #include "base/values.h"
11 #include "cc/base/scoped_ptr_deque.h"
10 #include "cc/output/context_provider.h" 12 #include "cc/output/context_provider.h"
11 #include "cc/resources/raster_worker_pool.h" 13 #include "cc/resources/raster_worker_pool.h"
12 #include "cc/resources/rasterizer.h" 14 #include "cc/resources/rasterizer.h"
15 #include "cc/resources/resource_provider.h"
13 16
14 namespace base { 17 namespace base {
15 namespace debug { 18 namespace debug {
16 class ConvertableToTraceFormat; 19 class ConvertableToTraceFormat;
17 class TracedValue; 20 class TracedValue;
18 } 21 }
19 } 22 }
20 23
21 namespace cc { 24 namespace cc {
22 class ResourcePool; 25 class ResourcePool;
23 class ResourceProvider; 26 class ResourceProvider;
24 class ScopedResource; 27
28 typedef int64 CopySequenceNumber;
vmpstr 2014/10/22 23:25:17 Can this be uint64?
reveman 2014/10/23 15:38:55 Yes, but I don't see a good reason for that. style
25 29
26 class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool, 30 class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
27 public Rasterizer, 31 public Rasterizer,
28 public RasterizerTaskClient { 32 public RasterizerTaskClient {
29 public: 33 public:
30 ~OneCopyRasterWorkerPool() override; 34 ~OneCopyRasterWorkerPool() override;
31 35
32 static scoped_ptr<RasterWorkerPool> Create( 36 static scoped_ptr<RasterWorkerPool> Create(
33 base::SequencedTaskRunner* task_runner, 37 base::SequencedTaskRunner* task_runner,
34 TaskGraphRunner* task_graph_runner, 38 TaskGraphRunner* task_graph_runner,
35 ContextProvider* context_provider, 39 ContextProvider* context_provider,
36 ResourceProvider* resource_provider, 40 ResourceProvider* resource_provider,
37 ResourcePool* resource_pool); 41 ResourcePool* resource_pool);
38 42
39 // Overridden from RasterWorkerPool: 43 // Overridden from RasterWorkerPool:
40 Rasterizer* AsRasterizer() override; 44 Rasterizer* AsRasterizer() override;
41 45
42 // Overridden from Rasterizer: 46 // Overridden from Rasterizer:
43 void SetClient(RasterizerClient* client) override; 47 void SetClient(RasterizerClient* client) override;
44 void Shutdown() override; 48 void Shutdown() override;
45 void ScheduleTasks(RasterTaskQueue* queue) override; 49 void ScheduleTasks(RasterTaskQueue* queue) override;
46 void CheckForCompletedTasks() override; 50 void CheckForCompletedTasks() override;
47 51
48 // Overridden from RasterizerTaskClient: 52 // Overridden from RasterizerTaskClient:
49 scoped_ptr<RasterBuffer> AcquireBufferForRaster( 53 scoped_ptr<RasterBuffer> AcquireBufferForRaster(
50 const Resource* resource) override; 54 const Resource* resource) override;
51 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; 55 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
52 56
57 // Schedule copy of |src| resource to |dst| resource. Returns a non-zero
58 // sequence number for this copy operation.
59 CopySequenceNumber ScheduleCopyOnWorkerThread(
60 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock,
61 const Resource* src,
62 const Resource* dst);
63
64 // Issue copy associated with |sequence| unless already issued.
vmpstr 2014/10/22 23:25:17 Reading the code, this isn't exactly true. This wi
reveman 2014/10/23 15:38:55 Yes, it's not incorrect though. Just doesn't revea
65 void IssueCopy(CopySequenceNumber sequence);
66
67 // Flush copy associated with |sequence| unless already flushed.
vmpstr 2014/10/22 23:25:17 Likewise here, I think you should mention that cop
reveman 2014/10/23 15:38:55 PTAL.
68 void FlushCopy(CopySequenceNumber sequence);
vmpstr 2014/10/22 23:25:17 Can this be private? Or does Bind complain?
reveman 2014/10/23 15:38:55 Done.
69
53 protected: 70 protected:
54 OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner, 71 OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
55 TaskGraphRunner* task_graph_runner, 72 TaskGraphRunner* task_graph_runner,
56 ContextProvider* context_provider, 73 ContextProvider* context_provider,
57 ResourceProvider* resource_provider, 74 ResourceProvider* resource_provider,
58 ResourcePool* resource_pool); 75 ResourcePool* resource_pool);
59 76
60 private: 77 private:
78 struct CopyOperation {
79 typedef ScopedPtrDeque<CopyOperation> Deque;
80
81 CopyOperation(
82 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock,
83 ResourceProvider::ResourceId src,
84 ResourceProvider::ResourceId dst);
85 ~CopyOperation();
86
87 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock;
88 ResourceProvider::ResourceId src;
89 ResourceProvider::ResourceId dst;
90 };
91
61 void OnRasterFinished(TaskSet task_set); 92 void OnRasterFinished(TaskSet task_set);
93 void IssueCopyOperations(int64 count);
62 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; 94 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
63 void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const; 95 void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const;
64 96
65 scoped_refptr<base::SequencedTaskRunner> task_runner_; 97 scoped_refptr<base::SequencedTaskRunner> task_runner_;
66 TaskGraphRunner* task_graph_runner_; 98 TaskGraphRunner* task_graph_runner_;
67 const NamespaceToken namespace_token_; 99 const NamespaceToken namespace_token_;
68 RasterizerClient* client_; 100 RasterizerClient* client_;
69 ContextProvider* context_provider_; 101 ContextProvider* context_provider_;
70 ResourceProvider* resource_provider_; 102 ResourceProvider* resource_provider_;
71 ResourcePool* resource_pool_; 103 ResourcePool* resource_pool_;
72 TaskSetCollection raster_pending_; 104 TaskSetCollection raster_pending_;
73 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets]; 105 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
106 CopySequenceNumber last_issued_copy_operation_;
107 CopySequenceNumber last_flushed_copy_operation_;
74 108
75 // Task graph used when scheduling tasks and vector used to gather 109 // Task graph used when scheduling tasks and vector used to gather
76 // completed tasks. 110 // completed tasks.
77 TaskGraph graph_; 111 TaskGraph graph_;
78 Task::Vector completed_tasks_; 112 Task::Vector completed_tasks_;
79 113
114 base::Lock lock_;
115 // |lock_| must be acquired when accessing the following members.
116 CopyOperation::Deque pending_copy_operations_;
117 CopySequenceNumber next_copy_operation_sequence_;
118
119 base::WeakPtrFactory<OneCopyRasterWorkerPool> weak_ptr_factory_;
80 base::WeakPtrFactory<OneCopyRasterWorkerPool> 120 base::WeakPtrFactory<OneCopyRasterWorkerPool>
81 raster_finished_weak_ptr_factory_; 121 raster_finished_weak_ptr_factory_;
82 122
83 DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool); 123 DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool);
84 }; 124 };
85 125
86 } // namespace cc 126 } // namespace cc
87 127
88 #endif // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ 128 #endif // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
OLDNEW
« no previous file with comments | « no previous file | cc/resources/one_copy_raster_worker_pool.cc » ('j') | cc/resources/one_copy_raster_worker_pool.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698