Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 944bfa6232ee9d5704d2b5c3b587c41727bb9f00..ba6cb86ee3b786ccf700b82c4cc62816aabd8ace 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -10619,12 +10619,25 @@ void Code::MarkCodeAsExecuted(byte* sequence, Isolate* isolate) { |
} |
+static Code::Age EffectiveAge(Code::Age age) { |
+ if (age == Code::kNotExecutedCodeAge) { |
+ // Treat that's never been executed as old immediately. |
+ age = Code::kIsOldCodeAge; |
+ } else if (age == Code::kExecutedOnceCodeAge) { |
Michael Starzinger
2013/11/04 12:28:28
nit: Only one white-space after "if".
rmcilroy
2013/11/05 13:44:57
Done.
|
+ // Pre-age code that has only been executed once. |
+ age = Code::kPreAgedCodeAge; |
+ } |
+ return age; |
+} |
+ |
+ |
void Code::MakeOlder(MarkingParity current_parity) { |
byte* sequence = FindCodeAgeSequence(); |
if (sequence != NULL) { |
Age age; |
MarkingParity code_parity; |
GetCodeAgeAndParity(sequence, &age, &code_parity); |
+ age = EffectiveAge(age); |
if (age != kLastCodeAge && code_parity != current_parity) { |
PatchPlatformCodeAge(GetIsolate(), |
sequence, |
@@ -10636,8 +10649,7 @@ void Code::MakeOlder(MarkingParity current_parity) { |
bool Code::IsOld() { |
- Age age = GetAge(); |
- return age >= kIsOldCodeAge; |
+ return GetAge() >= kIsOldCodeAge; |
} |
@@ -10652,9 +10664,14 @@ byte* Code::FindCodeAgeSequence() { |
Code::Age Code::GetAge() { |
+ return EffectiveAge(GetRawAge()); |
+} |
+ |
+ |
+Code::Age Code::GetRawAge() { |
byte* sequence = FindCodeAgeSequence(); |
if (sequence == NULL) { |
- return Code::kNoAgeCodeAge; |
+ return kNoAgeCodeAge; |
} |
Age age; |
MarkingParity parity; |
@@ -10685,15 +10702,13 @@ void Code::GetCodeAgeAndParity(Code* code, Age* age, |
#undef HANDLE_CODE_AGE |
stub = *builtins->MarkCodeAsExecutedOnce(); |
if (code == stub) { |
- // Treat that's never been executed as old immediatly. |
- *age = kIsOldCodeAge; |
+ *age = kNotExecutedCodeAge; |
*parity = NO_MARKING_PARITY; |
return; |
} |
stub = *builtins->MarkCodeAsExecutedTwice(); |
if (code == stub) { |
- // Pre-age code that has only been executed once. |
- *age = kPreAgedCodeAge; |
+ *age = kExecutedOnceCodeAge; |
*parity = NO_MARKING_PARITY; |
return; |
} |