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

Side by Side Diff: src/heap/heap.cc

Issue 1841043002: Represent speed in GCTracer functions as double instead of int. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 months 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/gc-tracer.cc ('k') | src/heap/incremental-marking.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 "src/heap/heap.h" 5 #include "src/heap/heap.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/ast/scopeinfo.h" 9 #include "src/ast/scopeinfo.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1347 collector, gc_callback_flags); 1347 collector, gc_callback_flags);
1348 } 1348 }
1349 gc_post_processing_depth_--; 1349 gc_post_processing_depth_--;
1350 1350
1351 isolate_->eternal_handles()->PostGarbageCollectionProcessing(this); 1351 isolate_->eternal_handles()->PostGarbageCollectionProcessing(this);
1352 1352
1353 // Update relocatables. 1353 // Update relocatables.
1354 Relocatable::PostGarbageCollectionProcessing(isolate_); 1354 Relocatable::PostGarbageCollectionProcessing(isolate_);
1355 1355
1356 double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond(); 1356 double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
1357 double mutator_speed = static_cast<double>( 1357 double mutator_speed =
1358 tracer() 1358 tracer()->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond();
1359 ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
1360 intptr_t old_gen_size = PromotedSpaceSizeOfObjects(); 1359 intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
1361 if (collector == MARK_COMPACTOR) { 1360 if (collector == MARK_COMPACTOR) {
1362 // Register the amount of external allocated memory. 1361 // Register the amount of external allocated memory.
1363 amount_of_external_allocated_memory_at_last_global_gc_ = 1362 amount_of_external_allocated_memory_at_last_global_gc_ =
1364 amount_of_external_allocated_memory_; 1363 amount_of_external_allocated_memory_;
1365 SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed); 1364 SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
1366 } else if (HasLowYoungGenerationAllocationRate() && 1365 } else if (HasLowYoungGenerationAllocationRate() &&
1367 old_generation_size_configured_) { 1366 old_generation_size_configured_) {
1368 DampenOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed); 1367 DampenOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
1369 } 1368 }
(...skipping 2758 matching lines...) Expand 10 before | Expand all | Expand 10 after
4128 // mutator_utilization = (1 / mutator_speed) / 4127 // mutator_utilization = (1 / mutator_speed) /
4129 // (1 / mutator_speed + 1 / gc_speed) 4128 // (1 / mutator_speed + 1 / gc_speed)
4130 // mutator_utilization = gc_speed / (mutator_speed + gc_speed) 4129 // mutator_utilization = gc_speed / (mutator_speed + gc_speed)
4131 return gc_speed / (mutator_speed + gc_speed); 4130 return gc_speed / (mutator_speed + gc_speed);
4132 } 4131 }
4133 4132
4134 4133
4135 double Heap::YoungGenerationMutatorUtilization() { 4134 double Heap::YoungGenerationMutatorUtilization() {
4136 double mutator_speed = static_cast<double>( 4135 double mutator_speed = static_cast<double>(
4137 tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond()); 4136 tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond());
4138 double gc_speed = static_cast<double>( 4137 double gc_speed =
4139 tracer()->ScavengeSpeedInBytesPerMillisecond(kForSurvivedObjects)); 4138 tracer()->ScavengeSpeedInBytesPerMillisecond(kForSurvivedObjects);
4140 double result = ComputeMutatorUtilization(mutator_speed, gc_speed); 4139 double result = ComputeMutatorUtilization(mutator_speed, gc_speed);
4141 if (FLAG_trace_mutator_utilization) { 4140 if (FLAG_trace_mutator_utilization) {
4142 PrintIsolate(isolate(), 4141 PrintIsolate(isolate(),
4143 "Young generation mutator utilization = %.3f (" 4142 "Young generation mutator utilization = %.3f ("
4144 "mutator_speed=%.f, gc_speed=%.f)\n", 4143 "mutator_speed=%.f, gc_speed=%.f)\n",
4145 result, mutator_speed, gc_speed); 4144 result, mutator_speed, gc_speed);
4146 } 4145 }
4147 return result; 4146 return result;
4148 } 4147 }
4149 4148
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
4208 event.time_ms = MonotonicallyIncreasingTimeInMs(); 4207 event.time_ms = MonotonicallyIncreasingTimeInMs();
4209 memory_reducer_->NotifyPossibleGarbage(event); 4208 memory_reducer_->NotifyPossibleGarbage(event);
4210 } 4209 }
4211 optimize_for_memory_usage_ = true; 4210 optimize_for_memory_usage_ = true;
4212 } 4211 }
4213 4212
4214 void Heap::ReduceNewSpaceSize() { 4213 void Heap::ReduceNewSpaceSize() {
4215 // TODO(ulan): Unify this constant with the similar constant in 4214 // TODO(ulan): Unify this constant with the similar constant in
4216 // GCIdleTimeHandler once the change is merged to 4.5. 4215 // GCIdleTimeHandler once the change is merged to 4.5.
4217 static const size_t kLowAllocationThroughput = 1000; 4216 static const size_t kLowAllocationThroughput = 1000;
4218 const size_t allocation_throughput = 4217 const double allocation_throughput =
4219 tracer()->CurrentAllocationThroughputInBytesPerMillisecond(); 4218 tracer()->CurrentAllocationThroughputInBytesPerMillisecond();
4220 4219
4221 if (FLAG_predictable) return; 4220 if (FLAG_predictable) return;
4222 4221
4223 if (ShouldReduceMemory() || 4222 if (ShouldReduceMemory() ||
4224 ((allocation_throughput != 0) && 4223 ((allocation_throughput != 0) &&
4225 (allocation_throughput < kLowAllocationThroughput))) { 4224 (allocation_throughput < kLowAllocationThroughput))) {
4226 new_space_.Shrink(); 4225 new_space_.Shrink();
4227 UncommitFromSpace(); 4226 UncommitFromSpace();
4228 } 4227 }
4229 } 4228 }
4230 4229
4231 4230
4232 void Heap::FinalizeIncrementalMarkingIfComplete(const char* comment) { 4231 void Heap::FinalizeIncrementalMarkingIfComplete(const char* comment) {
4233 if (incremental_marking()->IsMarking() && 4232 if (incremental_marking()->IsMarking() &&
4234 (incremental_marking()->IsReadyToOverApproximateWeakClosure() || 4233 (incremental_marking()->IsReadyToOverApproximateWeakClosure() ||
4235 (!incremental_marking()->finalize_marking_completed() && 4234 (!incremental_marking()->finalize_marking_completed() &&
4236 mark_compact_collector()->marking_deque()->IsEmpty()))) { 4235 mark_compact_collector()->marking_deque()->IsEmpty()))) {
4237 FinalizeIncrementalMarking(comment); 4236 FinalizeIncrementalMarking(comment);
4238 } else if (incremental_marking()->IsComplete() || 4237 } else if (incremental_marking()->IsComplete() ||
4239 (mark_compact_collector()->marking_deque()->IsEmpty())) { 4238 (mark_compact_collector()->marking_deque()->IsEmpty())) {
4240 CollectAllGarbage(current_gc_flags_, comment); 4239 CollectAllGarbage(current_gc_flags_, comment);
4241 } 4240 }
4242 } 4241 }
4243 4242
4244 4243
4245 bool Heap::TryFinalizeIdleIncrementalMarking(double idle_time_in_ms) { 4244 bool Heap::TryFinalizeIdleIncrementalMarking(double idle_time_in_ms) {
4246 size_t size_of_objects = static_cast<size_t>(SizeOfObjects()); 4245 size_t size_of_objects = static_cast<size_t>(SizeOfObjects());
4247 size_t final_incremental_mark_compact_speed_in_bytes_per_ms = 4246 double final_incremental_mark_compact_speed_in_bytes_per_ms =
4248 static_cast<size_t>( 4247 tracer()->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond();
4249 tracer()->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond());
4250 if (incremental_marking()->IsReadyToOverApproximateWeakClosure() || 4248 if (incremental_marking()->IsReadyToOverApproximateWeakClosure() ||
4251 (!incremental_marking()->finalize_marking_completed() && 4249 (!incremental_marking()->finalize_marking_completed() &&
4252 mark_compact_collector()->marking_deque()->IsEmpty() && 4250 mark_compact_collector()->marking_deque()->IsEmpty() &&
4253 gc_idle_time_handler_->ShouldDoOverApproximateWeakClosure( 4251 gc_idle_time_handler_->ShouldDoOverApproximateWeakClosure(
4254 static_cast<size_t>(idle_time_in_ms)))) { 4252 idle_time_in_ms))) {
4255 FinalizeIncrementalMarking( 4253 FinalizeIncrementalMarking(
4256 "Idle notification: finalize incremental marking"); 4254 "Idle notification: finalize incremental marking");
4257 return true; 4255 return true;
4258 } else if (incremental_marking()->IsComplete() || 4256 } else if (incremental_marking()->IsComplete() ||
4259 (mark_compact_collector()->marking_deque()->IsEmpty() && 4257 (mark_compact_collector()->marking_deque()->IsEmpty() &&
4260 gc_idle_time_handler_->ShouldDoFinalIncrementalMarkCompact( 4258 gc_idle_time_handler_->ShouldDoFinalIncrementalMarkCompact(
4261 static_cast<size_t>(idle_time_in_ms), size_of_objects, 4259 idle_time_in_ms, size_of_objects,
4262 final_incremental_mark_compact_speed_in_bytes_per_ms))) { 4260 final_incremental_mark_compact_speed_in_bytes_per_ms))) {
4263 CollectAllGarbage(current_gc_flags_, 4261 CollectAllGarbage(current_gc_flags_,
4264 "idle notification: finalize incremental marking"); 4262 "idle notification: finalize incremental marking");
4265 return true; 4263 return true;
4266 } 4264 }
4267 return false; 4265 return false;
4268 } 4266 }
4269 4267
4270 void Heap::RegisterReservationsForBlackAllocation(Reservation* reservations) { 4268 void Heap::RegisterReservationsForBlackAllocation(Reservation* reservations) {
4271 // TODO(hpayer): We do not have to iterate reservations on black objects 4269 // TODO(hpayer): We do not have to iterate reservations on black objects
(...skipping 2201 matching lines...) Expand 10 before | Expand all | Expand 10 after
6473 } 6471 }
6474 6472
6475 6473
6476 // static 6474 // static
6477 int Heap::GetStaticVisitorIdForMap(Map* map) { 6475 int Heap::GetStaticVisitorIdForMap(Map* map) {
6478 return StaticVisitorBase::GetVisitorId(map); 6476 return StaticVisitorBase::GetVisitorId(map);
6479 } 6477 }
6480 6478
6481 } // namespace internal 6479 } // namespace internal
6482 } // namespace v8 6480 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | src/heap/incremental-marking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698