| Index: third_party/tcmalloc/chromium/src/google/profiler.h
|
| ===================================================================
|
| --- third_party/tcmalloc/chromium/src/google/profiler.h (revision 126022)
|
| +++ third_party/tcmalloc/chromium/src/google/profiler.h (working copy)
|
| @@ -26,9 +26,141 @@
|
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| + *
|
| + * ---
|
| + * Author: Sanjay Ghemawat
|
| + *
|
| + * Module for CPU profiling based on periodic pc-sampling.
|
| + *
|
| + * For full(er) information, see doc/cpuprofile.html
|
| + *
|
| + * This module is linked into your program with
|
| + * no slowdown caused by this unless you activate the profiler
|
| + * using one of the following methods:
|
| + *
|
| + * 1. Before starting the program, set the environment variable
|
| + * "PROFILE" to be the name of the file to which the profile
|
| + * data should be written.
|
| + *
|
| + * 2. Programmatically, start and stop the profiler using the
|
| + * routines "ProfilerStart(filename)" and "ProfilerStop()".
|
| + *
|
| + *
|
| + * (Note: if using linux 2.4 or earlier, only the main thread may be
|
| + * profiled.)
|
| + *
|
| + * Use pprof to view the resulting profile output.
|
| + * % pprof <path_to_executable> <profile_file_name>
|
| + * % pprof --gv <path_to_executable> <profile_file_name>
|
| + *
|
| + * These functions are thread-safe.
|
| */
|
|
|
| -/* The code has moved to gperftools/. Use that include-directory for
|
| - * new code.
|
| +#ifndef BASE_PROFILER_H_
|
| +#define BASE_PROFILER_H_
|
| +
|
| +#include <time.h> /* For time_t */
|
| +
|
| +/* Annoying stuff for windows; makes sure clients can import these functions */
|
| +#ifndef PERFTOOLS_DLL_DECL
|
| +# ifdef _WIN32
|
| +# define PERFTOOLS_DLL_DECL __declspec(dllimport)
|
| +# else
|
| +# define PERFTOOLS_DLL_DECL
|
| +# endif
|
| +#endif
|
| +
|
| +/* All this code should be usable from within C apps. */
|
| +#ifdef __cplusplus
|
| +extern "C" {
|
| +#endif
|
| +
|
| +/* Profiler options, for use with ProfilerStartWithOptions. To use:
|
| + *
|
| + * struct ProfilerOptions options;
|
| + * memset(&options, 0, sizeof options);
|
| + *
|
| + * then fill in fields as needed.
|
| + *
|
| + * This structure is intended to be usable from C code, so no constructor
|
| + * is provided to initialize it. (Use memset as described above).
|
| */
|
| -#include <gperftools/profiler.h>
|
| +struct ProfilerOptions {
|
| + /* Filter function and argument.
|
| + *
|
| + * If filter_in_thread is not NULL, when a profiling tick is delivered
|
| + * the profiler will call:
|
| + *
|
| + * (*filter_in_thread)(filter_in_thread_arg)
|
| + *
|
| + * If it returns nonzero, the sample will be included in the profile.
|
| + * Note that filter_in_thread runs in a signal handler, so must be
|
| + * async-signal-safe.
|
| + *
|
| + * A typical use would be to set up filter results for each thread
|
| + * in the system before starting the profiler, then to make
|
| + * filter_in_thread be a very simple function which retrieves those
|
| + * results in an async-signal-safe way. Retrieval could be done
|
| + * using thread-specific data, or using a shared data structure that
|
| + * supports async-signal-safe lookups.
|
| + */
|
| + int (*filter_in_thread)(void *arg);
|
| + void *filter_in_thread_arg;
|
| +};
|
| +
|
| +/* Start profiling and write profile info into fname.
|
| + *
|
| + * This is equivalent to calling ProfilerStartWithOptions(fname, NULL).
|
| + */
|
| +PERFTOOLS_DLL_DECL int ProfilerStart(const char* fname);
|
| +
|
| +/* Start profiling and write profile into fname.
|
| + *
|
| + * The profiler is configured using the options given by 'options'.
|
| + * Options which are not specified are given default values.
|
| + *
|
| + * 'options' may be NULL, in which case all are given default values.
|
| + *
|
| + * Returns nonzero if profiling was started sucessfully, or zero else.
|
| + */
|
| +PERFTOOLS_DLL_DECL int ProfilerStartWithOptions(
|
| + const char *fname, const struct ProfilerOptions *options);
|
| +
|
| +/* Stop profiling. Can be started again with ProfilerStart(), but
|
| + * the currently accumulated profiling data will be cleared.
|
| + */
|
| +PERFTOOLS_DLL_DECL void ProfilerStop();
|
| +
|
| +/* Flush any currently buffered profiling state to the profile file.
|
| + * Has no effect if the profiler has not been started.
|
| + */
|
| +PERFTOOLS_DLL_DECL void ProfilerFlush();
|
| +
|
| +
|
| +/* DEPRECATED: these functions were used to enable/disable profiling
|
| + * in the current thread, but no longer do anything.
|
| + */
|
| +PERFTOOLS_DLL_DECL void ProfilerEnable();
|
| +PERFTOOLS_DLL_DECL void ProfilerDisable();
|
| +
|
| +/* Returns nonzero if profile is currently enabled, zero if it's not. */
|
| +PERFTOOLS_DLL_DECL int ProfilingIsEnabledForAllThreads();
|
| +
|
| +/* Routine for registering new threads with the profiler.
|
| + */
|
| +PERFTOOLS_DLL_DECL void ProfilerRegisterThread();
|
| +
|
| +/* Stores state about profiler's current status into "*state". */
|
| +struct ProfilerState {
|
| + int enabled; /* Is profiling currently enabled? */
|
| + time_t start_time; /* If enabled, when was profiling started? */
|
| + char profile_name[1024]; /* Name of profile file being written, or '\0' */
|
| + int samples_gathered; /* Number of samples gathered so far (or 0) */
|
| +};
|
| +PERFTOOLS_DLL_DECL void ProfilerGetCurrentState(struct ProfilerState* state);
|
| +
|
| +#ifdef __cplusplus
|
| +} // extern "C"
|
| +#endif
|
| +
|
| +#endif /* BASE_PROFILER_H_ */
|
|
|