diff options
author | Baligh Uddin <baligh@google.com> | 2020-12-04 00:40:07 +0000 |
---|---|---|
committer | Baligh Uddin <baligh@google.com> | 2020-12-04 00:40:07 +0000 |
commit | 3eab1b098351f421b71401f4a9282eedcdc039fa (patch) | |
tree | 39a0d2c529bf28088023eae5a04db706ac3e2b8e /cmds/statsd/src/subscriber/SubscriberReporter.cpp | |
parent | ad55c3468b6c61b81601f9175c77d4561ac6df2a (diff) |
Migrate frameworks/base/cmds/statsd to packages/modules/StatsD/bin
Add statsd protos to platform_protos rule
BUG: 167962588
TEST: TH
TEST: Local build [ m com.android.os.statsd ]
Merged-In: I053f2a211ea28c2f181937af3d58ad16b235d096
Change-Id: I637a1af27d572924e88b1f8a930fc45d0794fa20
Diffstat (limited to 'cmds/statsd/src/subscriber/SubscriberReporter.cpp')
-rw-r--r-- | cmds/statsd/src/subscriber/SubscriberReporter.cpp | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/cmds/statsd/src/subscriber/SubscriberReporter.cpp b/cmds/statsd/src/subscriber/SubscriberReporter.cpp deleted file mode 100644 index c915ef3bf069..000000000000 --- a/cmds/statsd/src/subscriber/SubscriberReporter.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define DEBUG false // STOPSHIP if true -#include "Log.h" - -#include "SubscriberReporter.h" - -using std::lock_guard; - -namespace android { -namespace os { -namespace statsd { - -using std::vector; - -struct BroadcastSubscriberDeathCookie { - BroadcastSubscriberDeathCookie(const ConfigKey& configKey, int64_t subscriberId, - const shared_ptr<IPendingIntentRef>& pir): - mConfigKey(configKey), - mSubscriberId(subscriberId), - mPir(pir) {} - - ConfigKey mConfigKey; - int64_t mSubscriberId; - shared_ptr<IPendingIntentRef> mPir; -}; - -void SubscriberReporter::broadcastSubscriberDied(void* cookie) { - auto cookie_ = static_cast<BroadcastSubscriberDeathCookie*>(cookie); - ConfigKey& configKey = cookie_->mConfigKey; - int64_t subscriberId = cookie_->mSubscriberId; - shared_ptr<IPendingIntentRef>& pir = cookie_->mPir; - - SubscriberReporter& thiz = getInstance(); - - // Erase the mapping from a (config_key, subscriberId) to a pir if the - // mapping exists. - lock_guard<mutex> lock(thiz.mLock); - auto subscriberMapIt = thiz.mIntentMap.find(configKey); - if (subscriberMapIt != thiz.mIntentMap.end()) { - auto subscriberMap = subscriberMapIt->second; - auto pirIt = subscriberMap.find(subscriberId); - if (pirIt != subscriberMap.end() && pirIt->second == pir) { - subscriberMap.erase(subscriberId); - if (subscriberMap.empty()) { - thiz.mIntentMap.erase(configKey); - } - } - } - - // The death recipient corresponding to this specific pir can never be - // triggered again, so free up resources. - delete cookie_; -} - -SubscriberReporter::SubscriberReporter() : - mBroadcastSubscriberDeathRecipient(AIBinder_DeathRecipient_new(broadcastSubscriberDied)) { -} - -void SubscriberReporter::setBroadcastSubscriber(const ConfigKey& configKey, - int64_t subscriberId, - const shared_ptr<IPendingIntentRef>& pir) { - VLOG("SubscriberReporter::setBroadcastSubscriber called."); - { - lock_guard<mutex> lock(mLock); - mIntentMap[configKey][subscriberId] = pir; - } - AIBinder_linkToDeath(pir->asBinder().get(), mBroadcastSubscriberDeathRecipient.get(), - new BroadcastSubscriberDeathCookie(configKey, subscriberId, pir)); -} - -void SubscriberReporter::unsetBroadcastSubscriber(const ConfigKey& configKey, - int64_t subscriberId) { - VLOG("SubscriberReporter::unsetBroadcastSubscriber called."); - lock_guard<mutex> lock(mLock); - auto subscriberMapIt = mIntentMap.find(configKey); - if (subscriberMapIt != mIntentMap.end()) { - subscriberMapIt->second.erase(subscriberId); - if (subscriberMapIt->second.empty()) { - mIntentMap.erase(configKey); - } - } -} - -void SubscriberReporter::alertBroadcastSubscriber(const ConfigKey& configKey, - const Subscription& subscription, - const MetricDimensionKey& dimKey) const { - // Reminder about ids: - // subscription id - name of the Subscription (that ties the Alert to the broadcast) - // subscription rule_id - the name of the Alert (that triggers the broadcast) - // subscriber_id - name of the PendingIntent to use to send the broadcast - // config uid - the uid that uploaded the config (and therefore gave the PendingIntent, - // although the intent may be to broadcast to a different uid) - // config id - the name of this config (for this particular uid) - - VLOG("SubscriberReporter::alertBroadcastSubscriber called."); - lock_guard<mutex> lock(mLock); - - if (!subscription.has_broadcast_subscriber_details() - || !subscription.broadcast_subscriber_details().has_subscriber_id()) { - ALOGE("Broadcast subscriber does not have an id."); - return; - } - int64_t subscriberId = subscription.broadcast_subscriber_details().subscriber_id(); - - vector<string> cookies; - cookies.reserve(subscription.broadcast_subscriber_details().cookie_size()); - for (auto& cookie : subscription.broadcast_subscriber_details().cookie()) { - cookies.push_back(cookie); - } - - auto it1 = mIntentMap.find(configKey); - if (it1 == mIntentMap.end()) { - ALOGW("Cannot inform subscriber for missing config key %s ", configKey.ToString().c_str()); - return; - } - auto it2 = it1->second.find(subscriberId); - if (it2 == it1->second.end()) { - ALOGW("Cannot inform subscriber of config %s for missing subscriberId %lld ", - configKey.ToString().c_str(), (long long)subscriberId); - return; - } - sendBroadcastLocked(it2->second, configKey, subscription, cookies, dimKey); -} - -void SubscriberReporter::sendBroadcastLocked(const shared_ptr<IPendingIntentRef>& pir, - const ConfigKey& configKey, - const Subscription& subscription, - const vector<string>& cookies, - const MetricDimensionKey& dimKey) const { - VLOG("SubscriberReporter::sendBroadcastLocked called."); - pir->sendSubscriberBroadcast( - configKey.GetUid(), - configKey.GetId(), - subscription.id(), - subscription.rule_id(), - cookies, - dimKey.getDimensionKeyInWhat().toStatsDimensionsValueParcel()); -} - -shared_ptr<IPendingIntentRef> SubscriberReporter::getBroadcastSubscriber(const ConfigKey& configKey, - int64_t subscriberId) { - lock_guard<mutex> lock(mLock); - auto subscriberMapIt = mIntentMap.find(configKey); - if (subscriberMapIt == mIntentMap.end()) { - return nullptr; - } - auto pirMapIt = subscriberMapIt->second.find(subscriberId); - if (pirMapIt == subscriberMapIt->second.end()) { - return nullptr; - } - return pirMapIt->second; -} - -} // namespace statsd -} // namespace os -} // namespace android |