| Index: components/arc/metrics/arc_metrics_service.cc
|
| diff --git a/components/arc/metrics/arc_metrics_service.cc b/components/arc/metrics/arc_metrics_service.cc
|
| index 2f391c598382e16dd158f43f3196667d7627bd53..52867ee63f3e3bd55f3d77efafa4a3b773edcff0 100644
|
| --- a/components/arc/metrics/arc_metrics_service.cc
|
| +++ b/components/arc/metrics/arc_metrics_service.cc
|
| @@ -8,23 +8,43 @@
|
| #include <utility>
|
|
|
| #include "base/logging.h"
|
| +#include "base/metrics/histogram_functions.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/strings/string_util.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "chromeos/dbus/session_manager_client.h"
|
| #include "components/arc/arc_bridge_service.h"
|
|
|
| +namespace arc {
|
| +
|
| namespace {
|
|
|
| -const int kRequestProcessListPeriodInMinutes = 5;
|
| -const char kArcProcessNamePrefix[] = "org.chromium.arc.";
|
| -const char kGmsProcessNamePrefix[] = "com.google.android.gms";
|
| -const char kBootProgressEnableScreen[] = "boot_progress_enable_screen";
|
| +constexpr base::TimeDelta kUmaMinTime = base::TimeDelta::FromMilliseconds(1);
|
| +constexpr int kUmaNumBuckets = 50;
|
| +
|
| +constexpr base::TimeDelta kRequestProcessListPeriod =
|
| + base::TimeDelta::FromMinutes(5);
|
| +constexpr char kArcProcessNamePrefix[] = "org.chromium.arc.";
|
| +constexpr char kGmsProcessNamePrefix[] = "com.google.android.gms";
|
| +constexpr char kBootProgressEnableScreen[] = "boot_progress_enable_screen";
|
| +
|
| +std::string BootTypeToString(mojom::BootType boot_type) {
|
| + switch (boot_type) {
|
| + case mojom::BootType::UNKNOWN:
|
| + return ""; // for backward compatibility.
|
| + case mojom::BootType::FIRST_BOOT:
|
| + return ".FirstBoot";
|
| + case mojom::BootType::FIRST_BOOT_AFTER_UPDATE:
|
| + return ".FirstBootAfterUpdate";
|
| + case mojom::BootType::REGULAR_BOOT:
|
| + return ".RegularBoot";
|
| + }
|
| + NOTREACHED();
|
| + return "";
|
| +}
|
|
|
| } // namespace
|
|
|
| -namespace arc {
|
| -
|
| ArcMetricsService::ArcMetricsService(ArcBridgeService* bridge_service)
|
| : ArcService(bridge_service),
|
| binding_(this),
|
| @@ -64,9 +84,8 @@ void ArcMetricsService::OnInstanceClosed() {
|
|
|
| void ArcMetricsService::OnProcessInstanceReady() {
|
| VLOG(2) << "Start updating process list.";
|
| - timer_.Start(FROM_HERE,
|
| - base::TimeDelta::FromMinutes(kRequestProcessListPeriodInMinutes),
|
| - this, &ArcMetricsService::RequestProcessList);
|
| + timer_.Start(FROM_HERE, kRequestProcessListPeriod, this,
|
| + &ArcMetricsService::RequestProcessList);
|
| }
|
|
|
| void ArcMetricsService::OnProcessInstanceClosed() {
|
| @@ -136,26 +155,30 @@ void ArcMetricsService::OnArcStartTimeRetrieved(
|
| }
|
|
|
| void ArcMetricsService::ReportBootProgress(
|
| - std::vector<mojom::BootProgressEventPtr> events) {
|
| + std::vector<mojom::BootProgressEventPtr> events,
|
| + mojom::BootType boot_type) {
|
| DCHECK(CalledOnValidThread());
|
| + // TODO(yusukes): Return immediately with with LOG(ERROR) when |boot_type| is
|
| + // UNKNOWN. Once the container is updated, we'll never see the boot type.
|
| int64_t arc_start_time_in_ms =
|
| (arc_start_time_ - base::TimeTicks()).InMilliseconds();
|
| + const std::string suffix = BootTypeToString(boot_type);
|
| + // TODO(yusukes): Define kUmaMaxTime and always use 60s.
|
| + const base::TimeDelta max_time = base::TimeDelta::FromSeconds(
|
| + boot_type == mojom::BootType::UNKNOWN ? 30 : 60);
|
| for (const auto& event : events) {
|
| VLOG(2) << "Report boot progress event:" << event->event << "@"
|
| << event->uptimeMillis;
|
| - std::string title = "Arc." + event->event;
|
| - base::TimeDelta elapsed_time = base::TimeDelta::FromMilliseconds(
|
| + const std::string name = "Arc." + event->event + suffix;
|
| + const base::TimeDelta elapsed_time = base::TimeDelta::FromMilliseconds(
|
| event->uptimeMillis - arc_start_time_in_ms);
|
| - // Note: This leaks memory, which is expected behavior.
|
| - base::HistogramBase* histogram = base::Histogram::FactoryTimeGet(
|
| - title, base::TimeDelta::FromMilliseconds(1),
|
| - base::TimeDelta::FromSeconds(30), 50,
|
| - base::HistogramBase::kUmaTargetedHistogramFlag);
|
| - histogram->AddTime(elapsed_time);
|
| - if (event->event.compare(kBootProgressEnableScreen) == 0)
|
| - UMA_HISTOGRAM_CUSTOM_TIMES("Arc.AndroidBootTime", elapsed_time,
|
| - base::TimeDelta::FromMilliseconds(1),
|
| - base::TimeDelta::FromSeconds(30), 50);
|
| + base::UmaHistogramCustomTimes(name, elapsed_time, kUmaMinTime, max_time,
|
| + kUmaNumBuckets);
|
| + if (event->event.compare(kBootProgressEnableScreen) == 0) {
|
| + base::UmaHistogramCustomTimes("Arc.AndroidBootTime" + suffix,
|
| + elapsed_time, kUmaMinTime, max_time,
|
| + kUmaNumBuckets);
|
| + }
|
| }
|
| }
|
|
|
|
|