| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 MovingObjectCallback, | 372 MovingObjectCallback, |
| 373 void* callback_data); | 373 void* callback_data); |
| 374 | 374 |
| 375 BlinkGC::GCReason LastGCReason() { return last_gc_reason_; } | 375 BlinkGC::GCReason LastGCReason() { return last_gc_reason_; } |
| 376 RegionTree* GetRegionTree() { return region_tree_.get(); } | 376 RegionTree* GetRegionTree() { return region_tree_.get(); } |
| 377 | 377 |
| 378 static inline size_t AllocationSizeFromSize(size_t size) { | 378 static inline size_t AllocationSizeFromSize(size_t size) { |
| 379 // Add space for header. | 379 // Add space for header. |
| 380 size_t allocation_size = size + sizeof(HeapObjectHeader); | 380 size_t allocation_size = size + sizeof(HeapObjectHeader); |
| 381 // The allocation size calculation can overflow for large sizes. | 381 // The allocation size calculation can overflow for large sizes. |
| 382 RELEASE_ASSERT(allocation_size > size); | 382 CHECK_GT(allocation_size, size); |
| 383 // Align size with allocation granularity. | 383 // Align size with allocation granularity. |
| 384 allocation_size = (allocation_size + kAllocationMask) & ~kAllocationMask; | 384 allocation_size = (allocation_size + kAllocationMask) & ~kAllocationMask; |
| 385 return allocation_size; | 385 return allocation_size; |
| 386 } | 386 } |
| 387 static Address AllocateOnArenaIndex(ThreadState*, | 387 static Address AllocateOnArenaIndex(ThreadState*, |
| 388 size_t, | 388 size_t, |
| 389 int arena_index, | 389 int arena_index, |
| 390 size_t gc_info_index, | 390 size_t gc_info_index, |
| 391 const char* type_name); | 391 const char* type_name); |
| 392 template <typename T> | 392 template <typename T> |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 WTF_MAKE_NONCOPYABLE(GarbageCollected); | 486 WTF_MAKE_NONCOPYABLE(GarbageCollected); |
| 487 | 487 |
| 488 // For now direct allocation of arrays on the heap is not allowed. | 488 // For now direct allocation of arrays on the heap is not allowed. |
| 489 void* operator new[](size_t size); | 489 void* operator new[](size_t size); |
| 490 | 490 |
| 491 #if OS(WIN) && COMPILER(MSVC) | 491 #if OS(WIN) && COMPILER(MSVC) |
| 492 // Due to some quirkiness in the MSVC compiler we have to provide | 492 // Due to some quirkiness in the MSVC compiler we have to provide |
| 493 // the delete[] operator in the GarbageCollected subclasses as it | 493 // the delete[] operator in the GarbageCollected subclasses as it |
| 494 // is called when a class is exported in a DLL. | 494 // is called when a class is exported in a DLL. |
| 495 protected: | 495 protected: |
| 496 void operator delete[](void* p) { ASSERT_NOT_REACHED(); } | 496 void operator delete[](void* p) { NOTREACHED(); } |
| 497 #else | 497 #else |
| 498 void operator delete[](void* p); | 498 void operator delete[](void* p); |
| 499 #endif | 499 #endif |
| 500 | 500 |
| 501 public: | 501 public: |
| 502 using GarbageCollectedType = T; | 502 using GarbageCollectedType = T; |
| 503 | 503 |
| 504 void* operator new(size_t size) { | 504 void* operator new(size_t size) { |
| 505 return AllocateObject(size, IsEagerlyFinalizedType<T>::value); | 505 return AllocateObject(size, IsEagerlyFinalizedType<T>::value); |
| 506 } | 506 } |
| 507 | 507 |
| 508 static void* AllocateObject(size_t size, bool eagerly_sweep) { | 508 static void* AllocateObject(size_t size, bool eagerly_sweep) { |
| 509 return ThreadHeap::Allocate<T>(size, eagerly_sweep); | 509 return ThreadHeap::Allocate<T>(size, eagerly_sweep); |
| 510 } | 510 } |
| 511 | 511 |
| 512 void operator delete(void* p) { ASSERT_NOT_REACHED(); } | 512 void operator delete(void* p) { NOTREACHED(); } |
| 513 | 513 |
| 514 protected: | 514 protected: |
| 515 GarbageCollected() {} | 515 GarbageCollected() {} |
| 516 }; | 516 }; |
| 517 | 517 |
| 518 // Assigning class types to their arenas. | 518 // Assigning class types to their arenas. |
| 519 // | 519 // |
| 520 // We use sized arenas for most 'normal' objects to improve memory locality. | 520 // We use sized arenas for most 'normal' objects to improve memory locality. |
| 521 // It seems that the same type of objects are likely to be accessed together, | 521 // It seems that the same type of objects are likely to be accessed together, |
| 522 // which means that we want to group objects by type. That's one reason | 522 // which means that we want to group objects by type. That's one reason |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 T** cell = reinterpret_cast<T**>(object); | 666 T** cell = reinterpret_cast<T**>(object); |
| 667 if (*cell && !ObjectAliveTrait<T>::IsHeapObjectAlive(*cell)) | 667 if (*cell && !ObjectAliveTrait<T>::IsHeapObjectAlive(*cell)) |
| 668 *cell = nullptr; | 668 *cell = nullptr; |
| 669 } | 669 } |
| 670 | 670 |
| 671 } // namespace blink | 671 } // namespace blink |
| 672 | 672 |
| 673 #include "platform/heap/VisitorImpl.h" | 673 #include "platform/heap/VisitorImpl.h" |
| 674 | 674 |
| 675 #endif // Heap_h | 675 #endif // Heap_h |
| OLD | NEW |