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 "services/ui/ws/frame_generator.h" | 5 #include "services/ui/ws/frame_generator.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "cc/output/compositor_frame_sink.h" | 8 #include "cc/output/compositor_frame_sink.h" |
9 #include "cc/scheduler/begin_frame_source.h" | 9 #include "cc/scheduler/begin_frame_source.h" |
10 #include "cc/test/begin_frame_args_test.h" | 10 #include "cc/test/begin_frame_args_test.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 return true; | 58 return true; |
59 } | 59 } |
60 | 60 |
61 void DetachFromClient() override { | 61 void DetachFromClient() override { |
62 cc::CompositorFrameSink::DetachFromClient(); | 62 cc::CompositorFrameSink::DetachFromClient(); |
63 } | 63 } |
64 | 64 |
65 void SubmitCompositorFrame(cc::CompositorFrame frame) override { | 65 void SubmitCompositorFrame(cc::CompositorFrame frame) override { |
66 ++number_frames_received_; | 66 ++number_frames_received_; |
67 last_frame_ = std::move(frame); | 67 last_frame_ = std::move(frame); |
| 68 last_begin_frame_ack_ = last_frame_.metadata.begin_frame_ack; |
| 69 } |
| 70 |
| 71 void BeginFrameDidNotProduceFrame(const cc::BeginFrameAck& ack) override { |
| 72 last_begin_frame_ack_ = ack; |
68 } | 73 } |
69 | 74 |
70 // cc::BeginFrameObserver implementation. | 75 // cc::BeginFrameObserver implementation. |
71 void OnBeginFrame(const cc::BeginFrameArgs& args) override { | 76 void OnBeginFrame(const cc::BeginFrameArgs& args) override { |
72 external_begin_frame_source_->OnBeginFrame(args); | 77 external_begin_frame_source_->OnBeginFrame(args); |
73 last_begin_frame_args_ = args; | 78 last_begin_frame_args_ = args; |
74 } | 79 } |
75 | 80 |
76 const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override { | 81 const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override { |
77 return last_begin_frame_args_; | 82 return last_begin_frame_args_; |
78 } | 83 } |
79 | 84 |
80 void OnBeginFrameSourcePausedChanged(bool paused) override {} | 85 void OnBeginFrameSourcePausedChanged(bool paused) override {} |
81 | 86 |
82 // cc::ExternalBeginFrameSourceClient implementation: | 87 // cc::ExternalBeginFrameSourceClient implementation: |
83 void OnNeedsBeginFrames(bool needs_begin_frames) override { | 88 void OnNeedsBeginFrames(bool needs_begin_frames) override { |
84 needs_begin_frames_ = needs_begin_frames; | 89 needs_begin_frames_ = needs_begin_frames; |
85 UpdateNeedsBeginFramesInternal(); | 90 UpdateNeedsBeginFramesInternal(); |
86 } | 91 } |
87 | 92 |
88 void OnDidFinishFrame(const cc::BeginFrameAck& ack) override { | |
89 begin_frame_source_->DidFinishFrame(this, ack); | |
90 } | |
91 | |
92 void SetBeginFrameSource(cc::BeginFrameSource* source) { | 93 void SetBeginFrameSource(cc::BeginFrameSource* source) { |
93 if (begin_frame_source_ && observing_begin_frames_) { | 94 if (begin_frame_source_ && observing_begin_frames_) { |
94 begin_frame_source_->RemoveObserver(this); | 95 begin_frame_source_->RemoveObserver(this); |
95 observing_begin_frames_ = false; | 96 observing_begin_frames_ = false; |
96 } | 97 } |
97 begin_frame_source_ = source; | 98 begin_frame_source_ = source; |
98 UpdateNeedsBeginFramesInternal(); | 99 UpdateNeedsBeginFramesInternal(); |
99 } | 100 } |
100 | 101 |
101 const cc::CompositorFrameMetadata& last_metadata() const { | 102 const cc::CompositorFrameMetadata& last_metadata() const { |
102 return last_frame_.metadata; | 103 return last_frame_.metadata; |
103 } | 104 } |
104 | 105 |
105 const cc::RenderPassList& last_render_pass_list() const { | 106 const cc::RenderPassList& last_render_pass_list() const { |
106 return last_frame_.render_pass_list; | 107 return last_frame_.render_pass_list; |
107 } | 108 } |
108 | 109 |
109 int number_frames_received() { return number_frames_received_; } | 110 int number_frames_received() { return number_frames_received_; } |
110 | 111 |
| 112 const cc::BeginFrameAck& last_begin_frame_ack() { |
| 113 return last_begin_frame_ack_; |
| 114 } |
| 115 |
111 private: | 116 private: |
112 void UpdateNeedsBeginFramesInternal() { | 117 void UpdateNeedsBeginFramesInternal() { |
113 if (!begin_frame_source_) | 118 if (!begin_frame_source_) |
114 return; | 119 return; |
115 | 120 |
116 if (needs_begin_frames_ == observing_begin_frames_) | 121 if (needs_begin_frames_ == observing_begin_frames_) |
117 return; | 122 return; |
118 | 123 |
119 observing_begin_frames_ = needs_begin_frames_; | 124 observing_begin_frames_ = needs_begin_frames_; |
120 if (needs_begin_frames_) { | 125 if (needs_begin_frames_) { |
121 begin_frame_source_->AddObserver(this); | 126 begin_frame_source_->AddObserver(this); |
122 } else { | 127 } else { |
123 begin_frame_source_->RemoveObserver(this); | 128 begin_frame_source_->RemoveObserver(this); |
124 } | 129 } |
125 } | 130 } |
126 | 131 |
127 int number_frames_received_ = 0; | 132 int number_frames_received_ = 0; |
128 std::unique_ptr<cc::ExternalBeginFrameSource> external_begin_frame_source_; | 133 std::unique_ptr<cc::ExternalBeginFrameSource> external_begin_frame_source_; |
129 cc::BeginFrameSource* begin_frame_source_ = nullptr; | 134 cc::BeginFrameSource* begin_frame_source_ = nullptr; |
130 cc::BeginFrameArgs last_begin_frame_args_; | 135 cc::BeginFrameArgs last_begin_frame_args_; |
131 bool observing_begin_frames_ = false; | 136 bool observing_begin_frames_ = false; |
132 bool needs_begin_frames_ = false; | 137 bool needs_begin_frames_ = false; |
133 cc::CompositorFrame last_frame_; | 138 cc::CompositorFrame last_frame_; |
| 139 cc::BeginFrameAck last_begin_frame_ack_; |
134 | 140 |
135 DISALLOW_COPY_AND_ASSIGN(FakeCompositorFrameSink); | 141 DISALLOW_COPY_AND_ASSIGN(FakeCompositorFrameSink); |
136 }; | 142 }; |
137 | 143 |
138 class FrameGeneratorTest : public testing::Test { | 144 class FrameGeneratorTest : public testing::Test { |
139 public: | 145 public: |
140 FrameGeneratorTest() {} | 146 FrameGeneratorTest() {} |
141 ~FrameGeneratorTest() override {} | 147 ~FrameGeneratorTest() override {} |
142 | 148 |
143 // testing::Test overrides: | 149 // testing::Test overrides: |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 | 193 |
188 const cc::CompositorFrameMetadata& LastMetadata() const { | 194 const cc::CompositorFrameMetadata& LastMetadata() const { |
189 return compositor_frame_sink_->last_metadata(); | 195 return compositor_frame_sink_->last_metadata(); |
190 } | 196 } |
191 | 197 |
192 const cc::RenderPassList& LastRenderPassList() const { | 198 const cc::RenderPassList& LastRenderPassList() const { |
193 return compositor_frame_sink_->last_render_pass_list(); | 199 return compositor_frame_sink_->last_render_pass_list(); |
194 } | 200 } |
195 | 201 |
196 const cc::BeginFrameAck& LastBeginFrameAck() { | 202 const cc::BeginFrameAck& LastBeginFrameAck() { |
197 return begin_frame_source_->LastAckForObserver(compositor_frame_sink_); | 203 return compositor_frame_sink_->last_begin_frame_ack(); |
198 } | 204 } |
199 | 205 |
200 private: | 206 private: |
201 FakeCompositorFrameSink* compositor_frame_sink_ = nullptr; | 207 FakeCompositorFrameSink* compositor_frame_sink_ = nullptr; |
202 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_; | 208 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_; |
203 std::unique_ptr<TestServerWindowDelegate> server_window_delegate_; | 209 std::unique_ptr<TestServerWindowDelegate> server_window_delegate_; |
204 std::unique_ptr<FrameGenerator> frame_generator_; | 210 std::unique_ptr<FrameGenerator> frame_generator_; |
205 int next_sequence_number_ = 1; | 211 int next_sequence_number_ = 1; |
206 | 212 |
207 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest); | 213 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 InitWithSurfaceInfo(); | 349 InitWithSurfaceInfo(); |
344 | 350 |
345 frame_generator()->OnWindowDamaged(); | 351 frame_generator()->OnWindowDamaged(); |
346 IssueBeginFrame(); | 352 IssueBeginFrame(); |
347 EXPECT_EQ(2, NumberOfFramesReceived()); | 353 EXPECT_EQ(2, NumberOfFramesReceived()); |
348 } | 354 } |
349 | 355 |
350 } // namespace test | 356 } // namespace test |
351 } // namespace ws | 357 } // namespace ws |
352 } // namespace ui | 358 } // namespace ui |
OLD | NEW |