blob: c240fda6151faeb48cf977fed5da38d9df5ffd9b [file] [log] [blame]
cnwan1ed447862016-03-21 08:00:101// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
lhchavezde2de962016-07-13 04:43:015#ifndef COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H_
6#define COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H_
cnwan1ed447862016-03-21 08:00:107
8#include "base/macros.h"
9#include "base/memory/weak_ptr.h"
10#include "base/threading/thread_checker.h"
11#include "base/timer/timer.h"
cnwan1ed447862016-03-21 08:00:1012#include "components/arc/arc_service.h"
yusukes883612b2016-10-13 18:07:0513#include "components/arc/common/metrics.mojom.h"
14#include "components/arc/common/process.mojom.h"
lhchavezde2de962016-07-13 04:43:0115#include "components/arc/instance_holder.h"
cyleecb9dfa62016-05-04 23:32:5216#include "components/arc/metrics/oom_kills_monitor.h"
cywang020b77ac2016-04-27 06:13:0917#include "mojo/public/cpp/bindings/binding.h"
cnwan1ed447862016-03-21 08:00:1018
19namespace arc {
20
yusukes883612b2016-10-13 18:07:0521class ArcBridgeService;
22
cnwan1ed447862016-03-21 08:00:1023// Collects information from other ArcServices and send UMA metrics.
lhchavezde2de962016-07-13 04:43:0124class ArcMetricsService
25 : public ArcService,
26 public InstanceHolder<mojom::MetricsInstance>::Observer,
27 public mojom::MetricsHost {
cnwan1ed447862016-03-21 08:00:1028 public:
29 explicit ArcMetricsService(ArcBridgeService* bridge_service);
30 ~ArcMetricsService() override;
31
lhchavezde2de962016-07-13 04:43:0132 // InstanceHolder<mojom::MetricsInstance>::Observer overrides.
33 void OnInstanceReady() override;
34 void OnInstanceClosed() override;
35
36 // Implementations for InstanceHolder<mojom::ProcessInstance>::Observer.
37 void OnProcessInstanceReady();
38 void OnProcessInstanceClosed();
cnwan1ed447862016-03-21 08:00:1039
cywang020b77ac2016-04-27 06:13:0940 // MetricsHost overrides.
41 void ReportBootProgress(
yusukes883612b2016-10-13 18:07:0542 mojo::Array<mojom::BootProgressEventPtr> events) override;
cywang020b77ac2016-04-27 06:13:0943
cnwan1ed447862016-03-21 08:00:1044 private:
45 bool CalledOnValidThread();
46 void RequestProcessList();
yusukes883612b2016-10-13 18:07:0547 void ParseProcessList(mojo::Array<mojom::RunningAppProcessInfoPtr> processes);
cnwan1ed447862016-03-21 08:00:1048
cywang020b77ac2016-04-27 06:13:0949 // DBus callbacks.
50 void OnArcStartTimeRetrieved(bool success, base::TimeTicks arc_start_time);
51
52 private:
lhchavezde2de962016-07-13 04:43:0153 // Adapter to be able to also observe ProcessInstance events.
54 class ProcessObserver
55 : public InstanceHolder<mojom::ProcessInstance>::Observer {
56 public:
57 explicit ProcessObserver(ArcMetricsService* arc_metrics_service);
58 ~ProcessObserver() override;
59
60 private:
61 // InstanceHolder<mojom::ProcessInstance>::Observer overrides.
62 void OnInstanceReady() override;
63 void OnInstanceClosed() override;
64
65 ArcMetricsService* arc_metrics_service_;
66 };
67
cywang020b77ac2016-04-27 06:13:0968 mojo::Binding<mojom::MetricsHost> binding_;
69
lhchavezde2de962016-07-13 04:43:0170 ProcessObserver process_observer_;
cnwan1ed447862016-03-21 08:00:1071 base::ThreadChecker thread_checker_;
72 base::RepeatingTimer timer_;
73
gab620b8362016-08-13 18:38:2974 OomKillsMonitor::Handle oom_kills_monitor_handle_;
cyleeb238d392016-03-28 06:33:5475
cywang020b77ac2016-04-27 06:13:0976 base::TimeTicks arc_start_time_;
77
cnwan1ed447862016-03-21 08:00:1078 // Always keep this the last member of this class to make sure it's the
79 // first thing to be destructed.
80 base::WeakPtrFactory<ArcMetricsService> weak_ptr_factory_;
81
82 DISALLOW_COPY_AND_ASSIGN(ArcMetricsService);
83};
84
85} // namespace arc
86
lhchavezde2de962016-07-13 04:43:0187#endif // COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H_