LCOV - code coverage report
Current view: top level - src/heap - local-allocator.h (source / functions) Hit Total Coverage
Test: app.info Lines: 12 12 100.0 %
Date: 2019-04-17 Functions: 3 3 100.0 %

          Line data    Source code
       1             : // Copyright 2017 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_HEAP_LOCAL_ALLOCATOR_H_
       6             : #define V8_HEAP_LOCAL_ALLOCATOR_H_
       7             : 
       8             : #include "src/globals.h"
       9             : #include "src/heap/heap.h"
      10             : #include "src/heap/spaces.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : // Allocator encapsulating thread-local allocation. Assumes that all other
      16             : // allocations also go through LocalAllocator.
      17      265572 : class LocalAllocator {
      18             :  public:
      19             :   static const int kLabSize = 32 * KB;
      20             :   static const int kMaxLabObjectSize = 8 * KB;
      21             : 
      22      132786 :   explicit LocalAllocator(Heap* heap)
      23             :       : heap_(heap),
      24             :         new_space_(heap->new_space()),
      25             :         compaction_spaces_(heap),
      26             :         new_space_lab_(LocalAllocationBuffer::InvalidBuffer()),
      27      265572 :         lab_allocation_will_fail_(false) {}
      28             : 
      29             :   // Needs to be called from the main thread to finalize this LocalAllocator.
      30      132786 :   void Finalize() {
      31      132786 :     heap_->old_space()->MergeCompactionSpace(compaction_spaces_.Get(OLD_SPACE));
      32      132786 :     heap_->code_space()->MergeCompactionSpace(
      33      132786 :         compaction_spaces_.Get(CODE_SPACE));
      34             :     // Give back remaining LAB space if this LocalAllocator's new space LAB
      35             :     // sits right next to new space allocation top.
      36      132786 :     const LinearAllocationArea info = new_space_lab_.Close();
      37      132786 :     const Address top = new_space_->top();
      38      132786 :     if (info.limit() != kNullAddress && info.limit() == top) {
      39             :       DCHECK_NE(info.top(), kNullAddress);
      40       61262 :       *new_space_->allocation_top_address() = info.top();
      41             :     }
      42      132786 :   }
      43             : 
      44             :   inline AllocationResult Allocate(AllocationSpace space, int object_size,
      45             :                                    AllocationAlignment alignment);
      46             :   inline void FreeLast(AllocationSpace space, HeapObject object,
      47             :                        int object_size);
      48             : 
      49             :  private:
      50             :   inline AllocationResult AllocateInNewSpace(int object_size,
      51             :                                              AllocationAlignment alignment);
      52             :   inline bool NewLocalAllocationBuffer();
      53             :   inline AllocationResult AllocateInLAB(int object_size,
      54             :                                         AllocationAlignment alignment);
      55             :   inline void FreeLastInNewSpace(HeapObject object, int object_size);
      56             :   inline void FreeLastInOldSpace(HeapObject object, int object_size);
      57             : 
      58             :   Heap* const heap_;
      59             :   NewSpace* const new_space_;
      60             :   CompactionSpaceCollection compaction_spaces_;
      61             :   LocalAllocationBuffer new_space_lab_;
      62             :   bool lab_allocation_will_fail_;
      63             : };
      64             : 
      65             : }  // namespace internal
      66             : }  // namespace v8
      67             : 
      68             : #endif  // V8_HEAP_LOCAL_ALLOCATOR_H_

Generated by: LCOV version 1.10