Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 041f00bb authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add two fields on ART metrics (apk type and isa)." am: c5c002ca am: 47c9e851

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1656169

Change-Id: Ia450ff1b9869261ab1736d7577948ffb99c6f172
parents 22e2e810 47c9e851
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -258,23 +258,22 @@ public class PackageDexOptimizer {
                        packageStats, options.isDowngrade(), profileName, dexMetadataPath,
                        options.getCompilationReason());

                // Only report metrics for base apk for now.
                // TODO: add ISA and APK type to metrics.
                // OTAPreopt doesn't have stats so don't report in that case.
                if (pkg.getBaseCodePath().equals(path) && packageStats != null) {
                if (packageStats != null) {
                    Trace.traceBegin(Trace.TRACE_TAG_PACKAGE_MANAGER, "dex2oat-metrics");
                    try {
                        long sessionId = Math.randomLongInternal();
                        ArtStatsLogUtils.writeStatsLog(
                                mArtStatsLogger,
                                sessionId,
                                path,
                                compilerFilter,
                                sharedGid,
                                packageStats.getCompileTime(path),
                                dexMetadataPath,
                                options.getCompilationReason(),
                                newResult);
                                newResult,
                                ArtStatsLogUtils.getApkType(path),
                                dexCodeIsa);
                    } finally {
                        Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER);
                    }
+41 −6
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ public class ArtStatsLogUtils {
    private static final String TAG = ArtStatsLogUtils.class.getSimpleName();
    private static final String PROFILE_DEX_METADATA = "primary.prof";
    private static final String VDEX_DEX_METADATA = "primary.vdex";
    private static final String BASE_APK= "base.apk";


    private static final int ART_COMPILATION_REASON_INSTALL_BULK_SECONDARY =
@@ -122,16 +123,34 @@ public class ArtStatsLogUtils {
                ART_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK);
    }

    private static final Map<String, Integer> ISA_MAP = new HashMap();

    static {
        COMPILE_FILTER_MAP.put("arm", ArtStatsLog.
                ART_DATUM_REPORTED__ISA__ART_ISA_ARM);
        COMPILE_FILTER_MAP.put("arm64", ArtStatsLog.
                ART_DATUM_REPORTED__ISA__ART_ISA_ARM64);
        COMPILE_FILTER_MAP.put("x86", ArtStatsLog.
                ART_DATUM_REPORTED__ISA__ART_ISA_X86);
        COMPILE_FILTER_MAP.put("x86_64", ArtStatsLog.
                ART_DATUM_REPORTED__ISA__ART_ISA_X86_64);
        COMPILE_FILTER_MAP.put("mips", ArtStatsLog.
                ART_DATUM_REPORTED__ISA__ART_ISA_MIPS);
        COMPILE_FILTER_MAP.put("mips64", ArtStatsLog.
                ART_DATUM_REPORTED__ISA__ART_ISA_MIPS64);
    }

    public static void writeStatsLog(
            ArtStatsLogger logger,
            long sessionId,
            String path,
            String compilerFilter,
            int uid,
            long compileTime,
            String dexMetadataPath,
            int compilationReason,
            int result) {
            int result,
            int apkType,
            String isa) {
        int dexMetadataType = getDexMetadataType(dexMetadataPath);
        logger.write(
                sessionId,
@@ -140,7 +159,9 @@ public class ArtStatsLogUtils {
                compilerFilter,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
                result,
                dexMetadataType);
                dexMetadataType,
                apkType,
                isa);
        logger.write(
                sessionId,
                uid,
@@ -148,7 +169,16 @@ public class ArtStatsLogUtils {
                compilerFilter,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
                compileTime,
                dexMetadataType);
                dexMetadataType,
                apkType,
                isa);
    }

    public static int getApkType(String path) {
        if (path.equals(BASE_APK)) {
            return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE;
        }
        return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT;
    }

    private static int getDexMetadataType(String dexMetadataPath) {
@@ -207,7 +237,9 @@ public class ArtStatsLogUtils {
                String compilerFilter,
                int kind,
                long value,
                int dexMetadataType) {
                int dexMetadataType,
                int apkType,
                String isa) {
            ArtStatsLog.write(
                    ArtStatsLog.ART_DATUM_REPORTED,
                    sessionId,
@@ -220,7 +252,10 @@ public class ArtStatsLogUtils {
                    ArtStatsLog.ART_DATUM_REPORTED__THREAD_TYPE__ART_THREAD_MAIN,
                    kind,
                    value,
                    dexMetadataType);
                    dexMetadataType,
                    apkType,
                    ISA_MAP.getOrDefault(isa,
                            ArtStatsLog.ART_DATUM_REPORTED__ISA__ART_ISA_UNKNOWN));
        }
    }
}
+41 −17
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.internal.art.ArtStatsLog;
import com.android.server.pm.dex.ArtStatsLogUtils.ArtStatsLogger;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -49,6 +50,9 @@ public final class ArtStatsLogUtilsTest {
    private static final String COMPILER_FILTER = "space-profile";
    private static final String PROFILE_DEX_METADATA = "primary.prof";
    private static final String VDEX_DEX_METADATA = "primary.vdex";
    private static final String INSTRUCTION_SET = "arm64";
    private static final String BASE_APK = "base.apk";
    private static final String SPLIT_APK = "split.apk";
    private static final byte[] DEX_CONTENT = "dexData".getBytes();
    private static final int COMPILATION_REASON = 1;
    private static final int RESULT_CODE = 222;
@@ -97,13 +101,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    UID,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);

            // Assert
            verifyWrites(ArtStatsLog.
@@ -127,13 +132,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    UID,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);

            // Assert
            verifyWrites(ArtStatsLog.
@@ -157,13 +163,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    UID,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);

            // Assert
            verifyWrites(ArtStatsLog.
@@ -185,13 +192,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    UID,
                    COMPILE_TIME,
                    /*dexMetadataPath=*/ null,
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);

            // Assert
            verifyWrites(ArtStatsLog.
@@ -214,13 +222,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    UID,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);

            // Assert
            verifyWrites(ArtStatsLog.
@@ -231,6 +240,17 @@ public final class ArtStatsLogUtilsTest {
        }
    }

    @Test
    public void testGetApkType() {
        // Act
        int result1 = ArtStatsLogUtils.getApkType(BASE_APK);
        int result2 = ArtStatsLogUtils.getApkType(SPLIT_APK);

        // Assert
        Assert.assertEquals(result1, ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE);
        Assert.assertEquals(result2, ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT);
    }

    private void verifyWrites(int dexMetadataType) {
        InOrder inorder = inOrder(mockLogger);
        inorder.verify(mockLogger).write(
@@ -239,7 +259,9 @@ public final class ArtStatsLogUtilsTest {
                COMPILER_FILTER,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
                RESULT_CODE,
                dexMetadataType);
                dexMetadataType,
                ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                INSTRUCTION_SET);
        inorder.verify(mockLogger).write(
                SESSION_ID,
                UID,
@@ -247,7 +269,9 @@ public final class ArtStatsLogUtilsTest {
                COMPILER_FILTER,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
                COMPILE_TIME,
                dexMetadataType);
                dexMetadataType,
                ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                INSTRUCTION_SET);
    }

    private Path zipFiles(String suffix, Path... files) throws IOException {