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)// This is a glue file, which allows third party code to call into our profiler 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// without having to include most any functions from base. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_PROFILER_ALTERNATE_TIMER_H_ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_PROFILER_ALTERNATE_TIMER_H_ 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace tracked_objects { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum TimeSourceType { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TIME_SOURCE_TYPE_WALL_TIME, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TIME_SOURCE_TYPE_TCMALLOC 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Provide type for an alternate timer function. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int NowFunction(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Environment variable name that is used to activate alternate timer profiling 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (such as using TCMalloc allocations to provide a pseudo-timer) for tasks 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instead of wall clock profiling. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT extern const char kAlternateProfilerTime[]; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set an alternate timer function to replace the OS time function when 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// profiling. Typically this is called by an allocator that is providing a 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// function that indicates how much memory has been allocated on any given 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SetAlternateTimeSource(NowFunction* now_function, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TimeSourceType type); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the pointer to a function that was set via SetAlternateTimeSource(). 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns NULL if no set was done prior to calling GetAlternateTimeSource. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NowFunction* GetAlternateTimeSource(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the type of the currently set time source. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT TimeSourceType GetTimeSourceType(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace tracked_objects 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_PROFILER_ALTERNATE_TIMER_H_ 45