Index: cc/resources/raster_worker_pool_unittest.cc |
diff --git a/cc/resources/raster_worker_pool_unittest.cc b/cc/resources/raster_worker_pool_unittest.cc |
index 716edf6c5263ef1380f60e6a0617c22bfe93c46d..faa0cf7c7fd2a0512005ab79df46c1047571fdb9 100644 |
--- a/cc/resources/raster_worker_pool_unittest.cc |
+++ b/cc/resources/raster_worker_pool_unittest.cc |
@@ -22,28 +22,42 @@ namespace cc { |
class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
public: |
+ enum RasterThread { |
+ RASTER_THREAD_NONE, |
+ RASTER_THREAD_ORIGIN, |
+ RASTER_THREAD_WORKER |
+ }; |
typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, |
bool was_canceled, |
- bool did_raster)> Reply; |
+ RasterThread raster_thread)> Reply; |
TestRasterWorkerPoolTaskImpl( |
const Resource* resource, |
const Reply& reply, |
- TaskVector* dependencies) |
- : internal::RasterWorkerPoolTask(resource, dependencies), |
+ TaskVector* dependencies, |
+ bool use_gpu_rasterization) |
+ : internal::RasterWorkerPoolTask(resource, |
+ dependencies, |
+ use_gpu_rasterization), |
reply_(reply), |
- did_raster_(false) {} |
+ raster_thread_(RASTER_THREAD_NONE) {} |
// Overridden from internal::WorkerPoolTask: |
virtual bool RunOnWorkerThread(unsigned thread_index, |
void* buffer, |
gfx::Size size, |
int stride) OVERRIDE { |
- did_raster_ = true; |
+ raster_thread_ = RASTER_THREAD_WORKER; |
return true; |
} |
+ virtual void RunOnOriginThread(ResourceProvider* resource_provider, |
+ ContextProvider* context_provider) OVERRIDE { |
+ raster_thread_ = RASTER_THREAD_ORIGIN; |
+ } |
virtual void CompleteOnOriginThread() OVERRIDE { |
- reply_.Run(PicturePileImpl::Analysis(), !HasFinishedRunning(), did_raster_); |
+ reply_.Run(PicturePileImpl::Analysis(), |
+ !HasFinishedRunning() || WasCanceled(), |
+ raster_thread_); |
} |
protected: |
@@ -51,7 +65,7 @@ class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
private: |
const Reply reply_; |
- bool did_raster_; |
+ RasterThread raster_thread_; |
DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl); |
}; |
@@ -104,11 +118,12 @@ class RasterWorkerPoolTest : public testing::Test, |
void RunTest(bool use_map_image) { |
if (use_map_image) { |
raster_worker_pool_ = ImageRasterWorkerPool::Create( |
- resource_provider(), 1, GL_TEXTURE_2D); |
+ resource_provider(), context_provider_.get(), 1, GL_TEXTURE_2D); |
} else { |
raster_worker_pool_ = |
PixelBufferRasterWorkerPool::Create( |
resource_provider(), |
+ context_provider_.get(), |
1, |
std::numeric_limits<size_t>::max()); |
} |
@@ -155,7 +170,7 @@ class RasterWorkerPoolTest : public testing::Test, |
worker_pool()->ScheduleTasks(&tasks); |
} |
- void AppendTask(unsigned id) { |
+ void AppendTask(unsigned id, bool use_gpu_rasterization) { |
const gfx::Size size(1, 1); |
scoped_ptr<ScopedResource> resource( |
@@ -171,14 +186,16 @@ class RasterWorkerPoolTest : public testing::Test, |
base::Unretained(this), |
base::Passed(&resource), |
id), |
- &empty.tasks_))); |
+ &empty.tasks_, |
+ use_gpu_rasterization))); |
} |
- virtual void OnTaskCompleted(scoped_ptr<ScopedResource> resource, |
- unsigned id, |
- const PicturePileImpl::Analysis& analysis, |
- bool was_canceled, |
- bool did_raster) {} |
+ virtual void OnTaskCompleted( |
+ scoped_ptr<ScopedResource> resource, |
+ unsigned id, |
+ const PicturePileImpl::Analysis& analysis, |
+ bool was_canceled, |
+ TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) {} |
private: |
void ScheduleCheckForCompletedTasks() { |
@@ -230,14 +247,17 @@ namespace { |
PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME); \ |
IMAGE_TEST_F(TEST_FIXTURE_NAME) |
-class BasicRasterWorkerPoolTest : public RasterWorkerPoolTest { |
+class RasterWorkerPoolTestSofwareRaster : public RasterWorkerPoolTest { |
public: |
- virtual void OnTaskCompleted(scoped_ptr<ScopedResource> resource, |
- unsigned id, |
- const PicturePileImpl::Analysis& analysis, |
- bool was_canceled, |
- bool did_raster) OVERRIDE { |
- EXPECT_TRUE(did_raster); |
+ virtual void OnTaskCompleted( |
+ scoped_ptr<ScopedResource> resource, |
+ unsigned id, |
+ const PicturePileImpl::Analysis& analysis, |
+ bool was_canceled, |
+ TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE { |
+ EXPECT_FALSE(was_canceled); |
+ EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER, |
+ raster_thread); |
on_task_completed_ids_.push_back(id); |
if (on_task_completed_ids_.size() == 2) |
EndTest(); |
@@ -245,8 +265,8 @@ class BasicRasterWorkerPoolTest : public RasterWorkerPoolTest { |
// Overridden from RasterWorkerPoolTest: |
virtual void BeginTest() OVERRIDE { |
- AppendTask(0u); |
- AppendTask(1u); |
+ AppendTask(0u, false); |
+ AppendTask(1u, false); |
ScheduleTasks(); |
} |
virtual void AfterTest() OVERRIDE { |
@@ -257,16 +277,88 @@ class BasicRasterWorkerPoolTest : public RasterWorkerPoolTest { |
std::vector<unsigned> on_task_completed_ids_; |
}; |
-PIXEL_BUFFER_AND_IMAGE_TEST_F(BasicRasterWorkerPoolTest); |
+PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestSofwareRaster); |
+ |
+class RasterWorkerPoolTestGpuRaster : public RasterWorkerPoolTest { |
+ public: |
+ virtual void OnTaskCompleted( |
+ scoped_ptr<ScopedResource> resource, |
+ unsigned id, |
+ const PicturePileImpl::Analysis& analysis, |
+ bool was_canceled, |
+ TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE { |
+ EXPECT_EQ(0u, id); |
+ EXPECT_FALSE(was_canceled); |
+ EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_ORIGIN, |
+ raster_thread); |
+ EndTest(); |
+ } |
+ |
+ // Overridden from RasterWorkerPoolTest: |
+ virtual void BeginTest() OVERRIDE { |
+ AppendTask(0u, true); // GPU raster. |
+ ScheduleTasks(); |
+ } |
+ |
+ virtual void AfterTest() OVERRIDE { |
+ EXPECT_EQ(1u, tasks_.size()); |
+ } |
+}; |
+PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestGpuRaster); |
+ |
+class RasterWorkerPoolTestHybridRaster : public RasterWorkerPoolTest { |
+ public: |
+ virtual void OnTaskCompleted( |
+ scoped_ptr<ScopedResource> resource, |
+ unsigned id, |
+ const PicturePileImpl::Analysis& analysis, |
+ bool was_canceled, |
+ TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE { |
+ EXPECT_FALSE(was_canceled); |
+ switch (id) { |
+ case 0u: |
+ EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER, |
+ raster_thread); |
+ break; |
+ case 1u: |
+ EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_ORIGIN, |
+ raster_thread); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ completed_task_ids_.push_back(id); |
+ if (completed_task_ids_.size() == 2) |
+ EndTest(); |
+ } |
+ |
+ // Overridden from RasterWorkerPoolTest: |
+ virtual void BeginTest() OVERRIDE { |
+ AppendTask(0u, false); // Software raster. |
+ AppendTask(1u, true); // GPU raster. |
+ ScheduleTasks(); |
+ } |
+ |
+ virtual void AfterTest() OVERRIDE { |
+ EXPECT_EQ(2u, tasks_.size()); |
+ EXPECT_EQ(2u, completed_task_ids_.size()); |
+ } |
+ |
+ std::vector<unsigned> completed_task_ids_; |
+}; |
+PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestHybridRaster); |
class RasterWorkerPoolTestFailedMapResource : public RasterWorkerPoolTest { |
public: |
- virtual void OnTaskCompleted(scoped_ptr<ScopedResource> resource, |
- unsigned id, |
- const PicturePileImpl::Analysis& analysis, |
- bool was_canceled, |
- bool did_raster) OVERRIDE { |
- EXPECT_FALSE(did_raster); |
+ virtual void OnTaskCompleted( |
+ scoped_ptr<ScopedResource> resource, |
+ unsigned id, |
+ const PicturePileImpl::Analysis& analysis, |
+ bool was_canceled, |
+ TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE { |
+ EXPECT_FALSE(was_canceled); |
+ EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_NONE, |
+ raster_thread); |
EndTest(); |
} |
@@ -275,7 +367,7 @@ class RasterWorkerPoolTestFailedMapResource : public RasterWorkerPoolTest { |
TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); |
context3d->set_times_map_image_chromium_succeeds(0); |
context3d->set_times_map_buffer_chromium_succeeds(0); |
- AppendTask(0u); |
+ AppendTask(0u, false); |
ScheduleTasks(); |
} |