blob: 0c46bc95e6985dd9962f09c498e765fc450dbf67 [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
5#ifndef COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H
6#define COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H
7
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"
cyleeb238d392016-03-28 06:33:5415#include "components/arc/metrics/arc_low_memory_killer_monitor.h"
cywang020b77ac2016-04-27 06:13:0916#include "mojo/public/cpp/bindings/binding.h"
cnwan1ed447862016-03-21 08:00:1017
18namespace arc {
19
20// Collects information from other ArcServices and send UMA metrics.
21class ArcMetricsService : public ArcService,
cywang020b77ac2016-04-27 06:13:0922 public ArcBridgeService::Observer,
23 public mojom::MetricsHost {
cnwan1ed447862016-03-21 08:00:1024 public:
25 explicit ArcMetricsService(ArcBridgeService* bridge_service);
26 ~ArcMetricsService() override;
27
28 // ArcBridgeService::Observer overrides.
cywang020b77ac2016-04-27 06:13:0929 void OnMetricsInstanceReady() override;
30 void OnMetricsInstanceClosed() override;
cnwan1ed447862016-03-21 08:00:1031 void OnProcessInstanceReady() override;
32 void OnProcessInstanceClosed() override;
33
cywang020b77ac2016-04-27 06:13:0934 // MetricsHost overrides.
35 void ReportBootProgress(
36 mojo::Array<arc::mojom::BootProgressEventPtr> events) override;
37
cnwan1ed447862016-03-21 08:00:1038 private:
39 bool CalledOnValidThread();
40 void RequestProcessList();
leon.han890322912016-04-16 23:22:5341 void ParseProcessList(
42 mojo::Array<arc::mojom::RunningAppProcessInfoPtr> processes);
cnwan1ed447862016-03-21 08:00:1043
cywang020b77ac2016-04-27 06:13:0944 // DBus callbacks.
45 void OnArcStartTimeRetrieved(bool success, base::TimeTicks arc_start_time);
46
47 private:
48 mojo::Binding<mojom::MetricsHost> binding_;
49
cnwan1ed447862016-03-21 08:00:1050 base::ThreadChecker thread_checker_;
51 base::RepeatingTimer timer_;
52
cyleeb238d392016-03-28 06:33:5453 ArcLowMemoryKillerMonitor low_memory_killer_minotor_;
54
cywang020b77ac2016-04-27 06:13:0955 base::TimeTicks arc_start_time_;
56
cnwan1ed447862016-03-21 08:00:1057 // Always keep this the last member of this class to make sure it's the
58 // first thing to be destructed.
59 base::WeakPtrFactory<ArcMetricsService> weak_ptr_factory_;
60
61 DISALLOW_COPY_AND_ASSIGN(ArcMetricsService);
62};
63
64} // namespace arc
65
cyleeb238d392016-03-28 06:33:5466#endif // COMPONENTS_ARC_METRICS_ARC_METRICS_SERVICE_H