OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/surfaces/compositor_frame_sink_support.h" | 5 #include "cc/surfaces/compositor_frame_sink_support.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "cc/output/compositor_frame.h" | 8 #include "cc/output/compositor_frame.h" |
9 #include "cc/surfaces/compositor_frame_sink_support_client.h" | 9 #include "cc/surfaces/compositor_frame_sink_support_client.h" |
10 #include "cc/surfaces/frame_sink_id.h" | 10 #include "cc/surfaces/frame_sink_id.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 } | 101 } |
102 | 102 |
103 SurfaceManager& surface_manager() { return surface_manager_; } | 103 SurfaceManager& surface_manager() { return surface_manager_; } |
104 | 104 |
105 // Returns all the references where |surface_id| is the parent. | 105 // Returns all the references where |surface_id| is the parent. |
106 const SurfaceManager::SurfaceIdSet& GetChildReferences( | 106 const SurfaceManager::SurfaceIdSet& GetChildReferences( |
107 const SurfaceId& surface_id) { | 107 const SurfaceId& surface_id) { |
108 return surface_manager().parent_to_child_refs_[surface_id]; | 108 return surface_manager().parent_to_child_refs_[surface_id]; |
109 } | 109 } |
110 | 110 |
111 // Returns all the temporary references for the given frame sink id. | 111 // Returns true if there is a temporary reference for |surface_id|. |
112 std::vector<LocalSurfaceId> GetTempReferences( | 112 bool HasTemporaryReference(const SurfaceId& surface_id) { |
113 const FrameSinkId& frame_sink_id) { | 113 return surface_manager().HasTemporaryReference(surface_id); |
114 return surface_manager().temp_references_[frame_sink_id]; | |
115 } | 114 } |
116 | 115 |
117 SurfaceDependencyTracker& dependency_tracker() { | 116 SurfaceDependencyTracker& dependency_tracker() { |
118 return *surface_manager_.dependency_tracker(); | 117 return *surface_manager_.dependency_tracker(); |
119 } | 118 } |
120 | 119 |
121 FakeExternalBeginFrameSource* begin_frame_source() { | 120 FakeExternalBeginFrameSource* begin_frame_source() { |
122 return begin_frame_source_.get(); | 121 return begin_frame_source_.get(); |
123 } | 122 } |
124 | 123 |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 child_support1().SubmitCompositorFrame( | 565 child_support1().SubmitCompositorFrame( |
567 child_id.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); | 566 child_id.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); |
568 | 567 |
569 // Verify that the child CompositorFrame activates immediately. | 568 // Verify that the child CompositorFrame activates immediately. |
570 EXPECT_TRUE(child_surface1()->HasActiveFrame()); | 569 EXPECT_TRUE(child_surface1()->HasActiveFrame()); |
571 EXPECT_FALSE(child_surface1()->HasPendingFrame()); | 570 EXPECT_FALSE(child_surface1()->HasPendingFrame()); |
572 EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); | 571 EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); |
573 | 572 |
574 // Verify that there is no temporary reference for the child and that | 573 // Verify that there is no temporary reference for the child and that |
575 // the reference from the parent to the child still exists. | 574 // the reference from the parent to the child still exists. |
576 EXPECT_THAT(GetTempReferences(child_id.frame_sink_id()), IsEmpty()); | 575 EXPECT_FALSE(HasTemporaryReference(child_id)); |
577 EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id)); | 576 EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id)); |
578 } | 577 } |
579 | 578 |
580 // The parent Surface is blocked on |child_id2| which is blocked on |child_id3|. | 579 // The parent Surface is blocked on |child_id2| which is blocked on |child_id3|. |
581 // child_support1 evicts its blocked Surface. The parent surface should | 580 // child_support1 evicts its blocked Surface. The parent surface should |
582 // activate. | 581 // activate. |
583 TEST_F(CompositorFrameSinkSupportTest, EvictSurfaceWithPendingFrame) { | 582 TEST_F(CompositorFrameSinkSupportTest, EvictSurfaceWithPendingFrame) { |
584 const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1); | 583 const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1); |
585 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); | 584 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); |
586 const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1); | 585 const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 EXPECT_FALSE(child_surface1()->HasPendingFrame()); | 648 EXPECT_FALSE(child_surface1()->HasPendingFrame()); |
650 EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); | 649 EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); |
651 | 650 |
652 // Verify that the parent Surface has activated. | 651 // Verify that the parent Surface has activated. |
653 EXPECT_TRUE(parent_surface()->HasActiveFrame()); | 652 EXPECT_TRUE(parent_surface()->HasActiveFrame()); |
654 EXPECT_FALSE(parent_surface()->HasPendingFrame()); | 653 EXPECT_FALSE(parent_surface()->HasPendingFrame()); |
655 EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); | 654 EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); |
656 | 655 |
657 // Verify that there is no temporary reference for the child and that | 656 // Verify that there is no temporary reference for the child and that |
658 // the reference from the parent to the child still exists. | 657 // the reference from the parent to the child still exists. |
659 EXPECT_THAT(GetTempReferences(child_id1.frame_sink_id()), IsEmpty()); | 658 EXPECT_FALSE(HasTemporaryReference(child_id1)); |
660 EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id1)); | 659 EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id1)); |
661 | 660 |
662 // The parent submits another CompositorFrame that depends on |child_id2|. | 661 // The parent submits another CompositorFrame that depends on |child_id2|. |
663 parent_support().SubmitCompositorFrame(parent_id.local_surface_id(), | 662 parent_support().SubmitCompositorFrame(parent_id.local_surface_id(), |
664 MakeCompositorFrame({child_id2})); | 663 MakeCompositorFrame({child_id2})); |
665 | 664 |
666 // The parent surface should now have both a pending and activate | 665 // The parent surface should now have both a pending and activate |
667 // CompositorFrame. Verify that the set of child references from | 666 // CompositorFrame. Verify that the set of child references from |
668 // |parent_id| include both the pending and active CompositorFrames. | 667 // |parent_id| include both the pending and active CompositorFrames. |
669 EXPECT_TRUE(parent_surface()->HasActiveFrame()); | 668 EXPECT_TRUE(parent_surface()->HasActiveFrame()); |
(...skipping 10 matching lines...) Expand all Loading... |
680 // CompositorFrame. Also verify that |child_id1| is no longer a child | 679 // CompositorFrame. Also verify that |child_id1| is no longer a child |
681 // reference of |parent_id|. | 680 // reference of |parent_id|. |
682 EXPECT_TRUE(parent_surface()->HasActiveFrame()); | 681 EXPECT_TRUE(parent_surface()->HasActiveFrame()); |
683 EXPECT_FALSE(parent_surface()->HasPendingFrame()); | 682 EXPECT_FALSE(parent_surface()->HasPendingFrame()); |
684 EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); | 683 EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); |
685 EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id2)); | 684 EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id2)); |
686 } | 685 } |
687 | 686 |
688 } // namespace test | 687 } // namespace test |
689 } // namespace cc | 688 } // namespace cc |
OLD | NEW |