Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid redundant frame builds (take two). #3092

Merged
merged 4 commits into from Sep 26, 2018
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Only build a transform palette when we need it.

  • Loading branch information
nical committed Sep 20, 2018
commit f1ab0996140d162e11583b1358f32c9939f2ecf0
@@ -253,10 +253,14 @@ impl ClipScrollTree {
&mut self,
pan: WorldPoint,
scene_properties: &SceneProperties,
) -> TransformPalette {
let mut transform_palette = TransformPalette::new(self.spatial_nodes.len());
mut transform_palette: Option<&mut TransformPalette>,
) {
if self.spatial_nodes.is_empty() {
return transform_palette;
return;
}

if let Some(ref mut palette) = transform_palette {
palette.allocate(self.spatial_nodes.len());
}

self.coord_systems.clear();
@@ -282,7 +286,9 @@ impl ClipScrollTree {
};

node.update(&mut state, &mut self.coord_systems, scene_properties);
node.push_gpu_data(&mut transform_palette, node_index);
if let Some(ref mut palette) = transform_palette {
node.push_gpu_data(palette, node_index);
}

if !node.children.is_empty() {
node.prepare_state_for_children(&mut state);
@@ -293,8 +299,6 @@ impl ClipScrollTree {
);
}
}

transform_palette
}

pub fn finalize_and_apply_pending_scroll_offsets(&mut self, old_states: ScrollStates) {
@@ -506,7 +510,7 @@ fn test_cst_simple_translation() {
LayoutVector2D::zero(),
);

cst.update_tree(WorldPoint::zero(), &SceneProperties::new());
cst.update_tree(WorldPoint::zero(), &SceneProperties::new(), None);

test_pt(100.0, 100.0, &cst, child1, root, 200.0, 100.0);
test_pt(100.0, 100.0, &cst, root, child1, 0.0, 100.0);
@@ -551,7 +555,7 @@ fn test_cst_simple_scale() {
LayoutVector2D::zero(),
);

cst.update_tree(WorldPoint::zero(), &SceneProperties::new());
cst.update_tree(WorldPoint::zero(), &SceneProperties::new(), None);

test_pt(100.0, 100.0, &cst, child1, root, 400.0, 100.0);
test_pt(100.0, 100.0, &cst, root, child1, 25.0, 100.0);
@@ -605,7 +609,7 @@ fn test_cst_scale_translation() {
LayoutVector2D::zero(),
);

cst.update_tree(WorldPoint::zero(), &SceneProperties::new());
cst.update_tree(WorldPoint::zero(), &SceneProperties::new(), None);

test_pt(100.0, 100.0, &cst, child1, root, 200.0, 150.0);
test_pt(100.0, 100.0, &cst, child2, root, 300.0, 450.0);
@@ -644,7 +648,7 @@ fn test_cst_translation_rotate() {
LayoutVector2D::zero(),
);

cst.update_tree(WorldPoint::zero(), &SceneProperties::new());
cst.update_tree(WorldPoint::zero(), &SceneProperties::new(), None);

test_pt(100.0, 0.0, &cst, child1, root, 0.0, -100.0);
}
@@ -343,9 +343,11 @@ impl FrameBuilder {
resource_cache.begin_frame(frame_id);
gpu_cache.begin_frame();

let mut transform_palette = clip_scroll_tree.update_tree(
let mut transform_palette = TransformPalette::new();
clip_scroll_tree.update_tree(
pan,
scene_properties,
Some(&mut transform_palette),
);

self.update_scroll_bars(clip_scroll_tree, gpu_cache);
@@ -415,14 +415,19 @@ pub struct TransformPalette {
}

impl TransformPalette {
pub fn new(spatial_node_count: usize) -> Self {
pub fn new() -> Self {
TransformPalette {
transforms: vec![TransformData::invalid(); spatial_node_count],
metadata: vec![TransformMetadata::invalid(); spatial_node_count],
transforms: Vec::new(),
metadata: Vec::new(),
map: FastHashMap::default(),
}
}

pub fn allocate(&mut self, count: usize) {
self.transforms = vec![TransformData::invalid(); count];
self.metadata = vec![TransformMetadata::invalid(); count];
}

pub fn set_world_transform(
&mut self,
index: SpatialNodeIndex,
@@ -298,10 +298,10 @@ impl Document {
let accumulated_scale_factor = self.view.accumulated_scale_factor();
let pan = self.view.pan.to_f32() / accumulated_scale_factor;

// TODO: do we need to do something with the transform palette?
let _palette = self.clip_scroll_tree.update_tree(
self.clip_scroll_tree.update_tree(
pan,
&self.dynamic_properties,
None,
);

self.hit_tester = Some(frame_builder.create_hit_tester(
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.