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

Unified Diff: cc/trees/layer_tree_host_unittest.cc

Issue 1028333002: Chromium -> Mojo roll. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 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 94164743909db23053e85396289c1982063c82c8..201af9a45fc63cbabb5158445a7a1fbf564458f7 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -68,7 +68,17 @@ using testing::Mock;
namespace cc {
namespace {
-class LayerTreeHostTest : public LayerTreeTest {};
+class LayerTreeHostTest : public LayerTreeTest {
+ public:
+ LayerTreeHostTest() : contents_texture_manager_(nullptr) {}
+
+ void DidInitializeOutputSurface() override {
+ contents_texture_manager_ = layer_tree_host()->contents_texture_manager();
+ }
+
+ protected:
+ PrioritizedResourceManager* contents_texture_manager_;
+};
// Test if the LTHI receives ReadyToActivate notifications from the TileManager
// when no raster tasks get scheduled.
@@ -473,6 +483,86 @@ class LayerTreeHostTestSetNeedsRedrawRect : public LayerTreeHostTest {
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedrawRect);
+// Ensure the texture size of the pending and active trees are identical when a
+// layer is not in the viewport and a resize happens on the viewport
+class LayerTreeHostTestGpuRasterDeviceSizeChanged : public LayerTreeHostTest {
+ public:
+ LayerTreeHostTestGpuRasterDeviceSizeChanged()
+ : num_draws_(0), bounds_(500, 64), invalid_rect_(10, 10, 20, 20) {}
+
+ void BeginTest() override {
+ client_.set_fill_with_nonsolid_color(true);
+ root_layer_ = FakePictureLayer::Create(&client_);
+ root_layer_->SetIsDrawable(true);
+ gfx::Transform transform;
+ // Translate the layer out of the viewport to force it to not update its
+ // tile size via PushProperties.
+ transform.Translate(10000.0, 10000.0);
+ root_layer_->SetTransform(transform);
+ root_layer_->SetBounds(bounds_);
+ layer_tree_host()->SetRootLayer(root_layer_);
+ layer_tree_host()->SetViewportSize(bounds_);
+
+ PostSetNeedsCommitToMainThread();
+ }
+
+ void InitializeSettings(LayerTreeSettings* settings) override {
+ settings->gpu_rasterization_enabled = true;
+ settings->gpu_rasterization_forced = true;
+ }
+
+ void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
+ // Perform 2 commits.
+ if (!num_draws_) {
+ PostSetNeedsRedrawRectToMainThread(invalid_rect_);
+ } else {
+ EndTest();
+ }
+ num_draws_++;
+ }
+
+ void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
+ if (num_draws_ == 2) {
+ auto pending_tree = host_impl->pending_tree();
+ auto pending_layer_impl =
+ static_cast<FakePictureLayerImpl*>(pending_tree->root_layer());
+ EXPECT_NE(pending_layer_impl, nullptr);
+
+ auto active_tree = host_impl->pending_tree();
+ auto active_layer_impl =
+ static_cast<FakePictureLayerImpl*>(active_tree->root_layer());
+ EXPECT_NE(pending_layer_impl, nullptr);
+
+ auto active_tiling_set = active_layer_impl->picture_layer_tiling_set();
+ auto active_tiling = active_tiling_set->tiling_at(0);
+ auto pending_tiling_set = pending_layer_impl->picture_layer_tiling_set();
+ auto pending_tiling = pending_tiling_set->tiling_at(0);
+ EXPECT_EQ(
+ pending_tiling->TilingDataForTesting().max_texture_size().width(),
+ active_tiling->TilingDataForTesting().max_texture_size().width());
+ }
+ }
+
+ void DidCommitAndDrawFrame() override {
+ // On the second commit, resize the viewport.
+ if (num_draws_ == 1) {
+ layer_tree_host()->SetViewportSize(gfx::Size(400, 64));
+ }
+ }
+
+ void AfterTest() override {}
+
+ private:
+ int num_draws_;
+ const gfx::Size bounds_;
+ const gfx::Rect invalid_rect_;
+ FakeContentLayerClient client_;
+ scoped_refptr<FakePictureLayer> root_layer_;
+};
+
+SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(
+ LayerTreeHostTestGpuRasterDeviceSizeChanged);
+
class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest {
public:
void InitializeSettings(LayerTreeSettings* settings) override {
@@ -692,6 +782,13 @@ class LayerTreeHostTestUndrawnLayersDamageLater : public LayerTreeHostTest {
public:
LayerTreeHostTestUndrawnLayersDamageLater() {}
+ void InitializeSettings(LayerTreeSettings* settings) override {
+ // If we don't set the minimum contents scale, it's harder to verify whether
+ // the damage we get is correct. For other scale amounts, please see
+ // LayerTreeHostTestDamageWithScale.
+ settings->minimum_contents_scale = 1.f;
+ }
+
void SetupTree() override {
if (layer_tree_host()->settings().impl_side_painting)
root_layer_ = FakePictureLayer::Create(&client_);
@@ -786,6 +883,114 @@ class LayerTreeHostTestUndrawnLayersDamageLater : public LayerTreeHostTest {
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestUndrawnLayersDamageLater);
+// Tests that if a layer is not drawn because of some reason in the parent then
+// its damage is preserved until the next time it is drawn.
+class LayerTreeHostTestDamageWithScale : public LayerTreeHostTest {
+ public:
+ LayerTreeHostTestDamageWithScale() {}
+
+ void SetupTree() override {
+ client_.set_fill_with_nonsolid_color(true);
+
+ scoped_ptr<FakePicturePile> pile(
+ new FakePicturePile(ImplSidePaintingSettings().minimum_contents_scale,
+ ImplSidePaintingSettings().default_tile_grid_size));
+ root_layer_ =
+ FakePictureLayer::CreateWithRecordingSource(&client_, pile.Pass());
+ root_layer_->SetBounds(gfx::Size(50, 50));
+
+ pile.reset(
+ new FakePicturePile(ImplSidePaintingSettings().minimum_contents_scale,
+ ImplSidePaintingSettings().default_tile_grid_size));
+ child_layer_ =
+ FakePictureLayer::CreateWithRecordingSource(&client_, pile.Pass());
+ child_layer_->SetBounds(gfx::Size(25, 25));
+ child_layer_->SetIsDrawable(true);
+ child_layer_->SetContentsOpaque(true);
+ root_layer_->AddChild(child_layer_);
+
+ layer_tree_host()->SetRootLayer(root_layer_);
+ LayerTreeHostTest::SetupTree();
+ }
+
+ void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
+ // Force the layer to have a tiling at 1.3f scale. Note that if we simply
+ // add tiling, it will be gone by the time we draw because of aggressive
+ // cleanup. AddTilingUntilNextDraw ensures that it remains there during
+ // damage calculation.
+ FakePictureLayerImpl* child_layer_impl = static_cast<FakePictureLayerImpl*>(
+ host_impl->active_tree()->LayerById(child_layer_->id()));
+ child_layer_impl->AddTilingUntilNextDraw(1.3f);
+ }
+
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+
+ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
+ LayerTreeHostImpl::FrameData* frame_data,
+ DrawResult draw_result) override {
+ EXPECT_EQ(DRAW_SUCCESS, draw_result);
+
+ gfx::RectF root_damage_rect;
+ if (!frame_data->render_passes.empty())
+ root_damage_rect = frame_data->render_passes.back()->damage_rect;
+
+ // The first time, the whole view needs be drawn.
+ // Afterwards, just the opacity of surface_layer1 is changed a few times,
+ // and each damage should be the bounding box of it and its child. If this
+ // was working improperly, the damage might not include its childs bounding
+ // box.
+ switch (host_impl->active_tree()->source_frame_number()) {
+ case 0:
+ EXPECT_EQ(gfx::Rect(root_layer_->bounds()), root_damage_rect);
+ break;
+ case 1: {
+ FakePictureLayerImpl* child_layer_impl =
+ static_cast<FakePictureLayerImpl*>(
+ host_impl->active_tree()->LayerById(child_layer_->id()));
+ // We remove tilings pretty aggressively if they are not ideal. Add this
+ // back in so that we can compare
+ // child_layer_impl->GetEnclosingRectInTargetSpace to the damage.
+ child_layer_impl->AddTilingUntilNextDraw(1.3f);
+
+ EXPECT_EQ(gfx::Rect(26, 26), root_damage_rect);
+ EXPECT_EQ(child_layer_impl->GetEnclosingRectInTargetSpace(),
+ root_damage_rect);
+ EXPECT_TRUE(child_layer_impl->GetEnclosingRectInTargetSpace().Contains(
+ gfx::Rect(child_layer_->bounds())));
+ break;
+ }
+ default:
+ NOTREACHED();
+ }
+
+ return draw_result;
+ }
+
+ void DidCommitAndDrawFrame() override {
+ switch (layer_tree_host()->source_frame_number()) {
+ case 1: {
+ // Test not owning the surface.
+ child_layer_->SetOpacity(0.5f);
+ break;
+ }
+ case 2:
+ EndTest();
+ break;
+ default:
+ NOTREACHED();
+ }
+ }
+
+ void AfterTest() override {}
+
+ private:
+ FakeContentLayerClient client_;
+ scoped_refptr<Layer> root_layer_;
+ scoped_refptr<Layer> child_layer_;
+};
+
+MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestDamageWithScale);
+
// Tests that if a layer is not drawn because of some reason in the parent,
// causing its content bounds to not be computed, then when it is later drawn,
// its content bounds get pushed.
@@ -1346,7 +1551,7 @@ class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest {
}
void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
- ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates);
+ ASSERT_EQ(0u, impl->settings().max_partial_texture_updates);
TestWebGraphicsContext3D* context = TestContext();
@@ -1425,7 +1630,7 @@ class LayerTreeHostTestDelegatingRendererAtomicCommit
: public LayerTreeHostTestDirectRendererAtomicCommit {
public:
void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
- ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates);
+ ASSERT_EQ(0u, impl->settings().max_partial_texture_updates);
TestWebGraphicsContext3D* context = TestContext();
@@ -1542,7 +1747,7 @@ class LayerTreeHostTestAtomicCommitWithPartialUpdate
}
void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
- ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates);
+ ASSERT_EQ(1u, impl->settings().max_partial_texture_updates);
TestWebGraphicsContext3D* context = TestContext();
@@ -2082,7 +2287,7 @@ class LayerTreeHostWithProxy : public LayerTreeHost {
LayerTreeHostWithProxy(FakeLayerTreeHostClient* client,
const LayerTreeSettings& settings,
scoped_ptr<FakeProxy> proxy)
- : LayerTreeHost(client, NULL, NULL, settings) {
+ : LayerTreeHost(client, NULL, NULL, NULL, settings) {
proxy->SetLayerTreeHost(this);
client->SetLayerTreeHost(this);
InitializeForTesting(proxy.Pass());
@@ -2154,14 +2359,9 @@ TEST(LayerTreeHostTest, PartialUpdatesWithGLRenderer) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
- scoped_ptr<LayerTreeHost> host =
- LayerTreeHost::CreateSingleThreaded(&client,
- &client,
- shared_bitmap_manager.get(),
- NULL,
- settings,
- base::MessageLoopProxy::current(),
- nullptr);
+ scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
+ &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
+ base::MessageLoopProxy::current(), nullptr);
client.SetLayerTreeHost(host.get());
host->Composite(base::TimeTicks::Now());
@@ -2178,14 +2378,9 @@ TEST(LayerTreeHostTest, PartialUpdatesWithSoftwareRenderer) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
- scoped_ptr<LayerTreeHost> host =
- LayerTreeHost::CreateSingleThreaded(&client,
- &client,
- shared_bitmap_manager.get(),
- NULL,
- settings,
- base::MessageLoopProxy::current(),
- nullptr);
+ scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
+ &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
+ base::MessageLoopProxy::current(), nullptr);
client.SetLayerTreeHost(host.get());
host->Composite(base::TimeTicks::Now());
@@ -2202,14 +2397,9 @@ TEST(LayerTreeHostTest, PartialUpdatesWithDelegatingRendererAndGLContent) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
- scoped_ptr<LayerTreeHost> host =
- LayerTreeHost::CreateSingleThreaded(&client,
- &client,
- shared_bitmap_manager.get(),
- NULL,
- settings,
- base::MessageLoopProxy::current(),
- nullptr);
+ scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
+ &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
+ base::MessageLoopProxy::current(), nullptr);
client.SetLayerTreeHost(host.get());
host->Composite(base::TimeTicks::Now());
@@ -2227,14 +2417,9 @@ TEST(LayerTreeHostTest,
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
- scoped_ptr<LayerTreeHost> host =
- LayerTreeHost::CreateSingleThreaded(&client,
- &client,
- shared_bitmap_manager.get(),
- NULL,
- settings,
- base::MessageLoopProxy::current(),
- nullptr);
+ scoped_ptr<LayerTreeHost> host = LayerTreeHost::CreateSingleThreaded(
+ &client, &client, shared_bitmap_manager.get(), NULL, NULL, settings,
+ base::MessageLoopProxy::current(), nullptr);
client.SetLayerTreeHost(host.get());
host->Composite(base::TimeTicks::Now());
@@ -2266,12 +2451,10 @@ class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted
bool visible) override {
if (visible) {
// One backing should remain unevicted.
- EXPECT_EQ(
- 100u * 100u * 4u * 1u,
- layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
+ EXPECT_EQ(100u * 100u * 4u * 1u,
+ contents_texture_manager_->MemoryUseBytes());
} else {
- EXPECT_EQ(
- 0u, layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
+ EXPECT_EQ(0u, contents_texture_manager_->MemoryUseBytes());
}
// Make sure that contents textures are marked as having been
@@ -2286,9 +2469,9 @@ class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted
switch (num_commits_) {
case 1:
// All three backings should have memory.
- EXPECT_EQ(
- 100u * 100u * 4u * 3u,
- layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
+ EXPECT_EQ(100u * 100u * 4u * 3u,
+ contents_texture_manager_->MemoryUseBytes());
+
// Set a new policy that will kick out 1 of the 3 resources.
// Because a resource was evicted, a commit will be kicked off.
host_impl->SetMemoryPolicy(
@@ -2298,9 +2481,8 @@ class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted
break;
case 2:
// Only two backings should have memory.
- EXPECT_EQ(
- 100u * 100u * 4u * 2u,
- layer_tree_host()->contents_texture_manager()->MemoryUseBytes());
+ EXPECT_EQ(100u * 100u * 4u * 2u,
+ contents_texture_manager_->MemoryUseBytes());
// Become backgrounded, which will cause 1 more resource to be
// evicted.
PostSetVisibleToMainThread(false);
@@ -3129,12 +3311,12 @@ class LayerTreeHostTestUIResource : public LayerTreeHostTest {
}
void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
- if (!layer_tree_host()->settings().impl_side_painting)
+ if (!impl->settings().impl_side_painting)
PerformTest(impl);
}
void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
- if (layer_tree_host()->settings().impl_side_painting)
+ if (impl->settings().impl_side_painting)
PerformTest(impl);
}
« 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