Replace the lazy_static crate whth std::sync::LazyLock in components/script (#33004)

* replace in str.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* replace navigator.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* replace htmlmetaelement.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* replace document.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* replace cssstyledeclaration.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* replace script_runtime.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* replace window_named_properties.rs

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* reduce dependency lazy_static

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

* reduce lazy in script_runtime.rs

 `Mutex::new()`  is const contexts. I think that `JS_ENGINE` is need not lazy initialize.

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>

---------

Signed-off-by: Hayashi Mikihiro <34ttrweoewiwe28@gmail.com>
This commit is contained in:
Hayashi Mikihiro 2024-08-12 16:30:35 +09:00 committed by GitHub
parent f38d1574bc
commit a797969efe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 98 additions and 104 deletions

1
Cargo.lock generated
View file

@ -5615,7 +5615,6 @@ dependencies = [
"itertools 0.13.0", "itertools 0.13.0",
"jstraceable_derive", "jstraceable_derive",
"keyboard-types", "keyboard-types",
"lazy_static",
"libc", "libc",
"log", "log",
"malloc_size_of", "malloc_size_of",

View file

@ -66,7 +66,6 @@ itertools = { workspace = true }
js = { package = "mozjs", git = "https://github.com/servo/mozjs", features = ["streams"] } js = { package = "mozjs", git = "https://github.com/servo/mozjs", features = ["streams"] }
jstraceable_derive = { path = "../jstraceable_derive" } jstraceable_derive = { path = "../jstraceable_derive" }
keyboard-types = { workspace = true } keyboard-types = { workspace = true }
lazy_static = { workspace = true }
libc = { workspace = true } libc = { workspace = true }
log = { workspace = true } log = { workspace = true }
malloc_size_of = { workspace = true } malloc_size_of = { workspace = true }

View file

@ -9,13 +9,13 @@ use std::hash::{Hash, Hasher};
use std::marker::PhantomData; use std::marker::PhantomData;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use std::str::FromStr; use std::str::FromStr;
use std::sync::LazyLock;
use std::{fmt, ops, str}; use std::{fmt, ops, str};
use chrono::prelude::{Utc, Weekday}; use chrono::prelude::{Utc, Weekday};
use chrono::{Datelike, TimeZone}; use chrono::{Datelike, TimeZone};
use cssparser::CowRcStr; use cssparser::CowRcStr;
use html5ever::{LocalName, Namespace}; use html5ever::{LocalName, Namespace};
use lazy_static::lazy_static;
use num_traits::Zero; use num_traits::Zero;
use regex::Regex; use regex::Regex;
use servo_atoms::Atom; use servo_atoms::Atom;
@ -430,10 +430,10 @@ impl DOMString {
/// <https://html.spec.whatwg.org/multipage/#valid-floating-point-number> /// <https://html.spec.whatwg.org/multipage/#valid-floating-point-number>
pub fn is_valid_floating_point_number_string(&self) -> bool { pub fn is_valid_floating_point_number_string(&self) -> bool {
lazy_static! { static RE: LazyLock<Regex> = LazyLock::new(|| {
static ref RE: Regex = Regex::new(r"^-?(?:\d+\.\d+|\d+|\.\d+)(?:(e|E)(\+|\-)?\d+)?$").unwrap()
Regex::new(r"^-?(?:\d+\.\d+|\d+|\.\d+)(?:(e|E)(\+|\-)?\d+)?$").unwrap(); });
}
RE.is_match(&self.0) && self.parse_floating_point_number().is_some() RE.is_match(&self.0) && self.parse_floating_point_number().is_some()
} }
@ -537,13 +537,14 @@ impl DOMString {
/// <https://html.spec.whatwg.org/multipage/#valid-e-mail-address> /// <https://html.spec.whatwg.org/multipage/#valid-e-mail-address>
pub fn is_valid_email_address_string(&self) -> bool { pub fn is_valid_email_address_string(&self) -> bool {
lazy_static! { static RE: LazyLock<Regex> = LazyLock::new(|| {
static ref RE: Regex = Regex::new(concat!( Regex::new(concat!(
r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?", r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?",
r"(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$" r"(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"
)) ))
.unwrap(); .unwrap()
} });
RE.is_match(&self.0) RE.is_match(&self.0)
} }

View file

@ -3,10 +3,10 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::cmp::Ordering; use std::cmp::Ordering;
use std::sync::LazyLock;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use html5ever::local_name; use html5ever::local_name;
use lazy_static::lazy_static;
use servo_arc::Arc; use servo_arc::Arc;
use servo_url::ServoUrl; use servo_url::ServoUrl;
use style::attr::AttrValue; use style::attr::AttrValue;
@ -344,35 +344,33 @@ impl CSSStyleDeclaration {
} }
} }
lazy_static! { static ENABLED_LONGHAND_PROPERTIES: LazyLock<Vec<LonghandId>> = LazyLock::new(|| {
static ref ENABLED_LONGHAND_PROPERTIES: Vec<LonghandId> = { // The 'all' shorthand contains all the enabled longhands with 2 exceptions:
// The 'all' shorthand contains all the enabled longhands with 2 exceptions: // 'direction' and 'unicode-bidi', so these must be added afterward.
// 'direction' and 'unicode-bidi', so these must be added afterward. let mut enabled_longhands: Vec<LonghandId> = ShorthandId::All.longhands().collect();
let mut enabled_longhands: Vec<LonghandId> = ShorthandId::All.longhands().collect(); if PropertyId::NonCustom(LonghandId::Direction.into()).enabled_for_all_content() {
if PropertyId::NonCustom(LonghandId::Direction.into()).enabled_for_all_content() { enabled_longhands.push(LonghandId::Direction);
enabled_longhands.push(LonghandId::Direction); }
} if PropertyId::NonCustom(LonghandId::UnicodeBidi.into()).enabled_for_all_content() {
if PropertyId::NonCustom(LonghandId::UnicodeBidi.into()).enabled_for_all_content() { enabled_longhands.push(LonghandId::UnicodeBidi);
enabled_longhands.push(LonghandId::UnicodeBidi); }
}
// Sort lexicographically, but with vendor-prefixed properties after standard ones. // Sort lexicographically, but with vendor-prefixed properties after standard ones.
enabled_longhands.sort_unstable_by(|a, b| { enabled_longhands.sort_unstable_by(|a, b| {
let a = a.name(); let a = a.name();
let b = b.name(); let b = b.name();
let is_a_vendor_prefixed = a.starts_with('-'); let is_a_vendor_prefixed = a.starts_with('-');
let is_b_vendor_prefixed = b.starts_with('-'); let is_b_vendor_prefixed = b.starts_with('-');
if is_a_vendor_prefixed == is_b_vendor_prefixed { if is_a_vendor_prefixed == is_b_vendor_prefixed {
a.partial_cmp(b).unwrap() a.partial_cmp(b).unwrap()
} else if is_b_vendor_prefixed { } else if is_b_vendor_prefixed {
Ordering::Less Ordering::Less
} else { } else {
Ordering::Greater Ordering::Greater
} }
}); });
enabled_longhands enabled_longhands
}; });
}
impl CSSStyleDeclarationMethods for CSSStyleDeclaration { impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
// https://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-length // https://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-length

View file

@ -11,6 +11,7 @@ use std::default::Default;
use std::mem; use std::mem;
use std::rc::Rc; use std::rc::Rc;
use std::slice::from_ref; use std::slice::from_ref;
use std::sync::LazyLock;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use base::id::BrowsingContextId; use base::id::BrowsingContextId;
@ -28,7 +29,6 @@ use hyper_serde::Serde;
use ipc_channel::ipc::{self, IpcSender}; use ipc_channel::ipc::{self, IpcSender};
use js::rust::{HandleObject, HandleValue}; use js::rust::{HandleObject, HandleValue};
use keyboard_types::{Code, Key, KeyState}; use keyboard_types::{Code, Key, KeyState};
use lazy_static::lazy_static;
use metrics::{ use metrics::{
InteractiveFlag, InteractiveMetrics, InteractiveWindow, ProfilerMetadataFactory, InteractiveFlag, InteractiveMetrics, InteractiveWindow, ProfilerMetadataFactory,
ProgressiveWebMetric, ProgressiveWebMetric,
@ -3219,17 +3219,15 @@ impl Document {
anchors: Default::default(), anchors: Default::default(),
applets: Default::default(), applets: Default::default(),
style_shared_lock: { style_shared_lock: {
lazy_static! { /// Per-process shared lock for author-origin stylesheets
/// Per-process shared lock for author-origin stylesheets ///
/// /// FIXME: make it per-document or per-pipeline instead:
/// FIXME: make it per-document or per-pipeline instead: /// <https://github.com/servo/servo/issues/16027>
/// <https://github.com/servo/servo/issues/16027> /// (Need to figure out what to do with the style attribute
/// (Need to figure out what to do with the style attribute /// of elements adopted into another document.)
/// of elements adopted into another document.) static PER_PROCESS_AUTHOR_SHARED_LOCK: LazyLock<StyleSharedRwLock> =
static ref PER_PROCESS_AUTHOR_SHARED_LOCK: StyleSharedRwLock = { LazyLock::new(|| StyleSharedRwLock::new());
StyleSharedRwLock::new()
};
}
PER_PROCESS_AUTHOR_SHARED_LOCK.clone() PER_PROCESS_AUTHOR_SHARED_LOCK.clone()
//StyleSharedRwLock::new() //StyleSharedRwLock::new()
}, },

View file

@ -3,6 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::str::FromStr; use std::str::FromStr;
use std::sync::LazyLock;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix}; use html5ever::{LocalName, Prefix};
@ -146,8 +147,8 @@ impl HTMLMetaElement {
} }
// 2-11 // 2-11
lazy_static::lazy_static! { static REFRESH_REGEX: LazyLock<Regex> = LazyLock::new(|| {
static ref REFRESH_REGEX: Regex = Regex::new( Regex::new(
r#"(?x) r#"(?x)
^ ^
\s* # 3 \s* # 3
@ -169,8 +170,9 @@ impl HTMLMetaElement {
$ $
"#, "#,
) )
.unwrap(); .unwrap()
} });
let mut url_record = document.url(); let mut url_record = document.url();
let captures = if let Some(captures) = REFRESH_REGEX.captures(content.as_bytes()) { let captures = if let Some(captures) = REFRESH_REGEX.captures(content.as_bytes()) {
captures captures

View file

@ -4,10 +4,10 @@
use std::cell::Cell; use std::cell::Cell;
use std::convert::TryInto; use std::convert::TryInto;
use std::sync::LazyLock;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use js::jsval::JSVal; use js::jsval::JSVal;
use lazy_static::lazy_static;
use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods;
@ -32,9 +32,8 @@ use crate::dom::xrsystem::XRSystem;
use crate::script_runtime::JSContext; use crate::script_runtime::JSContext;
pub(super) fn hardware_concurrency() -> u64 { pub(super) fn hardware_concurrency() -> u64 {
lazy_static! { static CPUS: LazyLock<u64> = LazyLock::new(|| num_cpus::get().try_into().unwrap_or(1));
static ref CPUS: u64 = num_cpus::get().try_into().unwrap_or(1);
}
*CPUS *CPUS
} }

View file

@ -47,7 +47,6 @@ use js::rust::{
describe_scripted_caller, Handle, HandleObject as RustHandleObject, IntoHandle, JSEngine, describe_scripted_caller, Handle, HandleObject as RustHandleObject, IntoHandle, JSEngine,
JSEngineHandle, ParentRuntime, Runtime as RustRuntime, JSEngineHandle, ParentRuntime, Runtime as RustRuntime,
}; };
use lazy_static::lazy_static;
use malloc_size_of::MallocSizeOfOps; use malloc_size_of::MallocSizeOfOps;
use profile_traits::mem::{Report, ReportKind, ReportsChan}; use profile_traits::mem::{Report, ReportKind, ReportsChan};
use profile_traits::path; use profile_traits::path;
@ -487,9 +486,7 @@ impl Drop for JSEngineSetup {
} }
} }
lazy_static! { static JS_ENGINE: Mutex<Option<JSEngineHandle>> = Mutex::new(None);
static ref JS_ENGINE: Mutex<Option<JSEngineHandle>> = Mutex::new(None);
}
#[allow(unsafe_code)] #[allow(unsafe_code)]
pub unsafe fn new_child_runtime( pub unsafe fn new_child_runtime(

View file

@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use std::ptr; use std::ptr;
use std::sync::LazyLock;
use js::conversions::jsstr_to_string; use js::conversions::jsstr_to_string;
use js::glue::{AppendToIdVector, CreateProxyHandler, NewProxyObject, ProxyTraps}; use js::glue::{AppendToIdVector, CreateProxyHandler, NewProxyObject, ProxyTraps};
@ -32,48 +33,48 @@ use crate::script_runtime::JSContext as SafeJSContext;
struct SyncWrapper(*const libc::c_void); struct SyncWrapper(*const libc::c_void);
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe impl Sync for SyncWrapper {} unsafe impl Sync for SyncWrapper {}
#[allow(unsafe_code)]
unsafe impl Send for SyncWrapper {}
lazy_static::lazy_static! { static HANDLER: LazyLock<SyncWrapper> = LazyLock::new(|| {
static ref HANDLER: SyncWrapper = { let traps = ProxyTraps {
let traps = ProxyTraps { enter: None,
enter: None, getOwnPropertyDescriptor: Some(get_own_property_descriptor),
getOwnPropertyDescriptor: Some(get_own_property_descriptor), defineProperty: Some(define_property),
defineProperty: Some(define_property), ownPropertyKeys: Some(own_property_keys),
ownPropertyKeys: Some(own_property_keys), delete_: Some(delete),
delete_: Some(delete), enumerate: None,
enumerate: None, getPrototypeIfOrdinary: Some(get_prototype_if_ordinary),
getPrototypeIfOrdinary: Some(get_prototype_if_ordinary), getPrototype: None,
getPrototype: None, setPrototype: None,
setPrototype: None, setImmutablePrototype: None,
setImmutablePrototype: None, preventExtensions: Some(prevent_extensions),
preventExtensions: Some(prevent_extensions), isExtensible: Some(is_extensible),
isExtensible: Some(is_extensible), has: None,
has: None, get: None,
get: None, set: None,
set: None, call: None,
call: None, construct: None,
construct: None, hasOwn: None,
hasOwn: None, getOwnEnumerablePropertyKeys: None,
getOwnEnumerablePropertyKeys: None, nativeCall: None,
nativeCall: None, objectClassIs: None,
objectClassIs: None, className: Some(class_name),
className: Some(class_name), fun_toString: None,
fun_toString: None, boxedValue_unbox: None,
boxedValue_unbox: None, defaultValue: None,
defaultValue: None, trace: None,
trace: None, finalize: None,
finalize: None, objectMoved: None,
objectMoved: None, isCallable: None,
isCallable: None, isConstructor: None,
isConstructor: None,
};
#[allow(unsafe_code)]
unsafe {
SyncWrapper(CreateProxyHandler(&traps, ptr::null()))
}
}; };
}
#[allow(unsafe_code)]
unsafe {
SyncWrapper(CreateProxyHandler(&traps, ptr::null()))
}
});
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe extern "C" fn get_own_property_descriptor( unsafe extern "C" fn get_own_property_descriptor(