| Index: src/spaces.cc | 
| diff --git a/src/spaces.cc b/src/spaces.cc | 
| index 9aacf9603e42ada46f2c1953d1453695dfdeb3f8..c46faf883023087f577196b7ad75f341ba86b389 100644 | 
| --- a/src/spaces.cc | 
| +++ b/src/spaces.cc | 
| @@ -924,10 +924,12 @@ void NewSpace::Flip() { | 
|  | 
|  | 
| void NewSpace::Grow() { | 
| +  // Double the semispace size but only up to maximum capacity. | 
| ASSERT(Capacity() < MaximumCapacity()); | 
| -  if (to_space_.Grow()) { | 
| +  int new_capacity = Min(MaximumCapacity(), 2 * static_cast<int>(Capacity())); | 
| +  if (to_space_.GrowTo(new_capacity)) { | 
| // Only grow from space if we managed to grow to-space. | 
| -    if (!from_space_.Grow()) { | 
| +    if (!from_space_.GrowTo(new_capacity)) { | 
| // If we managed to grow to-space but couldn't grow from-space, | 
| // attempt to shrink to-space. | 
| if (!to_space_.ShrinkTo(from_space_.Capacity())) { | 
| @@ -943,8 +945,7 @@ void NewSpace::Grow() { | 
|  | 
| void NewSpace::Shrink() { | 
| int new_capacity = Max(InitialCapacity(), 2 * SizeAsInt()); | 
| -  int rounded_new_capacity = | 
| -      RoundUp(new_capacity, static_cast<int>(OS::AllocateAlignment())); | 
| +  int rounded_new_capacity = RoundUp(new_capacity, Page::kPageSize); | 
| if (rounded_new_capacity < Capacity() && | 
| to_space_.ShrinkTo(rounded_new_capacity))  { | 
| // Only shrink from-space if we managed to shrink to-space. | 
| @@ -1144,15 +1145,6 @@ bool SemiSpace::Uncommit() { | 
| } | 
|  | 
|  | 
| -bool SemiSpace::Grow() { | 
| -  // Double the semispace size but only up to maximum capacity. | 
| -  ASSERT(static_cast<size_t>(Page::kPageSize) > OS::AllocateAlignment()); | 
| -  int new_capacity = Min(maximum_capacity_, | 
| -      RoundUp(capacity_ * 2, static_cast<int>(Page::kPageSize))); | 
| -  return GrowTo(new_capacity); | 
| -} | 
| - | 
| - | 
| bool SemiSpace::GrowTo(int new_capacity) { | 
| ASSERT((new_capacity & Page::kPageAlignmentMask) == 0); | 
| ASSERT(new_capacity <= maximum_capacity_); | 
| @@ -1209,7 +1201,7 @@ bool SemiSpace::ShrinkTo(int new_capacity) { | 
| NewSpacePage::FromAddress(space_end - pages_after * Page::kPageSize); | 
| new_last_page->set_next_page(anchor()); | 
| anchor()->set_prev_page(new_last_page); | 
| -  ASSERT(current_page_ == first_page()); | 
| +  ASSERT((current_page_ <= first_page()) && (current_page_ >= new_last_page)); | 
|  | 
| return true; | 
| } | 
|  |