blob: 7b7958be491de551ee11aff82606b3bd75450b3b [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"
12#include "components/arc/arc_bridge_service.h"
13#include "components/arc/arc_service.h"
14#include "components/arc/common/arc_bridge.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
21// Collects information from other ArcServices and send UMA metrics.
lhchavezde2de962016-07-13 04:43:0122class ArcMetricsService
23 : public ArcService,
24 public InstanceHolder<mojom::MetricsInstance>::Observer,
25 public mojom::MetricsHost {
cnwan1ed447862016-03-21 08:00:1026 public:
27 explicit ArcMetricsService(ArcBridgeService* bridge_service);
28 ~ArcMetricsService() override;
29
lhchavezde2de962016-07-13 04:43:0130 // InstanceHolder<mojom::MetricsInstance>::Observer overrides.
31 void OnInstanceReady() override;
32 void OnInstanceClosed() override;
33
34 // Implementations for InstanceHolder<mojom::ProcessInstance>::Observer.
35 void OnProcessInstanceReady();
36 void OnProcessInstanceClosed();
cnwan1ed447862016-03-21 08:00:1037
cywang020b77ac2016-04-27 06:13:0938 // MetricsHost overrides.
39 void ReportBootProgress(
40 mojo::Array<arc::mojom::BootProgressEventPtr> events) override;
41
cnwan1ed447862016-03-21 08:00:1042 private:
43 bool CalledOnValidThread();
44 void RequestProcessList();
leon.han890322912016-04-16 23:22:5345 void ParseProcessList(
46 mojo::Array<arc::mojom::RunningAppProcessInfoPtr> processes);
cnwan1ed447862016-03-21 08:00:1047
cywang020b77ac2016-04-27 06:13:0948 // DBus callbacks.
49 void OnArcStartTimeRetrieved(bool success, base::TimeTicks arc_start_time);
50
51 private:
lhchavezde2de962016-07-13 04:43:0152 // Adapter to be able to also observe ProcessInstance events.
53 class ProcessObserver
54 : public InstanceHolder<mojom::ProcessInstance>::Observer {
55 public:
56 explicit ProcessObserver(ArcMetricsService* arc_metrics_service);
57 ~ProcessObserver() override;
58
59 private:
60 // InstanceHolder<mojom::ProcessInstance>::Observer overrides.
61 void OnInstanceReady() override;
62 void OnInstanceClosed() override;
63
64 ArcMetricsService* arc_metrics_service_;
65 };
66
cywang020b77ac2016-04-27 06:13:0967 mojo::Binding<mojom::MetricsHost> binding_;
68
lhchavezde2de962016-07-13 04:43:0169 ProcessObserver process_observer_;
cnwan1ed447862016-03-21 08:00:1070 base::ThreadChecker thread_checker_;
71 base::RepeatingTimer timer_;
72
cyleecb9dfa62016-05-04 23:32:5273 OomKillsMonitor oom_kills_monitor_;
cyleeb238d392016-03-28 06:33:5474
cywang020b77ac2016-04-27 06:13:0975 base::TimeTicks arc_start_time_;
76
cnwan1ed447862016-03-21 08:00:1077 // Always keep this the last member of this class to make sure it's the
78 // first thing to be destructed.
79 base::WeakPtrFactory<ArcMetricsService> weak_ptr_factory_;
80
81 DISALLOW_COPY_AND_ASSIGN(ArcMetricsService);
82};
83
84} // namespace arc
85
lhchavezde2de962016-07-13 04:43:0186#endif // COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H_