| // Copyright 2020 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 "src/developer/debug/debug_agent/zircon_system_interface.h" |
| |
| #include "src/developer/debug/debug_agent/component_launcher.h" |
| #include "src/developer/debug/debug_agent/zircon_binary_launcher.h" |
| #include "src/developer/debug/debug_agent/zircon_job_handle.h" |
| #include "src/developer/debug/debug_agent/zircon_process_handle.h" |
| #include "src/developer/debug/debug_agent/zircon_utils.h" |
| |
| namespace debug_agent { |
| |
| ZirconSystemInterface::ZirconSystemInterface() |
| : root_job_(zircon::GetRootJob()), |
| services_(sys::ServiceDirectory::CreateFromNamespace()), |
| limbo_provider_(services_) {} |
| |
| uint32_t ZirconSystemInterface::GetNumCpus() const { return zx_system_get_num_cpus(); } |
| |
| uint64_t ZirconSystemInterface::GetPhysicalMemory() const { return zx_system_get_physmem(); } |
| |
| std::unique_ptr<JobHandle> ZirconSystemInterface::GetRootJob() const { |
| return std::make_unique<ZirconJobHandle>(root_job_); |
| } |
| |
| std::unique_ptr<JobHandle> ZirconSystemInterface::GetComponentRootJob() const { |
| if (!root_job_.GetNativeHandle().is_valid()) |
| return nullptr; |
| |
| zx_koid_t component_root_koid = zircon::GetComponentRootJobKoid(); |
| if (component_root_koid == ZX_KOID_INVALID) |
| return nullptr; |
| |
| return root_job_.FindJob(component_root_koid); |
| } |
| |
| std::unique_ptr<BinaryLauncher> ZirconSystemInterface::GetLauncher() const { |
| return std::make_unique<ZirconBinaryLauncher>(services_); |
| } |
| |
| std::unique_ptr<ComponentLauncher> ZirconSystemInterface::GetComponentLauncher() const { |
| return std::make_unique<ComponentLauncher>(services_); |
| } |
| |
| } // namespace debug_agent |