| Index: chrome/browser/metrics/subprocess_metrics_provider.h
|
| diff --git a/chrome/browser/metrics/subprocess_metrics_provider.h b/chrome/browser/metrics/subprocess_metrics_provider.h
|
| index d47f5846a3d7438a6aebfbbd1ea8c3d9db98788e..cbdeebb6da794926f3debb0624451a6a4777f459 100644
|
| --- a/chrome/browser/metrics/subprocess_metrics_provider.h
|
| +++ b/chrome/browser/metrics/subprocess_metrics_provider.h
|
| @@ -5,13 +5,14 @@
|
| #ifndef CHROME_BROWSER_METRICS_SUBPROCESS_METRICS_PROVIDER_H_
|
| #define CHROME_BROWSER_METRICS_SUBPROCESS_METRICS_PROVIDER_H_
|
|
|
| +#include <map>
|
| #include <memory>
|
| -#include <set>
|
| +#include <vector>
|
|
|
| #include "base/gtest_prod_util.h"
|
| -#include "base/id_map.h"
|
| +#include "base/metrics/statistics_recorder.h"
|
| #include "base/scoped_observer.h"
|
| -#include "base/threading/thread_checker.h"
|
| +#include "base/synchronization/lock.h"
|
| #include "components/metrics/metrics_provider.h"
|
| #include "content/public/browser/notification_observer.h"
|
| #include "content/public/browser/notification_registrar.h"
|
| @@ -24,9 +25,11 @@ class SharedPersistentMemoryAllocator;
|
|
|
| // SubprocessMetricsProvider gathers and logs histograms stored in shared
|
| // memory segments between processes.
|
| -class SubprocessMetricsProvider : public metrics::MetricsProvider,
|
| - public content::NotificationObserver,
|
| - public content::RenderProcessHostObserver {
|
| +class SubprocessMetricsProvider
|
| + : public metrics::MetricsProvider,
|
| + public base::StatisticsRecorder::MetricsDisplayer,
|
| + public content::NotificationObserver,
|
| + public content::RenderProcessHostObserver {
|
| public:
|
| SubprocessMetricsProvider();
|
| ~SubprocessMetricsProvider() override;
|
| @@ -34,6 +37,11 @@ class SubprocessMetricsProvider : public metrics::MetricsProvider,
|
| private:
|
| friend class SubprocessMetricsProviderTest;
|
|
|
| + enum SnapshotType {
|
| + SNAPSHOT_DELTA,
|
| + SNAPSHOT_ABSOLUTE,
|
| + };
|
| +
|
| // Indicates subprocess to be monitored with unique id for later reference.
|
| // Metrics reporting will read histograms from it and upload them to UMA.
|
| void RegisterSubprocessAllocator(
|
| @@ -44,9 +52,15 @@ class SubprocessMetricsProvider : public metrics::MetricsProvider,
|
| // allocator it was using.
|
| void DeregisterSubprocessAllocator(int id);
|
|
|
| - // Report all histograms of a given allocator to the snapshot-manager.
|
| + // Report histograms of a given allocator to the snapshot-manager. If
|
| + // |query| is not empty, only histograms that contain that string will
|
| + // be recorded. If |snapshot_type| is ABSOLUTE, no delta from the previous
|
| + // snapshot will be done. Only one caller, the caller that uploads to UMA,
|
| + // is allowed to calcuate deltas because they are not independent.
|
| void RecordHistogramSnapshotsFromAllocator(
|
| base::HistogramSnapshotManager* snapshot_manager,
|
| + const std::string& query,
|
| + SnapshotType snapshot_type,
|
| int id,
|
| base::PersistentHistogramAllocator* allocator);
|
|
|
| @@ -57,6 +71,12 @@ class SubprocessMetricsProvider : public metrics::MetricsProvider,
|
| void RecordHistogramSnapshots(
|
| base::HistogramSnapshotManager* snapshot_manager) override;
|
|
|
| + // base::StatisticsRecorder::MetricsDisplayer:
|
| + void WriteTitleString(std::string* output) override;
|
| + void WriteGraphs(const std::string& query,
|
| + DisplayType format,
|
| + std::string* output) override;
|
| +
|
| // content::NotificationObserver:
|
| void Observe(int type,
|
| const content::NotificationSource& source,
|
| @@ -69,14 +89,16 @@ class SubprocessMetricsProvider : public metrics::MetricsProvider,
|
| int exit_code) override;
|
| void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
|
|
|
| - base::ThreadChecker thread_checker_;
|
| + // Lock for accessing objects. This is required because MetricsDisplayer is
|
| + // typically called by a background thread.
|
| + base::Lock lock_;
|
|
|
| // Object for registing notification requests.
|
| content::NotificationRegistrar registrar_;
|
|
|
| // All of the shared-persistent-allocators for known sub-processes.
|
| using AllocatorByIdMap =
|
| - IDMap<base::PersistentHistogramAllocator, IDMapOwnPointer, int>;
|
| + std::map<int, std::unique_ptr<base::PersistentHistogramAllocator>>;
|
| AllocatorByIdMap allocators_by_id_;
|
|
|
| // Allocators that are no longer attached to a subprocess, to be released
|
|
|