blob: c22e19040ceeec02662b44d6ea204f894dc5acd9 [file] [log] [blame]
// Copyright 2018 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.
#ifndef SRC_UI_SCENIC_LIB_GFX_GFX_SYSTEM_H_
#define SRC_UI_SCENIC_LIB_GFX_GFX_SYSTEM_H_
#include <lib/trace/event.h>
#include <memory>
#include "src/ui/lib/escher/escher.h"
#include "src/ui/scenic/lib/gfx/engine/engine.h"
#include "src/ui/scenic/lib/gfx/engine/gfx_command_applier.h"
#include "src/ui/scenic/lib/gfx/engine/image_pipe_updater.h"
#include "src/ui/scenic/lib/scenic/system.h"
#include "src/ui/scenic/lib/scenic/take_screenshot_delegate_deprecated.h"
namespace scenic_impl {
namespace gfx {
class GfxSystem final : public System, public scenic_impl::TakeScreenshotDelegateDeprecated {
public:
static constexpr TypeId kTypeId = kGfx;
static const char* kName;
GfxSystem(SystemContext context, Engine* engine, Sysmem* sysmem,
display::DisplayManager* display_manager,
std::shared_ptr<ImagePipeUpdater> image_pipe_updater);
// |scenic_impl::System|
CommandDispatcherUniquePtr CreateCommandDispatcher(
scheduling::SessionId session_id, std::shared_ptr<EventReporter> event_reporter,
std::shared_ptr<ErrorReporter> error_reporter) override;
// TODO(fxbug.dev/40795): Remove this.
// |scenic_impl::TakeScreenshotDelegateDeprecated|
void TakeScreenshot(fuchsia::ui::scenic::Scenic::TakeScreenshotCallback callback) override;
// |scenic_impl::System|
scheduling::SessionUpdater::UpdateResults UpdateSessions(
const std::unordered_map<scheduling::SessionId, scheduling::PresentId>& sessions_to_update,
uint64_t trace_id, fit::function<void(scheduling::SessionId)> destroy_session) override;
static escher::EscherUniquePtr CreateEscher(sys::ComponentContext* app_context);
private:
static VkBool32 HandleDebugReport(VkDebugReportFlagsEXT flags,
VkDebugReportObjectTypeEXT objectType, uint64_t object,
size_t location, int32_t messageCode, const char* pLayerPrefix,
const char* pMessage, void* pUserData);
void DumpSessionMapResources(std::ostream& output,
std::unordered_set<GlobalId, GlobalId::Hash>* visited_resources);
display::DisplayManager* const display_manager_;
Sysmem* const sysmem_;
Engine* const engine_;
SessionManager session_manager_;
ViewTreeUpdater view_tree_updater_;
const std::shared_ptr<ImagePipeUpdater> image_pipe_updater_;
};
} // namespace gfx
} // namespace scenic_impl
#endif // SRC_UI_SCENIC_LIB_GFX_GFX_SYSTEM_H_