| // Copyright 2019 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 "lib/inspect/component.h" |
| #include "sdk/lib/vfs/cpp/node.h" |
| #include "sdk/lib/vfs/cpp/vmo_file.h" |
| |
| namespace inspect { |
| |
| std::weak_ptr<ComponentInspector> ComponentInspector::singleton_; |
| |
| ComponentInspector::ComponentInspector() |
| : inspector_(), root_tree_(inspector_.CreateTree("root")) {} |
| |
| std::shared_ptr<ComponentInspector> ComponentInspector::Initialize( |
| sys::ComponentContext* startup_context) { |
| ZX_ASSERT(!singleton_.lock()); |
| |
| auto inspector = |
| std::shared_ptr<ComponentInspector>(new ComponentInspector()); |
| |
| zx::vmo read_only_vmo; |
| ZX_ASSERT(inspector->root_tree()->GetVmo().duplicate( |
| ZX_RIGHTS_BASIC | ZX_RIGHT_READ | ZX_RIGHT_MAP, |
| &read_only_vmo) == ZX_OK); |
| |
| std::unique_ptr<vfs::Node> vmo_file( |
| new vfs::VmoFile(std::move(read_only_vmo), 0, 4096)); |
| ZX_ASSERT( |
| startup_context->outgoing()->GetOrCreateDirectory("objects")->AddEntry( |
| "root.inspect", std::move(vmo_file)) == ZX_OK); |
| |
| singleton_ = inspector; |
| |
| return inspector; |
| } |
| |
| } // namespace inspect |