@@ -3,36 +3,43 @@ use std::fmt;
3
3
4
4
use cfg_if:: cfg_if;
5
5
6
+ #[ derive( Copy , Clone ) ]
6
7
pub struct MemoryUsage {
7
8
pub allocated : Bytes ,
8
- pub resident : Bytes ,
9
+ }
10
+
11
+ impl fmt:: Display for MemoryUsage {
12
+ fn fmt ( & self , fmt : & mut fmt:: Formatter ) -> fmt:: Result {
13
+ write ! ( fmt, "{}" , self . allocated)
14
+ }
15
+ }
16
+
17
+ impl std:: ops:: Sub for MemoryUsage {
18
+ type Output = MemoryUsage ;
19
+ fn sub ( self , rhs : MemoryUsage ) -> MemoryUsage {
20
+ MemoryUsage { allocated : self . allocated - rhs. allocated }
21
+ }
9
22
}
10
23
11
24
impl MemoryUsage {
12
25
pub fn current ( ) -> MemoryUsage {
13
26
cfg_if ! {
14
27
if #[ cfg( target_os = "linux" ) ] {
15
28
// Note: This is incredibly slow.
16
- let alloc = unsafe { libc:: mallinfo( ) } . uordblks as u32 as usize ;
17
- MemoryUsage { allocated: Bytes ( alloc) , resident : Bytes ( 0 ) }
29
+ let alloc = unsafe { libc:: mallinfo( ) } . uordblks as u32 as isize ;
30
+ MemoryUsage { allocated: Bytes ( alloc) }
18
31
} else {
19
- MemoryUsage { allocated: Bytes ( 0 ) , resident : Bytes ( 0 ) }
32
+ MemoryUsage { allocated: Bytes ( 0 ) }
20
33
}
21
34
}
22
35
}
23
36
}
24
37
25
- impl fmt:: Display for MemoryUsage {
26
- fn fmt ( & self , fmt : & mut fmt:: Formatter ) -> fmt:: Result {
27
- write ! ( fmt, "{} allocated {} resident" , self . allocated, self . resident, )
28
- }
29
- }
30
-
31
38
#[ derive( Default , PartialEq , Eq , PartialOrd , Ord , Hash , Clone , Copy ) ]
32
- pub struct Bytes ( usize ) ;
39
+ pub struct Bytes ( isize ) ;
33
40
34
41
impl Bytes {
35
- pub fn megabytes ( self ) -> usize {
42
+ pub fn megabytes ( self ) -> isize {
36
43
self . 0 / 1024 / 1024
37
44
}
38
45
}
@@ -42,10 +49,10 @@ impl fmt::Display for Bytes {
42
49
let bytes = self . 0 ;
43
50
let mut value = bytes;
44
51
let mut suffix = "b" ;
45
- if value > 4096 {
52
+ if value. abs ( ) > 4096 {
46
53
value /= 1024 ;
47
54
suffix = "kb" ;
48
- if value > 4096 {
55
+ if value. abs ( ) > 4096 {
49
56
value /= 1024 ;
50
57
suffix = "mb" ;
51
58
}
@@ -56,7 +63,7 @@ impl fmt::Display for Bytes {
56
63
57
64
impl std:: ops:: AddAssign < usize > for Bytes {
58
65
fn add_assign ( & mut self , x : usize ) {
59
- self . 0 += x;
66
+ self . 0 += x as isize ;
60
67
}
61
68
}
62
69
0 commit comments