Chromium Code Reviews| Index: base/trace_event/heap_profiler_allocation_context_tracker.h |
| diff --git a/base/trace_event/heap_profiler_allocation_context_tracker.h b/base/trace_event/heap_profiler_allocation_context_tracker.h |
| index d6133323bfb3d8f88f4331f6c718582c5611b3ee..202bd8914b9964facce371f12a8a7abf26307d8d 100644 |
| --- a/base/trace_event/heap_profiler_allocation_context_tracker.h |
| +++ b/base/trace_event/heap_profiler_allocation_context_tracker.h |
| @@ -23,24 +23,29 @@ namespace trace_event { |
| // details. |
| class BASE_EXPORT AllocationContextTracker { |
| public: |
| - // Globally enables capturing allocation context. |
| - // TODO(ruuda): Should this be replaced by |EnableCapturing| in the future? |
| - // Or at least have something that guards agains enable -> disable -> enable? |
| - static void SetCaptureEnabled(bool enabled); |
| + enum CaptureMode { |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
enum class CaptureMode { DISABLED, PSEUDO_STACK, N
Dmitry Skiba
2016/04/12 18:22:11
Done.
|
| + DONT_CAPTURE = 0, // must be 0 |
| + CAPTURE_PSEUDO_STACK, |
| + CAPTURE_NATIVE_STACK |
| + }; |
| + |
| + // Globally sets capturing mode. |
| + // TODO: How to guards against CAPTURE_* -> DONT_CAPTURE -> CAPTURE_*? |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
TODO want always a name ;)
you can put mine if you
Dmitry Skiba
2016/04/12 18:22:11
Done.
|
| + static void SetCaptureMode(CaptureMode mode); |
| // Returns whether capturing allocation context is enabled globally. |
| inline static bool capture_enabled() { |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
Hmm I think you want to expose the capture mode he
Dmitry Skiba
2016/04/12 18:22:11
Yes, this is intended. I want us to still maintain
|
| // A little lag after heap profiling is enabled or disabled is fine, it is |
| // more important that the check is as cheap as possible when capturing is |
| // not enabled, so do not issue a memory barrier in the fast path. |
| - if (subtle::NoBarrier_Load(&capture_enabled_) == 0) |
| + if (subtle::NoBarrier_Load(&capture_mode_) == DONT_CAPTURE) |
| return false; |
| // In the slow path, an acquire load is required to pair with the release |
| - // store in |SetCaptureEnabled|. This is to ensure that the TLS slot for |
| + // store in |SetCaptureMode|. This is to ensure that the TLS slot for |
| // the thread-local allocation context tracker has been initialized if |
| // |capture_enabled| returns true. |
| - return subtle::Acquire_Load(&capture_enabled_) != 0; |
| + return subtle::Acquire_Load(&capture_mode_) != DONT_CAPTURE; |
| } |
| // Returns the thread-local instance, creating one if necessary. Returns |
| @@ -53,10 +58,11 @@ class BASE_EXPORT AllocationContextTracker { |
| static void SetCurrentThreadName(const char* name); |
| // Pushes a frame onto the thread-local pseudo stack. |
| + void PushPseudoStackFrame(const char* frame_symbol_value); |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
s/frame_symbol_value/trace_event_name/ :) it makes
Dmitry Skiba
2016/04/12 18:22:11
Done.
|
| void PushPseudoStackFrame(StackFrame frame); |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
Do we really need both versions here?
It seem that
Dmitry Skiba
2016/04/12 18:22:11
Done.
|
| // Pops a frame from the thread-local pseudo stack. |
| - void PopPseudoStackFrame(StackFrame frame); |
| + void PopPseudoStackFrame(const void* frame_value); |
| // Push and pop current task's context. A stack is used to support nested |
| // tasks and the top of the stack will be used in allocation context. |
| @@ -71,7 +77,7 @@ class BASE_EXPORT AllocationContextTracker { |
| private: |
| AllocationContextTracker(); |
| - static subtle::Atomic32 capture_enabled_; |
| + static subtle::Atomic32 capture_mode_; |
| // The pseudo stack where frames are |TRACE_EVENT| names. |
| std::vector<StackFrame> pseudo_stack_; |