summaryrefslogtreecommitdiff
path: root/artd/artd_test.cc
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2025-03-14 21:10:02 +0000
committer Jiakai Zhang <jiakaiz@google.com> 2025-03-21 09:37:10 -0700
commit751ffe4a74b5b7aa11f8449ed5d48e5f1a23e0fa (patch)
tree7de736c8561280b3c34fb2f5e0c7c0c29bb79d92 /artd/artd_test.cc
parent0f7d94bd99bb554d663a4a527155eee6192780ee (diff)
Update the file GC to clean up SDM files.
If the best compilation artifacts are the ones generated on device, the file GC should delete the SDM files. Bug: 377474232 Test: atest ArtServiceTests Test: atest art_standalone_artd_tests Change-Id: If2f7c31525ff9a8a03cc16fefc16a6ebcf9fad96
Diffstat (limited to 'artd/artd_test.cc')
-rw-r--r--artd/artd_test.cc49
1 files changed, 49 insertions, 0 deletions
diff --git a/artd/artd_test.cc b/artd/artd_test.cc
index d6e383daf3..b7244451fa 100644
--- a/artd/artd_test.cc
+++ b/artd/artd_test.cc
@@ -2230,15 +2230,23 @@ TEST_F(ArtdTest, mergeProfilesWithOptionsDumpClassesAndMethods) {
CheckContent(output_profile.profilePath.tmpPath, "dump");
}
+static std::string EncodeLocationForDalvikCache(const std::string& location) {
+ std::string encoded = location.substr(/*pos=*/1); // Remove the leading '/';
+ std::replace(encoded.begin(), encoded.end(), '/', '@');
+ return encoded;
+}
+
class ArtdCleanupTest : public ArtdTest {
protected:
void SetUpForCleanup() {
// Unmanaged files.
CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/1.odex");
+ CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/1.arm64.sdm");
CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/oat/1.odex");
CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/oat/1.txt");
CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/oat/arm64/1.txt");
CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/oat/arm64/1.tmp");
+ CreateGcKeptFile(android_data_ + "/user_de/0/com.android.foo/oat/arm64/1.sdc");
// Files to keep.
CreateGcKeptFile(android_data_ + "/misc/profiles/cur/1/com.android.foo/primary.prof");
@@ -2266,6 +2274,15 @@ class ArtdCleanupTest : public ArtdTest {
"/123456-7890/user/1/com.android.foo/cache/oat_primary/arm64/base.art");
CreateGcKeptFile(android_data_ +
"/user/0/com.android.foo/cache/not_oat_dir/oat_primary/arm64/base.art");
+ CreateGcKeptFile(android_data_ +
+ "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/base.arm64.sdm");
+ CreateGcKeptFile(android_data_ +
+ "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/oat/arm64/base.sdc");
+ CreateGcKeptFile(android_data_ +
+ "/app/~~jhrwafasr==/com.android.qux-bredcweff==/base.arm64.sdm");
+ CreateGcKeptFile(android_data_ + "/dalvik-cache/arm64/" +
+ EncodeLocationForDalvikCache(android_data_) +
+ "@app@~~jhrwafasr==@com.android.qux-bredcweff==@base.apk@classes.sdc");
// Files to remove.
CreateGcRemovedFile(android_data_ + "/misc/profiles/ref/com.android.foo/primary.prof");
@@ -2307,6 +2324,26 @@ class ArtdCleanupTest : public ArtdTest {
"/user/0/com.android.foo/cache/oat_primary/arm64/different_dex.art");
CreateGcRemovedFile(android_data_ +
"/user/0/com.android.foo/cache/oat_primary/different_isa/base.art");
+ CreateGcRemovedFile(android_data_ +
+ "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/different_dex.arm64.sdm");
+ CreateGcRemovedFile(
+ android_data_ +
+ "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/oat/arm64/different_dex.sdc");
+ CreateGcRemovedFile(android_data_ +
+ "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/base.different_isa.sdm");
+ CreateGcRemovedFile(
+ android_data_ +
+ "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/oat/different_isa/base.sdc");
+ CreateGcRemovedFile(android_data_ +
+ "/app/~~jhrwafasr==/com.android.qux-bredcweff==/different_dex.arm64.sdm");
+ CreateGcRemovedFile(
+ android_data_ + "/dalvik-cache/arm64/" + EncodeLocationForDalvikCache(android_data_) +
+ "@app@~~jhrwafasr==@com.android.qux-bredcweff==@different_dex.apk@classes.sdc");
+ CreateGcRemovedFile(android_data_ +
+ "/app/~~jhrwafasr==/com.android.qux-bredcweff==/base.different_isa.sdm");
+ CreateGcRemovedFile(android_data_ + "/dalvik-cache/different_isa/" +
+ EncodeLocationForDalvikCache(android_data_) +
+ "@app@~~jhrwafasr==@com.android.qux-bredcweff==@base.apk@classes.sdc");
}
void CreateGcRemovedFile(const std::string& path) {
@@ -2347,6 +2384,18 @@ class ArtdCleanupTest : public ArtdTest {
.isInDalvikCache = false}},
},
{
+ SecureDexMetadataWithCompanionPaths{
+ .dexPath =
+ android_data_ + "/app/~~fadsfgadg==/com.android.baz-fadsfgadg==/base.apk",
+ .isa = "arm64",
+ .isInDalvikCache = false},
+ SecureDexMetadataWithCompanionPaths{
+ .dexPath =
+ android_data_ + "/app/~~jhrwafasr==/com.android.qux-bredcweff==/base.apk",
+ .isa = "arm64",
+ .isInDalvikCache = true},
+ },
+ {
RuntimeArtifactsPath{
.packageName = "com.android.foo", .dexPath = "/a/b/base.apk", .isa = "arm64"},
},