aboutsummaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
m---------support/glfw-rs0
-rw-r--r--support/rust-task_info/Cargo.toml7
-rw-r--r--support/rust-task_info/Makefile.in32
-rw-r--r--support/rust-task_info/makefile.cargo20
-rw-r--r--support/rust-task_info/src/lib.rs22
-rw-r--r--support/rust-task_info/src/task_basic_info.rs55
-rw-r--r--support/rust-task_info/src/task_info.c39
7 files changed, 175 insertions, 0 deletions
diff --git a/support/glfw-rs b/support/glfw-rs
new file mode 160000
+Subproject a646f0badaccaebd61d0f8aaec5646da0a7c2a1
diff --git a/support/rust-task_info/Cargo.toml b/support/rust-task_info/Cargo.toml
new file mode 100644
index 00000000000..16df934d054
--- /dev/null
+++ b/support/rust-task_info/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+
+name = "task_info"
+version = "0.0.1"
+authors = ["The Servo Project Developers"]
+
+build = "make -f makefile.cargo"
diff --git a/support/rust-task_info/Makefile.in b/support/rust-task_info/Makefile.in
new file mode 100644
index 00000000000..a844cdf6371
--- /dev/null
+++ b/support/rust-task_info/Makefile.in
@@ -0,0 +1,32 @@
+VPATH=%VPATH%
+
+CC ?= gcc
+RUSTC ?= rustc
+AR ?= ar
+RUSTFLAGS ?=
+CFLAGS += -Wall
+
+RUST_SRC = $(shell find $(VPATH)/. -type f -name '*.rs')
+
+.PHONY: all
+all: libtask_info-servo.dummy
+
+libtask_info-servo.dummy: task_info.rc $(RUST_SRC) libtask_info.a
+ $(RUSTC) $(RUSTFLAGS) $< --out-dir . -C extra-filename=-servo
+ touch $@
+
+task_info-test: task_info.rc $(RUST_SRC) libtask_info.a
+ $(RUSTC) $(RUSTFLAGS) $< -o $@ --test
+
+libtask_info.a: task_info.o
+ $(AR) rcs libtask_info.a task_info.o
+
+task_info.o: task_info.c
+ $(CC) $(CFLAGS) $< -o $@ -c
+
+check: task_info-test
+ ./task_info-test
+
+.PHONY: clean
+clean:
+ rm -f task_info-test *.a *.o *.so *.dylib *.rlib *.dll *.dummy task_info-test
diff --git a/support/rust-task_info/makefile.cargo b/support/rust-task_info/makefile.cargo
new file mode 100644
index 00000000000..01be6df7b4c
--- /dev/null
+++ b/support/rust-task_info/makefile.cargo
@@ -0,0 +1,20 @@
+CC ?= gcc
+AR ?= ar
+CFLAGS += -Wall
+
+.PHONY: all
+ifeq (darwin,$(findstring darwin,$(TARGET)))
+
+all: $(OUT_DIR)/libtask_info.a
+
+$(OUT_DIR)/libtask_info.a: $(OUT_DIR)/task_info.o
+ $(AR) rcs $@ $^
+
+$(OUT_DIR)/task_info.o: src/task_info.c
+ $(CC) $(CFLAGS) $< -o $@ -c
+
+else
+
+all:
+
+endif
diff --git a/support/rust-task_info/src/lib.rs b/support/rust-task_info/src/lib.rs
new file mode 100644
index 00000000000..1ecb18c252f
--- /dev/null
+++ b/support/rust-task_info/src/lib.rs
@@ -0,0 +1,22 @@
+// Copyright 2014 The Servo Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![crate_name = "task_info"]
+#![crate_type = "rlib"]
+
+#![comment = "The Servo Parallel Browser Project"]
+#![license = "MPL"]
+
+#![feature(globs)]
+
+extern crate libc;
+
+#[cfg(target_os="macos")]
+pub mod task_basic_info;
+
diff --git a/support/rust-task_info/src/task_basic_info.rs b/support/rust-task_info/src/task_basic_info.rs
new file mode 100644
index 00000000000..85fd84954ed
--- /dev/null
+++ b/support/rust-task_info/src/task_basic_info.rs
@@ -0,0 +1,55 @@
+// Copyright 2014 The Servo Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! Interface to the measurements in the task_basic_info struct, gathered by
+//! invoking `task_info()` with the `TASK_BASIC_INFO` flavor.
+
+use libc::{c_int,uint64_t};
+
+/// Obtains task_basic_info::virtual_size.
+pub fn virtual_size() -> Option<u64> {
+ let mut virtual_size: u64 = 0;
+ let mut rv;
+ unsafe {
+ rv = TaskBasicInfoVirtualSize(&mut virtual_size);
+ }
+ if rv == 0 { Some(virtual_size) } else { None }
+}
+
+/// Obtains task_basic_info::resident_size.
+pub fn resident_size() -> Option<u64> {
+ let mut resident_size: u64 = 0;
+ let mut rv;
+ unsafe {
+ rv = TaskBasicInfoResidentSize(&mut resident_size);
+ }
+ if rv == 0 { Some(resident_size) } else { None }
+}
+
+#[link(name = "task_info", kind = "static")]
+extern {
+ fn TaskBasicInfoVirtualSize(virtual_size: *mut uint64_t) -> c_int;
+ fn TaskBasicInfoResidentSize(resident_size: *mut uint64_t) -> c_int;
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_stuff() {
+ // In theory these can fail to return a value, but in practice they
+ // don't unless something really bizarre has happened with the OS. So
+ // assume they succeed. The returned values are non-deterministic, but
+ // check they're non-zero as a basic sanity test.
+ assert!(virtual_size().unwrap() > 0);
+ assert!(resident_size().unwrap() > 0);
+ }
+}
+
diff --git a/support/rust-task_info/src/task_info.c b/support/rust-task_info/src/task_info.c
new file mode 100644
index 00000000000..e8f59082609
--- /dev/null
+++ b/support/rust-task_info/src/task_info.c
@@ -0,0 +1,39 @@
+// Copyright 2013 The Servo Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#include <mach/mach_init.h>
+#include <mach/task.h>
+
+static int
+TaskBasicInfo(struct task_basic_info* info)
+{
+ mach_msg_type_number_t count = TASK_BASIC_INFO_COUNT;
+ kern_return_t kr = task_info(mach_task_self(), TASK_BASIC_INFO,
+ (task_info_t)info, &count);
+ return kr == KERN_SUCCESS ? 0 : -1;
+}
+
+int
+TaskBasicInfoVirtualSize(int64_t *virtualSize)
+{
+ struct task_basic_info ti;
+ int rv = TaskBasicInfo(&ti);
+ *virtualSize = (rv == 0) ? ti.virtual_size : 0;
+ return rv;
+}
+
+int
+TaskBasicInfoResidentSize(int64_t *residentSize)
+{
+ struct task_basic_info ti;
+ int rv = TaskBasicInfo(&ti);
+ *residentSize = (rv == 0) ? ti.resident_size : 0;
+ return rv;
+}
+