geckolib: Only dirty the relevant origin when stylesheets are added or removed.

This commit is contained in:
Cameron McCormack 2017-08-12 18:59:43 +08:00
parent 9ef3871829
commit 22a6a2c1bb

View file

@ -118,6 +118,7 @@ use style::stylesheets::{FontFeatureValuesRule, ImportRule, KeyframesRule, Mallo
use style::stylesheets::{MallocSizeOfWithRepeats, MediaRule}; use style::stylesheets::{MallocSizeOfWithRepeats, MediaRule};
use style::stylesheets::{NamespaceRule, Origin, PageRule, SizeOfState, StyleRule, SupportsRule}; use style::stylesheets::{NamespaceRule, Origin, PageRule, SizeOfState, StyleRule, SupportsRule};
use style::stylesheets::StylesheetContents; use style::stylesheets::StylesheetContents;
use style::stylesheets::StylesheetInDocument;
use style::stylesheets::StylesheetLoader as StyleStylesheetLoader; use style::stylesheets::StylesheetLoader as StyleStylesheetLoader;
use style::stylesheets::keyframes_rule::{Keyframe, KeyframeSelector, KeyframesStepValue}; use style::stylesheets::keyframes_rule::{Keyframe, KeyframeSelector, KeyframesStepValue};
use style::stylesheets::supports_rule::parse_condition_or_declaration; use style::stylesheets::supports_rule::parse_condition_or_declaration;
@ -849,12 +850,10 @@ pub extern "C" fn Servo_StyleSet_AppendStyleSheet(
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut(); let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data; let mut data = &mut *data;
let guard = global_style_data.shared_lock.read(); let guard = global_style_data.shared_lock.read();
data.stylesheets.append_stylesheet( let sheet = unsafe { GeckoStyleSheet::new(sheet) };
&data.stylist, let origin = sheet.contents(&guard).origin;
unsafe { GeckoStyleSheet::new(sheet) }, data.stylesheets.append_stylesheet(&data.stylist, sheet, &guard);
&guard data.clear_stylist_origin(&origin);
);
data.clear_stylist();
} }
#[no_mangle] #[no_mangle]
@ -898,12 +897,10 @@ pub extern "C" fn Servo_StyleSet_PrependStyleSheet(
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut(); let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data; let mut data = &mut *data;
let guard = global_style_data.shared_lock.read(); let guard = global_style_data.shared_lock.read();
data.stylesheets.prepend_stylesheet( let sheet = unsafe { GeckoStyleSheet::new(sheet) };
&data.stylist, let origin = sheet.contents(&guard).origin;
unsafe { GeckoStyleSheet::new(sheet) }, data.stylesheets.prepend_stylesheet(&data.stylist, sheet, &guard);
&guard, data.clear_stylist_origin(&origin);
);
data.clear_stylist();
} }
#[no_mangle] #[no_mangle]
@ -916,13 +913,15 @@ pub extern "C" fn Servo_StyleSet_InsertStyleSheetBefore(
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut(); let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data; let mut data = &mut *data;
let guard = global_style_data.shared_lock.read(); let guard = global_style_data.shared_lock.read();
let sheet = unsafe { GeckoStyleSheet::new(sheet) };
let origin = sheet.contents(&guard).origin;
data.stylesheets.insert_stylesheet_before( data.stylesheets.insert_stylesheet_before(
&data.stylist, &data.stylist,
unsafe { GeckoStyleSheet::new(sheet) }, sheet,
unsafe { GeckoStyleSheet::new(before_sheet) }, unsafe { GeckoStyleSheet::new(before_sheet) },
&guard, &guard,
); );
data.clear_stylist(); data.clear_stylist_origin(&origin);
} }
#[no_mangle] #[no_mangle]
@ -934,12 +933,10 @@ pub extern "C" fn Servo_StyleSet_RemoveStyleSheet(
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut(); let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data; let mut data = &mut *data;
let guard = global_style_data.shared_lock.read(); let guard = global_style_data.shared_lock.read();
data.stylesheets.remove_stylesheet( let sheet = unsafe { GeckoStyleSheet::new(sheet) };
&data.stylist, let origin = sheet.contents(&guard).origin;
unsafe { GeckoStyleSheet::new(sheet) }, data.stylesheets.remove_stylesheet(&data.stylist, sheet, &guard);
&guard, data.clear_stylist_origin(&origin);
);
data.clear_stylist();
} }
#[no_mangle] #[no_mangle]