Chromium Code Reviews| 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 |