Loading Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -245,7 +245,7 @@ filegroup { ":libcamera_client_framework_aidl", ":libupdate_engine_aidl", // TODO: this needs to be removed when statsd-framework.jar is separated out ":statsd_aidl", ":statsd_java_aidl", ":storaged_aidl", ":vold_aidl", Loading apex/statsd/aidl/Android.bp +12 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,18 @@ // TODO(b/145815909): move StatsDimensionsValue.aidl and StatsLogEventWrapper.aidl here filegroup { name: "statsd_aidl", srcs: [ "android/os/IPullAtomCallback.aidl", "android/os/IPullAtomResultReceiver.aidl", "android/os/IStatsCompanionService.aidl", "android/os/IStatsd.aidl", "android/os/IStatsPullerCallback.aidl", "android/util/StatsEventParcel.aidl", ], } filegroup { name: "statsd_java_aidl", srcs: ["**/*.aidl"], } Loading apex/statsd/aidl/android/os/IStatsManagerService.aidl 0 → 100644 +65 −0 Original line number Diff line number Diff line /** * Copyright (c) 2019, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.os; import android.app.PendingIntent; /** * Binder interface to communicate with the Java-based statistics service helper. * Contains parcelable objects available only in Java. * {@hide} */ interface IStatsManagerService { /** * Registers the given pending intent for this config key. This intent is invoked when the * memory consumed by the metrics for this configuration approach the pre-defined limits. There * can be at most one listener per config key. * * Requires Manifest.permission.DUMP. */ void setDataFetchOperation(long configKey, in PendingIntent pendingIntent, in String packageName); /** * Registers the given pending intent for this packagename. This intent is invoked when the * active status of any of the configs sent by this package changes and will contain a list of * config ids that are currently active. It also returns the list of configs that are currently * active. There can be at most one active configs changed listener per package. * * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS. */ long[] setActiveConfigsChangedOperation(in PendingIntent pendingIntent, in String packageName); /** * Set the PendingIntent to be used when broadcasting subscriber * information to the given subscriberId within the given config. * * Suppose that the calling uid has added a config with key configKey, and that in this config * it is specified that when a particular anomaly is detected, a broadcast should be sent to * a BroadcastSubscriber with id subscriberId. This function links the given pendingIntent with * that subscriberId (for that config), so that this pendingIntent is used to send the broadcast * when the anomaly is detected. * * This function can only be called by the owner (uid) of the config. It must be called each * time statsd starts. Later calls overwrite previous calls; only one PendingIntent is stored. * * Requires Manifest.permission.DUMP. */ void setBroadcastSubscriber(long configKey, long subscriberId, in PendingIntent pendingIntent, in String packageName); } No newline at end of file apex/statsd/service/java/com/android/server/stats/StatsCompanion.java 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.stats; import android.content.Context; import android.util.Slog; import com.android.server.SystemService; /** * @hide */ public class StatsCompanion { private static final String TAG = "StatsCompanion"; private static final boolean DEBUG = false; /** * Lifecycle class for both {@link StatsCompanionService} and {@link StatsManagerService}. */ public static final class Lifecycle extends SystemService { private StatsCompanionService mStatsCompanionService; private StatsManagerService mStatsManagerService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mStatsCompanionService = new StatsCompanionService(getContext()); mStatsManagerService = new StatsManagerService(getContext()); mStatsCompanionService.setStatsManagerService(mStatsManagerService); mStatsManagerService.setStatsCompanionService(mStatsCompanionService); try { publishBinderService(Context.STATS_COMPANION_SERVICE, mStatsCompanionService); if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_COMPANION_SERVICE); publishBinderService(Context.STATS_MANAGER_SERVICE, mStatsManagerService); if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_MANAGER_SERVICE); } catch (Exception e) { Slog.e(TAG, "Failed to publishBinderService", e); } } @Override public void onBootPhase(int phase) { super.onBootPhase(phase); if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { mStatsCompanionService.systemReady(); mStatsManagerService.systemReady(); } } } } apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +9 −31 Original line number Diff line number Diff line Loading @@ -137,7 +137,6 @@ import com.android.internal.os.StoragedUidIoStatsReader; import com.android.internal.util.DumpUtils; import com.android.server.BinderCallsStatsService; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.SystemServiceManager; import com.android.server.am.MemoryStatUtil.MemoryStat; import com.android.server.notification.NotificationManagerService; Loading Loading @@ -278,6 +277,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private final BroadcastReceiver mUserUpdateReceiver; private final ShutdownEventReceiver mShutdownEventReceiver; private StatsManagerService mStatsManagerService; private static final class PullerKey { private final int mUid; private final int mAtomTag; Loading Loading @@ -2681,6 +2682,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Slog.d(TAG, "learned that statsdReady"); } sayHiToStatsd(); // tell statsd that we're ready too and link to it mStatsManagerService.systemReady(); mContext.sendBroadcastAsUser(new Intent(StatsManager.ACTION_STATSD_STARTED) .addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND), UserHandle.SYSTEM, android.Manifest.permission.DUMP); Loading Loading @@ -2736,7 +2738,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } } // Lifecycle and related code // Statsd related code /** * Fetches the statsd IBinder service. Loading @@ -2747,42 +2749,18 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { return IStatsd.Stub.asInterface(ServiceManager.getService("stats")); } public static final class Lifecycle extends SystemService { private StatsCompanionService mStatsCompanionService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mStatsCompanionService = new StatsCompanionService(getContext()); try { publishBinderService(Context.STATS_COMPANION_SERVICE, mStatsCompanionService); if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_COMPANION_SERVICE); } catch (Exception e) { Slog.e(TAG, "Failed to publishBinderService", e); } } @Override public void onBootPhase(int phase) { super.onBootPhase(phase); if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { mStatsCompanionService.systemReady(); } } } /** * Now that the android system is ready, StatsCompanion is ready too, so inform statsd. */ private void systemReady() { void systemReady() { if (DEBUG) Slog.d(TAG, "Learned that systemReady"); sayHiToStatsd(); } void setStatsManagerService(StatsManagerService statsManagerService) { mStatsManagerService = statsManagerService; } /** * Tells statsd that statscompanion is ready. If the binder call returns, link to * statsd. Loading Loading
Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -245,7 +245,7 @@ filegroup { ":libcamera_client_framework_aidl", ":libupdate_engine_aidl", // TODO: this needs to be removed when statsd-framework.jar is separated out ":statsd_aidl", ":statsd_java_aidl", ":storaged_aidl", ":vold_aidl", Loading
apex/statsd/aidl/Android.bp +12 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,18 @@ // TODO(b/145815909): move StatsDimensionsValue.aidl and StatsLogEventWrapper.aidl here filegroup { name: "statsd_aidl", srcs: [ "android/os/IPullAtomCallback.aidl", "android/os/IPullAtomResultReceiver.aidl", "android/os/IStatsCompanionService.aidl", "android/os/IStatsd.aidl", "android/os/IStatsPullerCallback.aidl", "android/util/StatsEventParcel.aidl", ], } filegroup { name: "statsd_java_aidl", srcs: ["**/*.aidl"], } Loading
apex/statsd/aidl/android/os/IStatsManagerService.aidl 0 → 100644 +65 −0 Original line number Diff line number Diff line /** * Copyright (c) 2019, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.os; import android.app.PendingIntent; /** * Binder interface to communicate with the Java-based statistics service helper. * Contains parcelable objects available only in Java. * {@hide} */ interface IStatsManagerService { /** * Registers the given pending intent for this config key. This intent is invoked when the * memory consumed by the metrics for this configuration approach the pre-defined limits. There * can be at most one listener per config key. * * Requires Manifest.permission.DUMP. */ void setDataFetchOperation(long configKey, in PendingIntent pendingIntent, in String packageName); /** * Registers the given pending intent for this packagename. This intent is invoked when the * active status of any of the configs sent by this package changes and will contain a list of * config ids that are currently active. It also returns the list of configs that are currently * active. There can be at most one active configs changed listener per package. * * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS. */ long[] setActiveConfigsChangedOperation(in PendingIntent pendingIntent, in String packageName); /** * Set the PendingIntent to be used when broadcasting subscriber * information to the given subscriberId within the given config. * * Suppose that the calling uid has added a config with key configKey, and that in this config * it is specified that when a particular anomaly is detected, a broadcast should be sent to * a BroadcastSubscriber with id subscriberId. This function links the given pendingIntent with * that subscriberId (for that config), so that this pendingIntent is used to send the broadcast * when the anomaly is detected. * * This function can only be called by the owner (uid) of the config. It must be called each * time statsd starts. Later calls overwrite previous calls; only one PendingIntent is stored. * * Requires Manifest.permission.DUMP. */ void setBroadcastSubscriber(long configKey, long subscriberId, in PendingIntent pendingIntent, in String packageName); } No newline at end of file
apex/statsd/service/java/com/android/server/stats/StatsCompanion.java 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.stats; import android.content.Context; import android.util.Slog; import com.android.server.SystemService; /** * @hide */ public class StatsCompanion { private static final String TAG = "StatsCompanion"; private static final boolean DEBUG = false; /** * Lifecycle class for both {@link StatsCompanionService} and {@link StatsManagerService}. */ public static final class Lifecycle extends SystemService { private StatsCompanionService mStatsCompanionService; private StatsManagerService mStatsManagerService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mStatsCompanionService = new StatsCompanionService(getContext()); mStatsManagerService = new StatsManagerService(getContext()); mStatsCompanionService.setStatsManagerService(mStatsManagerService); mStatsManagerService.setStatsCompanionService(mStatsCompanionService); try { publishBinderService(Context.STATS_COMPANION_SERVICE, mStatsCompanionService); if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_COMPANION_SERVICE); publishBinderService(Context.STATS_MANAGER_SERVICE, mStatsManagerService); if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_MANAGER_SERVICE); } catch (Exception e) { Slog.e(TAG, "Failed to publishBinderService", e); } } @Override public void onBootPhase(int phase) { super.onBootPhase(phase); if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { mStatsCompanionService.systemReady(); mStatsManagerService.systemReady(); } } } }
apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +9 −31 Original line number Diff line number Diff line Loading @@ -137,7 +137,6 @@ import com.android.internal.os.StoragedUidIoStatsReader; import com.android.internal.util.DumpUtils; import com.android.server.BinderCallsStatsService; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.SystemServiceManager; import com.android.server.am.MemoryStatUtil.MemoryStat; import com.android.server.notification.NotificationManagerService; Loading Loading @@ -278,6 +277,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private final BroadcastReceiver mUserUpdateReceiver; private final ShutdownEventReceiver mShutdownEventReceiver; private StatsManagerService mStatsManagerService; private static final class PullerKey { private final int mUid; private final int mAtomTag; Loading Loading @@ -2681,6 +2682,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Slog.d(TAG, "learned that statsdReady"); } sayHiToStatsd(); // tell statsd that we're ready too and link to it mStatsManagerService.systemReady(); mContext.sendBroadcastAsUser(new Intent(StatsManager.ACTION_STATSD_STARTED) .addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND), UserHandle.SYSTEM, android.Manifest.permission.DUMP); Loading Loading @@ -2736,7 +2738,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } } // Lifecycle and related code // Statsd related code /** * Fetches the statsd IBinder service. Loading @@ -2747,42 +2749,18 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { return IStatsd.Stub.asInterface(ServiceManager.getService("stats")); } public static final class Lifecycle extends SystemService { private StatsCompanionService mStatsCompanionService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mStatsCompanionService = new StatsCompanionService(getContext()); try { publishBinderService(Context.STATS_COMPANION_SERVICE, mStatsCompanionService); if (DEBUG) Slog.d(TAG, "Published " + Context.STATS_COMPANION_SERVICE); } catch (Exception e) { Slog.e(TAG, "Failed to publishBinderService", e); } } @Override public void onBootPhase(int phase) { super.onBootPhase(phase); if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { mStatsCompanionService.systemReady(); } } } /** * Now that the android system is ready, StatsCompanion is ready too, so inform statsd. */ private void systemReady() { void systemReady() { if (DEBUG) Slog.d(TAG, "Learned that systemReady"); sayHiToStatsd(); } void setStatsManagerService(StatsManagerService statsManagerService) { mStatsManagerService = statsManagerService; } /** * Tells statsd that statscompanion is ready. If the binder call returns, link to * statsd. Loading