Index: cc/blimp/layer_tree_host_unittest_serialization.cc |
diff --git a/cc/blimp/layer_tree_host_unittest_serialization.cc b/cc/blimp/layer_tree_host_unittest_serialization.cc |
deleted file mode 100644 |
index 2a3c82efb80648ef1d5a422f8f05540e05f7d355..0000000000000000000000000000000000000000 |
--- a/cc/blimp/layer_tree_host_unittest_serialization.cc |
+++ /dev/null |
@@ -1,412 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <memory> |
- |
-#include "base/memory/ptr_util.h" |
-#include "base/run_loop.h" |
-#include "cc/animation/animation_host.h" |
-#include "cc/blimp/layer_tree_host_remote.h" |
-#include "cc/layers/empty_content_layer_client.h" |
-#include "cc/layers/layer.h" |
-#include "cc/layers/solid_color_scrollbar_layer.h" |
-#include "cc/proto/layer.pb.h" |
-#include "cc/proto/layer_tree_host.pb.h" |
-#include "cc/test/fake_image_serialization_processor.h" |
-#include "cc/test/fake_layer_tree_host.h" |
-#include "cc/test/fake_layer_tree_host_client.h" |
-#include "cc/test/fake_picture_layer.h" |
-#include "cc/test/fake_recording_source.h" |
-#include "cc/test/remote_client_layer_factory.h" |
-#include "cc/test/remote_compositor_test.h" |
-#include "cc/test/serialization_test_utils.h" |
-#include "cc/trees/layer_tree.h" |
-#include "cc/trees/layer_tree_host_common.h" |
-#include "cc/trees/layer_tree_settings.h" |
-#include "third_party/skia/include/core/SkColor.h" |
-#include "ui/gfx/geometry/point.h" |
-#include "ui/gfx/geometry/size.h" |
-#include "ui/gfx/geometry/vector2d_f.h" |
- |
-namespace cc { |
- |
-#define EXPECT_CLIENT_LAYER_DIRTY(engine_layer) \ |
- do { \ |
- Layer* client_layer = compositor_state_deserializer_->GetLayerForEngineId( \ |
- engine_layer->id()); \ |
- LayerTree* client_tree = client_layer->GetLayerTree(); \ |
- EXPECT_TRUE( \ |
- client_tree->LayerNeedsPushPropertiesForTesting(client_layer)); \ |
- } while (false) |
- |
-class LayerTreeHostSerializationTest : public RemoteCompositorTest { |
- protected: |
- void VerifySerializationAndDeserialization() { |
- // Synchronize state. |
- CHECK(HasPendingUpdate()); |
- base::RunLoop().RunUntilIdle(); |
- VerifySerializedTreesAreIdentical( |
- layer_tree_host_remote_->GetLayerTree(), |
- layer_tree_host_in_process_->GetLayerTree(), |
- compositor_state_deserializer_.get()); |
- } |
- |
- void SetUpViewportLayers(LayerTree* engine_layer_tree) { |
- scoped_refptr<Layer> overscroll_elasticity_layer = Layer::Create(); |
- scoped_refptr<Layer> page_scale_layer = Layer::Create(); |
- scoped_refptr<Layer> inner_viewport_scroll_layer = Layer::Create(); |
- scoped_refptr<Layer> outer_viewport_scroll_layer = Layer::Create(); |
- |
- engine_layer_tree->root_layer()->AddChild(overscroll_elasticity_layer); |
- engine_layer_tree->root_layer()->AddChild(page_scale_layer); |
- engine_layer_tree->root_layer()->AddChild(inner_viewport_scroll_layer); |
- engine_layer_tree->root_layer()->AddChild(outer_viewport_scroll_layer); |
- |
- engine_layer_tree->RegisterViewportLayers( |
- overscroll_elasticity_layer, page_scale_layer, |
- inner_viewport_scroll_layer, outer_viewport_scroll_layer); |
- } |
-}; |
- |
-TEST_F(LayerTreeHostSerializationTest, AllMembersChanged) { |
- LayerTree* engine_layer_tree = layer_tree_host_remote_->GetLayerTree(); |
- |
- engine_layer_tree->SetRootLayer(Layer::Create()); |
- scoped_refptr<Layer> mask_layer = Layer::Create(); |
- engine_layer_tree->root_layer()->SetMaskLayer(mask_layer.get()); |
- SetUpViewportLayers(engine_layer_tree); |
- |
- engine_layer_tree->SetViewportSize(gfx::Size(3, 14)); |
- engine_layer_tree->SetDeviceScaleFactor(4.f); |
- engine_layer_tree->SetPaintedDeviceScaleFactor(2.f); |
- engine_layer_tree->SetPageScaleFactorAndLimits(2.f, 0.5f, 3.f); |
- engine_layer_tree->set_background_color(SK_ColorMAGENTA); |
- engine_layer_tree->set_has_transparent_background(true); |
- LayerSelectionBound sel_bound; |
- sel_bound.edge_top = gfx::Point(14, 3); |
- LayerSelection selection; |
- selection.start = sel_bound; |
- engine_layer_tree->RegisterSelection(selection); |
- VerifySerializationAndDeserialization(); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, LayersChangedMultipleSerializations) { |
- LayerTree* engine_layer_tree = layer_tree_host_remote_->GetLayerTree(); |
- engine_layer_tree->SetRootLayer(Layer::Create()); |
- SetUpViewportLayers(engine_layer_tree); |
- |
- VerifySerializationAndDeserialization(); |
- |
- scoped_refptr<Layer> new_child = Layer::Create(); |
- engine_layer_tree->root_layer()->AddChild(new_child); |
- engine_layer_tree->RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr); |
- VerifySerializationAndDeserialization(); |
- |
- engine_layer_tree->SetRootLayer(nullptr); |
- VerifySerializationAndDeserialization(); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, AddAndRemoveNodeFromLayerTree) { |
- /* Testing serialization when the tree hierarchy changes like this: |
- root root |
- / \ / \ |
- a b => a c |
- \ \ |
- c d |
- */ |
- LayerTree* engine_layer_tree = layer_tree_host_remote_->GetLayerTree(); |
- scoped_refptr<Layer> layer_src_root = Layer::Create(); |
- engine_layer_tree->SetRootLayer(layer_src_root); |
- |
- scoped_refptr<Layer> layer_src_a = Layer::Create(); |
- scoped_refptr<Layer> layer_src_b = Layer::Create(); |
- scoped_refptr<Layer> layer_src_c = Layer::Create(); |
- scoped_refptr<Layer> layer_src_d = Layer::Create(); |
- |
- layer_src_root->AddChild(layer_src_a); |
- layer_src_root->AddChild(layer_src_b); |
- layer_src_b->AddChild(layer_src_c); |
- VerifySerializationAndDeserialization(); |
- |
- // Now change the Layer Hierarchy |
- layer_src_c->RemoveFromParent(); |
- layer_src_b->RemoveFromParent(); |
- layer_src_root->AddChild(layer_src_c); |
- layer_src_c->AddChild(layer_src_d); |
- VerifySerializationAndDeserialization(); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, TestNoExistingRoot) { |
- /* Test deserialization of a tree that looks like: |
- root |
- / \ |
- a b |
- \ |
- c |
- There is no existing root node before serialization. |
- */ |
- scoped_refptr<Layer> old_root_layer = Layer::Create(); |
- scoped_refptr<Layer> layer_a = Layer::Create(); |
- scoped_refptr<Layer> layer_b = Layer::Create(); |
- scoped_refptr<Layer> layer_c = Layer::Create(); |
- old_root_layer->AddChild(layer_a); |
- old_root_layer->AddChild(layer_b); |
- layer_b->AddChild(layer_c); |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(old_root_layer); |
- VerifySerializationAndDeserialization(); |
- |
- // Swap the root node. |
- scoped_refptr<Layer> new_root_layer = Layer::Create(); |
- new_root_layer->AddChild(layer_a); |
- new_root_layer->AddChild(layer_b); |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(old_root_layer); |
- VerifySerializationAndDeserialization(); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, RecursivePropertiesSerialization) { |
- /* Testing serialization of properties for a tree that looks like this: |
- root+ |
- / \ |
- a* b+[mask:*] |
- / \ |
- c d |
- Layers marked with * have changed properties. |
- Layers marked with + have descendants with changed properties. |
- Layer b also has a mask layer. |
- */ |
- scoped_refptr<Layer> layer_src_root = Layer::Create(); |
- scoped_refptr<Layer> layer_src_a = Layer::Create(); |
- scoped_refptr<Layer> layer_src_b = Layer::Create(); |
- scoped_refptr<Layer> layer_src_b_mask = Layer::Create(); |
- scoped_refptr<Layer> layer_src_c = Layer::Create(); |
- scoped_refptr<Layer> layer_src_d = Layer::Create(); |
- |
- layer_src_root->AddChild(layer_src_a); |
- layer_src_root->AddChild(layer_src_b); |
- layer_src_a->AddChild(layer_src_c); |
- layer_src_b->AddChild(layer_src_d); |
- layer_src_b->SetMaskLayer(layer_src_b_mask.get()); |
- |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(layer_src_root); |
- VerifySerializationAndDeserialization(); |
- EXPECT_EQ(layer_tree_host_remote_->GetLayerTree() |
- ->LayersThatShouldPushProperties() |
- .size(), |
- 0u); |
- EXPECT_EQ(layer_tree_host_in_process_->GetLayerTree() |
- ->LayersThatShouldPushProperties() |
- .size(), |
- 6u); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, ChildrenOrderChange) { |
- /* Testing serialization and deserialization of a tree that initially looks |
- like this: |
- root |
- / \ |
- a b |
- The children are then re-ordered and changed to: |
- root |
- / \ |
- b a |
- \ |
- c |
- */ |
- scoped_refptr<Layer> layer_src_root = Layer::Create(); |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(layer_src_root); |
- scoped_refptr<Layer> layer_src_a = Layer::Create(); |
- scoped_refptr<Layer> layer_src_b = Layer::Create(); |
- |
- layer_src_root->AddChild(layer_src_b); |
- layer_src_root->AddChild(layer_src_a); |
- VerifySerializationAndDeserialization(); |
- |
- Layer* client_root = |
- compositor_state_deserializer_->GetLayerForEngineId(layer_src_root->id()); |
- Layer* client_a = |
- compositor_state_deserializer_->GetLayerForEngineId(layer_src_a->id()); |
- Layer* client_b = |
- compositor_state_deserializer_->GetLayerForEngineId(layer_src_b->id()); |
- |
- // Swap the children. |
- layer_src_root->RemoveAllChildren(); |
- layer_src_root->AddChild(layer_src_a); |
- layer_src_root->AddChild(layer_src_b); |
- layer_src_a->AddChild(Layer::Create()); |
- VerifySerializationAndDeserialization(); |
- |
- // Verify all old layers are re-used. |
- Layer* new_client_root = |
- compositor_state_deserializer_->GetLayerForEngineId(layer_src_root->id()); |
- Layer* new_client_a = |
- compositor_state_deserializer_->GetLayerForEngineId(layer_src_a->id()); |
- Layer* new_client_b = |
- compositor_state_deserializer_->GetLayerForEngineId(layer_src_b->id()); |
- EXPECT_EQ(client_root, new_client_root); |
- EXPECT_EQ(client_a, new_client_a); |
- EXPECT_EQ(client_b, new_client_b); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, DeletingLayers) { |
- /* Testing serialization and deserialization of a tree that initially |
- looks like this: |
- root |
- / \ |
- a b |
- \ |
- c+[mask:*] |
- First the mask layer is deleted. |
- Then the subtree from node |b| is deleted in the next update. |
- */ |
- scoped_refptr<Layer> layer_src_root = Layer::Create(); |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(layer_src_root); |
- |
- scoped_refptr<Layer> layer_src_a = Layer::Create(); |
- scoped_refptr<Layer> layer_src_b = Layer::Create(); |
- scoped_refptr<Layer> layer_src_c = Layer::Create(); |
- scoped_refptr<Layer> layer_src_c_mask = Layer::Create(); |
- layer_src_root->AddChild(layer_src_a); |
- layer_src_root->AddChild(layer_src_b); |
- layer_src_b->AddChild(layer_src_c); |
- layer_src_c->SetMaskLayer(layer_src_c_mask.get()); |
- VerifySerializationAndDeserialization(); |
- |
- // Delete the mask layer. |
- layer_src_c->SetMaskLayer(nullptr); |
- VerifySerializationAndDeserialization(); |
- |
- // Remove child b. |
- layer_src_b->RemoveFromParent(); |
- VerifySerializationAndDeserialization(); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, LayerDataSerialization) { |
- scoped_refptr<Layer> layer = Layer::Create(); |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(layer); |
- VerifySerializationAndDeserialization(); |
- |
- // Change all the fields. |
- layer->SetTransformOrigin(gfx::Point3F(3.0f, 1.0f, 4.0f)); |
- layer->SetBackgroundColor(SK_ColorRED); |
- layer->SetBounds(gfx::Size(3, 14)); |
- layer->SetDoubleSided(!layer->double_sided()); |
- layer->SetHideLayerAndSubtree(!layer->hide_layer_and_subtree()); |
- layer->SetMasksToBounds(!layer->masks_to_bounds()); |
- layer->AddMainThreadScrollingReasons( |
- MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects); |
- layer->SetNonFastScrollableRegion(Region(gfx::Rect(5, 1, 14, 3))); |
- layer->SetNonFastScrollableRegion(Region(gfx::Rect(3, 14, 1, 5))); |
- layer->SetContentsOpaque(!layer->contents_opaque()); |
- layer->SetOpacity(0.4f); |
- layer->SetBlendMode(SkBlendMode::kOverlay); |
- layer->SetIsRootForIsolatedGroup(!layer->is_root_for_isolated_group()); |
- layer->SetPosition(gfx::PointF(3.14f, 6.28f)); |
- layer->SetIsContainerForFixedPositionLayers( |
- !layer->IsContainerForFixedPositionLayers()); |
- LayerPositionConstraint pos_con; |
- pos_con.set_is_fixed_to_bottom_edge(true); |
- layer->SetPositionConstraint(pos_con); |
- layer->SetShouldFlattenTransform(!layer->should_flatten_transform()); |
- layer->SetUseParentBackfaceVisibility( |
- !layer->use_parent_backface_visibility()); |
- gfx::Transform transform; |
- transform.Rotate(90); |
- layer->SetTransform(transform); |
- layer->Set3dSortingContextId(42); |
- layer->SetUserScrollable(layer->user_scrollable_horizontal(), |
- layer->user_scrollable_vertical()); |
- layer->SetScrollOffset(gfx::ScrollOffset(3, 14)); |
- gfx::Rect update_rect(14, 15); |
- layer->SetNeedsDisplayRect(update_rect); |
- |
- VerifySerializationAndDeserialization(); |
- Layer* client_layer = |
- compositor_state_deserializer_->GetLayerForEngineId(layer->id()); |
- EXPECT_EQ(update_rect, client_layer->update_rect()); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, SolidColorScrollbarLayer) { |
- scoped_refptr<Layer> root_layer = Layer::Create(); |
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer); |
- scoped_refptr<Layer> child_layer = Layer::Create(); |
- root_layer->AddChild(child_layer); |
- |
- std::vector<scoped_refptr<SolidColorScrollbarLayer>> scrollbar_layers; |
- scrollbar_layers.push_back(SolidColorScrollbarLayer::Create( |
- ScrollbarOrientation::HORIZONTAL, 20, 5, true, root_layer->id())); |
- scrollbar_layers.push_back(SolidColorScrollbarLayer::Create( |
- ScrollbarOrientation::VERTICAL, 20, 5, false, child_layer->id())); |
- scrollbar_layers.push_back(SolidColorScrollbarLayer::Create( |
- ScrollbarOrientation::HORIZONTAL, 0, 0, true, root_layer->id())); |
- scrollbar_layers.push_back(SolidColorScrollbarLayer::Create( |
- ScrollbarOrientation::VERTICAL, 10, 35, true, child_layer->id())); |
- for (const auto& layer : scrollbar_layers) { |
- root_layer->AddChild(layer); |
- } |
- |
- VerifySerializationAndDeserialization(); |
- for (const auto& engine_layer : scrollbar_layers) { |
- VerifySerializedScrollbarLayersAreIdentical( |
- engine_layer.get(), compositor_state_deserializer_.get()); |
- } |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, PictureLayerSerialization) { |
- // Override the layer factor to create FakePictureLayers in the deserializer. |
- compositor_state_deserializer_->SetLayerFactoryForTesting( |
- base::MakeUnique<RemoteClientLayerFactory>()); |
- |
- LayerTree* engine_layer_tree = layer_tree_host_remote_->GetLayerTree(); |
- scoped_refptr<Layer> root_layer_src = Layer::Create(); |
- engine_layer_tree->SetRootLayer(root_layer_src); |
- |
- // Ensure that a PictureLayer work correctly for multiple rounds of |
- // serialization and deserialization. |
- FakeContentLayerClient content_client; |
- gfx::Size bounds(256, 256); |
- content_client.set_bounds(bounds); |
- SkPaint simple_paint; |
- simple_paint.setColor(SkColorSetARGB(255, 12, 23, 34)); |
- content_client.add_draw_rect(gfx::Rect(bounds), simple_paint); |
- scoped_refptr<FakePictureLayer> picture_layer_src = |
- FakePictureLayer::Create(&content_client); |
- |
- root_layer_src->AddChild(picture_layer_src); |
- picture_layer_src->SetNearestNeighbor(!picture_layer_src->nearest_neighbor()); |
- picture_layer_src->SetNeedsDisplay(); |
- VerifySerializationAndDeserialization(); |
- layer_tree_host_in_process_->UpdateLayers(); |
- VerifySerializedPictureLayersAreIdentical( |
- picture_layer_src.get(), compositor_state_deserializer_.get()); |
- |
- // Another round. |
- picture_layer_src->SetNeedsDisplay(); |
- SkPaint new_paint; |
- new_paint.setColor(SkColorSetARGB(255, 12, 32, 44)); |
- content_client.add_draw_rect(gfx::Rect(bounds), new_paint); |
- VerifySerializationAndDeserialization(); |
- layer_tree_host_in_process_->UpdateLayers(); |
- VerifySerializedPictureLayersAreIdentical( |
- picture_layer_src.get(), compositor_state_deserializer_.get()); |
-} |
- |
-TEST_F(LayerTreeHostSerializationTest, EmptyPictureLayerSerialization) { |
- // Override the layer factor to create FakePictureLayers in the deserializer. |
- compositor_state_deserializer_->SetLayerFactoryForTesting( |
- base::MakeUnique<RemoteClientLayerFactory>()); |
- |
- LayerTree* engine_layer_tree = layer_tree_host_remote_->GetLayerTree(); |
- scoped_refptr<Layer> root_layer_src = Layer::Create(); |
- engine_layer_tree->SetRootLayer(root_layer_src); |
- scoped_refptr<FakePictureLayer> picture_layer_src = |
- FakePictureLayer::Create(EmptyContentLayerClient::GetInstance()); |
- root_layer_src->AddChild(picture_layer_src); |
- picture_layer_src->SetNeedsDisplay(); |
- VerifySerializationAndDeserialization(); |
- layer_tree_host_in_process_->UpdateLayers(); |
- VerifySerializedPictureLayersAreIdentical( |
- picture_layer_src.get(), compositor_state_deserializer_.get()); |
-} |
- |
-} // namespace cc |