Loading cmds/statsd/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ statsd_common_src := \ src/storage/StorageManager.cpp \ src/StatsLogProcessor.cpp \ src/StatsService.cpp \ src/statscompanion_util.cpp \ src/subscriber/IncidentdReporter.cpp \ src/subscriber/SubscriberReporter.cpp \ src/HashableDimensionKey.cpp \ Loading cmds/statsd/src/StatsService.cpp +8 −45 Original line number Diff line number Diff line Loading @@ -49,33 +49,6 @@ namespace statsd { constexpr const char* kPermissionDump = "android.permission.DUMP"; #define STATS_SERVICE_DIR "/data/misc/stats-service" /** * Watches for the death of the stats companion (system process). */ class CompanionDeathRecipient : public IBinder::DeathRecipient { public: CompanionDeathRecipient(const sp<AlarmMonitor>& anomalyAlarmMonitor, const sp<AlarmMonitor>& periodicAlarmMonitor, const sp<StatsLogProcessor>& processor) : mAnomalyAlarmMonitor(anomalyAlarmMonitor), mPeriodicAlarmMonitor(periodicAlarmMonitor), mProcessor(processor) {} virtual void binderDied(const wp<IBinder>& who); private: sp<AlarmMonitor> mAnomalyAlarmMonitor; sp<AlarmMonitor> mPeriodicAlarmMonitor; sp<StatsLogProcessor> mProcessor; }; void CompanionDeathRecipient::binderDied(const wp<IBinder>& who) { ALOGW("statscompanion service died"); mProcessor->WriteDataToDisk(); mAnomalyAlarmMonitor->setStatsCompanionService(nullptr); mPeriodicAlarmMonitor->setStatsCompanionService(nullptr); SubscriberReporter::getInstance().setStatsCompanionService(nullptr); } StatsService::StatsService(const sp<Looper>& handlerLooper) : mAnomalyAlarmMonitor(new AlarmMonitor(MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS, [](const sp<IStatsCompanionService>& sc, int64_t timeMillis) { Loading Loading @@ -791,21 +764,6 @@ void StatsService::sayHiToStatsCompanion() { } } sp<IStatsCompanionService> StatsService::getStatsCompanionService() { sp<IStatsCompanionService> statsCompanion = nullptr; // Get statscompanion service from service manager const sp<IServiceManager> sm(defaultServiceManager()); if (sm != nullptr) { const String16 name("statscompanion"); statsCompanion = interface_cast<IStatsCompanionService>(sm->checkService(name)); if (statsCompanion == nullptr) { ALOGW("statscompanion service unavailable!"); return nullptr; } } return statsCompanion; } Status StatsService::statsCompanionReady() { VLOG("StatsService::statsCompanionReady was called"); Loading @@ -821,9 +779,8 @@ Status StatsService::statsCompanionReady() { "statscompanion unavailable despite it contacting statsd!"); } VLOG("StatsService::statsCompanionReady linking to statsCompanion."); IInterface::asBinder(statsCompanion) ->linkToDeath(new CompanionDeathRecipient( mAnomalyAlarmMonitor, mPeriodicAlarmMonitor, mProcessor)); IInterface::asBinder(statsCompanion)->linkToDeath(this); mStatsPullerManager.SetStatsCompanionService(statsCompanion); mAnomalyAlarmMonitor->setStatsCompanionService(statsCompanion); mPeriodicAlarmMonitor->setStatsCompanionService(statsCompanion); SubscriberReporter::getInstance().setStatsCompanionService(statsCompanion); Loading Loading @@ -969,6 +926,12 @@ Status StatsService::unsetBroadcastSubscriber(int64_t configId, void StatsService::binderDied(const wp <IBinder>& who) { ALOGW("statscompanion service died"); mProcessor->WriteDataToDisk(); mAnomalyAlarmMonitor->setStatsCompanionService(nullptr); mPeriodicAlarmMonitor->setStatsCompanionService(nullptr); SubscriberReporter::getInstance().setStatsCompanionService(nullptr); mStatsPullerManager.SetStatsCompanionService(nullptr); } } // namespace statsd Loading cmds/statsd/src/StatsService.h +1 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include "config/ConfigManager.h" #include "external/StatsPullerManager.h" #include "packages/UidMap.h" #include "statscompanion_util.h" #include <android/os/BnStatsManager.h> #include <android/os/IStatsCompanionService.h> Loading Loading @@ -132,9 +133,6 @@ public: /** Inform statsCompanion that statsd is ready. */ virtual void sayHiToStatsCompanion(); /** Fetches and returns the StatsCompanionService. */ static sp<IStatsCompanionService> getStatsCompanionService(); /** IBinder::DeathRecipient */ virtual void binderDied(const wp<IBinder>& who) override; Loading cmds/statsd/src/external/StatsCompanionServicePuller.cpp +13 −7 Original line number Diff line number Diff line Loading @@ -20,10 +20,9 @@ #include <android/os/IStatsCompanionService.h> #include <binder/IPCThreadState.h> #include <private/android_filesystem_config.h> #include "../stats_log_util.h" #include "../statscompanion_util.h" #include "StatsCompanionServicePuller.h" #include "StatsService.h" #include "stats_log_util.h" #include "guardrail/StatsdStats.h" using namespace android; using namespace android::base; Loading @@ -44,11 +43,18 @@ const int kLogMsgHeaderSize = 28; StatsCompanionServicePuller::StatsCompanionServicePuller(int tagId) : StatsPuller(tagId) { } void StatsCompanionServicePuller::SetStatsCompanionService( sp<IStatsCompanionService> statsCompanionService) { AutoMutex _l(mStatsCompanionServiceLock); sp<IStatsCompanionService> tmpForLock = mStatsCompanionService; mStatsCompanionService = statsCompanionService; } bool StatsCompanionServicePuller::PullInternal(vector<shared_ptr<LogEvent> >* data) { sp<IStatsCompanionService> statsCompanion = StatsService::getStatsCompanionService(); sp<IStatsCompanionService> statsCompanionServiceCopy = mStatsCompanionService; if (statsCompanionServiceCopy != nullptr) { vector<StatsLogEventWrapper> returned_value; if (statsCompanion != NULL) { Status status = statsCompanion->pullData(mTagId, &returned_value); Status status = statsCompanionServiceCopy->pullData(mTagId, &returned_value); if (!status.isOk()) { ALOGW("error pulling for %d", mTagId); return false; Loading cmds/statsd/src/external/StatsCompanionServicePuller.h +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,12 @@ class StatsCompanionServicePuller : public StatsPuller { public: StatsCompanionServicePuller(int tagId); bool PullInternal(vector<std::shared_ptr<LogEvent> >* data) override; void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService) override; private: Mutex mStatsCompanionServiceLock; sp<IStatsCompanionService> mStatsCompanionService = nullptr; }; } // namespace statsd Loading Loading
cmds/statsd/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ statsd_common_src := \ src/storage/StorageManager.cpp \ src/StatsLogProcessor.cpp \ src/StatsService.cpp \ src/statscompanion_util.cpp \ src/subscriber/IncidentdReporter.cpp \ src/subscriber/SubscriberReporter.cpp \ src/HashableDimensionKey.cpp \ Loading
cmds/statsd/src/StatsService.cpp +8 −45 Original line number Diff line number Diff line Loading @@ -49,33 +49,6 @@ namespace statsd { constexpr const char* kPermissionDump = "android.permission.DUMP"; #define STATS_SERVICE_DIR "/data/misc/stats-service" /** * Watches for the death of the stats companion (system process). */ class CompanionDeathRecipient : public IBinder::DeathRecipient { public: CompanionDeathRecipient(const sp<AlarmMonitor>& anomalyAlarmMonitor, const sp<AlarmMonitor>& periodicAlarmMonitor, const sp<StatsLogProcessor>& processor) : mAnomalyAlarmMonitor(anomalyAlarmMonitor), mPeriodicAlarmMonitor(periodicAlarmMonitor), mProcessor(processor) {} virtual void binderDied(const wp<IBinder>& who); private: sp<AlarmMonitor> mAnomalyAlarmMonitor; sp<AlarmMonitor> mPeriodicAlarmMonitor; sp<StatsLogProcessor> mProcessor; }; void CompanionDeathRecipient::binderDied(const wp<IBinder>& who) { ALOGW("statscompanion service died"); mProcessor->WriteDataToDisk(); mAnomalyAlarmMonitor->setStatsCompanionService(nullptr); mPeriodicAlarmMonitor->setStatsCompanionService(nullptr); SubscriberReporter::getInstance().setStatsCompanionService(nullptr); } StatsService::StatsService(const sp<Looper>& handlerLooper) : mAnomalyAlarmMonitor(new AlarmMonitor(MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS, [](const sp<IStatsCompanionService>& sc, int64_t timeMillis) { Loading Loading @@ -791,21 +764,6 @@ void StatsService::sayHiToStatsCompanion() { } } sp<IStatsCompanionService> StatsService::getStatsCompanionService() { sp<IStatsCompanionService> statsCompanion = nullptr; // Get statscompanion service from service manager const sp<IServiceManager> sm(defaultServiceManager()); if (sm != nullptr) { const String16 name("statscompanion"); statsCompanion = interface_cast<IStatsCompanionService>(sm->checkService(name)); if (statsCompanion == nullptr) { ALOGW("statscompanion service unavailable!"); return nullptr; } } return statsCompanion; } Status StatsService::statsCompanionReady() { VLOG("StatsService::statsCompanionReady was called"); Loading @@ -821,9 +779,8 @@ Status StatsService::statsCompanionReady() { "statscompanion unavailable despite it contacting statsd!"); } VLOG("StatsService::statsCompanionReady linking to statsCompanion."); IInterface::asBinder(statsCompanion) ->linkToDeath(new CompanionDeathRecipient( mAnomalyAlarmMonitor, mPeriodicAlarmMonitor, mProcessor)); IInterface::asBinder(statsCompanion)->linkToDeath(this); mStatsPullerManager.SetStatsCompanionService(statsCompanion); mAnomalyAlarmMonitor->setStatsCompanionService(statsCompanion); mPeriodicAlarmMonitor->setStatsCompanionService(statsCompanion); SubscriberReporter::getInstance().setStatsCompanionService(statsCompanion); Loading Loading @@ -969,6 +926,12 @@ Status StatsService::unsetBroadcastSubscriber(int64_t configId, void StatsService::binderDied(const wp <IBinder>& who) { ALOGW("statscompanion service died"); mProcessor->WriteDataToDisk(); mAnomalyAlarmMonitor->setStatsCompanionService(nullptr); mPeriodicAlarmMonitor->setStatsCompanionService(nullptr); SubscriberReporter::getInstance().setStatsCompanionService(nullptr); mStatsPullerManager.SetStatsCompanionService(nullptr); } } // namespace statsd Loading
cmds/statsd/src/StatsService.h +1 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include "config/ConfigManager.h" #include "external/StatsPullerManager.h" #include "packages/UidMap.h" #include "statscompanion_util.h" #include <android/os/BnStatsManager.h> #include <android/os/IStatsCompanionService.h> Loading Loading @@ -132,9 +133,6 @@ public: /** Inform statsCompanion that statsd is ready. */ virtual void sayHiToStatsCompanion(); /** Fetches and returns the StatsCompanionService. */ static sp<IStatsCompanionService> getStatsCompanionService(); /** IBinder::DeathRecipient */ virtual void binderDied(const wp<IBinder>& who) override; Loading
cmds/statsd/src/external/StatsCompanionServicePuller.cpp +13 −7 Original line number Diff line number Diff line Loading @@ -20,10 +20,9 @@ #include <android/os/IStatsCompanionService.h> #include <binder/IPCThreadState.h> #include <private/android_filesystem_config.h> #include "../stats_log_util.h" #include "../statscompanion_util.h" #include "StatsCompanionServicePuller.h" #include "StatsService.h" #include "stats_log_util.h" #include "guardrail/StatsdStats.h" using namespace android; using namespace android::base; Loading @@ -44,11 +43,18 @@ const int kLogMsgHeaderSize = 28; StatsCompanionServicePuller::StatsCompanionServicePuller(int tagId) : StatsPuller(tagId) { } void StatsCompanionServicePuller::SetStatsCompanionService( sp<IStatsCompanionService> statsCompanionService) { AutoMutex _l(mStatsCompanionServiceLock); sp<IStatsCompanionService> tmpForLock = mStatsCompanionService; mStatsCompanionService = statsCompanionService; } bool StatsCompanionServicePuller::PullInternal(vector<shared_ptr<LogEvent> >* data) { sp<IStatsCompanionService> statsCompanion = StatsService::getStatsCompanionService(); sp<IStatsCompanionService> statsCompanionServiceCopy = mStatsCompanionService; if (statsCompanionServiceCopy != nullptr) { vector<StatsLogEventWrapper> returned_value; if (statsCompanion != NULL) { Status status = statsCompanion->pullData(mTagId, &returned_value); Status status = statsCompanionServiceCopy->pullData(mTagId, &returned_value); if (!status.isOk()) { ALOGW("error pulling for %d", mTagId); return false; Loading
cmds/statsd/src/external/StatsCompanionServicePuller.h +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,12 @@ class StatsCompanionServicePuller : public StatsPuller { public: StatsCompanionServicePuller(int tagId); bool PullInternal(vector<std::shared_ptr<LogEvent> >* data) override; void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService) override; private: Mutex mStatsCompanionServiceLock; sp<IStatsCompanionService> mStatsCompanionService = nullptr; }; } // namespace statsd Loading