pub struct TraceFilter {
pub bytecode: Option<Vec<u8>>,
pub bytecode_v2: Option<Vec<u8>>,
pub string_filter_chain: Option<StringFilterChain>,
pub bytecode_overlay_v54: Option<Vec<u8>>,
pub string_filter_chain_v54: Option<StringFilterChain>,
}Expand description
When set applies a post-filter to the trace contents using the filter
provided. The filter is applied at ReadBuffers() time and works both in the
case of IPC readback and write_into_file. This filter can be generated
using tools/proto_filter -s schema.proto -F filter_out.bytes or
-T filter_out.escaped_string (for .pbtx). See go/trace-filtering for
design.
Introduced in Android S, but it was broken (b/195065199). Reintroduced in Android T with a different field number. Updated in Android U with a new bytecode version which supports string filtering.
§========================= Filter bytecode.
Fields§
§bytecode: Option<Vec<u8>>The bytecode as implemented in Android T.
bytecode_v2: Option<Vec<u8>>The bytecode as implemented in Android U. Adds support for string filtering.
string_filter_chain: Option<StringFilterChain>§bytecode_overlay_v54: Option<Vec<u8>>Bytecode overlay for Perfetto v54+. This overlay is applied on top of bytecode_v2 to upgrade specific simple fields to new values. Old Perfetto versions ignore this field; new versions apply it.
The motivation for this is that adding new opcodes in a backwards compatible way while also minimizing config size is hard. Instead, the overlay mechanism allows us to “patch” specific fields in the original bytecode_v2 with new semantics.
See RFC 0011-subset-string-filter-rules.md for more info.
Note: Unlike bytecode_v2 (which uses implicit message indices via EndOfMessage markers), this overlay uses a triplet format with explicit indices: [msg_index, field_id << 3 | opcode, argument] … [checksum] Each entry is exactly 3 varints. The argument is 0 when not needed. Entries must be sorted by (msg_index, field_id).
The parser processes bytecode_v2 and this overlay simultaneously:
- any field not mentioned in the overlay is parsed as usual
- any field in the overlay but not in the bytecode_v2 is added with its overlay value
- any field in both the overlay and bytecode_v2 takes the value in the overlay, the bytecode_v2 value is ignored.
Introduced in: Perfetto v54.
string_filter_chain_v54: Option<StringFilterChain>String filter chain for Perfetto v54+. Rules in this chain either overwrite rules in string_filter_chain (if the name matches) or are appended (if the name doesn’t match). This allows modifying existing rules (e.g., changing policy) without duplicating the entire chain. Rules without a name are always appended. See /rfcs/0011-subset-string-filter-rules.md for design details. Introduced in: Perfetto v54.
Implementations§
Source§impl TraceFilter
impl TraceFilter
Sourcepub fn bytecode(&self) -> &[u8] ⓘ
pub fn bytecode(&self) -> &[u8] ⓘ
Returns the value of bytecode, or the default value if bytecode is unset.
Sourcepub fn bytecode_v2(&self) -> &[u8] ⓘ
pub fn bytecode_v2(&self) -> &[u8] ⓘ
Returns the value of bytecode_v2, or the default value if bytecode_v2 is unset.
Sourcepub fn bytecode_overlay_v54(&self) -> &[u8] ⓘ
pub fn bytecode_overlay_v54(&self) -> &[u8] ⓘ
Returns the value of bytecode_overlay_v54, or the default value if bytecode_overlay_v54 is unset.
Trait Implementations§
Source§impl Clone for TraceFilter
impl Clone for TraceFilter
Source§fn clone(&self) -> TraceFilter
fn clone(&self) -> TraceFilter
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TraceFilter
impl Debug for TraceFilter
Source§impl Default for TraceFilter
impl Default for TraceFilter
Source§impl Message for TraceFilter
impl Message for TraceFilter
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.