Revision: 17837
Author:   [email protected]
Date:     Mon Nov 18 14:50:45 2013 UTC
Log:      Use mock ArrayBuffer allocator to avoid really allocating 1Gb.

[email protected]
BUG=v8:3014
LOG=N

Review URL: https://codereview.chromium.org/61623009
http://code.google.com/p/v8/source/detail?r=17837

Modified:
 /branches/bleeding_edge/src/d8.cc
 /branches/bleeding_edge/src/d8.h
 /branches/bleeding_edge/test/mjsunit/mjsunit.status
 /branches/bleeding_edge/test/mjsunit/regress/regress-319722-ArrayBuffer.js

=======================================
--- /branches/bleeding_edge/src/d8.cc   Fri Nov 15 16:37:15 2013 UTC
+++ /branches/bleeding_edge/src/d8.cc   Mon Nov 18 14:50:45 2013 UTC
@@ -1364,6 +1364,9 @@
     } else if (strcmp(argv[i], "--stress-deopt") == 0) {
       options.stress_deopt = true;
       argv[i] = NULL;
+    } else if (strcmp(argv[i], "--mock-arraybuffer-allocator") == 0) {
+      options.mock_arraybuffer_allocator = true;
+      argv[i] = NULL;
     } else if (strcmp(argv[i], "--noalways-opt") == 0) {
       // No support for stressing if we can't use --always-opt.
       options.stress_opt = false;
@@ -1673,6 +1676,19 @@
 };


+class MockArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
+ public:
+  virtual void* Allocate(size_t) V8_OVERRIDE {
+    return malloc(0);
+  }
+  virtual void* AllocateUninitialized(size_t length) V8_OVERRIDE {
+    return malloc(0);
+  }
+  virtual void Free(void*, size_t) V8_OVERRIDE {
+  }
+};
+
+
 int Shell::Main(int argc, char* argv[]) {
   if (!SetOptions(argc, argv)) return 1;
   v8::V8::InitializeICU();
@@ -1683,7 +1699,12 @@
   SetStandaloneFlagsViaCommandLine();
 #endif
   ShellArrayBufferAllocator array_buffer_allocator;
-  v8::V8::SetArrayBufferAllocator(&array_buffer_allocator);
+  MockArrayBufferAllocator mock_arraybuffer_allocator;
+  if (options.mock_arraybuffer_allocator) {
+    v8::V8::SetArrayBufferAllocator(&mock_arraybuffer_allocator);
+  } else {
+    v8::V8::SetArrayBufferAllocator(&array_buffer_allocator);
+  }
   int result = 0;
   Isolate* isolate = Isolate::GetCurrent();
 #ifndef V8_SHARED
=======================================
--- /branches/bleeding_edge/src/d8.h    Thu Oct 24 12:25:40 2013 UTC
+++ /branches/bleeding_edge/src/d8.h    Mon Nov 18 14:50:45 2013 UTC
@@ -233,6 +233,7 @@
      test_shell(false),
      dump_heap_constants(false),
      expected_to_throw(false),
+     mock_arraybuffer_allocator(false),
      num_isolates(1),
      isolate_sources(NULL) { }

@@ -258,6 +259,7 @@
   bool test_shell;
   bool dump_heap_constants;
   bool expected_to_throw;
+  bool mock_arraybuffer_allocator;
   int num_isolates;
   SourceGroup* isolate_sources;
 };
=======================================
--- /branches/bleeding_edge/test/mjsunit/mjsunit.status Fri Nov 15 17:40:21 2013 UTC +++ /branches/bleeding_edge/test/mjsunit/mjsunit.status Mon Nov 18 14:50:45 2013 UTC
@@ -99,10 +99,6 @@
############################################################################## # Long running test that reproduces memory leak and should be run manually.
   'regress/regress-2073': [SKIP],
-
- ##############################################################################
-  # Needs to allocate 1Gb of memory.
- 'regress/regress-319722-ArrayBuffer': [PASS, ['system == windows or system == macos or arch == arm or arch == android_arm or arch == android_ia32', SKIP]],
 }],  # ALWAYS

##############################################################################
=======================================
--- /branches/bleeding_edge/test/mjsunit/regress/regress-319722-ArrayBuffer.js Fri Nov 15 16:37:15 2013 UTC +++ /branches/bleeding_edge/test/mjsunit/regress/regress-319722-ArrayBuffer.js Mon Nov 18 14:50:45 2013 UTC
@@ -25,9 +25,20 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-// Flags: --nostress-opt --allow-natives-syntax
+// Flags: --nostress-opt --allow-natives-syntax --mock-arraybuffer-allocator
 var maxSize = %MaxSmi() + 1;
-var ab = new ArrayBuffer(maxSize);
+var ab;
+
+// Allocate the largest ArrayBuffer we can on this architecture.
+for (k = 8; k >= 1 && ab == null; k = k/2) {
+  try {
+    ab = new ArrayBuffer(maxSize * k);
+  } catch (e) {
+    ab = null;
+  }
+}
+
+assertTrue(ab != null);

 function TestArray(constr) {
   assertThrows(function() {

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to