Diff
Modified: trunk/Source/_javascript_Core/API/JSBase.cpp (181410 => 181411)
--- trunk/Source/_javascript_Core/API/JSBase.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/_javascript_Core/API/JSBase.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -140,9 +140,7 @@
ExecState* exec = toJS(ctx);
JSLockHolder locker(exec);
- // FIXME: switch to deprecatedReportExtraMemory.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- exec->vm().heap.reportExtraMemoryAllocated(size);
+ exec->vm().heap.deprecatedReportExtraMemory(size);
}
extern "C" JS_EXPORT void JSSynchronousGarbageCollectForDebugging(JSContextRef);
Modified: trunk/Source/_javascript_Core/ChangeLog (181410 => 181411)
--- trunk/Source/_javascript_Core/ChangeLog 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-03-11 22:32:19 UTC (rev 181411)
@@ -1,5 +1,24 @@
2015-03-11 Geoffrey Garen <[email protected]>
+ Many users of Heap::reportExtraMemory* are wrong, causing lots of memory growth
+ https://bugs.webkit.org/show_bug.cgi?id=142593
+
+ Reviewed by Andreas Kling.
+
+ Adopt deprecatedReportExtraMemory as a short-term fix for runaway
+ memory growth in these cases where we have not adopted
+ reportExtraMemoryVisited.
+
+ Long-term, we should use reportExtraMemoryAllocated+reportExtraMemoryVisited.
+ That's tracked by https://bugs.webkit.org/show_bug.cgi?id=142595.
+
+ * API/JSBase.cpp:
+ (JSReportExtraMemoryCost):
+ * runtime/SparseArrayValueMap.cpp:
+ (JSC::SparseArrayValueMap::add):
+
+2015-03-11 Geoffrey Garen <[email protected]>
+
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
Modified: trunk/Source/_javascript_Core/runtime/SparseArrayValueMap.cpp (181410 => 181411)
--- trunk/Source/_javascript_Core/runtime/SparseArrayValueMap.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/_javascript_Core/runtime/SparseArrayValueMap.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -80,9 +80,9 @@
AddResult result = m_map.add(i, entry);
size_t capacity = m_map.capacity();
if (capacity != m_reportedCapacity) {
- // 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>)));
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ Heap::heap(array)->deprecatedReportExtraMemory((capacity - m_reportedCapacity) * (sizeof(unsigned) + sizeof(WriteBarrier<Unknown>)));
m_reportedCapacity = capacity;
}
return result;
Modified: trunk/Source/WebCore/ChangeLog (181410 => 181411)
--- trunk/Source/WebCore/ChangeLog 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/ChangeLog 2015-03-11 22:32:19 UTC (rev 181411)
@@ -1,3 +1,39 @@
+2015-03-11 Geoffrey Garen <[email protected]>
+
+ Many users of Heap::reportExtraMemory* are wrong, causing lots of memory growth
+ https://bugs.webkit.org/show_bug.cgi?id=142593
+
+ Reviewed by Andreas Kling.
+
+ Adopt deprecatedReportExtraMemory as a short-term fix for runaway
+ memory growth in these cases where we have not adopted
+ reportExtraMemoryVisited.
+
+ Long-term, we should use reportExtraMemoryAllocated+reportExtraMemoryVisited.
+ That's tracked by https://bugs.webkit.org/show_bug.cgi?id=142595.
+
+ Using IOSDebug, I can see that the canvas stress test @ http://jsfiddle.net/fvyw4ba0/,
+ which used to keep > 1000 1MB NonVolatile GPU allocations live, now keeps about 10 live.
+
+ * Modules/mediasource/SourceBuffer.cpp:
+ (WebCore::SourceBuffer::reportExtraMemoryAllocated):
+ * bindings/js/JSDocumentCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSNodeListCustom.cpp:
+ (WebCore::createWrapper):
+ * dom/CollectionIndexCache.cpp:
+ (WebCore::reportExtraMemoryAllocatedForCollectionIndexCache):
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::createImageBuffer):
+ * html/HTMLImageLoader.cpp:
+ (WebCore::HTMLImageLoader::imageChanged):
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::parseAttribute):
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::dropProtection):
+
2015-03-10 Andy Estes <[email protected]>
REGRESSION (r180985): contentfiltering/block-after-add-data.html crashes with GuardMalloc
Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (181410 => 181411)
--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -1999,9 +1999,9 @@
JSC::JSLockHolder lock(scriptExecutionContext()->vm());
if (extraMemoryCostDelta > 0) {
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- scriptExecutionContext()->vm().heap.reportExtraMemoryAllocated(extraMemoryCostDelta);
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ scriptExecutionContext()->vm().heap.deprecatedReportExtraMemory(extraMemoryCostDelta);
}
}
Modified: trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp (181410 => 181411)
--- trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -109,9 +109,9 @@
for (Node* n = document; n; n = NodeTraversal::next(*n))
nodeCount++;
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- exec->heap()->reportExtraMemoryAllocated(nodeCount * sizeof(Node));
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ exec->heap()->deprecatedReportExtraMemory(nodeCount * sizeof(Node));
}
return wrapper;
Modified: trunk/Source/WebCore/bindings/js/JSImageDataCustom.cpp (181410 => 181411)
--- trunk/Source/WebCore/bindings/js/JSImageDataCustom.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/bindings/js/JSImageDataCustom.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -47,9 +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);
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- exec->heap()->reportExtraMemoryAllocated(imageData->data()->length());
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ exec->heap()->deprecatedReportExtraMemory(imageData->data()->length());
return wrapper;
}
Modified: trunk/Source/WebCore/bindings/js/JSNodeListCustom.cpp (181410 => 181411)
--- trunk/Source/WebCore/bindings/js/JSNodeListCustom.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/bindings/js/JSNodeListCustom.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -62,9 +62,9 @@
JSC::JSValue createWrapper(JSDOMGlobalObject& globalObject, NodeList& nodeList)
{
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- globalObject.vm().heap.reportExtraMemoryAllocated(nodeList.memoryCost());
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ globalObject.vm().heap.deprecatedReportExtraMemory(nodeList.memoryCost());
return createNewWrapper<JSNodeList>(&globalObject, &nodeList);
}
Modified: trunk/Source/WebCore/dom/CollectionIndexCache.cpp (181410 => 181411)
--- trunk/Source/WebCore/dom/CollectionIndexCache.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/dom/CollectionIndexCache.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -34,9 +34,9 @@
{
JSC::VM& vm = JSDOMWindowBase::commonVM();
JSC::JSLockHolder lock(vm);
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- vm.heap.reportExtraMemoryAllocated(cost);
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ vm.heap.deprecatedReportExtraMemory(cost);
}
}
Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (181410 => 181411)
--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -576,9 +576,9 @@
JSC::JSLockHolder lock(scriptExecutionContext()->vm());
size_t numBytes = 4 * m_imageBuffer->internalSize().width() * m_imageBuffer->internalSize().height();
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- scriptExecutionContext()->vm().heap.reportExtraMemoryAllocated(numBytes);
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ scriptExecutionContext()->vm().heap.deprecatedReportExtraMemory(numBytes);
#if USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS)
if (m_context && m_context->is2d())
Modified: trunk/Source/WebCore/html/HTMLImageLoader.cpp (181410 => 181411)
--- trunk/Source/WebCore/html/HTMLImageLoader.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/html/HTMLImageLoader.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -88,9 +88,9 @@
if (!element().inDocument()) {
JSC::VM& vm = JSDOMWindowBase::commonVM();
JSC::JSLockHolder lock(vm);
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- vm.heap.reportExtraMemoryAllocated(cachedImage->encodedSize());
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ vm.heap.deprecatedReportExtraMemory(cachedImage->encodedSize());
}
}
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (181410 => 181411)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -637,9 +637,9 @@
m_reportedExtraMemoryCost = extraMemoryCost;
if (extraMemoryCostDelta > 0) {
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- vm.heap.reportExtraMemoryAllocated(extraMemoryCostDelta);
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ vm.heap.deprecatedReportExtraMemory(extraMemoryCostDelta);
}
}
}
Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (181410 => 181411)
--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp 2015-03-11 22:23:45 UTC (rev 181410)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp 2015-03-11 22:32:19 UTC (rev 181411)
@@ -913,9 +913,9 @@
// report the extra cost at that point.
JSC::VM& vm = scriptExecutionContext()->vm();
JSC::JSLockHolder lock(vm);
- // FIXME: Switch to deprecatedReportExtraMemory, or adopt reportExtraMemoryVisited.
- // https://bugs.webkit.org/show_bug.cgi?id=142593
- vm.heap.reportExtraMemoryAllocated(m_responseBuilder.length() * 2);
+ // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
+ // https://bugs.webkit.org/show_bug.cgi?id=142595
+ vm.heap.deprecatedReportExtraMemory(m_responseBuilder.length() * 2);
unsetPendingActivity(this);
}