LCOV - code coverage report
Current view: top level - src/zone - zone-segment.h (source / functions) Hit Total Coverage
Test: app.info Lines: 5 5 100.0 %
Date: 2019-04-19 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2016 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_ZONE_ZONE_SEGMENT_H_
       6             : #define V8_ZONE_ZONE_SEGMENT_H_
       7             : 
       8             : #include "src/v8.h"
       9             : 
      10             : // Segments represent chunks of memory: They have starting address
      11             : // (encoded in the this pointer) and a size in bytes. Segments are
      12             : // chained together forming a LIFO structure with the newest segment
      13             : // available as segment_head_. Segments are allocated using malloc()
      14             : // and de-allocated using free().
      15             : namespace v8 {
      16             : namespace internal {
      17             : 
      18             : // Forward declarations.
      19             : class AccountingAllocator;
      20             : class Zone;
      21             : 
      22             : class Segment {
      23             :  public:
      24             :   Zone* zone() const { return zone_; }
      25    59510799 :   void set_zone(Zone* const zone) { zone_ = zone; }
      26             : 
      27             :   Segment* next() const { return next_; }
      28    59510799 :   void set_next(Segment* const next) { next_ = next; }
      29             : 
      30             :   // {total_size} returns the allocated size including the bookkeeping bytes of
      31             :   // the {Segment}.
      32             :   size_t total_size() const { return size_; }
      33             : 
      34             :   // {capacity} returns the number of storage bytes in this {Segment}, i.e.
      35             :   // {end() - start()}.
      36             :   size_t capacity() const { return size_ - sizeof(Segment); }
      37             : 
      38             :   Address start() const { return address(sizeof(Segment)); }
      39    59512445 :   Address end() const { return address(size_); }
      40             : 
      41             :   // Zap the contents of the segment (but not the header).
      42             :   void ZapContents();
      43             :   // Zaps the header and makes the segment unusable this way.
      44             :   void ZapHeader();
      45             : 
      46             :  private:
      47             :   // Segments are only created by the AccountingAllocator.
      48             :   friend class AccountingAllocator;
      49             : 
      50    59515882 :   explicit Segment(size_t size) : size_(size) {}
      51             : 
      52             : #ifdef DEBUG
      53             :   // Constant byte value used for zapping dead memory in debug mode.
      54             :   static const unsigned char kZapDeadByte = 0xcd;
      55             : #endif
      56             : 
      57             :   // Computes the address of the nth byte in this segment.
      58             :   Address address(size_t n) const {
      59   373841743 :     return reinterpret_cast<Address>(this) + n;
      60             :   }
      61             : 
      62             :   Zone* zone_ = nullptr;
      63             :   Segment* next_ = nullptr;
      64             :   const size_t size_;
      65             : };
      66             : 
      67             : }  // namespace internal
      68             : }  // namespace v8
      69             : 
      70             : #endif  // V8_ZONE_ZONE_SEGMENT_H_

Generated by: LCOV version 1.10