Title: [134934] trunk
Revision
134934
Author
commit-qu...@webkit.org
Date
2012-11-16 05:19:56 -0800 (Fri, 16 Nov 2012)

Log Message

[V8] Increment the amount of externally allocated memory for the receiving V8 isolate when transferring ArrayBuffer
https://bugs.webkit.org/show_bug.cgi?id=94463

Patch by Ulan Degenbaev <u...@chromium.org> on 2012-11-16
Reviewed by Kentaro Hara.

Call AdjustAmountOfExternalAllocatedMemory when V8ArrayBuffer is deserialized and transferred.

.:

* ManualTests/typed-array-memory.html:

Source/WebCore:

Test: ManualTests/typed-array-memory.html

* bindings/v8/SerializedScriptValue.cpp:

Modified Paths

Diff

Modified: trunk/ChangeLog (134933 => 134934)


--- trunk/ChangeLog	2012-11-16 12:53:42 UTC (rev 134933)
+++ trunk/ChangeLog	2012-11-16 13:19:56 UTC (rev 134934)
@@ -1,3 +1,14 @@
+2012-11-16  Ulan Degenbaev  <u...@chromium.org>
+
+        [V8] Increment the amount of externally allocated memory for the receiving V8 isolate when transferring ArrayBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=94463
+
+        Reviewed by Kentaro Hara.
+
+        Call AdjustAmountOfExternalAllocatedMemory when V8ArrayBuffer is deserialized and transferred.
+
+        * ManualTests/typed-array-memory.html:
+
 2012-11-16  Sheriff Bot  <webkit.review....@gmail.com>
 
         Unreviewed, rolling out r134908.

Modified: trunk/ManualTests/typed-array-memory.html (134933 => 134934)


--- trunk/ManualTests/typed-array-memory.html	2012-11-16 12:53:42 UTC (rev 134933)
+++ trunk/ManualTests/typed-array-memory.html	2012-11-16 13:19:56 UTC (rev 134934)
@@ -136,16 +136,18 @@
 "function externalMemory() {\n" +
 "    return getV8Statistics().amount_of_external_allocated_memory;\n" +
 "}\n" +
-"function collectGarbage() {\n" +
-"    for (var i = 0; i < 10; i++) gc();\n" +
-"}\n" +
-"var before = externalMemory();\n" +
+"var KB = 1024;\n" +
+"var MB = KB * KB;\n" +
+"var noise = KB;\n" +
 "self._onmessage_ = function(e) {\n" +
-"    var now = externalMemory();\n" +
-"    e.data = "" +
-"    collectGarbage();\n" +
+"    var before = externalMemory();\n" +
+"    e.data;\n" +
 "    var after = externalMemory();\n" +
-"    self.postMessage(before + ' ' + now + ' ' + after);\n" +
+"    if (after > before + MB - noise) {\n" +
+"      self.postMessage('PASS: Amount of external memory increased.');\n" +
+"    } else {\n" +
+"      self.postMessage('FAIL: Amount of external memory did not increase.');\n" +
+"    }\n" +
 "}\n";
 
     var blob = new Blob([workerSource]);
@@ -158,7 +160,7 @@
         var buffer = eval(_expression_);
         try {
             var before = externalMemory();
-            worker.webkitPostMessage(buffer, [buffer]);
+            worker.postMessage(buffer, [buffer]);
             var now = externalMemory();
             if (now > before - MB + noise) {
                 fail("Transfer of " + _expression_ + " did not decrease the amount of external memory (" +

Modified: trunk/Source/WebCore/ChangeLog (134933 => 134934)


--- trunk/Source/WebCore/ChangeLog	2012-11-16 12:53:42 UTC (rev 134933)
+++ trunk/Source/WebCore/ChangeLog	2012-11-16 13:19:56 UTC (rev 134934)
@@ -1,3 +1,16 @@
+2012-11-16  Ulan Degenbaev  <u...@chromium.org>
+
+        [V8] Increment the amount of externally allocated memory for the receiving V8 isolate when transferring ArrayBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=94463
+
+        Reviewed by Kentaro Hara.
+
+        Call AdjustAmountOfExternalAllocatedMemory when V8ArrayBuffer is deserialized and transferred.
+
+        Test: ManualTests/typed-array-memory.html
+
+        * bindings/v8/SerializedScriptValue.cpp:
+
 2012-11-16  Sheriff Bot  <webkit.review....@gmail.com>
 
         Unreviewed, rolling out r134694.

Modified: trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp (134933 => 134934)


--- trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp	2012-11-16 12:53:42 UTC (rev 134933)
+++ trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp	2012-11-16 13:19:56 UTC (rev 134934)
@@ -41,6 +41,7 @@
 #include "MessagePort.h"
 #include "SharedBuffer.h"
 #include "V8ArrayBuffer.h"
+#include "V8ArrayBufferCustom.h"
 #include "V8ArrayBufferView.h"
 #include "V8Binding.h"
 #include "V8Blob.h"
@@ -1647,6 +1648,8 @@
             return 0;
         const void* bufferStart = m_buffer + m_position;
         RefPtr<ArrayBuffer> arrayBuffer = ArrayBuffer::create(bufferStart, byteLength);
+        arrayBuffer->setDeallocationObserver(V8ArrayBufferDeallocationObserver::instance());
+        v8::V8::AdjustAmountOfExternalAllocatedMemory(arrayBuffer->byteLength());
         m_position += byteLength;
         return arrayBuffer.release();
     }
@@ -2034,7 +2037,10 @@
             return false;
         v8::Handle<v8::Object> result = m_arrayBuffers.at(index);
         if (result.IsEmpty()) {
-            result = toV8Object(ArrayBuffer::create(m_arrayBufferContents->at(index)).get(), v8::Handle<v8::Object>(), m_reader.getIsolate());
+            RefPtr<ArrayBuffer> buffer = ArrayBuffer::create(m_arrayBufferContents->at(index));
+            buffer->setDeallocationObserver(V8ArrayBufferDeallocationObserver::instance());
+            v8::V8::AdjustAmountOfExternalAllocatedMemory(buffer->byteLength());
+            result = toV8Object(buffer.get(), v8::Handle<v8::Object>(), m_reader.getIsolate());
             m_arrayBuffers[index] = result;
         }
         *object = result;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to