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

Unified Diff: cc/surfaces/compositor_frame_sink_support_unittest.cc

Issue 2714973002: Fix check for changing SurfaceId. (Closed)
Patch Set: Add test for display root references. Created 3 years, 10 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/surfaces/compositor_frame_sink_support.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/compositor_frame_sink_support_unittest.cc
diff --git a/cc/surfaces/compositor_frame_sink_support_unittest.cc b/cc/surfaces/compositor_frame_sink_support_unittest.cc
index 7f5342d1538ba4e7eae87348e872df730950017b..5e8f1fcfc5aa4860b6bf3ba72bb1657fa87d8642 100644
--- a/cc/surfaces/compositor_frame_sink_support_unittest.cc
+++ b/cc/surfaces/compositor_frame_sink_support_unittest.cc
@@ -23,9 +23,10 @@ namespace cc {
namespace test {
namespace {
-constexpr FrameSinkId kParentFrameSink(2, 1);
-constexpr FrameSinkId kChildFrameSink1(65563, 1);
-constexpr FrameSinkId kChildFrameSink2(65564, 1);
+constexpr FrameSinkId kDisplayFrameSink(2, 0);
+constexpr FrameSinkId kParentFrameSink(3, 0);
+constexpr FrameSinkId kChildFrameSink1(65563, 0);
+constexpr FrameSinkId kChildFrameSink2(65564, 0);
constexpr FrameSinkId kArbitraryFrameSink(1337, 7331);
std::vector<SurfaceId> empty_surface_ids() {
@@ -77,7 +78,9 @@ class CompositorFrameSinkSupportTest : public testing::Test,
: surface_manager_(SurfaceManager::LifetimeType::REFERENCES) {}
~CompositorFrameSinkSupportTest() override {}
- CompositorFrameSinkSupport& parent_support() { return *supports_[0]; }
+ CompositorFrameSinkSupport& display_support() { return *supports_[0]; }
+
+ CompositorFrameSinkSupport& parent_support() { return *supports_[1]; }
Surface* parent_surface() {
return parent_support().current_surface_for_testing();
}
@@ -85,12 +88,12 @@ class CompositorFrameSinkSupportTest : public testing::Test,
return parent_support().ReferenceTrackerForTesting();
}
- CompositorFrameSinkSupport& child_support1() { return *supports_[1]; }
+ CompositorFrameSinkSupport& child_support1() { return *supports_[2]; }
Surface* child_surface1() {
return child_support1().current_surface_for_testing();
}
- CompositorFrameSinkSupport& child_support2() { return *supports_[2]; }
+ CompositorFrameSinkSupport& child_support2() { return *supports_[3]; }
Surface* child_surface2() {
return child_support2().current_surface_for_testing();
}
@@ -136,6 +139,10 @@ class CompositorFrameSinkSupportTest : public testing::Test,
begin_frame_source_.get()));
surface_manager_.SetDependencyTracker(std::move(dependency_tracker));
supports_.push_back(base::MakeUnique<CompositorFrameSinkSupport>(
+ this, &surface_manager_, kDisplayFrameSink, true /* is_root */,
+ true /* handles_frame_sink_id_invalidation */,
+ true /* needs_sync_points */));
+ supports_.push_back(base::MakeUnique<CompositorFrameSinkSupport>(
this, &surface_manager_, kParentFrameSink, false /* is_root */,
true /* handles_frame_sink_id_invalidation */,
true /* needs_sync_points */));
@@ -177,6 +184,38 @@ class CompositorFrameSinkSupportTest : public testing::Test,
DISALLOW_COPY_AND_ASSIGN(CompositorFrameSinkSupportTest);
};
+// The display root surface should have a surface reference from the top-level
+// root added/removed when a CompositorFrame is submitted with a new SurfaceId.
+TEST_F(CompositorFrameSinkSupportTest, RootSurfaceReceivesReferences) {
+ const SurfaceId display_id_first = MakeSurfaceId(kDisplayFrameSink, 1);
+ const SurfaceId display_id_second = MakeSurfaceId(kDisplayFrameSink, 2);
+
+ // Submit a CompositorFrame for the first display root surface.
+ display_support().SubmitCompositorFrame(
+ display_id_first.local_surface_id(),
+ MakeCompositorFrame({MakeSurfaceId(kParentFrameSink, 1)}));
+
+ // A surface reference from the top-level root is added and there shouldn't be
+ // a temporary reference.
+ EXPECT_THAT(GetTempReferences(kDisplayFrameSink), IsEmpty());
+ EXPECT_THAT(GetChildReferences(surface_manager().GetRootSurfaceId()),
+ UnorderedElementsAre(display_id_first));
+
+ // Submit a CompositorFrame for the second display root surface.
+ display_support().SubmitCompositorFrame(
+ display_id_second.local_surface_id(),
+ MakeCompositorFrame({MakeSurfaceId(kParentFrameSink, 2)}));
+
+ // A surface reference from the top-level root to |display_id_second| should
+ // be added and the reference to |display_root_first| removed.
+ EXPECT_THAT(GetTempReferences(kDisplayFrameSink), IsEmpty());
+ EXPECT_THAT(GetChildReferences(surface_manager().GetRootSurfaceId()),
+ UnorderedElementsAre(display_id_second));
+
+ // Surface |display_id_first| is unreachable and should get deleted.
+ EXPECT_EQ(nullptr, surface_manager().GetSurfaceForId(display_id_first));
+}
+
// The parent Surface is blocked on |child_id1| and |child_id2|.
TEST_F(CompositorFrameSinkSupportTest, DisplayCompositorLockingBlockedOnTwo) {
const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
« no previous file with comments | « cc/surfaces/compositor_frame_sink_support.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698