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

Unified Diff: src/snapshot/snapshot-common.cc

Issue 2278653003: Reland of "[heap] Switch to 500k pages" (Closed)
Patch Set: Rebase Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/snapshot/snapshot.h ('k') | test/cctest/heap/heap-utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/snapshot/snapshot-common.cc
diff --git a/src/snapshot/snapshot-common.cc b/src/snapshot/snapshot-common.cc
index fed45d16b6c3528d241284765bbeb8631c489617..959ac56fa98aa6a182062c76126f53e24c6bb193 100644
--- a/src/snapshot/snapshot-common.cc
+++ b/src/snapshot/snapshot-common.cc
@@ -31,19 +31,6 @@ bool Snapshot::HasContextSnapshot(Isolate* isolate, size_t index) {
return index < num_contexts;
}
-
-uint32_t Snapshot::SizeOfFirstPage(Isolate* isolate, AllocationSpace space) {
- DCHECK(space >= FIRST_PAGED_SPACE && space <= LAST_PAGED_SPACE);
- if (!isolate->snapshot_available()) {
- return static_cast<uint32_t>(MemoryAllocator::PageAreaSize(space));
- }
- uint32_t size;
- int offset = kFirstPageSizesOffset + (space - FIRST_PAGED_SPACE) * kInt32Size;
- memcpy(&size, isolate->snapshot_blob()->data + offset, kInt32Size);
- return size;
-}
-
-
bool Snapshot::Initialize(Isolate* isolate) {
if (!isolate->snapshot_available()) return false;
base::ElapsedTimer timer;
@@ -89,25 +76,8 @@ MaybeHandle<Context> Snapshot::NewContextFromSnapshot(
return Handle<Context>::cast(result);
}
-void UpdateMaxRequirementPerPage(
- uint32_t* requirements,
- Vector<const SerializedData::Reservation> reservations) {
- int space = 0;
- uint32_t current_requirement = 0;
- for (const auto& reservation : reservations) {
- current_requirement += reservation.chunk_size();
- if (reservation.is_last()) {
- requirements[space] = std::max(requirements[space], current_requirement);
- current_requirement = 0;
- space++;
- }
- }
- DCHECK_EQ(i::Serializer::kNumberOfSpaces, space);
-}
-
-void CalculateFirstPageSizes(const SnapshotData* startup_snapshot,
- const List<SnapshotData*>* context_snapshots,
- uint32_t* sizes_out) {
+void ProfileDeserialization(const SnapshotData* startup_snapshot,
+ const List<SnapshotData*>* context_snapshots) {
if (FLAG_profile_deserialization) {
int startup_total = 0;
PrintF("Deserialization will reserve:\n");
@@ -123,36 +93,6 @@ void CalculateFirstPageSizes(const SnapshotData* startup_snapshot,
PrintF("%10d bytes per context #%d\n", context_total, i);
}
}
-
- uint32_t startup_requirements[i::Serializer::kNumberOfSpaces];
- uint32_t context_requirements[i::Serializer::kNumberOfSpaces];
- for (int space = 0; space < i::Serializer::kNumberOfSpaces; space++) {
- startup_requirements[space] = 0;
- context_requirements[space] = 0;
- }
-
- UpdateMaxRequirementPerPage(startup_requirements,
- startup_snapshot->Reservations());
- for (const auto& context_snapshot : *context_snapshots) {
- UpdateMaxRequirementPerPage(context_requirements,
- context_snapshot->Reservations());
- }
-
- for (int space = 0; space < i::Serializer::kNumberOfSpaces; space++) {
- // If the space requirement for a page is less than a page size, we consider
- // limiting the size of the first page in order to save memory on startup.
- uint32_t required = startup_requirements[space] +
- 2 * context_requirements[space] +
- Page::kObjectStartOffset;
- // Add a small allowance to the code space for small scripts.
- if (space == CODE_SPACE) required += 32 * KB;
-
- if (space >= FIRST_PAGED_SPACE && space <= LAST_PAGED_SPACE) {
- uint32_t max_size =
- MemoryAllocator::PageAreaSize(static_cast<AllocationSpace>(space));
- sizes_out[space - FIRST_PAGED_SPACE] = std::min(required, max_size);
- }
- }
}
v8::StartupData Snapshot::CreateSnapshotBlob(
@@ -166,13 +106,9 @@ v8::StartupData Snapshot::CreateSnapshotBlob(
total_length += context_snapshot->RawData().length();
}
- uint32_t first_page_sizes[kNumPagedSpaces];
- CalculateFirstPageSizes(startup_snapshot, context_snapshots,
- first_page_sizes);
+ ProfileDeserialization(startup_snapshot, context_snapshots);
char* data = new char[total_length];
- memcpy(data + kFirstPageSizesOffset, first_page_sizes,
- kNumPagedSpaces * kInt32Size);
memcpy(data + kNumberOfContextsOffset, &num_contexts, kInt32Size);
int payload_offset = StartupSnapshotOffset(num_contexts);
int payload_length = startup_snapshot->RawData().length();
« no previous file with comments | « src/snapshot/snapshot.h ('k') | test/cctest/heap/heap-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698