diff options
| -rw-r--r-- | apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java | 26 | ||||
| -rw-r--r-- | cmds/statsd/src/atoms.proto | 25 | ||||
| -rw-r--r-- | cmds/statsd/src/external/StatsPullerManager.cpp | 4 |
3 files changed, 47 insertions, 8 deletions
diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java index 157da636397e..7c25c6c9f029 100644 --- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java @@ -172,6 +172,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -2136,8 +2137,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { pulledData.add(e); } - private void pullDangerousPermissionState(long elapsedNanos, final long wallClockNanos, - List<StatsLogEventWrapper> pulledData) { + private void pullDangerousPermissionState(int atomId, long elapsedNanos, + final long wallClockNanos, List<StatsLogEventWrapper> pulledData) { long token = Binder.clearCallingIdentity(); Set<Integer> reportedUids = new HashSet<>(); try { @@ -2166,6 +2167,11 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } reportedUids.add(pkg.applicationInfo.uid); + if (atomId == StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED + && ThreadLocalRandom.current().nextFloat() > 0.2f) { + continue; + } + int numPerms = pkg.requestedPermissions.length; for (int permNum = 0; permNum < numPerms; permNum++) { String permName = pkg.requestedPermissions[permNum]; @@ -2175,7 +2181,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { try { permissionInfo = pm.getPermissionInfo(permName, 0); permissionFlags = - pm.getPermissionFlags(permName, pkg.packageName, user); + pm.getPermissionFlags(permName, pkg.packageName, user); } catch (PackageManager.NameNotFoundException ignored) { continue; @@ -2186,11 +2192,13 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } StatsLogEventWrapper e = new StatsLogEventWrapper( - StatsLog.DANGEROUS_PERMISSION_STATE, elapsedNanos, wallClockNanos); + atomId, elapsedNanos, wallClockNanos); e.writeString(permName); e.writeInt(pkg.applicationInfo.uid); - e.writeString(null); + if (atomId == StatsLog.DANGEROUS_PERMISSION_STATE) { + e.writeString(null); + } e.writeBoolean((pkg.requestedPermissionsFlags[permNum] & REQUESTED_PERMISSION_GRANTED) != 0); e.writeInt(permissionFlags); @@ -2640,7 +2648,13 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { break; } case StatsLog.DANGEROUS_PERMISSION_STATE: { - pullDangerousPermissionState(elapsedNanos, wallClockNanos, ret); + pullDangerousPermissionState(StatsLog.DANGEROUS_PERMISSION_STATE, elapsedNanos, + wallClockNanos, ret); + break; + } + case StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED: { + pullDangerousPermissionState(StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED, + elapsedNanos, wallClockNanos, ret); break; } case StatsLog.TIME_ZONE_DATA_INFO: { diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index a20436d4bdda..a2cfff2ff02e 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -356,7 +356,7 @@ message Atom { } // Pulled events will start at field 10000. - // Next: 10067 + // Next: 10068 oneof pulled { WifiBytesTransfer wifi_bytes_transfer = 10000; WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001; @@ -424,6 +424,7 @@ message Atom { ProcessMemorySnapshot process_memory_snapshot = 10064; VmsClientStats vms_client_stats = 10065; NotificationRemoteViews notification_remote_views = 10066; + DangerousPermissionStateSampled dangerous_permission_state_sampled = 10067; } // DO NOT USE field numbers above 100,000 in AOSP. @@ -6490,7 +6491,8 @@ message MediametricsDrmManagerReported { /** * State of a dangerous permission requested by a package - */ + * Pulled from: StatsCompanionService +*/ message DangerousPermissionState { // Name of the permission optional string permission_name = 1; @@ -7541,3 +7543,22 @@ message VmsClientStats { optional int64 dropped_bytes = 9; optional int64 dropped_packets = 10; } + +/** + * State of a dangerous permission requested by a package - sampled + * Pulled from: StatsCompanionService.java with data obtained from PackageManager API +*/ +message DangerousPermissionStateSampled { + // Name of the permission + optional string permission_name = 1; + + // Uid of the package + optional int32 uid = 2 [(is_uid) = true]; + + // If the permission is granted to the uid + optional bool is_granted = 3; + + // Permission flags as per android.content.pm.PermissionFlags + optional int32 permission_flags = 4; +} + diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index 9ee627efa841..f913118385a3 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -284,6 +284,10 @@ std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = { // NotiifcationRemoteViews. {{.atomTag = android::util::NOTIFICATION_REMOTE_VIEWS}, {.puller = new StatsCompanionServicePuller(android::util::NOTIFICATION_REMOTE_VIEWS)}}, + // PermissionStateSampled. + {{.atomTag = android::util::DANGEROUS_PERMISSION_STATE_SAMPLED}, + {.puller = + new StatsCompanionServicePuller(android::util::DANGEROUS_PERMISSION_STATE_SAMPLED)}}, }; StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) { |