blob: e322ca4bb1ac8f18d5ac4b7ef5dd9bd9e9dcabb9 [file] [log] [blame]
David Chende701692017-10-05 13:16:02 -07001/*
yro0feae942017-11-15 14:38:48 -08002 * Copyright (C) 2017 The Android Open Source Project
David Chende701692017-10-05 13:16:02 -07003 *
4 * Licensed under the Apache License, versionCode 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 */
Yao Chen8a8d16c2018-02-08 14:50:40 -080016#define DEBUG true // STOPSHIP if true
Joe Onorato9fc9edf2017-10-15 20:08:52 -070017#include "Log.h"
18
Yangster-mac330af582018-02-08 15:24:38 -080019#include "stats_log_util.h"
David Chenc136f45a2017-11-27 11:52:26 -080020#include "guardrail/StatsdStats.h"
Joe Onorato9fc9edf2017-10-15 20:08:52 -070021#include "packages/UidMap.h"
22
David Chenc136f45a2017-11-27 11:52:26 -080023#include <android/os/IStatsCompanionService.h>
24#include <binder/IServiceManager.h>
David Chende701692017-10-05 13:16:02 -070025#include <utils/Errors.h>
26
Dianne Hackborn3accca02013-09-20 09:32:11 -070027#include <inttypes.h>
28
David Chende701692017-10-05 13:16:02 -070029using namespace android;
30
31namespace android {
32namespace os {
33namespace statsd {
34
Yangster9df9a7f2017-12-18 13:33:05 -080035UidMap::UidMap() : mBytesUsed(0) {}
36
37UidMap::~UidMap() {}
David Chenc136f45a2017-11-27 11:52:26 -080038
David Chende701692017-10-05 13:16:02 -070039bool UidMap::hasApp(int uid, const string& packageName) const {
40 lock_guard<mutex> lock(mMutex);
41
42 auto range = mMap.equal_range(uid);
43 for (auto it = range.first; it != range.second; ++it) {
44 if (it->second.packageName == packageName) {
45 return true;
46 }
47 }
48 return false;
49}
50
Yangster9df9a7f2017-12-18 13:33:05 -080051string UidMap::normalizeAppName(const string& appName) const {
52 string normalizedName = appName;
53 std::transform(normalizedName.begin(), normalizedName.end(), normalizedName.begin(), ::tolower);
54 return normalizedName;
55}
56
57std::set<string> UidMap::getAppNamesFromUid(const int32_t& uid, bool returnNormalized) const {
58 lock_guard<mutex> lock(mMutex);
59 return getAppNamesFromUidLocked(uid,returnNormalized);
60}
61
62std::set<string> UidMap::getAppNamesFromUidLocked(const int32_t& uid, bool returnNormalized) const {
63 std::set<string> names;
64 auto range = mMap.equal_range(uid);
65 for (auto it = range.first; it != range.second; ++it) {
66 names.insert(returnNormalized ?
67 normalizeAppName(it->second.packageName) : it->second.packageName);
68 }
69 return names;
70}
71
Dianne Hackborn3accca02013-09-20 09:32:11 -070072int64_t UidMap::getAppVersion(int uid, const string& packageName) const {
David Chende701692017-10-05 13:16:02 -070073 lock_guard<mutex> lock(mMutex);
74
75 auto range = mMap.equal_range(uid);
76 for (auto it = range.first; it != range.second; ++it) {
77 if (it->second.packageName == packageName) {
78 return it->second.versionCode;
79 }
80 }
81 return 0;
82}
83
Dianne Hackborn3accca02013-09-20 09:32:11 -070084void UidMap::updateMap(const vector<int32_t>& uid, const vector<int64_t>& versionCode,
Joe Onorato9fc9edf2017-10-15 20:08:52 -070085 const vector<String16>& packageName) {
Yangster-mac330af582018-02-08 15:24:38 -080086 updateMap(getElapsedRealtimeNs(), uid, versionCode, packageName);
David Chend6896892017-10-25 11:49:03 -070087}
88
89void UidMap::updateMap(const int64_t& timestamp, const vector<int32_t>& uid,
Dianne Hackborn3accca02013-09-20 09:32:11 -070090 const vector<int64_t>& versionCode, const vector<String16>& packageName) {
Yao Chend10f7b12017-12-18 12:53:50 -080091 vector<wp<PackageInfoListener>> broadcastList;
92 {
93 lock_guard<mutex> lock(mMutex); // Exclusively lock for updates.
David Chende701692017-10-05 13:16:02 -070094
Yao Chend10f7b12017-12-18 12:53:50 -080095 mMap.clear();
96 for (size_t j = 0; j < uid.size(); j++) {
97 mMap.insert(make_pair(
98 uid[j], AppData(string(String8(packageName[j]).string()), versionCode[j])));
99 }
David Chende701692017-10-05 13:16:02 -0700100
Yao Chend10f7b12017-12-18 12:53:50 -0800101 auto snapshot = mOutput.add_snapshots();
Yangster-mac330af582018-02-08 15:24:38 -0800102 snapshot->set_elapsed_timestamp_nanos(timestamp);
Yao Chend10f7b12017-12-18 12:53:50 -0800103 for (size_t j = 0; j < uid.size(); j++) {
104 auto t = snapshot->add_package_info();
105 t->set_name(string(String8(packageName[j]).string()));
106 t->set_version(int(versionCode[j]));
107 t->set_uid(uid[j]);
108 }
109 mBytesUsed += snapshot->ByteSize();
David Chenc0f6f632018-01-18 16:02:42 -0800110 ensureBytesUsedBelowLimit();
Yao Chend10f7b12017-12-18 12:53:50 -0800111 StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
112 StatsdStats::getInstance().setUidMapSnapshots(mOutput.snapshots_size());
Yao Chend10f7b12017-12-18 12:53:50 -0800113 getListenerListCopyLocked(&broadcastList);
David Chende701692017-10-05 13:16:02 -0700114 }
Yao Chend10f7b12017-12-18 12:53:50 -0800115 // To avoid invoking callback while holding the internal lock. we get a copy of the listener
116 // list and invoke the callback. It's still possible that after we copy the list, a
117 // listener removes itself before we call it. It's then the listener's job to handle it (expect
118 // the callback to be called after listener is removed, and the listener should properly
119 // ignore it).
120 for (auto weakPtr : broadcastList) {
121 auto strongPtr = weakPtr.promote();
122 if (strongPtr != NULL) {
David Chen27785a82018-01-19 17:06:45 -0800123 strongPtr->onUidMapReceived(timestamp);
Yao Chend10f7b12017-12-18 12:53:50 -0800124 }
125 }
David Chende701692017-10-05 13:16:02 -0700126}
127
Dianne Hackborn3accca02013-09-20 09:32:11 -0700128void UidMap::updateApp(const String16& app_16, const int32_t& uid, const int64_t& versionCode) {
Yangster-mac330af582018-02-08 15:24:38 -0800129 updateApp(getElapsedRealtimeNs(), app_16, uid, versionCode);
David Chend6896892017-10-25 11:49:03 -0700130}
131
132void UidMap::updateApp(const int64_t& timestamp, const String16& app_16, const int32_t& uid,
Dianne Hackborn3accca02013-09-20 09:32:11 -0700133 const int64_t& versionCode) {
Yao Chend10f7b12017-12-18 12:53:50 -0800134 vector<wp<PackageInfoListener>> broadcastList;
Yangster9df9a7f2017-12-18 13:33:05 -0800135 string appName = string(String8(app_16).string());
Yao Chend10f7b12017-12-18 12:53:50 -0800136 {
137 lock_guard<mutex> lock(mMutex);
David Chende701692017-10-05 13:16:02 -0700138
Yao Chend10f7b12017-12-18 12:53:50 -0800139 auto log = mOutput.add_changes();
140 log->set_deletion(false);
Yangster-mac330af582018-02-08 15:24:38 -0800141 log->set_elapsed_timestamp_nanos(timestamp);
Yao Chend10f7b12017-12-18 12:53:50 -0800142 log->set_app(appName);
143 log->set_uid(uid);
144 log->set_version(versionCode);
145 mBytesUsed += log->ByteSize();
David Chenc0f6f632018-01-18 16:02:42 -0800146 ensureBytesUsedBelowLimit();
Yao Chend10f7b12017-12-18 12:53:50 -0800147 StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
148 StatsdStats::getInstance().setUidMapChanges(mOutput.changes_size());
Yao Chend10f7b12017-12-18 12:53:50 -0800149
150 auto range = mMap.equal_range(int(uid));
151 bool found = false;
152 for (auto it = range.first; it != range.second; ++it) {
153 // If we find the exact same app name and uid, update the app version directly.
154 if (it->second.packageName == appName) {
155 it->second.versionCode = versionCode;
156 found = true;
157 break;
158 }
159 }
160 if (!found) {
161 // Otherwise, we need to add an app at this uid.
162 mMap.insert(make_pair(uid, AppData(appName, versionCode)));
163 }
164 getListenerListCopyLocked(&broadcastList);
David Chende701692017-10-05 13:16:02 -0700165 }
166
Yao Chend10f7b12017-12-18 12:53:50 -0800167 for (auto weakPtr : broadcastList) {
168 auto strongPtr = weakPtr.promote();
169 if (strongPtr != NULL) {
David Chen27785a82018-01-19 17:06:45 -0800170 strongPtr->notifyAppUpgrade(timestamp, appName, uid, versionCode);
David Chende701692017-10-05 13:16:02 -0700171 }
David Chende701692017-10-05 13:16:02 -0700172 }
David Chende701692017-10-05 13:16:02 -0700173}
174
David Chenc136f45a2017-11-27 11:52:26 -0800175void UidMap::ensureBytesUsedBelowLimit() {
176 size_t limit;
177 if (maxBytesOverride <= 0) {
178 limit = StatsdStats::kMaxBytesUsedUidMap;
179 } else {
180 limit = maxBytesOverride;
181 }
182 while (mBytesUsed > limit) {
183 VLOG("Bytes used %zu is above limit %zu, need to delete something", mBytesUsed, limit);
184 if (mOutput.snapshots_size() > 0) {
185 auto snapshots = mOutput.mutable_snapshots();
186 snapshots->erase(snapshots->begin()); // Remove first snapshot.
187 StatsdStats::getInstance().noteUidMapDropped(1, 0);
188 } else if (mOutput.changes_size() > 0) {
189 auto changes = mOutput.mutable_changes();
190 changes->DeleteSubrange(0, 1);
191 StatsdStats::getInstance().noteUidMapDropped(0, 1);
192 }
193 mBytesUsed = mOutput.ByteSize();
194 }
195}
196
Joe Onorato9fc9edf2017-10-15 20:08:52 -0700197void UidMap::removeApp(const String16& app_16, const int32_t& uid) {
Yangster-mac330af582018-02-08 15:24:38 -0800198 removeApp(getElapsedRealtimeNs(), app_16, uid);
David Chend6896892017-10-25 11:49:03 -0700199}
Yangster9df9a7f2017-12-18 13:33:05 -0800200
Yao Chend10f7b12017-12-18 12:53:50 -0800201void UidMap::getListenerListCopyLocked(vector<wp<PackageInfoListener>>* output) {
202 for (auto weakIt = mSubscribers.begin(); weakIt != mSubscribers.end();) {
203 auto strongPtr = weakIt->promote();
204 if (strongPtr != NULL) {
205 output->push_back(*weakIt);
206 weakIt++;
207 } else {
208 weakIt = mSubscribers.erase(weakIt);
209 VLOG("The UidMap listener is gone, remove it now");
David Chende701692017-10-05 13:16:02 -0700210 }
211 }
David Chende701692017-10-05 13:16:02 -0700212}
213
Yao Chend10f7b12017-12-18 12:53:50 -0800214void UidMap::removeApp(const int64_t& timestamp, const String16& app_16, const int32_t& uid) {
215 vector<wp<PackageInfoListener>> broadcastList;
216 string app = string(String8(app_16).string());
217 {
218 lock_guard<mutex> lock(mMutex);
219
220 auto log = mOutput.add_changes();
221 log->set_deletion(true);
Yangster-mac330af582018-02-08 15:24:38 -0800222 log->set_elapsed_timestamp_nanos(timestamp);
Yao Chend10f7b12017-12-18 12:53:50 -0800223 log->set_app(app);
224 log->set_uid(uid);
225 mBytesUsed += log->ByteSize();
David Chenc0f6f632018-01-18 16:02:42 -0800226 ensureBytesUsedBelowLimit();
Yao Chend10f7b12017-12-18 12:53:50 -0800227 StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
228 StatsdStats::getInstance().setUidMapChanges(mOutput.changes_size());
Yao Chend10f7b12017-12-18 12:53:50 -0800229
230 auto range = mMap.equal_range(int(uid));
231 for (auto it = range.first; it != range.second; ++it) {
232 if (it->second.packageName == app) {
233 mMap.erase(it);
234 break;
235 }
236 }
237 getListenerListCopyLocked(&broadcastList);
238 }
239
240 for (auto weakPtr : broadcastList) {
241 auto strongPtr = weakPtr.promote();
242 if (strongPtr != NULL) {
David Chen27785a82018-01-19 17:06:45 -0800243 strongPtr->notifyAppRemoved(timestamp, app, uid);
Yao Chend10f7b12017-12-18 12:53:50 -0800244 }
245 }
246}
247
248void UidMap::addListener(wp<PackageInfoListener> producer) {
Joe Onorato9fc9edf2017-10-15 20:08:52 -0700249 lock_guard<mutex> lock(mMutex); // Lock for updates
David Chende701692017-10-05 13:16:02 -0700250 mSubscribers.insert(producer);
251}
252
Yao Chend10f7b12017-12-18 12:53:50 -0800253void UidMap::removeListener(wp<PackageInfoListener> producer) {
Joe Onorato9fc9edf2017-10-15 20:08:52 -0700254 lock_guard<mutex> lock(mMutex); // Lock for updates
David Chende701692017-10-05 13:16:02 -0700255 mSubscribers.erase(producer);
256}
257
David Chen21582962017-11-01 17:32:46 -0700258void UidMap::assignIsolatedUid(int isolatedUid, int parentUid) {
259 lock_guard<mutex> lock(mIsolatedMutex);
260
261 mIsolatedUidMap[isolatedUid] = parentUid;
262}
263
264void UidMap::removeIsolatedUid(int isolatedUid, int parentUid) {
265 lock_guard<mutex> lock(mIsolatedMutex);
266
267 auto it = mIsolatedUidMap.find(isolatedUid);
268 if (it != mIsolatedUidMap.end()) {
269 mIsolatedUidMap.erase(it);
270 }
271}
272
Yangster-macd40053e2018-01-09 16:29:22 -0800273int UidMap::getHostUidOrSelf(int uid) const {
David Chen21582962017-11-01 17:32:46 -0700274 lock_guard<mutex> lock(mIsolatedMutex);
275
276 auto it = mIsolatedUidMap.find(uid);
277 if (it != mIsolatedUidMap.end()) {
278 return it->second;
279 }
280 return uid;
281}
282
David Chend6896892017-10-25 11:49:03 -0700283void UidMap::clearOutput() {
David Chende701692017-10-05 13:16:02 -0700284 mOutput.Clear();
David Chenc136f45a2017-11-27 11:52:26 -0800285 // Also update the guardrail trackers.
286 StatsdStats::getInstance().setUidMapChanges(0);
287 StatsdStats::getInstance().setUidMapSnapshots(1);
David Chencfc311d2018-01-23 17:55:54 -0800288 mBytesUsed = 0;
David Chenc136f45a2017-11-27 11:52:26 -0800289 StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
David Chend6896892017-10-25 11:49:03 -0700290}
David Chende701692017-10-05 13:16:02 -0700291
David Chend6896892017-10-25 11:49:03 -0700292int64_t UidMap::getMinimumTimestampNs() {
293 int64_t m = 0;
294 for (auto it : mLastUpdatePerConfigKey) {
295 if (m == 0) {
296 m = it.second;
297 } else if (it.second < m) {
298 m = it.second;
299 }
300 }
301 return m;
302}
303
Yao Chend10f7b12017-12-18 12:53:50 -0800304size_t UidMap::getBytesUsed() const {
David Chenc136f45a2017-11-27 11:52:26 -0800305 return mBytesUsed;
306}
307
David Chend6896892017-10-25 11:49:03 -0700308UidMapping UidMap::getOutput(const ConfigKey& key) {
Yangster-mac330af582018-02-08 15:24:38 -0800309 return getOutput(getElapsedRealtimeNs(), key);
David Chend6896892017-10-25 11:49:03 -0700310}
311
312UidMapping UidMap::getOutput(const int64_t& timestamp, const ConfigKey& key) {
313 lock_guard<mutex> lock(mMutex); // Lock for updates
314
315 auto ret = UidMapping(mOutput); // Copy that will be returned.
316 int64_t prevMin = getMinimumTimestampNs();
317 mLastUpdatePerConfigKey[key] = timestamp;
318 int64_t newMin = getMinimumTimestampNs();
319
David Chen27785a82018-01-19 17:06:45 -0800320 if (newMin > prevMin) { // Delete anything possible now that the minimum has moved forward.
David Chend6896892017-10-25 11:49:03 -0700321 int64_t cutoff_nanos = newMin;
322 auto snapshots = mOutput.mutable_snapshots();
323 auto it_snapshots = snapshots->cbegin();
324 while (it_snapshots != snapshots->cend()) {
Yangster-mac330af582018-02-08 15:24:38 -0800325 if (it_snapshots->elapsed_timestamp_nanos() < cutoff_nanos) {
David Chen27785a82018-01-19 17:06:45 -0800326 // it_snapshots points to the following element after erasing.
David Chend6896892017-10-25 11:49:03 -0700327 it_snapshots = snapshots->erase(it_snapshots);
328 } else {
329 ++it_snapshots;
330 }
331 }
332 auto deltas = mOutput.mutable_changes();
333 auto it_deltas = deltas->cbegin();
334 while (it_deltas != deltas->cend()) {
Yangster-mac330af582018-02-08 15:24:38 -0800335 if (it_deltas->elapsed_timestamp_nanos() < cutoff_nanos) {
David Chen27785a82018-01-19 17:06:45 -0800336 // it_snapshots points to the following element after erasing.
David Chend6896892017-10-25 11:49:03 -0700337 it_deltas = deltas->erase(it_deltas);
338 } else {
339 ++it_deltas;
340 }
341 }
David Chencfc311d2018-01-23 17:55:54 -0800342
343 if (mOutput.snapshots_size() == 0) {
344 // Produce another snapshot. This results in extra data being uploaded but helps
345 // ensure we can re-construct the UID->app name, versionCode mapping in server.
346 auto snapshot = mOutput.add_snapshots();
Yangster-mac330af582018-02-08 15:24:38 -0800347 snapshot->set_elapsed_timestamp_nanos(timestamp);
David Chencfc311d2018-01-23 17:55:54 -0800348 for (auto it : mMap) {
349 auto t = snapshot->add_package_info();
350 t->set_name(it.second.packageName);
351 t->set_version(it.second.versionCode);
352 t->set_uid(it.first);
353 }
354 }
David Chend6896892017-10-25 11:49:03 -0700355 }
David Chenc136f45a2017-11-27 11:52:26 -0800356 mBytesUsed = mOutput.ByteSize(); // Compute actual size after potential deletions.
357 StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
358 StatsdStats::getInstance().setUidMapChanges(mOutput.changes_size());
359 StatsdStats::getInstance().setUidMapSnapshots(mOutput.snapshots_size());
David Chende701692017-10-05 13:16:02 -0700360 return ret;
361}
362
Yao Chend10f7b12017-12-18 12:53:50 -0800363void UidMap::printUidMap(FILE* out) const {
David Chende701692017-10-05 13:16:02 -0700364 lock_guard<mutex> lock(mMutex);
365
366 for (auto it : mMap) {
Dianne Hackborn3accca02013-09-20 09:32:11 -0700367 fprintf(out, "%s, v%" PRId64 " (%i)\n", it.second.packageName.c_str(),
368 it.second.versionCode, it.first);
David Chende701692017-10-05 13:16:02 -0700369 }
370}
371
David Chend6896892017-10-25 11:49:03 -0700372void UidMap::OnConfigUpdated(const ConfigKey& key) {
373 mLastUpdatePerConfigKey[key] = -1;
David Chenc136f45a2017-11-27 11:52:26 -0800374
375 // Ensure there is at least one snapshot available since this configuration also needs to know
376 // what all the uid's represent.
377 if (mOutput.snapshots_size() == 0) {
378 sp<IStatsCompanionService> statsCompanion = nullptr;
379 // Get statscompanion service from service manager
380 const sp<IServiceManager> sm(defaultServiceManager());
381 if (sm != nullptr) {
382 const String16 name("statscompanion");
383 statsCompanion = interface_cast<IStatsCompanionService>(sm->checkService(name));
384 if (statsCompanion == nullptr) {
385 ALOGW("statscompanion service unavailable!");
386 return;
387 }
388 statsCompanion->triggerUidSnapshot();
389 }
390 }
David Chend6896892017-10-25 11:49:03 -0700391}
392
393void UidMap::OnConfigRemoved(const ConfigKey& key) {
394 mLastUpdatePerConfigKey.erase(key);
395}
396
Yao Chend10f7b12017-12-18 12:53:50 -0800397set<int32_t> UidMap::getAppUid(const string& package) const {
398 lock_guard<mutex> lock(mMutex);
399
400 set<int32_t> results;
401 for (const auto& pair : mMap) {
402 if (pair.second.packageName == package) {
403 results.insert(pair.first);
404 }
405 }
406 return results;
407}
408
Yao Chen147ce602017-12-22 14:35:34 -0800409// Note not all the following AIDs are used as uids. Some are used only for gids.
410// It's ok to leave them in the map, but we won't ever see them in the log's uid field.
411// App's uid starts from 10000, and will not overlap with the following AIDs.
412const std::map<string, uint32_t> UidMap::sAidToUidMapping = {{"AID_ROOT", 0},
413 {"AID_SYSTEM", 1000},
414 {"AID_RADIO", 1001},
415 {"AID_BLUETOOTH", 1002},
416 {"AID_GRAPHICS", 1003},
417 {"AID_INPUT", 1004},
418 {"AID_AUDIO", 1005},
419 {"AID_CAMERA", 1006},
420 {"AID_LOG", 1007},
421 {"AID_COMPASS", 1008},
422 {"AID_MOUNT", 1009},
423 {"AID_WIFI", 1010},
424 {"AID_ADB", 1011},
425 {"AID_INSTALL", 1012},
426 {"AID_MEDIA", 1013},
427 {"AID_DHCP", 1014},
428 {"AID_SDCARD_RW", 1015},
429 {"AID_VPN", 1016},
430 {"AID_KEYSTORE", 1017},
431 {"AID_USB", 1018},
432 {"AID_DRM", 1019},
433 {"AID_MDNSR", 1020},
434 {"AID_GPS", 1021},
435 // {"AID_UNUSED1", 1022},
436 {"AID_MEDIA_RW", 1023},
437 {"AID_MTP", 1024},
438 // {"AID_UNUSED2", 1025},
439 {"AID_DRMRPC", 1026},
440 {"AID_NFC", 1027},
441 {"AID_SDCARD_R", 1028},
442 {"AID_CLAT", 1029},
443 {"AID_LOOP_RADIO", 1030},
444 {"AID_MEDIA_DRM", 1031},
445 {"AID_PACKAGE_INFO", 1032},
446 {"AID_SDCARD_PICS", 1033},
447 {"AID_SDCARD_AV", 1034},
448 {"AID_SDCARD_ALL", 1035},
449 {"AID_LOGD", 1036},
450 {"AID_SHARED_RELRO", 1037},
451 {"AID_DBUS", 1038},
452 {"AID_TLSDATE", 1039},
453 {"AID_MEDIA_EX", 1040},
454 {"AID_AUDIOSERVER", 1041},
455 {"AID_METRICS_COLL", 1042},
456 {"AID_METRICSD", 1043},
457 {"AID_WEBSERV", 1044},
458 {"AID_DEBUGGERD", 1045},
459 {"AID_MEDIA_CODEC", 1046},
460 {"AID_CAMERASERVER", 1047},
461 {"AID_FIREWALL", 1048},
462 {"AID_TRUNKS", 1049},
463 {"AID_NVRAM", 1050},
464 {"AID_DNS", 1051},
465 {"AID_DNS_TETHER", 1052},
466 {"AID_WEBVIEW_ZYGOTE", 1053},
467 {"AID_VEHICLE_NETWORK", 1054},
468 {"AID_MEDIA_AUDIO", 1055},
469 {"AID_MEDIA_VIDEO", 1056},
470 {"AID_MEDIA_IMAGE", 1057},
471 {"AID_TOMBSTONED", 1058},
472 {"AID_MEDIA_OBB", 1059},
473 {"AID_ESE", 1060},
474 {"AID_OTA_UPDATE", 1061},
475 {"AID_AUTOMOTIVE_EVS", 1062},
476 {"AID_LOWPAN", 1063},
477 {"AID_HSM", 1064},
Yao Chen29f79b52018-01-17 10:56:48 -0800478 {"AID_RESERVED_DISK", 1065},
479 {"AID_STATSD", 1066},
480 {"AID_INCIDENTD", 1067},
Yao Chen147ce602017-12-22 14:35:34 -0800481 {"AID_SHELL", 2000},
482 {"AID_CACHE", 2001},
483 {"AID_DIAG", 2002}};
484
David Chende701692017-10-05 13:16:02 -0700485} // namespace statsd
486} // namespace os
Yao Chen29f79b52018-01-17 10:56:48 -0800487} // namespace android