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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
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 // Issues copy operations until |sequence| has been processed. This will
65 // return immediately if |sequence| has already been processed.
66 void AdvanceLastIssuedCopyTo(CopySequenceNumber sequence);
67
53 protected: 68 protected:
54 OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner, 69 OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
55 TaskGraphRunner* task_graph_runner, 70 TaskGraphRunner* task_graph_runner,
56 ContextProvider* context_provider, 71 ContextProvider* context_provider,
57 ResourceProvider* resource_provider, 72 ResourceProvider* resource_provider,
58 ResourcePool* resource_pool); 73 ResourcePool* resource_pool);
59 74
60 private: 75 private:
76 struct CopyOperation {
77 typedef ScopedPtrDeque<CopyOperation> Deque;
78
79 CopyOperation(
80 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock,
81 ResourceProvider::ResourceId src,
82 ResourceProvider::ResourceId dst);
83 ~CopyOperation();
84
85 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock;
86 ResourceProvider::ResourceId src;
87 ResourceProvider::ResourceId dst;
88 };
89
61 void OnRasterFinished(TaskSet task_set); 90 void OnRasterFinished(TaskSet task_set);
91 void AdvanceLastFlushedCopyTo(CopySequenceNumber sequence);
92 void IssueCopyOperations(int64 count);
62 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; 93 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
63 void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const; 94 void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const;
64 95
65 scoped_refptr<base::SequencedTaskRunner> task_runner_; 96 scoped_refptr<base::SequencedTaskRunner> task_runner_;
66 TaskGraphRunner* task_graph_runner_; 97 TaskGraphRunner* task_graph_runner_;
67 const NamespaceToken namespace_token_; 98 const NamespaceToken namespace_token_;
68 RasterizerClient* client_; 99 RasterizerClient* client_;
69 ContextProvider* context_provider_; 100 ContextProvider* context_provider_;
70 ResourceProvider* resource_provider_; 101 ResourceProvider* resource_provider_;
71 ResourcePool* resource_pool_; 102 ResourcePool* resource_pool_;
72 TaskSetCollection raster_pending_; 103 TaskSetCollection raster_pending_;
73 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets]; 104 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
105 CopySequenceNumber last_issued_copy_operation_;
106 CopySequenceNumber last_flushed_copy_operation_;
74 107
75 // Task graph used when scheduling tasks and vector used to gather 108 // Task graph used when scheduling tasks and vector used to gather
76 // completed tasks. 109 // completed tasks.
77 TaskGraph graph_; 110 TaskGraph graph_;
78 Task::Vector completed_tasks_; 111 Task::Vector completed_tasks_;
79 112
113 base::Lock lock_;
114 // |lock_| must be acquired when accessing the following members.
115 CopyOperation::Deque pending_copy_operations_;
116 CopySequenceNumber next_copy_operation_sequence_;
117
118 base::WeakPtrFactory<OneCopyRasterWorkerPool> weak_ptr_factory_;
119 // "raster finished" tasks need their own factory as they need to be
120 // canceled when ScheduleTasks() is called.
80 base::WeakPtrFactory<OneCopyRasterWorkerPool> 121 base::WeakPtrFactory<OneCopyRasterWorkerPool>
81 raster_finished_weak_ptr_factory_; 122 raster_finished_weak_ptr_factory_;
82 123
83 DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool); 124 DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool);
84 }; 125 };
85 126
86 } // namespace cc 127 } // namespace cc
87 128
88 #endif // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ 129 #endif // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
OLDNEW
« 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