blob: 6f341c90b9e7ff319c56c9102a1ad28d7dfa0a6c [file] [log] [blame]
// Copyright 2023 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.
use argh::{ArgsInfo, FromArgs};
#[derive(ArgsInfo, FromArgs, Debug, PartialEq)]
/// Interact with the profiling subsystem.
#[argh(subcommand, name = "profiler")]
pub struct ProfilerCommand {
#[argh(subcommand)]
pub sub_cmd: ProfilerSubCommand,
}
#[derive(ArgsInfo, FromArgs, PartialEq, Debug)]
#[argh(subcommand)]
pub enum ProfilerSubCommand {
Start(Start),
}
#[derive(ArgsInfo, FromArgs, PartialEq, Debug)]
/// Record a profile.
#[argh(subcommand, name = "start")]
pub struct Start {
/// url of a component to launch and profile
#[argh(option)]
pub url: Option<String>,
/// moniker of a component to attach to and profile. If specified in combination with `--url`,
/// will attempt to launch the component at the given moniker.
#[argh(option)]
pub moniker: Option<String>,
/// pids to profile
#[argh(option)]
pub pids: Vec<u64>,
/// tids to profile
#[argh(option)]
pub tids: Vec<u64>,
/// jobs to profile
#[argh(option)]
pub job_ids: Vec<u64>,
/// how long to profiler for. If unspecified, will interactively wait until <ENTER> is pressed.
#[argh(option)]
pub duration: Option<f64>,
/// name of output trace file. Defaults to profile.out.
#[argh(option, default = "String::from(\"profile.out\")")]
pub output: String,
/// print stats about how the profiling session went
#[argh(switch)]
pub print_stats: bool,
/// if false, output the raw sample file instead of attempting to symbolize it
#[argh(option, default = "true")]
pub symbolize: bool,
}