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