Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a
task_info
crate and a task_basic_info
module within it.
The crate provides an interface to the Mac-specific `task_info()` function in general, and the module provides an interface to the TASK_BASIC_INFO flavor. Currently only the `virtual_size` and `resident_size` values of the `task_basic_info` struct are exposed, but there's obvious room for expansion. This is used to implement the -m measurements on Mac.
- Loading branch information
1 parent
f8fbf55
commit 24d3979
Showing
10 changed files
with
184 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.dummy | ||
|
||
libtask_info.dummy: task_info.rc $(RUST_SRC) libtask_info.a | ||
$(RUSTC) $(RUSTFLAGS) $< --out-dir . | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#!/bin/bash | ||
|
||
SRCDIR="$(cd $(dirname $0) && pwd)" | ||
sed "s#%VPATH%#${SRCDIR}#" ${SRCDIR}/Makefile.in > Makefile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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")] | ||
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); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// 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_id = "github.com/mozilla-servo/rust-task_info#task_info:0.1"] | ||
#![crate_type = "lib"] | ||
#![crate_type = "dylib"] | ||
#![crate_type = "rlib"] | ||
|
||
#![comment = "The Servo Parallel Browser Project"] | ||
#![license = "MPL"] | ||
|
||
#![feature(globs)] | ||
|
||
extern crate libc; | ||
|
||
pub mod task_basic_info; | ||
|