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

Reply via email to