blob: 7fd83694a485328d6d11f291d7146b911892a2e6 [file] [log] [blame]
// Copyright 2024 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 <fidl/fuchsia.component.runner/cpp/natural_types.h>
#include <lib/driver/testing/cpp/scoped_global_logger.h>
namespace fdf_testing {
ScopedGlobalLogger::ScopedGlobalLogger(FuchsiaLogSeverity min_severity)
: loop_(&kAsyncLoopConfigNeverAttachToThread) {
ZX_ASSERT_MSG(!fdf::Logger::HasGlobalInstance(), "There is already an active logger.");
zx::result open_result = component::OpenServiceRoot();
ZX_ASSERT(open_result.is_ok());
std::vector<fuchsia_component_runner::ComponentNamespaceEntry> entries;
fidl::ClientEnd<fuchsia_io::Directory> svc = std::move(open_result).value();
entries.emplace_back(fuchsia_component_runner::ComponentNamespaceEntry{{
.path = "/svc",
.directory = std::move(svc),
}});
// Create Namespace object from the entries.
zx::result<fdf::Namespace> ns_result = fdf::Namespace::Create(entries);
ZX_ASSERT(ns_result.is_ok());
// Create Logger with dispatcher and namespace.
#if FUCHSIA_API_LEVEL_AT_LEAST(24)
std::unique_ptr<fdf::Logger> logger =
fdf::Logger::Create2(std::move(ns_result).value(), loop_.dispatcher(),
"fdf-testing-scoped-global-logger", min_severity);
logger_ = std::move(logger);
#else
zx::result<std::unique_ptr<fdf::Logger>> logger =
fdf::Logger::Create(std::move(ns_result).value(), loop_.dispatcher(),
"fdf-testing-scoped-global-logger", min_severity);
ZX_ASSERT(logger.is_ok());
logger_ = std::move(logger).value();
#endif
fdf::Logger::SetGlobalInstance(logger_.get());
}
ScopedGlobalLogger::~ScopedGlobalLogger() { fdf::Logger::SetGlobalInstance(nullptr); }
} // namespace fdf_testing