Chromium Code Reviews| 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; |
| } |