Changeset 241117 in webkit


Ignore:
Timestamp:
Feb 6, 2019 9:51:46 PM (5 years ago)
Author:
ysuzuki@apple.com
Message:

[JSC] Use BufferInternal single character StringImpl for SmallStrings
https://bugs.webkit.org/show_bug.cgi?id=194374

Reviewed by Geoffrey Garen.

Currently, we first create a large StringImpl, and create bunch of substrings with length = 1.
But pointer is larger than single character. BufferInternal StringImpl with single character
is more memory efficient.

  • runtime/SmallStrings.cpp:

(JSC::SmallStringsStorage::SmallStringsStorage):
(JSC::SmallStrings::SmallStrings):

  • runtime/SmallStrings.h:
Location:
trunk/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r241114 r241117  
     12019-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
    1172019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
    218
  • trunk/Source/JavaScriptCore/runtime/SmallStrings.cpp

    r212365 r241117  
    5353SmallStringsStorage::SmallStringsStorage()
    5454{
    55     LChar* characterBuffer = 0;
    56     auto baseString = StringImpl::createUninitialized(singleCharacterStringCount, characterBuffer);
    5755    for (unsigned i = 0; i < singleCharacterStringCount; ++i) {
    58         characterBuffer[i] = i;
    59         m_reps[i] = AtomicStringImpl::add(StringImpl::createSubstringSharingImpl(baseString.get(), i, 1).ptr());
     56        const LChar string[] = { static_cast<LChar>(i) };
     57        m_reps[i] = AtomicStringImpl::add(StringImpl::create(string, 1).ptr());
    6058    }
    6159}
    6260
    6361SmallStrings::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_INITIALIZE
    68     , m_objectStringStart(nullptr)
    69     , m_nullObjectString(nullptr)
    70     , m_undefinedObjectString(nullptr)
    71     , m_needsToBeVisited(true)
    7262{
    7363    COMPILE_ASSERT(singleCharacterStringCount == sizeof(m_singleCharacterStrings) / sizeof(m_singleCharacterStrings[0]), IsNumCharactersConstInSyncWithClassUsage);
    7464
    7565    for (unsigned i = 0; i < singleCharacterStringCount; ++i)
    76         m_singleCharacterStrings[i] = 0;
     66        m_singleCharacterStrings[i] = nullptr;
    7767}
    7868
  • trunk/Source/JavaScriptCore/runtime/SmallStrings.h

    r225799 r241117  
    132132    void initialize(VM*, JSString*&, const char* value);
    133133
    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 };
    136136    JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION)
    137137#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 };
    142142    std::unique_ptr<SmallStringsStorage> m_storage;
    143     bool m_needsToBeVisited;
     143    bool m_needsToBeVisited { true };
    144144};
    145145
Note: See TracChangeset for help on using the changeset viewer.