blob: 12df2a12208953ba33ec5b68a1f59c5b2ac0a0e4 [file]
// Copyright 2026 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 SRC_DEVELOPER_FORENSICS_FEEDBACK_ATTACHMENTS_PROCESS_TREE_H_
#define SRC_DEVELOPER_FORENSICS_FEEDBACK_ATTACHMENTS_PROCESS_TREE_H_
#include <lib/zx/job.h>
#include "src/developer/forensics/feedback/attachments/provider.h"
#include "src/developer/forensics/feedback/attachments/types.h"
namespace forensics::feedback {
// AttachmentProvider that generates a snapshot attachment ("process_tree.txt")
// containing a hierarchical text description of jobs, processes, and threads in Zircon
// (equivalent to `fx shell ps -T`).
class ProcessTree : public AttachmentProvider {
public:
// Takes ownership of a handle to a job (typically the root job) from which to walk
// the task tree.
explicit ProcessTree(zx::job job);
// Returns a promise containing the process tree string table as an AttachmentData.
// Returns Error::kMissingValue if the root job handle is invalid or tree walking fails.
::fpromise::promise<AttachmentData> Get(uint64_t ticket) override;
// Completes the process tree collection promise associated with |ticket| early, if it hasn't
// already completed (no-op as collection runs synchronously).
void ForceCompletion(uint64_t ticket, Error error) override;
private:
zx::job job_;
};
} // namespace forensics::feedback
#endif // SRC_DEVELOPER_FORENSICS_FEEDBACK_ATTACHMENTS_PROCESS_TREE_H_