| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1240 #endif | 1240 #endif |
| 1241 private: | 1241 private: |
| 1242 | 1242 |
| 1243 // Returns a pointer to the page of the relocation pointer. | 1243 // Returns a pointer to the page of the relocation pointer. |
| 1244 Page* MCRelocationTopPage() { return TopPageOf(mc_forwarding_info_); } | 1244 Page* MCRelocationTopPage() { return TopPageOf(mc_forwarding_info_); } |
| 1245 | 1245 |
| 1246 friend class PageIterator; | 1246 friend class PageIterator; |
| 1247 }; | 1247 }; |
| 1248 | 1248 |
| 1249 | 1249 |
| 1250 #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING) | |
| 1251 class NumberAndSizeInfo BASE_EMBEDDED { | 1250 class NumberAndSizeInfo BASE_EMBEDDED { |
| 1252 public: | 1251 public: |
| 1253 NumberAndSizeInfo() : number_(0), bytes_(0) {} | 1252 NumberAndSizeInfo() : number_(0), bytes_(0) {} |
| 1254 | 1253 |
| 1255 int number() const { return number_; } | 1254 int number() const { return number_; } |
| 1256 void increment_number(int num) { number_ += num; } | 1255 void increment_number(int num) { number_ += num; } |
| 1257 | 1256 |
| 1258 int bytes() const { return bytes_; } | 1257 int bytes() const { return bytes_; } |
| 1259 void increment_bytes(int size) { bytes_ += size; } | 1258 void increment_bytes(int size) { bytes_ += size; } |
| 1260 | 1259 |
| 1261 void clear() { | 1260 void clear() { |
| 1262 number_ = 0; | 1261 number_ = 0; |
| 1263 bytes_ = 0; | 1262 bytes_ = 0; |
| 1264 } | 1263 } |
| 1265 | 1264 |
| 1266 private: | 1265 private: |
| 1267 int number_; | 1266 int number_; |
| 1268 int bytes_; | 1267 int bytes_; |
| 1269 }; | 1268 }; |
| 1270 | 1269 |
| 1271 | 1270 |
| 1272 // HistogramInfo class for recording a single "bar" of a histogram. This | 1271 // HistogramInfo class for recording a single "bar" of a histogram. This |
| 1273 // class is used for collecting statistics to print to stdout (when compiled | 1272 // class is used for collecting statistics to print to the log file. |
| 1274 // with DEBUG) or to the log file (when compiled with | |
| 1275 // ENABLE_LOGGING_AND_PROFILING). | |
| 1276 class HistogramInfo: public NumberAndSizeInfo { | 1273 class HistogramInfo: public NumberAndSizeInfo { |
| 1277 public: | 1274 public: |
| 1278 HistogramInfo() : NumberAndSizeInfo() {} | 1275 HistogramInfo() : NumberAndSizeInfo() {} |
| 1279 | 1276 |
| 1280 const char* name() { return name_; } | 1277 const char* name() { return name_; } |
| 1281 void set_name(const char* name) { name_ = name; } | 1278 void set_name(const char* name) { name_ = name; } |
| 1282 | 1279 |
| 1283 private: | 1280 private: |
| 1284 const char* name_; | 1281 const char* name_; |
| 1285 }; | 1282 }; |
| 1286 #endif | |
| 1287 | 1283 |
| 1288 | 1284 |
| 1289 // ----------------------------------------------------------------------------- | 1285 // ----------------------------------------------------------------------------- |
| 1290 // SemiSpace in young generation | 1286 // SemiSpace in young generation |
| 1291 // | 1287 // |
| 1292 // A semispace is a contiguous chunk of memory. The mark-compact collector | 1288 // A semispace is a contiguous chunk of memory. The mark-compact collector |
| 1293 // uses the memory in the from space as a marking stack when tracing live | 1289 // uses the memory in the from space as a marking stack when tracing live |
| 1294 // objects. | 1290 // objects. |
| 1295 | 1291 |
| 1296 class SemiSpace : public Space { | 1292 class SemiSpace : public Space { |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1599 template <typename StringType> | 1595 template <typename StringType> |
| 1600 inline void ShrinkStringAtAllocationBoundary(String* string, int len); | 1596 inline void ShrinkStringAtAllocationBoundary(String* string, int len); |
| 1601 | 1597 |
| 1602 #ifdef DEBUG | 1598 #ifdef DEBUG |
| 1603 // Verify the active semispace. | 1599 // Verify the active semispace. |
| 1604 virtual void Verify(); | 1600 virtual void Verify(); |
| 1605 // Print the active semispace. | 1601 // Print the active semispace. |
| 1606 virtual void Print() { to_space_.Print(); } | 1602 virtual void Print() { to_space_.Print(); } |
| 1607 #endif | 1603 #endif |
| 1608 | 1604 |
| 1609 #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING) | |
| 1610 // Iterates the active semispace to collect statistics. | 1605 // Iterates the active semispace to collect statistics. |
| 1611 void CollectStatistics(); | 1606 void CollectStatistics(); |
| 1612 // Reports previously collected statistics of the active semispace. | 1607 // Reports previously collected statistics of the active semispace. |
| 1613 void ReportStatistics(); | 1608 void ReportStatistics(); |
| 1614 // Clears previously collected statistics. | 1609 // Clears previously collected statistics. |
| 1615 void ClearHistograms(); | 1610 void ClearHistograms(); |
| 1616 | 1611 |
| 1617 // Record the allocation or promotion of a heap object. Note that we don't | 1612 // Record the allocation or promotion of a heap object. Note that we don't |
| 1618 // record every single allocation, but only those that happen in the | 1613 // record every single allocation, but only those that happen in the |
| 1619 // to space during a scavenge GC. | 1614 // to space during a scavenge GC. |
| 1620 void RecordAllocation(HeapObject* obj); | 1615 void RecordAllocation(HeapObject* obj); |
| 1621 void RecordPromotion(HeapObject* obj); | 1616 void RecordPromotion(HeapObject* obj); |
| 1622 #endif | |
| 1623 | 1617 |
| 1624 // Return whether the operation succeded. | 1618 // Return whether the operation succeded. |
| 1625 bool CommitFromSpaceIfNeeded() { | 1619 bool CommitFromSpaceIfNeeded() { |
| 1626 if (from_space_.is_committed()) return true; | 1620 if (from_space_.is_committed()) return true; |
| 1627 return from_space_.Commit(); | 1621 return from_space_.Commit(); |
| 1628 } | 1622 } |
| 1629 | 1623 |
| 1630 bool UncommitFromSpace() { | 1624 bool UncommitFromSpace() { |
| 1631 if (!from_space_.is_committed()) return true; | 1625 if (!from_space_.is_committed()) return true; |
| 1632 return from_space_.Uncommit(); | 1626 return from_space_.Uncommit(); |
| 1633 } | 1627 } |
| 1634 | 1628 |
| 1635 private: | 1629 private: |
| 1636 // The semispaces. | 1630 // The semispaces. |
| 1637 SemiSpace to_space_; | 1631 SemiSpace to_space_; |
| 1638 SemiSpace from_space_; | 1632 SemiSpace from_space_; |
| 1639 | 1633 |
| 1640 // Start address and bit mask for containment testing. | 1634 // Start address and bit mask for containment testing. |
| 1641 Address start_; | 1635 Address start_; |
| 1642 uintptr_t address_mask_; | 1636 uintptr_t address_mask_; |
| 1643 uintptr_t object_mask_; | 1637 uintptr_t object_mask_; |
| 1644 uintptr_t object_expected_; | 1638 uintptr_t object_expected_; |
| 1645 | 1639 |
| 1646 // Allocation pointer and limit for normal allocation and allocation during | 1640 // Allocation pointer and limit for normal allocation and allocation during |
| 1647 // mark-compact collection. | 1641 // mark-compact collection. |
| 1648 AllocationInfo allocation_info_; | 1642 AllocationInfo allocation_info_; |
| 1649 AllocationInfo mc_forwarding_info_; | 1643 AllocationInfo mc_forwarding_info_; |
| 1650 | 1644 |
| 1651 #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING) | |
| 1652 HistogramInfo* allocated_histogram_; | 1645 HistogramInfo* allocated_histogram_; |
| 1653 HistogramInfo* promoted_histogram_; | 1646 HistogramInfo* promoted_histogram_; |
| 1654 #endif | |
| 1655 | 1647 |
| 1656 // Implementation of AllocateRaw and MCAllocateRaw. | 1648 // Implementation of AllocateRaw and MCAllocateRaw. |
| 1657 MUST_USE_RESULT inline MaybeObject* AllocateRawInternal( | 1649 MUST_USE_RESULT inline MaybeObject* AllocateRawInternal( |
| 1658 int size_in_bytes, | 1650 int size_in_bytes, |
| 1659 AllocationInfo* alloc_info); | 1651 AllocationInfo* alloc_info); |
| 1660 | 1652 |
| 1661 friend class SemiSpaceIterator; | 1653 friend class SemiSpaceIterator; |
| 1662 | 1654 |
| 1663 public: | 1655 public: |
| 1664 TRACK_MEMORY("NewSpace") | 1656 TRACK_MEMORY("NewSpace") |
| (...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2319 } | 2311 } |
| 2320 // Must be small, since an iteration is used for lookup. | 2312 // Must be small, since an iteration is used for lookup. |
| 2321 static const int kMaxComments = 64; | 2313 static const int kMaxComments = 64; |
| 2322 }; | 2314 }; |
| 2323 #endif | 2315 #endif |
| 2324 | 2316 |
| 2325 | 2317 |
| 2326 } } // namespace v8::internal | 2318 } } // namespace v8::internal |
| 2327 | 2319 |
| 2328 #endif // V8_SPACES_H_ | 2320 #endif // V8_SPACES_H_ |
| OLD | NEW |