| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..28242f7ea4bc9760da8e32f1eb6ca76f43e99ef8
|
| --- /dev/null
|
| +++ b/cc/resources/raster_worker_pool_unittest.cc
|
| @@ -0,0 +1,208 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/resources/raster_worker_pool.h"
|
| +
|
| +#include <vector>
|
| +
|
| +#include "cc/resources/image_raster_worker_pool.h"
|
| +#include "cc/resources/picture_pile.h"
|
| +#include "cc/resources/picture_pile_impl.h"
|
| +#include "cc/resources/pixel_buffer_raster_worker_pool.h"
|
| +#include "cc/resources/resource_provider.h"
|
| +#include "cc/resources/scoped_resource.h"
|
| +#include "cc/test/fake_output_surface.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace cc {
|
| +
|
| +namespace {
|
| +
|
| +class RasterWorkerPoolTest : public testing::Test {
|
| + public:
|
| + RasterWorkerPoolTest()
|
| + : output_surface_(FakeOutputSurface::Create3d()),
|
| + resource_provider_(
|
| + ResourceProvider::Create(output_surface_.get(), 0)),
|
| + check_interval_milliseconds_(1),
|
| + timeout_seconds_(5),
|
| + timed_out_(false) {
|
| + }
|
| + virtual ~RasterWorkerPoolTest() {
|
| + resource_provider_.reset();
|
| + }
|
| +
|
| + // Overridden from testing::Test:
|
| + virtual void TearDown() OVERRIDE {
|
| + if (!raster_worker_pool_)
|
| + return;
|
| + raster_worker_pool_->Shutdown();
|
| + raster_worker_pool_->CheckForCompletedTasks();
|
| + }
|
| +
|
| + virtual void BeginTest() = 0;
|
| + virtual void AfterTest() = 0;
|
| +
|
| + ResourceProvider* resource_provider() const {
|
| + return resource_provider_.get();
|
| + }
|
| +
|
| + RasterWorkerPool* worker_pool() {
|
| + return raster_worker_pool_.get();
|
| + }
|
| +
|
| + void RunTest(bool use_map_image) {
|
| + if (use_map_image) {
|
| + raster_worker_pool_ = ImageRasterWorkerPool::Create(
|
| + resource_provider(), 1);
|
| + } else {
|
| + raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
|
| + resource_provider(), 1);
|
| + }
|
| +
|
| + BeginTest();
|
| +
|
| + ScheduleCheckForCompletedTasks();
|
| +
|
| + if (timeout_seconds_) {
|
| + timeout_.Reset(base::Bind(&RasterWorkerPoolTest::OnTimeout,
|
| + base::Unretained(this)));
|
| + base::MessageLoopProxy::current()->PostDelayedTask(
|
| + FROM_HERE,
|
| + timeout_.callback(),
|
| + base::TimeDelta::FromSeconds(timeout_seconds_));
|
| + }
|
| +
|
| + base::MessageLoop::current()->Run();
|
| +
|
| + check_.Cancel();
|
| + timeout_.Cancel();
|
| +
|
| + if (timed_out_) {
|
| + FAIL() << "Test timed out";
|
| + return;
|
| + }
|
| + AfterTest();
|
| + }
|
| +
|
| + void EndTest() {
|
| + base::MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + private:
|
| + void ScheduleCheckForCompletedTasks() {
|
| + check_.Reset(base::Bind(&RasterWorkerPoolTest::OnCheckForCompletedTasks,
|
| + base::Unretained(this)));
|
| + base::MessageLoopProxy::current()->PostDelayedTask(
|
| + FROM_HERE,
|
| + check_.callback(),
|
| + base::TimeDelta::FromMilliseconds(check_interval_milliseconds_));
|
| + }
|
| +
|
| + void OnCheckForCompletedTasks() {
|
| + raster_worker_pool_->CheckForCompletedTasks();
|
| + ScheduleCheckForCompletedTasks();
|
| + }
|
| +
|
| + void OnTimeout() {
|
| + timed_out_ = true;
|
| + base::MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + scoped_ptr<FakeOutputSurface> output_surface_;
|
| + scoped_ptr<ResourceProvider> resource_provider_;
|
| + scoped_ptr<RasterWorkerPool> raster_worker_pool_;
|
| + base::CancelableClosure check_;
|
| + int check_interval_milliseconds_;
|
| + base::CancelableClosure timeout_;
|
| + int timeout_seconds_;
|
| + bool timed_out_;
|
| +};
|
| +
|
| +#define PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME) \
|
| + TEST_F(TEST_FIXTURE_NAME, RunPixelBuffer) { \
|
| + RunTest(false); \
|
| + }
|
| +
|
| +#define IMAGE_TEST_F(TEST_FIXTURE_NAME) \
|
| + TEST_F(TEST_FIXTURE_NAME, RunImage) { \
|
| + RunTest(true); \
|
| + }
|
| +
|
| +#define PIXEL_BUFFER_AND_IMAGE_TEST_F(TEST_FIXTURE_NAME) \
|
| + PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME); \
|
| + IMAGE_TEST_F(TEST_FIXTURE_NAME)
|
| +
|
| +class BasicRasterWorkerPoolTest : public RasterWorkerPoolTest {
|
| + public:
|
| + bool RunRasterTask(SkDevice* device, PicturePileImpl* picture_pile) {
|
| + return true;
|
| + }
|
| +
|
| + void OnTaskCompleted(scoped_ptr<ScopedResource> resource,
|
| + unsigned id,
|
| + bool was_canceled) {
|
| + on_task_completed_ids_.push_back(id);
|
| + if (on_task_completed_ids_.size() == 2)
|
| + EndTest();
|
| + }
|
| +
|
| + void AppendTask(unsigned id) {
|
| + const gfx::Size size(1, 1);
|
| +
|
| + scoped_refptr<PicturePile> picture_pile(new PicturePile);
|
| + picture_pile->set_num_raster_threads(1);
|
| + scoped_refptr<PicturePileImpl> picture_pile_impl(
|
| + PicturePileImpl::CreateFromOther(picture_pile.get(), false));
|
| +
|
| + scoped_ptr<ScopedResource> resource(
|
| + ScopedResource::create(resource_provider()));
|
| + resource->Allocate(size, GL_RGBA, ResourceProvider::TextureUsageAny);
|
| + const Resource* const_resource = resource.get();
|
| +
|
| + RasterWorkerPool::Task::Set empty;
|
| + tasks_.push_back(
|
| + RasterWorkerPool::RasterTask(
|
| + picture_pile_impl,
|
| + const_resource,
|
| + base::Bind(&BasicRasterWorkerPoolTest::RunRasterTask,
|
| + base::Unretained(this)),
|
| + base::Bind(&BasicRasterWorkerPoolTest::OnTaskCompleted,
|
| + base::Unretained(this),
|
| + base::Passed(&resource),
|
| + id),
|
| + &empty));
|
| + }
|
| +
|
| + void ScheduleTasks() {
|
| + RasterWorkerPool::RasterTask::Queue tasks;
|
| +
|
| + for (std::vector<RasterWorkerPool::RasterTask>::iterator it =
|
| + tasks_.begin();
|
| + it != tasks_.end(); ++it)
|
| + tasks.Append(*it);
|
| +
|
| + worker_pool()->ScheduleTasks(&tasks);
|
| + }
|
| +
|
| + // Overridden from RasterWorkerPoolTest:
|
| + virtual void BeginTest() OVERRIDE {
|
| + AppendTask(0u);
|
| + AppendTask(1u);
|
| + ScheduleTasks();
|
| + }
|
| + virtual void AfterTest() OVERRIDE {
|
| + EXPECT_EQ(2u, on_task_completed_ids_.size());
|
| + tasks_.clear();
|
| + }
|
| +
|
| + std::vector<RasterWorkerPool::RasterTask> tasks_;
|
| + std::vector<unsigned> on_task_completed_ids_;
|
| +};
|
| +
|
| +PIXEL_BUFFER_AND_IMAGE_TEST_F(BasicRasterWorkerPoolTest);
|
| +
|
| +} // namespace
|
| +
|
| +} // namespace cc
|
|
|