@@ -860,6 +860,7 @@ fn get_thread_id() -> u32 {
860
860
}
861
861
862
862
// Memory reporting
863
+ #[ cfg( bootstrap) ]
863
864
cfg_match ! {
864
865
cfg( windows) => {
865
866
pub fn get_resident_set_size( ) -> Option <usize > {
@@ -921,5 +922,67 @@ cfg_match! {
921
922
}
922
923
}
923
924
925
+ #[ cfg( not( bootstrap) ) ]
926
+ cfg_match ! {
927
+ windows => {
928
+ pub fn get_resident_set_size( ) -> Option <usize > {
929
+ use std:: mem;
930
+
931
+ use windows:: {
932
+ Win32 :: System :: ProcessStatus :: { K32GetProcessMemoryInfo , PROCESS_MEMORY_COUNTERS } ,
933
+ Win32 :: System :: Threading :: GetCurrentProcess ,
934
+ } ;
935
+
936
+ let mut pmc = PROCESS_MEMORY_COUNTERS :: default ( ) ;
937
+ let pmc_size = mem:: size_of_val( & pmc) ;
938
+ unsafe {
939
+ K32GetProcessMemoryInfo (
940
+ GetCurrentProcess ( ) ,
941
+ & mut pmc,
942
+ pmc_size as u32 ,
943
+ )
944
+ }
945
+ . ok( )
946
+ . ok( ) ?;
947
+
948
+ Some ( pmc. WorkingSetSize )
949
+ }
950
+ }
951
+ target_os = "macos" => {
952
+ pub fn get_resident_set_size( ) -> Option <usize > {
953
+ use libc:: { c_int, c_void, getpid, proc_pidinfo, proc_taskinfo, PROC_PIDTASKINFO } ;
954
+ use std:: mem;
955
+ const PROC_TASKINFO_SIZE : c_int = mem:: size_of:: <proc_taskinfo>( ) as c_int;
956
+
957
+ unsafe {
958
+ let mut info: proc_taskinfo = mem:: zeroed( ) ;
959
+ let info_ptr = & mut info as * mut proc_taskinfo as * mut c_void;
960
+ let pid = getpid( ) as c_int;
961
+ let ret = proc_pidinfo( pid, PROC_PIDTASKINFO , 0 , info_ptr, PROC_TASKINFO_SIZE ) ;
962
+ if ret == PROC_TASKINFO_SIZE {
963
+ Some ( info. pti_resident_size as usize )
964
+ } else {
965
+ None
966
+ }
967
+ }
968
+ }
969
+ }
970
+ unix => {
971
+ pub fn get_resident_set_size( ) -> Option <usize > {
972
+ let field = 1 ;
973
+ let contents = fs:: read( "/proc/self/statm" ) . ok( ) ?;
974
+ let contents = String :: from_utf8( contents) . ok( ) ?;
975
+ let s = contents. split_whitespace( ) . nth( field) ?;
976
+ let npages = s. parse:: <usize >( ) . ok( ) ?;
977
+ Some ( npages * 4096 )
978
+ }
979
+ }
980
+ _ => {
981
+ pub fn get_resident_set_size( ) -> Option <usize > {
982
+ None
983
+ }
984
+ }
985
+ }
986
+
924
987
#[ cfg( test) ]
925
988
mod tests;
0 commit comments