Changeset 241117 in webkit
- Timestamp:
- Feb 6, 2019 9:51:46 PM (5 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r241114 r241117 1 2019-02-06 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Use BufferInternal single character StringImpl for SmallStrings 4 https://bugs.webkit.org/show_bug.cgi?id=194374 5 6 Reviewed by Geoffrey Garen. 7 8 Currently, we first create a large StringImpl, and create bunch of substrings with length = 1. 9 But pointer is larger than single character. BufferInternal StringImpl with single character 10 is more memory efficient. 11 12 * runtime/SmallStrings.cpp: 13 (JSC::SmallStringsStorage::SmallStringsStorage): 14 (JSC::SmallStrings::SmallStrings): 15 * runtime/SmallStrings.h: 16 1 17 2019-02-06 Yusuke Suzuki <ysuzuki@apple.com> 2 18 -
trunk/Source/JavaScriptCore/runtime/SmallStrings.cpp
r212365 r241117 53 53 SmallStringsStorage::SmallStringsStorage() 54 54 { 55 LChar* characterBuffer = 0;56 auto baseString = StringImpl::createUninitialized(singleCharacterStringCount, characterBuffer);57 55 for (unsigned i = 0; i < singleCharacterStringCount; ++i) { 58 c haracterBuffer[i] = i;59 m_reps[i] = AtomicStringImpl::add(StringImpl::create SubstringSharingImpl(baseString.get(), i, 1).ptr());56 const LChar string[] = { static_cast<LChar>(i) }; 57 m_reps[i] = AtomicStringImpl::add(StringImpl::create(string, 1).ptr()); 60 58 } 61 59 } 62 60 63 61 SmallStrings::SmallStrings() 64 : m_emptyString(0)65 #define JSC_COMMON_STRINGS_ATTRIBUTE_INITIALIZE(name) , m_##name(0)66 JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ATTRIBUTE_INITIALIZE)67 #undef JSC_COMMON_STRINGS_ATTRIBUTE_INITIALIZE68 , m_objectStringStart(nullptr)69 , m_nullObjectString(nullptr)70 , m_undefinedObjectString(nullptr)71 , m_needsToBeVisited(true)72 62 { 73 63 COMPILE_ASSERT(singleCharacterStringCount == sizeof(m_singleCharacterStrings) / sizeof(m_singleCharacterStrings[0]), IsNumCharactersConstInSyncWithClassUsage); 74 64 75 65 for (unsigned i = 0; i < singleCharacterStringCount; ++i) 76 m_singleCharacterStrings[i] = 0;66 m_singleCharacterStrings[i] = nullptr; 77 67 } 78 68 -
trunk/Source/JavaScriptCore/runtime/SmallStrings.h
r225799 r241117 132 132 void initialize(VM*, JSString*&, const char* value); 133 133 134 JSString* m_emptyString ;135 #define JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION(name) JSString* m_##name ;134 JSString* m_emptyString { nullptr }; 135 #define JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION(name) JSString* m_##name { nullptr }; 136 136 JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION) 137 137 #undef JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION 138 JSString* m_objectStringStart ;139 JSString* m_nullObjectString ;140 JSString* m_undefinedObjectString ;141 JSString* m_singleCharacterStrings[singleCharacterStringCount] ;138 JSString* m_objectStringStart { nullptr }; 139 JSString* m_nullObjectString { nullptr }; 140 JSString* m_undefinedObjectString { nullptr }; 141 JSString* m_singleCharacterStrings[singleCharacterStringCount] { nullptr }; 142 142 std::unique_ptr<SmallStringsStorage> m_storage; 143 bool m_needsToBeVisited ;143 bool m_needsToBeVisited { true }; 144 144 }; 145 145
Note: See TracChangeset
for help on using the changeset viewer.