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 b16d8fa28ac77703ea9393b46336dc8264200033..c3e0b166df4736a5aca99a1a16e9bb101d27c62f 100644 |
--- a/cc/surfaces/compositor_frame_sink_support_unittest.cc |
+++ b/cc/surfaces/compositor_frame_sink_support_unittest.cc |
@@ -101,10 +101,12 @@ class CompositorFrameSinkSupportTest : public testing::Test, |
kIsRoot, |
kHandlesFrameSinkIdInvalidation, |
kNeedsSyncPoints)), |
+ begin_frame_source_(0.f, false), |
local_surface_id_(3, kArbitraryToken), |
frame_sync_token_(GenTestSyncToken(4)), |
consumer_sync_token_(GenTestSyncToken(5)) { |
manager_.AddObserver(this); |
+ support_->SetBeginFrameSource(&begin_frame_source_); |
} |
~CompositorFrameSinkSupportTest() override { |
manager_.RemoveObserver(this); |
@@ -120,10 +122,16 @@ class CompositorFrameSinkSupportTest : public testing::Test, |
last_created_surface_id_ = surface_info.id(); |
last_surface_info_ = surface_info; |
} |
- void OnSurfaceDamaged(const SurfaceId& id, bool* changed) override { |
+ void OnSurfaceDamaged(const SurfaceId& id, |
+ const BeginFrameAck& ack, |
+ bool* changed) override { |
+ last_begin_frame_ack_ = ack; |
*changed = true; |
} |
void OnSurfaceDiscarded(const SurfaceId& surface_id) override {} |
+ void OnSurfaceDestroyed(const SurfaceId& surface_id) override {} |
+ void OnSurfaceDamageExpected(const SurfaceId& surface_id, |
+ const BeginFrameArgs& args) override {} |
void SubmitCompositorFrameWithResources(ResourceId* resource_ids, |
size_t num_resource_ids) { |
@@ -179,9 +187,11 @@ class CompositorFrameSinkSupportTest : public testing::Test, |
SurfaceManager manager_; |
FakeCompositorFrameSinkSupportClient fake_support_client_; |
std::unique_ptr<CompositorFrameSinkSupport> support_; |
+ FakeExternalBeginFrameSource begin_frame_source_; |
LocalSurfaceId local_surface_id_; |
SurfaceId last_created_surface_id_; |
SurfaceInfo last_surface_info_; |
+ BeginFrameAck last_begin_frame_ack_; |
// This is the sync token submitted with the frame. It should never be |
// returned to the client. |
@@ -779,6 +789,36 @@ TEST_F(CompositorFrameSinkSupportTest, SurfaceInfo) { |
EXPECT_EQ(gfx::Size(7, 8), last_surface_info_.size_in_pixels()); |
} |
+TEST_F(CompositorFrameSinkSupportTest, PassesOnBeginFrameAcks) { |
+ // Request BeginFrames. |
+ support_->SetNeedsBeginFrame(true); |
+ |
+ // Issue a BeginFrame. |
+ BeginFrameArgs args = |
+ CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); |
+ begin_frame_source_.TestOnBeginFrame(args); |
+ |
+ // Check that the support and SurfaceManager forward the BeginFrameAck |
+ // attached to a CompositorFrame to the SurfaceObserver. |
+ BeginFrameAck ack(0, 1, 1, true); |
+ CompositorFrame frame = MakeCompositorFrame(); |
+ frame.metadata.begin_frame_ack = ack; |
+ support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)); |
+ EXPECT_EQ(ack, last_begin_frame_ack_); |
+ |
+ // Issue another BeginFrame. |
+ args = CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 2); |
+ begin_frame_source_.TestOnBeginFrame(args); |
+ |
+ // Check that the support and SurfaceManager forward a DidNotProduceFrame ack |
+ // to the SurfaceObserver. |
+ BeginFrameAck ack2(0, 2, 2, false); |
+ support_->DidNotProduceFrame(ack2); |
+ EXPECT_EQ(ack2, last_begin_frame_ack_); |
+ |
+ support_->SetNeedsBeginFrame(false); |
+} |
+ |
} // namespace |
} // namespace test |