15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 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)#if defined(TYPE_PROFILING) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/allocator/type_profiler.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <assert.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* NopIntercept(void* ptr, size_t size, const std::type_info& type) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ptr; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::type_profiler::InterceptFunction* g_new_intercept = NopIntercept; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::type_profiler::InterceptFunction* g_delete_intercept = NopIntercept; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* __op_new_intercept__(void* ptr, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::type_info& type) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_new_intercept(ptr, size, type); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* __op_delete_intercept__(void* ptr, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::type_info& type) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_delete_intercept(ptr, size, type); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace type_profiler { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InterceptFunctions::SetFunctions(InterceptFunction* new_intercept, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterceptFunction* delete_intercept) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't use DCHECK, as this file is injected into targets 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that do not and should not depend on base/base.gyp:base 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(g_new_intercept == NopIntercept); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(g_delete_intercept == NopIntercept); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_new_intercept = new_intercept; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_delete_intercept = delete_intercept; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InterceptFunctions::ResetFunctions() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_new_intercept = NopIntercept; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_delete_intercept = NopIntercept; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InterceptFunctions::IsAvailable() { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_new_intercept != NopIntercept || g_delete_intercept != NopIntercept; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace type_profiler 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(TYPE_PROFILING) 64