blob: 807254462c120ec709e5bf5a278b2a4d82ce764a [file] [log] [blame]
// Copyright 2017 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ARC_SETUP_ARC_SETUP_METRICS_H_
#define ARC_SETUP_ARC_SETUP_METRICS_H_
#include <memory>
#include <string>
#include <base/macros.h>
#include <base/time/time.h>
class MetricsLibraryInterface;
namespace arc {
// Enum is append only and need to match the definition in
// Chromium's src/tools/metrics/histograms/enums.xml.
enum class ArcBootContinueCodeInstallationResult {
SUCCESS = 0,
ERROR_HOST_SIDE_CODE_NOT_READY = 1,
ERROR_CANNOT_INSTALL_HOST_CODE = 2,
COUNT
};
// Enum is append only and need to match the definition in
// Chromium's src/tools/metrics/histograms/enums.xml.
enum class ArcCodeRelocationResult {
SUCCESS = 0,
ERROR_BOOTLOCKBOXD_NOT_READY = 1,
ERROR_UNABLE_TO_RELOCATE = 2,
ERROR_UNABLE_TO_SIGN = 3,
SALT_EMPTY = 4,
COUNT
};
// Enum is append only and need to match the definition in
// Chromium's src/tools/metrics/histograms/enums.xml.
enum class ArcCodeVerificationResult {
SUCCESS = 0,
ERROR_BOOTLOCKBOXD_NOT_READY = 1,
OTA = 2,
INVALID_CODE = 3,
COUNT
};
// Enum is append only and need to match the definition in
// Chromium's src/tools/metrics/histograms/enums.xml.
// Note we only care important upgrade types listed below, rather than
// all possible permutations.
enum class ArcSdkVersionUpgradeType {
NO_UPGRADE = 0,
UNKNOWN_UPGRADE = 1,
UNKNOWN_DOWNGRADE = 2,
// M_TO_N is deprecated
M_TO_P = 4,
N_TO_P = 5,
// P_TO_Q is deprecated
N_TO_R = 7,
P_TO_R = 8,
COUNT
};
// A class that sends UMA metrics using MetricsLibrary. There is no D-Bus call
// because MetricsLibrary writes the UMA data to /var/lib/metrics/uma-events.
class ArcSetupMetrics {
public:
ArcSetupMetrics();
ArcSetupMetrics(const ArcSetupMetrics&) = delete;
ArcSetupMetrics& operator=(const ArcSetupMetrics&) = delete;
~ArcSetupMetrics() = default;
// Sends host code verification result.
bool SendCodeVerificationResult(
ArcCodeVerificationResult verification_result);
// Sends host code relocation result.
bool SendCodeRelocationResult(ArcCodeRelocationResult relocation_result);
// Sends the time verifying host generated code.
bool SendCodeVerificationTime(base::TimeDelta verificaiton_time);
// Sends the time relocating android boot*.art code.
bool SendCodeRelocationTime(base::TimeDelta relocation_time);
// Sends boot-continue host code installation results.
bool SendBootContinueCodeInstallationResult(
ArcBootContinueCodeInstallationResult verification_result);
// Sends host code signing time using TPM bootlockbox.
bool SendCodeSigningTime(base::TimeDelta signing_time);
// Sends total time on host code integrity checking. This includes time on
// verification. And also the time on relocation and signing if verification
// fails.
bool SendCodeIntegrityCheckingTotalTime(base::TimeDelta total_time);
// Sends the type of SDK version upgrade.
bool SendSdkVersionUpgradeType(ArcSdkVersionUpgradeType upgrade_type);
void SetMetricsLibraryForTesting(
std::unique_ptr<MetricsLibraryInterface> metrics_library);
MetricsLibraryInterface* metrics_library_for_testing() {
return metrics_library_.get();
}
private:
bool SendDurationToUMA(const std::string& metric_name,
base::TimeDelta duration);
std::unique_ptr<MetricsLibraryInterface> metrics_library_;
};
} // namespace arc
#endif // ARC_SETUP_ARC_SETUP_METRICS_H_