aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/trace.rs
diff options
context:
space:
mode:
authorAbhishekSharma102 <20724848+AbhishekSharma102@users.noreply.github.com>2020-07-13 06:04:00 +0000
committerJosh Matthews <josh@joshmatthews.net>2020-07-21 16:20:51 -0400
commit1119dd119ed335b6d6e448290b56e0eeab6de25f (patch)
treec1d2ae2b369a20923cfe8e24496193896c4ad473 /components/script/dom/bindings/trace.rs
parentbfb7bea704340e19583b04fb02b444fadd35e9e1 (diff)
downloadservo-1119dd119ed335b6d6e448290b56e0eeab6de25f.tar.gz
servo-1119dd119ed335b6d6e448290b56e0eeab6de25f.zip
Added off thread compilation
Co-authored-by: Gregory Terzian <2792687+gterzian@users.noreply.github.com> Co-authored-by: Abhishek Sharma <20724848+AbhishekSharma102@users.noreply.github.com>
Diffstat (limited to 'components/script/dom/bindings/trace.rs')
-rw-r--r--components/script/dom/bindings/trace.rs27
1 files changed, 25 insertions, 2 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 92d6ebcb7bf..a752b129a12 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -77,8 +77,10 @@ use hyper::Method;
use hyper::StatusCode;
use indexmap::IndexMap;
use ipc_channel::ipc::{IpcReceiver, IpcSender};
-use js::glue::{CallObjectTracer, CallStringTracer, CallValueTracer};
-use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSString, JSTracer, JobQueue, TraceKind};
+use js::glue::{CallObjectTracer, CallScriptTracer, CallStringTracer, CallValueTracer};
+use js::jsapi::{
+ GCTraceKindToAscii, Heap, JSObject, JSScript, JSString, JSTracer, JobQueue, TraceKind,
+};
use js::jsval::JSVal;
use js::rust::{GCMethods, Handle, Runtime};
use js::typedarray::TypedArray;
@@ -219,6 +221,18 @@ unsafe_no_jsmanaged_fields!(Cow<'static, str>);
unsafe_no_jsmanaged_fields!(CspList);
+/// Trace a `JSScript`.
+pub fn trace_script(tracer: *mut JSTracer, description: &str, script: &Heap<*mut JSScript>) {
+ unsafe {
+ trace!("tracing {}", description);
+ CallScriptTracer(
+ tracer,
+ script.ptr.get() as *mut _,
+ GCTraceKindToAscii(TraceKind::Script),
+ );
+ }
+}
+
/// Trace a `JSVal`.
pub fn trace_jsval(tracer: *mut JSTracer, description: &str, val: &Heap<JSVal>) {
unsafe {
@@ -328,6 +342,15 @@ unsafe impl<T: JSTraceable> JSTraceable for RefCell<T> {
}
}
+unsafe impl JSTraceable for Heap<*mut JSScript> {
+ unsafe fn trace(&self, trc: *mut JSTracer) {
+ if self.get().is_null() {
+ return;
+ }
+ trace_script(trc, "heap script", self);
+ }
+}
+
unsafe impl JSTraceable for Heap<*mut JSObject> {
unsafe fn trace(&self, trc: *mut JSTracer) {
if self.get().is_null() {