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

Commit 0e1ce140 authored by Michael Wachenschwanz's avatar Michael Wachenschwanz Committed by Android (Google) Code Review
Browse files

Merge changes from topic "UsageStatsDatabaseUpgradeAttempt2"

* changes:
  Add ProtoInputStream and UsageStatsProto to art profiles
  Upgrade UsageStatsDatabase to version 4 (attempt 2)
  Move UsageStatsDatabase upgrade backup to seperate folder
parents f6f95875 596c3308
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -6414,6 +6414,38 @@ HPLandroid/util/proto/EncodedBuffer;->startEditing()V
HPLandroid/util/proto/EncodedBuffer;->writeFromThisBuffer(II)V
HPLandroid/util/proto/EncodedBuffer;->writeRawBuffer([BII)V
HPLandroid/util/proto/EncodedBuffer;->writeRawFixed64(J)V
HPLandroid/util/proto/ProtoInputStream;-><init>(Ljava/io/InputStream;I)V
HPLandroid/util/proto/ProtoInputStream;-><init>(Ljava/io/InputStream;)V
HPLandroid/util/proto/ProtoInputStream;-><init>([B)V
HPLandroid/util/proto/ProtoInputStream;->getFieldNumber()I
HPLandroid/util/proto/ProtoInputStream;->getWireType()I
HPLandroid/util/proto/ProtoInputStream;->getOffset()I
HPLandroid/util/proto/ProtoInputStream;->nextField()I
HPLandroid/util/proto/ProtoInputStream;->isNextField(J)Z
HPLandroid/util/proto/ProtoInputStream;->readDouble(J)D
HPLandroid/util/proto/ProtoInputStream;->readFloat(J)F
HPLandroid/util/proto/ProtoInputStream;->readInt(J)I
HPLandroid/util/proto/ProtoInputStream;->readLong(J)J
HPLandroid/util/proto/ProtoInputStream;->readBoolean(J)Z
HPLandroid/util/proto/ProtoInputStream;->readString(J)Ljava/lang/String;
HPLandroid/util/proto/ProtoInputStream;->readBytes(J)[B
HPLandroid/util/proto/ProtoInputStream;->start(J)J
HPLandroid/util/proto/ProtoInputStream;->end(J)V
HPLandroid/util/proto/ProtoInputStream;->readTag()V
HPLandroid/util/proto/ProtoInputStream;->decodeZigZag32(I)I
HPLandroid/util/proto/ProtoInputStream;->decodeZigZag64(J)J
HPLandroid/util/proto/ProtoInputStream;->readVarint()J
HPLandroid/util/proto/ProtoInputStream;->readFixed32()I
HPLandroid/util/proto/ProtoInputStream;->readFixed64()J
HPLandroid/util/proto/ProtoInputStream;->readRawBytes(I)[B
HPLandroid/util/proto/ProtoInputStream;->readRawString(I)Ljava/lang/String;
HPLandroid/util/proto/ProtoInputStream;->fillBuffer()V
HPLandroid/util/proto/ProtoInputStream;->skip()V
HPLandroid/util/proto/ProtoInputStream;->incOffset(I)V
HPLandroid/util/proto/ProtoInputStream;->checkPacked(J)V
HPLandroid/util/proto/ProtoInputStream;->assertFieldNumber(J)V
HPLandroid/util/proto/ProtoInputStream;->assertWireType(I)V
HPLandroid/util/proto/ProtoInputStream;->assertFreshData()V
HPLandroid/util/proto/ProtoOutputStream;-><init>(Ljava/io/FileDescriptor;)V
HPLandroid/util/proto/ProtoOutputStream;-><init>(Ljava/io/OutputStream;)V
HPLandroid/util/proto/ProtoOutputStream;->compactIfNecessary()V
@@ -58580,6 +58612,7 @@ Landroid/util/apk/WrappedX509Certificate;
Landroid/util/apk/ZipUtils;
Landroid/util/jar/StrictJarFile;
Landroid/util/proto/EncodedBuffer;
Landroid/util/proto/ProtoInputStream;
Landroid/util/proto/ProtoOutputStream;
Landroid/view/-$$Lambda$FocusFinder$FocusSorter$h0f2ZYL6peSaaEeCCkAoYs_YZvU;
Landroid/view/-$$Lambda$FocusFinder$FocusSorter$kW7K1t9q7Y62V38r-7g6xRzqqq8;
+16 −0
Original line number Diff line number Diff line
@@ -2082,6 +2082,22 @@ HPLcom/android/server/usage/StorageStatsService;->queryStatsForPackage(Ljava/lan
HPLcom/android/server/usage/StorageStatsService;->queryStatsForUid(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
HPLcom/android/server/usage/UnixCalendar;->getTimeInMillis()J
HPLcom/android/server/usage/UsageStatsDatabase$CheckinAction;->checkin(Lcom/android/server/usage/IntervalStats;)Z
HPLcom/android/server/usage/UsageStatsProto;->readStringPool(Landroid/util/proto/ProtoInputStream;)Ljava/util/List;
HPLcom/android/server/usage/UsageStatsProto;->loadUsageStats(Landroid/util/proto/ProtoInputStream;Lcom/android/server/usage/IntervalStats;Ljava/util/List;)V
HPLcom/android/server/usage/UsageStatsProto;->loadCountAndTime(Landroid/util/proto/ProtoInputStream;JLcom/android/server/usage/IntervalStats;$EventTracker)V
HPLcom/android/server/usage/UsageStatsProto;->loadChooserCounts(Landroid/util/proto/ProtoInputStream;Landroid/app/usage/UsageStats;)V
HPLcom/android/server/usage/UsageStatsProto;->loadCountsForAction(Landroid/util/proto/ProtoInputStream;Landroid/util/ArrayMap;)V
HPLcom/android/server/usage/UsageStatsProto;->loadConfigStats(Landroid/util/proto/ProtoInputStream;JLcom/android/server/usage/IntervalStats;)V
HPLcom/android/server/usage/UsageStatsProto;->loadEvent(Landroid/util/proto/ProtoInputStream;JLcom/android/server/usage/IntervalStats;Ljava/util/List;)V
HPLcom/android/server/usage/UsageStatsProto;->writeStringPool(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/usage/IntervalStats;)V
HPLcom/android/server/usage/UsageStatsProto;->writeUsageStats(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/usage/IntervalStats;Landroid/app/usage/UsageStats;)V
HPLcom/android/server/usage/UsageStatsProto;->writeCountAndTime(Landroid/util/proto/ProtoOutputStream;JIJ)V
HPLcom/android/server/usage/UsageStatsProto;->writeChooserCounts(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageStats;)V
HPLcom/android/server/usage/UsageStatsProto;->writeCountsForAction(Landroid/util/proto/ProtoOutputStream;Landroid/util/ArrayMap;)V
HPLcom/android/server/usage/UsageStatsProto;->writeConfigStats(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/usage/IntervalStats;Landroid/app/usage/ConfigurationStats;Z)V
HPLcom/android/server/usage/UsageStatsProto;->writeEvent(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/usage/IntervalStats;Landroid/app/usage/UsageEvents$Event;)V
HPLcom/android/server/usage/UsageStatsProto;->read(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;)V
HPLcom/android/server/usage/UsageStatsProto;->write(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;)V
HPLcom/android/server/usage/UsageStatsService$2;->onUidStateChanged(IIJ)V
HPLcom/android/server/usage/UsageStatsService$BinderService;->hasPermission(Ljava/lang/String;)Z
HPLcom/android/server/usage/UsageStatsService$BinderService;->isAppInactive(Ljava/lang/String;I)Z
+76 −6
Original line number Diff line number Diff line
@@ -51,6 +51,10 @@ public class UsageStatsDatabaseTest {
    private IntervalStats mIntervalStats = new IntervalStats();
    private long mEndTime = 0;

    // Key under which the payload blob is stored
    // same as UsageStatsBackupHelper.KEY_USAGE_STATS
    static final String KEY_USAGE_STATS = "usage_stats";

    private static final UsageStatsDatabase.StatCombiner<IntervalStats> mIntervalStatsVerifier =
            new UsageStatsDatabase.StatCombiner<IntervalStats>() {
                @Override
@@ -104,10 +108,11 @@ public class UsageStatsDatabaseTest {

    private void populateIntervalStats() {
        final int numberOfEvents = 3000;
        long time = 1;
        final int timeProgression = 23;
        long time = System.currentTimeMillis() - (numberOfEvents*timeProgression);
        mIntervalStats = new IntervalStats();

        mIntervalStats.beginTime = 1;
        mIntervalStats.beginTime = time;
        mIntervalStats.interactiveTracker.count = 2;
        mIntervalStats.interactiveTracker.duration = 111111;
        mIntervalStats.nonInteractiveTracker.count = 3;
@@ -158,7 +163,7 @@ public class UsageStatsDatabaseTest {
            mIntervalStats.events.insert(event);
            mIntervalStats.update(event.mPackage, event.mTimeStamp, event.mEventType);

            time += 23; // Arbitrary progression of time
            time += timeProgression; // Arbitrary progression of time
        }
        mEndTime = time;

@@ -286,11 +291,21 @@ public class UsageStatsDatabaseTest {
        }
        assertEquals(stats1.activeConfiguration, stats2.activeConfiguration);

        if (stats1.events == null) {
            // If stats1 events are null, stats2 should be null or empty
            if (stats2.events != null) {
                assertEquals(stats2.events.size(), 0);
            }
        } else if (stats2.events == null) {
            // If stats2 events are null, stats1 should be null or empty
            assertEquals(stats1.events.size(), 0);
        } else {
            assertEquals(stats1.events.size(), stats2.events.size());
            for (int i = 0; i < stats1.events.size(); i++) {
                compareUsageEvent(stats1.events.get(i), stats2.events.get(i), i);
            }
        }
    }

    /**
     * Runs the Write Read test.
@@ -339,6 +354,47 @@ public class UsageStatsDatabaseTest {
        compareIntervalStats(mIntervalStats, stats.get(0));
    }

    /**
     * Runs the Backup and Restore tests.
     * Will write the generated IntervalStat to a database and create a backup in the specified
     * version's format. The database will then be restored from the blob and the restored
     * interval stats will be compared to the generated stats.
     */
    void runBackupRestoreTest(int version) throws IOException {
        UsageStatsDatabase prevDB = new UsageStatsDatabase(mTestDir);
        prevDB.init(1);
        prevDB.putUsageStats(UsageStatsManager.INTERVAL_DAILY, mIntervalStats);
        // Create a backup with a specific version
        byte[] blob = prevDB.getBackupPayload(KEY_USAGE_STATS, version);

        clearUsageStatsFiles();

        UsageStatsDatabase newDB = new UsageStatsDatabase(mTestDir);
        newDB.init(1);
        // Attempt to restore the usage stats from the backup
        newDB.applyRestoredPayload(KEY_USAGE_STATS, blob);
        List<IntervalStats> stats = newDB.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, mEndTime,
                mIntervalStatsVerifier);


        if (version > newDB.BACKUP_VERSION || version < 1) {
            if (stats != null && stats.size() != 0) {
                fail("UsageStatsDatabase should ne be able to restore from unknown data versions");
            }
            return;
        }

        assertEquals(1, stats.size());

        // Clear non backed up data from expected IntervalStats
        mIntervalStats.activeConfiguration = null;
        mIntervalStats.configurations.clear();
        if (mIntervalStats.events != null) mIntervalStats.events.clear();

        // The written and read IntervalStats should match
        compareIntervalStats(mIntervalStats, stats.get(0));
    }

    /**
     * Test the version upgrade from 3 to 4
     */
@@ -349,4 +405,18 @@ public class UsageStatsDatabaseTest {
        runVersionChangeTest(3, 4, UsageStatsManager.INTERVAL_MONTHLY);
        runVersionChangeTest(3, 4, UsageStatsManager.INTERVAL_YEARLY);
    }


    /**
     * Test the version upgrade from 3 to 4
     */
    @Test
    public void testBackupRestore() throws IOException {
        runBackupRestoreTest(1);
        runBackupRestoreTest(4);

        // test invalid backup versions as well
        runBackupRestoreTest(0);
        runBackupRestoreTest(99999);
    }
}
+123 −109

File changed.

Preview size limit exceeded, changes collapsed.