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

Commit 208f97a8 authored by Yisroel Forta's avatar Yisroel Forta Committed by Android (Google) Code Review
Browse files

Merge "Fix AppStartInfo crash on null in progress record" into main

parents 4c06b8fe eaefe680
Loading
Loading
Loading
Loading
+47 −18
Original line number Diff line number Diff line
@@ -211,11 +211,17 @@ public final class AppStartInfoTracker {
            if (!mEnabled) {
                return;
            }
            if (!mInProgRecords.containsKey(id)) {
            int index = mInProgRecords.indexOfKey(id);
            if (index < 0) {
                return;
            }
            mInProgRecords.get(id).setStartupState(ApplicationStartInfo.STARTUP_STATE_ERROR);
            mInProgRecords.remove(id);
            ApplicationStartInfo info = mInProgRecords.valueAt(index);
            if (info == null) {
                mInProgRecords.removeAt(index);
                return;
            }
            info.setStartupState(ApplicationStartInfo.STARTUP_STATE_ERROR);
            mInProgRecords.removeAt(index);
        }
    }

@@ -224,16 +230,24 @@ public final class AppStartInfoTracker {
            if (!mEnabled) {
                return;
            }
            if (!mInProgRecords.containsKey(id)) {
            int index = mInProgRecords.indexOfKey(id);
            if (index < 0) {
                return;
            }
            ApplicationStartInfo info = mInProgRecords.valueAt(index);
            if (info == null || app == null) {
                mInProgRecords.removeAt(index);
                return;
            }
            if (app != null) {
                ApplicationStartInfo info = mInProgRecords.get(id);
            info.setStartType((int) temperature);
            addBaseFieldsFromProcessRecord(info, app);
                mInProgRecords.put(id, addStartInfoLocked(info));
            ApplicationStartInfo newInfo = addStartInfoLocked(info);
            if (newInfo == null) {
                // newInfo can be null if records are added before load from storage is
                // complete. In this case the newly added record will be lost.
                mInProgRecords.removeAt(index);
            } else {
                mInProgRecords.remove(id);
                mInProgRecords.setValueAt(index, newInfo);
            }
        }
    }
@@ -243,12 +257,17 @@ public final class AppStartInfoTracker {
            if (!mEnabled) {
                return;
            }
            if (!mInProgRecords.containsKey(id)) {
            int index = mInProgRecords.indexOfKey(id);
            if (index < 0) {
                return;
            }
            ApplicationStartInfo info = mInProgRecords.valueAt(index);
            if (info == null) {
                mInProgRecords.removeAt(index);
                return;
            }
            ApplicationStartInfo info = mInProgRecords.get(id);
            info.setStartupState(ApplicationStartInfo.STARTUP_STATE_ERROR);
            mInProgRecords.remove(id);
            mInProgRecords.removeAt(index);
        }
    }

@@ -258,10 +277,15 @@ public final class AppStartInfoTracker {
            if (!mEnabled) {
                return;
            }
            if (!mInProgRecords.containsKey(id)) {
            int index = mInProgRecords.indexOfKey(id);
            if (index < 0) {
                return;
            }
            ApplicationStartInfo info = mInProgRecords.valueAt(index);
            if (info == null) {
                mInProgRecords.removeAt(index);
                return;
            }
            ApplicationStartInfo info = mInProgRecords.get(id);
            info.setStartupState(ApplicationStartInfo.STARTUP_STATE_FIRST_FRAME_DRAWN);
            info.setLaunchMode(launchMode);
            checkCompletenessAndCallback(info);
@@ -273,13 +297,18 @@ public final class AppStartInfoTracker {
            if (!mEnabled) {
                return;
            }
            if (!mInProgRecords.containsKey(id)) {
            int index = mInProgRecords.indexOfKey(id);
            if (index < 0) {
                return;
            }
            ApplicationStartInfo info = mInProgRecords.valueAt(index);
            if (info == null) {
                mInProgRecords.removeAt(index);
                return;
            }
            ApplicationStartInfo info = mInProgRecords.get(id);
            info.addStartupTimestamp(ApplicationStartInfo.START_TIMESTAMP_FULLY_DRAWN,
                    timestampNanos);
            mInProgRecords.remove(id);
            mInProgRecords.removeAt(index);
        }
    }