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

Unified Diff: cc/blimp/compositor_state_deserializer_unittest.cc

Issue 2646623002: cc: Remove all blimp code from cc. (Closed)
Patch Set: test build 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/blimp/compositor_state_deserializer.cc ('k') | cc/blimp/deserialized_content_layer_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/blimp/compositor_state_deserializer_unittest.cc
diff --git a/cc/blimp/compositor_state_deserializer_unittest.cc b/cc/blimp/compositor_state_deserializer_unittest.cc
deleted file mode 100644
index c08c43b9577f7f8633d2f02f4f8a9229d4a93d32..0000000000000000000000000000000000000000
--- a/cc/blimp/compositor_state_deserializer_unittest.cc
+++ /dev/null
@@ -1,404 +0,0 @@
-// Copyright 2016 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 "compositor_state_deserializer.h"
-
-#include "base/memory/ptr_util.h"
-#include "base/run_loop.h"
-#include "cc/animation/animation_host.h"
-#include "cc/blimp/client_picture_cache.h"
-#include "cc/blimp/compositor_proto_state.h"
-#include "cc/blimp/layer_tree_host_remote.h"
-#include "cc/layers/content_layer_client.h"
-#include "cc/layers/picture_layer.h"
-#include "cc/layers/solid_color_scrollbar_layer.h"
-#include "cc/playback/display_item_list.h"
-#include "cc/playback/drawing_display_item.h"
-#include "cc/proto/compositor_message.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_proxy.h"
-#include "cc/test/fake_remote_compositor_bridge.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/test/skia_common.h"
-#include "cc/test/stub_layer_tree_host_client.h"
-#include "cc/test/test_task_graph_runner.h"
-#include "cc/trees/layer_tree_host_common.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/skia/include/core/SkPictureRecorder.h"
-
-namespace cc {
-namespace {
-
-class FakeContentLayerClient : public ContentLayerClient {
- public:
- FakeContentLayerClient(scoped_refptr<DisplayItemList> display_list,
- gfx::Rect recorded_viewport)
- : display_list_(std::move(display_list)),
- recorded_viewport_(recorded_viewport) {}
- ~FakeContentLayerClient() override {}
-
- // ContentLayerClient implementation.
- gfx::Rect PaintableRegion() override { return recorded_viewport_; }
- scoped_refptr<DisplayItemList> PaintContentsToDisplayList(
- PaintingControlSetting painting_status) override {
- return display_list_;
- }
- bool FillsBoundsCompletely() const override { return false; }
- size_t GetApproximateUnsharedMemoryUsage() const override { return 0; }
-
- private:
- scoped_refptr<DisplayItemList> display_list_;
- gfx::Rect recorded_viewport_;
-};
-
-class CompositorStateDeserializerTest : public RemoteCompositorTest {
- public:
- void VerifyTreesAreIdentical() {
- VerifySerializedTreesAreIdentical(
- layer_tree_host_remote_->GetLayerTree(),
- layer_tree_host_in_process_->GetLayerTree(),
- compositor_state_deserializer_.get());
- }
-};
-
-TEST_F(CompositorStateDeserializerTest, BasicSync) {
- // Set up a tree with a single node.
- scoped_refptr<Layer> root_layer = Layer::Create();
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-
- // Swap the root layer.
- scoped_refptr<Layer> new_root_layer = Layer::Create();
- new_root_layer->AddChild(Layer::Create());
- new_root_layer->AddChild(Layer::Create());
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(new_root_layer);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
- // Verify that we are no longer tracking the destroyed layer on the client.
- EXPECT_EQ(
- compositor_state_deserializer_->GetLayerForEngineId(root_layer->id()),
- nullptr);
-
- // Remove the root layer to change to a null tree.
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(nullptr);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-}
-
-TEST_F(CompositorStateDeserializerTest, ViewportLayers) {
- scoped_refptr<Layer> root_layer = Layer::Create();
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- scoped_refptr<Layer> overscroll_elasticity_layer = Layer::Create();
- scoped_refptr<Layer> inner_viewport_scroll_layer = Layer::Create();
- scoped_refptr<Layer> outer_viewport_scroll_layer = Layer::Create();
- scoped_refptr<Layer> page_scale_layer = Layer::Create();
- layer_tree_host_remote_->GetLayerTree()->RegisterViewportLayers(
- overscroll_elasticity_layer, page_scale_layer,
- inner_viewport_scroll_layer, outer_viewport_scroll_layer);
-
- root_layer->AddChild(overscroll_elasticity_layer);
- overscroll_elasticity_layer->AddChild(page_scale_layer);
- page_scale_layer->AddChild(inner_viewport_scroll_layer);
- inner_viewport_scroll_layer->AddChild(outer_viewport_scroll_layer);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-}
-
-TEST_F(CompositorStateDeserializerTest, ScrollClipAndMaskLayers) {
- /* root -- A---C---D
- / | \
- / | E(MaskLayer)
- / ------B */
- scoped_refptr<Layer> root_layer = Layer::Create();
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- scoped_refptr<Layer> layer_a = Layer::Create();
- scoped_refptr<Layer> layer_b = Layer::Create();
- scoped_refptr<Layer> layer_c = Layer::Create();
- scoped_refptr<Layer> layer_d = Layer::Create();
- scoped_refptr<Layer> layer_e = Layer::Create();
-
- root_layer->AddChild(layer_a);
- root_layer->AddChild(layer_b);
- layer_a->AddChild(layer_c);
- layer_c->AddChild(layer_d);
-
- layer_a->SetMaskLayer(layer_e.get());
- layer_c->SetScrollParent(layer_b.get());
- layer_c->SetScrollClipLayerId(root_layer->id());
- layer_d->SetClipParent(layer_a.get());
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-}
-
-TEST_F(CompositorStateDeserializerTest, ReconcileScrollAndScale) {
- scoped_refptr<Layer> root_layer = Layer::Create();
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- // Set scroll offset.
- scoped_refptr<Layer> scroll_layer = Layer::Create();
- root_layer->AddChild(scroll_layer);
- gfx::ScrollOffset engine_offset(4, 3);
- scroll_layer->SetScrollOffset(engine_offset);
-
- // Set page scale.
- float engine_page_scale = 0.5f;
- layer_tree_host_remote_->GetLayerTree()->SetPageScaleFactorAndLimits(
- engine_page_scale, 1.0, 1.0);
-
- // Synchronize State and verify that the engine values are used.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
- Layer* client_scroll_layer =
- compositor_state_deserializer_->GetLayerForEngineId(scroll_layer->id());
- EXPECT_EQ(engine_page_scale,
- layer_tree_host_in_process_->GetLayerTree()->page_scale_factor());
- EXPECT_EQ(engine_offset, client_scroll_layer->scroll_offset());
-
- // Now send some updates from the impl thread.
- ScrollAndScaleSet scroll_and_scale_set;
-
- gfx::ScrollOffset offset_from_impl_thread(10, 3);
- gfx::ScrollOffset scroll_delta =
- offset_from_impl_thread - client_scroll_layer->scroll_offset();
- LayerTreeHostCommon::ScrollUpdateInfo scroll_update;
- scroll_update.layer_id = client_scroll_layer->id();
- scroll_update.scroll_delta = gfx::ScrollOffsetToFlooredVector2d(scroll_delta);
- scroll_and_scale_set.scrolls.push_back(scroll_update);
-
- float page_scale_from_impl_side = 3.2f;
- float page_scale_delta =
- page_scale_from_impl_side /
- layer_tree_host_in_process_->GetLayerTree()->page_scale_factor();
- scroll_and_scale_set.page_scale_delta = page_scale_delta;
-
- layer_tree_host_in_process_->ApplyScrollAndScale(&scroll_and_scale_set);
-
- // The values on the client should have been forced to retain the original
- // engine value.
- EXPECT_EQ(engine_page_scale,
- layer_tree_host_in_process_->GetLayerTree()->page_scale_factor());
- EXPECT_EQ(engine_offset, client_scroll_layer->scroll_offset());
-
- // Now pull the deltas from the client onto the engine, this should result
- // in an aborted commit.
- proto::ClientStateUpdate client_state_update;
- compositor_state_deserializer_->PullClientStateUpdate(&client_state_update);
-
- // Send the reflected main frame state to the client layer tree host.
- compositor_state_deserializer_->SendUnappliedDeltasToLayerTreeHost();
- const ReflectedMainFrameState* reflected_state =
- layer_tree_host_in_process_->reflected_main_frame_state_for_testing();
- EXPECT_EQ(reflected_state->scrolls.size(), 1u);
- EXPECT_EQ(reflected_state->scrolls[0].layer_id, client_scroll_layer->id());
- EXPECT_EQ(reflected_state->scrolls[0].scroll_delta,
- gfx::ScrollOffsetToVector2dF(scroll_delta));
- EXPECT_EQ(reflected_state->page_scale_delta, page_scale_delta);
-
- layer_tree_host_remote_->ApplyStateUpdateFromClient(client_state_update);
-
- // Inform the deserializer that the updates were applied on the engine.
- // This should pre-emptively apply the deltas on the client.
- compositor_state_deserializer_->DidApplyStateUpdatesOnEngine();
- EXPECT_EQ(page_scale_from_impl_side,
- layer_tree_host_in_process_->GetLayerTree()->page_scale_factor());
- EXPECT_EQ(offset_from_impl_thread, client_scroll_layer->scroll_offset());
-
- // Now update the scroll offset on the engine, and ensure that the value is
- // used on the client.
- gfx::ScrollOffset new_engine_offset(10, 20);
- scroll_layer->SetScrollOffset(new_engine_offset);
-
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
- EXPECT_EQ(page_scale_from_impl_side,
- layer_tree_host_in_process_->GetLayerTree()->page_scale_factor());
- EXPECT_EQ(new_engine_offset, client_scroll_layer->scroll_offset());
-}
-
-TEST_F(CompositorStateDeserializerTest, PropertyTreesAreIdentical) {
- // Override the LayerFactory. This is necessary to ensure the layer ids
- // tracked in PropertyTrees on the engine and client are identical.
- compositor_state_deserializer_->SetLayerFactoryForTesting(
- base::MakeUnique<RemoteClientLayerFactory>());
-
- scoped_refptr<Layer> root_layer = Layer::Create();
- root_layer->SetBounds(gfx::Size(10, 10));
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- scoped_refptr<Layer> child1 = Layer::Create();
- root_layer->AddChild(child1);
- gfx::Transform transform;
- transform.Translate(gfx::Vector2dF(5, 4));
- child1->SetTransform(transform);
- child1->SetMasksToBounds(true);
-
- scoped_refptr<Layer> child2 = Layer::Create();
- root_layer->AddChild(child2);
- child2->SetBounds(gfx::Size(5, 5));
- child2->SetScrollOffset(gfx::ScrollOffset(3, 4));
- child2->SetScrollParent(child1.get());
- child2->SetUserScrollable(true, true);
-
- scoped_refptr<Layer> grandchild11 = Layer::Create();
- child1->AddChild(grandchild11);
- grandchild11->SetClipParent(root_layer.get());
-
- scoped_refptr<Layer> grandchild21 = Layer::Create();
- child2->AddChild(grandchild21);
- grandchild21->SetScrollClipLayerId(child1->id());
- grandchild21->SetOpacity(0.5);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
- EXPECT_EQ(root_layer->id(), layer_tree_host_in_process_->root_layer()->id());
-
- // Sanity test to ensure that the PropertyTrees generated from the Layers on
- // the client and engine are identical.
- layer_tree_host_remote_->GetLayerTree()->BuildPropertyTreesForTesting();
- PropertyTrees* engine_property_trees =
- layer_tree_host_remote_->GetLayerTree()->property_trees();
-
- layer_tree_host_in_process_->BuildPropertyTreesForTesting();
- PropertyTrees* client_property_trees =
- layer_tree_host_in_process_->property_trees();
-
- EXPECT_EQ(*engine_property_trees, *client_property_trees);
-}
-
-TEST_F(CompositorStateDeserializerTest, SolidColorScrollbarLayer) {
- scoped_refptr<Layer> root_layer = Layer::Create();
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- scoped_refptr<Layer> child_layer1 = Layer::Create();
- root_layer->AddChild(child_layer1);
- scoped_refptr<SolidColorScrollbarLayer> scroll_layer1 =
- SolidColorScrollbarLayer::Create(ScrollbarOrientation::HORIZONTAL, 20, 5,
- true, 3);
- scroll_layer1->SetScrollLayer(child_layer1->id());
- child_layer1->AddChild(scroll_layer1);
-
- scoped_refptr<SolidColorScrollbarLayer> scroll_layer2 =
- SolidColorScrollbarLayer::Create(ScrollbarOrientation::VERTICAL, 2, 9,
- false, 3);
- root_layer->AddChild(scroll_layer2);
- scoped_refptr<Layer> child_layer2 = Layer::Create();
- scroll_layer2->AddChild(child_layer2);
- scroll_layer2->SetScrollLayer(child_layer2->id());
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-
- // Verify Scrollbar layers.
- SolidColorScrollbarLayer* client_scroll_layer1 =
- static_cast<SolidColorScrollbarLayer*>(
- compositor_state_deserializer_->GetLayerForEngineId(
- scroll_layer1->id()));
- EXPECT_EQ(client_scroll_layer1->ScrollLayerId(),
- compositor_state_deserializer_
- ->GetLayerForEngineId(scroll_layer1->ScrollLayerId())
- ->id());
- EXPECT_EQ(client_scroll_layer1->orientation(), scroll_layer1->orientation());
-
- SolidColorScrollbarLayer* client_scroll_layer2 =
- static_cast<SolidColorScrollbarLayer*>(
- compositor_state_deserializer_->GetLayerForEngineId(
- scroll_layer2->id()));
- EXPECT_EQ(client_scroll_layer2->ScrollLayerId(),
- compositor_state_deserializer_
- ->GetLayerForEngineId(scroll_layer2->ScrollLayerId())
- ->id());
- EXPECT_EQ(client_scroll_layer2->orientation(), scroll_layer2->orientation());
-}
-
-TEST_F(CompositorStateDeserializerTest, PictureLayer) {
- scoped_refptr<Layer> root_layer = Layer::Create();
- root_layer->SetBounds(gfx::Size(10, 10));
- root_layer->SetIsDrawable(true);
- layer_tree_host_remote_->GetLayerTree()->SetRootLayer(root_layer);
-
- gfx::Size layer_size = gfx::Size(5, 5);
-
- gfx::PointF offset(2.f, 3.f);
- SkPictureRecorder recorder;
- SkCanvas* canvas;
- SkPaint red_paint;
- red_paint.setColor(SK_ColorRED);
- canvas = recorder.beginRecording(SkRect::MakeXYWH(
- offset.x(), offset.y(), layer_size.width(), layer_size.height()));
- canvas->translate(offset.x(), offset.y());
- canvas->drawRectCoords(0.f, 0.f, 4.f, 4.f, red_paint);
- sk_sp<SkPicture> test_picture = recorder.finishRecordingAsPicture();
-
- DisplayItemListSettings settings;
- settings.use_cached_picture = false;
- scoped_refptr<DisplayItemList> display_list =
- DisplayItemList::Create(settings);
- const gfx::Rect visual_rect(0, 0, 42, 42);
- display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>(visual_rect,
- test_picture);
- display_list->Finalize();
- FakeContentLayerClient content_client(display_list, gfx::Rect(layer_size));
-
- scoped_refptr<PictureLayer> picture_layer =
- PictureLayer::Create(&content_client);
- picture_layer->SetBounds(layer_size);
- picture_layer->SetIsDrawable(true);
- root_layer->AddChild(picture_layer);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-
- // Verify PictureLayer.
- PictureLayer* client_picture_layer = static_cast<PictureLayer*>(
- compositor_state_deserializer_->GetLayerForEngineId(picture_layer->id()));
- scoped_refptr<DisplayItemList> client_display_list =
- client_picture_layer->client()->PaintContentsToDisplayList(
- ContentLayerClient::PaintingControlSetting::PAINTING_BEHAVIOR_NORMAL);
- EXPECT_TRUE(AreDisplayListDrawingResultsSame(
- gfx::Rect(layer_size), display_list.get(), client_display_list.get()));
-
- // Now attach new layer with the same DisplayList.
- scoped_refptr<PictureLayer> picture_layer2 =
- PictureLayer::Create(&content_client);
- picture_layer2->SetBounds(layer_size);
- picture_layer2->SetIsDrawable(true);
- root_layer->AddChild(picture_layer2);
-
- // Synchronize State and verify.
- base::RunLoop().RunUntilIdle();
- VerifyTreesAreIdentical();
-
- // Verify PictureLayer2.
- PictureLayer* client_picture_layer2 = static_cast<PictureLayer*>(
- compositor_state_deserializer_->GetLayerForEngineId(
- picture_layer2->id()));
- scoped_refptr<DisplayItemList> client_display_list2 =
- client_picture_layer2->client()->PaintContentsToDisplayList(
- ContentLayerClient::PaintingControlSetting::PAINTING_BEHAVIOR_NORMAL);
- EXPECT_TRUE(AreDisplayListDrawingResultsSame(
- gfx::Rect(layer_size), display_list.get(), client_display_list2.get()));
-}
-
-} // namespace
-} // namespace cc
« no previous file with comments | « cc/blimp/compositor_state_deserializer.cc ('k') | cc/blimp/deserialized_content_layer_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698