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

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

Issue 10918067: Refactoring of snapshots. This simplifies and improves (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 8 years, 3 months 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 | « src/spaces-inl.h ('k') | test/cctest/test-mark-compact.cc » ('j') | 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 "execution.h" 7 #include "execution.h"
8 #include "factory.h" 8 #include "factory.h"
9 #include "macro-assembler.h" 9 #include "macro-assembler.h"
10 #include "global-handles.h" 10 #include "global-handles.h"
(...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 1237
1238 TEST(TestSizeOfObjectsVsHeapIteratorPrecision) { 1238 TEST(TestSizeOfObjectsVsHeapIteratorPrecision) {
1239 InitializeVM(); 1239 InitializeVM();
1240 HEAP->EnsureHeapIsIterable(); 1240 HEAP->EnsureHeapIsIterable();
1241 intptr_t size_of_objects_1 = HEAP->SizeOfObjects(); 1241 intptr_t size_of_objects_1 = HEAP->SizeOfObjects();
1242 HeapIterator iterator; 1242 HeapIterator iterator;
1243 intptr_t size_of_objects_2 = 0; 1243 intptr_t size_of_objects_2 = 0;
1244 for (HeapObject* obj = iterator.next(); 1244 for (HeapObject* obj = iterator.next();
1245 obj != NULL; 1245 obj != NULL;
1246 obj = iterator.next()) { 1246 obj = iterator.next()) {
1247 size_of_objects_2 += obj->Size(); 1247 if (!obj->IsFreeSpace()) {
1248 size_of_objects_2 += obj->Size();
1249 }
1248 } 1250 }
1249 // Delta must be within 5% of the larger result. 1251 // Delta must be within 5% of the larger result.
1250 // TODO(gc): Tighten this up by distinguishing between byte 1252 // TODO(gc): Tighten this up by distinguishing between byte
1251 // arrays that are real and those that merely mark free space 1253 // arrays that are real and those that merely mark free space
1252 // on the heap. 1254 // on the heap.
1253 if (size_of_objects_1 > size_of_objects_2) { 1255 if (size_of_objects_1 > size_of_objects_2) {
1254 intptr_t delta = size_of_objects_1 - size_of_objects_2; 1256 intptr_t delta = size_of_objects_1 - size_of_objects_2;
1255 PrintF("Heap::SizeOfObjects: %" V8_PTR_PREFIX "d, " 1257 PrintF("Heap::SizeOfObjects: %" V8_PTR_PREFIX "d, "
1256 "Iterator: %" V8_PTR_PREFIX "d, " 1258 "Iterator: %" V8_PTR_PREFIX "d, "
1257 "delta: %" V8_PTR_PREFIX "d\n", 1259 "delta: %" V8_PTR_PREFIX "d\n",
1258 size_of_objects_1, size_of_objects_2, delta); 1260 size_of_objects_1, size_of_objects_2, delta);
1259 CHECK_GT(size_of_objects_1 / 20, delta); 1261 CHECK_GT(size_of_objects_1 / 20, delta);
1260 } else { 1262 } else {
1261 intptr_t delta = size_of_objects_2 - size_of_objects_1; 1263 intptr_t delta = size_of_objects_2 - size_of_objects_1;
1262 PrintF("Heap::SizeOfObjects: %" V8_PTR_PREFIX "d, " 1264 PrintF("Heap::SizeOfObjects: %" V8_PTR_PREFIX "d, "
1263 "Iterator: %" V8_PTR_PREFIX "d, " 1265 "Iterator: %" V8_PTR_PREFIX "d, "
1264 "delta: %" V8_PTR_PREFIX "d\n", 1266 "delta: %" V8_PTR_PREFIX "d\n",
1265 size_of_objects_1, size_of_objects_2, delta); 1267 size_of_objects_1, size_of_objects_2, delta);
1266 CHECK_GT(size_of_objects_2 / 20, delta); 1268 CHECK_GT(size_of_objects_2 / 20, delta);
1267 } 1269 }
1268 } 1270 }
1269 1271
1270 1272
1271 static void FillUpNewSpace(NewSpace* new_space) { 1273 static void FillUpNewSpace(NewSpace* new_space) {
1272 // Fill up new space to the point that it is completely full. Make sure 1274 // Fill up new space to the point that it is completely full. Make sure
1273 // that the scavenger does not undo the filling. 1275 // that the scavenger does not undo the filling.
1274 v8::HandleScope scope; 1276 v8::HandleScope scope;
1275 AlwaysAllocateScope always_allocate; 1277 AlwaysAllocateScope always_allocate;
1276 LinearAllocationScope allocate_linearly;
1277 intptr_t available = new_space->EffectiveCapacity() - new_space->Size(); 1278 intptr_t available = new_space->EffectiveCapacity() - new_space->Size();
1278 intptr_t number_of_fillers = (available / FixedArray::SizeFor(32)) - 1; 1279 intptr_t number_of_fillers = (available / FixedArray::SizeFor(32)) - 1;
1279 for (intptr_t i = 0; i < number_of_fillers; i++) { 1280 for (intptr_t i = 0; i < number_of_fillers; i++) {
1280 CHECK(HEAP->InNewSpace(*FACTORY->NewFixedArray(32, NOT_TENURED))); 1281 CHECK(HEAP->InNewSpace(*FACTORY->NewFixedArray(32, NOT_TENURED)));
1281 } 1282 }
1282 } 1283 }
1283 1284
1284 1285
1285 TEST(GrowAndShrinkNewSpace) { 1286 TEST(GrowAndShrinkNewSpace) {
1286 InitializeVM(); 1287 InitializeVM();
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1921 HEAP->CollectAllGarbage(Heap::kNoGCFlags, "triggered for preparation"); 1922 HEAP->CollectAllGarbage(Heap::kNoGCFlags, "triggered for preparation");
1922 CHECK_EQ(number_of_test_pages + 1, old_pointer_space->CountTotalPages()); 1923 CHECK_EQ(number_of_test_pages + 1, old_pointer_space->CountTotalPages());
1923 1924
1924 // Triggering subsequent GCs should cause at least half of the pages 1925 // Triggering subsequent GCs should cause at least half of the pages
1925 // to be released to the OS after at most two cycles. 1926 // to be released to the OS after at most two cycles.
1926 HEAP->CollectAllGarbage(Heap::kNoGCFlags, "triggered by test 1"); 1927 HEAP->CollectAllGarbage(Heap::kNoGCFlags, "triggered by test 1");
1927 CHECK_GE(number_of_test_pages + 1, old_pointer_space->CountTotalPages()); 1928 CHECK_GE(number_of_test_pages + 1, old_pointer_space->CountTotalPages());
1928 HEAP->CollectAllGarbage(Heap::kNoGCFlags, "triggered by test 2"); 1929 HEAP->CollectAllGarbage(Heap::kNoGCFlags, "triggered by test 2");
1929 CHECK_GE(number_of_test_pages + 1, old_pointer_space->CountTotalPages() * 2); 1930 CHECK_GE(number_of_test_pages + 1, old_pointer_space->CountTotalPages() * 2);
1930 1931
1931 // Triggering a last-resort GC should cause all pages to be released 1932 // Triggering a last-resort GC should cause all pages to be released to the
1932 // to the OS so that other processes can seize the memory. 1933 // OS so that other processes can seize the memory. If we get a failure here
1934 // where there are 2 pages left instead of 1, then we should increase the
1935 // size of the first page a little in SizeOfFirstPage in spaces.cc. The
1936 // first page should be small in order to reduce memory used when the VM
1937 // boots, but if the 20 small arrays don't fit on the first page then that's
1938 // an indication that it is too small.
1933 HEAP->CollectAllAvailableGarbage("triggered really hard"); 1939 HEAP->CollectAllAvailableGarbage("triggered really hard");
1934 CHECK_EQ(1, old_pointer_space->CountTotalPages()); 1940 CHECK_EQ(1, old_pointer_space->CountTotalPages());
1935 } 1941 }
1936 1942
1937 1943
1938 TEST(Regress2237) { 1944 TEST(Regress2237) {
1939 InitializeVM(); 1945 InitializeVM();
1940 v8::HandleScope scope; 1946 v8::HandleScope scope;
1941 Handle<String> slice(HEAP->empty_string()); 1947 Handle<String> slice(HEAP->empty_string());
1942 1948
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
2231 // External source is being retained by the stack trace. 2237 // External source is being retained by the stack trace.
2232 CHECK(!resource->IsDisposed()); 2238 CHECK(!resource->IsDisposed());
2233 2239
2234 CompileRun("error.stack; error.stack;"); 2240 CompileRun("error.stack; error.stack;");
2235 HEAP->CollectAllAvailableGarbage(); 2241 HEAP->CollectAllAvailableGarbage();
2236 // External source has been released. 2242 // External source has been released.
2237 CHECK(resource->IsDisposed()); 2243 CHECK(resource->IsDisposed());
2238 2244
2239 delete resource; 2245 delete resource;
2240 } 2246 }
OLDNEW
« no previous file with comments | « src/spaces-inl.h ('k') | test/cctest/test-mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698