summaryrefslogtreecommitdiff
path: root/libartbase/base/metrics/metrics_test.cc
diff options
context:
space:
mode:
authorCalin Juravle <calin@google.com>2021-06-25 15:34:09 -0700
committerLokesh Gidra <lokeshgidra@google.com>2021-07-01 02:11:38 +0000
commitdba72d888fdfa88ce8152d5116f8237c02dab775 (patch)
tree49d788fe387cd620f6e59441fbe9039d1054a87d /libartbase/base/metrics/metrics_test.cc
parentc5288040c3450bc4316783ee1e7a02c02c9c53b2 (diff)
Fix compiler filter / reason reporting and add the ISA to the metrics
The compiler filter / reason reporting was not accurate for a variety of reasons. (e.g. reporting was only done at startup, it was relying on imprecise APIs and had errors in the logic). In order to keep track of the precise optimization status, this CL introduces the concept of AppInfo, which encapsulates the data about the application / system server code paths, their optimization status and possible other metadata (e.g. profiles). To populate it, we rely on 2 distinct events: 1) The framework calling VMRuntime#registerAppInfo to inform the runtime about the applications code paths and their types (e.g. primary, split, secondary). 2) Class loading, when we can determine the actual optimization status like filters, reasons, and whether or not we can load the odex files. These events may happen in any order so we could deal with a partial state at some point in time, but in the majority of cases they always happen at Class Loading, followed by RegisterAppInfo. This CL also deletes the OatFileManager#getPrimaryOatFile which was a misleading API as it didn't work in most cases. It also adds more tests to the metrics/reporting infra for previous missing or unimplemented cases. Test: gtest Bug: 170149255 Merged-In: If0a7a25d06ff6fb89fe4861139b7dee61c05814d Change-Id: If0a7a25d06ff6fb89fe4861139b7dee61c05814d (cherry picked from commit c2753e6beec483b5b14161b6bbc8e0a86aef9397)
Diffstat (limited to 'libartbase/base/metrics/metrics_test.cc')
-rw-r--r--libartbase/base/metrics/metrics_test.cc135
1 files changed, 135 insertions, 0 deletions
diff --git a/libartbase/base/metrics/metrics_test.cc b/libartbase/base/metrics/metrics_test.cc
index 77f1b9729b..e7882ecffd 100644
--- a/libartbase/base/metrics/metrics_test.cc
+++ b/libartbase/base/metrics/metrics_test.cc
@@ -305,6 +305,141 @@ TEST_F(MetricsTest, ResetMetrics) {
metrics.ReportAllMetrics(&zero_backend);
}
+TEST(CompilerFilterReportingTest, FromName) {
+ ASSERT_EQ(CompilerFilterReportingFromName("error"),
+ CompilerFilterReporting::kError);
+ ASSERT_EQ(CompilerFilterReportingFromName("unknown"),
+ CompilerFilterReporting::kUnknown);
+ ASSERT_EQ(CompilerFilterReportingFromName("assume-verified"),
+ CompilerFilterReporting::kAssumeVerified);
+ ASSERT_EQ(CompilerFilterReportingFromName("extract"),
+ CompilerFilterReporting::kExtract);
+ ASSERT_EQ(CompilerFilterReportingFromName("verify"),
+ CompilerFilterReporting::kVerify);
+ ASSERT_EQ(CompilerFilterReportingFromName("space-profile"),
+ CompilerFilterReporting::kSpaceProfile);
+ ASSERT_EQ(CompilerFilterReportingFromName("space"),
+ CompilerFilterReporting::kSpace);
+ ASSERT_EQ(CompilerFilterReportingFromName("speed-profile"),
+ CompilerFilterReporting::kSpeedProfile);
+ ASSERT_EQ(CompilerFilterReportingFromName("speed"),
+ CompilerFilterReporting::kSpeed);
+ ASSERT_EQ(CompilerFilterReportingFromName("everything-profile"),
+ CompilerFilterReporting::kEverythingProfile);
+ ASSERT_EQ(CompilerFilterReportingFromName("everything"),
+ CompilerFilterReporting::kEverything);
+ ASSERT_EQ(CompilerFilterReportingFromName("run-from-apk"),
+ CompilerFilterReporting::kRunFromApk);
+ ASSERT_EQ(CompilerFilterReportingFromName("run-from-apk-fallback"),
+ CompilerFilterReporting::kRunFromApkFallback);
+}
+
+TEST(CompilerFilterReportingTest, Name) {
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kError),
+ "error");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kUnknown),
+ "unknown");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kAssumeVerified),
+ "assume-verified");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kExtract),
+ "extract");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kVerify),
+ "verify");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kSpaceProfile),
+ "space-profile");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kSpace),
+ "space");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kSpeedProfile),
+ "speed-profile");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kSpeed),
+ "speed");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kEverythingProfile),
+ "everything-profile");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kEverything),
+ "everything");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kRunFromApk),
+ "run-from-apk");
+ ASSERT_EQ(CompilerFilterReportingName(CompilerFilterReporting::kRunFromApkFallback),
+ "run-from-apk-fallback");
+}
+
+TEST(CompilerReason, FromName) {
+ ASSERT_EQ(CompilationReasonFromName("unknown"),
+ CompilationReason::kUnknown);
+ ASSERT_EQ(CompilationReasonFromName("first-boot"),
+ CompilationReason::kFirstBoot);
+ ASSERT_EQ(CompilationReasonFromName("boot-after-ota"),
+ CompilationReason::kBootAfterOTA);
+ ASSERT_EQ(CompilationReasonFromName("post-boot"),
+ CompilationReason::kPostBoot);
+ ASSERT_EQ(CompilationReasonFromName("install"),
+ CompilationReason::kInstall);
+ ASSERT_EQ(CompilationReasonFromName("install-fast"),
+ CompilationReason::kInstallFast);
+ ASSERT_EQ(CompilationReasonFromName("install-bulk"),
+ CompilationReason::kInstallBulk);
+ ASSERT_EQ(CompilationReasonFromName("install-bulk-secondary"),
+ CompilationReason::kInstallBulkSecondary);
+ ASSERT_EQ(CompilationReasonFromName("install-bulk-downgraded"),
+ CompilationReason::kInstallBulkDowngraded);
+ ASSERT_EQ(CompilationReasonFromName("install-bulk-secondary-downgraded"),
+ CompilationReason::kInstallBulkSecondaryDowngraded);
+ ASSERT_EQ(CompilationReasonFromName("bg-dexopt"),
+ CompilationReason::kBgDexopt);
+ ASSERT_EQ(CompilationReasonFromName("ab-ota"),
+ CompilationReason::kABOTA);
+ ASSERT_EQ(CompilationReasonFromName("inactive"),
+ CompilationReason::kInactive);
+ ASSERT_EQ(CompilationReasonFromName("shared"),
+ CompilationReason::kShared);
+ ASSERT_EQ(CompilationReasonFromName("install-with-dex-metadata"),
+ CompilationReason::kInstallWithDexMetadata);
+ ASSERT_EQ(CompilationReasonFromName("prebuilt"),
+ CompilationReason::kPrebuilt);
+ ASSERT_EQ(CompilationReasonFromName("cmdline"),
+ CompilationReason::kCmdLine);
+ ASSERT_EQ(CompilationReasonFromName("error"),
+ CompilationReason::kError);
+}
+
+TEST(CompilerReason, Name) {
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kUnknown),
+ "unknown");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kFirstBoot),
+ "first-boot");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kBootAfterOTA),
+ "boot-after-ota");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kPostBoot),
+ "post-boot");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstall),
+ "install");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstallFast),
+ "install-fast");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstallBulk),
+ "install-bulk");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstallBulkSecondary),
+ "install-bulk-secondary");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstallBulkDowngraded),
+ "install-bulk-downgraded");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstallBulkSecondaryDowngraded),
+ "install-bulk-secondary-downgraded");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kBgDexopt),
+ "bg-dexopt");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kABOTA),
+ "ab-ota");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInactive),
+ "inactive");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kShared),
+ "shared");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kInstallWithDexMetadata),
+ "install-with-dex-metadata");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kPrebuilt),
+ "prebuilt");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kCmdLine),
+ "cmdline");
+ ASSERT_EQ(CompilationReasonName(CompilationReason::kError),
+ "error");
+}
} // namespace metrics
} // namespace art