Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81cacb27 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Statsd BroadcastSubscribers can receive 'cookies'" into pi-dev

parents 9722ec74 058d8698
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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";
+1 −0
Original line number Diff line number Diff line
@@ -295,6 +295,7 @@ message PerfettoDetails {

message BroadcastSubscriberDetails {
  optional int64 subscriber_id = 1;
  repeated string cookie = 2;
}

message Subscription {
+16 −4
Original line number Diff line number Diff line
@@ -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());
@@ -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) {
@@ -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) {
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@

#include <mutex>
#include <unordered_map>
#include <vector>

namespace android {
namespace os {
@@ -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;
};

+8 −1
Original line number Diff line number Diff line
@@ -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.
@@ -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