"pretenure with allocation sites")
DEFINE_bool(trace_pretenuring, false,
"trace pretenuring decisions of HAllocate instructions")
+DEFINE_bool(trace_pretenuring_statistics, false,
+ "trace allocation site pretenuring statistics")
DEFINE_bool(track_fields, true, "track fields with only smi values")
DEFINE_bool(track_double_fields, true, "track fields with double values")
DEFINE_bool(track_heap_object_fields, true, "track fields with heap values")
allocation_sites_scratchpad_length = 0;
- // TODO(mvstanton): Pretenure decisions are only made once for an allocation
- // site. Find a sane way to decide about revisiting the decision later.
-
- if (FLAG_trace_track_allocation_sites &&
+ if (FLAG_trace_pretenuring_statistics &&
(allocation_mementos_found > 0 ||
tenure_decisions > 0 ||
dont_tenure_decisions > 0)) {
inline bool AllocationSite::DigestPretenuringFeedback() {
bool decision_changed = false;
int create_count = memento_create_count();
+ int found_count = memento_found_count();
+ double ratio = static_cast<double>(found_count) / create_count;
+ PretenureFlag current_mode = GetPretenureMode();
+
if (create_count >= kPretenureMinimumCreated) {
- int found_count = memento_found_count();
- double ratio = static_cast<double>(found_count) / create_count;
- if (FLAG_trace_track_allocation_sites) {
- PrintF("AllocationSite: %p (created, found, ratio) (%d, %d, %f)\n",
- static_cast<void*>(this), create_count, found_count, ratio);
- }
- int current_mode = GetPretenureMode();
PretenureDecision result = ratio >= kPretenureRatio
? kTenure
: kDontTenure;
}
}
+ if (FLAG_trace_pretenuring_statistics) {
+ PrintF(
+ "AllocationSite(%p): (created, found, ratio) (%d, %d, %f) %s => %s\n",
+ static_cast<void*>(this), create_count, found_count, ratio,
+ current_mode == TENURED ? "tenured" : "not tenured",
+ GetPretenureMode() == TENURED ? "tenured" : "not tenured");
+ }
+
// Clear feedback calculation fields until the next gc.
set_memento_found_count(0);
set_memento_create_count(0);