bmalloc: Refactored SegregatedFreeList and BoundaryTag::init
[WebKit-https.git] / Source / bmalloc / bmalloc / Cache.cpp
index 20a9136..b5b00d9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -40,26 +40,20 @@ void Cache::operator delete(void* p, size_t size)
     vmDeallocate(p, vmSize(size));
 }
 
-Cache::Cache()
-    : m_deallocator()
-    , m_allocator(m_deallocator)
-{
-    // Ensure that the heap exists, so Allocator and Deallocator can assume it does.
-    PerProcess<Heap>::get();
-}
-    
 void Cache::scavenge()
 {
-    m_allocator.scavenge();
-    m_deallocator.scavenge();
+    Cache* cache = PerThread<Cache>::getFastCase();
+    if (!cache)
+        return;
+
+    cache->allocator().scavenge();
+    cache->deallocator().scavenge();
 }
 
-NO_INLINE void* Cache::allocateSlowCase(size_t size)
+Cache::Cache()
+    : m_deallocator(PerProcess<Heap>::get())
+    , m_allocator(PerProcess<Heap>::get(), m_deallocator)
 {
-    Cache* cache = PerThread<Cache>::getFastCase();
-    if (!cache)
-        return allocateSlowCaseNullCache(size);
-    return cache->allocator().allocateSlowCase(size);
 }
 
 NO_INLINE void* Cache::allocateSlowCaseNullCache(size_t size)
@@ -67,12 +61,9 @@ NO_INLINE void* Cache::allocateSlowCaseNullCache(size_t size)
     return PerThread<Cache>::getSlowCase()->allocator().allocate(size);
 }
 
-NO_INLINE void Cache::deallocateSlowCase(void* object)
+NO_INLINE void* Cache::allocateSlowCaseNullCache(size_t alignment, size_t size)
 {
-    Cache* cache = PerThread<Cache>::getFastCase();
-    if (!cache)
-        return deallocateSlowCaseNullCache(object);
-    cache->deallocator().deallocateSlowCase(object);
+    return PerThread<Cache>::getSlowCase()->allocator().allocate(alignment, size);
 }
 
 NO_INLINE void Cache::deallocateSlowCaseNullCache(void* object)
@@ -80,4 +71,9 @@ NO_INLINE void Cache::deallocateSlowCaseNullCache(void* object)
     PerThread<Cache>::getSlowCase()->deallocator().deallocate(object);
 }
 
+NO_INLINE void* Cache::reallocateSlowCaseNullCache(void* object, size_t newSize)
+{
+    return PerThread<Cache>::getSlowCase()->allocator().reallocate(object, newSize);
+}
+
 } // namespace bmalloc