Index: test/cctest/test-heap.cc |
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
index c3094a43b3dc7caeffb0641a3871acc35ec9c48c..ae3c1d365c4a3368d0f3ebdfafba323f342c7171 100644 |
--- a/test/cctest/test-heap.cc |
+++ b/test/cctest/test-heap.cc |
@@ -5093,3 +5093,25 @@ TEST(PathTracer) { |
CcTest::i_isolate()->heap()->TracePathToObject(*o); |
} |
#endif // DEBUG |
+ |
+ |
+TEST(FirstPageFitsStartup) { |
+ // Test that the first page sizes provided by the default snapshot are large |
+ // enough to fit everything right after startup and creating one context. |
+ // If this test fails, we are allocating too much aside from deserialization. |
+ if (!Snapshot::HaveASnapshotToStartFrom()) return; |
+ if (Snapshot::EmbedsScript()) return; |
+ CcTest::InitializeVM(); |
+ LocalContext env; |
+ PagedSpaces spaces(CcTest::heap()); |
+ for (PagedSpace* s = spaces.next(); s != NULL; s = spaces.next()) { |
+ uint32_t default_size = s->AreaSize(); |
+ uint32_t reduced_size = Snapshot::SizeOfFirstPage(s->identity()); |
+ if (reduced_size == default_size) continue; |
+ int counter = 0; |
+ Page* page = NULL; |
+ for (PageIterator it(s); it.has_next(); page = it.next()) counter++; |
+ CHECK_LE(counter, 1); |
+ CHECK(static_cast<uint32_t>(page->area_size()) == reduced_size); |
+ } |
+} |