| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/store-buffer.h" | 5 #include "src/store-buffer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "src/v8.h" | 9 #include "src/v8.h" |
| 10 | 10 |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 object = reinterpret_cast<Object*>( | 396 object = reinterpret_cast<Object*>( |
| 397 base::NoBarrier_Load(reinterpret_cast<base::AtomicWord*>(slot))); | 397 base::NoBarrier_Load(reinterpret_cast<base::AtomicWord*>(slot))); |
| 398 if (heap_->InNewSpace(object)) { | 398 if (heap_->InNewSpace(object)) { |
| 399 EnterDirectlyIntoStoreBuffer(slot_address); | 399 EnterDirectlyIntoStoreBuffer(slot_address); |
| 400 } | 400 } |
| 401 } | 401 } |
| 402 } | 402 } |
| 403 } | 403 } |
| 404 | 404 |
| 405 | 405 |
| 406 // Compute start address of the first map following given addr. | |
| 407 static inline Address MapStartAlign(Address addr) { | |
| 408 Address page = Page::FromAddress(addr)->area_start(); | |
| 409 return page + (((addr - page) + (Map::kSize - 1)) / Map::kSize * Map::kSize); | |
| 410 } | |
| 411 | |
| 412 | |
| 413 // Compute end address of the first map preceding given addr. | |
| 414 static inline Address MapEndAlign(Address addr) { | |
| 415 Address page = Page::FromAllocationTop(addr)->area_start(); | |
| 416 return page + ((addr - page) / Map::kSize * Map::kSize); | |
| 417 } | |
| 418 | |
| 419 | |
| 420 void StoreBuffer::IteratePointersInStoreBuffer( | 406 void StoreBuffer::IteratePointersInStoreBuffer( |
| 421 ObjectSlotCallback slot_callback, | 407 ObjectSlotCallback slot_callback, |
| 422 bool clear_maps) { | 408 bool clear_maps) { |
| 423 Address* limit = old_top_; | 409 Address* limit = old_top_; |
| 424 old_top_ = old_start_; | 410 old_top_ = old_start_; |
| 425 { | 411 { |
| 426 DontMoveStoreBufferEntriesScope scope(this); | 412 DontMoveStoreBufferEntriesScope scope(this); |
| 427 for (Address* current = old_start_; current < limit; current++) { | 413 for (Address* current = old_start_; current < limit; current++) { |
| 428 #ifdef DEBUG | 414 #ifdef DEBUG |
| 429 Address* saved_top = old_top_; | 415 Address* saved_top = old_top_; |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 } | 565 } |
| 580 old_buffer_is_sorted_ = false; | 566 old_buffer_is_sorted_ = false; |
| 581 old_buffer_is_filtered_ = false; | 567 old_buffer_is_filtered_ = false; |
| 582 *old_top_++ = reinterpret_cast<Address>(int_addr << kPointerSizeLog2); | 568 *old_top_++ = reinterpret_cast<Address>(int_addr << kPointerSizeLog2); |
| 583 ASSERT(old_top_ <= old_limit_); | 569 ASSERT(old_top_ <= old_limit_); |
| 584 } | 570 } |
| 585 heap_->isolate()->counters()->store_buffer_compactions()->Increment(); | 571 heap_->isolate()->counters()->store_buffer_compactions()->Increment(); |
| 586 } | 572 } |
| 587 | 573 |
| 588 } } // namespace v8::internal | 574 } } // namespace v8::internal |
| OLD | NEW |