| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "garnet/lib/ui/gfx/tests/frame_scheduler_mocks.h" |
| |
| #include <lib/gtest/test_loop_fixture.h> |
| |
| namespace scenic_impl { |
| namespace gfx { |
| namespace test { |
| |
| SessionUpdater::UpdateResults MockSessionUpdater::UpdateSessions( |
| std::unordered_set<SessionId> sessions_to_update, |
| zx_time_t presentation_time, uint64_t trace_id) { |
| ++update_sessions_call_count_; |
| return update_sessions_return_value_; |
| } |
| |
| bool MockFrameRenderer::RenderFrame(const FrameTimingsPtr& frame_timings, |
| zx_time_t presentation_time) { |
| // Check that no frame numbers were skipped. |
| FXL_CHECK(frame_timings->frame_number() == last_frame_number_ + 1); |
| last_frame_number_ = frame_timings->frame_number(); |
| |
| ++render_frame_call_count_; |
| frame_timings->AddSwapchain(nullptr); |
| frames_.push_back({.frame_timings = std::move(frame_timings)}); |
| return render_frame_return_value_; |
| } |
| |
| void MockFrameRenderer::EndFrame(size_t frame_index) { |
| SignalFrameRendered(frame_index); |
| SignalFramePresented(frame_index); |
| } |
| |
| void MockFrameRenderer::SignalFrameRendered(size_t frame_index) { |
| FXL_DCHECK(frame_index < frames_.size()); |
| auto& frame = frames_[frame_index]; |
| if (!frame.frame_rendered) { |
| frame.frame_rendered = true; |
| frame.frame_timings->OnFrameRendered(/*swapchain index*/ 0, /*time*/ 1); |
| } |
| } |
| |
| void MockFrameRenderer::SignalFramePresented(size_t frame_index) { |
| FXL_DCHECK(frame_index < frames_.size()); |
| auto& frame = frames_[frame_index]; |
| frame.frame_timings->OnFramePresented(/*swapchain index*/ 0, /*time*/ 1); |
| frames_.erase(frames_.begin() + frame_index); |
| } |
| |
| void MockFrameRenderer::SignalFrameDropped(size_t frame_index) { |
| FXL_DCHECK(frame_index < frames_.size()); |
| auto& frame = frames_[frame_index]; |
| frame.frame_timings->OnFrameDropped(/*swapchain index*/ 0); |
| frames_.erase(frames_.begin() + frame_index); |
| } |
| |
| } // namespace test |
| } // namespace gfx |
| } // namespace scenic_impl |