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

Separate interning text run #3369

Merged
merged 10 commits into from Dec 6, 2018
Prev

Add PrimTemplateCommonData access helper to FrameResources.

  • Loading branch information
djg committed Dec 5, 2018
commit e3ccda76c5e959d2be95fee47376142b43ecddc8
@@ -615,31 +615,13 @@ impl TileCache {
clip_scroll_tree,
);

let (prim_rect, clip_rect) = match prim_instance.kind {
PrimitiveInstanceKind::Picture { data_handle, .. } |
PrimitiveInstanceKind::LineDecoration { data_handle, .. } |
PrimitiveInstanceKind::NormalBorder { data_handle, .. } |
PrimitiveInstanceKind::ImageBorder { data_handle, .. } |
PrimitiveInstanceKind::Rectangle { data_handle, .. } |
PrimitiveInstanceKind::YuvImage { data_handle, .. } |
PrimitiveInstanceKind::Image { data_handle, .. } |
PrimitiveInstanceKind::LinearGradient { data_handle, .. } |
PrimitiveInstanceKind::RadialGradient { data_handle, .. } |
PrimitiveInstanceKind::Clear { data_handle, .. } => {
let prim_data = &resources.prim_data_store[data_handle];
(&prim_data.prim_rect, &prim_data.clip_rect)
}
PrimitiveInstanceKind::TextRun { data_handle, .. } => {
let prim_data = &resources.text_run_data_store[data_handle];
(&prim_data.prim_rect, &prim_data.clip_rect)
}
};
let prim_data = &resources.as_common_data(&prim_instance);

// Map the primitive local rect into the picture space.
// TODO(gw): We should maybe store this in the primitive template
// during interning so that we never have to calculate
// it during frame building.
let culling_rect = match prim_rect.intersection(&clip_rect) {
let culling_rect = match prim_data.prim_rect.intersection(&prim_data.clip_rect) {
Some(rect) => rect,
None => return,
};
@@ -2837,20 +2837,8 @@ impl PrimitiveStore {
let pic = &self.pictures[pic_index.0];
(pic.local_rect, LayoutRect::max_rect())
}
PrimitiveInstanceKind::Clear { data_handle, .. } |
PrimitiveInstanceKind::NormalBorder { data_handle, .. } |
PrimitiveInstanceKind::ImageBorder { data_handle, .. } |
PrimitiveInstanceKind::Rectangle { data_handle, .. } |
PrimitiveInstanceKind::YuvImage { data_handle, .. } |
PrimitiveInstanceKind::Image { data_handle, .. } |
PrimitiveInstanceKind::LinearGradient { data_handle, .. } |
PrimitiveInstanceKind::RadialGradient { data_handle, .. } |
PrimitiveInstanceKind::LineDecoration { data_handle, .. } => {
let prim_data = &resources.prim_data_store[data_handle];
(prim_data.prim_rect, prim_data.clip_rect)
}
PrimitiveInstanceKind::TextRun { data_handle, .. } => {
let prim_data = &resources.text_run_data_store[data_handle];
_ => {
let prim_data = &resources.as_common_data(&prim_instance);
(prim_data.prim_rect, prim_data.clip_rect)
}
};
@@ -30,7 +30,8 @@ use frame_builder::{FrameBuilder, FrameBuilderConfig};
use gpu_cache::GpuCache;
use hit_test::{HitTest, HitTester};
use internal_types::{DebugOutput, FastHashMap, FastHashSet, RenderedDocument, ResultMsg};
use prim_store::{PrimitiveDataStore, PrimitiveScratchBuffer};
use prim_store::{PrimitiveDataStore, PrimitiveScratchBuffer, PrimitiveInstance};
use prim_store::{PrimitiveInstanceKind, PrimTemplateCommonData};
use prim_store::text_run::TextRunDataStore;
use profiler::{BackendProfileCounters, IpcProfileCounters, ResourceProfileCounters};
use record::ApiRecordingReceiver;
@@ -205,6 +206,33 @@ pub struct FrameResources {
pub text_run_data_store: TextRunDataStore,
}

impl FrameResources {
pub fn as_common_data(
&self,
prim_inst: &PrimitiveInstance
) -> &PrimTemplateCommonData {
match prim_inst.kind {
PrimitiveInstanceKind::Picture { data_handle, .. } |
PrimitiveInstanceKind::LineDecoration { data_handle, .. } |
PrimitiveInstanceKind::NormalBorder { data_handle, .. } |
PrimitiveInstanceKind::ImageBorder { data_handle, .. } |
PrimitiveInstanceKind::Rectangle { data_handle, .. } |
PrimitiveInstanceKind::YuvImage { data_handle, .. } |
PrimitiveInstanceKind::Image { data_handle, .. } |
PrimitiveInstanceKind::LinearGradient { data_handle, .. } |
PrimitiveInstanceKind::RadialGradient { data_handle, .. } |
PrimitiveInstanceKind::Clear { data_handle, .. } => {
let prim_data = &self.prim_data_store[data_handle];
&prim_data.common
}
PrimitiveInstanceKind::TextRun { data_handle, .. } => {
let prim_data = &self.text_run_data_store[data_handle];
&prim_data.common
}
}
}
}

struct Document {
// The latest built scene, usable to build frames.
// received from the scene builder thread.
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.