Title: [255659] trunk/Source/_javascript_Core
Revision
255659
Author
[email protected]
Date
2020-02-03 20:22:29 -0800 (Mon, 03 Feb 2020)

Log Message

[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.

Modified Paths

Diff

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to