blob: 35603767e884988b5b9ab4a4cbc8f64cc85503f9 [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_BIN_APP_H_
#define SRC_UI_SCENIC_BIN_APP_H_
#include <lib/async/cpp/executor.h>
#include <lib/fit/function.h>
#include <memory>
#include "src/lib/fsl/io/device_watcher.h"
#include "src/ui/lib/escher/escher.h"
#include "src/ui/scenic/lib/annotation/annotation_registry.h"
#include "src/ui/scenic/lib/display/display_manager.h"
#include "src/ui/scenic/lib/gfx/engine/engine.h"
#include "src/ui/scenic/lib/scenic/scenic.h"
#include "src/ui/scenic/lib/scheduling/frame_scheduler.h"
#include "src/ui/scenic/lib/shutdown/lifecycle_controller_impl.h"
#include "src/ui/scenic/lib/shutdown/shutdown_manager.h"
#include "src/ui/scenic/lib/watchdog/watchdog.h"
namespace scenic_impl {
class DisplayInfoDelegate : public Scenic::GetDisplayInfoDelegateDeprecated {
public:
DisplayInfoDelegate(std::shared_ptr<display::Display> display);
// TODO(fxb/23686): Remove this when we externalize Displays.
// |Scenic::GetDisplayInfoDelegateDeprecated|
void GetDisplayInfo(fuchsia::ui::scenic::Scenic::GetDisplayInfoCallback callback) override;
// |Scenic::GetDisplayInfoDelegateDeprecated|
void GetDisplayOwnershipEvent(
fuchsia::ui::scenic::Scenic::GetDisplayOwnershipEventCallback callback) override;
private:
std::shared_ptr<display::Display> display_ = nullptr;
};
class App {
public:
explicit App(std::unique_ptr<sys::ComponentContext> app_context, inspect::Node inspect_node,
fit::closure quit_callback);
private:
void InitializeServices(escher::EscherUniquePtr escher,
std::shared_ptr<display::Display> display);
async::Executor executor_;
std::unique_ptr<sys::ComponentContext> app_context_;
std::shared_ptr<ShutdownManager> shutdown_manager_;
gfx::Sysmem sysmem_;
display::DisplayManager display_manager_;
std::unique_ptr<DisplayInfoDelegate> display_info_delegate_;
escher::EscherUniquePtr escher_;
std::shared_ptr<scheduling::FrameScheduler> frame_scheduler_;
std::optional<gfx::Engine> engine_;
Scenic scenic_;
std::unique_ptr<fsl::DeviceWatcher> device_watcher_;
std::unique_ptr<Watchdog> watchdog_;
AnnotationRegistry annotation_registry_;
LifecycleControllerImpl lifecycle_controller_impl_;
};
} // namespace scenic_impl
#endif // SRC_UI_SCENIC_BIN_APP_H_