Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: test/unittests/heap/gc-idle-time-handler-unittest.cc

Issue 750813003: Use deadline in IdleNotification. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/heap/heap.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits> 5 #include <limits>
6 6
7 #include "src/heap/gc-idle-time-handler.h" 7 #include "src/heap/gc-idle-time-handler.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 size_t idle_time_in_ms = 1; 191 size_t idle_time_in_ms = 1;
192 EXPECT_FALSE(GCIdleTimeHandler::ShouldDoFinalIncrementalMarkCompact( 192 EXPECT_FALSE(GCIdleTimeHandler::ShouldDoFinalIncrementalMarkCompact(
193 idle_time_in_ms, kSizeOfObjects, kMarkingSpeed)); 193 idle_time_in_ms, kSizeOfObjects, kMarkingSpeed));
194 } 194 }
195 195
196 196
197 TEST_F(GCIdleTimeHandlerTest, ContextDisposeLowRate) { 197 TEST_F(GCIdleTimeHandlerTest, ContextDisposeLowRate) {
198 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 198 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
199 heap_state.contexts_disposed = 1; 199 heap_state.contexts_disposed = 1;
200 heap_state.incremental_marking_stopped = true; 200 heap_state.incremental_marking_stopped = true;
201 int idle_time_ms = 0; 201 double idle_time_ms = 0;
202 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 202 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
203 EXPECT_EQ(DO_NOTHING, action.type); 203 EXPECT_EQ(DO_NOTHING, action.type);
204 } 204 }
205 205
206 206
207 TEST_F(GCIdleTimeHandlerTest, ContextDisposeHighRate) { 207 TEST_F(GCIdleTimeHandlerTest, ContextDisposeHighRate) {
208 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 208 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
209 heap_state.contexts_disposed = 1; 209 heap_state.contexts_disposed = 1;
210 heap_state.contexts_disposal_rate = 210 heap_state.contexts_disposal_rate =
211 GCIdleTimeHandler::kHighContextDisposalRate - 1; 211 GCIdleTimeHandler::kHighContextDisposalRate - 1;
212 heap_state.incremental_marking_stopped = true; 212 heap_state.incremental_marking_stopped = true;
213 int idle_time_ms = 0; 213 double idle_time_ms = 0;
214 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 214 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
215 EXPECT_EQ(DO_FULL_GC, action.type); 215 EXPECT_EQ(DO_FULL_GC, action.type);
216 } 216 }
217 217
218 218
219 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeLargeIdleTime) { 219 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeLargeIdleTime) {
220 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 220 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
221 heap_state.contexts_disposed = 1; 221 heap_state.contexts_disposed = 1;
222 heap_state.contexts_disposal_rate = 1.0; 222 heap_state.contexts_disposal_rate = 1.0;
223 heap_state.incremental_marking_stopped = true; 223 heap_state.incremental_marking_stopped = true;
224 heap_state.can_start_incremental_marking = false; 224 heap_state.can_start_incremental_marking = false;
225 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms; 225 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms;
226 int idle_time_ms = 226 double idle_time_ms =
227 static_cast<int>((heap_state.size_of_objects + speed - 1) / speed); 227 static_cast<double>((heap_state.size_of_objects + speed - 1) / speed);
228 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 228 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
229 EXPECT_EQ(DO_FULL_GC, action.type); 229 EXPECT_EQ(DO_FULL_GC, action.type);
230 } 230 }
231 231
232 232
233 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeZeroIdleTime) { 233 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeZeroIdleTime) {
234 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 234 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
235 heap_state.contexts_disposed = 1; 235 heap_state.contexts_disposed = 1;
236 heap_state.contexts_disposal_rate = 1.0; 236 heap_state.contexts_disposal_rate = 1.0;
237 heap_state.incremental_marking_stopped = true; 237 heap_state.incremental_marking_stopped = true;
238 int idle_time_ms = 0; 238 double idle_time_ms = 0;
239 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 239 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
240 EXPECT_EQ(DO_FULL_GC, action.type); 240 EXPECT_EQ(DO_FULL_GC, action.type);
241 } 241 }
242 242
243 243
244 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeSmallIdleTime1) { 244 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeSmallIdleTime1) {
245 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 245 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
246 heap_state.contexts_disposed = 1; 246 heap_state.contexts_disposed = 1;
247 heap_state.contexts_disposal_rate = 1.0; 247 heap_state.contexts_disposal_rate = 1.0;
248 heap_state.incremental_marking_stopped = true; 248 heap_state.incremental_marking_stopped = true;
249 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms; 249 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms;
250 int idle_time_ms = static_cast<int>(heap_state.size_of_objects / speed - 1); 250 double idle_time_ms =
251 static_cast<double>(heap_state.size_of_objects / speed - 1);
251 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 252 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
252 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 253 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
253 } 254 }
254 255
255 256
256 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeSmallIdleTime2) { 257 TEST_F(GCIdleTimeHandlerTest, AfterContextDisposeSmallIdleTime2) {
257 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 258 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
258 heap_state.contexts_disposed = 1; 259 heap_state.contexts_disposed = 1;
259 heap_state.contexts_disposal_rate = 1.0; 260 heap_state.contexts_disposal_rate = 1.0;
260 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms; 261 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms;
261 int idle_time_ms = static_cast<int>(heap_state.size_of_objects / speed - 1); 262 double idle_time_ms =
263 static_cast<double>(heap_state.size_of_objects / speed - 1);
262 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 264 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
263 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 265 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
264 } 266 }
265 267
266 268
267 TEST_F(GCIdleTimeHandlerTest, IncrementalMarking1) { 269 TEST_F(GCIdleTimeHandlerTest, IncrementalMarking1) {
268 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 270 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
269 size_t speed = heap_state.incremental_marking_speed_in_bytes_per_ms; 271 size_t speed = heap_state.incremental_marking_speed_in_bytes_per_ms;
270 int idle_time_ms = 10; 272 double idle_time_ms = 10;
271 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 273 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
272 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 274 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
273 EXPECT_GT(speed * static_cast<size_t>(idle_time_ms), 275 EXPECT_GT(speed * static_cast<size_t>(idle_time_ms),
274 static_cast<size_t>(action.parameter)); 276 static_cast<size_t>(action.parameter));
275 EXPECT_LT(0, action.parameter); 277 EXPECT_LT(0, action.parameter);
276 } 278 }
277 279
278 280
279 TEST_F(GCIdleTimeHandlerTest, IncrementalMarking2) { 281 TEST_F(GCIdleTimeHandlerTest, IncrementalMarking2) {
280 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 282 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
281 heap_state.incremental_marking_stopped = true; 283 heap_state.incremental_marking_stopped = true;
282 size_t speed = heap_state.incremental_marking_speed_in_bytes_per_ms; 284 size_t speed = heap_state.incremental_marking_speed_in_bytes_per_ms;
283 int idle_time_ms = 10; 285 double idle_time_ms = 10;
284 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 286 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
285 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 287 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
286 EXPECT_GT(speed * static_cast<size_t>(idle_time_ms), 288 EXPECT_GT(speed * static_cast<size_t>(idle_time_ms),
287 static_cast<size_t>(action.parameter)); 289 static_cast<size_t>(action.parameter));
288 EXPECT_LT(0, action.parameter); 290 EXPECT_LT(0, action.parameter);
289 } 291 }
290 292
291 293
292 TEST_F(GCIdleTimeHandlerTest, NotEnoughTime) { 294 TEST_F(GCIdleTimeHandlerTest, NotEnoughTime) {
293 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 295 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
294 heap_state.incremental_marking_stopped = true; 296 heap_state.incremental_marking_stopped = true;
295 heap_state.can_start_incremental_marking = false; 297 heap_state.can_start_incremental_marking = false;
296 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms; 298 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms;
297 int idle_time_ms = static_cast<int>(heap_state.size_of_objects / speed - 1); 299 double idle_time_ms =
300 static_cast<double>(heap_state.size_of_objects / speed - 1);
298 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 301 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
299 EXPECT_EQ(DO_NOTHING, action.type); 302 EXPECT_EQ(DO_NOTHING, action.type);
300 } 303 }
301 304
302 305
303 TEST_F(GCIdleTimeHandlerTest, StopEventually1) { 306 TEST_F(GCIdleTimeHandlerTest, StopEventually1) {
304 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 307 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
305 heap_state.incremental_marking_stopped = true; 308 heap_state.incremental_marking_stopped = true;
306 heap_state.can_start_incremental_marking = false; 309 heap_state.can_start_incremental_marking = false;
307 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms; 310 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms;
308 int idle_time_ms = static_cast<int>(heap_state.size_of_objects / speed + 1); 311 double idle_time_ms =
312 static_cast<double>(heap_state.size_of_objects / speed + 1);
309 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) { 313 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) {
310 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 314 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
311 EXPECT_EQ(DO_FULL_GC, action.type); 315 EXPECT_EQ(DO_FULL_GC, action.type);
312 handler()->NotifyIdleMarkCompact(); 316 handler()->NotifyIdleMarkCompact();
313 } 317 }
314 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 318 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
315 EXPECT_EQ(DONE, action.type); 319 EXPECT_EQ(DONE, action.type);
316 } 320 }
317 321
318 322
319 TEST_F(GCIdleTimeHandlerTest, StopEventually2) { 323 TEST_F(GCIdleTimeHandlerTest, StopEventually2) {
320 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 324 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
321 int idle_time_ms = 10; 325 double idle_time_ms = 10;
322 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) { 326 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) {
323 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 327 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
324 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 328 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
325 // In this case we emulate incremental marking steps that finish with a 329 // In this case we emulate incremental marking steps that finish with a
326 // full gc. 330 // full gc.
327 handler()->NotifyIdleMarkCompact(); 331 handler()->NotifyIdleMarkCompact();
328 } 332 }
329 heap_state.can_start_incremental_marking = false; 333 heap_state.can_start_incremental_marking = false;
330 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 334 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
331 EXPECT_EQ(DONE, action.type); 335 EXPECT_EQ(DONE, action.type);
332 } 336 }
333 337
334 338
335 TEST_F(GCIdleTimeHandlerTest, ContinueAfterStop1) { 339 TEST_F(GCIdleTimeHandlerTest, ContinueAfterStop1) {
336 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 340 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
337 heap_state.incremental_marking_stopped = true; 341 heap_state.incremental_marking_stopped = true;
338 heap_state.can_start_incremental_marking = false; 342 heap_state.can_start_incremental_marking = false;
339 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms; 343 size_t speed = heap_state.mark_compact_speed_in_bytes_per_ms;
340 int idle_time_ms = static_cast<int>(heap_state.size_of_objects / speed + 1); 344 double idle_time_ms =
345 static_cast<double>(heap_state.size_of_objects / speed + 1);
341 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) { 346 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) {
342 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 347 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
343 EXPECT_EQ(DO_FULL_GC, action.type); 348 EXPECT_EQ(DO_FULL_GC, action.type);
344 handler()->NotifyIdleMarkCompact(); 349 handler()->NotifyIdleMarkCompact();
345 } 350 }
346 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 351 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
347 EXPECT_EQ(DONE, action.type); 352 EXPECT_EQ(DONE, action.type);
348 // Emulate mutator work. 353 // Emulate mutator work.
349 for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) { 354 for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) {
350 handler()->NotifyScavenge(); 355 handler()->NotifyScavenge();
351 } 356 }
352 action = handler()->Compute(idle_time_ms, heap_state); 357 action = handler()->Compute(idle_time_ms, heap_state);
353 EXPECT_EQ(DO_FULL_GC, action.type); 358 EXPECT_EQ(DO_FULL_GC, action.type);
354 } 359 }
355 360
356 361
357 TEST_F(GCIdleTimeHandlerTest, ContinueAfterStop2) { 362 TEST_F(GCIdleTimeHandlerTest, ContinueAfterStop2) {
358 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 363 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
359 int idle_time_ms = 10; 364 double idle_time_ms = 10;
360 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) { 365 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) {
361 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 366 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
362 if (action.type == DONE) break; 367 if (action.type == DONE) break;
363 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 368 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
364 // In this case we try to emulate incremental marking steps the finish with 369 // In this case we try to emulate incremental marking steps the finish with
365 // a full gc. 370 // a full gc.
366 handler()->NotifyIdleMarkCompact(); 371 handler()->NotifyIdleMarkCompact();
367 } 372 }
368 heap_state.can_start_incremental_marking = false; 373 heap_state.can_start_incremental_marking = false;
369 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 374 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
370 EXPECT_EQ(DONE, action.type); 375 EXPECT_EQ(DONE, action.type);
371 // Emulate mutator work. 376 // Emulate mutator work.
372 for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) { 377 for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) {
373 handler()->NotifyScavenge(); 378 handler()->NotifyScavenge();
374 } 379 }
375 heap_state.can_start_incremental_marking = true; 380 heap_state.can_start_incremental_marking = true;
376 action = handler()->Compute(idle_time_ms, heap_state); 381 action = handler()->Compute(idle_time_ms, heap_state);
377 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 382 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
378 } 383 }
379 384
380 385
381 TEST_F(GCIdleTimeHandlerTest, Scavenge) { 386 TEST_F(GCIdleTimeHandlerTest, Scavenge) {
382 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 387 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
383 int idle_time_ms = 10; 388 int idle_time_ms = 10;
384 heap_state.used_new_space_size = 389 heap_state.used_new_space_size =
385 heap_state.new_space_capacity - 390 heap_state.new_space_capacity -
386 (kNewSpaceAllocationThroughput * idle_time_ms); 391 (kNewSpaceAllocationThroughput * idle_time_ms);
387 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 392 GCIdleTimeAction action =
393 handler()->Compute(static_cast<double>(idle_time_ms), heap_state);
388 EXPECT_EQ(DO_SCAVENGE, action.type); 394 EXPECT_EQ(DO_SCAVENGE, action.type);
389 } 395 }
390 396
391 397
392 TEST_F(GCIdleTimeHandlerTest, ScavengeAndDone) { 398 TEST_F(GCIdleTimeHandlerTest, ScavengeAndDone) {
393 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 399 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
394 int idle_time_ms = 10; 400 int idle_time_ms = 10;
395 heap_state.can_start_incremental_marking = false; 401 heap_state.can_start_incremental_marking = false;
396 heap_state.incremental_marking_stopped = true; 402 heap_state.incremental_marking_stopped = true;
397 heap_state.used_new_space_size = 403 heap_state.used_new_space_size =
398 heap_state.new_space_capacity - 404 heap_state.new_space_capacity -
399 (kNewSpaceAllocationThroughput * idle_time_ms); 405 (kNewSpaceAllocationThroughput * idle_time_ms);
400 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 406 GCIdleTimeAction action =
407 handler()->Compute(static_cast<double>(idle_time_ms), heap_state);
401 EXPECT_EQ(DO_SCAVENGE, action.type); 408 EXPECT_EQ(DO_SCAVENGE, action.type);
402 heap_state.used_new_space_size = 0; 409 heap_state.used_new_space_size = 0;
403 action = handler()->Compute(idle_time_ms, heap_state); 410 action = handler()->Compute(static_cast<double>(idle_time_ms), heap_state);
404 EXPECT_EQ(DO_NOTHING, action.type); 411 EXPECT_EQ(DO_NOTHING, action.type);
405 } 412 }
406 413
407 414
408 TEST_F(GCIdleTimeHandlerTest, ZeroIdleTimeNothingToDo) { 415 TEST_F(GCIdleTimeHandlerTest, ZeroIdleTimeNothingToDo) {
409 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 416 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
410 int idle_time_ms = 0; 417 double idle_time_ms = 0;
411 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 418 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
412 EXPECT_EQ(DO_NOTHING, action.type); 419 EXPECT_EQ(DO_NOTHING, action.type);
413 } 420 }
414 421
415 422
416 TEST_F(GCIdleTimeHandlerTest, ZeroIdleTimeDoNothingButStartIdleRound) { 423 TEST_F(GCIdleTimeHandlerTest, ZeroIdleTimeDoNothingButStartIdleRound) {
417 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); 424 GCIdleTimeHandler::HeapState heap_state = DefaultHeapState();
418 int idle_time_ms = 10; 425 double idle_time_ms = 10;
419 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) { 426 for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) {
420 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 427 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
421 if (action.type == DONE) break; 428 if (action.type == DONE) break;
422 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); 429 EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type);
423 // In this case we try to emulate incremental marking steps the finish with 430 // In this case we try to emulate incremental marking steps the finish with
424 // a full gc. 431 // a full gc.
425 handler()->NotifyIdleMarkCompact(); 432 handler()->NotifyIdleMarkCompact();
426 } 433 }
427 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); 434 GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state);
428 // Emulate mutator work. 435 // Emulate mutator work.
429 for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) { 436 for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) {
430 handler()->NotifyScavenge(); 437 handler()->NotifyScavenge();
431 } 438 }
432 action = handler()->Compute(0, heap_state); 439 action = handler()->Compute(0, heap_state);
433 EXPECT_EQ(DO_NOTHING, action.type); 440 EXPECT_EQ(DO_NOTHING, action.type);
434 } 441 }
435 442
436 } // namespace internal 443 } // namespace internal
437 } // namespace v8 444 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698