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

Side by Side Diff: src/objects.cc

Issue 2534763003: [Interpreter] Add bytecode aging and use it enable CompilationCache for bytecode (Closed)
Patch Set: Rebase Created 4 years 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/objects.h ('k') | src/objects-inl.h » ('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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 15125 matching lines...) Expand 10 before | Expand all | Expand 10 after
15136 #endif 15136 #endif
15137 } 15137 }
15138 15138
15139 void BytecodeArray::CopyBytecodesTo(BytecodeArray* to) { 15139 void BytecodeArray::CopyBytecodesTo(BytecodeArray* to) {
15140 BytecodeArray* from = this; 15140 BytecodeArray* from = this;
15141 DCHECK_EQ(from->length(), to->length()); 15141 DCHECK_EQ(from->length(), to->length());
15142 CopyBytes(to->GetFirstBytecodeAddress(), from->GetFirstBytecodeAddress(), 15142 CopyBytes(to->GetFirstBytecodeAddress(), from->GetFirstBytecodeAddress(),
15143 from->length()); 15143 from->length());
15144 } 15144 }
15145 15145
15146 void BytecodeArray::MakeOlder() {
15147 Age age = bytecode_age();
15148 if (age < kLastBytecodeAge) {
15149 set_bytecode_age(static_cast<Age>(age + 1));
15150 }
15151 DCHECK_GE(bytecode_age(), kFirstBytecodeAge);
15152 DCHECK_LE(bytecode_age(), kLastBytecodeAge);
15153 }
15154
15155 bool BytecodeArray::IsOld() const {
15156 return bytecode_age() >= kIsOldBytecodeAge;
15157 }
15158
15146 // static 15159 // static
15147 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { 15160 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) {
15148 DCHECK(capacity >= 0); 15161 DCHECK(capacity >= 0);
15149 array->GetIsolate()->factory()->NewJSArrayStorage( 15162 array->GetIsolate()->factory()->NewJSArrayStorage(
15150 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); 15163 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE);
15151 } 15164 }
15152 15165
15153 void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) { 15166 void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) {
15154 // We should never end in here with a pixel or external array. 15167 // We should never end in here with a pixel or external array.
15155 DCHECK(array->AllowsSetLength()); 15168 DCHECK(array->AllowsSetLength());
(...skipping 2867 matching lines...) Expand 10 before | Expand all | Expand 10 after
18023 count = Smi::FromInt(count->value() - 1); 18036 count = Smi::FromInt(count->value() - 1);
18024 if (count->value() == 0) { 18037 if (count->value() == 0) {
18025 NoWriteBarrierSet(this, entry_index, the_hole_value); 18038 NoWriteBarrierSet(this, entry_index, the_hole_value);
18026 NoWriteBarrierSet(this, value_index, the_hole_value); 18039 NoWriteBarrierSet(this, value_index, the_hole_value);
18027 ElementRemoved(); 18040 ElementRemoved();
18028 } else { 18041 } else {
18029 NoWriteBarrierSet(this, value_index, count); 18042 NoWriteBarrierSet(this, value_index, count);
18030 } 18043 }
18031 } else if (get(entry_index)->IsFixedArray()) { 18044 } else if (get(entry_index)->IsFixedArray()) {
18032 SharedFunctionInfo* info = SharedFunctionInfo::cast(get(value_index)); 18045 SharedFunctionInfo* info = SharedFunctionInfo::cast(get(value_index));
18033 if (info->code()->kind() != Code::FUNCTION || info->code()->IsOld()) { 18046 bool is_old =
18047 info->IsInterpreted()
18048 ? info->bytecode_array()->IsOld()
18049 : info->code()->kind() != Code::FUNCTION || info->code()->IsOld();
18050 if (is_old) {
18034 NoWriteBarrierSet(this, entry_index, the_hole_value); 18051 NoWriteBarrierSet(this, entry_index, the_hole_value);
18035 NoWriteBarrierSet(this, value_index, the_hole_value); 18052 NoWriteBarrierSet(this, value_index, the_hole_value);
18036 ElementRemoved(); 18053 ElementRemoved();
18037 } 18054 }
18038 } 18055 }
18039 } 18056 }
18040 } 18057 }
18041 18058
18042 18059
18043 void CompilationCacheTable::Remove(Object* value) { 18060 void CompilationCacheTable::Remove(Object* value) {
(...skipping 2455 matching lines...) Expand 10 before | Expand all | Expand 10 after
20499 // depend on this. 20516 // depend on this.
20500 return DICTIONARY_ELEMENTS; 20517 return DICTIONARY_ELEMENTS;
20501 } 20518 }
20502 DCHECK_LE(kind, LAST_ELEMENTS_KIND); 20519 DCHECK_LE(kind, LAST_ELEMENTS_KIND);
20503 return kind; 20520 return kind;
20504 } 20521 }
20505 } 20522 }
20506 20523
20507 } // namespace internal 20524 } // namespace internal
20508 } // namespace v8 20525 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698