mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Auto merge of #27026 - CYBAI:dynamic-module, r=jdm
Introduce dynamic module --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #25439 - [x] There are tests for these changes
This commit is contained in:
commit
086556e706
36 changed files with 812 additions and 439 deletions
|
@ -77,12 +77,13 @@ use hyper::Method;
|
|||
use hyper::StatusCode;
|
||||
use indexmap::IndexMap;
|
||||
use ipc_channel::ipc::{IpcReceiver, IpcSender};
|
||||
use js::glue::{CallObjectTracer, CallValueTracer};
|
||||
use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, JobQueue, TraceKind};
|
||||
use js::glue::{CallObjectTracer, CallStringTracer, CallValueTracer};
|
||||
use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSString, JSTracer, JobQueue, TraceKind};
|
||||
use js::jsval::JSVal;
|
||||
use js::rust::{GCMethods, Handle, Runtime};
|
||||
use js::typedarray::TypedArray;
|
||||
use js::typedarray::TypedArrayElement;
|
||||
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
|
||||
use media::WindowGLContext;
|
||||
use metrics::{InteractiveMetrics, InteractiveWindow};
|
||||
use mime::Mime;
|
||||
|
@ -94,7 +95,7 @@ use msg::constellation_msg::{ServiceWorkerId, ServiceWorkerRegistrationId};
|
|||
use net_traits::filemanager_thread::RelativePos;
|
||||
use net_traits::image::base::{Image, ImageMetadata};
|
||||
use net_traits::image_cache::{ImageCache, PendingImageId};
|
||||
use net_traits::request::{Referrer, Request, RequestBuilder};
|
||||
use net_traits::request::{CredentialsMode, ParserMetadata, Referrer, Request, RequestBuilder};
|
||||
use net_traits::response::HttpsState;
|
||||
use net_traits::response::{Response, ResponseBody};
|
||||
use net_traits::storage_thread::StorageType;
|
||||
|
@ -134,6 +135,7 @@ use std::borrow::Cow;
|
|||
use std::cell::{Cell, RefCell, UnsafeCell};
|
||||
use std::collections::{BTreeMap, HashMap, HashSet, VecDeque};
|
||||
use std::hash::{BuildHasher, Hash};
|
||||
use std::mem;
|
||||
use std::ops::{Deref, DerefMut, Range};
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
|
@ -252,6 +254,18 @@ pub fn trace_object(tracer: *mut JSTracer, description: &str, obj: &Heap<*mut JS
|
|||
}
|
||||
}
|
||||
|
||||
/// Trace a `JSString`.
|
||||
pub fn trace_string(tracer: *mut JSTracer, description: &str, s: &Heap<*mut JSString>) {
|
||||
unsafe {
|
||||
trace!("tracing {}", description);
|
||||
CallStringTracer(
|
||||
tracer,
|
||||
s.ptr.get() as *mut _,
|
||||
GCTraceKindToAscii(TraceKind::String),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl<T: JSTraceable> JSTraceable for Rc<T> {
|
||||
unsafe fn trace(&self, trc: *mut JSTracer) {
|
||||
(**self).trace(trc)
|
||||
|
@ -323,6 +337,15 @@ unsafe impl JSTraceable for Heap<*mut JSObject> {
|
|||
}
|
||||
}
|
||||
|
||||
unsafe impl JSTraceable for Heap<*mut JSString> {
|
||||
unsafe fn trace(&self, trc: *mut JSTracer) {
|
||||
if self.get().is_null() {
|
||||
return;
|
||||
}
|
||||
trace_string(trc, "heap string", self);
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl JSTraceable for Heap<JSVal> {
|
||||
unsafe fn trace(&self, trc: *mut JSTracer) {
|
||||
trace_jsval(trc, "heap value", self);
|
||||
|
@ -534,6 +557,8 @@ unsafe_no_jsmanaged_fields!(StyleSharedRwLock);
|
|||
unsafe_no_jsmanaged_fields!(USVString);
|
||||
unsafe_no_jsmanaged_fields!(Referrer);
|
||||
unsafe_no_jsmanaged_fields!(ReferrerPolicy);
|
||||
unsafe_no_jsmanaged_fields!(CredentialsMode);
|
||||
unsafe_no_jsmanaged_fields!(ParserMetadata);
|
||||
unsafe_no_jsmanaged_fields!(Response);
|
||||
unsafe_no_jsmanaged_fields!(ResponseBody);
|
||||
unsafe_no_jsmanaged_fields!(ResourceThreads);
|
||||
|
@ -1068,6 +1093,17 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: JSTraceable + MallocSizeOf> MallocSizeOf for RootedTraceableBox<T> {
|
||||
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
// Briefly resurrect the real Box value so we can rely on the existing calculations.
|
||||
// Then immediately forget about it again to avoid dropping the box.
|
||||
let inner = unsafe { Box::from_raw(self.ptr) };
|
||||
let size = inner.size_of(ops);
|
||||
mem::forget(inner);
|
||||
size
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: JSTraceable + Default> Default for RootedTraceableBox<T> {
|
||||
fn default() -> RootedTraceableBox<T> {
|
||||
RootedTraceableBox::new(T::default())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue