15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/allocator/allocator_extension_thunks.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstddef> // for NULL
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace allocator {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace thunks {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This slightly odd translation unit exists because of the peculularity of how
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// allocator_unittests work on windows.  That target has to perform
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tcmalloc-specific initialization on windows, but it cannot depend on base
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// otherwise. This target sits in the middle - base and allocator_unittests
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// can depend on it. This file can't depend on anything else in base, including
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// logging.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static GetAllocatorWasteSizeFunction g_get_allocator_waste_size_function = NULL;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static GetStatsFunction g_get_stats_function = NULL;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ReleaseFreeMemoryFunction g_release_free_memory_function = NULL;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetGetAllocatorWasteSizeFunction(
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GetAllocatorWasteSizeFunction get_allocator_waste_size_function) {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  g_get_allocator_waste_size_function = get_allocator_waste_size_function;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GetAllocatorWasteSizeFunction GetGetAllocatorWasteSizeFunction() {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return g_get_allocator_waste_size_function;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetGetStatsFunction(GetStatsFunction get_stats_function) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_get_stats_function = get_stats_function;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GetStatsFunction GetGetStatsFunction() {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return g_get_stats_function;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetReleaseFreeMemoryFunction(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ReleaseFreeMemoryFunction release_free_memory_function) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_release_free_memory_function = release_free_memory_function;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ReleaseFreeMemoryFunction GetReleaseFreeMemoryFunction() {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return g_release_free_memory_function;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace thunks
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace allocator
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
53