Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: base/debug/profiler.h

Issue 9477002: Support the Syzygy instrumenting profiler. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Move v8 deps exclusion above inclusion rule. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/debug/profiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_DEBUG_PROFILER_H 5 #ifndef BASE_DEBUG_PROFILER_H
6 #define BASE_DEBUG_PROFILER_H 6 #define BASE_DEBUG_PROFILER_H
7 #pragma once 7 #pragma once
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "base/base_export.h" 11 #include "base/base_export.h"
12 #include "base/basictypes.h"
12 13
13 // The Profiler functions allow usage of the underlying sampling based 14 // The Profiler functions allow usage of the underlying sampling based
14 // profiler. If the application has not been built with the necessary 15 // profiler. If the application has not been built with the necessary
15 // flags (-DENABLE_PROFILING and not -DNO_TCMALLOC) then these functions 16 // flags (-DENABLE_PROFILING and not -DNO_TCMALLOC) then these functions
16 // are noops. 17 // are noops.
17 namespace base { 18 namespace base {
18 namespace debug { 19 namespace debug {
19 20
20 // Start profiling with the supplied name. 21 // Start profiling with the supplied name.
21 // {pid} will be replaced by the process' pid and {count} will be replaced 22 // {pid} will be replaced by the process' pid and {count} will be replaced
22 // by the count of the profile run (starts at 1 with each process). 23 // by the count of the profile run (starts at 1 with each process).
23 BASE_EXPORT void StartProfiling(const std::string& name); 24 BASE_EXPORT void StartProfiling(const std::string& name);
24 25
25 // Stop profiling and write out data. 26 // Stop profiling and write out data.
26 BASE_EXPORT void StopProfiling(); 27 BASE_EXPORT void StopProfiling();
27 28
28 // Force data to be written to file. 29 // Force data to be written to file.
29 BASE_EXPORT void FlushProfiling(); 30 BASE_EXPORT void FlushProfiling();
30 31
31 // Returns true if process is being profiled. 32 // Returns true if process is being profiled.
32 BASE_EXPORT bool BeingProfiled(); 33 BASE_EXPORT bool BeingProfiled();
33 34
34 // Reset profiling after a fork, which disables timers. 35 // Reset profiling after a fork, which disables timers.
35 BASE_EXPORT void RestartProfilingAfterFork(); 36 BASE_EXPORT void RestartProfilingAfterFork();
36 37
38 // Returns true iff this executable is instrumented with the Syzygy profiler.
39 BASE_EXPORT bool IsBinaryInstrumented();
40
41 // There's a class of profilers that use "return address swizzling" to get a
42 // hook on function exits. This class of profilers uses some form of entry hook,
43 // like e.g. binary instrumentation, or a compiler flag, that calls a hook each
44 // time a function is invoked. The hook then switches the return address on the
45 // stack for the address of an exit hook function, and pushes the original
46 // return address to a shadow stack of some type. When in due course the CPU
47 // executes a return to the exit hook, the exit hook will do whatever work it
48 // does on function exit, then arrange to return to the original return address.
49 // This class of profiler does not play well with programs that look at the
50 // return address, as does e.g. V8. V8 uses the return address to certain
51 // runtime functions to find the JIT code that called it, and from there finds
52 // the V8 data structures associated to the JS function involved.
53 // A return address resolution function is used to fix this. It allows such
54 // programs to resolve a location on stack where a return address originally
55 // resided, to the shadow stack location where the profiler stashed it.
56 typedef uintptr_t (*ReturnAddressLocationResolver)(
57 uintptr_t return_addr_location);
58
59 // If this binary is instrumented and the instrumentation supplies a return
60 // address resolution function, finds and returns the address resolution
61 // function. Otherwise returns NULL.
62 BASE_EXPORT ReturnAddressLocationResolver
63 GetProfilerReturnAddrResolutionFunc();
64
37 } // namespace debug 65 } // namespace debug
38 } // namespace base 66 } // namespace base
39 67
40 #endif // BASE_DEBUG_DEBUGGER_H 68 #endif // BASE_DEBUG_DEBUGGER_H
OLDNEW
« no previous file with comments | « no previous file | base/debug/profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698