diff options
Diffstat (limited to 'support')
m--------- | support/glfw-rs | 0 | ||||
-rw-r--r-- | support/rust-task_info/Cargo.toml | 7 | ||||
-rw-r--r-- | support/rust-task_info/Makefile.in | 32 | ||||
-rw-r--r-- | support/rust-task_info/makefile.cargo | 20 | ||||
-rw-r--r-- | support/rust-task_info/src/lib.rs | 22 | ||||
-rw-r--r-- | support/rust-task_info/src/task_basic_info.rs | 55 | ||||
-rw-r--r-- | support/rust-task_info/src/task_info.c | 39 |
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; +} + |