Title: [166375] trunk/Source/_javascript_Core
Revision
166375
Author
mhahnenb...@apple.com
Date
2014-03-27 15:34:23 -0700 (Thu, 27 Mar 2014)

Log Message

Check the remembered set bit faster
https://bugs.webkit.org/show_bug.cgi?id=130860

Reviewed by Oliver Hunt.

Currently we look up the remembered set bit in the MarkedBlock in C++ code, but
that bit is also stored in the object. We should look it up there whenever possible.

* heap/CopiedBlockInlines.h:
(JSC::CopiedBlock::shouldReportLiveBytes):
* heap/Heap.cpp:
(JSC::Heap::addToRememberedSet):
* heap/Heap.h:
* heap/HeapInlines.h: Removed.
* heap/SlotVisitorInlines.h:
(JSC::SlotVisitor::reportExtraMemoryUsage):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (166374 => 166375)


--- trunk/Source/_javascript_Core/ChangeLog	2014-03-27 22:30:53 UTC (rev 166374)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-03-27 22:34:23 UTC (rev 166375)
@@ -1,3 +1,22 @@
+2014-03-27  Mark Hahnenberg  <mhahnenb...@apple.com>
+
+        Check the remembered set bit faster
+        https://bugs.webkit.org/show_bug.cgi?id=130860
+
+        Reviewed by Oliver Hunt.
+
+        Currently we look up the remembered set bit in the MarkedBlock in C++ code, but 
+        that bit is also stored in the object. We should look it up there whenever possible.
+
+        * heap/CopiedBlockInlines.h:
+        (JSC::CopiedBlock::shouldReportLiveBytes):
+        * heap/Heap.cpp:
+        (JSC::Heap::addToRememberedSet):
+        * heap/Heap.h:
+        * heap/HeapInlines.h: Removed.
+        * heap/SlotVisitorInlines.h:
+        (JSC::SlotVisitor::reportExtraMemoryUsage):
+
 2014-03-27  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Provide SPI to disallow remote inspection of a JSContext

Modified: trunk/Source/_javascript_Core/heap/CopiedBlockInlines.h (166374 => 166375)


--- trunk/Source/_javascript_Core/heap/CopiedBlockInlines.h	2014-03-27 22:30:53 UTC (rev 166374)
+++ trunk/Source/_javascript_Core/heap/CopiedBlockInlines.h	2014-03-27 22:34:23 UTC (rev 166375)
@@ -40,8 +40,7 @@
     // If we always added live bytes we would double count for elements in the remembered
     // set across collections. 
     // If we didn't always add live bytes to new blocks, we'd get too few.
-    bool ownerIsRemembered = MarkedBlock::blockFor(owner)->isRemembered(owner);
-    return !ownerIsRemembered || !m_isOld;
+    return !Heap::isRemembered(owner) || !m_isOld;
 }
 
 inline void CopiedBlock::reportLiveBytes(SpinLockHolder&, JSCell* owner, CopyToken token, unsigned bytes)

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (166374 => 166375)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2014-03-27 22:30:53 UTC (rev 166374)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2014-03-27 22:34:23 UTC (rev 166375)
@@ -850,7 +850,7 @@
 {
     ASSERT(cell);
     ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
-    if (isInRememberedSet(cell))
+    if (isRemembered(cell))
         return;
     MarkedBlock::blockFor(cell)->setRemembered(cell);
     const_cast<JSCell*>(cell)->setRemembered(true);

Modified: trunk/Source/_javascript_Core/heap/Heap.h (166374 => 166375)


--- trunk/Source/_javascript_Core/heap/Heap.h	2014-03-27 22:30:53 UTC (rev 166374)
+++ trunk/Source/_javascript_Core/heap/Heap.h	2014-03-27 22:34:23 UTC (rev 166375)
@@ -99,7 +99,6 @@
     static bool isRemembered(const void*);
 
     JS_EXPORT_PRIVATE void addToRememberedSet(const JSCell*);
-    bool isInRememberedSet(const JSCell*) const;
     static bool isWriteBarrierEnabled();
     JS_EXPORT_PRIVATE void writeBarrier(const JSCell*);
     void writeBarrier(const JSCell*, JSValue);

Modified: trunk/Source/_javascript_Core/heap/HeapInlines.h (166374 => 166375)


--- trunk/Source/_javascript_Core/heap/HeapInlines.h	2014-03-27 22:30:53 UTC (rev 166374)
+++ trunk/Source/_javascript_Core/heap/HeapInlines.h	2014-03-27 22:34:23 UTC (rev 166375)
@@ -67,11 +67,13 @@
     return MarkedBlock::blockFor(cell)->isLiveCell(cell);
 }
 
-inline bool Heap::isInRememberedSet(const JSCell* cell) const
+inline bool Heap::isRemembered(const void* ptr)
 {
+    const JSCell* cell = static_cast<const JSCell*>(ptr);
     ASSERT(cell);
     ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
-    return MarkedBlock::blockFor(cell)->isRemembered(cell);
+    ASSERT(MarkedBlock::blockFor(cell)->isRemembered(cell) == cell->isRemembered());
+    return cell->isRemembered();
 }
 
 inline bool Heap::isMarked(const void* cell)

Modified: trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h (166374 => 166375)


--- trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h	2014-03-27 22:30:53 UTC (rev 166374)
+++ trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h	2014-03-27 22:34:23 UTC (rev 166375)
@@ -258,7 +258,7 @@
 {
 #if ENABLE(GGC)
     // We don't want to double-count the extra memory that was reported in previous collections.
-    if (heap()->operationInProgress() == EdenCollection && MarkedBlock::blockFor(owner)->isRemembered(owner))
+    if (heap()->operationInProgress() == EdenCollection && Heap::isRemembered(owner))
         return;
 #else
     UNUSED_PARAM(owner);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to