Search in sources :

Example 21 with SparseArray

use of android.util.SparseArray in project platform_frameworks_base by android.

the class SecurityControllerImpl method updateState.

private void updateState() {
    // Find all users with an active VPN
    SparseArray<VpnConfig> vpns = new SparseArray<>();
    try {
        for (UserInfo user : mUserManager.getUsers()) {
            VpnConfig cfg = mConnectivityManagerService.getVpnConfig(user.id);
            if (cfg == null) {
                continue;
            } else if (cfg.legacy) {
                // Legacy VPNs should do nothing if the network is disconnected. Third-party
                // VPN warnings need to continue as traffic can still go to the app.
                LegacyVpnInfo legacyVpn = mConnectivityManagerService.getLegacyVpnInfo(user.id);
                if (legacyVpn == null || legacyVpn.state != LegacyVpnInfo.STATE_CONNECTED) {
                    continue;
                }
            }
            vpns.put(user.id, cfg);
        }
    } catch (RemoteException rme) {
        // Roll back to previous state
        Log.e(TAG, "Unable to list active VPNs", rme);
        return;
    }
    mCurrentVpns = vpns;
}
Also used : SparseArray(android.util.SparseArray) VpnConfig(com.android.internal.net.VpnConfig) LegacyVpnInfo(com.android.internal.net.LegacyVpnInfo) UserInfo(android.content.pm.UserInfo) RemoteException(android.os.RemoteException)

Example 22 with SparseArray

use of android.util.SparseArray in project platform_frameworks_base by android.

the class ActivityManagerService method reportMemUsage.

void reportMemUsage(ArrayList<ProcessMemInfo> memInfos) {
    final SparseArray<ProcessMemInfo> infoMap = new SparseArray<>(memInfos.size());
    for (int i = 0, N = memInfos.size(); i < N; i++) {
        ProcessMemInfo mi = memInfos.get(i);
        infoMap.put(mi.pid, mi);
    }
    updateCpuStatsNow();
    long[] memtrackTmp = new long[1];
    final List<ProcessCpuTracker.Stats> stats;
    // Get a list of Stats that have vsize > 0
    synchronized (mProcessCpuTracker) {
        stats = mProcessCpuTracker.getStats((st) -> {
            return st.vsize > 0;
        });
    }
    final int statsCount = stats.size();
    for (int i = 0; i < statsCount; i++) {
        ProcessCpuTracker.Stats st = stats.get(i);
        long pss = Debug.getPss(st.pid, null, memtrackTmp);
        if (pss > 0) {
            if (infoMap.indexOfKey(st.pid) < 0) {
                ProcessMemInfo mi = new ProcessMemInfo(st.name, st.pid, ProcessList.NATIVE_ADJ, -1, "native", null);
                mi.pss = pss;
                mi.memtrack = memtrackTmp[0];
                memInfos.add(mi);
            }
        }
    }
    long totalPss = 0;
    long totalMemtrack = 0;
    for (int i = 0, N = memInfos.size(); i < N; i++) {
        ProcessMemInfo mi = memInfos.get(i);
        if (mi.pss == 0) {
            mi.pss = Debug.getPss(mi.pid, null, memtrackTmp);
            mi.memtrack = memtrackTmp[0];
        }
        totalPss += mi.pss;
        totalMemtrack += mi.memtrack;
    }
    Collections.sort(memInfos, new Comparator<ProcessMemInfo>() {

        @Override
        public int compare(ProcessMemInfo lhs, ProcessMemInfo rhs) {
            if (lhs.oomAdj != rhs.oomAdj) {
                return lhs.oomAdj < rhs.oomAdj ? -1 : 1;
            }
            if (lhs.pss != rhs.pss) {
                return lhs.pss < rhs.pss ? 1 : -1;
            }
            return 0;
        }
    });
    StringBuilder tag = new StringBuilder(128);
    StringBuilder stack = new StringBuilder(128);
    tag.append("Low on memory -- ");
    appendMemBucket(tag, totalPss, "total", false);
    appendMemBucket(stack, totalPss, "total", true);
    StringBuilder fullNativeBuilder = new StringBuilder(1024);
    StringBuilder shortNativeBuilder = new StringBuilder(1024);
    StringBuilder fullJavaBuilder = new StringBuilder(1024);
    boolean firstLine = true;
    int lastOomAdj = Integer.MIN_VALUE;
    long extraNativeRam = 0;
    long extraNativeMemtrack = 0;
    long cachedPss = 0;
    for (int i = 0, N = memInfos.size(); i < N; i++) {
        ProcessMemInfo mi = memInfos.get(i);
        if (mi.oomAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
            cachedPss += mi.pss;
        }
        if (mi.oomAdj != ProcessList.NATIVE_ADJ && (mi.oomAdj < ProcessList.SERVICE_ADJ || mi.oomAdj == ProcessList.HOME_APP_ADJ || mi.oomAdj == ProcessList.PREVIOUS_APP_ADJ)) {
            if (lastOomAdj != mi.oomAdj) {
                lastOomAdj = mi.oomAdj;
                if (mi.oomAdj <= ProcessList.FOREGROUND_APP_ADJ) {
                    tag.append(" / ");
                }
                if (mi.oomAdj >= ProcessList.FOREGROUND_APP_ADJ) {
                    if (firstLine) {
                        stack.append(":");
                        firstLine = false;
                    }
                    stack.append("\n\t at ");
                } else {
                    stack.append("$");
                }
            } else {
                tag.append(" ");
                stack.append("$");
            }
            if (mi.oomAdj <= ProcessList.FOREGROUND_APP_ADJ) {
                appendMemBucket(tag, mi.pss, mi.name, false);
            }
            appendMemBucket(stack, mi.pss, mi.name, true);
            if (mi.oomAdj >= ProcessList.FOREGROUND_APP_ADJ && ((i + 1) >= N || memInfos.get(i + 1).oomAdj != lastOomAdj)) {
                stack.append("(");
                for (int k = 0; k < DUMP_MEM_OOM_ADJ.length; k++) {
                    if (DUMP_MEM_OOM_ADJ[k] == mi.oomAdj) {
                        stack.append(DUMP_MEM_OOM_LABEL[k]);
                        stack.append(":");
                        stack.append(DUMP_MEM_OOM_ADJ[k]);
                    }
                }
                stack.append(")");
            }
        }
        appendMemInfo(fullNativeBuilder, mi);
        if (mi.oomAdj == ProcessList.NATIVE_ADJ) {
            // The short form only has native processes that are >= 512K.
            if (mi.pss >= 512) {
                appendMemInfo(shortNativeBuilder, mi);
            } else {
                extraNativeRam += mi.pss;
                extraNativeMemtrack += mi.memtrack;
            }
        } else {
            // from smaller native processes let's dump a summary of that.
            if (extraNativeRam > 0) {
                appendBasicMemEntry(shortNativeBuilder, ProcessList.NATIVE_ADJ, -1, extraNativeRam, extraNativeMemtrack, "(Other native)");
                shortNativeBuilder.append('\n');
                extraNativeRam = 0;
            }
            appendMemInfo(fullJavaBuilder, mi);
        }
    }
    fullJavaBuilder.append("           ");
    ProcessList.appendRamKb(fullJavaBuilder, totalPss);
    fullJavaBuilder.append(": TOTAL");
    if (totalMemtrack > 0) {
        fullJavaBuilder.append(" (");
        fullJavaBuilder.append(stringifyKBSize(totalMemtrack));
        fullJavaBuilder.append(" memtrack)");
    } else {
    }
    fullJavaBuilder.append("\n");
    MemInfoReader memInfo = new MemInfoReader();
    memInfo.readMemInfo();
    final long[] infos = memInfo.getRawInfo();
    StringBuilder memInfoBuilder = new StringBuilder(1024);
    Debug.getMemInfo(infos);
    memInfoBuilder.append("  MemInfo: ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_SLAB])).append(" slab, ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_SHMEM])).append(" shmem, ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_VM_ALLOC_USED])).append(" vm alloc, ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_PAGE_TABLES])).append(" page tables ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_KERNEL_STACK])).append(" kernel stack\n");
    memInfoBuilder.append("           ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_BUFFERS])).append(" buffers, ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_CACHED])).append(" cached, ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_MAPPED])).append(" mapped, ");
    memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_FREE])).append(" free\n");
    if (infos[Debug.MEMINFO_ZRAM_TOTAL] != 0) {
        memInfoBuilder.append("  ZRAM: ");
        memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_ZRAM_TOTAL]));
        memInfoBuilder.append(" RAM, ");
        memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_SWAP_TOTAL]));
        memInfoBuilder.append(" swap total, ");
        memInfoBuilder.append(stringifyKBSize(infos[Debug.MEMINFO_SWAP_FREE]));
        memInfoBuilder.append(" swap free\n");
    }
    final long[] ksm = getKsmInfo();
    if (ksm[KSM_SHARING] != 0 || ksm[KSM_SHARED] != 0 || ksm[KSM_UNSHARED] != 0 || ksm[KSM_VOLATILE] != 0) {
        memInfoBuilder.append("  KSM: ");
        memInfoBuilder.append(stringifyKBSize(ksm[KSM_SHARING]));
        memInfoBuilder.append(" saved from shared ");
        memInfoBuilder.append(stringifyKBSize(ksm[KSM_SHARED]));
        memInfoBuilder.append("\n       ");
        memInfoBuilder.append(stringifyKBSize(ksm[KSM_UNSHARED]));
        memInfoBuilder.append(" unshared; ");
        memInfoBuilder.append(stringifyKBSize(ksm[KSM_VOLATILE]));
        memInfoBuilder.append(" volatile\n");
    }
    memInfoBuilder.append("  Free RAM: ");
    memInfoBuilder.append(stringifyKBSize(cachedPss + memInfo.getCachedSizeKb() + memInfo.getFreeSizeKb()));
    memInfoBuilder.append("\n");
    memInfoBuilder.append("  Used RAM: ");
    memInfoBuilder.append(stringifyKBSize(totalPss - cachedPss + memInfo.getKernelUsedSizeKb()));
    memInfoBuilder.append("\n");
    memInfoBuilder.append("  Lost RAM: ");
    memInfoBuilder.append(stringifyKBSize(memInfo.getTotalSizeKb() - totalPss - memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb() - memInfo.getKernelUsedSizeKb() - memInfo.getZramTotalSizeKb()));
    memInfoBuilder.append("\n");
    Slog.i(TAG, "Low on memory:");
    Slog.i(TAG, shortNativeBuilder.toString());
    Slog.i(TAG, fullJavaBuilder.toString());
    Slog.i(TAG, memInfoBuilder.toString());
    StringBuilder dropBuilder = new StringBuilder(1024);
    /*
        StringWriter oomSw = new StringWriter();
        PrintWriter oomPw = new FastPrintWriter(oomSw, false, 256);
        StringWriter catSw = new StringWriter();
        PrintWriter catPw = new FastPrintWriter(catSw, false, 256);
        String[] emptyArgs = new String[] { };
        dumpApplicationMemoryUsage(null, oomPw, "  ", emptyArgs, true, catPw);
        oomPw.flush();
        String oomString = oomSw.toString();
        */
    dropBuilder.append("Low on memory:");
    dropBuilder.append(stack);
    dropBuilder.append('\n');
    dropBuilder.append(fullNativeBuilder);
    dropBuilder.append(fullJavaBuilder);
    dropBuilder.append('\n');
    dropBuilder.append(memInfoBuilder);
    dropBuilder.append('\n');
    /*
        dropBuilder.append(oomString);
        dropBuilder.append('\n');
        */
    StringWriter catSw = new StringWriter();
    synchronized (ActivityManagerService.this) {
        PrintWriter catPw = new FastPrintWriter(catSw, false, 256);
        String[] emptyArgs = new String[] {};
        catPw.println();
        dumpProcessesLocked(null, catPw, emptyArgs, 0, false, null);
        catPw.println();
        mServices.newServiceDumperLocked(null, catPw, emptyArgs, 0, false, null).dumpLocked();
        catPw.println();
        dumpActivitiesLocked(null, catPw, emptyArgs, 0, false, false, null);
        catPw.flush();
    }
    dropBuilder.append(catSw.toString());
    addErrorToDropBox("lowmem", null, "system_server", null, null, tag.toString(), dropBuilder.toString(), null, null);
    //Slog.i(TAG, dropBuilder.toString());
    synchronized (ActivityManagerService.this) {
        long now = SystemClock.uptimeMillis();
        if (mLastMemUsageReportTime < now) {
            mLastMemUsageReportTime = now;
        }
    }
}
Also used : POSTFIX_PSS(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_PSS) Bundle(android.os.Bundle) TaskThumbnailInfo(android.app.ActivityManager.TaskThumbnailInfo) FEATURE_FREEFORM_WINDOW_MANAGEMENT(android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT) Time(android.text.format.Time) IApplicationThread(android.app.IApplicationThread) ON_TOP(com.android.server.am.ActivityStackSupervisor.ON_TOP) XmlSerializer(org.xmlpull.v1.XmlSerializer) ActivityManagerInternal(android.app.ActivityManagerInternal) DEBUG_RECENTS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_RECENTS) FEATURE_PICTURE_IN_PICTURE(android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE) LOCK_TASK_AUTH_DONT_LOCK(com.android.server.am.TaskRecord.LOCK_TASK_AUTH_DONT_LOCK) IResultReceiver(com.android.internal.os.IResultReceiver) PRESERVE_WINDOWS(com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS) DeviceIdleController(com.android.server.DeviceIdleController) IVoiceInteractionSession(android.service.voice.IVoiceInteractionSession) Handler(android.os.Handler) Map(java.util.Map) Display(android.view.Display) IIntentReceiver(android.content.IIntentReceiver) INVALID_STACK_ID(android.app.ActivityManager.StackId.INVALID_STACK_ID) POSTFIX_PROCESS_OBSERVERS(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_PROCESS_OBSERVERS) IActivityContainer(android.app.IActivityContainer) IoUtils(libcore.io.IoUtils) Log(android.util.Log) XmlPullParser(org.xmlpull.v1.XmlPullParser) IProgressListener(android.os.IProgressListener) IVoiceInteractor(com.android.internal.app.IVoiceInteractor) ActivityManagerNative(android.app.ActivityManagerNative) IntentFilter(android.content.IntentFilter) Watchdog(com.android.server.Watchdog) DEBUG_ANR(com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR) DumpHeapActivity(com.android.internal.app.DumpHeapActivity) PathPermission(android.content.pm.PathPermission) IUidObserver(android.app.IUidObserver) Installer(com.android.server.pm.Installer) INotificationManager(android.app.INotificationManager) PROC_PARENS(android.os.Process.PROC_PARENS) POSTFIX_CLEANUP(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CLEANUP) Preconditions(com.android.internal.util.Preconditions) FactoryTest(android.os.FactoryTest) SleepToken(android.app.ActivityManagerInternal.SleepToken) IProcessObserver(android.app.IProcessObserver) DEBUG_MU(com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU) TRANSIT_ACTIVITY_OPEN(com.android.server.wm.AppTransition.TRANSIT_ACTIVITY_OPEN) PackageManagerInternal(android.content.pm.PackageManagerInternal) RemoteException(android.os.RemoteException) SystemClock(android.os.SystemClock) LOCK_TASK_AUTH_PINNABLE(com.android.server.am.TaskRecord.LOCK_TASK_AUTH_PINNABLE) SystemServiceManager(com.android.server.SystemServiceManager) UpdateLock(android.os.UpdateLock) POSTFIX_LOCKTASK(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_LOCKTASK) TAG_AM(com.android.server.am.ActivityManagerDebugConfig.TAG_AM) POSTFIX_MU(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_MU) DEBUG_TASKS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_TASKS) Settings(android.provider.Settings) MATCH_DIRECT_BOOT_UNAWARE(android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE) IActivityController(android.app.IActivityController) StackId(android.app.ActivityManager.StackId) XmlUtils.writeBooleanAttribute(com.android.internal.util.XmlUtils.writeBooleanAttribute) POSTFIX_BROADCAST(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BROADCAST) UserManager(android.os.UserManager) DEBUG_LRU(com.android.server.am.ActivityManagerDebugConfig.DEBUG_LRU) ServiceManager(android.os.ServiceManager) ComponentName(android.content.ComponentName) ParceledListSlice(android.content.pm.ParceledListSlice) BackgroundThread(com.android.internal.os.BackgroundThread) IOException(java.io.IOException) InputStreamReader(java.io.InputStreamReader) DEBUG_ALL(com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL) IntentResolver(com.android.server.IntentResolver) SystemProperties(android.os.SystemProperties) UI_MODE_TYPE_TELEVISION(android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) DEBUG_PROCESS_OBSERVERS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROCESS_OBSERVERS) AtomicLong(java.util.concurrent.atomic.AtomicLong) XmlUtils.readIntAttribute(com.android.internal.util.XmlUtils.readIntAttribute) IAppTask(android.app.IAppTask) TRANSIT_TASK_TO_FRONT(com.android.server.wm.AppTransition.TRANSIT_TASK_TO_FRONT) ServiceThread(com.android.server.ServiceThread) TelecomManager(android.telecom.TelecomManager) Manifest.permission(android.Manifest.permission) FileObserver(android.os.FileObserver) XmlUtils.writeLongAttribute(com.android.internal.util.XmlUtils.writeLongAttribute) ALWAYS_FINISH_ACTIVITIES(android.provider.Settings.Global.ALWAYS_FINISH_ACTIVITIES) DEBUG_PROCESSES(com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROCESSES) Rect(android.graphics.Rect) Trace(android.os.Trace) POSTFIX_UID_OBSERVERS(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_UID_OBSERVERS) Zygote(com.android.internal.os.Zygote) MANAGE_ACTIVITY_STACKS(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) VrManagerInternal(com.android.server.vr.VrManagerInternal) PackageManager(android.content.pm.PackageManager) WindowManager(android.view.WindowManager) DEBUG_IMMERSIVE(com.android.server.am.ActivityManagerDebugConfig.DEBUG_IMMERSIVE) ProviderInfo(android.content.pm.ProviderInfo) IPermissionController(android.os.IPermissionController) POSTFIX_OOM_ADJ(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_OOM_ADJ) VMRuntime(dalvik.system.VMRuntime) DEBUG_BROADCAST_BACKGROUND(com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_BACKGROUND) ContentResolver(android.content.ContentResolver) Locale(java.util.Locale) IAppOpsCallback(com.android.internal.app.IAppOpsCallback) ActivityInfo(android.content.pm.ActivityInfo) PersistableBundle(android.os.PersistableBundle) InstrumentationInfo(android.content.pm.InstrumentationInfo) Proxy(android.net.Proxy) WAIT_FOR_DEBUGGER(android.provider.Settings.Global.WAIT_FOR_DEBUGGER) Debug(android.os.Debug) IProcessInfoService(android.os.IProcessInfoService) END_DOCUMENT(org.xmlpull.v1.XmlPullParser.END_DOCUMENT) DEBUG_POWER_QUICK(com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK) DEBUG_UID_OBSERVERS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_UID_OBSERVERS) RemoteCallbackList(android.os.RemoteCallbackList) DEBUG_POWER(com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER) DisplayMetrics(android.util.DisplayMetrics) GET_PROVIDERS(android.content.pm.PackageManager.GET_PROVIDERS) DEBUG_APP(android.provider.Settings.Global.DEBUG_APP) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) Objects(java.util.Objects) IMountService(android.os.storage.IMountService) ActivityNotFoundException(android.content.ActivityNotFoundException) Notification(android.app.Notification) IPackageManager(android.content.pm.IPackageManager) BroadcastOptions(android.app.BroadcastOptions) SystemUserHomeActivity(com.android.internal.app.SystemUserHomeActivity) AppGlobals(android.app.AppGlobals) POSTFIX_LOCKSCREEN(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_LOCKSCREEN) UserIdInt(android.annotation.UserIdInt) LocationManager(android.location.LocationManager) DEBUG_LOCKTASK(com.android.server.am.ActivityManagerDebugConfig.DEBUG_LOCKTASK) ActivityManager(android.app.ActivityManager) DEBUG_USAGE_STATS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_USAGE_STATS) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) IIntentSender(android.content.IIntentSender) PackageInfo(android.content.pm.PackageInfo) POSTFIX_FOCUS(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_FOCUS) Slog(android.util.Slog) RESIZE_MODE_PRESERVE_WINDOW(android.app.ActivityManager.RESIZE_MODE_PRESERVE_WINDOW) Binder(android.os.Binder) HashSet(java.util.HashSet) ApplicationThreadNative(android.app.ApplicationThreadNative) LOCK_TASK_AUTH_LAUNCHABLE_PRIV(com.android.server.am.TaskRecord.LOCK_TASK_AUTH_LAUNCHABLE_PRIV) POSTFIX_IMMERSIVE(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_IMMERSIVE) POSTFIX_BACKUP(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BACKUP) LocalServices(com.android.server.LocalServices) IAppOpsService(com.android.internal.app.IAppOpsService) UserInfo(android.content.pm.UserInfo) Build(android.os.Build) WeakReference(java.lang.ref.WeakReference) DEBUG_PERMISSIONS_REVIEW(com.android.server.am.ActivityManagerDebugConfig.DEBUG_PERMISSIONS_REVIEW) EmptyArray(libcore.util.EmptyArray) ArrayMap(android.util.ArrayMap) TRANSIT_ACTIVITY_RELAUNCH(com.android.server.wm.AppTransition.TRANSIT_ACTIVITY_RELAUNCH) TransactionTooLargeException(android.os.TransactionTooLargeException) MATCH_DIRECT_BOOT_AWARE(android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE) LayoutInflater(android.view.LayoutInflater) POSTFIX_SERVICE(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SERVICE) FileInputStream(java.io.FileInputStream) DOCKED_STACK_ID(android.app.ActivityManager.StackId.DOCKED_STACK_ID) Bitmap(android.graphics.Bitmap) FORCE_FOCUS(com.android.server.am.ActivityStackSupervisor.FORCE_FOCUS) DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT(android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT) ServiceInfo(android.content.pm.ServiceInfo) BatteryStats(android.os.BatteryStats) DEBUG_WHITELISTS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_WHITELISTS) ProfilerInfo(android.app.ProfilerInfo) Comparator(java.util.Comparator) Activity(android.app.Activity) Resources(android.content.res.Resources) SuggestionSpan(android.text.style.SuggestionSpan) PermissionInfo(android.content.pm.PermissionInfo) Arrays(java.util.Arrays) DEBUG_VISIBLE_BEHIND(com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBLE_BEHIND) ParcelFileDescriptor(android.os.ParcelFileDescriptor) DEBUG_BACKUP(com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP) ConfigurationInfo(android.content.pm.ConfigurationInfo) GuardedBy(com.android.internal.annotations.GuardedBy) IServiceConnection(android.app.IServiceConnection) Uri(android.net.Uri) Process(android.os.Process) FREEFORM_WORKSPACE_STACK_ID(android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID) DEVELOPMENT_FORCE_RTL(android.provider.Settings.Global.DEVELOPMENT_FORCE_RTL) Manifest(android.Manifest) StatusBarManagerInternal(com.android.server.statusbar.StatusBarManagerInternal) IUserSwitchObserver(android.app.IUserSwitchObserver) ProcessStats(com.android.internal.app.procstats.ProcessStats) Looper(android.os.Looper) Maps(com.google.android.collect.Maps) TimeUtils(android.util.TimeUtils) DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES(android.provider.Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES) DEBUG_PSS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_PSS) PrintWriter(java.io.PrintWriter) POSTFIX_LRU(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_LRU) POSTFIX_URI_PERMISSION(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_URI_PERMISSION) PERMISSION_GRANTED(android.content.pm.PackageManager.PERMISSION_GRANTED) DEBUG_PROVIDER(com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROVIDER) DEBUG_BROADCAST(com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST) DropBoxManager(android.os.DropBoxManager) POSTFIX_CONFIGURATION(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CONFIGURATION) PINNED_STACK_ID(android.app.ActivityManager.StackId.PINNED_STACK_ID) Set(java.util.Set) POSTFIX_PROVIDER(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_PROVIDER) POSTFIX_VISIBLE_BEHIND(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_VISIBLE_BEHIND) StandardCharsets(java.nio.charset.StandardCharsets) Message(android.os.Message) AssistUtils(com.android.internal.app.AssistUtils) WindowManagerService(com.android.server.wm.WindowManagerService) DEBUG_VISIBILITY(com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBILITY) CompatibilityInfo(android.content.res.CompatibilityInfo) Environment(android.os.Environment) IUiAutomationConnection(android.app.IUiAutomationConnection) Dialog(android.app.Dialog) Instrumentation(android.app.Instrumentation) AssistStructure(android.app.assist.AssistStructure) XmlUtils.readLongAttribute(com.android.internal.util.XmlUtils.readLongAttribute) FULLSCREEN_WORKSPACE_STACK_ID(android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID) FEATURE_LEANBACK_ONLY(android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY) Parcel(android.os.Parcel) ArrayList(java.util.ArrayList) IntentSender(android.content.IntentSender) PowerManagerInternal(android.os.PowerManagerInternal) DEBUG_CLEANUP(com.android.server.am.ActivityManagerDebugConfig.DEBUG_CLEANUP) PROC_SPACE_TERM(android.os.Process.PROC_SPACE_TERM) DebugUtils(android.util.DebugUtils) UserHandle(android.os.UserHandle) DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT(android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT) POSTFIX_STACK(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_STACK) DEBUG_STACK(com.android.server.am.ActivityManagerDebugConfig.DEBUG_STACK) IBackupManager(android.app.backup.IBackupManager) FONT_SCALE(android.provider.Settings.System.FONT_SCALE) StorageManager(android.os.storage.StorageManager) Xml(android.util.Xml) POSTFIX_SWITCH(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SWITCH) AttributeCache(com.android.server.AttributeCache) EventLog(android.util.EventLog) FastPrintWriter(com.android.internal.util.FastPrintWriter) StringWriter(java.io.StringWriter) FileOutputStream(java.io.FileOutputStream) IContentProvider(android.content.IContentProvider) IPackageDataObserver(android.content.pm.IPackageDataObserver) WorkSource(android.os.WorkSource) LENIENT_BACKGROUND_CHECK(android.provider.Settings.Global.LENIENT_BACKGROUND_CHECK) DEFER_RESUME(com.android.server.am.ActivityStackSupervisor.DEFER_RESUME) TRANSIT_TASK_IN_PLACE(com.android.server.wm.AppTransition.TRANSIT_TASK_IN_PLACE) File(java.io.File) AppWidgetManager(android.appwidget.AppWidgetManager) Gravity(android.view.Gravity) ComponentCallbacks2(android.content.ComponentCallbacks2) TransferPipe(com.android.internal.os.TransferPipe) MemInfoReader(com.android.internal.util.MemInfoReader) ActivityState(com.android.server.am.ActivityStack.ActivityState) ITaskStackListener(android.app.ITaskStackListener) Configuration(android.content.res.Configuration) MATCH_UNINSTALLED_PACKAGES(android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES) DEBUG_BROADCAST_LIGHT(com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_LIGHT) ResultReceiver(android.os.ResultReceiver) INTERACT_ACROSS_USERS(android.Manifest.permission.INTERACT_ACROSS_USERS) IStopUserCallback(android.app.IStopUserCallback) AppOpsManager(android.app.AppOpsManager) DateUtils(android.text.format.DateUtils) UsageEvents(android.app.usage.UsageEvents) POSTFIX_PROCESSES(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_PROCESSES) ProcessCpuTracker(com.android.internal.os.ProcessCpuTracker) PendingIntent(android.app.PendingIntent) DEBUG_OOM_ADJ(com.android.server.am.ActivityManagerDebugConfig.DEBUG_OOM_ADJ) InstallerException(com.android.server.pm.Installer.InstallerException) LockGuard(com.android.server.LockGuard) VoiceInteractionSession(android.service.voice.VoiceInteractionSession) INTERACT_ACROSS_USERS_FULL(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) MATCH_SYSTEM_ONLY(android.content.pm.PackageManager.MATCH_SYSTEM_ONLY) IBinder(android.os.IBinder) ActivityOptions(android.app.ActivityOptions) PowerManager(android.os.PowerManager) VoiceInteractionManagerInternal(android.service.voice.VoiceInteractionManagerInternal) XmlUtils.writeIntAttribute(com.android.internal.util.XmlUtils.writeIntAttribute) FastXmlSerializer(com.android.internal.util.FastXmlSerializer) View(android.view.View) XmlUtils.readBooleanAttribute(com.android.internal.util.XmlUtils.readBooleanAttribute) DEBUG_SERVICE(com.android.server.am.ActivityManagerDebugConfig.DEBUG_SERVICE) START_TASKS_FROM_RECENTS(android.Manifest.permission.START_TASKS_FROM_RECENTS) ProxyInfo(android.net.ProxyInfo) IInstrumentationWatcher(android.app.IInstrumentationWatcher) NotificationManager(android.app.NotificationManager) SystemService(com.android.server.SystemService) AssistContent(android.app.assist.AssistContent) RESTORE_FROM_RECENTS(com.android.server.am.ActivityStackSupervisor.RESTORE_FROM_RECENTS) NonNull(android.annotation.NonNull) BroadcastReceiver(android.content.BroadcastReceiver) AtomicFile(android.util.AtomicFile) FileNotFoundException(java.io.FileNotFoundException) ContentObserver(android.database.ContentObserver) AlertDialog(android.app.AlertDialog) SparseArray(android.util.SparseArray) List(java.util.List) DEBUG_URI_PERMISSION(com.android.server.am.ActivityManagerDebugConfig.DEBUG_URI_PERMISSION) AppOpsService(com.android.server.AppOpsService) IntentFirewall(com.android.server.firewall.IntentFirewall) ApplicationInfo(android.content.pm.ApplicationInfo) StackInfo(android.app.ActivityManager.StackInfo) HOME_STACK_ID(android.app.ActivityManager.StackId.HOME_STACK_ID) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException) Context(android.content.Context) DEBUG_FOCUS(com.android.server.am.ActivityManagerDebugConfig.DEBUG_FOCUS) RunningTaskInfo(android.app.ActivityManager.RunningTaskInfo) DEBUG_CONFIGURATION(com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION) Pair(android.util.Pair) Intent(android.content.Intent) PrintWriterPrinter(android.util.PrintWriterPrinter) HashMap(java.util.HashMap) MATCH_DEBUG_TRIAGED_MISSING(android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING) START_TAG(org.xmlpull.v1.XmlPullParser.START_TAG) LocaleList(android.os.LocaleList) ClipData(android.content.ClipData) POSTFIX_VISIBILITY(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_VISIBILITY) DevicePolicyManager(android.app.admin.DevicePolicyManager) RECENTS_ACTIVITY_TYPE(com.android.server.am.ActivityRecord.RECENTS_ACTIVITY_TYPE) FORCE_NEW_TASK_FLAGS(com.android.server.am.ActivityStackSupervisor.ActivityContainer.FORCE_NEW_TASK_FLAGS) ArraySet(android.util.ArraySet) INVALID_TASK_ID(com.android.server.am.TaskRecord.INVALID_TASK_ID) R(com.android.internal.R) UsageStatsManagerInternal(android.app.usage.UsageStatsManagerInternal) DialogInterface(android.content.DialogInterface) ProcessMap(com.android.internal.app.ProcessMap) ApplicationErrorReport(android.app.ApplicationErrorReport) POSTFIX_POWER(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_POWER) Iterator(java.util.Iterator) ActivityThread(android.app.ActivityThread) TAG_WITH_CLASS_NAME(com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME) Point(android.graphics.Point) Lists(com.google.android.collect.Lists) ContentProvider(android.content.ContentProvider) PROC_CHAR(android.os.Process.PROC_CHAR) IActivityContainerCallback(android.app.IActivityContainerCallback) ResolveInfo(android.content.pm.ResolveInfo) DEBUG_LOCKSCREEN(com.android.server.am.ActivityManagerDebugConfig.DEBUG_LOCKSCREEN) FileUtils(android.os.FileUtils) TRANSIT_TASK_OPEN(com.android.server.wm.AppTransition.TRANSIT_TASK_OPEN) TelephonyIntents(com.android.internal.telephony.TelephonyIntents) POSTFIX_RECENTS(com.android.server.am.ActivityManagerDebugConfig.POSTFIX_RECENTS) StrictMode(android.os.StrictMode) DEBUG_SWITCH(com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH) FileDescriptor(java.io.FileDescriptor) ArrayUtils(com.android.internal.util.ArrayUtils) Collections(java.util.Collections) BatteryStatsImpl(com.android.internal.os.BatteryStatsImpl) MountServiceInternal(android.os.storage.MountServiceInternal) PROC_OUT_LONG(android.os.Process.PROC_OUT_LONG) ProcessCpuTracker(com.android.internal.os.ProcessCpuTracker) FastPrintWriter(com.android.internal.util.FastPrintWriter) MemInfoReader(com.android.internal.util.MemInfoReader) Point(android.graphics.Point) SparseArray(android.util.SparseArray) StringWriter(java.io.StringWriter) BatteryStats(android.os.BatteryStats) ProcessStats(com.android.internal.app.procstats.ProcessStats) PrintWriter(java.io.PrintWriter) FastPrintWriter(com.android.internal.util.FastPrintWriter)

Example 23 with SparseArray

use of android.util.SparseArray in project platform_frameworks_base by android.

the class ActivityManagerService method cleanUpRemovedTaskLocked.

private void cleanUpRemovedTaskLocked(TaskRecord tr, boolean killProcess, boolean removeFromRecents) {
    if (removeFromRecents) {
        mRecentTasks.remove(tr);
        tr.removedFromRecents();
    }
    ComponentName component = tr.getBaseIntent().getComponent();
    if (component == null) {
        Slog.w(TAG, "No component for base intent of task: " + tr);
        return;
    }
    // Find any running services associated with this app and stop if needed.
    mServices.cleanUpRemovedTaskLocked(tr, component, new Intent(tr.getBaseIntent()));
    if (!killProcess) {
        return;
    }
    // Determine if the process(es) for this task should be killed.
    final String pkg = component.getPackageName();
    ArrayList<ProcessRecord> procsToKill = new ArrayList<>();
    ArrayMap<String, SparseArray<ProcessRecord>> pmap = mProcessNames.getMap();
    for (int i = 0; i < pmap.size(); i++) {
        SparseArray<ProcessRecord> uids = pmap.valueAt(i);
        for (int j = 0; j < uids.size(); j++) {
            ProcessRecord proc = uids.valueAt(j);
            if (proc.userId != tr.userId) {
                // Don't kill process for a different user.
                continue;
            }
            if (proc == mHomeProcess) {
                // Don't kill the home process along with tasks from the same package.
                continue;
            }
            if (!proc.pkgList.containsKey(pkg)) {
                // Don't kill process that is not associated with this task.
                continue;
            }
            for (int k = 0; k < proc.activities.size(); k++) {
                TaskRecord otherTask = proc.activities.get(k).task;
                if (tr.taskId != otherTask.taskId && otherTask.inRecents) {
                    // also in recents.
                    return;
                }
            }
            if (proc.foregroundServices) {
                // Don't kill process(es) with foreground service.
                return;
            }
            // Add process to kill list.
            procsToKill.add(proc);
        }
    }
    // Kill the running processes.
    for (int i = 0; i < procsToKill.size(); i++) {
        ProcessRecord pr = procsToKill.get(i);
        if (pr.setSchedGroup == ProcessList.SCHED_GROUP_BACKGROUND && pr.curReceivers.isEmpty()) {
            pr.kill("remove task", true);
        } else {
            // We delay killing processes that are not in the background or running a receiver.
            pr.waitingToKill = "remove task";
        }
    }
}
Also used : SparseArray(android.util.SparseArray) ArrayList(java.util.ArrayList) ComponentName(android.content.ComponentName) PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) Point(android.graphics.Point)

Example 24 with SparseArray

use of android.util.SparseArray in project platform_frameworks_base by android.

the class ProcessStatsService method setMemFactorLocked.

public boolean setMemFactorLocked(int memFactor, boolean screenOn, long now) {
    mMemFactorLowered = memFactor < mLastMemOnlyState;
    mLastMemOnlyState = memFactor;
    if (screenOn) {
        memFactor += ProcessStats.ADJ_SCREEN_ON;
    }
    if (memFactor != mProcessStats.mMemFactor) {
        if (mProcessStats.mMemFactor != ProcessStats.STATE_NOTHING) {
            mProcessStats.mMemFactorDurations[mProcessStats.mMemFactor] += now - mProcessStats.mStartTime;
        }
        mProcessStats.mMemFactor = memFactor;
        mProcessStats.mStartTime = now;
        final ArrayMap<String, SparseArray<SparseArray<ProcessStats.PackageState>>> pmap = mProcessStats.mPackages.getMap();
        for (int ipkg = pmap.size() - 1; ipkg >= 0; ipkg--) {
            final SparseArray<SparseArray<ProcessStats.PackageState>> uids = pmap.valueAt(ipkg);
            for (int iuid = uids.size() - 1; iuid >= 0; iuid--) {
                final SparseArray<ProcessStats.PackageState> vers = uids.valueAt(iuid);
                for (int iver = vers.size() - 1; iver >= 0; iver--) {
                    final ProcessStats.PackageState pkg = vers.valueAt(iver);
                    final ArrayMap<String, ServiceState> services = pkg.mServices;
                    for (int isvc = services.size() - 1; isvc >= 0; isvc--) {
                        final ServiceState service = services.valueAt(isvc);
                        service.setMemFactor(memFactor, now);
                    }
                }
            }
        }
        return true;
    }
    return false;
}
Also used : SparseArray(android.util.SparseArray) IProcessStats(com.android.internal.app.procstats.IProcessStats) ProcessStats(com.android.internal.app.procstats.ProcessStats) ServiceState(com.android.internal.app.procstats.ServiceState)

Example 25 with SparseArray

use of android.util.SparseArray in project platform_frameworks_base by android.

the class ManagedServices method rebindServices.

/**
     * Called whenever packages change, the user switches, or the secure setting
     * is altered. (For example in response to USER_SWITCHED in our broadcast receiver)
     */
private void rebindServices(boolean forceRebind) {
    if (DEBUG)
        Slog.d(TAG, "rebindServices");
    final int[] userIds = mUserProfiles.getCurrentProfileIds();
    final int nUserIds = userIds.length;
    final SparseArray<ArraySet<ComponentName>> componentsByUser = new SparseArray<>();
    for (int i = 0; i < nUserIds; ++i) {
        componentsByUser.put(userIds[i], loadComponentNamesFromSetting(mConfig.secureSettingName, userIds[i]));
        if (mConfig.secondarySettingName != null) {
            componentsByUser.get(userIds[i]).addAll(loadComponentNamesFromSetting(mConfig.secondarySettingName, userIds[i]));
        }
    }
    final ArrayList<ManagedServiceInfo> removableBoundServices = new ArrayList<>();
    final SparseArray<Set<ComponentName>> toAdd = new SparseArray<>();
    synchronized (mMutex) {
        // Rebind to non-system services if user switched
        for (ManagedServiceInfo service : mServices) {
            if (!service.isSystem && !service.isGuest(this)) {
                removableBoundServices.add(service);
            }
        }
        mEnabledServicesForCurrentProfiles.clear();
        mEnabledServicesPackageNames.clear();
        for (int i = 0; i < nUserIds; ++i) {
            // decode the list of components
            final ArraySet<ComponentName> userComponents = componentsByUser.get(userIds[i]);
            if (null == userComponents) {
                toAdd.put(userIds[i], new ArraySet<ComponentName>());
                continue;
            }
            final Set<ComponentName> add = new HashSet<>(userComponents);
            add.removeAll(mSnoozingForCurrentProfiles);
            toAdd.put(userIds[i], add);
            mEnabledServicesForCurrentProfiles.addAll(userComponents);
            for (int j = 0; j < userComponents.size(); j++) {
                final ComponentName component = userComponents.valueAt(j);
                mEnabledServicesPackageNames.add(component.getPackageName());
            }
        }
    }
    for (ManagedServiceInfo info : removableBoundServices) {
        final ComponentName component = info.component;
        final int oldUser = info.userid;
        final Set<ComponentName> allowedComponents = toAdd.get(info.userid);
        if (allowedComponents != null) {
            if (allowedComponents.contains(component) && !forceRebind) {
                // Already bound, don't need to bind again.
                allowedComponents.remove(component);
            } else {
                // No longer allowed to be bound, or must rebind.
                Slog.v(TAG, "disabling " + getCaption() + " for user " + oldUser + ": " + component);
                unregisterService(component, oldUser);
            }
        }
    }
    for (int i = 0; i < nUserIds; ++i) {
        final Set<ComponentName> add = toAdd.get(userIds[i]);
        for (ComponentName component : add) {
            Slog.v(TAG, "enabling " + getCaption() + " for " + userIds[i] + ": " + component);
            registerService(component, userIds[i]);
        }
    }
    mLastSeenProfileIds = userIds;
}
Also used : ArraySet(android.util.ArraySet) HashSet(java.util.HashSet) ArraySet(android.util.ArraySet) Set(java.util.Set) ArrayList(java.util.ArrayList) SparseArray(android.util.SparseArray) ComponentName(android.content.ComponentName) HashSet(java.util.HashSet)

Aggregations

SparseArray (android.util.SparseArray)250 ArrayList (java.util.ArrayList)75 ProcessState (com.android.internal.app.procstats.ProcessState)41 Parcelable (android.os.Parcelable)37 View (android.view.View)35 ServiceState (com.android.internal.app.procstats.ServiceState)31 RemoteException (android.os.RemoteException)24 Point (android.graphics.Point)19 ArraySet (android.util.ArraySet)17 HashMap (java.util.HashMap)17 ComponentName (android.content.ComponentName)15 ProcessStats (com.android.internal.app.procstats.ProcessStats)15 UserHandle (android.os.UserHandle)14 ArrayMap (android.util.ArrayMap)14 UserInfo (android.content.pm.UserInfo)13 Paint (android.graphics.Paint)13 Bitmap (android.graphics.Bitmap)12 IOException (java.io.IOException)12 ApplicationInfo (android.content.pm.ApplicationInfo)11 SparseIntArray (android.util.SparseIntArray)11