Make sure that NormalizeElements and ShouldConvertToFastElements are based on the same values
BUG=v8:4518 LOG=n Review URL: https://codereview.chromium.org/1472293002 Cr-Commit-Position: refs/heads/master@{#32265}
This commit is contained in:
parent
3d004eeab2
commit
066747ea05
@ -1227,15 +1227,20 @@ class FastElementsAccessor
|
||||
}
|
||||
int num_used = 0;
|
||||
for (int i = 0; i < backing_store->length(); ++i) {
|
||||
if (!backing_store->is_the_hole(i)) ++num_used;
|
||||
// Bail out early if more than 1/4 is used.
|
||||
if (4 * num_used > backing_store->length()) break;
|
||||
if (!backing_store->is_the_hole(i)) {
|
||||
++num_used;
|
||||
// Bail out if a number dictionary wouldn't be able to save at least
|
||||
// 75% space.
|
||||
if (4 * SeededNumberDictionary::ComputeCapacity(num_used) *
|
||||
SeededNumberDictionary::kEntrySize >
|
||||
backing_store->length()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (4 * num_used <= backing_store->length()) {
|
||||
JSObject::NormalizeElements(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ReconfigureImpl(Handle<JSObject> object,
|
||||
Handle<FixedArrayBase> store, uint32_t entry,
|
||||
|
@ -14646,6 +14646,8 @@ static bool ShouldConvertToFastElements(JSObject* object,
|
||||
|
||||
uint32_t dictionary_size = static_cast<uint32_t>(dictionary->Capacity()) *
|
||||
SeededNumberDictionary::kEntrySize;
|
||||
|
||||
// Turn fast if the dictionary only saves 50% space.
|
||||
return 2 * dictionary_size >= *new_capacity;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user