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.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace allocator {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetAllocatorWasteSize(size_t* size) {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  thunks::GetAllocatorWasteSizeFunction get_allocator_waste_size_function =
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      thunks::GetGetAllocatorWasteSizeFunction();
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return get_allocator_waste_size_function != NULL &&
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)         get_allocator_waste_size_function(size);
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetStats(char* buffer, int buffer_length) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_GT(buffer_length, 0);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  thunks::GetStatsFunction get_stats_function = thunks::GetGetStatsFunction();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (get_stats_function)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get_stats_function(buffer, buffer_length);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    buffer[0] = '\0';
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ReleaseFreeMemory() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  thunks::ReleaseFreeMemoryFunction release_free_memory_function =
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      thunks::GetReleaseFreeMemoryFunction();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (release_free_memory_function)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    release_free_memory_function();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetGetAllocatorWasteSizeFunction(
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    thunks::GetAllocatorWasteSizeFunction get_allocator_waste_size_function) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK_EQ(thunks::GetGetAllocatorWasteSizeFunction(),
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            reinterpret_cast<thunks::GetAllocatorWasteSizeFunction>(NULL));
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  thunks::SetGetAllocatorWasteSizeFunction(get_allocator_waste_size_function);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetGetStatsFunction(thunks::GetStatsFunction get_stats_function) {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK_EQ(thunks::GetGetStatsFunction(),
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reinterpret_cast<thunks::GetStatsFunction>(NULL));
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  thunks::SetGetStatsFunction(get_stats_function);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetReleaseFreeMemoryFunction(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    thunks::ReleaseFreeMemoryFunction release_free_memory_function) {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK_EQ(thunks::GetReleaseFreeMemoryFunction(),
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reinterpret_cast<thunks::ReleaseFreeMemoryFunction>(NULL));
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  thunks::SetReleaseFreeMemoryFunction(release_free_memory_function);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace allocator
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
57