| // 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 GARNET_BIN_APPMGR_SYSTEM_OBJECTS_DIRECTORY_H_ |
| #define GARNET_BIN_APPMGR_SYSTEM_OBJECTS_DIRECTORY_H_ |
| |
| #include <fbl/string.h> |
| #include <fs/lazy-dir.h> |
| #include <lib/inspect/deprecated/exposed_object.h> |
| #include <lib/zx/process.h> |
| #include <lib/zx/thread.h> |
| #include <src/lib/fxl/strings/string_view.h> |
| |
| namespace component { |
| |
| class SystemObjectsDirectory : public component::ExposedObject { |
| public: |
| explicit SystemObjectsDirectory(zx::process process); |
| |
| private: |
| zx_status_t GetProcessHandleStats( |
| zx_info_process_handle_stats_t* process_handle_stats); |
| |
| class ThreadsDirectory : public component::ExposedObject { |
| public: |
| ThreadsDirectory(const zx::process* process); |
| |
| private: |
| static constexpr size_t kMaxThreads = 2048; |
| static constexpr uint64_t kAllId = 1; |
| struct ThreadInfo { |
| zx_koid_t koid; |
| fbl::String name; |
| zx::thread thread; |
| }; |
| |
| // Retrieves a list of ThreadInfos, one for each thread of the process. |
| void GetThreads(fbl::Vector<ThreadInfo>* out); |
| |
| // Given a thread's handle, returns stats about the thread. |
| zx_status_t GetThreadStats(zx_handle_t thread, |
| zx_info_thread_stats_t* thread_stats); |
| |
| const zx::process* process_; |
| }; |
| |
| class MemoryDirectory : public component::ExposedObject { |
| public: |
| MemoryDirectory(const zx::process* process); |
| |
| private: |
| zx_status_t GetTaskStats(zx_info_task_stats_t* task_stats); |
| |
| const zx::process* process_; |
| }; |
| |
| zx::process process_; |
| std::unique_ptr<ThreadsDirectory> threads_; |
| std::unique_ptr<MemoryDirectory> memory_; |
| }; |
| |
| } // namespace component |
| |
| #endif // GARNET_BIN_APPMGR_SYSTEM_OBJECTS_DIRECTORY_H_ |