Title: [277620] trunk/Source/_javascript_Core
- Revision
- 277620
- Author
- gga...@apple.com
- Date
- 2021-05-17 17:41:59 -0700 (Mon, 17 May 2021)
Log Message
StructureRareData::m_replacementWatchpointSets should not be a pointer to a pointer
https://bugs.webkit.org/show_bug.cgi?id=225840
Reviewed by Mark Lam.
HashMap is already just one pointer. Making it a pointer to a pointer
causes heap fragmentation. Worth about 1MB on GMail.
* runtime/Structure.cpp:
(JSC::Structure::ensurePropertyReplacementWatchpointSet):
* runtime/StructureInlines.h:
(JSC::Structure::didReplaceProperty):
(JSC::Structure::propertyReplacementWatchpointSet):
* runtime/StructureRareData.h:
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (277619 => 277620)
--- trunk/Source/_javascript_Core/ChangeLog 2021-05-18 00:26:10 UTC (rev 277619)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-05-18 00:41:59 UTC (rev 277620)
@@ -1,3 +1,20 @@
+2021-05-17 Geoffrey Garen <gga...@apple.com>
+
+ StructureRareData::m_replacementWatchpointSets should not be a pointer to a pointer
+ https://bugs.webkit.org/show_bug.cgi?id=225840
+
+ Reviewed by Mark Lam.
+
+ HashMap is already just one pointer. Making it a pointer to a pointer
+ causes heap fragmentation. Worth about 1MB on GMail.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::ensurePropertyReplacementWatchpointSet):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::didReplaceProperty):
+ (JSC::Structure::propertyReplacementWatchpointSet):
+ * runtime/StructureRareData.h:
+
2021-05-17 Alexey Shvayka <shvaikal...@gmail.com>
REGRESSION (r271119): Object methods defined with shorthand notation cannot access "caller" in non-strict mode
Modified: trunk/Source/_javascript_Core/runtime/Structure.cpp (277619 => 277620)
--- trunk/Source/_javascript_Core/runtime/Structure.cpp 2021-05-18 00:26:10 UTC (rev 277619)
+++ trunk/Source/_javascript_Core/runtime/Structure.cpp 2021-05-18 00:41:59 UTC (rev 277620)
@@ -1073,12 +1073,7 @@
allocateRareData(vm);
ConcurrentJSLocker locker(m_lock);
StructureRareData* rareData = this->rareData();
- if (!rareData->m_replacementWatchpointSets) {
- rareData->m_replacementWatchpointSets =
- makeUnique<StructureRareData::PropertyWatchpointMap>();
- WTF::storeStoreFence();
- }
- auto result = rareData->m_replacementWatchpointSets->add(offset, nullptr);
+ auto result = rareData->m_replacementWatchpointSets.add(offset, nullptr);
if (result.isNewEntry)
result.iterator->value = WatchpointSet::create(IsWatched);
return result.iterator->value.get();
Modified: trunk/Source/_javascript_Core/runtime/StructureInlines.h (277619 => 277620)
--- trunk/Source/_javascript_Core/runtime/StructureInlines.h 2021-05-18 00:26:10 UTC (rev 277619)
+++ trunk/Source/_javascript_Core/runtime/StructureInlines.h 2021-05-18 00:41:59 UTC (rev 277620)
@@ -355,10 +355,7 @@
{
if (LIKELY(!hasRareData()))
return;
- StructureRareData::PropertyWatchpointMap* map = rareData()->m_replacementWatchpointSets.get();
- if (LIKELY(!map))
- return;
- WatchpointSet* set = map->get(offset);
+ WatchpointSet* set = rareData()->m_replacementWatchpointSets.get(offset);
if (LIKELY(!set))
return;
set->fireAll(vm(), "Property did get replaced");
@@ -370,10 +367,7 @@
StructureRareData* rareData = tryRareData();
if (!rareData)
return nullptr;
- StructureRareData::PropertyWatchpointMap* map = rareData->m_replacementWatchpointSets.get();
- if (!map)
- return nullptr;
- return map->get(offset);
+ return rareData->m_replacementWatchpointSets.get(offset);
}
template<typename DetailsFunc>
Modified: trunk/Source/_javascript_Core/runtime/StructureRareData.h (277619 => 277620)
--- trunk/Source/_javascript_Core/runtime/StructureRareData.h 2021-05-18 00:26:10 UTC (rev 277619)
+++ trunk/Source/_javascript_Core/runtime/StructureRareData.h 2021-05-18 00:41:59 UTC (rev 277620)
@@ -128,7 +128,11 @@
WriteBarrier<JSImmutableButterfly> m_cachedPropertyNames[numberOfCachedPropertyNames] { };
typedef HashMap<PropertyOffset, RefPtr<WatchpointSet>, WTF::IntHash<PropertyOffset>, WTF::UnsignedWithZeroKeyHashTraits<PropertyOffset>> PropertyWatchpointMap;
- std::unique_ptr<PropertyWatchpointMap> m_replacementWatchpointSets;
+#ifdef NDEBUG
+ static_assert(sizeof(PropertyWatchpointMap) == sizeof(void*), "StructureRareData should remain small");
+#endif
+
+ PropertyWatchpointMap m_replacementWatchpointSets;
std::unique_ptr<SpecialPropertyCache> m_specialPropertyCache;
Box<InlineWatchpointSet> m_polyProtoWatchpoint;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes