mirror of
https://github.com/servo/servo.git
synced 2025-09-30 00:29:14 +01:00
Reuse StylesheetContent
for inline style sheets with identical content (#38540)
For duplicate style sheets with identical content, `StylesheetContents` can be reused to avoid redundant parsing of the inline style sheets. Since duplicate stylesheets is a common case with web components, this change will significantly improve performance. Additionally, the cache hit rate of stylo's `CascadeDataCache` can now be significantly improved. When shared `StylesheetContents` is modified, copy-on-write will occur to avoid affecting other sharers. And then updates the references to `CssRule` or `PropertyDeclarationBlock` stored in the CSSOMs to ensure that modifications are made only on the new copy. Signed-off-by: sharpshooter_pt <ibluegalaxy_taoj@163.com>
This commit is contained in:
parent
f6b77f94e2
commit
6e6ef513a9
25 changed files with 711 additions and 125 deletions
|
@ -3,8 +3,9 @@
|
|||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use dom_struct::dom_struct;
|
||||
use style::shared_lock::SharedRwLock;
|
||||
use style::stylesheets::{CssRuleType, CssRuleTypes};
|
||||
use servo_arc::Arc;
|
||||
use style::shared_lock::{Locked, SharedRwLock, SharedRwLockReadGuard};
|
||||
use style::stylesheets::{CssRuleType, CssRuleTypes, CssRules};
|
||||
|
||||
use crate::dom::bindings::codegen::Bindings::CSSGroupingRuleBinding::CSSGroupingRuleMethods;
|
||||
use crate::dom::bindings::error::{ErrorResult, Fallible};
|
||||
|
@ -62,6 +63,16 @@ impl CSSGroupingRule {
|
|||
pub(crate) fn shared_lock(&self) -> &SharedRwLock {
|
||||
self.cssrule.shared_lock()
|
||||
}
|
||||
|
||||
pub(crate) fn update_rules(
|
||||
&self,
|
||||
rules: &Arc<Locked<CssRules>>,
|
||||
guard: &SharedRwLockReadGuard,
|
||||
) {
|
||||
if let Some(rulelist) = self.rulelist.get() {
|
||||
rulelist.update_rules(RulesSource::Rules(rules.clone()), guard);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl CSSGroupingRuleMethods<crate::DomTypeHolder> for CSSGroupingRule {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue