Commit 19e4d784 authored by Jae Hoon Kim's avatar Jae Hoon Kim Committed by Commit Bot

Metrics for PluginVM DLC rollout

Measure the rate in which PluginVM DLC is fallingback to rootfs resident
PluginVM. A good metric to have in order to determine a stable state of
DLC(s) to deem removal from rootfs in the future.

Bug: chromium:145814572
Test: unit_tests --gtest_filter=PluginVm*
Change-Id: Ib13aa2f6922954bc18f973abf746a3485d0980fd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2004056
Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: default avatarTimothy Loh <timloh@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732536}
parent d3fb2e99
...@@ -169,6 +169,8 @@ void PluginVmInstaller::OnDlcDownloadCompleted( ...@@ -169,6 +169,8 @@ void PluginVmInstaller::OnDlcDownloadCompleted(
state_ = State::DOWNLOAD_DLC_FAILED; state_ = State::DOWNLOAD_DLC_FAILED;
if (observer_) if (observer_)
observer_->OnDownloadFailed(FailureReason::DLC_DOWNLOAD_FAILED); observer_->OnDownloadFailed(FailureReason::DLC_DOWNLOAD_FAILED);
RecordPluginVmDlcUseResultHistogram(
PluginVmDlcUseResult::kFallbackToRootFsInvalidDlcError);
return; return;
} }
...@@ -178,6 +180,10 @@ void PluginVmInstaller::OnDlcDownloadCompleted( ...@@ -178,6 +180,10 @@ void PluginVmInstaller::OnDlcDownloadCompleted(
// PluginVM will be rootfs resident as a fallback. // PluginVM will be rootfs resident as a fallback.
LOG(ERROR) << "PluginVM DLC installation failed, falling back to rootfs " LOG(ERROR) << "PluginVM DLC installation failed, falling back to rootfs "
"resident PluginVM."; "resident PluginVM.";
RecordPluginVmDlcUseResultHistogram(
PluginVmDlcUseResult::kFallbackToRootFsInternalDlcError);
} else {
RecordPluginVmDlcUseResultHistogram(PluginVmDlcUseResult::kDlcSuccess);
} }
if (observer_) if (observer_)
......
...@@ -300,11 +300,11 @@ class PluginVmInstallerDownloadServiceTest : public PluginVmInstallerTestBase { ...@@ -300,11 +300,11 @@ class PluginVmInstallerDownloadServiceTest : public PluginVmInstallerTestBase {
} }
void TearDown() override { void TearDown() override {
PluginVmInstallerTestBase::TearDown();
histogram_tester_.reset(); histogram_tester_.reset();
download_service_.reset(); download_service_.reset();
client_.reset(); client_.reset();
PluginVmInstallerTestBase::TearDown();
} }
std::unique_ptr<download::test::TestDownloadService> download_service_; std::unique_ptr<download::test::TestDownloadService> download_service_;
...@@ -353,6 +353,13 @@ class PluginVmInstallerDriveTest : public PluginVmInstallerTestBase { ...@@ -353,6 +353,13 @@ class PluginVmInstallerDriveTest : public PluginVmInstallerTestBase {
installer_->SetDriveDownloadServiceForTesting( installer_->SetDriveDownloadServiceForTesting(
std::move(drive_download_service)); std::move(drive_download_service));
histogram_tester_ = std::make_unique<base::HistogramTester>();
}
void TearDown() override {
histogram_tester_.reset();
PluginVmInstallerTestBase::TearDown();
} }
SimpleFakeDriveService* SetUpSimpleFakeDriveService() { SimpleFakeDriveService* SetUpSimpleFakeDriveService() {
...@@ -367,6 +374,7 @@ class PluginVmInstallerDriveTest : public PluginVmInstallerTestBase { ...@@ -367,6 +374,7 @@ class PluginVmInstallerDriveTest : public PluginVmInstallerTestBase {
PluginVmDriveImageDownloadService* drive_download_service_; PluginVmDriveImageDownloadService* drive_download_service_;
drive::FakeDriveService* fake_drive_service_; drive::FakeDriveService* fake_drive_service_;
std::unique_ptr<base::HistogramTester> histogram_tester_;
private: private:
DISALLOW_COPY_AND_ASSIGN(PluginVmInstallerDriveTest); DISALLOW_COPY_AND_ASSIGN(PluginVmInstallerDriveTest);
...@@ -619,6 +627,8 @@ TEST_F(PluginVmInstallerDriveTest, SuccessfulDriveDownloadTest) { ...@@ -619,6 +627,8 @@ TEST_F(PluginVmInstallerDriveTest, SuccessfulDriveDownloadTest) {
.Times(AtLeast(1)); .Times(AtLeast(1));
StartAndRunToCompletion(); StartAndRunToCompletion();
histogram_tester_->ExpectUniqueSample(kPluginVmDlcUseResultHistogram,
PluginVmDlcUseResult::kDlcSuccess, 1);
} }
// TODO(b/145814572): Modify test to block once PluginVM DLC is stable and // TODO(b/145814572): Modify test to block once PluginVM DLC is stable and
...@@ -632,6 +642,9 @@ TEST_F(PluginVmInstallerDriveTest, ...@@ -632,6 +642,9 @@ TEST_F(PluginVmInstallerDriveTest,
EXPECT_CALL(*observer_, OnDownloadCompleted()); EXPECT_CALL(*observer_, OnDownloadCompleted());
StartAndRunToCompletion(); StartAndRunToCompletion();
histogram_tester_->ExpectUniqueSample(
kPluginVmDlcUseResultHistogram,
PluginVmDlcUseResult::kFallbackToRootFsInternalDlcError, 1);
} }
TEST_F(PluginVmInstallerDriveTest, InstallingPluginVmDlcWhenUnsupported) { TEST_F(PluginVmInstallerDriveTest, InstallingPluginVmDlcWhenUnsupported) {
...@@ -642,6 +655,9 @@ TEST_F(PluginVmInstallerDriveTest, InstallingPluginVmDlcWhenUnsupported) { ...@@ -642,6 +655,9 @@ TEST_F(PluginVmInstallerDriveTest, InstallingPluginVmDlcWhenUnsupported) {
EXPECT_CALL(*observer_, OnDownloadFailed(_)).Times(1); EXPECT_CALL(*observer_, OnDownloadFailed(_)).Times(1);
StartAndRunToCompletion(); StartAndRunToCompletion();
histogram_tester_->ExpectUniqueSample(
kPluginVmDlcUseResultHistogram,
PluginVmDlcUseResult::kFallbackToRootFsInvalidDlcError, 1);
} }
} // namespace plugin_vm } // namespace plugin_vm
...@@ -10,6 +10,7 @@ const char kPluginVmImageDownloadedSizeHistogram[] = ...@@ -10,6 +10,7 @@ const char kPluginVmImageDownloadedSizeHistogram[] =
"PluginVm.Image.DownloadedSize"; "PluginVm.Image.DownloadedSize";
const char kPluginVmLaunchResultHistogram[] = "PluginVm.LaunchResult"; const char kPluginVmLaunchResultHistogram[] = "PluginVm.LaunchResult";
const char kPluginVmSetupResultHistogram[] = "PluginVm.SetupResult"; const char kPluginVmSetupResultHistogram[] = "PluginVm.SetupResult";
const char kPluginVmDlcUseResultHistogram[] = "PluginVm.DlcUseResult";
const char kPluginVmSetupTimeHistogram[] = "PluginVm.SetupTime"; const char kPluginVmSetupTimeHistogram[] = "PluginVm.SetupTime";
void RecordPluginVmImageDownloadedSizeHistogram(uint64_t bytes_downloaded) { void RecordPluginVmImageDownloadedSizeHistogram(uint64_t bytes_downloaded) {
...@@ -26,6 +27,10 @@ void RecordPluginVmSetupResultHistogram(PluginVmSetupResult setup_result) { ...@@ -26,6 +27,10 @@ void RecordPluginVmSetupResultHistogram(PluginVmSetupResult setup_result) {
base::UmaHistogramEnumeration(kPluginVmSetupResultHistogram, setup_result); base::UmaHistogramEnumeration(kPluginVmSetupResultHistogram, setup_result);
} }
void RecordPluginVmDlcUseResultHistogram(PluginVmDlcUseResult dlc_use_result) {
base::UmaHistogramEnumeration(kPluginVmDlcUseResultHistogram, dlc_use_result);
}
void RecordPluginVmSetupTimeHistogram(base::TimeDelta setup_time) { void RecordPluginVmSetupTimeHistogram(base::TimeDelta setup_time) {
base::UmaHistogramLongTimes(kPluginVmSetupTimeHistogram, setup_time); base::UmaHistogramLongTimes(kPluginVmSetupTimeHistogram, setup_time);
} }
......
...@@ -12,6 +12,7 @@ namespace plugin_vm { ...@@ -12,6 +12,7 @@ namespace plugin_vm {
extern const char kPluginVmImageDownloadedSizeHistogram[]; extern const char kPluginVmImageDownloadedSizeHistogram[];
extern const char kPluginVmLaunchResultHistogram[]; extern const char kPluginVmLaunchResultHistogram[];
extern const char kPluginVmSetupResultHistogram[]; extern const char kPluginVmSetupResultHistogram[];
extern const char kPluginVmDlcUseResultHistogram[];
// Histogram for recording successful setup time. // Histogram for recording successful setup time.
// When error occurs and user hits retry button in setup dialog - time between // When error occurs and user hits retry button in setup dialog - time between
// pressing retry button and setup being finished is recorded. // pressing retry button and setup being finished is recorded.
...@@ -46,9 +47,17 @@ enum class PluginVmSetupResult { ...@@ -46,9 +47,17 @@ enum class PluginVmSetupResult {
kMaxValue = kUserCancelledDownloadingPluginVmDlc, kMaxValue = kUserCancelledDownloadingPluginVmDlc,
}; };
enum class PluginVmDlcUseResult {
kDlcSuccess = 0,
kFallbackToRootFsInvalidDlcError = 1,
kFallbackToRootFsInternalDlcError = 2,
kMaxValue = kFallbackToRootFsInternalDlcError,
};
void RecordPluginVmImageDownloadedSizeHistogram(uint64_t bytes_downloaded); void RecordPluginVmImageDownloadedSizeHistogram(uint64_t bytes_downloaded);
void RecordPluginVmLaunchResultHistogram(PluginVmLaunchResult launch_result); void RecordPluginVmLaunchResultHistogram(PluginVmLaunchResult launch_result);
void RecordPluginVmSetupResultHistogram(PluginVmSetupResult setup_result); void RecordPluginVmSetupResultHistogram(PluginVmSetupResult setup_result);
void RecordPluginVmDlcUseResultHistogram(PluginVmDlcUseResult dlc_use_result);
void RecordPluginVmSetupTimeHistogram(base::TimeDelta setup_time); void RecordPluginVmSetupTimeHistogram(base::TimeDelta setup_time);
} // namespace plugin_vm } // namespace plugin_vm
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment