Commit 4228132e authored by dslomov@chromium.org's avatar dslomov@chromium.org

Use mock ArrayBuffer allocator to avoid really allocating 1Gb.

R=jkummerow@chromium.org
BUG=v8:3014
LOG=N

Review URL: https://codereview.chromium.org/61623009

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17837 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent ec9a9ac1
......@@ -1364,6 +1364,9 @@ bool Shell::SetOptions(int argc, char* argv[]) {
} 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 ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
};
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 @@ int Shell::Main(int argc, char* argv[]) {
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
......
......@@ -233,6 +233,7 @@ class ShellOptions {
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 @@ class ShellOptions {
bool test_shell;
bool dump_heap_constants;
bool expected_to_throw;
bool mock_arraybuffer_allocator;
int num_isolates;
SourceGroup* isolate_sources;
};
......
......@@ -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
##############################################################################
......
......@@ -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() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment