Loading api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -377,6 +377,7 @@ package android.app { method public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent); method public boolean setDataFetchOperation(long, android.app.PendingIntent); field public static final java.lang.String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED"; field public static final java.lang.String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES"; field public static final java.lang.String EXTRA_STATS_CONFIG_KEY = "android.app.extra.STATS_CONFIG_KEY"; field public static final java.lang.String EXTRA_STATS_CONFIG_UID = "android.app.extra.STATS_CONFIG_UID"; field public static final java.lang.String EXTRA_STATS_DIMENSIONS_VALUE = "android.app.extra.STATS_DIMENSIONS_VALUE"; Loading cmds/statsd/src/statsd_config.proto +1 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,7 @@ message PerfettoDetails { message BroadcastSubscriberDetails { optional int64 subscriber_id = 1; repeated string cookie = 2; } message Subscription { Loading cmds/statsd/src/subscriber/SubscriberReporter.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -77,6 +77,12 @@ void SubscriberReporter::alertBroadcastSubscriber(const ConfigKey& configKey, } int64_t subscriberId = subscription.broadcast_subscriber_details().subscriber_id(); vector<String16> cookies; cookies.reserve(subscription.broadcast_subscriber_details().cookie_size()); for (auto& cookie : subscription.broadcast_subscriber_details().cookie()) { cookies.push_back(String16(cookie.c_str())); } auto it1 = mIntentMap.find(configKey); if (it1 == mIntentMap.end()) { ALOGW("Cannot inform subscriber for missing config key %s ", configKey.ToString().c_str()); Loading @@ -88,12 +94,13 @@ void SubscriberReporter::alertBroadcastSubscriber(const ConfigKey& configKey, configKey.ToString().c_str(), (long long)subscriberId); return; } sendBroadcastLocked(it2->second, configKey, subscription, dimKey); sendBroadcastLocked(it2->second, configKey, subscription, cookies, dimKey); } void SubscriberReporter::sendBroadcastLocked(const sp<IBinder>& intentSender, const ConfigKey& configKey, const Subscription& subscription, const vector<String16>& cookies, const MetricDimensionKey& dimKey) const { VLOG("SubscriberReporter::sendBroadcastLocked called."); if (mStatsCompanionService == nullptr) { Loading @@ -101,11 +108,16 @@ void SubscriberReporter::sendBroadcastLocked(const sp<IBinder>& intentSender, return; } mStatsCompanionService->sendSubscriberBroadcast( intentSender, configKey.GetUid(), configKey.GetId(), subscription.id(), subscription.rule_id(), getStatsDimensionsValue(dimKey.getDimensionKeyInWhat())); intentSender, configKey.GetUid(), configKey.GetId(), subscription.id(), subscription.rule_id(), cookies, getStatsDimensionsValue(dimKey.getDimensionKeyInWhat())); } void getStatsDimensionsValueHelper(const std::vector<FieldValue>& dims, size_t* index, int depth, void getStatsDimensionsValueHelper(const vector<FieldValue>& dims, size_t* index, int depth, int prefix, vector<StatsDimensionsValue>* output) { size_t count = dims.size(); while (*index < count) { Loading cmds/statsd/src/subscriber/SubscriberReporter.h +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <mutex> #include <unordered_map> #include <vector> namespace android { namespace os { Loading Loading @@ -102,6 +103,7 @@ private: void sendBroadcastLocked(const sp<android::IBinder>& intentSender, const ConfigKey& configKey, const Subscription& subscription, const std::vector<String16>& cookies, const MetricDimensionKey& dimKey) const; }; Loading core/java/android/app/StatsManager.java +8 −1 Original line number Diff line number Diff line Loading @@ -53,6 +53,12 @@ public final class StatsManager { */ public static final String EXTRA_STATS_SUBSCRIPTION_RULE_ID = "android.app.extra.STATS_SUBSCRIPTION_RULE_ID"; /** * List<String> of the relevant statsd_config.proto's BroadcastSubscriberDetails.cookie. * Obtain using {@link android.content.Intent#getStringArrayListExtra(String)}. */ public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES"; /** * Extra of a {@link android.os.StatsDimensionsValue} representing sliced dimension value * information. Loading Loading @@ -146,7 +152,8 @@ public final class StatsManager { * {@link #EXTRA_STATS_CONFIG_UID}, * {@link #EXTRA_STATS_CONFIG_KEY}, * {@link #EXTRA_STATS_SUBSCRIPTION_ID}, * {@link #EXTRA_STATS_SUBSCRIPTION_RULE_ID}, and * {@link #EXTRA_STATS_SUBSCRIPTION_RULE_ID}, * {@link #EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES}, and * {@link #EXTRA_STATS_DIMENSIONS_VALUE}. * <p> * This function can only be called by the owner (uid) of the config. It must be called each Loading Loading
api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -377,6 +377,7 @@ package android.app { method public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent); method public boolean setDataFetchOperation(long, android.app.PendingIntent); field public static final java.lang.String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED"; field public static final java.lang.String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES"; field public static final java.lang.String EXTRA_STATS_CONFIG_KEY = "android.app.extra.STATS_CONFIG_KEY"; field public static final java.lang.String EXTRA_STATS_CONFIG_UID = "android.app.extra.STATS_CONFIG_UID"; field public static final java.lang.String EXTRA_STATS_DIMENSIONS_VALUE = "android.app.extra.STATS_DIMENSIONS_VALUE"; Loading
cmds/statsd/src/statsd_config.proto +1 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,7 @@ message PerfettoDetails { message BroadcastSubscriberDetails { optional int64 subscriber_id = 1; repeated string cookie = 2; } message Subscription { Loading
cmds/statsd/src/subscriber/SubscriberReporter.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -77,6 +77,12 @@ void SubscriberReporter::alertBroadcastSubscriber(const ConfigKey& configKey, } int64_t subscriberId = subscription.broadcast_subscriber_details().subscriber_id(); vector<String16> cookies; cookies.reserve(subscription.broadcast_subscriber_details().cookie_size()); for (auto& cookie : subscription.broadcast_subscriber_details().cookie()) { cookies.push_back(String16(cookie.c_str())); } auto it1 = mIntentMap.find(configKey); if (it1 == mIntentMap.end()) { ALOGW("Cannot inform subscriber for missing config key %s ", configKey.ToString().c_str()); Loading @@ -88,12 +94,13 @@ void SubscriberReporter::alertBroadcastSubscriber(const ConfigKey& configKey, configKey.ToString().c_str(), (long long)subscriberId); return; } sendBroadcastLocked(it2->second, configKey, subscription, dimKey); sendBroadcastLocked(it2->second, configKey, subscription, cookies, dimKey); } void SubscriberReporter::sendBroadcastLocked(const sp<IBinder>& intentSender, const ConfigKey& configKey, const Subscription& subscription, const vector<String16>& cookies, const MetricDimensionKey& dimKey) const { VLOG("SubscriberReporter::sendBroadcastLocked called."); if (mStatsCompanionService == nullptr) { Loading @@ -101,11 +108,16 @@ void SubscriberReporter::sendBroadcastLocked(const sp<IBinder>& intentSender, return; } mStatsCompanionService->sendSubscriberBroadcast( intentSender, configKey.GetUid(), configKey.GetId(), subscription.id(), subscription.rule_id(), getStatsDimensionsValue(dimKey.getDimensionKeyInWhat())); intentSender, configKey.GetUid(), configKey.GetId(), subscription.id(), subscription.rule_id(), cookies, getStatsDimensionsValue(dimKey.getDimensionKeyInWhat())); } void getStatsDimensionsValueHelper(const std::vector<FieldValue>& dims, size_t* index, int depth, void getStatsDimensionsValueHelper(const vector<FieldValue>& dims, size_t* index, int depth, int prefix, vector<StatsDimensionsValue>* output) { size_t count = dims.size(); while (*index < count) { Loading
cmds/statsd/src/subscriber/SubscriberReporter.h +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <mutex> #include <unordered_map> #include <vector> namespace android { namespace os { Loading Loading @@ -102,6 +103,7 @@ private: void sendBroadcastLocked(const sp<android::IBinder>& intentSender, const ConfigKey& configKey, const Subscription& subscription, const std::vector<String16>& cookies, const MetricDimensionKey& dimKey) const; }; Loading
core/java/android/app/StatsManager.java +8 −1 Original line number Diff line number Diff line Loading @@ -53,6 +53,12 @@ public final class StatsManager { */ public static final String EXTRA_STATS_SUBSCRIPTION_RULE_ID = "android.app.extra.STATS_SUBSCRIPTION_RULE_ID"; /** * List<String> of the relevant statsd_config.proto's BroadcastSubscriberDetails.cookie. * Obtain using {@link android.content.Intent#getStringArrayListExtra(String)}. */ public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES"; /** * Extra of a {@link android.os.StatsDimensionsValue} representing sliced dimension value * information. Loading Loading @@ -146,7 +152,8 @@ public final class StatsManager { * {@link #EXTRA_STATS_CONFIG_UID}, * {@link #EXTRA_STATS_CONFIG_KEY}, * {@link #EXTRA_STATS_SUBSCRIPTION_ID}, * {@link #EXTRA_STATS_SUBSCRIPTION_RULE_ID}, and * {@link #EXTRA_STATS_SUBSCRIPTION_RULE_ID}, * {@link #EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES}, and * {@link #EXTRA_STATS_DIMENSIONS_VALUE}. * <p> * This function can only be called by the owner (uid) of the config. It must be called each Loading