diff options
Diffstat (limited to 'cmds/statsd/src/StatsService.h')
-rw-r--r-- | cmds/statsd/src/StatsService.h | 145 |
1 files changed, 77 insertions, 68 deletions
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index 991a205e111d..324ffbd65e51 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -17,7 +17,14 @@ #ifndef STATS_SERVICE_H #define STATS_SERVICE_H +#include <aidl/android/os/BnStatsd.h> +#include <aidl/android/os/IPendingIntentRef.h> +#include <aidl/android/os/IPullAtomCallback.h> #include <gtest/gtest_prod.h> +#include <utils/Looper.h> + +#include <mutex> + #include "StatsLogProcessor.h" #include "anomaly/AlarmMonitor.h" #include "config/ConfigManager.h" @@ -26,32 +33,25 @@ #include "packages/UidMap.h" #include "shell/ShellSubscriber.h" #include "statscompanion_util.h" - -#include <android/frameworks/stats/1.0/IStats.h> -#include <android/frameworks/stats/1.0/types.h> -#include <android/os/BnStatsManager.h> -#include <android/os/IStatsCompanionService.h> -#include <android/os/IStatsManager.h> -#include <binder/IResultReceiver.h> -#include <binder/ParcelFileDescriptor.h> -#include <utils/Looper.h> - -#include <mutex> +#include "utils/MultiConditionTrigger.h" using namespace android; -using namespace android::binder; -using namespace android::frameworks::stats::V1_0; using namespace android::os; using namespace std; +using Status = ::ndk::ScopedAStatus; +using aidl::android::os::BnStatsd; +using aidl::android::os::IPendingIntentRef; +using aidl::android::os::IPullAtomCallback; +using ::ndk::ScopedAIBinder_DeathRecipient; +using ::ndk::ScopedFileDescriptor; +using std::shared_ptr; + namespace android { namespace os { namespace statsd { -using android::hardware::Return; - -class StatsService : public BnStatsManager, - public IBinder::DeathRecipient { +class StatsService : public BnStatsd { public: StatsService(const sp<Looper>& handlerLooper, std::shared_ptr<LogEventQueue> queue); virtual ~StatsService(); @@ -59,21 +59,21 @@ public: /** The anomaly alarm registered with AlarmManager won't be updated by less than this. */ const uint32_t MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS = 5; - virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); - virtual status_t dump(int fd, const Vector<String16>& args); - virtual status_t command(int inFd, int outFd, int err, Vector<String8>& args, - sp<IResultReceiver> resultReceiver); + virtual status_t dump(int fd, const char** args, uint32_t numArgs) override; + virtual status_t handleShellCommand(int in, int out, int err, const char** argv, + uint32_t argc) override; virtual Status systemRunning(); virtual Status statsCompanionReady(); + virtual Status bootCompleted(); virtual Status informAnomalyAlarmFired(); virtual Status informPollAlarmFired(); virtual Status informAlarmForSubscriberTriggeringFired(); - virtual Status informAllUidData(const ParcelFileDescriptor& fd); - virtual Status informOnePackage(const String16& app, int32_t uid, int64_t version, - const String16& version_string, const String16& installer); - virtual Status informOnePackageRemoved(const String16& app, int32_t uid); + virtual Status informAllUidData(const ScopedFileDescriptor& fd); + virtual Status informOnePackage(const string& app, int32_t uid, int64_t version, + const string& versionString, const string& installer); + virtual Status informOnePackageRemoved(const string& app, int32_t uid); virtual Status informDeviceShutdown(); /** @@ -95,15 +95,14 @@ public: * Binder call for clients to request data for this configuration key. */ virtual Status getData(int64_t key, - const String16& packageName, + const int32_t callingUid, vector<uint8_t>* output) override; /** * Binder call for clients to get metadata across all configs in statsd. */ - virtual Status getMetadata(const String16& packageName, - vector<uint8_t>* output) override; + virtual Status getMetadata(vector<uint8_t>* output) override; /** @@ -112,103 +111,92 @@ public: */ virtual Status addConfiguration(int64_t key, const vector<uint8_t>& config, - const String16& packageName) override; + const int32_t callingUid) override; /** * Binder call to let clients register the data fetch operation for a configuration. */ virtual Status setDataFetchOperation(int64_t key, - const sp<android::IBinder>& intentSender, - const String16& packageName) override; + const shared_ptr<IPendingIntentRef>& pir, + const int32_t callingUid) override; /** * Binder call to remove the data fetch operation for the specified config key. */ virtual Status removeDataFetchOperation(int64_t key, - const String16& packageName) override; + const int32_t callingUid) override; /** * Binder call to let clients register the active configs changed operation. */ - virtual Status setActiveConfigsChangedOperation(const sp<android::IBinder>& intentSender, - const String16& packageName, + virtual Status setActiveConfigsChangedOperation(const shared_ptr<IPendingIntentRef>& pir, + const int32_t callingUid, vector<int64_t>* output) override; /** * Binder call to remove the active configs changed operation for the specified package.. */ - virtual Status removeActiveConfigsChangedOperation(const String16& packageName) override; + virtual Status removeActiveConfigsChangedOperation(const int32_t callingUid) override; /** * Binder call to allow clients to remove the specified configuration. */ virtual Status removeConfiguration(int64_t key, - const String16& packageName) override; + const int32_t callingUid) override; /** - * Binder call to associate the given config's subscriberId with the given intentSender. - * intentSender must be convertible into an IntentSender (in Java) using IntentSender(IBinder). + * Binder call to associate the given config's subscriberId with the given pendingIntentRef. */ virtual Status setBroadcastSubscriber(int64_t configId, int64_t subscriberId, - const sp<android::IBinder>& intentSender, - const String16& packageName) override; + const shared_ptr<IPendingIntentRef>& pir, + const int32_t callingUid) override; /** - * Binder call to unassociate the given config's subscriberId with any intentSender. + * Binder call to unassociate the given config's subscriberId with any pendingIntentRef. */ virtual Status unsetBroadcastSubscriber(int64_t configId, int64_t subscriberId, - const String16& packageName) override; + const int32_t callingUid) override; /** Inform statsCompanion that statsd is ready. */ virtual void sayHiToStatsCompanion(); /** - * Binder call to get AppBreadcrumbReported atom. + * Binder call to notify statsd that all pullers from boot have been registered. */ - virtual Status sendAppBreadcrumbAtom(int32_t label, int32_t state) override; + virtual Status allPullersFromBootRegistered(); /** - * Binder call to register a callback function for a vendor pulled atom. - * Note: this atom must NOT have uid as a field. + * Binder call to register a callback function for a pulled atom. */ - virtual Status registerPullerCallback(int32_t atomTag, - const sp<android::os::IStatsPullerCallback>& pullerCallback, - const String16& packageName) override; + virtual Status registerPullAtomCallback( + int32_t uid, int32_t atomTag, int64_t coolDownMillis, int64_t timeoutMillis, + const std::vector<int32_t>& additiveFields, + const shared_ptr<IPullAtomCallback>& pullerCallback) override; /** - * Binder call to unregister any existing callback function for a vendor pulled atom. + * Binder call to register a callback function for a pulled atom. */ - virtual Status unregisterPullerCallback(int32_t atomTag, const String16& packageName) override; + virtual Status registerNativePullAtomCallback( + int32_t atomTag, int64_t coolDownMillis, int64_t timeoutMillis, + const std::vector<int32_t>& additiveFields, + const shared_ptr<IPullAtomCallback>& pullerCallback) override; /** - * Binder call to log BinaryPushStateChanged atom. + * Binder call to unregister any existing callback for the given uid and atom. */ - virtual Status sendBinaryPushStateChangedAtom( - const android::String16& trainNameIn, - const int64_t trainVersionCodeIn, - const int options, - const int32_t state, - const std::vector<int64_t>& experimentIdsIn) override; + virtual Status unregisterPullAtomCallback(int32_t uid, int32_t atomTag) override; /** - * Binder call to log WatchdogRollbackOccurred atom. + * Binder call to unregister any existing callback for the given atom and calling uid. */ - virtual Status sendWatchdogRollbackOccurredAtom( - const int32_t rollbackTypeIn, - const android::String16& packageNameIn, - const int64_t packageVersionCodeIn, - const int32_t rollbackReasonIn, - const android::String16& failingPackageNameIn) override; + virtual Status unregisterNativePullAtomCallback(int32_t atomTag) override; /** * Binder call to get registered experiment IDs. */ virtual Status getRegisteredExperimentIds(std::vector<int64_t>* expIdsOut); - /** IBinder::DeathRecipient */ - virtual void binderDied(const wp<IBinder>& who) override; - private: /** * Load system properties at init. @@ -340,6 +328,17 @@ private: void set_config(int uid, const string& name, const StatsdConfig& config); /** + * Death recipient callback that is called when StatsCompanionService dies. + * The cookie is a pointer to a StatsService object. + */ + static void statsCompanionServiceDied(void* cookie); + + /** + * Implementation of statsCompanionServiceDied. + */ + void statsCompanionServiceDiedImpl(); + + /** * Tracks the uid <--> package name mapping. */ sp<UidMap> mUidMap; @@ -382,17 +381,27 @@ private: mutable mutex mShellSubscriberMutex; std::shared_ptr<LogEventQueue> mEventQueue; + MultiConditionTrigger mBootCompleteTrigger; + static const inline string kBootCompleteTag = "BOOT_COMPLETE"; + static const inline string kUidMapReceivedTag = "UID_MAP"; + static const inline string kAllPullersRegisteredTag = "PULLERS_REGISTERED"; + + ScopedAIBinder_DeathRecipient mStatsCompanionServiceDeathRecipient; + FRIEND_TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart); FRIEND_TEST(StatsServiceTest, TestAddConfig_simple); FRIEND_TEST(StatsServiceTest, TestAddConfig_empty); FRIEND_TEST(StatsServiceTest, TestAddConfig_invalid); FRIEND_TEST(StatsServiceTest, TestGetUidFromArgs); FRIEND_TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp); + FRIEND_TEST(PartialBucketE2eTest, TestCountMetricSplitOnBoot); FRIEND_TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade); FRIEND_TEST(PartialBucketE2eTest, TestCountMetricSplitOnRemoval); FRIEND_TEST(PartialBucketE2eTest, TestCountMetricWithoutSplit); + FRIEND_TEST(PartialBucketE2eTest, TestValueMetricOnBootWithoutMinPartialBucket); FRIEND_TEST(PartialBucketE2eTest, TestValueMetricWithoutMinPartialBucket); FRIEND_TEST(PartialBucketE2eTest, TestValueMetricWithMinPartialBucket); + FRIEND_TEST(PartialBucketE2eTest, TestGaugeMetricOnBootWithoutMinPartialBucket); FRIEND_TEST(PartialBucketE2eTest, TestGaugeMetricWithoutMinPartialBucket); FRIEND_TEST(PartialBucketE2eTest, TestGaugeMetricWithMinPartialBucket); }; |