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

Commit 7c4c87bd authored by Chris Wren's avatar Chris Wren
Browse files

fix NPE when dump wins the race against emit

Bug: 27673660
Change-Id: I4e00933ef38f2847f5f759cfed9dfaea20e04d73
parent 3e9717bf
Loading
Loading
Loading
Loading
+69 −64
Original line number Diff line number Diff line
@@ -336,6 +336,13 @@ public class NotificationUsageStats {
            finalImportance = new ImportanceHistogram(context, "note_importance_");
        }

        public AggregatedStats getPrevious() {
            if (mPrevious == null) {
                mPrevious = new AggregatedStats(mContext, key);
            }
            return mPrevious;
        }

        public void countApiUse(NotificationRecord record) {
            final Notification n = record.getNotification();
            if (n.actions != null) {
@@ -411,67 +418,64 @@ public class NotificationUsageStats {
        }

        public void emit() {
            if (mPrevious == null) {
                mPrevious = new AggregatedStats(null, key);
            }

            maybeCount("note_post", (numPostedByApp - mPrevious.numPostedByApp));
            maybeCount("note_update", (numUpdatedByApp - mPrevious.numUpdatedByApp));
            maybeCount("note_remove", (numRemovedByApp - mPrevious.numRemovedByApp));
            maybeCount("note_with_people", (numWithValidPeople - mPrevious.numWithValidPeople));
            maybeCount("note_with_stars", (numWithStaredPeople - mPrevious.numWithStaredPeople));
            maybeCount("people_cache_hit", (numPeopleCacheHit - mPrevious.numPeopleCacheHit));
            maybeCount("people_cache_miss", (numPeopleCacheMiss - mPrevious.numPeopleCacheMiss));
            maybeCount("note_blocked", (numBlocked - mPrevious.numBlocked));
            maybeCount("note_suspended", (numSuspendedByAdmin - mPrevious.numSuspendedByAdmin));
            maybeCount("note_with_actions", (numWithActions - mPrevious.numWithActions));
            maybeCount("note_private", (numPrivate - mPrevious.numPrivate));
            maybeCount("note_secret", (numSecret - mPrevious.numSecret));
            maybeCount("note_interupt", (numInterrupt - mPrevious.numInterrupt));
            maybeCount("note_big_text", (numWithBigText - mPrevious.numWithBigText));
            maybeCount("note_big_pic", (numWithBigPicture - mPrevious.numWithBigPicture));
            maybeCount("note_fg", (numForegroundService - mPrevious.numForegroundService));
            maybeCount("note_ongoing", (numOngoing - mPrevious.numOngoing));
            maybeCount("note_auto", (numAutoCancel - mPrevious.numAutoCancel));
            maybeCount("note_large_icon", (numWithLargeIcon - mPrevious.numWithLargeIcon));
            maybeCount("note_inbox", (numWithInbox - mPrevious.numWithInbox));
            maybeCount("note_media", (numWithMediaSession - mPrevious.numWithMediaSession));
            maybeCount("note_title", (numWithTitle - mPrevious.numWithTitle));
            maybeCount("note_text", (numWithText - mPrevious.numWithText));
            maybeCount("note_sub_text", (numWithSubText - mPrevious.numWithSubText));
            maybeCount("note_info_text", (numWithInfoText - mPrevious.numWithInfoText));
            noisyImportance.maybeCount(mPrevious.noisyImportance);
            quietImportance.maybeCount(mPrevious.quietImportance);
            finalImportance.maybeCount(mPrevious.finalImportance);

            mPrevious.numPostedByApp = numPostedByApp;
            mPrevious.numUpdatedByApp = numUpdatedByApp;
            mPrevious.numRemovedByApp = numRemovedByApp;
            mPrevious.numPeopleCacheHit = numPeopleCacheHit;
            mPrevious.numPeopleCacheMiss = numPeopleCacheMiss;
            mPrevious.numWithStaredPeople = numWithStaredPeople;
            mPrevious.numWithValidPeople = numWithValidPeople;
            mPrevious.numBlocked = numBlocked;
            mPrevious.numSuspendedByAdmin = numSuspendedByAdmin;
            mPrevious.numWithActions = numWithActions;
            mPrevious.numPrivate = numPrivate;
            mPrevious.numSecret = numSecret;
            mPrevious.numInterrupt = numInterrupt;
            mPrevious.numWithBigText = numWithBigText;
            mPrevious.numWithBigPicture = numWithBigPicture;
            mPrevious.numForegroundService = numForegroundService;
            mPrevious.numOngoing = numOngoing;
            mPrevious.numAutoCancel = numAutoCancel;
            mPrevious.numWithLargeIcon = numWithLargeIcon;
            mPrevious.numWithInbox = numWithInbox;
            mPrevious.numWithMediaSession = numWithMediaSession;
            mPrevious.numWithTitle = numWithTitle;
            mPrevious.numWithText = numWithText;
            mPrevious.numWithSubText = numWithSubText;
            mPrevious.numWithInfoText = numWithInfoText;
            noisyImportance.update(mPrevious.noisyImportance);
            quietImportance.update(mPrevious.quietImportance);
            finalImportance.update(mPrevious.finalImportance);
            AggregatedStats previous = getPrevious();
            maybeCount("note_post", (numPostedByApp - previous.numPostedByApp));
            maybeCount("note_update", (numUpdatedByApp - previous.numUpdatedByApp));
            maybeCount("note_remove", (numRemovedByApp - previous.numRemovedByApp));
            maybeCount("note_with_people", (numWithValidPeople - previous.numWithValidPeople));
            maybeCount("note_with_stars", (numWithStaredPeople - previous.numWithStaredPeople));
            maybeCount("people_cache_hit", (numPeopleCacheHit - previous.numPeopleCacheHit));
            maybeCount("people_cache_miss", (numPeopleCacheMiss - previous.numPeopleCacheMiss));
            maybeCount("note_blocked", (numBlocked - previous.numBlocked));
            maybeCount("note_suspended", (numSuspendedByAdmin - previous.numSuspendedByAdmin));
            maybeCount("note_with_actions", (numWithActions - previous.numWithActions));
            maybeCount("note_private", (numPrivate - previous.numPrivate));
            maybeCount("note_secret", (numSecret - previous.numSecret));
            maybeCount("note_interupt", (numInterrupt - previous.numInterrupt));
            maybeCount("note_big_text", (numWithBigText - previous.numWithBigText));
            maybeCount("note_big_pic", (numWithBigPicture - previous.numWithBigPicture));
            maybeCount("note_fg", (numForegroundService - previous.numForegroundService));
            maybeCount("note_ongoing", (numOngoing - previous.numOngoing));
            maybeCount("note_auto", (numAutoCancel - previous.numAutoCancel));
            maybeCount("note_large_icon", (numWithLargeIcon - previous.numWithLargeIcon));
            maybeCount("note_inbox", (numWithInbox - previous.numWithInbox));
            maybeCount("note_media", (numWithMediaSession - previous.numWithMediaSession));
            maybeCount("note_title", (numWithTitle - previous.numWithTitle));
            maybeCount("note_text", (numWithText - previous.numWithText));
            maybeCount("note_sub_text", (numWithSubText - previous.numWithSubText));
            maybeCount("note_info_text", (numWithInfoText - previous.numWithInfoText));
            noisyImportance.maybeCount(previous.noisyImportance);
            quietImportance.maybeCount(previous.quietImportance);
            finalImportance.maybeCount(previous.finalImportance);

            previous.numPostedByApp = numPostedByApp;
            previous.numUpdatedByApp = numUpdatedByApp;
            previous.numRemovedByApp = numRemovedByApp;
            previous.numPeopleCacheHit = numPeopleCacheHit;
            previous.numPeopleCacheMiss = numPeopleCacheMiss;
            previous.numWithStaredPeople = numWithStaredPeople;
            previous.numWithValidPeople = numWithValidPeople;
            previous.numBlocked = numBlocked;
            previous.numSuspendedByAdmin = numSuspendedByAdmin;
            previous.numWithActions = numWithActions;
            previous.numPrivate = numPrivate;
            previous.numSecret = numSecret;
            previous.numInterrupt = numInterrupt;
            previous.numWithBigText = numWithBigText;
            previous.numWithBigPicture = numWithBigPicture;
            previous.numForegroundService = numForegroundService;
            previous.numOngoing = numOngoing;
            previous.numAutoCancel = numAutoCancel;
            previous.numWithLargeIcon = numWithLargeIcon;
            previous.numWithInbox = numWithInbox;
            previous.numWithMediaSession = numWithMediaSession;
            previous.numWithTitle = numWithTitle;
            previous.numWithText = numWithText;
            previous.numWithSubText = numWithSubText;
            previous.numWithInfoText = numWithInfoText;
            noisyImportance.update(previous.noisyImportance);
            quietImportance.update(previous.quietImportance);
            finalImportance.update(previous.finalImportance);
        }

        void maybeCount(String name, int value) {
@@ -553,6 +557,7 @@ public class NotificationUsageStats {
        }

        public JSONObject dumpJson() throws JSONException {
            AggregatedStats previous = getPrevious();
            JSONObject dump = new JSONObject();
            dump.put("key", key);
            dump.put("duration", SystemClock.elapsedRealtime() - mCreated);
@@ -581,9 +586,9 @@ public class NotificationUsageStats {
            maybePut(dump, "numWithText", numWithText);
            maybePut(dump, "numWithSubText", numWithSubText);
            maybePut(dump, "numWithInfoText", numWithInfoText);
            noisyImportance.maybePut(dump, mPrevious.noisyImportance);
            quietImportance.maybePut(dump, mPrevious.quietImportance);
            finalImportance.maybePut(dump, mPrevious.finalImportance);
            noisyImportance.maybePut(dump, previous.noisyImportance);
            quietImportance.maybePut(dump, previous.quietImportance);
            finalImportance.maybePut(dump, previous.finalImportance);

            return dump;
        }