// 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 or the MIT license // , 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 std::os::raw::c_int; #[allow(non_camel_case_types)] type size_t = usize; /// Obtains task_basic_info::virtual_size. pub fn virtual_size() -> Option { let mut virtual_size: size_t = 0; let rv = unsafe { TaskBasicInfoVirtualSize(&mut virtual_size) }; if rv == 0 { Some(virtual_size as usize) } else { None } } /// Obtains task_basic_info::resident_size. pub fn resident_size() -> Option { let mut resident_size: size_t = 0; let rv = unsafe { TaskBasicInfoResidentSize(&mut resident_size) }; if rv == 0 { Some(resident_size as usize) } else { None } } extern "C" { fn TaskBasicInfoVirtualSize(virtual_size: *mut size_t) -> c_int; fn TaskBasicInfoResidentSize(resident_size: *mut size_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); } }