mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Don't unnecessarily construct gfxFontFeatureValueSet
If there is no font feature values inside document we should avoid creating unnecessary objects.
This commit is contained in:
parent
9b63fedf59
commit
dd8af182c1
2 changed files with 18 additions and 11 deletions
|
@ -913,6 +913,10 @@ extern "C" {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Gecko_nsFont_Destroy(dst: *mut nsFont);
|
pub fn Gecko_nsFont_Destroy(dst: *mut nsFont);
|
||||||
}
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Gecko_ConstructFontFeatureValueSet()
|
||||||
|
-> *mut gfxFontFeatureValueSet;
|
||||||
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Gecko_AppendFeatureValueHashEntry(value_set:
|
pub fn Gecko_AppendFeatureValueHashEntry(value_set:
|
||||||
*mut gfxFontFeatureValueSet,
|
*mut gfxFontFeatureValueSet,
|
||||||
|
@ -2047,10 +2051,8 @@ extern "C" {
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_StyleSet_BuildFontFeatureValueSet(set:
|
pub fn Servo_StyleSet_BuildFontFeatureValueSet(set:
|
||||||
RawServoStyleSetBorrowed,
|
RawServoStyleSetBorrowed)
|
||||||
list:
|
-> *mut gfxFontFeatureValueSet;
|
||||||
*mut gfxFontFeatureValueSet)
|
|
||||||
-> bool;
|
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_StyleSet_ResolveForDeclarations(set:
|
pub fn Servo_StyleSet_ResolveForDeclarations(set:
|
||||||
|
|
|
@ -47,6 +47,7 @@ use style::gecko_bindings::bindings::{ServoCssRulesBorrowed, ServoCssRulesStrong
|
||||||
use style::gecko_bindings::bindings::{nsACString, nsAString, nsCSSPropertyIDSetBorrowedMut};
|
use style::gecko_bindings::bindings::{nsACString, nsAString, nsCSSPropertyIDSetBorrowedMut};
|
||||||
use style::gecko_bindings::bindings::Gecko_AddPropertyToSet;
|
use style::gecko_bindings::bindings::Gecko_AddPropertyToSet;
|
||||||
use style::gecko_bindings::bindings::Gecko_AppendPropertyValuePair;
|
use style::gecko_bindings::bindings::Gecko_AppendPropertyValuePair;
|
||||||
|
use style::gecko_bindings::bindings::Gecko_ConstructFontFeatureValueSet;
|
||||||
use style::gecko_bindings::bindings::Gecko_GetOrCreateFinalKeyframe;
|
use style::gecko_bindings::bindings::Gecko_GetOrCreateFinalKeyframe;
|
||||||
use style::gecko_bindings::bindings::Gecko_GetOrCreateInitialKeyframe;
|
use style::gecko_bindings::bindings::Gecko_GetOrCreateInitialKeyframe;
|
||||||
use style::gecko_bindings::bindings::Gecko_GetOrCreateKeyframeAtStart;
|
use style::gecko_bindings::bindings::Gecko_GetOrCreateKeyframeAtStart;
|
||||||
|
@ -3555,26 +3556,30 @@ pub extern "C" fn Servo_StyleSet_GetCounterStyleRule(raw_data: RawServoStyleSetB
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_StyleSet_BuildFontFeatureValueSet(
|
pub extern "C" fn Servo_StyleSet_BuildFontFeatureValueSet(
|
||||||
raw_data: RawServoStyleSetBorrowed,
|
raw_data: RawServoStyleSetBorrowed) -> *mut gfxFontFeatureValueSet {
|
||||||
set: *mut gfxFontFeatureValueSet
|
|
||||||
) -> bool {
|
|
||||||
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
let data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
||||||
|
|
||||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
let guard = global_style_data.shared_lock.read();
|
let guard = global_style_data.shared_lock.read();
|
||||||
|
|
||||||
|
let has_rule = data.extra_style_data
|
||||||
|
.iter_origins()
|
||||||
|
.any(|(d, _)| !d.font_feature_values.is_empty());
|
||||||
|
|
||||||
|
if !has_rule {
|
||||||
|
return ptr::null_mut();
|
||||||
|
}
|
||||||
|
|
||||||
let font_feature_values_iter = data.extra_style_data
|
let font_feature_values_iter = data.extra_style_data
|
||||||
.iter_origins_rev()
|
.iter_origins_rev()
|
||||||
.flat_map(|(d, _)| d.font_feature_values.iter());
|
.flat_map(|(d, _)| d.font_feature_values.iter());
|
||||||
|
|
||||||
let mut any_rule = false;
|
let set = unsafe { Gecko_ConstructFontFeatureValueSet() };
|
||||||
for src in font_feature_values_iter {
|
for src in font_feature_values_iter {
|
||||||
any_rule = true;
|
|
||||||
let rule = src.read_with(&guard);
|
let rule = src.read_with(&guard);
|
||||||
rule.set_at_rules(set);
|
rule.set_at_rules(set);
|
||||||
}
|
}
|
||||||
|
set
|
||||||
any_rule
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue