diff options
Diffstat (limited to 'deps/v8/test/unittests/heap/gc-tracer-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/heap/gc-tracer-unittest.cc | 75 |
1 files changed, 67 insertions, 8 deletions
diff --git a/deps/v8/test/unittests/heap/gc-tracer-unittest.cc b/deps/v8/test/unittests/heap/gc-tracer-unittest.cc index 84e4d973e2..677da0eb0b 100644 --- a/deps/v8/test/unittests/heap/gc-tracer-unittest.cc +++ b/deps/v8/test/unittests/heap/gc-tracer-unittest.cc @@ -160,7 +160,8 @@ TEST_F(GCTracerTest, RegularScope) { EXPECT_DOUBLE_EQ(0.0, tracer->current_.scopes[GCTracer::Scope::MC_MARK]); // Sample not added because it's not within a started tracer. tracer->AddScopeSample(GCTracer::Scope::MC_MARK, 100); - tracer->Start(MARK_COMPACTOR, "gc unittest", "collector unittest"); + tracer->Start(MARK_COMPACTOR, GarbageCollectionReason::kTesting, + "collector unittest"); tracer->AddScopeSample(GCTracer::Scope::MC_MARK, 100); tracer->Stop(MARK_COMPACTOR); EXPECT_DOUBLE_EQ(100.0, tracer->current_.scopes[GCTracer::Scope::MC_MARK]); @@ -174,7 +175,8 @@ TEST_F(GCTracerTest, IncrementalScope) { 0.0, tracer->current_.scopes[GCTracer::Scope::MC_INCREMENTAL_FINALIZE]); // Sample is added because its ScopeId is listed as incremental sample. tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 100); - tracer->Start(MARK_COMPACTOR, "gc unittest", "collector unittest"); + tracer->Start(MARK_COMPACTOR, GarbageCollectionReason::kTesting, + "collector unittest"); // Switch to incremental MC to enable writing back incremental scopes. tracer->current_.type = GCTracer::Event::INCREMENTAL_MARK_COMPACTOR; tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 100); @@ -189,7 +191,12 @@ TEST_F(GCTracerTest, IncrementalMarkingDetails) { // Round 1. tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 50); - tracer->Start(MARK_COMPACTOR, "gc unittest", "collector unittest"); + // Scavenger has no impact on incremental marking details. + tracer->Start(SCAVENGER, GarbageCollectionReason::kTesting, + "collector unittest"); + tracer->Stop(SCAVENGER); + tracer->Start(MARK_COMPACTOR, GarbageCollectionReason::kTesting, + "collector unittest"); // Switch to incremental MC to enable writing back incremental scopes. tracer->current_.type = GCTracer::Event::INCREMENTAL_MARK_COMPACTOR; tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 100); @@ -208,12 +215,13 @@ TEST_F(GCTracerTest, IncrementalMarkingDetails) { 150, tracer->current_ .incremental_marking_scopes[GCTracer::Scope::MC_INCREMENTAL_FINALIZE] - .cumulative_duration); + .duration); - // Round 2. Cumulative numbers should add up, others should be reset. + // Round 2. Numbers should be reset. tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 13); tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 15); - tracer->Start(MARK_COMPACTOR, "gc unittest", "collector unittest"); + tracer->Start(MARK_COMPACTOR, GarbageCollectionReason::kTesting, + "collector unittest"); // Switch to incremental MC to enable writing back incremental scopes. tracer->current_.type = GCTracer::Event::INCREMENTAL_MARK_COMPACTOR; tracer->AddScopeSample(GCTracer::Scope::MC_INCREMENTAL_FINALIZE, 122); @@ -229,10 +237,61 @@ TEST_F(GCTracerTest, IncrementalMarkingDetails) { .incremental_marking_scopes[GCTracer::Scope::MC_INCREMENTAL_FINALIZE] .steps); EXPECT_DOUBLE_EQ( - 300, + 150, tracer->current_ .incremental_marking_scopes[GCTracer::Scope::MC_INCREMENTAL_FINALIZE] - .cumulative_duration); + .duration); +} + +TEST_F(GCTracerTest, IncrementalMarkingSpeed) { + GCTracer* tracer = i_isolate()->heap()->tracer(); + tracer->ResetForTesting(); + + // Round 1. + // 1000000 bytes in 100ms. + tracer->AddIncrementalMarkingStep(100, 1000000); + EXPECT_EQ(1000000 / 100, + tracer->IncrementalMarkingSpeedInBytesPerMillisecond()); + // 1000000 bytes in 100ms. + tracer->AddIncrementalMarkingStep(100, 1000000); + EXPECT_EQ(1000000 / 100, + tracer->IncrementalMarkingSpeedInBytesPerMillisecond()); + // Scavenger has no impact on incremental marking details. + tracer->Start(SCAVENGER, GarbageCollectionReason::kTesting, + "collector unittest"); + tracer->Stop(SCAVENGER); + // 1000000 bytes in 100ms. + tracer->AddIncrementalMarkingStep(100, 1000000); + EXPECT_EQ(300, tracer->incremental_marking_duration_); + EXPECT_EQ(3000000, tracer->incremental_marking_bytes_); + EXPECT_EQ(1000000 / 100, + tracer->IncrementalMarkingSpeedInBytesPerMillisecond()); + tracer->Start(MARK_COMPACTOR, GarbageCollectionReason::kTesting, + "collector unittest"); + // Switch to incremental MC. + tracer->current_.type = GCTracer::Event::INCREMENTAL_MARK_COMPACTOR; + // 1000000 bytes in 100ms. + tracer->AddIncrementalMarkingStep(100, 1000000); + EXPECT_EQ(400, tracer->incremental_marking_duration_); + EXPECT_EQ(4000000, tracer->incremental_marking_bytes_); + tracer->Stop(MARK_COMPACTOR); + EXPECT_EQ(400, tracer->current_.incremental_marking_duration); + EXPECT_EQ(4000000, tracer->current_.incremental_marking_bytes); + EXPECT_EQ(0, tracer->incremental_marking_duration_); + EXPECT_EQ(0, tracer->incremental_marking_bytes_); + EXPECT_EQ(1000000 / 100, + tracer->IncrementalMarkingSpeedInBytesPerMillisecond()); + + // Round 2. + tracer->AddIncrementalMarkingStep(2000, 1000); + tracer->Start(MARK_COMPACTOR, GarbageCollectionReason::kTesting, + "collector unittest"); + // Switch to incremental MC. + tracer->current_.type = GCTracer::Event::INCREMENTAL_MARK_COMPACTOR; + tracer->Stop(MARK_COMPACTOR); + EXPECT_DOUBLE_EQ((4000000.0 / 400 + 1000.0 / 2000) / 2, + static_cast<double>( + tracer->IncrementalMarkingSpeedInBytesPerMillisecond())); } } // namespace internal |