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

Side by Side Diff: src/objects.cc

Issue 2760413002: Minor optimization to v8::internal::Factory::InternalizeOneByteString.
Patch Set: . Created 3 years, 9 months 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 11745 matching lines...) Expand 10 before | Expand all | Expand 10 after
11756 value <<= String::ArrayIndexValueBits::kShift; 11756 value <<= String::ArrayIndexValueBits::kShift;
11757 value |= length << String::ArrayIndexLengthBits::kShift; 11757 value |= length << String::ArrayIndexLengthBits::kShift;
11758 11758
11759 DCHECK((value & String::kIsNotArrayIndexMask) == 0); 11759 DCHECK((value & String::kIsNotArrayIndexMask) == 0);
11760 DCHECK_EQ(length <= String::kMaxCachedArrayIndexLength, 11760 DCHECK_EQ(length <= String::kMaxCachedArrayIndexLength,
11761 (value & String::kContainsCachedArrayIndexMask) == 0); 11761 (value & String::kContainsCachedArrayIndexMask) == 0);
11762 return value; 11762 return value;
11763 } 11763 }
11764 11764
11765 11765
11766 uint32_t StringHasher::GetHashField() {
11767 if (length_ <= String::kMaxHashCalcLength) {
11768 if (is_array_index_) {
11769 return MakeArrayIndexHash(array_index_, length_);
11770 }
11771 return (GetHashCore(raw_running_hash_) << String::kHashShift) |
11772 String::kIsNotArrayIndexMask;
11773 } else {
11774 return (length_ << String::kHashShift) | String::kIsNotArrayIndexMask;
11775 }
11776 }
11777
11778
11779 uint32_t StringHasher::ComputeUtf8Hash(Vector<const char> chars, 11766 uint32_t StringHasher::ComputeUtf8Hash(Vector<const char> chars,
11780 uint32_t seed, 11767 uint32_t seed,
11781 int* utf16_length_out) { 11768 int* utf16_length_out) {
11782 int vector_length = chars.length(); 11769 int vector_length = chars.length();
11783 // Handle some edge cases 11770 // Handle some edge cases
11784 if (vector_length <= 1) { 11771 if (vector_length <= 1) {
11785 DCHECK(vector_length == 0 || 11772 DCHECK(vector_length == 0 ||
11786 static_cast<uint8_t>(chars.start()[0]) <= 11773 static_cast<uint8_t>(chars.start()[0]) <=
11787 unibrow::Utf8::kMaxOneByteChar); 11774 unibrow::Utf8::kMaxOneByteChar);
11788 *utf16_length_out = vector_length; 11775 *utf16_length_out = vector_length;
(...skipping 5615 matching lines...) Expand 10 before | Expand all | Expand 10 after
17404 : isolate->factory()->cons_string_map(); 17391 : isolate->factory()->cons_string_map();
17405 string->set_map(*map); 17392 string->set_map(*map);
17406 Handle<ConsString> cons = Handle<ConsString>::cast(string); 17393 Handle<ConsString> cons = Handle<ConsString>::cast(string);
17407 cons->set_first(*result); 17394 cons->set_first(*result);
17408 cons->set_second(isolate->heap()->empty_string()); 17395 cons->set_second(isolate->heap()->empty_string());
17409 } 17396 }
17410 } 17397 }
17411 return result; 17398 return result;
17412 } 17399 }
17413 17400
17414 17401 Handle<String> StringTable::InsertKey(Isolate* isolate,
17415 Handle<String> StringTable::LookupKey(Isolate* isolate, HashTableKey* key) { 17402 Handle<StringTable> table,
17416 Handle<StringTable> table = isolate->factory()->string_table(); 17403 HashTableKey* key, int32_t hash) {
17417 int entry = table->FindEntry(key);
17418
17419 // String already in table.
17420 if (entry != kNotFound) {
17421 return handle(String::cast(table->KeyAt(entry)), isolate);
17422 }
17423
17424 // Adding new string. Grow table if needed. 17404 // Adding new string. Grow table if needed.
17425 table = StringTable::EnsureCapacity(table, 1, key); 17405 table = StringTable::EnsureCapacity(table, 1, key);
17426 17406
17427 // Create string object. 17407 // Create string object.
17428 Handle<Object> string = key->AsHandle(isolate); 17408 Handle<Object> string = key->AsHandle(isolate);
17429 // There must be no attempts to internalize strings that could throw 17409 // There must be no attempts to internalize strings that could throw
17430 // InvalidStringLength error. 17410 // InvalidStringLength error.
17431 CHECK(!string.is_null()); 17411 CHECK(!string.is_null());
17432 17412
17433 // Add the new string and return it along with the string table. 17413 // Add the new string and return it along with the string table.
17434 entry = table->FindInsertionEntry(key->Hash()); 17414 int entry = table->FindInsertionEntry(hash);
17435 table->set(EntryToIndex(entry), *string); 17415 table->set(EntryToIndex(entry), *string);
17436 table->ElementAdded(); 17416 table->ElementAdded();
17437 17417
17438 isolate->heap()->SetRootStringTable(*table); 17418 isolate->heap()->SetRootStringTable(*table);
17439 return Handle<String>::cast(string); 17419 return Handle<String>::cast(string);
17440 } 17420 }
17441 17421
17442 17422
17443 String* StringTable::LookupKeyIfExists(Isolate* isolate, HashTableKey* key) { 17423 String* StringTable::LookupKeyIfExists(Isolate* isolate, HashTableKey* key) {
17444 Handle<StringTable> table = isolate->factory()->string_table(); 17424 Handle<StringTable> table = isolate->factory()->string_table();
(...skipping 2851 matching lines...) Expand 10 before | Expand all | Expand 10 after
20296 // depend on this. 20276 // depend on this.
20297 return DICTIONARY_ELEMENTS; 20277 return DICTIONARY_ELEMENTS;
20298 } 20278 }
20299 DCHECK_LE(kind, LAST_ELEMENTS_KIND); 20279 DCHECK_LE(kind, LAST_ELEMENTS_KIND);
20300 return kind; 20280 return kind;
20301 } 20281 }
20302 } 20282 }
20303 20283
20304 } // namespace internal 20284 } // namespace internal
20305 } // namespace v8 20285 } // 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