pub struct Scope {
pub target_pid: Vec<i32>,
pub target_cmdline: Vec<String>,
pub exclude_pid: Vec<i32>,
pub exclude_cmdline: Vec<String>,
pub additional_cmdline_count: Option<u32>,
pub process_shard_count: Option<u32>,
}
Fields§
§target_pid: Vec<i32>
Process ID (TGID) allowlist. If this list is not empty, only matching samples will be retained. If multiple allow/deny-lists are specified by the config, then all of them are evaluated for each sampled process.
target_cmdline: Vec<String>
Command line allowlist, matched against the /proc/
On Android T+ (13+), this field can specify a single wildcard (*), and the profiler will attempt to match it in two possible ways:
- if the pattern starts with a ‘/’, then it is matched against the first segment of the cmdline (i.e. argv0). For example “/bin/e*” would match “/bin/echo”.
- otherwise the pattern is matched against the part of argv0 corresponding to the binary name (this is unrelated to /proc/pid/exe). For example “echo” would match “/bin/echo”.
On Android S (12) and below, both this pattern and /proc/pid/cmdline get normalized prior to an exact string comparison. Normalization is as follows: (1) trim everything beyond the first null or “@” byte; (2) if the string contains forward slashes, trim everything up to and including the last one.
Implementation note: in either case, at most 511 characters of cmdline are considered.
exclude_pid: Vec<i32>
List of excluded pids.
exclude_cmdline: Vec<String>
List of excluded cmdlines. See description of |target_cmdline| for how this is handled.
additional_cmdline_count: Option<u32>
Number of additional command lines to sample. Only those which are neither explicitly included nor excluded will be considered. Processes are accepted on a first come, first served basis.
process_shard_count: Option<u32>
If set to N, all encountered processes will be put into one of the N possible bins, and only one randomly-chosen bin will be selected for unwinding. The binning is simply “pid % N”, under the assumption that low-order bits of pids are roughly uniformly distributed. Other explicit inclusions/exclusions in this |Scope| message are still respected.
The profiler will report the chosen shard in PerfSampleDefaults, and the values will be queryable in trace processor under the “stats” table as “perf_process_shard_count” and “perf_chosen_process_shard”.
NB: all data sources in a config that set |process_shard_count| must set it to the same value. The profiler will choose one bin for all those data sources.
Implementations§
Source§impl Scope
impl Scope
Sourcepub fn additional_cmdline_count(&self) -> u32
pub fn additional_cmdline_count(&self) -> u32
Returns the value of additional_cmdline_count
, or the default value if additional_cmdline_count
is unset.
Sourcepub fn process_shard_count(&self) -> u32
pub fn process_shard_count(&self) -> u32
Returns the value of process_shard_count
, or the default value if process_shard_count
is unset.
Trait Implementations§
Source§impl Message for Scope
impl Message for Scope
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>where
B: BufMut,
Self: Sized,
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>where
B: BufMut,
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8>where
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8>where
Self: Sized,
Source§fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError>where
B: BufMut,
Self: Sized,
fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError>where
B: BufMut,
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8>where
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8>where
Self: Sized,
Source§fn decode<B>(buf: B) -> Result<Self, DecodeError>where
B: Buf,
Self: Default,
fn decode<B>(buf: B) -> Result<Self, DecodeError>where
B: Buf,
Self: Default,
Source§fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError>where
B: Buf,
Self: Default,
fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError>where
B: Buf,
Self: Default,
Source§fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Self: Sized,
fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Self: Sized,
self
. Read moreSource§fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Self: Sized,
fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Self: Sized,
self
.impl StructuralPartialEq for Scope
Auto Trait Implementations§
impl Freeze for Scope
impl RefUnwindSafe for Scope
impl Send for Scope
impl Sync for Scope
impl Unpin for Scope
impl UnwindSafe for Scope
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)