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.