blob: 6738ecbc036dd54a47533369009b31d45c28f0cd [file] [log] [blame]
// Copyright 2017 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.
#pragma once
#include "garnet/bin/ui/scene_manager/displays/display_manager.h"
#include "garnet/bin/ui/scene_manager/engine/engine.h"
#include "garnet/bin/ui/scene_manager/engine/session.h"
#include "garnet/bin/ui/scene_manager/engine/session_handler.h"
#include "garnet/bin/ui/scene_manager/scene_manager_impl.h"
#include "garnet/bin/ui/scene_manager/sync/release_fence_signaller.h"
namespace scene_manager {
namespace test {
class SessionForTest : public Session {
public:
SessionForTest(SessionId id,
Engine* engine,
scene_manager::EventReporter* event_reporter,
scene_manager::ErrorReporter* error_reporter);
virtual void TearDown() override;
};
class SessionHandlerForTest : public SessionHandler {
public:
SessionHandlerForTest(
Engine* engine,
SessionId session_id,
::fidl::InterfaceRequest<scenic::Session> request,
::fidl::InterfaceHandle<scenic::SessionListener> listener);
// scenic::Session interface methods.
void Enqueue(::fidl::Array<scenic::OpPtr> ops) override;
void Present(uint64_t presentation_time,
::fidl::Array<zx::event> acquire_fences,
::fidl::Array<zx::event> release_fences,
const PresentCallback& callback) override;
// Return the number of Enqueue()/Present()/Connect() messages that have
// been processed.
uint32_t enqueue_count() const { return enqueue_count_; }
uint32_t present_count() const { return present_count_; }
private:
std::atomic<uint32_t> enqueue_count_;
std::atomic<uint32_t> present_count_;
};
class ReleaseFenceSignallerForTest : public ReleaseFenceSignaller {
public:
ReleaseFenceSignallerForTest(
escher::impl::CommandBufferSequencer* command_buffer_sequencer);
void AddCPUReleaseFence(zx::event fence) override;
uint32_t num_calls_to_add_cpu_release_fence() {
return num_calls_to_add_cpu_release_fence_;
}
private:
uint32_t num_calls_to_add_cpu_release_fence_ = 0;
};
class EngineForTest : public Engine {
public:
EngineForTest(DisplayManager* display_manager,
std::unique_ptr<ReleaseFenceSignaller> r);
using Engine::FindSession;
private:
std::unique_ptr<SessionHandler> CreateSessionHandler(
SessionId id,
::fidl::InterfaceRequest<scenic::Session> request,
::fidl::InterfaceHandle<scenic::SessionListener> listener) override;
};
} // namespace test
} // namespace scene_manager