@@ -77,6 +77,20 @@ fn mmtk_builder_default_parse_heap_max() -> usize {
77
77
size
78
78
}
79
79
80
+ fn mmtk_builder_default_parse_heap_mode ( heap_min : usize , heap_max : usize ) -> GCTriggerSelector {
81
+ let heap_mode_str = std:: env:: var ( "MMTK_HEAP_MODE" )
82
+ . unwrap_or ( "dynamic" . to_string ( ) ) ;
83
+
84
+ match heap_mode_str. as_str ( ) {
85
+ "fixed" => GCTriggerSelector :: FixedHeapSize ( heap_max) ,
86
+ "dynamic" => GCTriggerSelector :: DynamicHeapSize ( heap_min, heap_max) ,
87
+ _ => {
88
+ eprintln ! ( "[FATAL] Invalid MMTK_HEAP_MODE {}" , heap_mode_str) ;
89
+ std:: process:: exit ( 1 ) ;
90
+ }
91
+ }
92
+ }
93
+
80
94
#[ no_mangle]
81
95
pub extern "C" fn mmtk_builder_default ( ) -> * mut MMTKBuilder {
82
96
let mut builder = MMTKBuilder :: new_no_env_vars ( ) ;
@@ -96,10 +110,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
96
110
std:: process:: exit ( 1 ) ;
97
111
}
98
112
99
- let mmtk_mode = match std:: env:: var ( "MMTK_HEAP_MODE" ) {
100
- Ok ( mode) if ( mode == "fixed" ) => GCTriggerSelector :: FixedHeapSize ( heap_max) ,
101
- Ok ( _) | Err ( _) => GCTriggerSelector :: DynamicHeapSize ( heap_min, heap_max)
102
- } ;
113
+ let heap_mode = mmtk_builder_default_parse_heap_mode ( heap_min, heap_max) ;
103
114
104
115
// Parse the env var, if it's not found set the plan name to MarkSweep
105
116
let plan_name = std:: env:: var ( "MMTK_PLAN" )
@@ -111,9 +122,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
111
122
112
123
builder. options . plan . set ( plan_selector) ;
113
124
114
- // Between 1MiB and 500MiB
115
- builder. options . gc_trigger . set ( mmtk_mode) ;
116
-
125
+ builder. options . gc_trigger . set ( heap_mode) ;
117
126
118
127
Box :: into_raw ( Box :: new ( builder) )
119
128
}
0 commit comments