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

Speed up updating the hit-test tree #3052

Merged
merged 4 commits into from Sep 13, 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 13, 2018
commit 31bc4b5f154f303995af26ef33b87d061325653c
@@ -249,10 +249,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.reserve(self.spatial_nodes.len());
}

self.coord_systems.clear();
@@ -275,15 +279,13 @@ impl ClipScrollTree {
&mut transform_palette,
scene_properties,
);

transform_palette
}

fn update_node(
&mut self,
node_index: SpatialNodeIndex,
state: &mut TransformUpdateState,
transform_palette: &mut TransformPalette,
transform_palette: &mut Option<&mut TransformPalette>,
scene_properties: &SceneProperties,
) {
// TODO(gw): This is an ugly borrow check workaround to clone these.
@@ -296,7 +298,9 @@ impl ClipScrollTree {
};

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

if node.children.is_empty() {
return;
@@ -525,7 +529,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);
@@ -570,7 +574,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);
@@ -624,7 +628,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);
@@ -663,7 +667,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);
}
@@ -340,9 +340,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 reserve(&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,
@@ -284,10 +284,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(&self.clip_scroll_tree));
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.