Revert of Linux MSan: enable swarming/sharding for browser_tests. (patchset #1 id...
[chromium-blink-merge.git] / cc / resources / pixel_buffer_tile_task_worker_pool.h
blobedff89a13b21ff0102dbcfddac7f33899709e8af
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_RESOURCES_PIXEL_BUFFER_TILE_TASK_WORKER_POOL_H_
6 #define CC_RESOURCES_PIXEL_BUFFER_TILE_TASK_WORKER_POOL_H_
8 #include <deque>
9 #include <vector>
11 #include "base/memory/weak_ptr.h"
12 #include "base/values.h"
13 #include "cc/base/delayed_unique_notifier.h"
14 #include "cc/output/context_provider.h"
15 #include "cc/resources/tile_task_runner.h"
16 #include "cc/resources/tile_task_worker_pool.h"
18 namespace base {
19 namespace trace_event {
20 class ConvertableToTraceFormat;
21 class TracedValue;
24 // TODO(ssid): remove these aliases after the tracing clients are moved to the
25 // new trace_event namespace. See crbug.com/451032. ETA: March 2015
26 namespace debug {
27 using ::base::trace_event::ConvertableToTraceFormat;
28 using ::base::trace_event::TracedValue;
30 } // namespace base
32 namespace cc {
33 class ResourceProvider;
35 class CC_EXPORT PixelBufferTileTaskWorkerPool : public TileTaskWorkerPool,
36 public TileTaskRunner,
37 public TileTaskClient {
38 public:
39 ~PixelBufferTileTaskWorkerPool() override;
41 static scoped_ptr<TileTaskWorkerPool> Create(
42 base::SequencedTaskRunner* task_runner,
43 TaskGraphRunner* task_graph_runner,
44 ContextProvider* context_provider,
45 ResourceProvider* resource_provider,
46 size_t max_transfer_buffer_usage_bytes);
48 // Overridden from TileTaskWorkerPool:
49 TileTaskRunner* AsTileTaskRunner() override;
51 // Overridden from TileTaskRunner:
52 void SetClient(TileTaskRunnerClient* client) override;
53 void Shutdown() override;
54 void ScheduleTasks(TileTaskQueue* queue) override;
55 void CheckForCompletedTasks() override;
56 ResourceFormat GetResourceFormat() override;
58 // Overridden from TileTaskClient:
59 scoped_ptr<RasterBuffer> AcquireBufferForRaster(
60 const Resource* resource) override;
61 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
63 private:
64 struct RasterTaskState {
65 class TaskComparator {
66 public:
67 explicit TaskComparator(const RasterTask* task) : task_(task) {}
69 bool operator()(const RasterTaskState& state) const {
70 return state.task == task_;
73 private:
74 const RasterTask* task_;
77 typedef std::vector<RasterTaskState> Vector;
79 RasterTaskState(RasterTask* task, const TaskSetCollection& task_sets);
81 enum { UNSCHEDULED, SCHEDULED, UPLOADING, COMPLETED } type;
82 RasterTask* task;
83 TaskSetCollection task_sets;
86 typedef std::deque<scoped_refptr<RasterTask>> RasterTaskDeque;
88 PixelBufferTileTaskWorkerPool(base::SequencedTaskRunner* task_runner,
89 TaskGraphRunner* task_graph_runner,
90 ContextProvider* context_provider,
91 ResourceProvider* resource_provider,
92 size_t max_transfer_buffer_usage_bytes);
94 void OnTaskSetFinished(TaskSet task_set);
95 void FlushUploads();
96 void CheckForCompletedUploads();
97 void CheckForCompletedRasterTasks();
98 void ScheduleMoreTasks();
99 unsigned PendingRasterTaskCount() const;
100 TaskSetCollection PendingTasks() const;
101 void CheckForCompletedRasterizerTasks();
103 const char* StateName() const;
104 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
105 void ThrottleStateAsValueInto(base::debug::TracedValue* throttle_state) const;
107 scoped_refptr<base::SequencedTaskRunner> task_runner_;
108 TaskGraphRunner* task_graph_runner_;
109 const NamespaceToken namespace_token_;
110 TileTaskRunnerClient* client_;
111 ContextProvider* context_provider_;
112 ResourceProvider* resource_provider_;
114 bool shutdown_;
116 TileTaskQueue raster_tasks_;
117 RasterTaskState::Vector raster_task_states_;
118 RasterTaskDeque raster_tasks_with_pending_upload_;
119 RasterTask::Vector completed_raster_tasks_;
120 TileTask::Vector completed_image_decode_tasks_;
122 size_t scheduled_raster_task_count_;
123 size_t task_counts_[kNumberOfTaskSets];
124 size_t bytes_pending_upload_;
125 size_t max_bytes_pending_upload_;
126 bool has_performed_uploads_since_last_flush_;
128 TaskSetCollection should_notify_client_if_no_tasks_are_pending_;
129 TaskSetCollection task_set_finished_tasks_pending_;
131 DelayedUniqueNotifier check_for_completed_raster_task_notifier_;
133 scoped_refptr<TileTask> task_set_finished_tasks_[kNumberOfTaskSets];
135 // Task graph used when scheduling tasks and vector used to gather
136 // completed tasks.
137 TaskGraph graph_;
138 Task::Vector completed_tasks_;
140 base::WeakPtrFactory<PixelBufferTileTaskWorkerPool>
141 task_set_finished_weak_ptr_factory_;
143 DISALLOW_COPY_AND_ASSIGN(PixelBufferTileTaskWorkerPool);
146 } // namespace cc
148 #endif // CC_RESOURCES_PIXEL_BUFFER_TILE_TASK_WORKER_POOL_H_