Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: components/arc/metrics/arc_metrics_service.cc

Issue 2906503003: ARC: Add BootType parameter to ReportBootProgress() in metrics.mojom (Closed)
Patch Set: Address more comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/arc/metrics/arc_metrics_service.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/arc/metrics/arc_metrics_service.h" 5 #include "components/arc/metrics/arc_metrics_service.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/metrics/histogram_functions.h"
11 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
12 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
13 #include "chromeos/dbus/dbus_thread_manager.h" 14 #include "chromeos/dbus/dbus_thread_manager.h"
14 #include "chromeos/dbus/session_manager_client.h" 15 #include "chromeos/dbus/session_manager_client.h"
15 #include "components/arc/arc_bridge_service.h" 16 #include "components/arc/arc_bridge_service.h"
16 17
18 namespace arc {
19
17 namespace { 20 namespace {
18 21
19 const int kRequestProcessListPeriodInMinutes = 5; 22 constexpr base::TimeDelta kUmaMinTime = base::TimeDelta::FromMilliseconds(1);
20 const char kArcProcessNamePrefix[] = "org.chromium.arc."; 23 constexpr int kUmaNumBuckets = 50;
21 const char kGmsProcessNamePrefix[] = "com.google.android.gms"; 24
22 const char kBootProgressEnableScreen[] = "boot_progress_enable_screen"; 25 constexpr base::TimeDelta kRequestProcessListPeriod =
26 base::TimeDelta::FromMinutes(5);
27 constexpr char kArcProcessNamePrefix[] = "org.chromium.arc.";
28 constexpr char kGmsProcessNamePrefix[] = "com.google.android.gms";
29 constexpr char kBootProgressEnableScreen[] = "boot_progress_enable_screen";
30
31 std::string BootTypeToString(mojom::BootType boot_type) {
32 switch (boot_type) {
33 case mojom::BootType::UNKNOWN:
34 return ""; // for backward compatibility.
35 case mojom::BootType::FIRST_BOOT:
36 return ".FirstBoot";
37 case mojom::BootType::FIRST_BOOT_AFTER_UPDATE:
38 return ".FirstBootAfterUpdate";
39 case mojom::BootType::REGULAR_BOOT:
40 return ".RegularBoot";
41 }
42 NOTREACHED();
43 return "";
44 }
23 45
24 } // namespace 46 } // namespace
25 47
26 namespace arc {
27
28 ArcMetricsService::ArcMetricsService(ArcBridgeService* bridge_service) 48 ArcMetricsService::ArcMetricsService(ArcBridgeService* bridge_service)
29 : ArcService(bridge_service), 49 : ArcService(bridge_service),
30 binding_(this), 50 binding_(this),
31 process_observer_(this), 51 process_observer_(this),
32 weak_ptr_factory_(this) { 52 weak_ptr_factory_(this) {
33 arc_bridge_service()->metrics()->AddObserver(this); 53 arc_bridge_service()->metrics()->AddObserver(this);
34 arc_bridge_service()->process()->AddObserver(&process_observer_); 54 arc_bridge_service()->process()->AddObserver(&process_observer_);
35 } 55 }
36 56
37 ArcMetricsService::~ArcMetricsService() { 57 ArcMetricsService::~ArcMetricsService() {
(...skipping 19 matching lines...) Expand all
57 77
58 void ArcMetricsService::OnInstanceClosed() { 78 void ArcMetricsService::OnInstanceClosed() {
59 VLOG(2) << "Close metrics service."; 79 VLOG(2) << "Close metrics service.";
60 DCHECK(CalledOnValidThread()); 80 DCHECK(CalledOnValidThread());
61 if (binding_.is_bound()) 81 if (binding_.is_bound())
62 binding_.Unbind(); 82 binding_.Unbind();
63 } 83 }
64 84
65 void ArcMetricsService::OnProcessInstanceReady() { 85 void ArcMetricsService::OnProcessInstanceReady() {
66 VLOG(2) << "Start updating process list."; 86 VLOG(2) << "Start updating process list.";
67 timer_.Start(FROM_HERE, 87 timer_.Start(FROM_HERE, kRequestProcessListPeriod, this,
68 base::TimeDelta::FromMinutes(kRequestProcessListPeriodInMinutes), 88 &ArcMetricsService::RequestProcessList);
69 this, &ArcMetricsService::RequestProcessList);
70 } 89 }
71 90
72 void ArcMetricsService::OnProcessInstanceClosed() { 91 void ArcMetricsService::OnProcessInstanceClosed() {
73 VLOG(2) << "Stop updating process list."; 92 VLOG(2) << "Stop updating process list.";
74 timer_.Stop(); 93 timer_.Stop();
75 } 94 }
76 95
77 void ArcMetricsService::RequestProcessList() { 96 void ArcMetricsService::RequestProcessList() {
78 mojom::ProcessInstance* process_instance = ARC_GET_INSTANCE_FOR_METHOD( 97 mojom::ProcessInstance* process_instance = ARC_GET_INSTANCE_FOR_METHOD(
79 arc_bridge_service()->process(), RequestProcessList); 98 arc_bridge_service()->process(), RequestProcessList);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 if (!binding_.is_bound()) { 148 if (!binding_.is_bound()) {
130 mojom::MetricsHostPtr host_ptr; 149 mojom::MetricsHostPtr host_ptr;
131 binding_.Bind(mojo::MakeRequest(&host_ptr)); 150 binding_.Bind(mojo::MakeRequest(&host_ptr));
132 instance->Init(std::move(host_ptr)); 151 instance->Init(std::move(host_ptr));
133 } 152 }
134 arc_start_time_ = arc_start_time; 153 arc_start_time_ = arc_start_time;
135 VLOG(2) << "ARC start @" << arc_start_time_; 154 VLOG(2) << "ARC start @" << arc_start_time_;
136 } 155 }
137 156
138 void ArcMetricsService::ReportBootProgress( 157 void ArcMetricsService::ReportBootProgress(
139 std::vector<mojom::BootProgressEventPtr> events) { 158 std::vector<mojom::BootProgressEventPtr> events,
159 mojom::BootType boot_type) {
140 DCHECK(CalledOnValidThread()); 160 DCHECK(CalledOnValidThread());
161 // TODO(yusukes): Return immediately with with LOG(ERROR) when |boot_type| is
162 // UNKNOWN. Once the container is updated, we'll never see the boot type.
141 int64_t arc_start_time_in_ms = 163 int64_t arc_start_time_in_ms =
142 (arc_start_time_ - base::TimeTicks()).InMilliseconds(); 164 (arc_start_time_ - base::TimeTicks()).InMilliseconds();
165 const std::string suffix = BootTypeToString(boot_type);
166 // TODO(yusukes): Define kUmaMaxTime and always use 60s.
167 const base::TimeDelta max_time = base::TimeDelta::FromSeconds(
168 boot_type == mojom::BootType::UNKNOWN ? 30 : 60);
143 for (const auto& event : events) { 169 for (const auto& event : events) {
144 VLOG(2) << "Report boot progress event:" << event->event << "@" 170 VLOG(2) << "Report boot progress event:" << event->event << "@"
145 << event->uptimeMillis; 171 << event->uptimeMillis;
146 std::string title = "Arc." + event->event; 172 const std::string name = "Arc." + event->event + suffix;
147 base::TimeDelta elapsed_time = base::TimeDelta::FromMilliseconds( 173 const base::TimeDelta elapsed_time = base::TimeDelta::FromMilliseconds(
148 event->uptimeMillis - arc_start_time_in_ms); 174 event->uptimeMillis - arc_start_time_in_ms);
149 // Note: This leaks memory, which is expected behavior. 175 base::UmaHistogramCustomTimes(name, elapsed_time, kUmaMinTime, max_time,
150 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet( 176 kUmaNumBuckets);
151 title, base::TimeDelta::FromMilliseconds(1), 177 if (event->event.compare(kBootProgressEnableScreen) == 0) {
152 base::TimeDelta::FromSeconds(30), 50, 178 base::UmaHistogramCustomTimes("Arc.AndroidBootTime" + suffix,
153 base::HistogramBase::kUmaTargetedHistogramFlag); 179 elapsed_time, kUmaMinTime, max_time,
154 histogram->AddTime(elapsed_time); 180 kUmaNumBuckets);
155 if (event->event.compare(kBootProgressEnableScreen) == 0) 181 }
156 UMA_HISTOGRAM_CUSTOM_TIMES("Arc.AndroidBootTime", elapsed_time,
157 base::TimeDelta::FromMilliseconds(1),
158 base::TimeDelta::FromSeconds(30), 50);
159 } 182 }
160 } 183 }
161 184
162 ArcMetricsService::ProcessObserver::ProcessObserver( 185 ArcMetricsService::ProcessObserver::ProcessObserver(
163 ArcMetricsService* arc_metrics_service) 186 ArcMetricsService* arc_metrics_service)
164 : arc_metrics_service_(arc_metrics_service) {} 187 : arc_metrics_service_(arc_metrics_service) {}
165 188
166 ArcMetricsService::ProcessObserver::~ProcessObserver() = default; 189 ArcMetricsService::ProcessObserver::~ProcessObserver() = default;
167 190
168 void ArcMetricsService::ProcessObserver::OnInstanceReady() { 191 void ArcMetricsService::ProcessObserver::OnInstanceReady() {
169 arc_metrics_service_->OnProcessInstanceReady(); 192 arc_metrics_service_->OnProcessInstanceReady();
170 } 193 }
171 194
172 void ArcMetricsService::ProcessObserver::OnInstanceClosed() { 195 void ArcMetricsService::ProcessObserver::OnInstanceClosed() {
173 arc_metrics_service_->OnProcessInstanceClosed(); 196 arc_metrics_service_->OnProcessInstanceClosed();
174 } 197 }
175 198
176 } // namespace arc 199 } // namespace arc
OLDNEW
« no previous file with comments | « components/arc/metrics/arc_metrics_service.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698