| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/allocator/allocator_shim.h" |
| |
| #include "base/allocator/winheap_stubs_win.h" |
| #include "base/logging.h" |
| #include "starboard/memory.h" |
| |
| namespace { |
| |
| using base::allocator::AllocatorDispatch; |
| |
| void* DefaultWinHeapMallocImpl(const AllocatorDispatch*, |
| size_t size, |
| void* context) { |
| return base::allocator::WinHeapMalloc(size); |
| } |
| |
| void* DefaultWinHeapCallocImpl(const AllocatorDispatch* self, |
| size_t n, |
| size_t elem_size, |
| void* context) { |
| // Overflow check. |
| const size_t size = n * elem_size; |
| if (elem_size != 0 && size / elem_size != n) |
| return nullptr; |
| |
| void* result = DefaultWinHeapMallocImpl(self, size, context); |
| if (result) { |
| SbMemorySet(result, 0, size); |
| } |
| return result; |
| } |
| |
| void* DefaultWinHeapMemalignImpl(const AllocatorDispatch* self, |
| size_t alignment, |
| size_t size, |
| void* context) { |
| CHECK(false) << "The windows heap does not support memalign."; |
| return nullptr; |
| } |
| |
| void* DefaultWinHeapReallocImpl(const AllocatorDispatch* self, |
| void* address, |
| size_t size, |
| void* context) { |
| return base::allocator::WinHeapRealloc(address, size); |
| } |
| |
| void DefaultWinHeapFreeImpl(const AllocatorDispatch*, |
| void* address, |
| void* context) { |
| base::allocator::WinHeapFree(address); |
| } |
| |
| size_t DefaultWinHeapGetSizeEstimateImpl(const AllocatorDispatch*, |
| void* address, |
| void* context) { |
| return base::allocator::WinHeapGetSizeEstimate(address); |
| } |
| |
| } // namespace |
| |
| // Guarantee that default_dispatch is compile-time initialized to avoid using |
| // it before initialization (allocations before main in release builds with |
| // optimizations disabled). |
| constexpr AllocatorDispatch AllocatorDispatch::default_dispatch = { |
| &DefaultWinHeapMallocImpl, |
| &DefaultWinHeapCallocImpl, |
| &DefaultWinHeapMemalignImpl, |
| &DefaultWinHeapReallocImpl, |
| &DefaultWinHeapFreeImpl, |
| &DefaultWinHeapGetSizeEstimateImpl, |
| nullptr, /* batch_malloc_function */ |
| nullptr, /* batch_free_function */ |
| nullptr, /* free_definite_size_function */ |
| nullptr, /* next */ |
| }; |