blob: f749de65b1a19b6edbbb6d0216df1cb323c2dea1 [file] [log] [blame]
// Copyright 2021 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 "screen_capture_manager.h"
#include <lib/syslog/cpp/macros.h>
#include "rapidjson/document.h"
#include "screen_capture.h"
#include "src/lib/files/file.h"
#include "src/lib/fsl/handles/object_info.h"
#include "src/ui/scenic/lib/flatland/engine/engine.h"
#include "src/ui/scenic/lib/flatland/renderer/renderer.h"
namespace screen_capture {
ScreenCaptureManager::ScreenCaptureManager(
std::shared_ptr<flatland::Engine> engine, std::shared_ptr<flatland::Renderer> renderer,
std::shared_ptr<flatland::FlatlandManager> flatland_manager,
std::vector<std::shared_ptr<allocation::BufferCollectionImporter>> buffer_collection_importers)
: engine_(engine),
renderer_(renderer),
flatland_manager_(flatland_manager),
buffer_collection_importers_(std::move(buffer_collection_importers)) {
FX_DCHECK(engine_);
FX_DCHECK(renderer_);
FX_DCHECK(flatland_manager_);
}
void ScreenCaptureManager::CreateClient(
fidl::InterfaceRequest<fuchsia::ui::composition::ScreenCapture> request) {
bindings_.AddBinding(
std::make_unique<ScreenCapture>(
buffer_collection_importers_, renderer_,
[this]() {
FX_DCHECK(flatland_manager_);
FX_DCHECK(engine_);
auto display = flatland_manager_->GetPrimaryFlatlandDisplayForRendering();
if (!display) {
FX_LOGS(WARNING)
<< "No FlatlandDisplay attached at root. Returning an empty screenshot.";
return flatland::Renderables();
}
return engine_->GetRenderables(*display);
}),
std::move(request));
}
} // namespace screen_capture