diff options
author | Jack Moffitt <jack@metajack.im> | 2014-08-28 09:34:23 -0600 |
---|---|---|
committer | Jack Moffitt <jack@metajack.im> | 2014-09-08 20:21:42 -0600 |
commit | c6ab60dbfc6da7b4f800c9e40893c8b58413960c (patch) | |
tree | d1d74076cf7fa20e4f77ec7cb82cae98b67362cb /support/rust-task_info/src | |
parent | db2f642c32fc5bed445bb6f2e45b0f6f0b4342cf (diff) | |
download | servo-c6ab60dbfc6da7b4f800c9e40893c8b58413960c.tar.gz servo-c6ab60dbfc6da7b4f800c9e40893c8b58413960c.zip |
Cargoify servo
Diffstat (limited to 'support/rust-task_info/src')
-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 |
3 files changed, 116 insertions, 0 deletions
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; +} + |