144 MarkSweepPolicy msp; 145 msp.initialize_all(); 146 147 ASSERT_EQ(param, msp.initial_young_size()); 148 } 149 }; 150 151 class SetOldSizeCmd : public UnaryExecutor { 152 public: 153 SetOldSizeCmd(size_t param) : UnaryExecutor(param) { } 154 void execute() { 155 FLAG_SET_CMDLINE(size_t, OldSize, param); 156 } 157 }; 158 159 class SetMaxNewSizeCmd : public BinaryExecutor { 160 public: 161 SetMaxNewSizeCmd(size_t param1, size_t param2) : BinaryExecutor(param1, param2) { } 162 void execute() { 163 size_t heap_alignment = CollectorPolicy::compute_heap_alignment(); 164 size_t new_size_value = align_size_up(MaxHeapSize, heap_alignment) 165 - param1 + param2; 166 FLAG_SET_CMDLINE(size_t, MaxNewSize, new_size_value); 167 } 168 }; 169 170 class CheckOldMin : public UnaryExecutor { 171 public: 172 CheckOldMin(size_t param) : UnaryExecutor(param) { } 173 void execute() { 174 MarkSweepPolicy msp; 175 msp.initialize_all(); 176 ASSERT_LE(msp.min_old_size(), param); 177 } 178 }; 179 180 class CheckOldInitial : public Executor { 181 public: 182 void execute() { 183 size_t heap_alignment = CollectorPolicy::compute_heap_alignment(); 184 185 MarkSweepPolicy msp; 186 msp.initialize_all(); 187 188 size_t expected_old_initial = align_size_up(InitialHeapSize, heap_alignment) 189 - MaxNewSize; 190 191 ASSERT_EQ(expected_old_initial, msp.initial_old_size()); 192 } 193 }; 194 195 class CheckOldInitialMaxNewSize : public BinaryExecutor { 196 public: 197 CheckOldInitialMaxNewSize(size_t param1, size_t param2) : BinaryExecutor(param1, param2) { } 198 void execute() { 199 size_t heap_alignment = CollectorPolicy::compute_heap_alignment(); 200 size_t new_size_value = align_size_up(MaxHeapSize, heap_alignment) 201 - param1 + param2; 202 203 MarkSweepPolicy msp; 204 msp.initialize_all(); 205 206 size_t expected_old_initial = align_size_up(MaxHeapSize, heap_alignment) 207 - new_size_value; 208 209 ASSERT_EQ(expected_old_initial, msp.initial_old_size()); 210 } 211 }; 212 }; 213 214 215 // Testing that the NewSize flag is handled correct is hard because it 216 // depends on so many other configurable variables. These tests only try to 217 // verify that there are some basic rules for NewSize honored by the policies. 218 219 // If NewSize has been ergonomically set, the collector policy 220 // should use it for min 221 TEST_VM(CollectorPolicy, young_min_ergo) { 222 TestGenCollectorPolicy::SetNewSizeErgo setter(20 * M); 223 TestGenCollectorPolicy::CheckYoungMin checker(20 * M); 224 225 TestGenCollectorPolicy::TestWrapper::test(&setter, &checker); 226 } | 144 MarkSweepPolicy msp; 145 msp.initialize_all(); 146 147 ASSERT_EQ(param, msp.initial_young_size()); 148 } 149 }; 150 151 class SetOldSizeCmd : public UnaryExecutor { 152 public: 153 SetOldSizeCmd(size_t param) : UnaryExecutor(param) { } 154 void execute() { 155 FLAG_SET_CMDLINE(size_t, OldSize, param); 156 } 157 }; 158 159 class SetMaxNewSizeCmd : public BinaryExecutor { 160 public: 161 SetMaxNewSizeCmd(size_t param1, size_t param2) : BinaryExecutor(param1, param2) { } 162 void execute() { 163 size_t heap_alignment = CollectorPolicy::compute_heap_alignment(); 164 size_t new_size_value = align_up(MaxHeapSize, heap_alignment) 165 - param1 + param2; 166 FLAG_SET_CMDLINE(size_t, MaxNewSize, new_size_value); 167 } 168 }; 169 170 class CheckOldMin : public UnaryExecutor { 171 public: 172 CheckOldMin(size_t param) : UnaryExecutor(param) { } 173 void execute() { 174 MarkSweepPolicy msp; 175 msp.initialize_all(); 176 ASSERT_LE(msp.min_old_size(), param); 177 } 178 }; 179 180 class CheckOldInitial : public Executor { 181 public: 182 void execute() { 183 size_t heap_alignment = CollectorPolicy::compute_heap_alignment(); 184 185 MarkSweepPolicy msp; 186 msp.initialize_all(); 187 188 size_t expected_old_initial = align_up(InitialHeapSize, heap_alignment) 189 - MaxNewSize; 190 191 ASSERT_EQ(expected_old_initial, msp.initial_old_size()); 192 } 193 }; 194 195 class CheckOldInitialMaxNewSize : public BinaryExecutor { 196 public: 197 CheckOldInitialMaxNewSize(size_t param1, size_t param2) : BinaryExecutor(param1, param2) { } 198 void execute() { 199 size_t heap_alignment = CollectorPolicy::compute_heap_alignment(); 200 size_t new_size_value = align_up(MaxHeapSize, heap_alignment) 201 - param1 + param2; 202 203 MarkSweepPolicy msp; 204 msp.initialize_all(); 205 206 size_t expected_old_initial = align_up(MaxHeapSize, heap_alignment) 207 - new_size_value; 208 209 ASSERT_EQ(expected_old_initial, msp.initial_old_size()); 210 } 211 }; 212 }; 213 214 215 // Testing that the NewSize flag is handled correct is hard because it 216 // depends on so many other configurable variables. These tests only try to 217 // verify that there are some basic rules for NewSize honored by the policies. 218 219 // If NewSize has been ergonomically set, the collector policy 220 // should use it for min 221 TEST_VM(CollectorPolicy, young_min_ergo) { 222 TestGenCollectorPolicy::SetNewSizeErgo setter(20 * M); 223 TestGenCollectorPolicy::CheckYoungMin checker(20 * M); 224 225 TestGenCollectorPolicy::TestWrapper::test(&setter, &checker); 226 } |