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

Side by Side Diff: cc/raster/raster_buffer_provider_unittest.cc

Issue 1866043006: cc: Remove ScheduleOnOriginThread() and CompleteOnOriginThread(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 4 years, 7 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/raster/raster_buffer_provider.h" 5 #include "cc/raster/raster_buffer_provider.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY, 48 RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
49 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY, 49 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
50 RASTER_BUFFER_PROVIDER_TYPE_GPU, 50 RASTER_BUFFER_PROVIDER_TYPE_GPU,
51 RASTER_BUFFER_PROVIDER_TYPE_BITMAP 51 RASTER_BUFFER_PROVIDER_TYPE_BITMAP
52 }; 52 };
53 53
54 class TestRasterTaskImpl : public TileTask { 54 class TestRasterTaskImpl : public TileTask {
55 public: 55 public:
56 typedef base::Callback<void(bool was_canceled)> Reply; 56 typedef base::Callback<void(bool was_canceled)> Reply;
57 57
58 TestRasterTaskImpl(const Resource* resource, 58 TestRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
59 const Reply& reply, 59 unsigned id,
60 std::unique_ptr<RasterBuffer> raster_buffer,
60 TileTask::Vector* dependencies) 61 TileTask::Vector* dependencies)
61 : TileTask(true, dependencies), 62 : TileTask(TileTask::Type::RASTER, true, dependencies),
62 resource_(resource), 63 resource_(std::move(resource)),
63 reply_(reply), 64 id_(id),
65 raster_buffer_(std::move(raster_buffer)),
64 raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {} 66 raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {}
65 67
66 // Overridden from Task: 68 // Overridden from Task:
67 void RunOnWorkerThread() override { 69 void RunOnWorkerThread() override {
68 uint64_t new_content_id = 0; 70 uint64_t new_content_id = 0;
69 raster_buffer_->Playback(raster_source_.get(), gfx::Rect(1, 1), 71 raster_buffer_->Playback(raster_source_.get(), gfx::Rect(1, 1),
70 gfx::Rect(1, 1), new_content_id, 1.f, 72 gfx::Rect(1, 1), new_content_id, 1.f,
71 RasterSource::PlaybackSettings()); 73 RasterSource::PlaybackSettings());
72 } 74 }
73 75
74 // Overridden from TileTask:
75 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {
76 // The raster buffer has no tile ids associated with it for partial update,
77 // so doesn't need to provide a valid dirty rect.
78 raster_buffer_ = provider->AcquireBufferForRaster(resource_, 0, 0);
79 }
80 void CompleteOnOriginThread(RasterBufferProvider* provider) override {
81 provider->ReleaseBufferForRaster(std::move(raster_buffer_));
82 reply_.Run(!state().IsFinished());
83 }
84
85 protected: 76 protected:
86 ~TestRasterTaskImpl() override {} 77 ~TestRasterTaskImpl() override {}
87 78
88 private: 79 private:
89 const Resource* resource_; 80 friend class RasterBufferProviderTest;
90 const Reply reply_; 81
82 std::unique_ptr<ScopedResource> resource_;
83 unsigned id_;
91 std::unique_ptr<RasterBuffer> raster_buffer_; 84 std::unique_ptr<RasterBuffer> raster_buffer_;
92 scoped_refptr<RasterSource> raster_source_; 85 scoped_refptr<RasterSource> raster_source_;
93 86
94 DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl); 87 DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl);
95 }; 88 };
96 89
97 class BlockingTestRasterTaskImpl : public TestRasterTaskImpl { 90 class BlockingTestRasterTaskImpl : public TestRasterTaskImpl {
98 public: 91 public:
99 BlockingTestRasterTaskImpl(const Resource* resource, 92 BlockingTestRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
100 const Reply& reply, 93 unsigned id,
94 std::unique_ptr<RasterBuffer> raster_buffer,
101 base::Lock* lock, 95 base::Lock* lock,
102 TileTask::Vector* dependencies) 96 TileTask::Vector* dependencies)
103 : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {} 97 : TestRasterTaskImpl(std::move(resource),
98 id,
99 std::move(raster_buffer),
100 dependencies),
101 lock_(lock) {}
104 102
105 // Overridden from Task: 103 // Overridden from Task:
106 void RunOnWorkerThread() override { 104 void RunOnWorkerThread() override {
107 base::AutoLock lock(*lock_); 105 base::AutoLock lock(*lock_);
108 TestRasterTaskImpl::RunOnWorkerThread(); 106 TestRasterTaskImpl::RunOnWorkerThread();
109 } 107 }
110 108
111 protected: 109 protected:
112 ~BlockingTestRasterTaskImpl() override {} 110 ~BlockingTestRasterTaskImpl() override {}
113 111
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 } 166 }
169 167
170 DCHECK(raster_buffer_provider); 168 DCHECK(raster_buffer_provider);
171 169
172 tile_task_manager_ = TileTaskManagerImpl::Create( 170 tile_task_manager_ = TileTaskManagerImpl::Create(
173 std::move(raster_buffer_provider), &task_graph_runner_); 171 std::move(raster_buffer_provider), &task_graph_runner_);
174 } 172 }
175 173
176 void TearDown() override { 174 void TearDown() override {
177 tile_task_manager_->Shutdown(); 175 tile_task_manager_->Shutdown();
178 tile_task_manager_->CheckForCompletedTasks(); 176 CheckForCompletedTasks();
179 } 177 }
180 178
181 void AllTileTasksFinished() { 179 void AllTileTasksFinished() {
182 tile_task_manager_->CheckForCompletedTasks(); 180 CheckForCompletedTasks();
183 base::MessageLoop::current()->QuitWhenIdle(); 181 base::MessageLoop::current()->QuitWhenIdle();
184 } 182 }
185 183
186 void RunMessageLoopUntilAllTasksHaveCompleted() { 184 void RunMessageLoopUntilAllTasksHaveCompleted() {
187 task_graph_runner_.RunUntilIdle(); 185 task_graph_runner_.RunUntilIdle();
188 tile_task_manager_->CheckForCompletedTasks(); 186 CheckForCompletedTasks();
189 } 187 }
190 188
191 void ScheduleTasks() { 189 void ScheduleTasks() {
192 graph_.Reset(); 190 graph_.Reset();
193 191
194 size_t priority = 0; 192 size_t priority = 0;
195 193
196 for (RasterTaskVector::const_iterator it = tasks_.begin(); 194 for (RasterTaskVector::const_iterator it = tasks_.begin();
197 it != tasks_.end(); ++it) { 195 it != tasks_.end(); ++it) {
198 graph_.nodes.emplace_back(it->get(), 0 /* group */, priority++, 196 graph_.nodes.emplace_back(it->get(), 0 /* group */, priority++,
199 0 /* dependencies */); 197 0 /* dependencies */);
200 } 198 }
201 199
202 tile_task_manager_->ScheduleTasks(&graph_); 200 tile_task_manager_->ScheduleTasks(&graph_);
203 } 201 }
204 202
205 void AppendTask(unsigned id, const gfx::Size& size) { 203 void AppendTask(unsigned id, const gfx::Size& size) {
206 std::unique_ptr<ScopedResource> resource( 204 std::unique_ptr<ScopedResource> resource(
207 ScopedResource::Create(resource_provider_.get())); 205 ScopedResource::Create(resource_provider_.get()));
208 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 206 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
209 RGBA_8888); 207 RGBA_8888);
210 const Resource* const_resource = resource.get();
211 208
209 // The raster buffer has no tile ids associated with it for partial update,
210 // so doesn't need to provide a valid dirty rect.
211 std::unique_ptr<RasterBuffer> raster_buffer =
212 tile_task_manager_->GetRasterBufferProvider()->AcquireBufferForRaster(
213 resource.get(), 0, 0);
212 TileTask::Vector empty; 214 TileTask::Vector empty;
213 tasks_.push_back(new TestRasterTaskImpl( 215 tasks_.push_back(new TestRasterTaskImpl(std::move(resource), id,
214 const_resource, 216 std::move(raster_buffer), &empty));
215 base::Bind(&RasterBufferProviderTest::OnTaskCompleted,
216 base::Unretained(this), base::Passed(&resource), id),
217 &empty));
218 } 217 }
219 218
220 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); } 219 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); }
221 220
222 void AppendBlockingTask(unsigned id, base::Lock* lock) { 221 void AppendBlockingTask(unsigned id, base::Lock* lock) {
223 const gfx::Size size(1, 1); 222 const gfx::Size size(1, 1);
224 223
225 std::unique_ptr<ScopedResource> resource( 224 std::unique_ptr<ScopedResource> resource(
226 ScopedResource::Create(resource_provider_.get())); 225 ScopedResource::Create(resource_provider_.get()));
227 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 226 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
228 RGBA_8888); 227 RGBA_8888);
229 const Resource* const_resource = resource.get();
230 228
229 std::unique_ptr<RasterBuffer> raster_buffer =
230 tile_task_manager_->GetRasterBufferProvider()->AcquireBufferForRaster(
231 resource.get(), 0, 0);
231 TileTask::Vector empty; 232 TileTask::Vector empty;
232 tasks_.push_back(new BlockingTestRasterTaskImpl( 233 tasks_.push_back(new BlockingTestRasterTaskImpl(
233 const_resource, 234 std::move(resource), id, std::move(raster_buffer), lock, &empty));
234 base::Bind(&RasterBufferProviderTest::OnTaskCompleted,
235 base::Unretained(this), base::Passed(&resource), id),
236 lock, &empty));
237 } 235 }
238 236
239 const std::vector<RasterTaskResult>& completed_tasks() const { 237 const std::vector<RasterTaskResult>& completed_tasks() const {
240 return completed_tasks_; 238 return completed_tasks_;
241 } 239 }
242 240
243 void LoseContext(ContextProvider* context_provider) { 241 void LoseContext(ContextProvider* context_provider) {
244 if (!context_provider) 242 if (!context_provider)
245 return; 243 return;
246 context_provider->ContextGL()->LoseContextCHROMIUM( 244 context_provider->ContextGL()->LoseContextCHROMIUM(
(...skipping 13 matching lines...) Expand all
260 } 258 }
261 259
262 void CreateSoftwareOutputSurfaceAndResourceProvider() { 260 void CreateSoftwareOutputSurfaceAndResourceProvider() {
263 output_surface_ = FakeOutputSurface::CreateSoftware( 261 output_surface_ = FakeOutputSurface::CreateSoftware(
264 base::WrapUnique(new SoftwareOutputDevice)); 262 base::WrapUnique(new SoftwareOutputDevice));
265 CHECK(output_surface_->BindToClient(&output_surface_client_)); 263 CHECK(output_surface_->BindToClient(&output_surface_client_));
266 resource_provider_ = FakeResourceProvider::Create( 264 resource_provider_ = FakeResourceProvider::Create(
267 output_surface_.get(), &shared_bitmap_manager_, nullptr); 265 output_surface_.get(), &shared_bitmap_manager_, nullptr);
268 } 266 }
269 267
270 void OnTaskCompleted(std::unique_ptr<ScopedResource> resource, 268 void CheckForCompletedTasks() {
271 unsigned id, 269 Task::Vector completed_tasks;
272 bool was_canceled) { 270 tile_task_manager_->CollectCompletedTasks(&completed_tasks);
271
272 for (auto task : completed_tasks) {
273 TileTask* tile_task = static_cast<TileTask*>(task.get());
274 switch (tile_task->type()) {
275 case TileTask::Type::RASTER:
276 OnRasterTaskCompleted(tile_task);
277 break;
278 default:
279 NOTREACHED();
280 }
281
282 task->state().DidComplete();
283 }
284
285 completed_tasks.clear();
286 }
287
288 void OnRasterTaskCompleted(TileTask* task) {
289 TestRasterTaskImpl* raster_task = static_cast<TestRasterTaskImpl*>(task);
290 tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster(
291 std::move(raster_task->raster_buffer_));
273 RasterTaskResult result; 292 RasterTaskResult result;
274 result.id = id; 293 result.id = raster_task->id_;
275 result.canceled = was_canceled; 294 result.canceled = raster_task->state().IsCanceled();
276 completed_tasks_.push_back(result); 295 completed_tasks_.push_back(result);
277 } 296 }
278 297
279 void OnTimeout() { 298 void OnTimeout() {
280 timed_out_ = true; 299 timed_out_ = true;
281 base::MessageLoop::current()->QuitWhenIdle(); 300 base::MessageLoop::current()->QuitWhenIdle();
282 } 301 }
283 302
284 protected: 303 protected:
285 scoped_refptr<TestContextProvider> context_provider_; 304 scoped_refptr<TestContextProvider> context_provider_;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 387
369 INSTANTIATE_TEST_CASE_P(RasterBufferProviderTests, 388 INSTANTIATE_TEST_CASE_P(RasterBufferProviderTests,
370 RasterBufferProviderTest, 389 RasterBufferProviderTest,
371 ::testing::Values(RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY, 390 ::testing::Values(RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
372 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY, 391 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
373 RASTER_BUFFER_PROVIDER_TYPE_GPU, 392 RASTER_BUFFER_PROVIDER_TYPE_GPU,
374 RASTER_BUFFER_PROVIDER_TYPE_BITMAP)); 393 RASTER_BUFFER_PROVIDER_TYPE_BITMAP));
375 394
376 } // namespace 395 } // namespace
377 } // namespace cc 396 } // namespace cc
OLDNEW
« no previous file with comments | « cc/raster/raster_buffer_provider_perftest.cc ('k') | cc/raster/task.h » ('j') | cc/raster/task.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698