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

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

Issue 787803004: Update from https://crrev.com/307664 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase. Created 6 years 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/resources/raster_worker_pool.h" 5 #include "cc/resources/tile_task_worker_pool.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/cancelable_callback.h" 10 #include "base/cancelable_callback.h"
11 #include "cc/resources/bitmap_raster_worker_pool.h" 11 #include "cc/resources/bitmap_tile_task_worker_pool.h"
12 #include "cc/resources/gpu_raster_worker_pool.h" 12 #include "cc/resources/gpu_tile_task_worker_pool.h"
13 #include "cc/resources/one_copy_raster_worker_pool.h" 13 #include "cc/resources/one_copy_tile_task_worker_pool.h"
14 #include "cc/resources/picture_pile.h" 14 #include "cc/resources/picture_pile.h"
15 #include "cc/resources/picture_pile_impl.h" 15 #include "cc/resources/picture_pile_impl.h"
16 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 16 #include "cc/resources/pixel_buffer_tile_task_worker_pool.h"
17 #include "cc/resources/raster_buffer.h" 17 #include "cc/resources/raster_buffer.h"
18 #include "cc/resources/rasterizer.h"
19 #include "cc/resources/resource_pool.h" 18 #include "cc/resources/resource_pool.h"
20 #include "cc/resources/resource_provider.h" 19 #include "cc/resources/resource_provider.h"
21 #include "cc/resources/scoped_resource.h" 20 #include "cc/resources/scoped_resource.h"
22 #include "cc/resources/zero_copy_raster_worker_pool.h" 21 #include "cc/resources/tile_task_runner.h"
22 #include "cc/resources/zero_copy_tile_task_worker_pool.h"
23 #include "cc/test/fake_output_surface.h" 23 #include "cc/test/fake_output_surface.h"
24 #include "cc/test/fake_output_surface_client.h" 24 #include "cc/test/fake_output_surface_client.h"
25 #include "cc/test/fake_picture_pile_impl.h" 25 #include "cc/test/fake_picture_pile_impl.h"
26 #include "cc/test/test_gpu_memory_buffer_manager.h" 26 #include "cc/test/test_gpu_memory_buffer_manager.h"
27 #include "cc/test/test_shared_bitmap_manager.h" 27 #include "cc/test/test_shared_bitmap_manager.h"
28 #include "cc/test/test_web_graphics_context_3d.h" 28 #include "cc/test/test_web_graphics_context_3d.h"
29 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
30 30
31 namespace cc { 31 namespace cc {
32 namespace { 32 namespace {
33 33
34 const size_t kMaxTransferBufferUsageBytes = 10000U; 34 const size_t kMaxTransferBufferUsageBytes = 10000U;
35 // A resource of this dimension^2 * 4 must be greater than the above transfer 35 // A resource of this dimension^2 * 4 must be greater than the above transfer
36 // buffer constant. 36 // buffer constant.
37 const size_t kLargeResourceDimension = 1000U; 37 const size_t kLargeResourceDimension = 1000U;
38 38
39 enum RasterWorkerPoolType { 39 enum TileTaskWorkerPoolType {
40 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 40 TILE_TASK_WORKER_POOL_TYPE_PIXEL_BUFFER,
41 RASTER_WORKER_POOL_TYPE_ZERO_COPY, 41 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
42 RASTER_WORKER_POOL_TYPE_ONE_COPY, 42 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
43 RASTER_WORKER_POOL_TYPE_GPU, 43 TILE_TASK_WORKER_POOL_TYPE_GPU,
44 RASTER_WORKER_POOL_TYPE_BITMAP 44 TILE_TASK_WORKER_POOL_TYPE_BITMAP
45 }; 45 };
46 46
47 class TestRasterTaskImpl : public RasterTask { 47 class TestRasterTaskImpl : public RasterTask {
48 public: 48 public:
49 typedef base::Callback<void(const RasterSource::SolidColorAnalysis& analysis, 49 typedef base::Callback<void(const RasterSource::SolidColorAnalysis& analysis,
50 bool was_canceled)> Reply; 50 bool was_canceled)> Reply;
51 51
52 TestRasterTaskImpl(const Resource* resource, 52 TestRasterTaskImpl(const Resource* resource,
53 const Reply& reply, 53 const Reply& reply,
54 ImageDecodeTask::Vector* dependencies) 54 ImageDecodeTask::Vector* dependencies)
55 : RasterTask(resource, dependencies), 55 : RasterTask(resource, dependencies),
56 reply_(reply), 56 reply_(reply),
57 picture_pile_(FakePicturePileImpl::CreateEmptyPile(gfx::Size(1, 1), 57 picture_pile_(FakePicturePileImpl::CreateEmptyPile(gfx::Size(1, 1),
58 gfx::Size(1, 1))) {} 58 gfx::Size(1, 1))) {}
59 59
60 // Overridden from Task: 60 // Overridden from Task:
61 void RunOnWorkerThread() override { 61 void RunOnWorkerThread() override {
62 raster_buffer_->Playback(picture_pile_.get(), gfx::Rect(0, 0, 1, 1), 1.0); 62 raster_buffer_->Playback(picture_pile_.get(), gfx::Rect(0, 0, 1, 1), 1.0);
63 } 63 }
64 64
65 // Overridden from RasterizerTask: 65 // Overridden from TileTask:
66 void ScheduleOnOriginThread(RasterizerTaskClient* client) override { 66 void ScheduleOnOriginThread(TileTaskClient* client) override {
67 raster_buffer_ = client->AcquireBufferForRaster(resource()); 67 raster_buffer_ = client->AcquireBufferForRaster(resource());
68 } 68 }
69 void CompleteOnOriginThread(RasterizerTaskClient* client) override { 69 void CompleteOnOriginThread(TileTaskClient* client) override {
70 client->ReleaseBufferForRaster(raster_buffer_.Pass()); 70 client->ReleaseBufferForRaster(raster_buffer_.Pass());
71 } 71 }
72 void RunReplyOnOriginThread() override { 72 void RunReplyOnOriginThread() override {
73 reply_.Run(RasterSource::SolidColorAnalysis(), !HasFinishedRunning()); 73 reply_.Run(RasterSource::SolidColorAnalysis(), !HasFinishedRunning());
74 } 74 }
75 75
76 protected: 76 protected:
77 ~TestRasterTaskImpl() override {} 77 ~TestRasterTaskImpl() override {}
78 78
79 private: 79 private:
(...skipping 11 matching lines...) Expand all
91 base::Lock* lock, 91 base::Lock* lock,
92 ImageDecodeTask::Vector* dependencies) 92 ImageDecodeTask::Vector* dependencies)
93 : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {} 93 : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {}
94 94
95 // Overridden from Task: 95 // Overridden from Task:
96 void RunOnWorkerThread() override { 96 void RunOnWorkerThread() override {
97 base::AutoLock lock(*lock_); 97 base::AutoLock lock(*lock_);
98 TestRasterTaskImpl::RunOnWorkerThread(); 98 TestRasterTaskImpl::RunOnWorkerThread();
99 } 99 }
100 100
101 // Overridden from RasterizerTask: 101 // Overridden from TileTask:
102 void RunReplyOnOriginThread() override {} 102 void RunReplyOnOriginThread() override {}
103 103
104 protected: 104 protected:
105 ~BlockingTestRasterTaskImpl() override {} 105 ~BlockingTestRasterTaskImpl() override {}
106 106
107 private: 107 private:
108 base::Lock* lock_; 108 base::Lock* lock_;
109 109
110 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterTaskImpl); 110 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterTaskImpl);
111 }; 111 };
112 112
113 class RasterWorkerPoolTest 113 class TileTaskWorkerPoolTest
114 : public testing::TestWithParam<RasterWorkerPoolType>, 114 : public testing::TestWithParam<TileTaskWorkerPoolType>,
115 public RasterizerClient { 115 public TileTaskRunnerClient {
116 public: 116 public:
117 struct RasterTaskResult { 117 struct RasterTaskResult {
118 unsigned id; 118 unsigned id;
119 bool canceled; 119 bool canceled;
120 }; 120 };
121 121
122 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 122 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector;
123 123
124 enum NamedTaskSet { ALL, REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW }; 124 enum NamedTaskSet { ALL, REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW };
125 125
126 RasterWorkerPoolTest() 126 TileTaskWorkerPoolTest()
127 : context_provider_(TestContextProvider::Create()), 127 : context_provider_(TestContextProvider::Create()),
128 timeout_seconds_(5), 128 timeout_seconds_(5),
129 timed_out_(false) {} 129 timed_out_(false) {}
130 130
131 // Overridden from testing::Test: 131 // Overridden from testing::Test:
132 void SetUp() override { 132 void SetUp() override {
133 switch (GetParam()) { 133 switch (GetParam()) {
134 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 134 case TILE_TASK_WORKER_POOL_TYPE_PIXEL_BUFFER:
135 Create3dOutputSurfaceAndResourceProvider(); 135 Create3dOutputSurfaceAndResourceProvider();
136 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 136 tile_task_worker_pool_ = PixelBufferTileTaskWorkerPool::Create(
137 base::MessageLoopProxy::current().get(), 137 base::MessageLoopProxy::current().get(),
138 RasterWorkerPool::GetTaskGraphRunner(), 138 TileTaskWorkerPool::GetTaskGraphRunner(), context_provider_.get(),
139 context_provider_.get(), 139 resource_provider_.get(), kMaxTransferBufferUsageBytes);
140 resource_provider_.get(),
141 kMaxTransferBufferUsageBytes);
142 break; 140 break;
143 case RASTER_WORKER_POOL_TYPE_ZERO_COPY: 141 case TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY:
144 Create3dOutputSurfaceAndResourceProvider(); 142 Create3dOutputSurfaceAndResourceProvider();
145 raster_worker_pool_ = ZeroCopyRasterWorkerPool::Create( 143 tile_task_worker_pool_ = ZeroCopyTileTaskWorkerPool::Create(
146 base::MessageLoopProxy::current().get(), 144 base::MessageLoopProxy::current().get(),
147 RasterWorkerPool::GetTaskGraphRunner(), 145 TileTaskWorkerPool::GetTaskGraphRunner(), resource_provider_.get());
148 resource_provider_.get());
149 break; 146 break;
150 case RASTER_WORKER_POOL_TYPE_ONE_COPY: 147 case TILE_TASK_WORKER_POOL_TYPE_ONE_COPY:
151 Create3dOutputSurfaceAndResourceProvider(); 148 Create3dOutputSurfaceAndResourceProvider();
152 staging_resource_pool_ = ResourcePool::Create( 149 staging_resource_pool_ = ResourcePool::Create(resource_provider_.get(),
153 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888); 150 GL_TEXTURE_2D, RGBA_8888);
154 raster_worker_pool_ = OneCopyRasterWorkerPool::Create( 151 tile_task_worker_pool_ = OneCopyTileTaskWorkerPool::Create(
155 base::MessageLoopProxy::current().get(), 152 base::MessageLoopProxy::current().get(),
156 RasterWorkerPool::GetTaskGraphRunner(), 153 TileTaskWorkerPool::GetTaskGraphRunner(), context_provider_.get(),
157 context_provider_.get(), 154 resource_provider_.get(), staging_resource_pool_.get());
158 resource_provider_.get(),
159 staging_resource_pool_.get());
160 break; 155 break;
161 case RASTER_WORKER_POOL_TYPE_GPU: 156 case TILE_TASK_WORKER_POOL_TYPE_GPU:
162 Create3dOutputSurfaceAndResourceProvider(); 157 Create3dOutputSurfaceAndResourceProvider();
163 raster_worker_pool_ = 158 tile_task_worker_pool_ = GpuTileTaskWorkerPool::Create(
164 GpuRasterWorkerPool::Create(base::MessageLoopProxy::current().get(), 159 base::MessageLoopProxy::current().get(), context_provider_.get(),
165 context_provider_.get(), 160 resource_provider_.get(), false);
166 resource_provider_.get(),
167 false);
168 break; 161 break;
169 case RASTER_WORKER_POOL_TYPE_BITMAP: 162 case TILE_TASK_WORKER_POOL_TYPE_BITMAP:
170 CreateSoftwareOutputSurfaceAndResourceProvider(); 163 CreateSoftwareOutputSurfaceAndResourceProvider();
171 raster_worker_pool_ = BitmapRasterWorkerPool::Create( 164 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create(
172 base::MessageLoopProxy::current().get(), 165 base::MessageLoopProxy::current().get(),
173 RasterWorkerPool::GetTaskGraphRunner(), 166 TileTaskWorkerPool::GetTaskGraphRunner(), resource_provider_.get());
174 resource_provider_.get());
175 break; 167 break;
176 } 168 }
177 169
178 DCHECK(raster_worker_pool_); 170 DCHECK(tile_task_worker_pool_);
179 raster_worker_pool_->AsRasterizer()->SetClient(this); 171 tile_task_worker_pool_->AsTileTaskRunner()->SetClient(this);
180 } 172 }
181 173
182 void TearDown() override { 174 void TearDown() override {
183 raster_worker_pool_->AsRasterizer()->Shutdown(); 175 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown();
184 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); 176 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
185 } 177 }
186 178
187 // Overriden from RasterWorkerPoolClient: 179 // Overriden from TileTaskWorkerPoolClient:
188 void DidFinishRunningTasks(TaskSet task_set) override { 180 void DidFinishRunningTileTasks(TaskSet task_set) override {
189 if (task_set == ALL) { 181 if (task_set == ALL) {
190 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); 182 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
191 base::MessageLoop::current()->Quit(); 183 base::MessageLoop::current()->Quit();
192 } 184 }
193 } 185 }
194 TaskSetCollection TasksThatShouldBeForcedToComplete() const override { 186 TaskSetCollection TasksThatShouldBeForcedToComplete() const override {
195 return TaskSetCollection(); 187 return TaskSetCollection();
196 } 188 }
197 189
198 void RunMessageLoopUntilAllTasksHaveCompleted() { 190 void RunMessageLoopUntilAllTasksHaveCompleted() {
199 if (timeout_seconds_) { 191 if (timeout_seconds_) {
200 timeout_.Reset( 192 timeout_.Reset(base::Bind(&TileTaskWorkerPoolTest::OnTimeout,
201 base::Bind(&RasterWorkerPoolTest::OnTimeout, base::Unretained(this))); 193 base::Unretained(this)));
202 base::MessageLoopProxy::current()->PostDelayedTask( 194 base::MessageLoopProxy::current()->PostDelayedTask(
203 FROM_HERE, 195 FROM_HERE, timeout_.callback(),
204 timeout_.callback(),
205 base::TimeDelta::FromSeconds(timeout_seconds_)); 196 base::TimeDelta::FromSeconds(timeout_seconds_));
206 } 197 }
207 198
208 base::MessageLoop::current()->Run(); 199 base::MessageLoop::current()->Run();
209 200
210 timeout_.Cancel(); 201 timeout_.Cancel();
211 202
212 ASSERT_FALSE(timed_out_) << "Test timed out"; 203 ASSERT_FALSE(timed_out_) << "Test timed out";
213 } 204 }
214 205
215 void ScheduleTasks() { 206 void ScheduleTasks() {
216 RasterTaskQueue queue; 207 TileTaskQueue queue;
217 208
218 for (RasterTaskVector::const_iterator it = tasks_.begin(); 209 for (RasterTaskVector::const_iterator it = tasks_.begin();
219 it != tasks_.end(); 210 it != tasks_.end(); ++it) {
220 ++it) {
221 TaskSetCollection task_sets; 211 TaskSetCollection task_sets;
222 task_sets[ALL] = true; 212 task_sets[ALL] = true;
223 queue.items.push_back(RasterTaskQueue::Item(it->get(), task_sets)); 213 queue.items.push_back(TileTaskQueue::Item(it->get(), task_sets));
224 } 214 }
225 215
226 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue); 216 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue);
227 } 217 }
228 218
229 void AppendTask(unsigned id, const gfx::Size& size) { 219 void AppendTask(unsigned id, const gfx::Size& size) {
230 scoped_ptr<ScopedResource> resource( 220 scoped_ptr<ScopedResource> resource(
231 ScopedResource::Create(resource_provider_.get())); 221 ScopedResource::Create(resource_provider_.get()));
232 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888); 222 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888);
233 const Resource* const_resource = resource.get(); 223 const Resource* const_resource = resource.get();
234 224
235 ImageDecodeTask::Vector empty; 225 ImageDecodeTask::Vector empty;
236 tasks_.push_back(new TestRasterTaskImpl( 226 tasks_.push_back(new TestRasterTaskImpl(
237 const_resource, 227 const_resource,
238 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 228 base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted,
239 base::Unretained(this), 229 base::Unretained(this), base::Passed(&resource), id),
240 base::Passed(&resource),
241 id),
242 &empty)); 230 &empty));
243 } 231 }
244 232
245 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); } 233 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); }
246 234
247 void AppendBlockingTask(unsigned id, base::Lock* lock) { 235 void AppendBlockingTask(unsigned id, base::Lock* lock) {
248 const gfx::Size size(1, 1); 236 const gfx::Size size(1, 1);
249 237
250 scoped_ptr<ScopedResource> resource( 238 scoped_ptr<ScopedResource> resource(
251 ScopedResource::Create(resource_provider_.get())); 239 ScopedResource::Create(resource_provider_.get()));
252 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888); 240 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888);
253 const Resource* const_resource = resource.get(); 241 const Resource* const_resource = resource.get();
254 242
255 ImageDecodeTask::Vector empty; 243 ImageDecodeTask::Vector empty;
256 tasks_.push_back(new BlockingTestRasterTaskImpl( 244 tasks_.push_back(new BlockingTestRasterTaskImpl(
257 const_resource, 245 const_resource,
258 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 246 base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted,
259 base::Unretained(this), 247 base::Unretained(this), base::Passed(&resource), id),
260 base::Passed(&resource), 248 lock, &empty));
261 id),
262 lock,
263 &empty));
264 } 249 }
265 250
266 const std::vector<RasterTaskResult>& completed_tasks() const { 251 const std::vector<RasterTaskResult>& completed_tasks() const {
267 return completed_tasks_; 252 return completed_tasks_;
268 } 253 }
269 254
270 private: 255 private:
271 void Create3dOutputSurfaceAndResourceProvider() { 256 void Create3dOutputSurfaceAndResourceProvider() {
272 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); 257 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
273 CHECK(output_surface_->BindToClient(&output_surface_client_)); 258 CHECK(output_surface_->BindToClient(&output_surface_client_));
274 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 259 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d();
275 context3d->set_support_sync_query(true); 260 context3d->set_support_sync_query(true);
276 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 261 resource_provider_ = ResourceProvider::Create(output_surface_.get(), NULL,
277 NULL,
278 &gpu_memory_buffer_manager_, 262 &gpu_memory_buffer_manager_,
279 NULL, 263 NULL, 0, false, 1).Pass();
280 0,
281 false,
282 1).Pass();
283 } 264 }
284 265
285 void CreateSoftwareOutputSurfaceAndResourceProvider() { 266 void CreateSoftwareOutputSurfaceAndResourceProvider() {
286 output_surface_ = FakeOutputSurface::CreateSoftware( 267 output_surface_ = FakeOutputSurface::CreateSoftware(
287 make_scoped_ptr(new SoftwareOutputDevice)); 268 make_scoped_ptr(new SoftwareOutputDevice));
288 CHECK(output_surface_->BindToClient(&output_surface_client_)); 269 CHECK(output_surface_->BindToClient(&output_surface_client_));
289 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 270 resource_provider_ =
290 &shared_bitmap_manager_, 271 ResourceProvider::Create(output_surface_.get(), &shared_bitmap_manager_,
291 NULL, 272 NULL, NULL, 0, false, 1).Pass();
292 NULL,
293 0,
294 false,
295 1).Pass();
296 } 273 }
297 274
298 void OnTaskCompleted(scoped_ptr<ScopedResource> resource, 275 void OnTaskCompleted(scoped_ptr<ScopedResource> resource,
299 unsigned id, 276 unsigned id,
300 const RasterSource::SolidColorAnalysis& analysis, 277 const RasterSource::SolidColorAnalysis& analysis,
301 bool was_canceled) { 278 bool was_canceled) {
302 RasterTaskResult result; 279 RasterTaskResult result;
303 result.id = id; 280 result.id = id;
304 result.canceled = was_canceled; 281 result.canceled = was_canceled;
305 completed_tasks_.push_back(result); 282 completed_tasks_.push_back(result);
306 } 283 }
307 284
308 void OnTimeout() { 285 void OnTimeout() {
309 timed_out_ = true; 286 timed_out_ = true;
310 base::MessageLoop::current()->Quit(); 287 base::MessageLoop::current()->Quit();
311 } 288 }
312 289
313 protected: 290 protected:
314 scoped_refptr<TestContextProvider> context_provider_; 291 scoped_refptr<TestContextProvider> context_provider_;
315 FakeOutputSurfaceClient output_surface_client_; 292 FakeOutputSurfaceClient output_surface_client_;
316 scoped_ptr<FakeOutputSurface> output_surface_; 293 scoped_ptr<FakeOutputSurface> output_surface_;
317 scoped_ptr<ResourceProvider> resource_provider_; 294 scoped_ptr<ResourceProvider> resource_provider_;
318 scoped_ptr<ResourcePool> staging_resource_pool_; 295 scoped_ptr<ResourcePool> staging_resource_pool_;
319 scoped_ptr<RasterWorkerPool> raster_worker_pool_; 296 scoped_ptr<TileTaskWorkerPool> tile_task_worker_pool_;
320 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 297 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
321 TestSharedBitmapManager shared_bitmap_manager_; 298 TestSharedBitmapManager shared_bitmap_manager_;
322 base::CancelableClosure timeout_; 299 base::CancelableClosure timeout_;
323 int timeout_seconds_; 300 int timeout_seconds_;
324 bool timed_out_; 301 bool timed_out_;
325 RasterTaskVector tasks_; 302 RasterTaskVector tasks_;
326 std::vector<RasterTaskResult> completed_tasks_; 303 std::vector<RasterTaskResult> completed_tasks_;
327 }; 304 };
328 305
329 TEST_P(RasterWorkerPoolTest, Basic) { 306 TEST_P(TileTaskWorkerPoolTest, Basic) {
330 AppendTask(0u); 307 AppendTask(0u);
331 AppendTask(1u); 308 AppendTask(1u);
332 ScheduleTasks(); 309 ScheduleTasks();
333 310
334 RunMessageLoopUntilAllTasksHaveCompleted(); 311 RunMessageLoopUntilAllTasksHaveCompleted();
335 312
336 ASSERT_EQ(2u, completed_tasks().size()); 313 ASSERT_EQ(2u, completed_tasks().size());
337 EXPECT_FALSE(completed_tasks()[0].canceled); 314 EXPECT_FALSE(completed_tasks()[0].canceled);
338 EXPECT_FALSE(completed_tasks()[1].canceled); 315 EXPECT_FALSE(completed_tasks()[1].canceled);
339 } 316 }
340 317
341 TEST_P(RasterWorkerPoolTest, FailedMapResource) { 318 TEST_P(TileTaskWorkerPoolTest, FailedMapResource) {
342 if (GetParam() == RASTER_WORKER_POOL_TYPE_BITMAP) 319 if (GetParam() == TILE_TASK_WORKER_POOL_TYPE_BITMAP)
343 return; 320 return;
344 321
345 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 322 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d();
346 context3d->set_times_map_buffer_chromium_succeeds(0); 323 context3d->set_times_map_buffer_chromium_succeeds(0);
347 AppendTask(0u); 324 AppendTask(0u);
348 ScheduleTasks(); 325 ScheduleTasks();
349 326
350 RunMessageLoopUntilAllTasksHaveCompleted(); 327 RunMessageLoopUntilAllTasksHaveCompleted();
351 328
352 ASSERT_EQ(1u, completed_tasks().size()); 329 ASSERT_EQ(1u, completed_tasks().size());
353 EXPECT_FALSE(completed_tasks()[0].canceled); 330 EXPECT_FALSE(completed_tasks()[0].canceled);
354 } 331 }
355 332
356 // This test checks that replacing a pending raster task with another does 333 // This test checks that replacing a pending raster task with another does
357 // not prevent the DidFinishRunningTasks notification from being sent. 334 // not prevent the DidFinishRunningTileTasks notification from being sent.
358 TEST_P(RasterWorkerPoolTest, FalseThrottling) { 335 TEST_P(TileTaskWorkerPoolTest, FalseThrottling) {
359 base::Lock lock; 336 base::Lock lock;
360 337
361 // Schedule a task that is prevented from completing with a lock. 338 // Schedule a task that is prevented from completing with a lock.
362 lock.Acquire(); 339 lock.Acquire();
363 AppendBlockingTask(0u, &lock); 340 AppendBlockingTask(0u, &lock);
364 ScheduleTasks(); 341 ScheduleTasks();
365 342
366 // Schedule another task to replace the still-pending task. Because the old 343 // Schedule another task to replace the still-pending task. Because the old
367 // task is not a throttled task in the new task set, it should not prevent 344 // task is not a throttled task in the new task set, it should not prevent
368 // DidFinishRunningTasks from getting signaled. 345 // DidFinishRunningTileTasks from getting signaled.
369 RasterTaskVector tasks; 346 RasterTaskVector tasks;
370 tasks.swap(tasks_); 347 tasks.swap(tasks_);
371 AppendTask(1u); 348 AppendTask(1u);
372 ScheduleTasks(); 349 ScheduleTasks();
373 350
374 // Unblock the first task to allow the second task to complete. 351 // Unblock the first task to allow the second task to complete.
375 lock.Release(); 352 lock.Release();
376 353
377 RunMessageLoopUntilAllTasksHaveCompleted(); 354 RunMessageLoopUntilAllTasksHaveCompleted();
378 } 355 }
379 356
380 TEST_P(RasterWorkerPoolTest, LargeResources) { 357 TEST_P(TileTaskWorkerPoolTest, LargeResources) {
381 gfx::Size size(kLargeResourceDimension, kLargeResourceDimension); 358 gfx::Size size(kLargeResourceDimension, kLargeResourceDimension);
382 359
383 { 360 {
384 // Verify a resource of this size is larger than the transfer buffer. 361 // Verify a resource of this size is larger than the transfer buffer.
385 scoped_ptr<ScopedResource> resource( 362 scoped_ptr<ScopedResource> resource(
386 ScopedResource::Create(resource_provider_.get())); 363 ScopedResource::Create(resource_provider_.get()));
387 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888); 364 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888);
388 EXPECT_GE(resource->bytes(), kMaxTransferBufferUsageBytes); 365 EXPECT_GE(resource->bytes(), kMaxTransferBufferUsageBytes);
389 } 366 }
390 367
391 AppendTask(0u, size); 368 AppendTask(0u, size);
392 AppendTask(1u, size); 369 AppendTask(1u, size);
393 AppendTask(2u, size); 370 AppendTask(2u, size);
394 ScheduleTasks(); 371 ScheduleTasks();
395 372
396 // This will time out if a resource that is larger than the throttle limit 373 // This will time out if a resource that is larger than the throttle limit
397 // never gets scheduled. 374 // never gets scheduled.
398 RunMessageLoopUntilAllTasksHaveCompleted(); 375 RunMessageLoopUntilAllTasksHaveCompleted();
399 } 376 }
400 377
401 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, 378 INSTANTIATE_TEST_CASE_P(
402 RasterWorkerPoolTest, 379 TileTaskWorkerPoolTests,
403 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 380 TileTaskWorkerPoolTest,
404 RASTER_WORKER_POOL_TYPE_ZERO_COPY, 381 ::testing::Values(TILE_TASK_WORKER_POOL_TYPE_PIXEL_BUFFER,
405 RASTER_WORKER_POOL_TYPE_ONE_COPY, 382 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
406 RASTER_WORKER_POOL_TYPE_GPU, 383 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
407 RASTER_WORKER_POOL_TYPE_BITMAP)); 384 TILE_TASK_WORKER_POOL_TYPE_GPU,
385 TILE_TASK_WORKER_POOL_TYPE_BITMAP));
408 386
409 } // namespace 387 } // namespace
410 } // namespace cc 388 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_task_worker_pool_perftest.cc ('k') | cc/resources/zero_copy_raster_worker_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698