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

Unified Diff: cc/resources/raster_worker_pool_unittest.cc

Issue 131763003: cc: Fix logic for detecting when raster tasks were throttled (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/pixel_buffer_raster_worker_pool.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 faa0cf7c7fd2a0512005ab79df46c1047571fdb9..2edc9c0ed4ac62b462d436256c6b26bf3eb019e3 100644
--- a/cc/resources/raster_worker_pool_unittest.cc
+++ b/cc/resources/raster_worker_pool_unittest.cc
@@ -70,6 +70,39 @@ class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl);
};
+class BlockingRasterWorkerPoolTaskImpl : public TestRasterWorkerPoolTaskImpl {
+ public:
+ BlockingRasterWorkerPoolTaskImpl(const Resource* resource,
+ const Reply& reply,
+ base::Lock* lock,
+ TaskVector* dependencies,
+ bool use_gpu_rasterization)
+ : TestRasterWorkerPoolTaskImpl(resource,
+ reply,
+ dependencies,
+ use_gpu_rasterization),
+ lock_(lock) {}
+
+ // Overridden from TestRasterWorkerPoolTaskImpl:
+ virtual bool RunOnWorkerThread(unsigned thread_index,
+ void* buffer,
+ gfx::Size size,
+ int stride) OVERRIDE {
+ base::AutoLock lock(*lock_);
+ return TestRasterWorkerPoolTaskImpl::RunOnWorkerThread(
+ thread_index, buffer, size, stride);
+ }
+ virtual void CompleteOnOriginThread() OVERRIDE {}
+
+ protected:
+ virtual ~BlockingRasterWorkerPoolTaskImpl() {}
+
+ private:
+ base::Lock* lock_;
+
+ DISALLOW_COPY_AND_ASSIGN(BlockingRasterWorkerPoolTaskImpl);
+};
+
class RasterWorkerPoolTest : public testing::Test,
public RasterWorkerPoolClient {
public:
@@ -190,6 +223,27 @@ class RasterWorkerPoolTest : public testing::Test,
use_gpu_rasterization)));
}
+ void AppendBlockingTask(unsigned id, base::Lock* lock) {
+ const gfx::Size size(1, 1);
+
+ scoped_ptr<ScopedResource> resource(
+ ScopedResource::Create(resource_provider()));
+ resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
+ const Resource* const_resource = resource.get();
+
+ RasterWorkerPool::Task::Set empty;
+ tasks_.push_back(
+ RasterWorkerPool::RasterTask(new BlockingRasterWorkerPoolTaskImpl(
+ const_resource,
+ base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
+ base::Unretained(this),
+ base::Passed(&resource),
+ id),
+ lock,
+ &empty.tasks_,
+ false)));
+ }
+
virtual void OnTaskCompleted(
scoped_ptr<ScopedResource> resource,
unsigned id,
@@ -379,6 +433,40 @@ class RasterWorkerPoolTestFailedMapResource : public RasterWorkerPoolTest {
PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestFailedMapResource);
+class RasterWorkerPoolTestFalseThrottling : public RasterWorkerPoolTest {
+ public:
+ // Overridden from RasterWorkerPoolTest:
+ virtual void BeginTest() OVERRIDE {
+ // This test checks that replacing a pending raster task with another does
+ // not prevent the DidFinishRunningTasks notification from being sent.
+
+ // Schedule a task that is prevented from completing with a lock.
+ lock_.Acquire();
+ AppendBlockingTask(0u, &lock_);
+ ScheduleTasks();
+
+ // Schedule another task to replace the still-pending task. Because the old
+ // task is not a throttled task in the new task set, it should not prevent
+ // DidFinishRunningTasks from getting signaled.
+ tasks_.clear();
+ AppendTask(1u, false);
+ ScheduleTasks();
+
+ // Unblock the first task to allow the second task to complete.
+ lock_.Release();
+ }
+
+ virtual void AfterTest() OVERRIDE {}
+
+ virtual void DidFinishRunningTasks() OVERRIDE {
+ EndTest();
+ }
+
+ base::Lock lock_;
+};
+
+PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestFalseThrottling);
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/resources/pixel_buffer_raster_worker_pool.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698