aboutsummaryrefslogtreecommitdiffstats
path: root/support/rust-task_info/src
diff options
context:
space:
mode:
authorJack Moffitt <jack@metajack.im>2014-08-28 09:34:23 -0600
committerJack Moffitt <jack@metajack.im>2014-09-08 20:21:42 -0600
commitc6ab60dbfc6da7b4f800c9e40893c8b58413960c (patch)
treed1d74076cf7fa20e4f77ec7cb82cae98b67362cb /support/rust-task_info/src
parentdb2f642c32fc5bed445bb6f2e45b0f6f0b4342cf (diff)
downloadservo-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.rs22
-rw-r--r--support/rust-task_info/src/task_basic_info.rs55
-rw-r--r--support/rust-task_info/src/task_info.c39
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;
+}
+