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, in int rollbackReason, in String failingPackageName)226 oneway void sendWatchdogRollbackOccurredAtom(in int rollbackType, in String packageName, 227 in long packageVersionCode, in int rollbackReason, in String failingPackageName); 228 229 /** 230 * Returns the most recently registered experiment IDs. 231 */ getRegisteredExperimentIds()232 long[] getRegisteredExperimentIds(); 233 } 234