Index: base/trace_event/heap_profiler.h |
diff --git a/base/trace_event/heap_profiler.h b/base/trace_event/heap_profiler.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dd587e5e4c72ea40fbfb2bb353dd0052b8688b34 |
--- /dev/null |
+++ b/base/trace_event/heap_profiler.h |
@@ -0,0 +1,53 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef BASE_TRACE_EVENT_HEAP_PROFILER_H |
+#define BASE_TRACE_EVENT_HEAP_PROFILER_H |
+ |
+#include "base/compiler_specific.h" |
+#include "base/trace_event/heap_profiler_allocation_context_tracker.h" |
+ |
+// This header file defines the set of macros that are used to track memory |
+// usage in the heap profiler. This is in addition to the macros defined in |
+// trace_event.h and are specific to heap profiler. This file also defines |
+// implementation details of these macros. |
+ |
+// Implementation detail: heap profiler macros create temporary variables to |
+// keep instrumentation overhead low. These macros give each temporary variable |
+// a unique name based on the line number to prevent name collisions. |
+#define INTERNAL_HEAP_PROFILER_UID3(a, b) heap_profiler_unique_##a##b |
+#define INTERNAL_HEAP_PROFILER_UID2(a, b) INTERNAL_HEAP_PROFILER_UID3(a, b) |
+#define INTERNAL_HEAP_PROFILER_UID(name_prefix) \ |
+ INTERNAL_HEAP_PROFILER_UID2(name_prefix, __LINE__) |
+ |
+// A scoped ignore event used to tell heap profiler to ignore all the |
+// allocations in the scope. It is useful to exclude allocations made for |
+// tracing from the heap profiler dumps. |
+#define HEAP_PROFILER_SCOPED_IGNORE \ |
+ trace_event_internal::HeapProfilerScopedIgnore INTERNAL_HEAP_PROFILER_UID( \ |
+ scoped_ignore) |
+ |
+namespace trace_event_internal { |
+ |
+class BASE_EXPORT HeapProfilerScopedIgnore { |
+ public: |
+ inline HeapProfilerScopedIgnore() { |
+ if (UNLIKELY( |
+ base::trace_event::AllocationContextTracker::capture_enabled())) { |
+ base::trace_event::AllocationContextTracker::GetInstanceForCurrentThread() |
+ ->begin_ignore_scope(); |
+ } |
+ } |
+ inline ~HeapProfilerScopedIgnore() { |
+ if (UNLIKELY( |
+ base::trace_event::AllocationContextTracker::capture_enabled())) { |
+ base::trace_event::AllocationContextTracker::GetInstanceForCurrentThread() |
+ ->end_ignore_scope(); |
+ } |
+ } |
+}; |
+ |
+} // namespace trace_event_internal |
+ |
+#endif // BASE_TRACE_EVENT_HEAP_PROFILER_H |