Chromium Code Reviews| Index: chrome/browser/metrics/metrics_memory_details.h |
| diff --git a/chrome/browser/metrics/metrics_memory_details.h b/chrome/browser/metrics/metrics_memory_details.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7c403265cc08fe2bea671b5603fceeef28a1b89c |
| --- /dev/null |
| +++ b/chrome/browser/metrics/metrics_memory_details.h |
| @@ -0,0 +1,70 @@ |
| +// Copyright 2015 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 CHROME_BROWSER_METRICS_METRICS_MEMORY_DETAILS_H_ |
| +#define CHROME_BROWSER_METRICS_METRICS_MEMORY_DETAILS_H_ |
| + |
| +#include <map> |
| + |
| +#include "base/callback.h" |
| +#include "chrome/browser/memory_details.h" |
| + |
| +// MemoryGrowthTracker tracks latest metrics about record time and memory usage |
| +// at that time per process. |
| +class MemoryGrowthTracker { |
| + public: |
| + MemoryGrowthTracker(); |
| + ~MemoryGrowthTracker(); |
| + |
| + // If 30 minutes have passed since last UMA record, UpdateSample() computes |
| + // a difference between current memory usage |sample| of process |pid| and |
| + // stored memory usage at the time of last UMA record. Then, it updates the |
| + // stored memory usage to |sample|, stores the difference in |diff| and |
| + // returns true. |
| + // If no memory usage of |pid| has not been recorded so far or 30 minutes |
| + // have not passed since last record, it just returns false. |
| + // |sample| is memory usage in kB. |
| + bool UpdateSample(base::ProcessId pid, int sample, int* diff); |
| + |
| + private: |
| + // Latest metrics about record time and memory usage at that time per process. |
| + // The second values of |memory_sizes_| are in kB. |
| + std::map<base::ProcessId, base::TimeTicks> times_; |
| + std::map<base::ProcessId, int> memory_sizes_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MemoryGrowthTracker); |
| +}; |
| + |
| +// Handles asynchronous fetching of memory details. |
| +// Will run the provided task after finished. |
|
Lei Zhang
2015/01/17 01:41:53
nit: task -> callback, "after finished" -> "after
Alexei Svitkine (slow)
2015/01/17 06:06:21
Done.
|
| +class MetricsMemoryDetails : public MemoryDetails { |
| + public: |
| + MetricsMemoryDetails(const base::Closure& callback, |
| + MemoryGrowthTracker* memory_growth_tracker); |
| + |
| + protected: |
| + ~MetricsMemoryDetails() override; |
| + |
| + // MemoryDetails: |
| + void OnDetailsAvailable() override; |
| + |
| + private: |
| + // Updates the global histograms for tracking memory usage. |
| + void UpdateHistograms(); |
| + |
| +#if defined(OS_CHROMEOS) |
| + void UpdateSwapHistograms(); |
| +#endif |
| + |
| + base::Closure callback_; |
| + |
| + // A pointer to MemoryGrowthTracker which is contained in a longer-lived |
| + // owner of MetricsMemoryDetails, for example, ChromeMetricsServiceClient. |
| + // If it is null, nothing is tracked. |
| + MemoryGrowthTracker* memory_growth_tracker_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_METRICS_METRICS_MEMORY_DETAILS_H_ |