Add tron metrics to track iorap.
Bug: 158007508
Test: Make and manually check the log using
"adb logcat -b events | grep sysui_multi_action".
Change-Id: I8365bbaa0abf65bdffd8da9462a2295a5e37b3c2
diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
index 51e07faf..8000c63 100644
--- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java
+++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
@@ -63,6 +63,10 @@
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Objects;
/**
@@ -557,6 +561,20 @@
private static final int TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK = 12;
private static final int TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK_FALLBACK = 13;
private static final int TRON_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK = 14;
+ // Filter with IORap
+ private static final int TRON_COMPILATION_FILTER_ASSUMED_VERIFIED_IORAP = 15;
+ private static final int TRON_COMPILATION_FILTER_EXTRACT_IORAP = 16;
+ private static final int TRON_COMPILATION_FILTER_VERIFY_IORAP = 17;
+ private static final int TRON_COMPILATION_FILTER_QUICKEN_IORAP = 18;
+ private static final int TRON_COMPILATION_FILTER_SPACE_PROFILE_IORAP = 19;
+ private static final int TRON_COMPILATION_FILTER_SPACE_IORAP = 20;
+ private static final int TRON_COMPILATION_FILTER_SPEED_PROFILE_IORAP = 21;
+ private static final int TRON_COMPILATION_FILTER_SPEED_IORAP = 22;
+ private static final int TRON_COMPILATION_FILTER_EVERYTHING_PROFILE_IORAP = 23;
+ private static final int TRON_COMPILATION_FILTER_EVERYTHING_IORAP = 24;
+ private static final int TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK_IORAP = 25;
+ private static final int TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK_FALLBACK_IORAP = 26;
+ private static final int TRON_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK_IORAP = 27;
// Constants used for logging compilation reason to TRON.
// DO NOT CHANGE existing values.
@@ -623,6 +641,22 @@
return TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK_FALLBACK;
case "run-from-vdex-fallback" :
return TRON_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK;
+ case "assume-verified-iorap" : return TRON_COMPILATION_FILTER_ASSUMED_VERIFIED_IORAP;
+ case "extract-iorap" : return TRON_COMPILATION_FILTER_EXTRACT_IORAP;
+ case "verify-iorap" : return TRON_COMPILATION_FILTER_VERIFY_IORAP;
+ case "quicken-iorap" : return TRON_COMPILATION_FILTER_QUICKEN_IORAP;
+ case "space-profile-iorap" : return TRON_COMPILATION_FILTER_SPACE_PROFILE_IORAP;
+ case "space-iorap" : return TRON_COMPILATION_FILTER_SPACE_IORAP;
+ case "speed-profile-iorap" : return TRON_COMPILATION_FILTER_SPEED_PROFILE_IORAP;
+ case "speed-iorap" : return TRON_COMPILATION_FILTER_SPEED_IORAP;
+ case "everything-profile-iorap" :
+ return TRON_COMPILATION_FILTER_EVERYTHING_PROFILE_IORAP;
+ case "everything-iorap" : return TRON_COMPILATION_FILTER_EVERYTHING_IORAP;
+ case "run-from-apk-iorap" : return TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK_IORAP;
+ case "run-from-apk-fallback-iorap" :
+ return TRON_COMPILATION_FILTER_FAKE_RUN_FROM_APK_FALLBACK_IORAP;
+ case "run-from-vdex-fallback-iorap" :
+ return TRON_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK_IORAP;
default: return TRON_COMPILATION_FILTER_UNKNOWN;
}
}
@@ -640,9 +674,12 @@
}
private class ArtManagerInternalImpl extends ArtManagerInternal {
+ private static final String IORAP_DIR = "/data/misc/iorapd";
+ private static final String TAG = "ArtManagerInternalImpl";
+
@Override
public PackageOptimizationInfo getPackageOptimizationInfo(
- ApplicationInfo info, String abi) {
+ ApplicationInfo info, String abi, String activityName) {
String compilationReason;
String compilationFilter;
try {
@@ -662,11 +699,45 @@
compilationReason = "error";
}
+ if (checkIorapCompiledTrace(info.packageName, activityName, info.longVersionCode)) {
+ compilationFilter = compilationFilter + "-iorap";
+ }
+
int compilationFilterTronValue = getCompilationFilterTronValue(compilationFilter);
int compilationReasonTronValue = getCompilationReasonTronValue(compilationReason);
return new PackageOptimizationInfo(
compilationFilterTronValue, compilationReasonTronValue);
}
+
+ /*
+ * Checks the existence of IORap compiled trace for an app.
+ *
+ * @return true if the compiled trace exists and the size is greater than 1kb.
+ */
+ private boolean checkIorapCompiledTrace(
+ String packageName, String activityName, long version) {
+ // For example: /data/misc/iorapd/com.google.android.GoogleCamera/
+ // 60092239/com.android.camera.CameraLauncher/compiled_traces/compiled_trace.pb
+ Path tracePath = Paths.get(IORAP_DIR,
+ packageName,
+ Long.toString(version),
+ activityName,
+ "compiled_traces",
+ "compiled_trace.pb");
+ try {
+ boolean exists = Files.exists(tracePath);
+ Log.d(TAG, tracePath.toString() + (exists? " exists" : " doesn't exist"));
+ if (exists) {
+ long bytes = Files.size(tracePath);
+ Log.d(TAG, tracePath.toString() + " size is " + Long.toString(bytes));
+ return bytes > 0L;
+ }
+ return exists;
+ } catch (IOException e) {
+ Log.d(TAG, e.getMessage());
+ return false;
+ }
+ }
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index fb29f9a..189b21f 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -842,7 +842,8 @@
? PackageOptimizationInfo.createWithNoInfo()
: artManagerInternal.getPackageOptimizationInfo(
info.applicationInfo,
- info.launchedActivityAppRecordRequiredAbi);
+ info.launchedActivityAppRecordRequiredAbi,
+ info.launchedActivityName);
builder.addTaggedData(PACKAGE_OPTIMIZATION_COMPILATION_REASON,
packageOptimizationInfo.getCompilationReason());
builder.addTaggedData(PACKAGE_OPTIMIZATION_COMPILATION_FILTER,