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 { | 93 void OnDidFinishFrame(const cc::BeginFrameAck& ack) override {} |
89 begin_frame_source_->DidFinishFrame(this, ack); | |
90 } | |
91 | 94 |
92 void SetBeginFrameSource(cc::BeginFrameSource* source) { | 95 void SetBeginFrameSource(cc::BeginFrameSource* source) { |
93 if (begin_frame_source_ && observing_begin_frames_) { | 96 if (begin_frame_source_ && observing_begin_frames_) { |
94 begin_frame_source_->RemoveObserver(this); | 97 begin_frame_source_->RemoveObserver(this); |
95 observing_begin_frames_ = false; | 98 observing_begin_frames_ = false; |
96 } | 99 } |
97 begin_frame_source_ = source; | 100 begin_frame_source_ = source; |
98 UpdateNeedsBeginFramesInternal(); | 101 UpdateNeedsBeginFramesInternal(); |
99 } | 102 } |
100 | 103 |
101 const cc::CompositorFrameMetadata& last_metadata() const { | 104 const cc::CompositorFrameMetadata& last_metadata() const { |
102 return last_frame_.metadata; | 105 return last_frame_.metadata; |
103 } | 106 } |
104 | 107 |
105 const cc::RenderPassList& last_render_pass_list() const { | 108 const cc::RenderPassList& last_render_pass_list() const { |
106 return last_frame_.render_pass_list; | 109 return last_frame_.render_pass_list; |
107 } | 110 } |
108 | 111 |
109 int number_frames_received() { return number_frames_received_; } | 112 int number_frames_received() { return number_frames_received_; } |
110 | 113 |
114 const cc::BeginFrameAck& last_begin_frame_ack() { | |
sunnyps
2017/05/22 07:17:12
nit: const method
Eric Seckler
2017/05/22 11:29:58
Done.
| |
115 return last_begin_frame_ack_; | |
116 } | |
117 | |
111 private: | 118 private: |
112 void UpdateNeedsBeginFramesInternal() { | 119 void UpdateNeedsBeginFramesInternal() { |
113 if (!begin_frame_source_) | 120 if (!begin_frame_source_) |
114 return; | 121 return; |
115 | 122 |
116 if (needs_begin_frames_ == observing_begin_frames_) | 123 if (needs_begin_frames_ == observing_begin_frames_) |
117 return; | 124 return; |
118 | 125 |
119 observing_begin_frames_ = needs_begin_frames_; | 126 observing_begin_frames_ = needs_begin_frames_; |
120 if (needs_begin_frames_) { | 127 if (needs_begin_frames_) { |
121 begin_frame_source_->AddObserver(this); | 128 begin_frame_source_->AddObserver(this); |
122 } else { | 129 } else { |
123 begin_frame_source_->RemoveObserver(this); | 130 begin_frame_source_->RemoveObserver(this); |
124 } | 131 } |
125 } | 132 } |
126 | 133 |
127 int number_frames_received_ = 0; | 134 int number_frames_received_ = 0; |
128 std::unique_ptr<cc::ExternalBeginFrameSource> external_begin_frame_source_; | 135 std::unique_ptr<cc::ExternalBeginFrameSource> external_begin_frame_source_; |
129 cc::BeginFrameSource* begin_frame_source_ = nullptr; | 136 cc::BeginFrameSource* begin_frame_source_ = nullptr; |
130 cc::BeginFrameArgs last_begin_frame_args_; | 137 cc::BeginFrameArgs last_begin_frame_args_; |
131 bool observing_begin_frames_ = false; | 138 bool observing_begin_frames_ = false; |
132 bool needs_begin_frames_ = false; | 139 bool needs_begin_frames_ = false; |
133 cc::CompositorFrame last_frame_; | 140 cc::CompositorFrame last_frame_; |
141 cc::BeginFrameAck last_begin_frame_ack_; | |
134 | 142 |
135 DISALLOW_COPY_AND_ASSIGN(FakeCompositorFrameSink); | 143 DISALLOW_COPY_AND_ASSIGN(FakeCompositorFrameSink); |
136 }; | 144 }; |
137 | 145 |
138 class FrameGeneratorTest : public testing::Test { | 146 class FrameGeneratorTest : public testing::Test { |
139 public: | 147 public: |
140 FrameGeneratorTest() {} | 148 FrameGeneratorTest() {} |
141 ~FrameGeneratorTest() override {} | 149 ~FrameGeneratorTest() override {} |
142 | 150 |
143 // testing::Test overrides: | 151 // testing::Test overrides: |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 | 195 |
188 const cc::CompositorFrameMetadata& LastMetadata() const { | 196 const cc::CompositorFrameMetadata& LastMetadata() const { |
189 return compositor_frame_sink_->last_metadata(); | 197 return compositor_frame_sink_->last_metadata(); |
190 } | 198 } |
191 | 199 |
192 const cc::RenderPassList& LastRenderPassList() const { | 200 const cc::RenderPassList& LastRenderPassList() const { |
193 return compositor_frame_sink_->last_render_pass_list(); | 201 return compositor_frame_sink_->last_render_pass_list(); |
194 } | 202 } |
195 | 203 |
196 const cc::BeginFrameAck& LastBeginFrameAck() { | 204 const cc::BeginFrameAck& LastBeginFrameAck() { |
197 return begin_frame_source_->LastAckForObserver(compositor_frame_sink_); | 205 return compositor_frame_sink_->last_begin_frame_ack(); |
198 } | 206 } |
199 | 207 |
200 private: | 208 private: |
201 FakeCompositorFrameSink* compositor_frame_sink_ = nullptr; | 209 FakeCompositorFrameSink* compositor_frame_sink_ = nullptr; |
202 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_; | 210 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_; |
203 std::unique_ptr<TestServerWindowDelegate> server_window_delegate_; | 211 std::unique_ptr<TestServerWindowDelegate> server_window_delegate_; |
204 std::unique_ptr<FrameGenerator> frame_generator_; | 212 std::unique_ptr<FrameGenerator> frame_generator_; |
205 int next_sequence_number_ = 1; | 213 int next_sequence_number_ = 1; |
206 | 214 |
207 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest); | 215 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
343 InitWithSurfaceInfo(); | 351 InitWithSurfaceInfo(); |
344 | 352 |
345 frame_generator()->OnWindowDamaged(); | 353 frame_generator()->OnWindowDamaged(); |
346 IssueBeginFrame(); | 354 IssueBeginFrame(); |
347 EXPECT_EQ(2, NumberOfFramesReceived()); | 355 EXPECT_EQ(2, NumberOfFramesReceived()); |
348 } | 356 } |
349 | 357 |
350 } // namespace test | 358 } // namespace test |
351 } // namespace ws | 359 } // namespace ws |
352 } // namespace ui | 360 } // namespace ui |
OLD | NEW |