Reviewers: Erik Corry, Vyacheslav Egorov,
Description:
Two tiny refactorings: Removed a bit of copy-n-paste. Moved
LargeObjectChunk::Free from header to implementation, it does a syscall,
anyway.
Please review this at http://codereview.chromium.org/7744023/
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/spaces-inl.h
M src/spaces.h
M src/spaces.cc
Index: src/spaces-inl.h
===================================================================
--- src/spaces-inl.h (revision 9014)
+++ src/spaces-inl.h (working copy)
@@ -434,23 +434,6 @@
//
-----------------------------------------------------------------------------
-// LargeObjectChunk
-
-Address LargeObjectChunk::GetStartAddress() {
- // Round the chunk address up to the nearest page-aligned address
- // and return the heap object in that page.
- Page* page = Page::FromAddress(RoundUp(address(), Page::kPageSize));
- return page->ObjectAreaStart();
-}
-
-
-void LargeObjectChunk::Free(Executability executable) {
- Isolate* isolate =
- Page::FromAddress(RoundUp(address(),
Page::kPageSize))->heap_->isolate();
- isolate->memory_allocator()->FreeRawMemory(address(), size(),
executable);
-}
-
-//
-----------------------------------------------------------------------------
// NewSpace
MaybeObject* NewSpace::AllocateRawInternal(int size_in_bytes,
Index: src/spaces.cc
===================================================================
--- src/spaces.cc (revision 9014)
+++ src/spaces.cc (working copy)
@@ -2722,12 +2722,17 @@
LargeObjectChunk* chunk = reinterpret_cast<LargeObjectChunk*>(mem);
chunk->size_ = size;
- Page* page = Page::FromAddress(RoundUp(chunk->address(),
Page::kPageSize));
- page->heap_ = isolate->heap();
+ chunk->GetPage()->heap_ = isolate->heap();
return chunk;
}
+void LargeObjectChunk::Free(Executability executable) {
+ Isolate* isolate = GetPage()->heap_->isolate();
+ isolate->memory_allocator()->FreeRawMemory(address(), size(),
executable);
+}
+
+
int LargeObjectChunk::ChunkSizeFor(int size_in_bytes) {
int os_alignment = static_cast<int>(OS::AllocateAlignment());
if (os_alignment < Page::kPageSize) {
@@ -2761,8 +2766,7 @@
LargeObjectChunk* chunk = first_chunk_;
first_chunk_ = first_chunk_->next();
LOG(heap()->isolate(), DeleteEvent("LargeObjectChunk",
chunk->address()));
- Page* page = Page::FromAddress(RoundUp(chunk->address(),
Page::kPageSize));
- Executability executable = page->PageExecutability();
+ Executability executable = chunk->GetPage()->PageExecutability();
ObjectSpace space = kObjectSpaceLoSpace;
if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
size_t size = chunk->size();
@@ -2805,7 +2809,7 @@
first_chunk_ = chunk;
// Initialize page header.
- Page* page = Page::FromAddress(RoundUp(chunk->address(),
Page::kPageSize));
+ Page* page = chunk->GetPage();
Address object_address = page->ObjectAreaStart();
// Clear the low order bit of the second word in the page to flag it as a
@@ -2943,9 +2947,7 @@
previous = current;
current = current->next();
} else {
- Page* page = Page::FromAddress(RoundUp(current->address(),
- Page::kPageSize));
- Executability executable = page->PageExecutability();
+ Executability executable = current->GetPage()->PageExecutability();
Address chunk_address = current->address();
size_t chunk_size = current->size();
Index: src/spaces.h
===================================================================
--- src/spaces.h (revision 9014)
+++ src/spaces.h (working copy)
@@ -2144,7 +2144,7 @@
static LargeObjectChunk* New(int size_in_bytes, Executability
executable);
// Free the memory associated with the chunk.
- inline void Free(Executability executable);
+ void Free(Executability executable);
// Interpret a raw address as a large object chunk.
static LargeObjectChunk* FromAddress(Address address) {
@@ -2154,13 +2154,17 @@
// Returns the address of this chunk.
Address address() { return reinterpret_cast<Address>(this); }
+ Page* GetPage() {
+ return Page::FromAddress(RoundUp(address(), Page::kPageSize));
+ }
+
// Accessors for the fields of the chunk.
LargeObjectChunk* next() { return next_; }
void set_next(LargeObjectChunk* chunk) { next_ = chunk; }
size_t size() { return size_ & ~Page::kPageFlagMask; }
// Compute the start address in the chunk.
- inline Address GetStartAddress();
+ Address GetStartAddress() { return GetPage()->ObjectAreaStart(); }
// Returns the object in this chunk.
HeapObject* GetObject() { return
HeapObject::FromAddress(GetStartAddress()); }
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev