Modified: trunk/Source/_javascript_Core/ChangeLog (255658 => 255659)
--- trunk/Source/_javascript_Core/ChangeLog 2020-02-04 03:59:08 UTC (rev 255658)
+++ trunk/Source/_javascript_Core/ChangeLog 2020-02-04 04:22:29 UTC (rev 255659)
@@ -1,3 +1,17 @@
+2020-02-03 Yusuke Suzuki <[email protected]>
+
+ [JSC] Use PackedPtr for VariableEnvironment
+ https://bugs.webkit.org/show_bug.cgi?id=207172
+
+ Reviewed by Mark Lam.
+
+ Since VariableEnvironment's KeyValue is key: pointer + value: 2 byte, using PackedPtr can make it 8 bytes, 50% reduction.
+
+ * parser/VariableEnvironment.h:
+ * runtime/CachedTypes.cpp:
+ (JSC::CachedRefPtr::encode):
+ (JSC::CachedRefPtr::decode const): CachedTypes should handle PackedPtr too since VariableEnvironment starts using it.
+
2020-02-03 Alexey Shvayka <[email protected]>
\0 identity escapes should be syntax errors in Unicode patterns only
Modified: trunk/Source/_javascript_Core/parser/VariableEnvironment.h (255658 => 255659)
--- trunk/Source/_javascript_Core/parser/VariableEnvironment.h 2020-02-04 03:59:08 UTC (rev 255658)
+++ trunk/Source/_javascript_Core/parser/VariableEnvironment.h 2020-02-04 04:22:29 UTC (rev 255659)
@@ -85,7 +85,7 @@
class VariableEnvironment {
private:
- typedef HashMap<RefPtr<UniquedStringImpl>, VariableEnvironmentEntry, IdentifierRepHash, HashTraits<RefPtr<UniquedStringImpl>>, VariableEnvironmentEntryHashTraits> Map;
+ typedef HashMap<PackedRefPtr<UniquedStringImpl>, VariableEnvironmentEntry, IdentifierRepHash, HashTraits<RefPtr<UniquedStringImpl>>, VariableEnvironmentEntryHashTraits> Map;
public:
VariableEnvironment() = default;
VariableEnvironment(VariableEnvironment&& other) = default;
@@ -139,7 +139,7 @@
private:
CompactVariableEnvironment() = default;
- Vector<RefPtr<UniquedStringImpl>> m_variables;
+ Vector<PackedRefPtr<UniquedStringImpl>> m_variables;
Vector<VariableEnvironmentEntry> m_variableMetadata;
unsigned m_hash;
bool m_isEverythingCaptured;
Modified: trunk/Source/_javascript_Core/runtime/CachedTypes.cpp (255658 => 255659)
--- trunk/Source/_javascript_Core/runtime/CachedTypes.cpp 2020-02-04 03:59:08 UTC (rev 255658)
+++ trunk/Source/_javascript_Core/runtime/CachedTypes.cpp 2020-02-04 04:22:29 UTC (rev 255659)
@@ -42,6 +42,7 @@
#include <wtf/FastMalloc.h>
#include <wtf/MallocPtr.h>
#include <wtf/Optional.h>
+#include <wtf/Packed.h>
#include <wtf/UUID.h>
#include <wtf/text/AtomStringImpl.h>
@@ -469,7 +470,7 @@
template<typename T, typename Source = SourceType<T>>
class CachedPtr : public VariableLengthObject<Source*> {
- template<typename, typename>
+ template<typename, typename, typename>
friend class CachedRefPtr;
friend struct CachedPtrOffsets;
@@ -532,8 +533,8 @@
return OBJECT_OFFSETOF(CachedPtr<void>, m_offset);
}
-template<typename T, typename Source = SourceType<T>>
-class CachedRefPtr : public CachedObject<RefPtr<Source>> {
+template<typename T, typename Source = SourceType<T>, typename PtrTraits = DumbPtrTraits<Source>>
+class CachedRefPtr : public CachedObject<RefPtr<Source, PtrTraits>> {
public:
void encode(Encoder& encoder, const Source* src)
{
@@ -540,12 +541,12 @@
m_ptr.encode(encoder, src);
}
- void encode(Encoder& encoder, const RefPtr<Source> src)
+ void encode(Encoder& encoder, const RefPtr<Source, PtrTraits> src)
{
encode(encoder, src.get());
}
- RefPtr<Source> decode(Decoder& decoder) const
+ RefPtr<Source, PtrTraits> decode(Decoder& decoder) const
{
bool isNewAllocation;
Source* decodedPtr = m_ptr.decode(decoder, isNewAllocation);
@@ -560,7 +561,7 @@
return adoptRef(decodedPtr);
}
- void decode(Decoder& decoder, RefPtr<Source>& src) const
+ void decode(Decoder& decoder, RefPtr<Source, PtrTraits>& src) const
{
src = ""
}
@@ -983,7 +984,7 @@
private:
bool m_isEverythingCaptured;
- CachedHashMap<CachedRefPtr<CachedUniquedStringImpl>, VariableEnvironmentEntry, IdentifierRepHash, HashTraits<RefPtr<UniquedStringImpl>>, VariableEnvironmentEntryHashTraits> m_map;
+ CachedHashMap<CachedRefPtr<CachedUniquedStringImpl, UniquedStringImpl, WTF::PackedPtrTraits<UniquedStringImpl>>, VariableEnvironmentEntry, IdentifierRepHash, HashTraits<RefPtr<UniquedStringImpl>>, VariableEnvironmentEntryHashTraits> m_map;
};
class CachedCompactVariableEnvironment : public CachedObject<CompactVariableEnvironment> {
@@ -1012,7 +1013,7 @@
}
private:
- CachedVector<CachedRefPtr<CachedUniquedStringImpl>> m_variables;
+ CachedVector<CachedRefPtr<CachedUniquedStringImpl, UniquedStringImpl, WTF::PackedPtrTraits<UniquedStringImpl>>> m_variables;
CachedVector<VariableEnvironmentEntry> m_variableMetadata;
unsigned m_hash;
bool m_isEverythingCaptured;