Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(688)

Side by Side Diff: test/cctest/test-heap.cc

Issue 11416200: Make unit tests that fill new-space work under stress. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 2
3 #include <stdlib.h> 3 #include <stdlib.h>
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #include "compilation-cache.h" 7 #include "compilation-cache.h"
8 #include "execution.h" 8 #include "execution.h"
9 #include "factory.h" 9 #include "factory.h"
10 #include "macro-assembler.h" 10 #include "macro-assembler.h"
(...skipping 1926 matching lines...) Expand 10 before | Expand all | Expand 10 after
1937 } 1937 }
1938 1938
1939 1939
1940 // Test that HAllocateObject will always return an object in new-space. 1940 // Test that HAllocateObject will always return an object in new-space.
1941 TEST(OptimizedAllocationAlwaysInNewSpace) { 1941 TEST(OptimizedAllocationAlwaysInNewSpace) {
1942 i::FLAG_allow_natives_syntax = true; 1942 i::FLAG_allow_natives_syntax = true;
1943 InitializeVM(); 1943 InitializeVM();
1944 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; 1944 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
1945 v8::HandleScope scope; 1945 v8::HandleScope scope;
1946 1946
1947 FillUpNewSpace(HEAP->new_space()); 1947 SimulateFullSpace(HEAP->new_space());
1948 AlwaysAllocateScope always_allocate; 1948 AlwaysAllocateScope always_allocate;
1949 v8::Local<v8::Value> res = CompileRun( 1949 v8::Local<v8::Value> res = CompileRun(
1950 "function c(x) {" 1950 "function c(x) {"
1951 " this.x = x;" 1951 " this.x = x;"
1952 " for (var i = 0; i < 32; i++) {" 1952 " for (var i = 0; i < 32; i++) {"
1953 " this['x' + i] = x;" 1953 " this['x' + i] = x;"
1954 " }" 1954 " }"
1955 "}" 1955 "}"
1956 "function f(x) { return new c(x); };" 1956 "function f(x) { return new c(x); };"
1957 "f(1); f(2); f(3);" 1957 "f(1); f(2); f(3);"
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2146 { 2146 {
2147 // Generate a parent that lives in new-space. 2147 // Generate a parent that lives in new-space.
2148 v8::HandleScope inner_scope; 2148 v8::HandleScope inner_scope;
2149 const char* c = "This text is long enough to trigger sliced strings."; 2149 const char* c = "This text is long enough to trigger sliced strings.";
2150 Handle<String> s = FACTORY->NewStringFromAscii(CStrVector(c)); 2150 Handle<String> s = FACTORY->NewStringFromAscii(CStrVector(c));
2151 CHECK(s->IsSeqOneByteString()); 2151 CHECK(s->IsSeqOneByteString());
2152 CHECK(HEAP->InNewSpace(*s)); 2152 CHECK(HEAP->InNewSpace(*s));
2153 2153
2154 // Generate a sliced string that is based on the above parent and 2154 // Generate a sliced string that is based on the above parent and
2155 // lives in old-space. 2155 // lives in old-space.
2156 FillUpNewSpace(HEAP->new_space()); 2156 SimulateFullSpace(HEAP->new_space());
2157 AlwaysAllocateScope always_allocate; 2157 AlwaysAllocateScope always_allocate;
2158 Handle<String> t; 2158 Handle<String> t = FACTORY->NewProperSubString(s, 5, 35);
2159 // TODO(mstarzinger): Unfortunately FillUpNewSpace() still leaves
2160 // some slack, so we need to allocate a few sliced strings.
2161 for (int i = 0; i < 16; i++) {
2162 t = FACTORY->NewProperSubString(s, 5, 35);
2163 }
2164 CHECK(t->IsSlicedString()); 2159 CHECK(t->IsSlicedString());
2165 CHECK(!HEAP->InNewSpace(*t)); 2160 CHECK(!HEAP->InNewSpace(*t));
2166 *slice.location() = *t.location(); 2161 *slice.location() = *t.location();
2167 } 2162 }
2168 2163
2169 CHECK(SlicedString::cast(*slice)->parent()->IsSeqOneByteString()); 2164 CHECK(SlicedString::cast(*slice)->parent()->IsSeqOneByteString());
2170 HEAP->CollectAllGarbage(Heap::kNoGCFlags); 2165 HEAP->CollectAllGarbage(Heap::kNoGCFlags);
2171 CHECK(SlicedString::cast(*slice)->parent()->IsSeqOneByteString()); 2166 CHECK(SlicedString::cast(*slice)->parent()->IsSeqOneByteString());
2172 } 2167 }
2173 2168
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
2502 Handle<Object> call_function(call); 2497 Handle<Object> call_function(call);
2503 2498
2504 // Now we are ready to mess up the heap. 2499 // Now we are ready to mess up the heap.
2505 HEAP->CollectAllGarbage(Heap::kReduceMemoryFootprintMask); 2500 HEAP->CollectAllGarbage(Heap::kReduceMemoryFootprintMask);
2506 2501
2507 // Either heap verification caught the problem already or we go kaboom once 2502 // Either heap verification caught the problem already or we go kaboom once
2508 // the CallIC is executed the next time. 2503 // the CallIC is executed the next time.
2509 USE(global->SetProperty(*name, *call_function, NONE, kNonStrictMode)); 2504 USE(global->SetProperty(*name, *call_function, NONE, kNonStrictMode));
2510 CompileRun("call();"); 2505 CompileRun("call();");
2511 } 2506 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698