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

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

Issue 602493003: cc: Add BitmapRasterWorkerPool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@reduce-transfer-buffer-limit-use
Patch Set: Created 6 years, 3 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/resources/raster_worker_pool.h" 5 #include "cc/resources/raster_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/gpu_raster_worker_pool.h" 12 #include "cc/resources/gpu_raster_worker_pool.h"
12 #include "cc/resources/one_copy_raster_worker_pool.h" 13 #include "cc/resources/one_copy_raster_worker_pool.h"
13 #include "cc/resources/picture_pile.h" 14 #include "cc/resources/picture_pile.h"
14 #include "cc/resources/picture_pile_impl.h" 15 #include "cc/resources/picture_pile_impl.h"
15 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 16 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
16 #include "cc/resources/raster_buffer.h" 17 #include "cc/resources/raster_buffer.h"
17 #include "cc/resources/rasterizer.h" 18 #include "cc/resources/rasterizer.h"
18 #include "cc/resources/resource_pool.h" 19 #include "cc/resources/resource_pool.h"
19 #include "cc/resources/resource_provider.h" 20 #include "cc/resources/resource_provider.h"
20 #include "cc/resources/scoped_resource.h" 21 #include "cc/resources/scoped_resource.h"
21 #include "cc/resources/zero_copy_raster_worker_pool.h" 22 #include "cc/resources/zero_copy_raster_worker_pool.h"
22 #include "cc/test/fake_output_surface.h" 23 #include "cc/test/fake_output_surface.h"
23 #include "cc/test/fake_output_surface_client.h" 24 #include "cc/test/fake_output_surface_client.h"
24 #include "cc/test/test_shared_bitmap_manager.h" 25 #include "cc/test/test_shared_bitmap_manager.h"
25 #include "cc/test/test_web_graphics_context_3d.h" 26 #include "cc/test/test_web_graphics_context_3d.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 28
28 namespace cc { 29 namespace cc {
29 namespace { 30 namespace {
30 31
31 const size_t kMaxTransferBufferUsageBytes = 10000U; 32 const size_t kMaxTransferBufferUsageBytes = 10000U;
32 // A resource of this dimension^2 * 4 must be greater than the above transfer 33 // A resource of this dimension^2 * 4 must be greater than the above transfer
33 // buffer constant. 34 // buffer constant.
34 const size_t kLargeResourceDimension = 1000U; 35 const size_t kLargeResourceDimension = 1000U;
35 36
36 enum RasterWorkerPoolType { 37 enum RasterWorkerPoolType {
37 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 38 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
38 RASTER_WORKER_POOL_TYPE_ZERO_COPY, 39 RASTER_WORKER_POOL_TYPE_ZERO_COPY,
39 RASTER_WORKER_POOL_TYPE_ONE_COPY, 40 RASTER_WORKER_POOL_TYPE_ONE_COPY,
40 RASTER_WORKER_POOL_TYPE_GPU 41 RASTER_WORKER_POOL_TYPE_GPU,
42 RASTER_WORKER_POOL_TYPE_BITMAP
41 }; 43 };
42 44
43 class TestRasterTaskImpl : public RasterTask { 45 class TestRasterTaskImpl : public RasterTask {
44 public: 46 public:
45 typedef base::Callback< 47 typedef base::Callback<
46 void(const PicturePileImpl::Analysis& analysis, bool was_canceled)> Reply; 48 void(const PicturePileImpl::Analysis& analysis, bool was_canceled)> Reply;
47 49
48 TestRasterTaskImpl(const Resource* resource, 50 TestRasterTaskImpl(const Resource* resource,
49 const Reply& reply, 51 const Reply& reply,
50 ImageDecodeTask::Vector* dependencies) 52 ImageDecodeTask::Vector* dependencies)
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 bool canceled; 116 bool canceled;
115 }; 117 };
116 118
117 typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector; 119 typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector;
118 120
119 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION = 0, ALL = 1 }; 121 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION = 0, ALL = 1 };
120 122
121 RasterWorkerPoolTest() 123 RasterWorkerPoolTest()
122 : context_provider_(TestContextProvider::Create()), 124 : context_provider_(TestContextProvider::Create()),
123 timeout_seconds_(5), 125 timeout_seconds_(5),
124 timed_out_(false) { 126 timed_out_(false) {}
125 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
126 CHECK(output_surface_->BindToClient(&output_surface_client_));
127 127
128 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 128 // Overridden from testing::Test:
129 context3d->set_support_sync_query(true); 129 virtual void SetUp() OVERRIDE {
130
131 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
132 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
133 shared_bitmap_manager_.get(),
134 NULL,
135 0,
136 false,
137 1,
138 false).Pass();
139 staging_resource_pool_ = ResourcePool::Create(
140 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
141
142 switch (GetParam()) { 130 switch (GetParam()) {
143 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 131 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
132 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
vmpstr 2014/09/24 16:31:51 here as well
reveman 2014/09/24 17:25:27 Done.
133 CHECK(output_surface_->BindToClient(&output_surface_client_));
134 resource_provider_ =
135 ResourceProvider::Create(
136 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass();
144 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 137 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
145 base::MessageLoopProxy::current().get(), 138 base::MessageLoopProxy::current().get(),
146 RasterWorkerPool::GetTaskGraphRunner(), 139 RasterWorkerPool::GetTaskGraphRunner(),
147 context_provider_.get(), 140 context_provider_.get(),
148 resource_provider_.get(), 141 resource_provider_.get(),
149 kMaxTransferBufferUsageBytes); 142 kMaxTransferBufferUsageBytes);
150 break; 143 break;
151 case RASTER_WORKER_POOL_TYPE_ZERO_COPY: 144 case RASTER_WORKER_POOL_TYPE_ZERO_COPY:
145 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
146 CHECK(output_surface_->BindToClient(&output_surface_client_));
147 resource_provider_ =
148 ResourceProvider::Create(
149 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass();
152 raster_worker_pool_ = ZeroCopyRasterWorkerPool::Create( 150 raster_worker_pool_ = ZeroCopyRasterWorkerPool::Create(
153 base::MessageLoopProxy::current().get(), 151 base::MessageLoopProxy::current().get(),
154 RasterWorkerPool::GetTaskGraphRunner(), 152 RasterWorkerPool::GetTaskGraphRunner(),
155 resource_provider_.get()); 153 resource_provider_.get());
156 break; 154 break;
157 case RASTER_WORKER_POOL_TYPE_ONE_COPY: 155 case RASTER_WORKER_POOL_TYPE_ONE_COPY:
156 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
157 CHECK(output_surface_->BindToClient(&output_surface_client_));
158 context_provider_->TestContext3d()->set_support_sync_query(true);
159 resource_provider_ =
160 ResourceProvider::Create(
161 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass();
162 staging_resource_pool_ = ResourcePool::Create(
163 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
158 raster_worker_pool_ = OneCopyRasterWorkerPool::Create( 164 raster_worker_pool_ = OneCopyRasterWorkerPool::Create(
159 base::MessageLoopProxy::current().get(), 165 base::MessageLoopProxy::current().get(),
160 RasterWorkerPool::GetTaskGraphRunner(), 166 RasterWorkerPool::GetTaskGraphRunner(),
161 context_provider_.get(), 167 context_provider_.get(),
162 resource_provider_.get(), 168 resource_provider_.get(),
163 staging_resource_pool_.get()); 169 staging_resource_pool_.get());
164 break; 170 break;
165 case RASTER_WORKER_POOL_TYPE_GPU: 171 case RASTER_WORKER_POOL_TYPE_GPU:
172 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
173 CHECK(output_surface_->BindToClient(&output_surface_client_));
174 resource_provider_ =
175 ResourceProvider::Create(
176 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass();
166 raster_worker_pool_ = 177 raster_worker_pool_ =
167 GpuRasterWorkerPool::Create(base::MessageLoopProxy::current().get(), 178 GpuRasterWorkerPool::Create(base::MessageLoopProxy::current().get(),
168 context_provider_.get(), 179 context_provider_.get(),
169 resource_provider_.get()); 180 resource_provider_.get());
170 break; 181 break;
182 case RASTER_WORKER_POOL_TYPE_BITMAP:
183 output_surface_ = FakeOutputSurface::CreateSoftware(
184 make_scoped_ptr(new SoftwareOutputDevice));
185 CHECK(output_surface_->BindToClient(&output_surface_client_));
186 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
187 &shared_bitmap_manager_,
188 NULL,
189 0,
190 false,
191 1,
192 false).Pass();
193 raster_worker_pool_ = BitmapRasterWorkerPool::Create(
194 base::MessageLoopProxy::current().get(),
195 RasterWorkerPool::GetTaskGraphRunner(),
196 resource_provider_.get());
197 break;
171 } 198 }
172 199
173 DCHECK(raster_worker_pool_); 200 DCHECK(raster_worker_pool_);
174 raster_worker_pool_->AsRasterizer()->SetClient(this); 201 raster_worker_pool_->AsRasterizer()->SetClient(this);
175 } 202 }
176 virtual ~RasterWorkerPoolTest() {
177 staging_resource_pool_.reset();
178 resource_provider_.reset();
179 }
180
181 // Overridden from testing::Test:
182 virtual void TearDown() OVERRIDE { 203 virtual void TearDown() OVERRIDE {
183 raster_worker_pool_->AsRasterizer()->Shutdown(); 204 raster_worker_pool_->AsRasterizer()->Shutdown();
184 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); 205 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
185 } 206 }
186 207
187 // Overriden from RasterWorkerPoolClient: 208 // Overriden from RasterWorkerPoolClient:
188 virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE { 209 virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE {
189 if (task_set == ALL) { 210 if (task_set == ALL) {
190 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); 211 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
191 base::MessageLoop::current()->Quit(); 212 base::MessageLoop::current()->Quit();
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 301
281 void OnTimeout() { 302 void OnTimeout() {
282 timed_out_ = true; 303 timed_out_ = true;
283 base::MessageLoop::current()->Quit(); 304 base::MessageLoop::current()->Quit();
284 } 305 }
285 306
286 protected: 307 protected:
287 scoped_refptr<TestContextProvider> context_provider_; 308 scoped_refptr<TestContextProvider> context_provider_;
288 FakeOutputSurfaceClient output_surface_client_; 309 FakeOutputSurfaceClient output_surface_client_;
289 scoped_ptr<FakeOutputSurface> output_surface_; 310 scoped_ptr<FakeOutputSurface> output_surface_;
290 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
291 scoped_ptr<ResourceProvider> resource_provider_; 311 scoped_ptr<ResourceProvider> resource_provider_;
292 scoped_ptr<ResourcePool> staging_resource_pool_; 312 scoped_ptr<ResourcePool> staging_resource_pool_;
293 scoped_ptr<RasterWorkerPool> raster_worker_pool_; 313 scoped_ptr<RasterWorkerPool> raster_worker_pool_;
314 TestSharedBitmapManager shared_bitmap_manager_;
294 base::CancelableClosure timeout_; 315 base::CancelableClosure timeout_;
295 int timeout_seconds_; 316 int timeout_seconds_;
296 bool timed_out_; 317 bool timed_out_;
297 RasterTaskVector tasks_; 318 RasterTaskVector tasks_;
298 std::vector<RasterTaskResult> completed_tasks_; 319 std::vector<RasterTaskResult> completed_tasks_;
299 }; 320 };
300 321
301 TEST_P(RasterWorkerPoolTest, Basic) { 322 TEST_P(RasterWorkerPoolTest, Basic) {
302 AppendTask(0u); 323 AppendTask(0u);
303 AppendTask(1u); 324 AppendTask(1u);
304 ScheduleTasks(); 325 ScheduleTasks();
305 326
306 RunMessageLoopUntilAllTasksHaveCompleted(); 327 RunMessageLoopUntilAllTasksHaveCompleted();
307 328
308 ASSERT_EQ(2u, completed_tasks().size()); 329 ASSERT_EQ(2u, completed_tasks().size());
309 EXPECT_FALSE(completed_tasks()[0].canceled); 330 EXPECT_FALSE(completed_tasks()[0].canceled);
310 EXPECT_FALSE(completed_tasks()[1].canceled); 331 EXPECT_FALSE(completed_tasks()[1].canceled);
311 } 332 }
312 333
313 TEST_P(RasterWorkerPoolTest, FailedMapResource) { 334 TEST_P(RasterWorkerPoolTest, FailedMapResource) {
335 if (GetParam() == RASTER_WORKER_POOL_TYPE_BITMAP)
336 return;
337
314 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 338 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d();
315 context3d->set_times_map_image_chromium_succeeds(0); 339 context3d->set_times_map_image_chromium_succeeds(0);
316 context3d->set_times_map_buffer_chromium_succeeds(0); 340 context3d->set_times_map_buffer_chromium_succeeds(0);
317 AppendTask(0u); 341 AppendTask(0u);
318 ScheduleTasks(); 342 ScheduleTasks();
319 343
320 RunMessageLoopUntilAllTasksHaveCompleted(); 344 RunMessageLoopUntilAllTasksHaveCompleted();
321 345
322 ASSERT_EQ(1u, completed_tasks().size()); 346 ASSERT_EQ(1u, completed_tasks().size());
323 EXPECT_FALSE(completed_tasks()[0].canceled); 347 EXPECT_FALSE(completed_tasks()[0].canceled);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 // This will time out if a resource that is larger than the throttle limit 390 // This will time out if a resource that is larger than the throttle limit
367 // never gets scheduled. 391 // never gets scheduled.
368 RunMessageLoopUntilAllTasksHaveCompleted(); 392 RunMessageLoopUntilAllTasksHaveCompleted();
369 } 393 }
370 394
371 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, 395 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests,
372 RasterWorkerPoolTest, 396 RasterWorkerPoolTest,
373 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 397 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
374 RASTER_WORKER_POOL_TYPE_ZERO_COPY, 398 RASTER_WORKER_POOL_TYPE_ZERO_COPY,
375 RASTER_WORKER_POOL_TYPE_ONE_COPY, 399 RASTER_WORKER_POOL_TYPE_ONE_COPY,
376 RASTER_WORKER_POOL_TYPE_GPU)); 400 RASTER_WORKER_POOL_TYPE_GPU,
401 RASTER_WORKER_POOL_TYPE_BITMAP));
377 402
378 } // namespace 403 } // namespace
379 } // namespace cc 404 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698