Skip to main content

DebugRequest

Enum DebugRequest 

Source
pub enum DebugRequest {
    Compact {
        responder: DebugCompactResponder,
    },
    DeleteProfile {
        volume: String,
        profile: String,
        responder: DebugDeleteProfileResponder,
    },
    RecordAndReplayProfile {
        volume: Option<String>,
        profile: String,
        duration_secs: u32,
        responder: DebugRecordAndReplayProfileResponder,
    },
    ReplayXorRecordProfile {
        volume: String,
        identifier: ProfileIdentifier,
        duration_secs: u32,
        responder: DebugReplayXorRecordProfileResponder,
    },
    StopProfileTasks {
        responder: DebugStopProfileTasksResponder,
    },
    ClearCaches {
        responder: DebugClearCachesResponder,
    },
}
Expand description

This is an internal protocol for on-device debugging and testing only. See ffx fxfs help for more details.

Variants§

§

Compact

Forces a compaction.

Fields

§

DeleteProfile

Deletes a recorded profile from a volume. Fails if the volume isn’t mounted or there is active profile recording or replay.

Fields

§volume: String
§profile: String
§

RecordAndReplayProfile

Begins recording a profile for a named volume for up to the given duration in seconds. If a profile already exists under the given name then it will begin replaying it as well. Fails if the volume isn’t mounted or there is active profile recording or replay on the volume. Page faults for objects that do not get opened by a caller during the recording period will will be filtered out of the profile.

This “record-while-replaying” strategy is meant to support boot-profiling in an environment where we don’t explicitly know when the system has updated. By recording during replay and filtering objects without open events, Fxfs drops dead/replaced objects to refresh the profile.

Fields

§volume: Option<String>
§profile: String
§duration_secs: u32
§

ReplayXorRecordProfile

Replays a profile if one exists, and only records if one does not exist. The profile is saved as an attribute associated with the object described by the provided ProfileIdentifier. Fails if the volume isn’t mounted or there is active profile recording or replay on the volume.

This associated profile is meant to support app launch profiling, where the profile is associated directly with a core file that is used as part of the app launch. Associating it with the file as an attribute enables automatic cleanup of the old profile and allows a new recording when the app is updated. These profiles do not filter entries based on Open events since outside of the boot process objects may already be opened or cached in overlays like Starnix. The filtering is not needed here in any case since a method of refreshing the profile after an update is already provided.

Fields

§volume: String
§duration_secs: u32
§

StopProfileTasks

Stops all profile recording and replay activity. Ongoing recordings are completed and persisted.

§

ClearCaches

Clears the directory entry cache (dirent cache) and internal object store caches (including LSM tree object caches, layer file chunk caches, and non-permanent unwrapped keys). This drops strong references held by the cache to filesystem nodes (files and directories). If these nodes are not currently open elsewhere, they will be dropped, freeing their associated resources (including VMOs). Subsequent access to these paths will force Fxfs to recreate the nodes and reload metadata from disk.

Implementations§

Trait Implementations§

Source§

impl Debug for DebugRequest

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.