Chromium Code Reviews| Index: components/metrics/leak_detector/leak_detector.h |
| diff --git a/components/metrics/leak_detector/leak_detector.h b/components/metrics/leak_detector/leak_detector.h |
| index e23609444490d78765744910f02334b6f7fbbc8f..d856831780cc2db8f09f3248fdbc64d0d57c3f9c 100644 |
| --- a/components/metrics/leak_detector/leak_detector.h |
| +++ b/components/metrics/leak_detector/leak_detector.h |
| @@ -14,9 +14,11 @@ |
| #include "base/feature_list.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/macros.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/threading/thread_checker.h" |
| +#include "components/metrics/leak_detector/leak_detector_impl.h" |
|
Primiano Tucci (use gerrit)
2016/03/03 16:23:44
Are you adding this just for the scoped_ptr? I thi
Simon Que
2016/03/04 01:59:18
Done.
|
| namespace metrics { |
| @@ -70,6 +72,9 @@ class LeakDetector { |
| // A possible leak should be suspected this many times to take action on i |
| // For size analysis, the action is to start profiling by call stack. |
| // For call stack analysis, the action is to generate a leak report. |
| + // |
| + // The non-const, non-static member functions of this class are not thread- |
| + // safe and should be either called under lock or from the same thread. |
| LeakDetector(float sampling_rate, |
| size_t max_call_stack_unwind_depth, |
| uint64_t analysis_interval_bytes, |
| @@ -88,6 +93,26 @@ class LeakDetector { |
| private: |
| FRIEND_TEST_ALL_PREFIXES(LeakDetectorTest, NotifyObservers); |
| + // Allocator hook function that processes each alloc. Performs sampling and |
| + // unwinds call stack if necessary. Passes the allocated memory |ptr| and |
|
Primiano Tucci (use gerrit)
2016/03/03 16:23:44
These functions seem internal only and hence no ne
Simon Que
2016/03/04 01:59:18
These functions need to access the contents of the
|
| + // allocation size |size| along with call stack info to RecordAlloc(). |
| + static void AllocHook(const void* ptr, size_t size); |
| + |
| + // Allocator hook function that processes each free. Performs sampling and |
| + // passes the allocation address |ptr| to |impl_|. |
| + static void FreeHook(const void* ptr); |
| + |
| + // Give an pointer |ptr|, computes a hash of the pointer value and compares it |
| + // against |sampling_factor_| to determine if it should be sampled. This |
| + // allows the same pointer to be sampled during both alloc and free. |
| + bool ShouldSample(const void* ptr) const; |
| + |
| + // Given an allocation |ptr| with size |size|, and a call stack |call_stack| |
| + // with depth of |depth| frames, passes it all to |impl_|. Then performs leak |
| + // analysis if a sufficient interval of allocated bytes has passed since the |
| + // previous analysis. |
| + void RecordAlloc(const void* ptr, size_t size, int depth, void** call_stack); |
| + |
| // Notifies all Observers in |observers_| with the given vector of leak |
| // reports. |
| void NotifyObservers(const std::vector<LeakReport>& reports); |
| @@ -95,9 +120,36 @@ class LeakDetector { |
| // List of observers to notify when there's a leak report. |
| base::ObserverList<Observer> observers_; |
| + // Handles leak detection logic. Must be called under lock as LeakDetectorImpl |
| + // uses shared resources. |
| + scoped_ptr<leak_detector::LeakDetectorImpl> impl_; |
| + |
| // For thread safety. |
| base::ThreadChecker thread_checker_; |
| + // Mapping size and address of Chrome binary in memory. |
| + uintptr_t binary_mapping_addr_; |
| + size_t binary_mapping_size_; |
| + |
| + // Total number of bytes allocated, computed before sampling. |
| + size_t total_alloc_size_; |
| + |
| + // The value of |total_alloc_size_| the last time there was a leak analysis, |
| + // rounded down to the nearest multiple of |analysis_interval_bytes_|. |
| + size_t last_analysis_alloc_size_; |
| + |
| + // Perform a leak analysis each time this many bytes have been allocated since |
| + // the previous analysis. |
| + size_t analysis_interval_bytes_; |
| + |
| + // When unwinding call stacks, unwind no more than this number of frames. |
| + size_t max_call_stack_unwind_depth_; |
| + |
| + // Sampling factor used by ShouldSample(). It's full range of values |
| + // corresponds to the allowable range of |sampling_rate| passed in during |
| + // initialization: [0.0f, 1.0f] -> [0, UINT64_MAX]. |
| + uint64_t sampling_factor_; |
| + |
| // For generating closures containing objects of this class. |
| base::WeakPtrFactory<LeakDetector> weak_factory_; |