compositing/
pipeline_details.rs1use std::cell::Cell;
6
7use base::Epoch;
8use base::id::PipelineId;
9use compositing_traits::display_list::ScrollTree;
10use compositing_traits::{CompositionPipeline, PipelineExitSource};
11use euclid::Scale;
12use style_traits::CSSPixel;
13use webrender_api::units::DevicePixel;
14
15use crate::painter::PaintMetricState;
16
17pub(crate) struct PipelineDetails {
18 pub pipeline: Option<CompositionPipeline>,
20
21 pub parent_pipeline_id: Option<PipelineId>,
23
24 pub animations_running: bool,
26
27 pub animation_callbacks_running: bool,
29
30 pub throttled: bool,
32
33 pub scroll_tree: ScrollTree,
36
37 pub first_paint_metric: Cell<PaintMetricState>,
39
40 pub first_contentful_paint_metric: Cell<PaintMetricState>,
42
43 pub largest_contentful_paint_metric: Cell<PaintMetricState>,
45
46 pub viewport_scale: Option<Scale<f32, CSSPixel, DevicePixel>>,
50
51 pub exited: PipelineExitSource,
54
55 pub display_list_epoch: Option<Epoch>,
58}
59
60impl PipelineDetails {
61 pub(crate) fn animation_callbacks_running(&self) -> bool {
62 self.animation_callbacks_running
63 }
64
65 pub(crate) fn animating(&self) -> bool {
66 !self.throttled && (self.animation_callbacks_running || self.animations_running)
67 }
68}
69
70impl PipelineDetails {
71 pub(crate) fn new() -> PipelineDetails {
72 PipelineDetails {
73 pipeline: None,
74 parent_pipeline_id: None,
75 viewport_scale: None,
76 animations_running: false,
77 animation_callbacks_running: false,
78 throttled: false,
79 scroll_tree: ScrollTree::default(),
80 first_paint_metric: Cell::new(PaintMetricState::Waiting),
81 first_contentful_paint_metric: Cell::new(PaintMetricState::Waiting),
82 largest_contentful_paint_metric: Cell::new(PaintMetricState::Waiting),
83 exited: PipelineExitSource::empty(),
84 display_list_epoch: None,
85 }
86 }
87
88 pub(crate) fn install_new_scroll_tree(&mut self, new_scroll_tree: ScrollTree) {
89 let old_scroll_offsets = self.scroll_tree.scroll_offsets();
90 self.scroll_tree = new_scroll_tree;
91 self.scroll_tree.set_all_scroll_offsets(&old_scroll_offsets);
92 }
93}