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

Unified Diff: cc/trees/layer_tree_host_unittest.cc

Issue 2208693003: Revert of cc: Make LayerTreeTests use a DelegatingRenderer and Display. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_unittest.cc
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 961f58f52ef8685bfd3bb5fd2b9345b83a1da00f..45c435a0a6277611382918892238a3c8deb91bdb 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -47,7 +47,6 @@
#include "cc/test/layer_internals_for_test.h"
#include "cc/test/layer_tree_test.h"
#include "cc/test/skia_common.h"
-#include "cc/test/test_delegating_output_surface.h"
#include "cc/test/test_shared_bitmap_manager.h"
#include "cc/test/test_web_graphics_context_3d.h"
#include "cc/trees/effect_node.h"
@@ -433,37 +432,25 @@
class LayerTreeHostFreeWorkerContextResourcesTest : public LayerTreeHostTest {
public:
- std::unique_ptr<TestDelegatingOutputSurface> CreateDelegatingOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider,
- scoped_refptr<ContextProvider> worker_context_provider) override {
- auto mock_worker_context_support_owned =
- base::MakeUnique<MockContextSupport>();
- auto* mock_worker_context_support = mock_worker_context_support_owned.get();
-
- auto mock_worker_context_provider = make_scoped_refptr(
- new MockContextProvider(std::move(mock_worker_context_support_owned)));
-
- // Workers are bound on the main thread.
- mock_worker_context_provider->BindToCurrentThread();
+ std::unique_ptr<OutputSurface> CreateOutputSurface() override {
+ auto output_surface = base::WrapUnique(
+ new testing::StrictMock<
+ MockSetWorkerContextShouldAggressivelyFreeResourcesOutputSurface>(
+ delegating_renderer()));
// At init, we expect one call to set visibility to true.
testing::Expectation visibility_true =
- EXPECT_CALL(*mock_worker_context_support,
- SetAggressivelyFreeResources(false))
+ EXPECT_CALL(*output_surface,
+ SetWorkerContextShouldAggressivelyFreeResources(false))
.Times(1);
// After running, we should get exactly one call to
- // DeleteCachedResources, along with SetAggressivelyFreeResources.
- EXPECT_CALL(*mock_worker_context_provider, DeleteCachedResources())
- .After(visibility_true);
- EXPECT_CALL(*mock_worker_context_support,
- SetAggressivelyFreeResources(true))
+ // FreeWorkerContextGpuResources.
+ EXPECT_CALL(*output_surface,
+ SetWorkerContextShouldAggressivelyFreeResources(true))
.After(visibility_true)
.WillOnce(testing::Invoke([this](bool is_visible) { EndTest(); }));
-
- return LayerTreeHostTest::CreateDelegatingOutputSurface(
- std::move(compositor_context_provider),
- std::move(mock_worker_context_provider));
+ return std::move(output_surface);
}
void InitializeSettings(LayerTreeSettings* settings) override {
@@ -471,27 +458,27 @@
settings->gpu_rasterization_forced = true;
}
- void BeginTest() override {}
- void AfterTest() override {}
+ void BeginTest() override {
+ // Logic is handled in InitializedRendererOnThread to ensure that our
+ // LTHI is fully set up.
+ }
+
+ void AfterTest() override {
+ // Expectations handled via mock.
+ }
private:
- class MockContextProvider : public TestContextProvider {
+ class MockSetWorkerContextShouldAggressivelyFreeResourcesOutputSurface
+ : public FakeOutputSurface {
public:
- explicit MockContextProvider(std::unique_ptr<TestContextSupport> support)
- : TestContextProvider(std::move(support),
- base::MakeUnique<TestGLES2Interface>(),
- TestWebGraphicsContext3D::Create()) {}
-
- MOCK_METHOD0(DeleteCachedResources, void());
-
- private:
- ~MockContextProvider() = default;
- };
-
- class MockContextSupport : public TestContextSupport {
- public:
- MOCK_METHOD1(SetAggressivelyFreeResources,
- void(bool aggressively_free_resources));
+ ~MockSetWorkerContextShouldAggressivelyFreeResourcesOutputSurface() {}
+ explicit MockSetWorkerContextShouldAggressivelyFreeResourcesOutputSurface(
+ bool delegated_rendering)
+ : FakeOutputSurface(TestContextProvider::Create(),
+ TestContextProvider::CreateWorker(),
+ delegated_rendering) {}
+ MOCK_METHOD1(SetWorkerContextShouldAggressivelyFreeResources,
+ void(bool is_visible));
};
};
@@ -533,6 +520,7 @@
public:
void InitializeSettings(LayerTreeSettings* settings) override {
LayerTreeHostFreeWorkerContextResourcesTest::InitializeSettings(settings);
+ settings->use_external_begin_frame_source = true;
settings->using_synchronous_renderer_compositor = true;
}
};
@@ -2574,10 +2562,39 @@
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestLCDChange);
+// Verify that the BeginFrame notification is used to initiate rendering.
+class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest {
+ public:
+ void InitializeSettings(LayerTreeSettings* settings) override {
+ settings->use_external_begin_frame_source = true;
+ }
+
+ void BeginTest() override {
+ // This will trigger a SetNeedsBeginFrame which will trigger a
+ // BeginFrame.
+ PostSetNeedsCommitToMainThread();
+ }
+
+ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
+ LayerTreeHostImpl::FrameData* frame,
+ DrawResult draw_result) override {
+ EndTest();
+ return DRAW_SUCCESS;
+ }
+
+ void AfterTest() override {}
+
+ private:
+ base::TimeTicks frame_time_;
+};
+
+MULTI_THREAD_TEST_F(LayerTreeHostTestBeginFrameNotification);
+
class LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled
: public LayerTreeHostTest {
public:
void InitializeSettings(LayerTreeSettings* settings) override {
+ settings->use_external_begin_frame_source = true;
settings->using_synchronous_renderer_compositor = true;
}
@@ -2588,7 +2605,8 @@
// once we return. End test while it's enabled.
ImplThreadTaskRunner()->PostTask(
FROM_HERE,
- base::Bind(&LayerTreeHostTest::EndTest, base::Unretained(this)));
+ base::Bind(&LayerTreeHostTestBeginFrameNotification::EndTest,
+ base::Unretained(this)));
}
void AfterTest() override {}
@@ -2601,6 +2619,10 @@
protected:
LayerTreeHostTestAbortedCommitDoesntStall()
: commit_count_(0), commit_abort_count_(0), commit_complete_count_(0) {}
+
+ void InitializeSettings(LayerTreeSettings* settings) override {
+ settings->use_external_begin_frame_source = true;
+ }
void BeginTest() override { PostSetNeedsCommitToMainThread(); }
@@ -2642,41 +2664,35 @@
int commit_complete_count_;
};
-class OnDrawOutputSurface : public TestDelegatingOutputSurface {
+class OnDrawOutputSurface : public OutputSurface {
public:
- explicit OnDrawOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider,
- scoped_refptr<ContextProvider> worker_context_provider,
- std::unique_ptr<OutputSurface> display_output_surface,
- SharedBitmapManager* shared_bitmap_manager,
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
- const RendererSettings& renderer_settings,
- base::SingleThreadTaskRunner* task_runner,
- bool synchronous_composite,
- bool force_disable_reclaim_resources,
- base::Closure invalidate_callback)
- : TestDelegatingOutputSurface(std::move(compositor_context_provider),
- std::move(worker_context_provider),
- std::move(display_output_surface),
- shared_bitmap_manager,
- gpu_memory_buffer_manager,
- renderer_settings,
- task_runner,
- synchronous_composite,
- force_disable_reclaim_resources),
- invalidate_callback_(std::move(invalidate_callback)) {}
-
- // TestDelegatingOutputSurface overrides.
+ explicit OnDrawOutputSurface(base::Closure invalidate_callback)
+ : OutputSurface(TestContextProvider::Create(),
+ TestContextProvider::CreateWorker(),
+ nullptr),
+ invalidate_callback_(std::move(invalidate_callback)) {
+ capabilities_.delegated_rendering = true;
+ }
+
+ // OutputSurface implementation.
+ void SwapBuffers(CompositorFrame frame) override { did_swap_ = true; }
+ uint32_t GetFramebufferCopyTextureFormat() override { return 0; }
void Invalidate() override { invalidate_callback_.Run(); }
void OnDraw(bool resourceless_software_draw) {
gfx::Transform identity;
gfx::Rect empty_rect;
+ // SwapBuffers happens inside of OnDraw.
client_->OnDraw(identity, empty_rect, resourceless_software_draw);
+ if (did_swap_) {
+ did_swap_ = false;
+ client_->DidSwapBuffersComplete();
+ }
}
private:
- const base::Closure invalidate_callback_;
+ bool did_swap_ = false;
+ base::Closure invalidate_callback_;
};
class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor
@@ -2687,21 +2703,11 @@
settings->using_synchronous_renderer_compositor = true;
}
- std::unique_ptr<TestDelegatingOutputSurface> CreateDelegatingOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider,
- scoped_refptr<ContextProvider> worker_context_provider) override {
- auto on_draw_callback = base::Bind(
+ std::unique_ptr<OutputSurface> CreateOutputSurface() override {
+ auto output_surface = base::MakeUnique<OnDrawOutputSurface>(base::Bind(
&LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor::
CallOnDraw,
- base::Unretained(this));
- auto output_surface = base::MakeUnique<OnDrawOutputSurface>(
- compositor_context_provider, std::move(worker_context_provider),
- CreateDisplayOutputSurface(compositor_context_provider),
- shared_bitmap_manager(), gpu_memory_buffer_manager(),
- layer_tree_host()->settings().renderer_settings, ImplThreadTaskRunner(),
- false /* synchronous_composite */,
- false /* force_disable_reclaim_resources */,
- std::move(on_draw_callback));
+ base::Unretained(this)));
output_surface_ = output_surface.get();
return std::move(output_surface);
}
@@ -2837,20 +2843,10 @@
client_.set_bounds(root_layer_->bounds());
}
- std::unique_ptr<TestDelegatingOutputSurface> CreateDelegatingOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider,
- scoped_refptr<ContextProvider> worker_context_provider) override {
- auto on_draw_callback =
+ std::unique_ptr<OutputSurface> CreateOutputSurface() override {
+ auto output_surface = base::MakeUnique<OnDrawOutputSurface>(
base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw,
- base::Unretained(this));
- auto output_surface = base::MakeUnique<OnDrawOutputSurface>(
- compositor_context_provider, std::move(worker_context_provider),
- CreateDisplayOutputSurface(compositor_context_provider),
- shared_bitmap_manager(), gpu_memory_buffer_manager(),
- layer_tree_host()->settings().renderer_settings, ImplThreadTaskRunner(),
- false /* synchronous_composite */,
- false /* force_disable_reclaim_resources */,
- std::move(on_draw_callback));
+ base::Unretained(this)));
output_surface_ = output_surface.get();
return std::move(output_surface);
}
@@ -4380,19 +4376,22 @@
: first_output_surface_memory_limit_(4321234),
second_output_surface_memory_limit_(1234321) {}
- std::unique_ptr<OutputSurface> CreateDisplayOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider) override {
- if (!first_context_provider_) {
+ std::unique_ptr<OutputSurface> CreateOutputSurface() override {
+ if (!first_context_provider_.get()) {
first_context_provider_ = TestContextProvider::Create();
- compositor_context_provider = first_context_provider_;
} else {
- EXPECT_FALSE(second_context_provider_);
+ EXPECT_FALSE(second_context_provider_.get());
second_context_provider_ = TestContextProvider::Create();
- compositor_context_provider = second_context_provider_;
- }
-
- auto output_surface =
- FakeOutputSurface::Create3d(std::move(compositor_context_provider));
+ }
+
+ scoped_refptr<TestContextProvider> provider(second_context_provider_.get()
+ ? second_context_provider_
+ : first_context_provider_);
+ std::unique_ptr<FakeOutputSurface> output_surface;
+ if (delegating_renderer())
+ output_surface = FakeOutputSurface::CreateDelegating3d(provider);
+ else
+ output_surface = FakeOutputSurface::Create3d(provider);
output_surface->SetMemoryPolicyToSetAtBind(
base::WrapUnique(new ManagedMemoryPolicy(
second_context_provider_.get() ? second_output_surface_memory_limit_
@@ -4528,7 +4527,7 @@
}
}
- void DisplayDidDrawAndSwapOnThread() override { EndTest(); }
+ void SwapBuffersCompleteOnThread() override { EndTest(); }
void AfterTest() override {
// The pending swap promise should activate and swap.
@@ -4720,7 +4719,7 @@
: base::Closure());
}
- void DisplayDidDrawAndSwapOnThread() override {
+ void SwapBuffersCompleteOnThread() override {
if (num_swaps_++ >= 1) {
// The commit changes layers so it should cause a swap.
base::AutoLock lock(swap_promise_result_.lock);
@@ -5472,27 +5471,11 @@
class LayerTreeHostTestSynchronousCompositeSwapPromise
: public LayerTreeHostTest {
public:
- LayerTreeHostTestSynchronousCompositeSwapPromise() = default;
+ LayerTreeHostTestSynchronousCompositeSwapPromise() : commit_count_(0) {}
void InitializeSettings(LayerTreeSettings* settings) override {
settings->single_thread_proxy_scheduler = false;
settings->use_zero_copy = true;
- }
-
- std::unique_ptr<TestDelegatingOutputSurface> CreateDelegatingOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider,
- scoped_refptr<ContextProvider> worker_context_provider) override {
- bool synchronous_composite =
- !HasImplThread() &&
- !layer_tree_host()->settings().single_thread_proxy_scheduler;
- // Relaiming resources is parameterized for this test.
- bool force_disable_reclaim_resources = !reclaim_resources_;
- return base::MakeUnique<TestDelegatingOutputSurface>(
- compositor_context_provider, std::move(worker_context_provider),
- CreateDisplayOutputSurface(compositor_context_provider),
- shared_bitmap_manager(), gpu_memory_buffer_manager(),
- layer_tree_host()->settings().renderer_settings, ImplThreadTaskRunner(),
- synchronous_composite, force_disable_reclaim_resources);
}
void BeginTest() override {
@@ -5502,7 +5485,7 @@
layer_tree_host()->QueueSwapPromise(std::move(swap_promise0));
layer_tree_host()->Composite(base::TimeTicks::Now());
- // Fail to swap (no damage) if not reclaiming resources from the Display.
+ // Fail to swap (no damage).
std::unique_ptr<SwapPromise> swap_promise1(
new TestSwapPromise(&swap_promise_result_[1]));
layer_tree_host()->QueueSwapPromise(std::move(swap_promise1));
@@ -5536,19 +5519,13 @@
EXPECT_TRUE(swap_promise_result_[0].dtor_called);
}
- // Second swap promise fails to swap if not reclaiming resources from the
- // Display.
+ // Second swap promise fails to swap.
{
base::AutoLock lock(swap_promise_result_[1].lock);
EXPECT_TRUE(swap_promise_result_[1].did_activate_called);
- if (!reclaim_resources_) {
- EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
- EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
- EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason);
- } else {
- EXPECT_TRUE(swap_promise_result_[1].did_swap_called);
- EXPECT_FALSE(swap_promise_result_[1].did_not_swap_called);
- }
+ EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
+ EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
+ EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason);
EXPECT_TRUE(swap_promise_result_[1].dtor_called);
}
@@ -5563,20 +5540,11 @@
}
}
- bool reclaim_resources_;
- int commit_count_ = 0;
+ int commit_count_;
TestSwapPromiseResult swap_promise_result_[3];
};
-TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, NoReclaim) {
- reclaim_resources_ = false;
- RunTest(CompositorMode::SINGLE_THREADED, true);
-}
-
-TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, Reclaim) {
- reclaim_resources_ = true;
- RunTest(CompositorMode::SINGLE_THREADED, true);
-}
+SINGLE_THREAD_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise);
// Make sure page scale and top control deltas are applied to the client even
// when the LayerTreeHost doesn't have a root layer.
@@ -5814,18 +5782,19 @@
class LayerTreeHostTestCrispUpAfterPinchEndsWithOneCopy
: public LayerTreeHostTestCrispUpAfterPinchEnds {
protected:
- std::unique_ptr<OutputSurface> CreateDisplayOutputSurface(
- scoped_refptr<ContextProvider> compositor_context_provider) override {
- scoped_refptr<TestContextProvider> display_context_provider =
- TestContextProvider::Create();
- TestWebGraphicsContext3D* context3d =
- display_context_provider->UnboundTestContext3d();
+ std::unique_ptr<OutputSurface> CreateOutputSurface() override {
+ std::unique_ptr<TestWebGraphicsContext3D> context3d =
+ TestWebGraphicsContext3D::Create();
+ context3d->set_support_image(true);
context3d->set_support_sync_query(true);
#if defined(OS_MACOSX)
context3d->set_support_texture_rectangle(true);
#endif
- return LayerTreeTest::CreateDisplayOutputSurface(
- std::move(display_context_provider));
+
+ if (delegating_renderer())
+ return FakeOutputSurface::CreateDelegating3d(std::move(context3d));
+ else
+ return FakeOutputSurface::Create3d(std::move(context3d));
}
};
@@ -6865,6 +6834,14 @@
// frame's metadata.
class LayerTreeHostTestPaintedDeviceScaleFactor : public LayerTreeHostTest {
protected:
+ LayerTreeHostTestPaintedDeviceScaleFactor() = default;
+
+ std::unique_ptr<OutputSurface> CreateOutputSurface() override {
+ auto ret = FakeOutputSurface::CreateDelegating3d();
+ fake_output_surface_ = ret.get();
+ return std::move(ret);
+ }
+
void BeginTest() override {
layer_tree_host()->SetPaintedDeviceScaleFactor(2.0f);
EXPECT_EQ(1.0f, layer_tree_host()->device_scale_factor());
@@ -6876,13 +6853,16 @@
EXPECT_EQ(1.0f, host_impl->active_tree()->device_scale_factor());
}
- void DisplayReceivedCompositorFrameOnThread(
- const CompositorFrame& frame) override {
- EXPECT_EQ(2.0f, frame.metadata.device_scale_factor);
+ void SwapBuffersCompleteOnThread() override {
+ EXPECT_EQ(
+ 2.0f,
+ fake_output_surface_->last_sent_frame()->metadata.device_scale_factor);
EndTest();
}
void AfterTest() override {}
+
+ FakeOutputSurface* fake_output_surface_ = nullptr;
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPaintedDeviceScaleFactor);
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698