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

Commit f41e96b6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add stats puller for PinnerService data"

parents 92391616 ca1511e8
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server;

import static android.app.ActivityManager.UID_OBSERVER_ACTIVE;
import static android.app.ActivityManager.UID_OBSERVER_GONE;
import static android.os.Process.SYSTEM_UID;

import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -261,6 +262,37 @@ public final class PinnerService extends SystemService {
        }
    }

    /** Returns information about pinned files and sizes for StatsPullAtomService. */
    public List<PinnedFileStats> dumpDataForStatsd() {
        List<PinnedFileStats> pinnedFileStats = new ArrayList<>();
        synchronized (PinnerService.this) {
            for (PinnedFile pinnedFile : mPinnedFiles) {
                pinnedFileStats.add(new PinnedFileStats(SYSTEM_UID, pinnedFile));
            }

            for (int key : mPinnedApps.keySet()) {
                PinnedApp app = mPinnedApps.get(key);
                for (PinnedFile pinnedFile : mPinnedApps.get(key).mFiles) {
                    pinnedFileStats.add(new PinnedFileStats(app.uid, pinnedFile));
                }
            }
        }
        return pinnedFileStats;
    }

    /** Wrapper class for statistics for a pinned file. */
    public static class PinnedFileStats {
        public final int uid;
        public final String filename;
        public final int sizeKb;

        protected PinnedFileStats(int uid, PinnedFile file) {
            this.uid = uid;
            this.filename = file.fileName.substring(file.fileName.lastIndexOf('/') + 1);
            this.sizeKb = file.bytesPinned / 1024;
        }
    }

    /**
     * Handler for on start pinning message
     */
+25 −0
Original line number Diff line number Diff line
@@ -197,6 +197,8 @@ import com.android.role.RoleManagerLocal;
import com.android.server.BinderCallsStatsService;
import com.android.server.LocalManagerRegistry;
import com.android.server.LocalServices;
import com.android.server.PinnerService;
import com.android.server.PinnerService.PinnedFileStats;
import com.android.server.SystemService;
import com.android.server.SystemServiceManager;
import com.android.server.am.MemoryStatUtil.MemoryStat;
@@ -727,6 +729,8 @@ public class StatsPullAtomService extends SystemService {
                        return pullAccessibilityFloatingMenuStatsLocked(atomTag, data);
                    case FrameworkStatsLog.MEDIA_CAPABILITIES:
                        return pullMediaCapabilitiesStats(atomTag, data);
                    case FrameworkStatsLog.PINNED_FILE_SIZES_PER_PACKAGE:
                        return pullSystemServerPinnerStats(atomTag, data);
                    case FrameworkStatsLog.PENDING_INTENTS_PER_PACKAGE:
                        return pullPendingIntentsPerPackage(atomTag, data);
                    default:
@@ -926,6 +930,7 @@ public class StatsPullAtomService extends SystemService {
        registerAccessibilityFloatingMenuStats();
        registerMediaCapabilitiesStats();
        registerPendingIntentsPerPackagePuller();
        registerPinnerServiceStats();
    }

    private void initAndRegisterNetworkStatsPullers() {
@@ -4607,6 +4612,26 @@ public class StatsPullAtomService extends SystemService {
        return StatsManager.PULL_SUCCESS;
    }

    private void registerPinnerServiceStats() {
        int tagId = FrameworkStatsLog.PINNED_FILE_SIZES_PER_PACKAGE;
        mStatsManager.setPullAtomCallback(
                tagId,
                null, // use default PullAtomMetadata values
                DIRECT_EXECUTOR,
                mStatsCallbackImpl
        );
    }

    int pullSystemServerPinnerStats(int atomTag, List<StatsEvent> pulledData) {
        PinnerService pinnerService = LocalServices.getService(PinnerService.class);
        List<PinnedFileStats> pinnedFileStats = pinnerService.dumpDataForStatsd();
        for (PinnedFileStats pfstats : pinnedFileStats) {
            pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag,
                    pfstats.uid, pfstats.filename, pfstats.sizeKb));
        }
        return StatsManager.PULL_SUCCESS;
    }

    private byte[] toBytes(List<Integer> audioEncodings) {
        ProtoOutputStream protoOutputStream = new ProtoOutputStream();
        for (int audioEncoding : audioEncodings) {