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

Unified Diff: cc/raster/raster_buffer_provider_unittest.cc

Issue 2555743004: Delay activation/draw on GPU tile work completion (Closed)
Patch Set: rebase compile fix Created 3 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/raster/raster_buffer_provider.h ('k') | cc/raster/zero_copy_raster_buffer_provider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3b8668d85ff0fb4104e3e190a9dfac81c8f84bc6..2f51ef7fde5292cb9444bc0cc3b7b38f07be54ef 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))) {}
@@ -96,7 +97,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_;
@@ -108,13 +108,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),
@@ -172,12 +170,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_ =
@@ -191,6 +203,7 @@ class RasterBufferProviderTest
}
void TearDown() override {
+ resources_.clear();
tile_task_manager_->Shutdown();
tile_task_manager_->CheckForCompletedTasks();
@@ -233,8 +246,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)); }
@@ -251,7 +265,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 {
@@ -313,6 +328,7 @@ class RasterBufferProviderTest
bool timed_out_;
RasterTaskVector tasks_;
std::vector<RasterTaskResult> completed_tasks_;
+ std::vector<std::unique_ptr<ScopedResource>> resources_;
TaskGraph graph_;
};
@@ -382,12 +398,65 @@ 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) { 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([]() {}), 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([]() {}), 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
« no previous file with comments | « cc/raster/raster_buffer_provider.h ('k') | cc/raster/zero_copy_raster_buffer_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698