1 /** 2 * Copyright (c) 2017, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.os; 18 19 import android.os.IStatsPullerCallback; 20 import android.os.ParcelFileDescriptor; 21 22 /** 23 * Binder interface to communicate with the statistics management service. 24 * {@hide} 25 */ 26 interface IStatsManager { 27 /** 28 * Tell the stats daemon that the android system server is up and running. 29 */ systemRunning()30 oneway void systemRunning(); 31 32 /** 33 * Tell the stats daemon that the StatsCompanionService is up and running. 34 * Two-way binder call so that caller knows message received. 35 */ statsCompanionReady()36 void statsCompanionReady(); 37 38 /** 39 * Tells statsd that an anomaly may have occurred, so statsd can check whether this is so and 40 * act accordingly. 41 * Two-way binder call so that caller's method (and corresponding wakelocks) will linger. 42 */ informAnomalyAlarmFired()43 void informAnomalyAlarmFired(); 44 45 /** 46 * Tells statsd that it is time to poll some stats. Statsd will be responsible for determing 47 * what stats to poll and initiating the polling. 48 * Two-way binder call so that caller's method (and corresponding wakelocks) will linger. 49 */ informPollAlarmFired()50 void informPollAlarmFired(); 51 52 /** 53 * Tells statsd that it is time to handle periodic alarms. Statsd will be responsible for 54 * determing what alarm subscriber to trigger. 55 * Two-way binder call so that caller's method (and corresponding wakelocks) will linger. 56 */ informAlarmForSubscriberTriggeringFired()57 void informAlarmForSubscriberTriggeringFired(); 58 59 /** 60 * Tells statsd that the device is about to shutdown. 61 */ informDeviceShutdown()62 void informDeviceShutdown(); 63 64 /** 65 * Inform statsd about a file descriptor for a pipe through which we will pipe version 66 * and package information for each uid. 67 * Versions and package information are supplied via UidData proto where info for each app 68 * is captured in its own element of a repeated ApplicationInfo message. 69 */ informAllUidData(in ParcelFileDescriptor fd)70 oneway void informAllUidData(in ParcelFileDescriptor fd); 71 72 /** 73 * Inform statsd what the uid, version, version_string, and installer are for one app that was 74 * updated. 75 */ informOnePackage(in String app, in int uid, in long version, in String version_string, in String installer)76 oneway void informOnePackage(in String app, in int uid, in long version, 77 in String version_string, in String installer); 78 79 /** 80 * Inform stats that an app was removed. 81 */ informOnePackageRemoved(in String app, in int uid)82 oneway void informOnePackageRemoved(in String app, in int uid); 83 84 /** 85 * Fetches data for the specified configuration key. Returns a byte array representing proto 86 * wire-encoded of ConfigMetricsReportList. 87 * 88 * Requires Manifest.permission.DUMP. 89 */ getData(in long key, in String packageName)90 byte[] getData(in long key, in String packageName); 91 92 /** 93 * Fetches metadata across statsd. Returns byte array representing wire-encoded proto. 94 * 95 * Requires Manifest.permission.DUMP. 96 */ getMetadata(in String packageName)97 byte[] getMetadata(in String packageName); 98 99 /** 100 * Sets a configuration with the specified config key and subscribes to updates for this 101 * configuration key. Broadcasts will be sent if this configuration needs to be collected. 102 * The configuration must be a wire-encoded StatsdConfig. The receiver for this data is 103 * registered in a separate function. 104 * 105 * Requires Manifest.permission.DUMP. 106 */ addConfiguration(in long configKey, in byte[] config, in String packageName)107 void addConfiguration(in long configKey, in byte[] config, in String packageName); 108 109 /** 110 * Registers the given pending intent for this config key. This intent is invoked when the 111 * memory consumed by the metrics for this configuration approach the pre-defined limits. There 112 * can be at most one listener per config key. 113 * 114 * Requires Manifest.permission.DUMP. 115 */ setDataFetchOperation(long configKey, in IBinder intentSender, in String packageName)116 void setDataFetchOperation(long configKey, in IBinder intentSender, in String packageName); 117 118 /** 119 * Removes the data fetch operation for the specified configuration. 120 * 121 * Requires Manifest.permission.DUMP. 122 */ removeDataFetchOperation(long configKey, in String packageName)123 void removeDataFetchOperation(long configKey, in String packageName); 124 125 /** 126 * Registers the given pending intent for this packagename. This intent is invoked when the 127 * active status of any of the configs sent by this package changes and will contain a list of 128 * config ids that are currently active. It also returns the list of configs that are currently 129 * active. There can be at most one active configs changed listener per package. 130 * 131 * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS. 132 */ setActiveConfigsChangedOperation(in IBinder intentSender, in String packageName)133 long[] setActiveConfigsChangedOperation(in IBinder intentSender, in String packageName); 134 135 /** 136 * Removes the active configs changed operation for the specified package name. 137 * 138 * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS. 139 */ removeActiveConfigsChangedOperation(in String packageName)140 void removeActiveConfigsChangedOperation(in String packageName); 141 142 /** 143 * Removes the configuration with the matching config key. No-op if this config key does not 144 * exist. 145 * 146 * Requires Manifest.permission.DUMP. 147 */ removeConfiguration(in long configKey, in String packageName)148 void removeConfiguration(in long configKey, in String packageName); 149 150 /** 151 * Set the IIntentSender (i.e. PendingIntent) to be used when broadcasting subscriber 152 * information to the given subscriberId within the given config. 153 * 154 * Suppose that the calling uid has added a config with key configKey, and that in this config 155 * it is specified that when a particular anomaly is detected, a broadcast should be sent to 156 * a BroadcastSubscriber with id subscriberId. This function links the given intentSender with 157 * that subscriberId (for that config), so that this intentSender is used to send the broadcast 158 * when the anomaly is detected. 159 * 160 * This function can only be called by the owner (uid) of the config. It must be called each 161 * time statsd starts. Later calls overwrite previous calls; only one intentSender is stored. 162 * 163 * intentSender must be convertible into an IntentSender using IntentSender(IBinder) 164 * and cannot be null. 165 * 166 * Requires Manifest.permission.DUMP. 167 */ setBroadcastSubscriber(long configKey, long subscriberId, in IBinder intentSender, in String packageName)168 void setBroadcastSubscriber(long configKey, long subscriberId, in IBinder intentSender, 169 in String packageName); 170 171 /** 172 * Undoes setBroadcastSubscriber() for the (configKey, subscriberId) pair. 173 * Any broadcasts associated with subscriberId will henceforth not be sent. 174 * No-op if this (configKey, subsriberId) pair was not associated with an IntentSender. 175 * 176 * Requires Manifest.permission.DUMP. 177 */ unsetBroadcastSubscriber(long configKey, long subscriberId, in String packageName)178 void unsetBroadcastSubscriber(long configKey, long subscriberId, in String packageName); 179 180 /** 181 * Apps can send an atom via this application breadcrumb with the specified label and state for 182 * this label. This allows building custom metrics and predicates. 183 */ sendAppBreadcrumbAtom(int label, int state)184 void sendAppBreadcrumbAtom(int label, int state); 185 186 /** 187 * Registers a puller callback function that, when invoked, pulls the data 188 * for the specified vendor atom tag. 189 * 190 * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS 191 */ registerPullerCallback(int atomTag, IStatsPullerCallback pullerCallback, String packageName)192 oneway void registerPullerCallback(int atomTag, IStatsPullerCallback pullerCallback, 193 String packageName); 194 195 /** 196 * Unregisters a puller callback function for the given vendor atom. 197 * 198 * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS 199 */ unregisterPullerCallback(int atomTag, String packageName)200 oneway void unregisterPullerCallback(int atomTag, String packageName); 201 202 /** 203 * The install requires staging. 204 */ 205 const int FLAG_REQUIRE_STAGING = 0x01; 206 207 /** 208 * Rollback is enabled with this install. 209 */ 210 const int FLAG_ROLLBACK_ENABLED = 0x02; 211 212 /** 213 * Requires low latency monitoring. 214 */ 215 const int FLAG_REQUIRE_LOW_LATENCY_MONITOR = 0x04; 216 217 /** 218 * Logs an event for binary push for module updates. 219 */ sendBinaryPushStateChangedAtom(in String trainName, in long trainVersionCode, in int options, in int state, in long[] experimentId)220 oneway void sendBinaryPushStateChangedAtom(in String trainName, in long trainVersionCode, 221 in int options, in int state, in long[] experimentId); 222 223 /** 224 * Logs an event for watchdog rollbacks. 225 */ sendWatchdogRollbackOccurredAtom(in int rollbackType, in String packageName, in long packageVersionCode)226 oneway void sendWatchdogRollbackOccurredAtom(in int rollbackType, in String packageName, 227 in long packageVersionCode); 228 229 /** 230 * Returns the most recently registered experiment IDs. 231 */ getRegisteredExperimentIds()232 long[] getRegisteredExperimentIds(); 233 } 234