summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/heap/gc-tracer-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/heap/gc-tracer-unittest.cc')
-rw-r--r--deps/v8/test/unittests/heap/gc-tracer-unittest.cc75
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