Index: cc/trees/layer_tree_host_impl_unittest.cc |
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc |
index 5350b1a3c6eb30cbd23645137a683c5fa00f81d4..a400b8b39b5eb331a27ef200a3a94908a2e848e0 100644 |
--- a/cc/trees/layer_tree_host_impl_unittest.cc |
+++ b/cc/trees/layer_tree_host_impl_unittest.cc |
@@ -30,6 +30,7 @@ |
#include "cc/layers/render_surface_impl.h" |
#include "cc/layers/solid_color_layer_impl.h" |
#include "cc/layers/solid_color_scrollbar_layer_impl.h" |
+#include "cc/layers/surface_layer_impl.h" |
#include "cc/layers/texture_layer_impl.h" |
#include "cc/layers/video_layer_impl.h" |
#include "cc/layers/viewport.h" |
@@ -93,6 +94,12 @@ using media::VideoFrame; |
namespace cc { |
namespace { |
+SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) { |
+ return SurfaceId( |
+ frame_sink_id, |
+ LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u))); |
+} |
+ |
struct TestFrameData : public LayerTreeHostImpl::FrameData { |
TestFrameData() { |
// Set ack to something valid, so DCHECKs don't complain. |
@@ -3481,6 +3488,43 @@ TEST_F(LayerTreeHostImplTest, MouseMoveAtWithDeviceScaleOf2) { |
SetupMouseMoveAtWithDeviceScale(2.f); |
} |
+// This test verifies that only SurfaceLayers in the viewport are included |
+// in CompositorFrameMetadata's |embedded_surfaces|. |
+TEST_F(LayerTreeHostImplTest, EmbeddedSurfacesInMetadata) { |
+ SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
+ host_impl_->SetViewportSize(gfx::Size(50, 50)); |
+ LayerImpl* root = host_impl_->active_tree()->root_layer_for_testing(); |
+ |
+ std::vector<SurfaceId> children = {MakeSurfaceId(FrameSinkId(1, 1), 1), |
+ MakeSurfaceId(FrameSinkId(2, 2), 2), |
+ MakeSurfaceId(FrameSinkId(3, 3), 3)}; |
+ for (size_t i = 0; i < children.size(); ++i) { |
+ std::unique_ptr<SurfaceLayerImpl> child = |
+ SurfaceLayerImpl::Create(host_impl_->active_tree(), i + 6); |
+ child->SetPosition(gfx::PointF(25.f * i, 0.f)); |
+ child->SetBounds(gfx::Size(1, 1)); |
+ child->SetDrawsContent(true); |
+ child->SetPrimarySurfaceInfo( |
+ SurfaceInfo(children[i], 1.f /* device_scale_factor */, |
+ gfx::Size(10, 10) /* size_in_pixels */)); |
+ root->test_properties()->AddChild(std::move(child)); |
+ } |
+ |
+ host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
+ DrawFrame(); |
+ |
+ FakeCompositorFrameSink* fake_compositor_frame_sink = |
+ static_cast<FakeCompositorFrameSink*>( |
+ host_impl_->compositor_frame_sink()); |
+ const CompositorFrameMetadata& metadata = |
+ fake_compositor_frame_sink->last_sent_frame()->metadata; |
+ EXPECT_THAT(metadata.embedded_surfaces, |
+ testing::UnorderedElementsAre(children[0], children[1])); |
+ EXPECT_THAT( |
+ metadata.referenced_surfaces, |
+ testing::UnorderedElementsAre(children[0], children[1], children[2])); |
+} |
+ |
TEST_F(LayerTreeHostImplTest, CompositorFrameMetadata) { |
SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
host_impl_->SetViewportSize(gfx::Size(50, 50)); |