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

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

Issue 16190002: cc: Add new RasterWorkerPool interface. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase Created 7 years, 6 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
« no previous file with comments | « cc/resources/raster_worker_pool.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
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/resources/raster_worker_pool.h"
6
7 #include <vector>
8
9 #include "cc/resources/image_raster_worker_pool.h"
10 #include "cc/resources/picture_pile.h"
11 #include "cc/resources/picture_pile_impl.h"
12 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
13 #include "cc/resources/resource_provider.h"
14 #include "cc/resources/scoped_resource.h"
15 #include "cc/test/fake_output_surface.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace cc {
19
20 namespace {
21
22 class RasterWorkerPoolTest : public testing::Test {
23 public:
24 RasterWorkerPoolTest()
25 : output_surface_(FakeOutputSurface::Create3d()),
26 resource_provider_(
27 ResourceProvider::Create(output_surface_.get(), 0)),
28 check_interval_milliseconds_(1),
29 timeout_seconds_(5),
30 timed_out_(false) {
31 }
32 virtual ~RasterWorkerPoolTest() {
33 resource_provider_.reset();
34 }
35
36 // Overridden from testing::Test:
37 virtual void TearDown() OVERRIDE {
38 if (!raster_worker_pool_)
39 return;
40 raster_worker_pool_->Shutdown();
41 raster_worker_pool_->CheckForCompletedTasks();
42 }
43
44 virtual void BeginTest() = 0;
45 virtual void AfterTest() = 0;
46
47 ResourceProvider* resource_provider() const {
48 return resource_provider_.get();
49 }
50
51 RasterWorkerPool* worker_pool() {
52 return raster_worker_pool_.get();
53 }
54
55 void RunTest(bool use_map_image) {
56 if (use_map_image) {
57 raster_worker_pool_ = ImageRasterWorkerPool::Create(
58 resource_provider(), 1);
59 } else {
60 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
61 resource_provider(), 1);
62 }
63
64 BeginTest();
65
66 ScheduleCheckForCompletedTasks();
67
68 if (timeout_seconds_) {
69 timeout_.Reset(base::Bind(&RasterWorkerPoolTest::OnTimeout,
70 base::Unretained(this)));
71 base::MessageLoopProxy::current()->PostDelayedTask(
72 FROM_HERE,
73 timeout_.callback(),
74 base::TimeDelta::FromSeconds(timeout_seconds_));
75 }
76
77 base::MessageLoop::current()->Run();
78
79 check_.Cancel();
80 timeout_.Cancel();
81
82 if (timed_out_) {
83 FAIL() << "Test timed out";
84 return;
85 }
86 AfterTest();
87 }
88
89 void EndTest() {
90 base::MessageLoop::current()->Quit();
91 }
92
93 private:
94 void ScheduleCheckForCompletedTasks() {
95 check_.Reset(base::Bind(&RasterWorkerPoolTest::OnCheckForCompletedTasks,
96 base::Unretained(this)));
97 base::MessageLoopProxy::current()->PostDelayedTask(
98 FROM_HERE,
99 check_.callback(),
100 base::TimeDelta::FromMilliseconds(check_interval_milliseconds_));
101 }
102
103 void OnCheckForCompletedTasks() {
104 raster_worker_pool_->CheckForCompletedTasks();
105 ScheduleCheckForCompletedTasks();
106 }
107
108 void OnTimeout() {
109 timed_out_ = true;
110 base::MessageLoop::current()->Quit();
111 }
112
113 scoped_ptr<FakeOutputSurface> output_surface_;
114 scoped_ptr<ResourceProvider> resource_provider_;
115 scoped_ptr<RasterWorkerPool> raster_worker_pool_;
116 base::CancelableClosure check_;
117 int check_interval_milliseconds_;
118 base::CancelableClosure timeout_;
119 int timeout_seconds_;
120 bool timed_out_;
121 };
122
123 #define PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME) \
124 TEST_F(TEST_FIXTURE_NAME, RunPixelBuffer) { \
125 RunTest(false); \
126 }
127
128 #define IMAGE_TEST_F(TEST_FIXTURE_NAME) \
129 TEST_F(TEST_FIXTURE_NAME, RunImage) { \
130 RunTest(true); \
131 }
132
133 #define PIXEL_BUFFER_AND_IMAGE_TEST_F(TEST_FIXTURE_NAME) \
134 PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME); \
135 IMAGE_TEST_F(TEST_FIXTURE_NAME)
136
137 class BasicRasterWorkerPoolTest : public RasterWorkerPoolTest {
138 public:
139 bool RunRasterTask(SkDevice* device, PicturePileImpl* picture_pile) {
140 return true;
141 }
142
143 void OnTaskCompleted(scoped_ptr<ScopedResource> resource,
144 unsigned id,
145 bool was_canceled) {
146 on_task_completed_ids_.push_back(id);
147 if (on_task_completed_ids_.size() == 2)
148 EndTest();
149 }
150
151 void AppendTask(unsigned id) {
152 const gfx::Size size(1, 1);
153
154 scoped_refptr<PicturePile> picture_pile(new PicturePile);
155 picture_pile->set_num_raster_threads(1);
156 scoped_refptr<PicturePileImpl> picture_pile_impl(
157 PicturePileImpl::CreateFromOther(picture_pile.get(), false));
158
159 scoped_ptr<ScopedResource> resource(
160 ScopedResource::create(resource_provider()));
161 resource->Allocate(size, GL_RGBA, ResourceProvider::TextureUsageAny);
162 const Resource* const_resource = resource.get();
163
164 RasterWorkerPool::Task::Set empty;
165 tasks_.push_back(
166 RasterWorkerPool::RasterTask(
167 picture_pile_impl,
168 const_resource,
169 base::Bind(&BasicRasterWorkerPoolTest::RunRasterTask,
170 base::Unretained(this)),
171 base::Bind(&BasicRasterWorkerPoolTest::OnTaskCompleted,
172 base::Unretained(this),
173 base::Passed(&resource),
174 id),
175 &empty));
176 }
177
178 void ScheduleTasks() {
179 RasterWorkerPool::RasterTask::Queue tasks;
180
181 for (std::vector<RasterWorkerPool::RasterTask>::iterator it =
182 tasks_.begin();
183 it != tasks_.end(); ++it)
184 tasks.Append(*it);
185
186 worker_pool()->ScheduleTasks(&tasks);
187 }
188
189 // Overridden from RasterWorkerPoolTest:
190 virtual void BeginTest() OVERRIDE {
191 AppendTask(0u);
192 AppendTask(1u);
193 ScheduleTasks();
194 }
195 virtual void AfterTest() OVERRIDE {
196 EXPECT_EQ(2u, on_task_completed_ids_.size());
197 tasks_.clear();
198 }
199
200 std::vector<RasterWorkerPool::RasterTask> tasks_;
201 std::vector<unsigned> on_task_completed_ids_;
202 };
203
204 PIXEL_BUFFER_AND_IMAGE_TEST_F(BasicRasterWorkerPoolTest);
205
206 } // namespace
207
208 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool.cc ('k') | cc/resources/tile_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698