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

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

Issue 110883015: Add preliminary support for hw-accelerated tile rasterization. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: avoid implementing TestContextProvider::GrContext for now Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/raster_worker_pool_perftest.cc ('k') | cc/resources/tile_manager.h » ('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 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 "cc/resources/image_raster_worker_pool.h" 10 #include "cc/resources/image_raster_worker_pool.h"
11 #include "cc/resources/picture_pile.h" 11 #include "cc/resources/picture_pile.h"
12 #include "cc/resources/picture_pile_impl.h" 12 #include "cc/resources/picture_pile_impl.h"
13 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 13 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
14 #include "cc/resources/resource_provider.h" 14 #include "cc/resources/resource_provider.h"
15 #include "cc/resources/scoped_resource.h" 15 #include "cc/resources/scoped_resource.h"
16 #include "cc/test/fake_output_surface.h" 16 #include "cc/test/fake_output_surface.h"
17 #include "cc/test/fake_output_surface_client.h" 17 #include "cc/test/fake_output_surface_client.h"
18 #include "cc/test/test_web_graphics_context_3d.h" 18 #include "cc/test/test_web_graphics_context_3d.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 20
21 namespace cc { 21 namespace cc {
22 22
23 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { 23 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
24 public: 24 public:
25 enum RasterThread {
26 RASTER_THREAD_NONE,
27 RASTER_THREAD_ORIGIN,
28 RASTER_THREAD_WORKER
29 };
25 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, 30 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis,
26 bool was_canceled, 31 bool was_canceled,
27 bool did_raster)> Reply; 32 RasterThread raster_thread)> Reply;
28 33
29 TestRasterWorkerPoolTaskImpl( 34 TestRasterWorkerPoolTaskImpl(
30 const Resource* resource, 35 const Resource* resource,
31 const Reply& reply, 36 const Reply& reply,
32 TaskVector* dependencies) 37 TaskVector* dependencies,
33 : internal::RasterWorkerPoolTask(resource, dependencies), 38 bool use_gpu_rasterization)
39 : internal::RasterWorkerPoolTask(resource,
40 dependencies,
41 use_gpu_rasterization),
34 reply_(reply), 42 reply_(reply),
35 did_raster_(false) {} 43 raster_thread_(RASTER_THREAD_NONE) {}
36 44
37 // Overridden from internal::WorkerPoolTask: 45 // Overridden from internal::WorkerPoolTask:
38 virtual bool RunOnWorkerThread(unsigned thread_index, 46 virtual bool RunOnWorkerThread(unsigned thread_index,
39 void* buffer, 47 void* buffer,
40 gfx::Size size, 48 gfx::Size size,
41 int stride) OVERRIDE { 49 int stride) OVERRIDE {
42 did_raster_ = true; 50 raster_thread_ = RASTER_THREAD_WORKER;
43 return true; 51 return true;
44 } 52 }
53 virtual void RunOnOriginThread(ResourceProvider* resource_provider,
54 ContextProvider* context_provider) OVERRIDE {
55 raster_thread_ = RASTER_THREAD_ORIGIN;
56 }
45 virtual void CompleteOnOriginThread() OVERRIDE { 57 virtual void CompleteOnOriginThread() OVERRIDE {
46 reply_.Run(PicturePileImpl::Analysis(), !HasFinishedRunning(), did_raster_); 58 reply_.Run(PicturePileImpl::Analysis(),
59 !HasFinishedRunning() || WasCanceled(),
60 raster_thread_);
47 } 61 }
48 62
49 protected: 63 protected:
50 virtual ~TestRasterWorkerPoolTaskImpl() {} 64 virtual ~TestRasterWorkerPoolTaskImpl() {}
51 65
52 private: 66 private:
53 const Reply reply_; 67 const Reply reply_;
54 bool did_raster_; 68 RasterThread raster_thread_;
55 69
56 DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl); 70 DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl);
57 }; 71 };
58 72
59 class RasterWorkerPoolTest : public testing::Test, 73 class RasterWorkerPoolTest : public testing::Test,
60 public RasterWorkerPoolClient { 74 public RasterWorkerPoolClient {
61 public: 75 public:
62 RasterWorkerPoolTest() 76 RasterWorkerPoolTest()
63 : context_provider_(TestContextProvider::Create()), 77 : context_provider_(TestContextProvider::Create()),
64 check_interval_milliseconds_(1), 78 check_interval_milliseconds_(1),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 return resource_provider_.get(); 111 return resource_provider_.get();
98 } 112 }
99 113
100 RasterWorkerPool* worker_pool() { 114 RasterWorkerPool* worker_pool() {
101 return raster_worker_pool_.get(); 115 return raster_worker_pool_.get();
102 } 116 }
103 117
104 void RunTest(bool use_map_image) { 118 void RunTest(bool use_map_image) {
105 if (use_map_image) { 119 if (use_map_image) {
106 raster_worker_pool_ = ImageRasterWorkerPool::Create( 120 raster_worker_pool_ = ImageRasterWorkerPool::Create(
107 resource_provider(), 1, GL_TEXTURE_2D); 121 resource_provider(), context_provider_.get(), 1, GL_TEXTURE_2D);
108 } else { 122 } else {
109 raster_worker_pool_ = 123 raster_worker_pool_ =
110 PixelBufferRasterWorkerPool::Create( 124 PixelBufferRasterWorkerPool::Create(
111 resource_provider(), 125 resource_provider(),
126 context_provider_.get(),
112 1, 127 1,
113 std::numeric_limits<size_t>::max()); 128 std::numeric_limits<size_t>::max());
114 } 129 }
115 130
116 raster_worker_pool_->SetClient(this); 131 raster_worker_pool_->SetClient(this);
117 132
118 BeginTest(); 133 BeginTest();
119 134
120 ScheduleCheckForCompletedTasks(); 135 ScheduleCheckForCompletedTasks();
121 136
(...skipping 26 matching lines...) Expand all
148 RasterWorkerPool::RasterTask::Queue tasks; 163 RasterWorkerPool::RasterTask::Queue tasks;
149 164
150 for (std::vector<RasterWorkerPool::RasterTask>::iterator it = 165 for (std::vector<RasterWorkerPool::RasterTask>::iterator it =
151 tasks_.begin(); 166 tasks_.begin();
152 it != tasks_.end(); ++it) 167 it != tasks_.end(); ++it)
153 tasks.Append(*it, false); 168 tasks.Append(*it, false);
154 169
155 worker_pool()->ScheduleTasks(&tasks); 170 worker_pool()->ScheduleTasks(&tasks);
156 } 171 }
157 172
158 void AppendTask(unsigned id) { 173 void AppendTask(unsigned id, bool use_gpu_rasterization) {
159 const gfx::Size size(1, 1); 174 const gfx::Size size(1, 1);
160 175
161 scoped_ptr<ScopedResource> resource( 176 scoped_ptr<ScopedResource> resource(
162 ScopedResource::Create(resource_provider())); 177 ScopedResource::Create(resource_provider()));
163 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 178 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
164 const Resource* const_resource = resource.get(); 179 const Resource* const_resource = resource.get();
165 180
166 RasterWorkerPool::Task::Set empty; 181 RasterWorkerPool::Task::Set empty;
167 tasks_.push_back( 182 tasks_.push_back(
168 RasterWorkerPool::RasterTask(new TestRasterWorkerPoolTaskImpl( 183 RasterWorkerPool::RasterTask(new TestRasterWorkerPoolTaskImpl(
169 const_resource, 184 const_resource,
170 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 185 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
171 base::Unretained(this), 186 base::Unretained(this),
172 base::Passed(&resource), 187 base::Passed(&resource),
173 id), 188 id),
174 &empty.tasks_))); 189 &empty.tasks_,
190 use_gpu_rasterization)));
175 } 191 }
176 192
177 virtual void OnTaskCompleted(scoped_ptr<ScopedResource> resource, 193 virtual void OnTaskCompleted(
178 unsigned id, 194 scoped_ptr<ScopedResource> resource,
179 const PicturePileImpl::Analysis& analysis, 195 unsigned id,
180 bool was_canceled, 196 const PicturePileImpl::Analysis& analysis,
181 bool did_raster) {} 197 bool was_canceled,
198 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) {}
182 199
183 private: 200 private:
184 void ScheduleCheckForCompletedTasks() { 201 void ScheduleCheckForCompletedTasks() {
185 check_.Reset(base::Bind(&RasterWorkerPoolTest::OnCheckForCompletedTasks, 202 check_.Reset(base::Bind(&RasterWorkerPoolTest::OnCheckForCompletedTasks,
186 base::Unretained(this))); 203 base::Unretained(this)));
187 base::MessageLoopProxy::current()->PostDelayedTask( 204 base::MessageLoopProxy::current()->PostDelayedTask(
188 FROM_HERE, 205 FROM_HERE,
189 check_.callback(), 206 check_.callback(),
190 base::TimeDelta::FromMilliseconds(check_interval_milliseconds_)); 207 base::TimeDelta::FromMilliseconds(check_interval_milliseconds_));
191 } 208 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 240
224 #define IMAGE_TEST_F(TEST_FIXTURE_NAME) \ 241 #define IMAGE_TEST_F(TEST_FIXTURE_NAME) \
225 TEST_F(TEST_FIXTURE_NAME, RunImage) { \ 242 TEST_F(TEST_FIXTURE_NAME, RunImage) { \
226 RunTest(true); \ 243 RunTest(true); \
227 } 244 }
228 245
229 #define PIXEL_BUFFER_AND_IMAGE_TEST_F(TEST_FIXTURE_NAME) \ 246 #define PIXEL_BUFFER_AND_IMAGE_TEST_F(TEST_FIXTURE_NAME) \
230 PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME); \ 247 PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME); \
231 IMAGE_TEST_F(TEST_FIXTURE_NAME) 248 IMAGE_TEST_F(TEST_FIXTURE_NAME)
232 249
233 class BasicRasterWorkerPoolTest : public RasterWorkerPoolTest { 250 class RasterWorkerPoolTestSofwareRaster : public RasterWorkerPoolTest {
234 public: 251 public:
235 virtual void OnTaskCompleted(scoped_ptr<ScopedResource> resource, 252 virtual void OnTaskCompleted(
236 unsigned id, 253 scoped_ptr<ScopedResource> resource,
237 const PicturePileImpl::Analysis& analysis, 254 unsigned id,
238 bool was_canceled, 255 const PicturePileImpl::Analysis& analysis,
239 bool did_raster) OVERRIDE { 256 bool was_canceled,
240 EXPECT_TRUE(did_raster); 257 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
258 EXPECT_FALSE(was_canceled);
259 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER,
260 raster_thread);
241 on_task_completed_ids_.push_back(id); 261 on_task_completed_ids_.push_back(id);
242 if (on_task_completed_ids_.size() == 2) 262 if (on_task_completed_ids_.size() == 2)
243 EndTest(); 263 EndTest();
244 } 264 }
245 265
246 // Overridden from RasterWorkerPoolTest: 266 // Overridden from RasterWorkerPoolTest:
247 virtual void BeginTest() OVERRIDE { 267 virtual void BeginTest() OVERRIDE {
248 AppendTask(0u); 268 AppendTask(0u, false);
249 AppendTask(1u); 269 AppendTask(1u, false);
250 ScheduleTasks(); 270 ScheduleTasks();
251 } 271 }
252 virtual void AfterTest() OVERRIDE { 272 virtual void AfterTest() OVERRIDE {
253 EXPECT_EQ(2u, on_task_completed_ids_.size()); 273 EXPECT_EQ(2u, on_task_completed_ids_.size());
254 tasks_.clear(); 274 tasks_.clear();
255 } 275 }
256 276
257 std::vector<unsigned> on_task_completed_ids_; 277 std::vector<unsigned> on_task_completed_ids_;
258 }; 278 };
259 279
260 PIXEL_BUFFER_AND_IMAGE_TEST_F(BasicRasterWorkerPoolTest); 280 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestSofwareRaster);
281
282 class RasterWorkerPoolTestGpuRaster : public RasterWorkerPoolTest {
283 public:
284 virtual void OnTaskCompleted(
285 scoped_ptr<ScopedResource> resource,
286 unsigned id,
287 const PicturePileImpl::Analysis& analysis,
288 bool was_canceled,
289 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
290 EXPECT_EQ(0u, id);
291 EXPECT_FALSE(was_canceled);
292 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_ORIGIN,
293 raster_thread);
294 EndTest();
295 }
296
297 // Overridden from RasterWorkerPoolTest:
298 virtual void BeginTest() OVERRIDE {
299 AppendTask(0u, true); // GPU raster.
300 ScheduleTasks();
301 }
302
303 virtual void AfterTest() OVERRIDE {
304 EXPECT_EQ(1u, tasks_.size());
305 }
306 };
307 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestGpuRaster);
308
309 class RasterWorkerPoolTestHybridRaster : public RasterWorkerPoolTest {
310 public:
311 virtual void OnTaskCompleted(
312 scoped_ptr<ScopedResource> resource,
313 unsigned id,
314 const PicturePileImpl::Analysis& analysis,
315 bool was_canceled,
316 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
317 EXPECT_FALSE(was_canceled);
318 switch (id) {
319 case 0u:
320 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER,
321 raster_thread);
322 break;
323 case 1u:
324 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_ORIGIN,
325 raster_thread);
326 break;
327 default:
328 NOTREACHED();
329 }
330 completed_task_ids_.push_back(id);
331 if (completed_task_ids_.size() == 2)
332 EndTest();
333 }
334
335 // Overridden from RasterWorkerPoolTest:
336 virtual void BeginTest() OVERRIDE {
337 AppendTask(0u, false); // Software raster.
338 AppendTask(1u, true); // GPU raster.
339 ScheduleTasks();
340 }
341
342 virtual void AfterTest() OVERRIDE {
343 EXPECT_EQ(2u, tasks_.size());
344 EXPECT_EQ(2u, completed_task_ids_.size());
345 }
346
347 std::vector<unsigned> completed_task_ids_;
348 };
349 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestHybridRaster);
261 350
262 class RasterWorkerPoolTestFailedMapResource : public RasterWorkerPoolTest { 351 class RasterWorkerPoolTestFailedMapResource : public RasterWorkerPoolTest {
263 public: 352 public:
264 virtual void OnTaskCompleted(scoped_ptr<ScopedResource> resource, 353 virtual void OnTaskCompleted(
265 unsigned id, 354 scoped_ptr<ScopedResource> resource,
266 const PicturePileImpl::Analysis& analysis, 355 unsigned id,
267 bool was_canceled, 356 const PicturePileImpl::Analysis& analysis,
268 bool did_raster) OVERRIDE { 357 bool was_canceled,
269 EXPECT_FALSE(did_raster); 358 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
359 EXPECT_FALSE(was_canceled);
360 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_NONE,
361 raster_thread);
270 EndTest(); 362 EndTest();
271 } 363 }
272 364
273 // Overridden from RasterWorkerPoolTest: 365 // Overridden from RasterWorkerPoolTest:
274 virtual void BeginTest() OVERRIDE { 366 virtual void BeginTest() OVERRIDE {
275 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 367 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d();
276 context3d->set_times_map_image_chromium_succeeds(0); 368 context3d->set_times_map_image_chromium_succeeds(0);
277 context3d->set_times_map_buffer_chromium_succeeds(0); 369 context3d->set_times_map_buffer_chromium_succeeds(0);
278 AppendTask(0u); 370 AppendTask(0u, false);
279 ScheduleTasks(); 371 ScheduleTasks();
280 } 372 }
281 373
282 virtual void AfterTest() OVERRIDE { 374 virtual void AfterTest() OVERRIDE {
283 ASSERT_EQ(1u, tasks_.size()); 375 ASSERT_EQ(1u, tasks_.size());
284 tasks_.clear(); 376 tasks_.clear();
285 } 377 }
286 }; 378 };
287 379
288 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestFailedMapResource); 380 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestFailedMapResource);
289 381
290 } // namespace 382 } // namespace
291 383
292 } // namespace cc 384 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool_perftest.cc ('k') | cc/resources/tile_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698