Diff
Modified: trunk/Source/_javascript_Core/API/JSBase.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/API/JSBase.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/API/JSBase.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -139,7 +139,10 @@
}
ExecState* exec = toJS(ctx);
JSLockHolder locker(exec);
- exec->vm().heap.reportExtraMemoryCost(size);
+
+ // FIXME: switch to deprecatedReportExtraMemory.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ exec->vm().heap.reportExtraMemoryAllocated(size);
}
extern "C" JS_EXPORT void JSSynchronousGarbageCollectForDebugging(JSContextRef);
Modified: trunk/Source/_javascript_Core/ChangeLog (181406 => 181407)
--- trunk/Source/_javascript_Core/ChangeLog 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-03-11 21:29:57 UTC (rev 181407)
@@ -1,3 +1,69 @@
+2015-03-11 Geoffrey Garen <gga...@apple.com>
+
+ Refactored the JSC::Heap extra cost API for clarity and to make some known bugs more obvious
+ https://bugs.webkit.org/show_bug.cgi?id=142589
+
+ Reviewed by Andreas Kling.
+
+ * API/JSBase.cpp:
+ (JSReportExtraMemoryCost): Added a FIXME to annotate a known bug.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::visitAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::setJITCode): Updated for rename.
+
+ * heap/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::reportExtraMemoryAllocatedSlowCase):
+ (JSC::Heap::deprecatedReportExtraMemorySlowCase): Renamed our reporting
+ APIs to clarify their relationship to each other: One must report extra
+ memory at the time of allocation, and at the time the GC visits it.
+
+ (JSC::Heap::extraMemorySize):
+ (JSC::Heap::size):
+ (JSC::Heap::capacity):
+ (JSC::Heap::sizeAfterCollect):
+ (JSC::Heap::willStartCollection): Updated for renames. Added explicit
+ API for deprecated users who can't use our best API.
+
+ (JSC::Heap::reportExtraMemoryCostSlowCase): Deleted.
+ (JSC::Heap::extraSize): Deleted.
+
+ * heap/Heap.h:
+ * heap/HeapInlines.h:
+ (JSC::Heap::reportExtraMemoryAllocated):
+ (JSC::Heap::reportExtraMemoryVisited):
+ (JSC::Heap::deprecatedReportExtraMemory):
+ (JSC::Heap::reportExtraMemoryCost): Deleted. Ditto.
+
+ * heap/SlotVisitor.h:
+ * heap/SlotVisitorInlines.h:
+ (JSC::SlotVisitor::reportExtraMemoryVisited):
+ (JSC::SlotVisitor::reportExtraMemoryUsage): Deleted. Moved this
+ functionality into the Heap since it's pretty detailed in its access
+ to the heap.
+
+ * runtime/JSArrayBufferView.cpp:
+ (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
+ * runtime/JSGenericTypedArrayViewInlines.h:
+ (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): Updated for
+ renames.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::visitChildren):
+ (JSC::JSRopeString::resolveRopeToAtomicString):
+ (JSC::JSRopeString::resolveRope):
+ * runtime/JSString.h:
+ (JSC::JSString::finishCreation): Updated for renames.
+
+ * runtime/SparseArrayValueMap.cpp:
+ (JSC::SparseArrayValueMap::add): Added FIXME.
+
+ * runtime/WeakMapData.cpp:
+ (JSC::WeakMapData::visitChildren): Updated for rename.
+
2015-03-11 Ryosuke Niwa <rn...@webkit.org>
Calling super() in a base class results in a crash
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -1677,7 +1677,7 @@
}
m_heap->m_codeBlocks.add(this);
- m_heap->reportExtraMemoryCost(sizeof(CodeBlock));
+ m_heap->reportExtraMemoryAllocated(sizeof(CodeBlock));
}
CodeBlock::CodeBlock(ScriptExecutable* ownerExecutable, UnlinkedCodeBlock* unlinkedCodeBlock, JSScope* scope, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset, unsigned firstLineColumnOffset)
@@ -2131,7 +2131,7 @@
dumpBytecode();
m_heap->m_codeBlocks.add(this);
- m_heap->reportExtraMemoryCost(sizeof(CodeBlock) + m_instructions.size() * sizeof(Instruction));
+ m_heap->reportExtraMemoryAllocated(sizeof(CodeBlock) + m_instructions.size() * sizeof(Instruction));
}
CodeBlock::~CodeBlock()
@@ -2223,15 +2223,15 @@
if (CodeBlock* otherBlock = specialOSREntryBlockOrNull())
otherBlock->visitAggregate(visitor);
- visitor.reportExtraMemoryUsage(ownerExecutable(), sizeof(CodeBlock));
+ visitor.reportExtraMemoryVisited(ownerExecutable(), sizeof(CodeBlock));
if (m_jitCode)
- visitor.reportExtraMemoryUsage(ownerExecutable(), m_jitCode->size());
+ visitor.reportExtraMemoryVisited(ownerExecutable(), m_jitCode->size());
if (m_instructions.size()) {
// Divide by refCount() because m_instructions points to something that is shared
// by multiple CodeBlocks, and we only want to count it towards the heap size once.
// Having each CodeBlock report only its proportional share of the size is one way
// of accomplishing this.
- visitor.reportExtraMemoryUsage(ownerExecutable(), m_instructions.size() * sizeof(Instruction) / m_instructions.refCount());
+ visitor.reportExtraMemoryVisited(ownerExecutable(), m_instructions.size() * sizeof(Instruction) / m_instructions.refCount());
}
visitor.append(&m_unlinkedCode);
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (181406 => 181407)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -273,7 +273,7 @@
void setJITCode(PassRefPtr<JITCode> code)
{
ASSERT(m_heap->isDeferred());
- m_heap->reportExtraMemoryCost(code->size());
+ m_heap->reportExtraMemoryAllocated(code->size());
ConcurrentJITLocker locker(m_lock);
WTF::storeStoreFence(); // This is probably not needed because the lock will also do something similar, but it's good to be paranoid.
m_jitCode = code;
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -309,7 +309,8 @@
, m_operationInProgress(NoOperation)
, m_objectSpace(this)
, m_storageSpace(this)
- , m_extraMemoryUsage(0)
+ , m_extraMemorySize(0)
+ , m_deprecatedExtraMemorySize(0)
, m_machineThreads(this)
, m_sharedData(vm)
, m_slotVisitor(m_sharedData)
@@ -392,23 +393,18 @@
#endif
}
-void Heap::reportExtraMemoryCostSlowCase(size_t cost)
+void Heap::reportExtraMemoryAllocatedSlowCase(size_t size)
{
- // Our frequency of garbage collection tries to balance memory use against speed
- // by collecting based on the number of newly created values. However, for values
- // that hold on to a great deal of memory that's not in the form of other JS values,
- // that is not good enough - in some cases a lot of those objects can pile up and
- // use crazy amounts of memory without a GC happening. So we track these extra
- // memory costs. Only unusually large objects are noted, and we only keep track
- // of this extra cost until the next GC. In garbage collected languages, most values
- // are either very short lived temporaries, or have extremely long lifetimes. So
- // if a large value survives one garbage collection, there is not much point to
- // collecting more frequently as long as it stays alive.
-
- didAllocate(cost);
+ didAllocate(size);
collectIfNecessaryOrDefer();
}
+void Heap::deprecatedReportExtraMemorySlowCase(size_t size)
+{
+ m_deprecatedExtraMemorySize += size;
+ reportExtraMemoryAllocatedSlowCase(size);
+}
+
void Heap::reportAbandonedObjectGraph()
{
// Our clients don't know exactly how much memory they
@@ -854,19 +850,19 @@
return m_objectSpace.objectCount();
}
-size_t Heap::extraSize()
+size_t Heap::extraMemorySize()
{
- return m_extraMemoryUsage + m_arrayBuffers.size();
+ return m_extraMemorySize + m_deprecatedExtraMemorySize + m_arrayBuffers.size();
}
size_t Heap::size()
{
- return m_objectSpace.size() + m_storageSpace.size() + extraSize();
+ return m_objectSpace.size() + m_storageSpace.size() + extraMemorySize();
}
size_t Heap::capacity()
{
- return m_objectSpace.capacity() + m_storageSpace.capacity() + extraSize();
+ return m_objectSpace.capacity() + m_storageSpace.capacity() + extraMemorySize();
}
size_t Heap::sizeAfterCollect()
@@ -876,7 +872,7 @@
// rather than all used (including dead) copied bytes, thus it's
// always the case that m_totalBytesCopied <= m_storageSpace.size().
ASSERT(m_totalBytesCopied <= m_storageSpace.size());
- return m_totalBytesVisited + m_totalBytesCopied + extraSize();
+ return m_totalBytesVisited + m_totalBytesCopied + extraMemorySize();
}
size_t Heap::protectedGlobalObjectCount()
@@ -1124,7 +1120,8 @@
}
if (m_operationInProgress == FullCollection) {
m_sizeBeforeLastFullCollect = m_sizeAfterLastCollect + m_bytesAllocatedThisCycle;
- m_extraMemoryUsage = 0;
+ m_extraMemorySize = 0;
+ m_deprecatedExtraMemorySize = 0;
if (m_fullActivityCallback)
m_fullActivityCallback->willCollect();
Modified: trunk/Source/_javascript_Core/heap/Heap.h (181406 => 181407)
--- trunk/Source/_javascript_Core/heap/Heap.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/heap/Heap.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -161,13 +161,21 @@
JS_EXPORT_PRIVATE void collect(HeapOperation collectionType = AnyCollection);
bool collectIfNecessaryOrDefer(); // Returns true if it did collect.
- void reportExtraMemoryCost(size_t cost);
+ // Use this API to report non-GC memory referenced by GC objects. Be sure to
+ // call both of these functions: Calling only one may trigger catastropic
+ // memory growth.
+ void reportExtraMemoryAllocated(size_t);
+ void reportExtraMemoryVisited(JSCell*, size_t);
+
+ // Use this API to report non-GC memory if you can't use the better API above.
+ void deprecatedReportExtraMemory(size_t);
+
JS_EXPORT_PRIVATE void reportAbandonedObjectGraph();
JS_EXPORT_PRIVATE void protect(JSValue);
JS_EXPORT_PRIVATE bool unprotect(JSValue); // True when the protect count drops to 0.
- size_t extraSize(); // extra memory usage outside of pages allocated by the heap
+ size_t extraMemorySize(); // Non-GC memory referenced by GC objects.
JS_EXPORT_PRIVATE size_t size();
JS_EXPORT_PRIVATE size_t capacity();
JS_EXPORT_PRIVATE size_t objectCount();
@@ -261,15 +269,15 @@
void* allocateWithoutDestructor(size_t); // For use with objects without destructors.
template<typename ClassType> void* allocateObjectOfType(size_t); // Chooses one of the methods above based on type.
- static const size_t minExtraCost = 256;
- static const size_t maxExtraCost = 1024 * 1024;
+ static const size_t minExtraMemory = 256;
class FinalizerOwner : public WeakHandleOwner {
virtual void finalize(Handle<Unknown>, void* context) override;
};
JS_EXPORT_PRIVATE bool isValidAllocation(size_t);
- JS_EXPORT_PRIVATE void reportExtraMemoryCostSlowCase(size_t);
+ JS_EXPORT_PRIVATE void reportExtraMemoryAllocatedSlowCase(size_t);
+ JS_EXPORT_PRIVATE void deprecatedReportExtraMemorySlowCase(size_t);
void collectImpl(HeapOperation, void* stackOrigin, void* stackTop, MachineThreads::RegisterState&);
@@ -353,7 +361,8 @@
MarkedSpace m_objectSpace;
CopiedSpace m_storageSpace;
GCIncomingRefCountedSet<ArrayBuffer> m_arrayBuffers;
- size_t m_extraMemoryUsage;
+ size_t m_extraMemorySize;
+ size_t m_deprecatedExtraMemorySize;
HashSet<const JSCell*> m_copyingRememberedSet;
Modified: trunk/Source/_javascript_Core/heap/HeapInlines.h (181406 => 181407)
--- trunk/Source/_javascript_Core/heap/HeapInlines.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/heap/HeapInlines.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -152,12 +152,41 @@
#endif
}
-inline void Heap::reportExtraMemoryCost(size_t cost)
+inline void Heap::reportExtraMemoryAllocated(size_t size)
{
- if (cost > minExtraCost)
- reportExtraMemoryCostSlowCase(cost);
+ if (size > minExtraMemory)
+ reportExtraMemoryAllocatedSlowCase(size);
}
+inline void Heap::reportExtraMemoryVisited(JSCell* owner, size_t size)
+{
+#if ENABLE(GGC)
+ // We don't want to double-count the extra memory that was reported in previous collections.
+ if (operationInProgress() == EdenCollection && Heap::isRemembered(owner))
+ return;
+#else
+ UNUSED_PARAM(owner);
+#endif
+
+ size_t* counter = &m_extraMemorySize;
+
+#if ENABLE(COMPARE_AND_SWAP)
+ for (;;) {
+ size_t oldSize = *counter;
+ if (WTF::weakCompareAndSwapSize(counter, oldSize, oldSize + size))
+ return;
+ }
+#else
+ (*counter) += size;
+#endif
+}
+
+inline void Heap::deprecatedReportExtraMemory(size_t size)
+{
+ if (size > minExtraMemory)
+ deprecatedReportExtraMemorySlowCase(size);
+}
+
template<typename Functor> inline typename Functor::ReturnType Heap::forEachProtectedCell(Functor& functor)
{
for (auto& pair : m_protectedValues)
Modified: trunk/Source/_javascript_Core/heap/SlotVisitor.h (181406 => 181407)
--- trunk/Source/_javascript_Core/heap/SlotVisitor.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/heap/SlotVisitor.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -105,7 +105,7 @@
void copyLater(JSCell*, CopyToken, void*, size_t);
- void reportExtraMemoryUsage(JSCell* owner, size_t);
+ void reportExtraMemoryVisited(JSCell* owner, size_t);
void addWeakReferenceHarvester(WeakReferenceHarvester*);
void addUnconditionalFinalizer(UnconditionalFinalizer*);
Modified: trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h (181406 => 181407)
--- trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -252,27 +252,9 @@
}
}
-inline void SlotVisitor::reportExtraMemoryUsage(JSCell* owner, size_t size)
+inline void SlotVisitor::reportExtraMemoryVisited(JSCell* owner, size_t size)
{
-#if ENABLE(GGC)
- // We don't want to double-count the extra memory that was reported in previous collections.
- if (heap()->operationInProgress() == EdenCollection && Heap::isRemembered(owner))
- return;
-#else
- UNUSED_PARAM(owner);
-#endif
-
- size_t* counter = &m_shared.m_vm->heap.m_extraMemoryUsage;
-
-#if ENABLE(COMPARE_AND_SWAP)
- for (;;) {
- size_t oldSize = *counter;
- if (WTF::weakCompareAndSwapSize(counter, oldSize, oldSize + size))
- return;
- }
-#else
- (*counter) += size;
-#endif
+ heap()->reportExtraMemoryVisited(owner, size);
}
inline Heap* SlotVisitor::heap() const
Modified: trunk/Source/_javascript_Core/runtime/JSArrayBufferView.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/runtime/JSArrayBufferView.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/runtime/JSArrayBufferView.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -78,7 +78,7 @@
return;
}
- vm.heap.reportExtraMemoryCost(static_cast<size_t>(length) * elementSize);
+ vm.heap.reportExtraMemoryAllocated(static_cast<size_t>(length) * elementSize);
m_structure = structure;
m_mode = OversizeTypedArray;
Modified: trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewInlines.h (181406 => 181407)
--- trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewInlines.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/runtime/JSGenericTypedArrayViewInlines.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -446,7 +446,7 @@
}
case OversizeTypedArray: {
- visitor.reportExtraMemoryUsage(thisObject, thisObject->byteSize());
+ visitor.reportExtraMemoryVisited(thisObject, thisObject->byteSize());
break;
}
Modified: trunk/Source/_javascript_Core/runtime/JSString.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/runtime/JSString.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/runtime/JSString.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -77,7 +77,7 @@
else {
StringImpl* impl = thisObject->m_value.impl();
ASSERT(impl);
- visitor.reportExtraMemoryUsage(thisObject, impl->costDuringGC());
+ visitor.reportExtraMemoryVisited(thisObject, impl->costDuringGC());
}
}
@@ -181,7 +181,7 @@
// If we resolved a string that didn't previously exist, notify the heap that we've grown.
if (m_value.impl()->hasOneRef())
- Heap::heap(this)->reportExtraMemoryCost(m_value.impl()->cost());
+ Heap::heap(this)->reportExtraMemoryAllocated(m_value.impl()->cost());
}
void JSRopeString::clearFibers() const
@@ -240,7 +240,7 @@
if (is8Bit()) {
LChar* buffer;
if (RefPtr<StringImpl> newImpl = StringImpl::tryCreateUninitialized(m_length, buffer)) {
- Heap::heap(this)->reportExtraMemoryCost(newImpl->cost());
+ Heap::heap(this)->reportExtraMemoryAllocated(newImpl->cost());
m_value = newImpl.release();
} else {
outOfMemory(exec);
@@ -254,7 +254,7 @@
UChar* buffer;
if (RefPtr<StringImpl> newImpl = StringImpl::tryCreateUninitialized(m_length, buffer)) {
- Heap::heap(this)->reportExtraMemoryCost(newImpl->cost());
+ Heap::heap(this)->reportExtraMemoryAllocated(newImpl->cost());
m_value = newImpl.release();
} else {
outOfMemory(exec);
Modified: trunk/Source/_javascript_Core/runtime/JSString.h (181406 => 181407)
--- trunk/Source/_javascript_Core/runtime/JSString.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/runtime/JSString.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -107,7 +107,7 @@
Base::finishCreation(vm);
m_length = length;
setIs8Bit(m_value.impl()->is8Bit());
- Heap::heap(this)->reportExtraMemoryCost(cost);
+ Heap::heap(this)->reportExtraMemoryAllocated(cost);
vm.m_newStringsSinceLastHashCons++;
}
Modified: trunk/Source/_javascript_Core/runtime/SparseArrayValueMap.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/runtime/SparseArrayValueMap.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/runtime/SparseArrayValueMap.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -80,7 +80,9 @@
AddResult result = m_map.add(i, entry);
size_t capacity = m_map.capacity();
if (capacity != m_reportedCapacity) {
- Heap::heap(array)->reportExtraMemoryCost((capacity - m_reportedCapacity) * (sizeof(unsigned) + sizeof(WriteBarrier<Unknown>)));
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ Heap::heap(array)->reportExtraMemoryAllocated((capacity - m_reportedCapacity) * (sizeof(unsigned) + sizeof(WriteBarrier<Unknown>)));
m_reportedCapacity = capacity;
}
return result;
Modified: trunk/Source/_javascript_Core/runtime/WeakMapData.cpp (181406 => 181407)
--- trunk/Source/_javascript_Core/runtime/WeakMapData.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/_javascript_Core/runtime/WeakMapData.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -64,7 +64,7 @@
// Rough approximation of the external storage needed for the hashtable.
// This isn't exact, but it is close enough, and proportional to the actual
// external mermory usage.
- visitor.reportExtraMemoryUsage(thisObj, thisObj->m_map.capacity() * (sizeof(JSObject*) + sizeof(WriteBarrier<Unknown>)));
+ visitor.reportExtraMemoryVisited(thisObj, thisObj->m_map.capacity() * (sizeof(JSObject*) + sizeof(WriteBarrier<Unknown>)));
}
void WeakMapData::set(VM& vm, JSObject* key, JSValue value)
Modified: trunk/Source/WebCore/ChangeLog (181406 => 181407)
--- trunk/Source/WebCore/ChangeLog 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/ChangeLog 2015-03-11 21:29:57 UTC (rev 181407)
@@ -1,3 +1,45 @@
+2015-03-11 Geoffrey Garen <gga...@apple.com>
+
+ Refactored the JSC::Heap extra cost API for clarity and to make some known bugs more obvious
+ https://bugs.webkit.org/show_bug.cgi?id=142589
+
+ Reviewed by Andreas Kling.
+
+ Updated for renames to JSC extra cost APIs.
+
+ Added FIXMEs to our 10 use cases that are currently wrong, including
+ canvas, which is the cause of https://bugs.webkit.org/show_bug.cgi?id=142457.
+
+ * Modules/mediasource/SourceBuffer.cpp:
+ (WebCore::SourceBuffer::appendBufferInternal):
+ (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
+ (WebCore::SourceBuffer::reportExtraMemoryAllocated):
+ (WebCore::SourceBuffer::reportExtraMemoryCost): Deleted.
+ * Modules/mediasource/SourceBuffer.h:
+ * bindings/js/JSDocumentCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSNodeListCustom.cpp:
+ (WebCore::createWrapper):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateImplementation):
+ * dom/CollectionIndexCache.cpp:
+ (WebCore::reportExtraMemoryAllocatedForCollectionIndexCache):
+ (WebCore::reportExtraMemoryCostForCollectionIndexCache): Deleted.
+ * dom/CollectionIndexCache.h:
+ (WebCore::Iterator>::computeNodeCountUpdatingListCache):
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::createImageBuffer):
+ * html/HTMLCollection.h:
+ (WebCore::CollectionNamedElementCache::didPopulate):
+ * html/HTMLImageLoader.cpp:
+ (WebCore::HTMLImageLoader::imageChanged):
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::parseAttribute):
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::dropProtection):
+
2015-03-11 Benjamin Poulain <bpoul...@apple.com>
Add basic support for BOL and EOL assertions to the URL Filter parser
Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (181406 => 181407)
--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -581,7 +581,7 @@
// 6. Asynchronously run the buffer append algorithm.
m_appendBufferTimer.startOneShot(0);
- reportExtraMemoryCost();
+ reportExtraMemoryAllocated();
}
void SourceBuffer::appendBufferTimerFired()
@@ -667,7 +667,7 @@
provideMediaData(trackBuffer, trackID);
}
- reportExtraMemoryCost();
+ reportExtraMemoryAllocated();
if (extraMemoryCost() > this->maximumBufferSize())
m_bufferFull = true;
@@ -1988,7 +1988,7 @@
return extraMemoryCost;
}
-void SourceBuffer::reportExtraMemoryCost()
+void SourceBuffer::reportExtraMemoryAllocated()
{
size_t extraMemoryCost = this->extraMemoryCost();
if (extraMemoryCost < m_reportedExtraMemoryCost)
@@ -1998,8 +1998,11 @@
m_reportedExtraMemoryCost = extraMemoryCost;
JSC::JSLockHolder lock(scriptExecutionContext()->vm());
- if (extraMemoryCostDelta > 0)
- scriptExecutionContext()->vm().heap.reportExtraMemoryCost(extraMemoryCostDelta);
+ if (extraMemoryCostDelta > 0) {
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ scriptExecutionContext()->vm().heap.reportExtraMemoryAllocated(extraMemoryCostDelta);
+ }
}
Vector<String> SourceBuffer::bufferedSamplesForTrackID(const AtomicString& trackID)
Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h (181406 => 181407)
--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -192,7 +192,7 @@
void removeCodedFrames(const MediaTime& start, const MediaTime& end);
size_t extraMemoryCost() const;
- void reportExtraMemoryCost();
+ void reportExtraMemoryAllocated();
std::unique_ptr<PlatformTimeRanges> bufferedAccountingForEndOfStream() const;
Modified: trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp (181406 => 181407)
--- trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -109,7 +109,9 @@
for (Node* n = document; n; n = NodeTraversal::next(*n))
nodeCount++;
- exec->heap()->reportExtraMemoryCost(nodeCount * sizeof(Node));
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ exec->heap()->reportExtraMemoryAllocated(nodeCount * sizeof(Node));
}
return wrapper;
Modified: trunk/Source/WebCore/bindings/js/JSImageDataCustom.cpp (181406 => 181407)
--- trunk/Source/WebCore/bindings/js/JSImageDataCustom.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/bindings/js/JSImageDataCustom.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -47,7 +47,9 @@
wrapper = CREATE_DOM_WRAPPER(globalObject, ImageData, imageData);
Identifier dataName(exec, "data");
wrapper->putDirect(exec->vm(), dataName, toJS(exec, globalObject, imageData->data()), DontDelete | ReadOnly);
- exec->heap()->reportExtraMemoryCost(imageData->data()->length());
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ exec->heap()->reportExtraMemoryAllocated(imageData->data()->length());
return wrapper;
}
Modified: trunk/Source/WebCore/bindings/js/JSNodeListCustom.cpp (181406 => 181407)
--- trunk/Source/WebCore/bindings/js/JSNodeListCustom.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/bindings/js/JSNodeListCustom.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -62,7 +62,9 @@
JSC::JSValue createWrapper(JSDOMGlobalObject& globalObject, NodeList& nodeList)
{
- globalObject.vm().heap.reportExtraMemoryCost(nodeList.memoryCost());
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ globalObject.vm().heap.reportExtraMemoryAllocated(nodeList.memoryCost());
return createNewWrapper<JSNodeList>(&globalObject, &nodeList);
}
Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (181406 => 181407)
--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2015-03-11 21:29:57 UTC (rev 181407)
@@ -2865,7 +2865,7 @@
}
push(@implContent, " thisObject->visitAdditionalChildren(visitor);\n") if $interface->extendedAttributes->{"JSCustomMarkFunction"};
if ($interface->extendedAttributes->{"ReportExtraMemoryCost"}) {
- push(@implContent, " visitor.reportExtraMemoryUsage(cell, thisObject->impl().memoryCost());\n");
+ push(@implContent, " visitor.reportExtraMemoryVisited(cell, thisObject->impl().memoryCost());\n");
}
if ($numCachedAttributes > 0) {
foreach (@{$interface->attributes}) {
@@ -3080,7 +3080,7 @@
#endif
END
push(@implContent, <<END) if $interface->extendedAttributes->{"ReportExtraMemoryCost"};
- globalObject->vm().heap.reportExtraMemoryCost(impl->memoryCost());
+ globalObject->vm().heap.reportExtraMemoryAllocated(impl->memoryCost());
END
if ($svgPropertyType) {
Modified: trunk/Source/WebCore/dom/CollectionIndexCache.cpp (181406 => 181407)
--- trunk/Source/WebCore/dom/CollectionIndexCache.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/dom/CollectionIndexCache.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -30,11 +30,13 @@
namespace WebCore {
-void reportExtraMemoryCostForCollectionIndexCache(size_t cost)
+void reportExtraMemoryAllocatedForCollectionIndexCache(size_t cost)
{
JSC::VM& vm = JSDOMWindowBase::commonVM();
JSC::JSLockHolder lock(vm);
- vm.heap.reportExtraMemoryCost(cost);
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ vm.heap.reportExtraMemoryAllocated(cost);
}
}
Modified: trunk/Source/WebCore/dom/CollectionIndexCache.h (181406 => 181407)
--- trunk/Source/WebCore/dom/CollectionIndexCache.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/dom/CollectionIndexCache.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -30,7 +30,7 @@
namespace WebCore {
-void reportExtraMemoryCostForCollectionIndexCache(size_t);
+void reportExtraMemoryAllocatedForCollectionIndexCache(size_t);
template <class Collection, class Iterator>
class CollectionIndexCache {
@@ -100,7 +100,7 @@
m_listValid = true;
if (unsigned capacityDifference = m_cachedList.capacity() - oldCapacity)
- reportExtraMemoryCostForCollectionIndexCache(capacityDifference * sizeof(NodeType*));
+ reportExtraMemoryAllocatedForCollectionIndexCache(capacityDifference * sizeof(NodeType*));
return m_cachedList.size();
}
Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (181406 => 181407)
--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -576,7 +576,9 @@
JSC::JSLockHolder lock(scriptExecutionContext()->vm());
size_t numBytes = 4 * m_imageBuffer->internalSize().width() * m_imageBuffer->internalSize().height();
- scriptExecutionContext()->vm().heap.reportExtraMemoryCost(numBytes);
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ scriptExecutionContext()->vm().heap.reportExtraMemoryAllocated(numBytes);
#if USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS)
if (m_context && m_context->is2d())
Modified: trunk/Source/WebCore/html/HTMLCollection.h (181406 => 181407)
--- trunk/Source/WebCore/html/HTMLCollection.h 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/html/HTMLCollection.h 2015-03-11 21:29:57 UTC (rev 181407)
@@ -160,7 +160,7 @@
m_didPopulate = true;
#endif
if (size_t cost = memoryCost())
- reportExtraMemoryCostForCollectionIndexCache(cost);
+ reportExtraMemoryAllocatedForCollectionIndexCache(cost);
}
inline const Vector<Element*>* CollectionNamedElementCache::find(const StringToElementsMap& map, const AtomicString& key) const
Modified: trunk/Source/WebCore/html/HTMLImageLoader.cpp (181406 => 181407)
--- trunk/Source/WebCore/html/HTMLImageLoader.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/html/HTMLImageLoader.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -88,7 +88,9 @@
if (!element().inDocument()) {
JSC::VM& vm = JSDOMWindowBase::commonVM();
JSC::JSLockHolder lock(vm);
- vm.heap.reportExtraMemoryCost(cachedImage->encodedSize());
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ vm.heap.reportExtraMemoryAllocated(cachedImage->encodedSize());
}
}
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (181406 => 181407)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -636,8 +636,11 @@
size_t extraMemoryCostDelta = extraMemoryCost - m_reportedExtraMemoryCost;
m_reportedExtraMemoryCost = extraMemoryCost;
- if (extraMemoryCostDelta > 0)
- vm.heap.reportExtraMemoryCost(extraMemoryCostDelta);
+ if (extraMemoryCostDelta > 0) {
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ vm.heap.reportExtraMemoryAllocated(extraMemoryCostDelta);
+ }
}
}
Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (181406 => 181407)
--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp 2015-03-11 21:14:27 UTC (rev 181406)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp 2015-03-11 21:29:57 UTC (rev 181407)
@@ -913,7 +913,9 @@
// report the extra cost at that point.
JSC::VM& vm = scriptExecutionContext()->vm();
JSC::JSLockHolder lock(vm);
- vm.heap.reportExtraMemoryCost(m_responseBuilder.length() * 2);
+ // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
+ // https://bugs.webkit.org/show_bug.cgi?id=142593
+ vm.heap.reportExtraMemoryAllocated(m_responseBuilder.length() * 2);
unsetPendingActivity(this);
}