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

Side by Side Diff: cc/raster/tile_task_worker_pool_unittest.cc

Issue 1854723002: cc: Simplify task and its derived classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary static cast. Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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 #include "cc/raster/tile_task_worker_pool.h" 5 #include "cc/raster/tile_task_worker_pool.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 #include <limits> 11 #include <limits>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/cancelable_callback.h" 14 #include "base/cancelable_callback.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
18 #include "base/thread_task_runner_handle.h" 18 #include "base/thread_task_runner_handle.h"
19 #include "cc/base/unique_notifier.h" 19 #include "cc/base/unique_notifier.h"
20 #include "cc/raster/bitmap_tile_task_worker_pool.h" 20 #include "cc/raster/bitmap_tile_task_worker_pool.h"
21 #include "cc/raster/gpu_rasterizer.h" 21 #include "cc/raster/gpu_rasterizer.h"
22 #include "cc/raster/gpu_tile_task_worker_pool.h" 22 #include "cc/raster/gpu_tile_task_worker_pool.h"
23 #include "cc/raster/one_copy_tile_task_worker_pool.h" 23 #include "cc/raster/one_copy_tile_task_worker_pool.h"
24 #include "cc/raster/raster_buffer.h"
25 #include "cc/raster/synchronous_task_graph_runner.h" 24 #include "cc/raster/synchronous_task_graph_runner.h"
26 #include "cc/raster/tile_task_runner.h" 25 #include "cc/raster/tile_task_runner.h"
27 #include "cc/raster/zero_copy_tile_task_worker_pool.h" 26 #include "cc/raster/zero_copy_tile_task_worker_pool.h"
28 #include "cc/resources/resource_pool.h" 27 #include "cc/resources/resource_pool.h"
29 #include "cc/resources/resource_provider.h" 28 #include "cc/resources/resource_provider.h"
30 #include "cc/resources/scoped_resource.h" 29 #include "cc/resources/scoped_resource.h"
31 #include "cc/test/fake_output_surface.h" 30 #include "cc/test/fake_output_surface.h"
32 #include "cc/test/fake_output_surface_client.h" 31 #include "cc/test/fake_output_surface_client.h"
33 #include "cc/test/fake_raster_source.h" 32 #include "cc/test/fake_raster_source.h"
34 #include "cc/test/fake_resource_provider.h" 33 #include "cc/test/fake_resource_provider.h"
35 #include "cc/test/test_gpu_memory_buffer_manager.h" 34 #include "cc/test/test_gpu_memory_buffer_manager.h"
36 #include "cc/test/test_shared_bitmap_manager.h" 35 #include "cc/test/test_shared_bitmap_manager.h"
37 #include "cc/test/test_web_graphics_context_3d.h" 36 #include "cc/test/test_web_graphics_context_3d.h"
38 #include "gpu/GLES2/gl2extchromium.h" 37 #include "gpu/GLES2/gl2extchromium.h"
39 #include "testing/gtest/include/gtest/gtest.h" 38 #include "testing/gtest/include/gtest/gtest.h"
40 39
41 namespace cc { 40 namespace cc {
42 namespace { 41 namespace {
43 42
44 const size_t kMaxBytesPerCopyOperation = 1000U; 43 const size_t kMaxBytesPerCopyOperation = 1000U;
45 const size_t kMaxStagingBuffers = 32U; 44 const size_t kMaxStagingBuffers = 32U;
46 45
47 enum TileTaskWorkerPoolType { 46 enum TileTaskWorkerPoolType {
48 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, 47 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
49 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, 48 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
50 TILE_TASK_WORKER_POOL_TYPE_GPU, 49 TILE_TASK_WORKER_POOL_TYPE_GPU,
51 TILE_TASK_WORKER_POOL_TYPE_BITMAP 50 TILE_TASK_WORKER_POOL_TYPE_BITMAP
52 }; 51 };
53 52
54 class TestRasterTaskImpl : public RasterTask { 53 class TestRasterTaskImpl : public Task {
55 public: 54 public:
56 typedef base::Callback<void(bool was_canceled)> Reply; 55 typedef base::Callback<void(bool was_canceled)> Reply;
57 56
58 TestRasterTaskImpl(const Resource* resource, 57 TestRasterTaskImpl(RasterBufferProvider* raster_buffer_provider,
58 const Resource* resource,
59 const Reply& reply, 59 const Reply& reply,
60 ImageDecodeTask::Vector* dependencies) 60 Task::Vector* dependencies)
61 : RasterTask(dependencies), 61 : Task(dependencies),
62 raster_buffer_provider_(raster_buffer_provider),
62 resource_(resource), 63 resource_(resource),
63 reply_(reply), 64 reply_(reply),
64 raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {} 65 raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {}
65 66
66 // Overridden from Task: 67 // Overridden from Task:
68 void ScheduleOnOriginThread() override {
69 // The raster buffer has no tile ids associated with it for partial update,
70 // so doesn't need to provide a valid dirty rect.
71 raster_buffer_ =
72 raster_buffer_provider_->AcquireBufferForRaster(resource_, 0, 0);
73 }
74 void CompleteOnOriginThread() override {
75 raster_buffer_provider_->ReleaseBufferForRaster(std::move(raster_buffer_));
76 reply_.Run(!HasFinishedRunning());
77 }
67 void RunOnWorkerThread() override { 78 void RunOnWorkerThread() override {
68 uint64_t new_content_id = 0; 79 uint64_t new_content_id = 0;
69 raster_buffer_->Playback(raster_source_.get(), gfx::Rect(1, 1), 80 raster_buffer_->Playback(raster_source_.get(), gfx::Rect(1, 1),
70 gfx::Rect(1, 1), new_content_id, 1.f, 81 gfx::Rect(1, 1), new_content_id, 1.f,
71 RasterSource::PlaybackSettings()); 82 RasterSource::PlaybackSettings());
72 } 83 }
73 84
74 // Overridden from TileTask:
75 void ScheduleOnOriginThread(TileTaskClient* client) override {
76 // The raster buffer has no tile ids associated with it for partial update,
77 // so doesn't need to provide a valid dirty rect.
78 raster_buffer_ = client->AcquireBufferForRaster(resource_, 0, 0);
79 }
80 void CompleteOnOriginThread(TileTaskClient* client) override {
81 client->ReleaseBufferForRaster(std::move(raster_buffer_));
82 reply_.Run(!HasFinishedRunning());
83 }
84
85 protected: 85 protected:
86 ~TestRasterTaskImpl() override {} 86 ~TestRasterTaskImpl() override {}
87 87
88 private: 88 private:
89 RasterBufferProvider* raster_buffer_provider_;
89 const Resource* resource_; 90 const Resource* resource_;
90 const Reply reply_; 91 const Reply reply_;
91 scoped_ptr<RasterBuffer> raster_buffer_; 92 scoped_ptr<RasterBuffer> raster_buffer_;
92 scoped_refptr<RasterSource> raster_source_; 93 scoped_refptr<RasterSource> raster_source_;
93 94
94 DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl); 95 DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl);
95 }; 96 };
96 97
97 class BlockingTestRasterTaskImpl : public TestRasterTaskImpl { 98 class BlockingTestRasterTaskImpl : public TestRasterTaskImpl {
98 public: 99 public:
99 BlockingTestRasterTaskImpl(const Resource* resource, 100 BlockingTestRasterTaskImpl(RasterBufferProvider* raster_buffer_provider,
101 const Resource* resource,
100 const Reply& reply, 102 const Reply& reply,
101 base::Lock* lock, 103 base::Lock* lock,
102 ImageDecodeTask::Vector* dependencies) 104 Task::Vector* dependencies)
103 : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {} 105 : TestRasterTaskImpl(raster_buffer_provider,
106 resource,
107 reply,
108 dependencies),
109 lock_(lock) {}
104 110
105 // Overridden from Task: 111 // Overridden from Task:
106 void RunOnWorkerThread() override { 112 void RunOnWorkerThread() override {
107 base::AutoLock lock(*lock_); 113 base::AutoLock lock(*lock_);
108 TestRasterTaskImpl::RunOnWorkerThread(); 114 TestRasterTaskImpl::RunOnWorkerThread();
109 } 115 }
110 116
111 protected: 117 protected:
112 ~BlockingTestRasterTaskImpl() override {} 118 ~BlockingTestRasterTaskImpl() override {}
113 119
114 private: 120 private:
115 base::Lock* lock_; 121 base::Lock* lock_;
116 122
117 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterTaskImpl); 123 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterTaskImpl);
118 }; 124 };
119 125
120 class TileTaskWorkerPoolTest 126 class TileTaskWorkerPoolTest
121 : public testing::TestWithParam<TileTaskWorkerPoolType> { 127 : public testing::TestWithParam<TileTaskWorkerPoolType> {
122 public: 128 public:
123 struct RasterTaskResult { 129 struct RasterTaskResult {
124 unsigned id; 130 unsigned id;
125 bool canceled; 131 bool canceled;
126 }; 132 };
127 133
128 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 134 typedef std::vector<scoped_refptr<Task>> RasterTaskVector;
129 135
130 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 136 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
131 137
132 TileTaskWorkerPoolTest() 138 TileTaskWorkerPoolTest()
133 : context_provider_(TestContextProvider::Create()), 139 : context_provider_(TestContextProvider::Create()),
134 worker_context_provider_(TestContextProvider::CreateWorker()), 140 worker_context_provider_(TestContextProvider::CreateWorker()),
135 all_tile_tasks_finished_( 141 all_tile_tasks_finished_(
136 base::ThreadTaskRunnerHandle::Get() 142 base::ThreadTaskRunnerHandle::Get()
137 .get(), 143 .get(),
138 base::Bind(&TileTaskWorkerPoolTest::AllTileTasksFinished, 144 base::Bind(&TileTaskWorkerPoolTest::AllTileTasksFinished,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph_); 209 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph_);
204 } 210 }
205 211
206 void AppendTask(unsigned id, const gfx::Size& size) { 212 void AppendTask(unsigned id, const gfx::Size& size) {
207 scoped_ptr<ScopedResource> resource( 213 scoped_ptr<ScopedResource> resource(
208 ScopedResource::Create(resource_provider_.get())); 214 ScopedResource::Create(resource_provider_.get()));
209 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 215 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
210 RGBA_8888); 216 RGBA_8888);
211 const Resource* const_resource = resource.get(); 217 const Resource* const_resource = resource.get();
212 218
213 ImageDecodeTask::Vector empty; 219 Task::Vector empty;
214 tasks_.push_back(new TestRasterTaskImpl( 220 tasks_.push_back(new TestRasterTaskImpl(
215 const_resource, 221 tile_task_worker_pool_->AsTileTaskRunner(), const_resource,
216 base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted, 222 base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted,
217 base::Unretained(this), base::Passed(&resource), id), 223 base::Unretained(this), base::Passed(&resource), id),
218 &empty)); 224 &empty));
219 } 225 }
220 226
221 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); } 227 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); }
222 228
223 void AppendBlockingTask(unsigned id, base::Lock* lock) { 229 void AppendBlockingTask(unsigned id, base::Lock* lock) {
224 const gfx::Size size(1, 1); 230 const gfx::Size size(1, 1);
225 231
226 scoped_ptr<ScopedResource> resource( 232 scoped_ptr<ScopedResource> resource(
227 ScopedResource::Create(resource_provider_.get())); 233 ScopedResource::Create(resource_provider_.get()));
228 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 234 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
229 RGBA_8888); 235 RGBA_8888);
230 const Resource* const_resource = resource.get(); 236 const Resource* const_resource = resource.get();
231 237
232 ImageDecodeTask::Vector empty; 238 Task::Vector empty;
233 tasks_.push_back(new BlockingTestRasterTaskImpl( 239 tasks_.push_back(new BlockingTestRasterTaskImpl(
234 const_resource, 240 tile_task_worker_pool_->AsTileTaskRunner(), const_resource,
235 base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted, 241 base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted,
236 base::Unretained(this), base::Passed(&resource), id), 242 base::Unretained(this), base::Passed(&resource), id),
237 lock, &empty)); 243 lock, &empty));
238 } 244 }
239 245
240 const std::vector<RasterTaskResult>& completed_tasks() const { 246 const std::vector<RasterTaskResult>& completed_tasks() const {
241 return completed_tasks_; 247 return completed_tasks_;
242 } 248 }
243 249
244 void LoseContext(ContextProvider* context_provider) { 250 void LoseContext(ContextProvider* context_provider) {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 376
371 INSTANTIATE_TEST_CASE_P(TileTaskWorkerPoolTests, 377 INSTANTIATE_TEST_CASE_P(TileTaskWorkerPoolTests,
372 TileTaskWorkerPoolTest, 378 TileTaskWorkerPoolTest,
373 ::testing::Values(TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, 379 ::testing::Values(TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
374 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, 380 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
375 TILE_TASK_WORKER_POOL_TYPE_GPU, 381 TILE_TASK_WORKER_POOL_TYPE_GPU,
376 TILE_TASK_WORKER_POOL_TYPE_BITMAP)); 382 TILE_TASK_WORKER_POOL_TYPE_BITMAP));
377 383
378 } // namespace 384 } // namespace
379 } // namespace cc 385 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698