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

Side by Side Diff: cc/surfaces/compositor_frame_sink_support_unittest.cc

Issue 2854163003: [cc] Plumb BeginFrameAcks through SurfaceManager to DisplayScheduler. (Closed)
Patch Set: Pass ack via SurfaceDamaged, add back tests. Created 3 years, 7 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 unified diff | Download patch
OLDNEW
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/output/copy_output_request.h" 9 #include "cc/output/copy_output_request.h"
10 #include "cc/output/copy_output_result.h" 10 #include "cc/output/copy_output_result.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 public SurfaceObserver { 94 public SurfaceObserver {
95 public: 95 public:
96 CompositorFrameSinkSupportTest() 96 CompositorFrameSinkSupportTest()
97 : support_( 97 : support_(
98 CompositorFrameSinkSupport::Create(&fake_support_client_, 98 CompositorFrameSinkSupport::Create(&fake_support_client_,
99 &manager_, 99 &manager_,
100 kArbitraryFrameSinkId, 100 kArbitraryFrameSinkId,
101 kIsRoot, 101 kIsRoot,
102 kHandlesFrameSinkIdInvalidation, 102 kHandlesFrameSinkIdInvalidation,
103 kNeedsSyncPoints)), 103 kNeedsSyncPoints)),
104 begin_frame_source_(0.f, false),
104 local_surface_id_(3, kArbitraryToken), 105 local_surface_id_(3, kArbitraryToken),
105 frame_sync_token_(GenTestSyncToken(4)), 106 frame_sync_token_(GenTestSyncToken(4)),
106 consumer_sync_token_(GenTestSyncToken(5)) { 107 consumer_sync_token_(GenTestSyncToken(5)) {
107 manager_.AddObserver(this); 108 manager_.AddObserver(this);
109 support_->SetBeginFrameSource(&begin_frame_source_);
108 } 110 }
109 ~CompositorFrameSinkSupportTest() override { 111 ~CompositorFrameSinkSupportTest() override {
110 manager_.RemoveObserver(this); 112 manager_.RemoveObserver(this);
111 support_->EvictCurrentSurface(); 113 support_->EvictCurrentSurface();
112 } 114 }
113 115
114 const SurfaceId& last_created_surface_id() const { 116 const SurfaceId& last_created_surface_id() const {
115 return last_created_surface_id_; 117 return last_created_surface_id_;
116 } 118 }
117 119
118 // SurfaceObserver implementation. 120 // SurfaceObserver implementation.
119 void OnSurfaceCreated(const SurfaceInfo& surface_info) override { 121 void OnSurfaceCreated(const SurfaceInfo& surface_info) override {
120 last_created_surface_id_ = surface_info.id(); 122 last_created_surface_id_ = surface_info.id();
121 last_surface_info_ = surface_info; 123 last_surface_info_ = surface_info;
122 } 124 }
123 void OnSurfaceDamaged(const SurfaceId& id, bool* changed) override { 125 void OnSurfaceDamaged(const SurfaceId& id,
126 const BeginFrameAck& ack,
127 bool* changed) override {
128 last_begin_frame_ack_ = ack;
124 *changed = true; 129 *changed = true;
125 } 130 }
126 void OnSurfaceDiscarded(const SurfaceId& surface_id) override {} 131 void OnSurfaceDiscarded(const SurfaceId& surface_id) override {}
132 void OnSurfaceDestroyed(const SurfaceId& surface_id) override {}
133 void OnSurfaceDamageExpected(const SurfaceId& surface_id,
134 const BeginFrameArgs& args) override {}
127 135
128 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, 136 void SubmitCompositorFrameWithResources(ResourceId* resource_ids,
129 size_t num_resource_ids) { 137 size_t num_resource_ids) {
130 CompositorFrame frame = MakeCompositorFrame(); 138 CompositorFrame frame = MakeCompositorFrame();
131 for (size_t i = 0u; i < num_resource_ids; ++i) { 139 for (size_t i = 0u; i < num_resource_ids; ++i) {
132 TransferableResource resource; 140 TransferableResource resource;
133 resource.id = resource_ids[i]; 141 resource.id = resource_ids[i];
134 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; 142 resource.mailbox_holder.texture_target = GL_TEXTURE_2D;
135 resource.mailbox_holder.sync_token = frame_sync_token_; 143 resource.mailbox_holder.sync_token = frame_sync_token_;
136 frame.resource_list.push_back(resource); 144 frame.resource_list.push_back(resource);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 void RefCurrentFrameResources() { 180 void RefCurrentFrameResources() {
173 Surface* surface = manager_.GetSurfaceForId( 181 Surface* surface = manager_.GetSurfaceForId(
174 SurfaceId(support_->frame_sink_id(), local_surface_id_)); 182 SurfaceId(support_->frame_sink_id(), local_surface_id_));
175 support_->RefResources(surface->GetActiveFrame().resource_list); 183 support_->RefResources(surface->GetActiveFrame().resource_list);
176 } 184 }
177 185
178 protected: 186 protected:
179 SurfaceManager manager_; 187 SurfaceManager manager_;
180 FakeCompositorFrameSinkSupportClient fake_support_client_; 188 FakeCompositorFrameSinkSupportClient fake_support_client_;
181 std::unique_ptr<CompositorFrameSinkSupport> support_; 189 std::unique_ptr<CompositorFrameSinkSupport> support_;
190 FakeExternalBeginFrameSource begin_frame_source_;
182 LocalSurfaceId local_surface_id_; 191 LocalSurfaceId local_surface_id_;
183 SurfaceId last_created_surface_id_; 192 SurfaceId last_created_surface_id_;
184 SurfaceInfo last_surface_info_; 193 SurfaceInfo last_surface_info_;
194 BeginFrameAck last_begin_frame_ack_;
185 195
186 // This is the sync token submitted with the frame. It should never be 196 // This is the sync token submitted with the frame. It should never be
187 // returned to the client. 197 // returned to the client.
188 const gpu::SyncToken frame_sync_token_; 198 const gpu::SyncToken frame_sync_token_;
189 199
190 // This is the sync token returned by the consumer. It should always be 200 // This is the sync token returned by the consumer. It should always be
191 // returned to the client. 201 // returned to the client.
192 const gpu::SyncToken consumer_sync_token_; 202 const gpu::SyncToken consumer_sync_token_;
193 }; 203 };
194 204
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 782
773 frame.metadata.device_scale_factor = 2.5f; 783 frame.metadata.device_scale_factor = 2.5f;
774 784
775 support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)); 785 support_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
776 SurfaceId expected_surface_id(support_->frame_sink_id(), local_surface_id_); 786 SurfaceId expected_surface_id(support_->frame_sink_id(), local_surface_id_);
777 EXPECT_EQ(expected_surface_id, last_surface_info_.id()); 787 EXPECT_EQ(expected_surface_id, last_surface_info_.id());
778 EXPECT_EQ(2.5f, last_surface_info_.device_scale_factor()); 788 EXPECT_EQ(2.5f, last_surface_info_.device_scale_factor());
779 EXPECT_EQ(gfx::Size(7, 8), last_surface_info_.size_in_pixels()); 789 EXPECT_EQ(gfx::Size(7, 8), last_surface_info_.size_in_pixels());
780 } 790 }
781 791
792 TEST_F(CompositorFrameSinkSupportTest, PassesOnBeginFrameAcks) {
793 // Request BeginFrames.
794 support_->SetNeedsBeginFrame(true);
795
796 // Issue a BeginFrame.
797 BeginFrameArgs args =
798 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1);
799 begin_frame_source_.TestOnBeginFrame(args);
800
801 // Check that the support and SurfaceManager forward the BeginFrameAck
802 // attached to a CompositorFrame to the SurfaceObserver.
803 BeginFrameAck ack(0, 1, 1, true);
804 CompositorFrame frame = MakeCompositorFrame();
805 frame.metadata.begin_frame_ack = ack;
806 support_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
807 EXPECT_EQ(ack, last_begin_frame_ack_);
808
809 // Issue another BeginFrame.
810 args = CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 2);
811 begin_frame_source_.TestOnBeginFrame(args);
812
813 // Check that the support and SurfaceManager forward a DidNotProduceFrame ack
814 // to the SurfaceObserver.
815 BeginFrameAck ack2(0, 2, 2, false);
816 support_->DidNotProduceFrame(ack2);
817 EXPECT_EQ(ack2, last_begin_frame_ack_);
818
819 support_->SetNeedsBeginFrame(false);
820 }
821
782 } // namespace 822 } // namespace
783 823
784 } // namespace test 824 } // namespace test
785 825
786 } // namespace cc 826 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698