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

Unified Diff: cc/raster/raster_buffer_provider_unittest.cc

Issue 2555743004: Delay activation/draw on GPU tile work completion (Closed)
Patch Set: cleanup Created 4 years 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
Index: cc/raster/raster_buffer_provider_unittest.cc
diff --git a/cc/raster/raster_buffer_provider_unittest.cc b/cc/raster/raster_buffer_provider_unittest.cc
index a88674e9864b810191fc31e800f64c3285d973fa..fe333b7360f4ba9e608a0c47495e48f7b63edf56 100644
--- a/cc/raster/raster_buffer_provider_unittest.cc
+++ b/cc/raster/raster_buffer_provider_unittest.cc
@@ -16,6 +16,7 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "cc/base/unique_notifier.h"
@@ -47,7 +48,9 @@ const size_t kMaxStagingBuffers = 32U;
enum RasterBufferProviderType {
RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
+ RASTER_BUFFER_PROVIDER_TYPE_ASYNC_ONE_COPY,
RASTER_BUFFER_PROVIDER_TYPE_GPU,
+ RASTER_BUFFER_PROVIDER_TYPE_ASYNC_GPU,
RASTER_BUFFER_PROVIDER_TYPE_BITMAP
};
@@ -62,13 +65,11 @@ class TestRasterTaskCompletionHandler {
class TestRasterTaskImpl : public TileTask {
public:
TestRasterTaskImpl(TestRasterTaskCompletionHandler* completion_handler,
- std::unique_ptr<ScopedResource> resource,
unsigned id,
std::unique_ptr<RasterBuffer> raster_buffer,
TileTask::Vector* dependencies)
: TileTask(true, dependencies),
completion_handler_(completion_handler),
- resource_(std::move(resource)),
id_(id),
raster_buffer_(std::move(raster_buffer)),
raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {}
@@ -97,7 +98,6 @@ class TestRasterTaskImpl : public TileTask {
private:
TestRasterTaskCompletionHandler* completion_handler_;
- std::unique_ptr<ScopedResource> resource_;
unsigned id_;
std::unique_ptr<RasterBuffer> raster_buffer_;
scoped_refptr<RasterSource> raster_source_;
@@ -109,13 +109,11 @@ class BlockingTestRasterTaskImpl : public TestRasterTaskImpl {
public:
BlockingTestRasterTaskImpl(
TestRasterTaskCompletionHandler* completion_handler,
- std::unique_ptr<ScopedResource> resource,
unsigned id,
std::unique_ptr<RasterBuffer> raster_buffer,
base::Lock* lock,
TileTask::Vector* dependencies)
: TestRasterTaskImpl(completion_handler,
- std::move(resource),
id,
std::move(raster_buffer),
dependencies),
@@ -173,12 +171,26 @@ class RasterBufferProviderTest
kMaxBytesPerCopyOperation, false, kMaxStagingBuffers,
PlatformColor::BestTextureFormat(), false);
break;
+ case RASTER_BUFFER_PROVIDER_TYPE_ASYNC_ONE_COPY:
+ Create3dResourceProvider();
+ raster_buffer_provider_ = base::MakeUnique<OneCopyRasterBufferProvider>(
+ base::ThreadTaskRunnerHandle::Get().get(), context_provider_.get(),
+ worker_context_provider_.get(), resource_provider_.get(),
+ kMaxBytesPerCopyOperation, false, kMaxStagingBuffers,
+ PlatformColor::BestTextureFormat(), true);
+ break;
case RASTER_BUFFER_PROVIDER_TYPE_GPU:
Create3dResourceProvider();
raster_buffer_provider_ = base::MakeUnique<GpuRasterBufferProvider>(
context_provider_.get(), worker_context_provider_.get(),
resource_provider_.get(), false, 0, false);
break;
+ case RASTER_BUFFER_PROVIDER_TYPE_ASYNC_GPU:
+ Create3dResourceProvider();
+ raster_buffer_provider_ = base::MakeUnique<GpuRasterBufferProvider>(
+ context_provider_.get(), worker_context_provider_.get(),
+ resource_provider_.get(), false, 0, true);
+ break;
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
CreateSoftwareResourceProvider();
raster_buffer_provider_ =
@@ -192,6 +204,7 @@ class RasterBufferProviderTest
}
void TearDown() override {
+ resources_.clear();
tile_task_manager_->Shutdown();
tile_task_manager_->CheckForCompletedTasks();
@@ -234,8 +247,9 @@ class RasterBufferProviderTest
std::unique_ptr<RasterBuffer> raster_buffer =
raster_buffer_provider_->AcquireBufferForRaster(resource.get(), 0, 0);
TileTask::Vector empty;
- tasks_.push_back(new TestRasterTaskImpl(this, std::move(resource), id,
- std::move(raster_buffer), &empty));
+ tasks_.push_back(
+ new TestRasterTaskImpl(this, id, std::move(raster_buffer), &empty));
+ resources_.push_back(std::move(resource));
}
void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); }
@@ -252,7 +266,8 @@ class RasterBufferProviderTest
raster_buffer_provider_->AcquireBufferForRaster(resource.get(), 0, 0);
TileTask::Vector empty;
tasks_.push_back(new BlockingTestRasterTaskImpl(
- this, std::move(resource), id, std::move(raster_buffer), lock, &empty));
+ this, id, std::move(raster_buffer), lock, &empty));
+ resources_.push_back(std::move(resource));
}
const std::vector<RasterTaskResult>& completed_tasks() const {
@@ -314,6 +329,7 @@ class RasterBufferProviderTest
bool timed_out_;
RasterTaskVector tasks_;
std::vector<RasterTaskResult> completed_tasks_;
+ std::vector<std::unique_ptr<ScopedResource>> resources_;
TaskGraph graph_;
};
@@ -383,12 +399,66 @@ TEST_P(RasterBufferProviderTest, LostContext) {
EXPECT_FALSE(completed_tasks()[1].canceled);
}
-INSTANTIATE_TEST_CASE_P(RasterBufferProviderTests,
- RasterBufferProviderTest,
- ::testing::Values(RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
- RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
- RASTER_BUFFER_PROVIDER_TYPE_GPU,
- RASTER_BUFFER_PROVIDER_TYPE_BITMAP));
+TEST_P(RasterBufferProviderTest, ReadyToDrawCallback) {
+ AppendTask(0u);
+ ScheduleTasks();
+ RunMessageLoopUntilAllTasksHaveCompleted();
+
+ ResourceProvider::ResourceIdArray array;
+ for (const auto& resource : resources_) {
+ array.push_back(resource->id());
+ }
+ base::RunLoop run_loop;
+ uint64_t callback_id = raster_buffer_provider_->SetReadyToDrawCallback(
+ array, base::Bind([](base::RunLoop* run_loop,
+ uint64_t callback_id) { run_loop->Quit(); },
+ &run_loop),
+ 0);
+
+ if (GetParam() == RASTER_BUFFER_PROVIDER_TYPE_ASYNC_GPU ||
+ GetParam() == RASTER_BUFFER_PROVIDER_TYPE_ASYNC_ONE_COPY)
+ EXPECT_TRUE(callback_id);
+
+ if (!callback_id)
+ return;
+
+ run_loop.Run();
+}
+
+TEST_P(RasterBufferProviderTest, ReadyToDrawCallbackNoDuplicate) {
+ AppendTask(0u);
+ ScheduleTasks();
+ RunMessageLoopUntilAllTasksHaveCompleted();
+
+ ResourceProvider::ResourceIdArray array;
+ for (const auto& resource : resources_) {
+ array.push_back(resource->id());
+ }
+
+ uint64_t callback_id = raster_buffer_provider_->SetReadyToDrawCallback(
+ array, base::Bind([](uint64_t) {}), 0);
+
+ // Calling SetReadyToDrawCallback a second time for the same resources
+ // should return the same callback ID.
+ uint64_t callback_id_2 = raster_buffer_provider_->SetReadyToDrawCallback(
+ array, base::Bind([](uint64_t) {}), 0);
+
+ EXPECT_EQ(callback_id, callback_id_2);
+
+ if (GetParam() == RASTER_BUFFER_PROVIDER_TYPE_ASYNC_GPU ||
+ GetParam() == RASTER_BUFFER_PROVIDER_TYPE_ASYNC_ONE_COPY)
+ EXPECT_TRUE(callback_id);
+}
+
+INSTANTIATE_TEST_CASE_P(
+ RasterBufferProviderTests,
+ RasterBufferProviderTest,
+ ::testing::Values(RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
+ RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
+ RASTER_BUFFER_PROVIDER_TYPE_ASYNC_ONE_COPY,
+ RASTER_BUFFER_PROVIDER_TYPE_GPU,
+ RASTER_BUFFER_PROVIDER_TYPE_ASYNC_GPU,
+ RASTER_BUFFER_PROVIDER_TYPE_BITMAP));
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698