pub struct BuildTimings { /* private fields */ }Expand description
The two wall clocks that decide whether a build was plugin-bound.
Plugin hooks themselves are timed on the JavaScript side, because this side can only
bracket dispatch and completion and for a concurrently dispatched hook that is mostly
queue wait — see packages/rolldown/src/utils/plugin-timings.ts. But the link stage
is visible only from here, and it is the one stretch of a build that is pure core work
with no plugin in it. Non-link time running far ahead of link time is what says the
build is plugin-bound, so these are handed across the binding for the JavaScript side
to gate its report on.
A build nobody is measuring keeps no clock at all: Self::start hands back None,
and every recorder is a no-op on it. Whether it is measured is decided once, where the
driver is built, from the same checks.bundlerTimings that turns the JavaScript side’s
measurement on — the two have to agree, because a report needs both halves.
Implementations§
Source§impl BuildTimings
impl BuildTimings
pub fn new(measured: bool) -> Self
Sourcepub fn start(&self) -> Option<Instant>
pub fn start(&self) -> Option<Instant>
The instant to measure a stretch of the build from, or None when it is not being
measured — then nothing downstream reads the clock, so there is no reason to take one.
Pass what this returns to Self::record_total or Self::record_link_stage.
pub fn record_total(&self, start: Option<Instant>)
pub fn record_link_stage(&self, start: Option<Instant>)
Sourcepub fn total_micros(&self) -> u64
pub fn total_micros(&self) -> u64
Zero until Self::record_total runs, which only the full write/generate paths
do, and only when the build is being measured. Watch, incremental and dev builds go
straight to bundle_write/bundle_generate, so they leave this at zero and nothing
is reported for them.
pub fn link_stage_micros(&self) -> u64
Sourcepub fn plugins_are_slow(&self) -> bool
pub fn plugins_are_slow(&self) -> bool
Whether the build looks plugin-bound: over MIN_BUILD long, with non-link time more
than PLUGIN_TIME_OVER_LINK_TIME times the link stage.
The link stage is the one stretch of a build with no plugin in it, which is what makes it a baseline. The multiplier was settled by studying real-world projects.
This only decides whether to look; what the build actually spent in plugin callbacks
is measured on the JavaScript side, because this side cannot see when a callback began
running — see packages/rolldown/src/utils/plugin-timings.ts.
Sourcepub fn is_plugin_bound(total_micros: u64, link_stage_micros: u64) -> bool
pub fn is_plugin_bound(total_micros: u64, link_stage_micros: u64) -> bool
The same test over totals supplied by the caller, so a build that produced several outputs can sum its clocks before asking. The measurement it is judged against accumulates across outputs, so these have to as well.
Trait Implementations§
Source§impl Debug for BuildTimings
impl Debug for BuildTimings
Auto Trait Implementations§
impl !Freeze for BuildTimings
impl RefUnwindSafe for BuildTimings
impl Send for BuildTimings
impl Sync for BuildTimings
impl Unpin for BuildTimings
impl UnsafeUnpin for BuildTimings
impl UnwindSafe for BuildTimings
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);