@@ -97,12 +97,17 @@ use std::time::{Duration, Instant};
97
97
use measureme:: { EventId , EventIdBuilder , SerializableString , StringId } ;
98
98
use parking_lot:: RwLock ;
99
99
100
- /// MmapSerializatioSink is faster on macOS and Linux
101
- /// but FileSerializationSink is faster on Windows
102
- #[ cfg( not( windows) ) ]
103
- type SerializationSink = measureme:: MmapSerializationSink ;
104
- #[ cfg( windows) ]
105
- type SerializationSink = measureme:: FileSerializationSink ;
100
+ cfg_if ! {
101
+ if #[ cfg( any( windows, target_os = "wasi" ) ) ] {
102
+ /// FileSerializationSink is faster on Windows
103
+ type SerializationSink = measureme:: FileSerializationSink ;
104
+ } else if #[ cfg( target_arch = "wasm32" ) ] {
105
+ type SerializationSink = measureme:: ByteVecSink ;
106
+ } else {
107
+ /// MmapSerializatioSink is faster on macOS and Linux
108
+ type SerializationSink = measureme:: MmapSerializationSink ;
109
+ }
110
+ }
106
111
107
112
type Profiler = measureme:: Profiler < SerializationSink > ;
108
113
@@ -602,31 +607,37 @@ pub fn duration_to_secs_str(dur: std::time::Duration) -> String {
602
607
}
603
608
604
609
// Memory reporting
605
- #[ cfg( unix) ]
606
- fn get_resident ( ) -> Option < usize > {
607
- let field = 1 ;
608
- let contents = fs:: read ( "/proc/self/statm" ) . ok ( ) ?;
609
- let contents = String :: from_utf8 ( contents) . ok ( ) ?;
610
- let s = contents. split_whitespace ( ) . nth ( field) ?;
611
- let npages = s. parse :: < usize > ( ) . ok ( ) ?;
612
- Some ( npages * 4096 )
613
- }
614
-
615
- #[ cfg( windows) ]
616
- fn get_resident ( ) -> Option < usize > {
617
- use std:: mem:: { self , MaybeUninit } ;
618
- use winapi:: shared:: minwindef:: DWORD ;
619
- use winapi:: um:: processthreadsapi:: GetCurrentProcess ;
620
- use winapi:: um:: psapi:: { GetProcessMemoryInfo , PROCESS_MEMORY_COUNTERS } ;
621
-
622
- let mut pmc = MaybeUninit :: < PROCESS_MEMORY_COUNTERS > :: uninit ( ) ;
623
- match unsafe {
624
- GetProcessMemoryInfo ( GetCurrentProcess ( ) , pmc. as_mut_ptr ( ) , mem:: size_of_val ( & pmc) as DWORD )
625
- } {
626
- 0 => None ,
627
- _ => {
628
- let pmc = unsafe { pmc. assume_init ( ) } ;
629
- Some ( pmc. WorkingSetSize as usize )
610
+ cfg_if ! {
611
+ if #[ cfg( windows) ] {
612
+ fn get_resident( ) -> Option <usize > {
613
+ use std:: mem:: { self , MaybeUninit } ;
614
+ use winapi:: shared:: minwindef:: DWORD ;
615
+ use winapi:: um:: processthreadsapi:: GetCurrentProcess ;
616
+ use winapi:: um:: psapi:: { GetProcessMemoryInfo , PROCESS_MEMORY_COUNTERS } ;
617
+
618
+ let mut pmc = MaybeUninit :: <PROCESS_MEMORY_COUNTERS >:: uninit( ) ;
619
+ match unsafe {
620
+ GetProcessMemoryInfo ( GetCurrentProcess ( ) , pmc. as_mut_ptr( ) , mem:: size_of_val( & pmc) as DWORD )
621
+ } {
622
+ 0 => None ,
623
+ _ => {
624
+ let pmc = unsafe { pmc. assume_init( ) } ;
625
+ Some ( pmc. WorkingSetSize as usize )
626
+ }
627
+ }
628
+ }
629
+ } else if #[ cfg( unix) ] {
630
+ fn get_resident( ) -> Option <usize > {
631
+ let field = 1 ;
632
+ let contents = fs:: read( "/proc/self/statm" ) . ok( ) ?;
633
+ let contents = String :: from_utf8( contents) . ok( ) ?;
634
+ let s = contents. split_whitespace( ) . nth( field) ?;
635
+ let npages = s. parse:: <usize >( ) . ok( ) ?;
636
+ Some ( npages * 4096 )
637
+ }
638
+ } else {
639
+ fn get_resident( ) -> Option <usize > {
640
+ None
630
641
}
631
642
}
632
643
}
0 commit comments