From bea7b31445aa65c3537874e9fce3cd801869ea9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 1 Dec 2017 20:36:29 +0100 Subject: [PATCH 1/2] style: Add a missing fast-path in GeckoElement::each_class. This shows up when inserting elements in the bloom filter. --- components/style/gecko/wrapper.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index 15d3f785b6e..dd82ec8cea8 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -1124,6 +1124,10 @@ impl<'le> TElement for GeckoElement<'le> { where F: FnMut(&Atom), { + if !self.may_have_class() { + return; + } + snapshot_helpers::each_class(self.0, callback, Gecko_ClassOrClassList) } From a4cb6b8f094deebb5b3a99c798d71771e44180af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 1 Dec 2017 20:36:15 +0100 Subject: [PATCH 2/2] style: Formatting nits in snapshot_helpers-related code. --- components/style/gecko/snapshot_helpers.rs | 22 +++++++++++++--------- components/style/gecko/wrapper.rs | 10 ++++++---- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/components/style/gecko/snapshot_helpers.rs b/components/style/gecko/snapshot_helpers.rs index 79963e69ca1..51953a0231c 100644 --- a/components/style/gecko/snapshot_helpers.rs +++ b/components/style/gecko/snapshot_helpers.rs @@ -17,11 +17,12 @@ pub type ClassOrClassList = unsafe extern fn (T, *mut *mut nsAtom, *mut *mut /// Given an item `T`, a class name, and a getter function, return whether that /// element has the class that `name` represents. -pub fn has_class(item: T, - name: &Atom, - case_sensitivity: CaseSensitivity, - getter: ClassOrClassList) -> bool -{ +pub fn has_class( + item: T, + name: &Atom, + case_sensitivity: CaseSensitivity, + getter: ClassOrClassList, +) -> bool { unsafe { let mut class: *mut nsAtom = ptr::null_mut(); let mut list: *mut *mut nsAtom = ptr::null_mut(); @@ -40,10 +41,13 @@ pub fn has_class(item: T, /// Given an item, a callback, and a getter, execute `callback` for each class /// this `item` has. -pub fn each_class(item: T, - mut callback: F, - getter: ClassOrClassList) - where F: FnMut(&Atom) +pub fn each_class( + item: T, + mut callback: F, + getter: ClassOrClassList, +) +where + F: FnMut(&Atom) { unsafe { let mut class: *mut nsAtom = ptr::null_mut(); diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index dd82ec8cea8..f537b515789 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -2135,10 +2135,12 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { return false; } - snapshot_helpers::has_class(self.0, - name, - case_sensitivity, - Gecko_ClassOrClassList) + snapshot_helpers::has_class( + self.0, + name, + case_sensitivity, + Gecko_ClassOrClassList, + ) } #[inline]