146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef COMPONENTS_METRICS_PROFILER_PROFILER_METRICS_PROVIDER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define COMPONENTS_METRICS_PROFILER_PROFILER_METRICS_PROVIDER_H_
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/basictypes.h"
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/metrics/metrics_provider.h"
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/metrics/proto/chrome_user_metrics_extension.pb.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace tracked_objects {
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)struct ProcessDataSnapshot;
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace metrics {
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// ProfilerMetricsProvider is responsible for filling out the |profiler_event|
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// section of the UMA proto.
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ProfilerMetricsProvider : public MetricsProvider {
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ProfilerMetricsProvider();
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~ProfilerMetricsProvider();
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // MetricsDataProvider:
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void ProvideGeneralMetrics(
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ChromeUserMetricsExtension* uma_proto) OVERRIDE;
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Records the passed profiled data, which should be a snapshot of the
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // browser's profiled performance during startup for a single process.
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void RecordProfilerData(
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const tracked_objects::ProcessDataSnapshot& process_data,
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      int process_type);
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Saved cache of generated Profiler event protos, to be copied into the UMA
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // proto when ProvideGeneralMetrics() is called.
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ProfilerEventProto profiler_event_cache_;
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // True if this instance has recorded profiler data since the last call to
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // ProvideGeneralMetrics().
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool has_profiler_data_;
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ProfilerMetricsProvider);
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace metrics
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // COMPONENTS_METRICS_PROFILER_PROFILER_METRICS_PROVIDER_H_
50