From 8f3586051bba06408d118aae344f3f87007a7141 Mon Sep 17 00:00:00 2001 From: Tej Singh Date: Wed, 15 Jan 2020 16:05:39 -0800 Subject: [PATCH] Unregister native pull atom callback Statsd changes to unregister a native puller. Bug:14437325 Test: builds, boots Change-Id: I1a1841de6e913f681c51919fcb9b18e30eb37801 --- apex/statsd/aidl/android/os/IStatsd.aidl | 15 ++++++++++----- cmds/statsd/src/StatsService.cpp | 7 +++++++ cmds/statsd/src/StatsService.h | 5 +++++ cmds/statsd/src/external/StatsCallbackPuller.cpp | 2 +- .../com_android_server_GraphicsStatsService.cpp | 13 +++++++------ 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/apex/statsd/aidl/android/os/IStatsd.aidl b/apex/statsd/aidl/android/os/IStatsd.aidl index c409f516de1ba..0ecf2f0b48517 100644 --- a/apex/statsd/aidl/android/os/IStatsd.aidl +++ b/apex/statsd/aidl/android/os/IStatsd.aidl @@ -212,12 +212,17 @@ interface IStatsd { * * Requires Manifest.permission.DUMP and Manifest.permission.PACKAGE_USAGE_STATS */ - oneway void unregisterPullerCallback(int atomTag, String packageName); + oneway void unregisterPullerCallback(int atomTag, String packageName); - /** - * Unregisters any pullAtomCallback for the given uid/atom. - */ - oneway void unregisterPullAtomCallback(int uid, int atomTag); + /** + * Unregisters any pullAtomCallback for the given uid/atom. + */ + oneway void unregisterPullAtomCallback(int uid, int atomTag); + + /** + * Unregisters any pullAtomCallback for the given atom. + */ + oneway void unregisterNativePullAtomCallback(int atomTag); /** * The install requires staging. diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 1ca19c3417c2a..ada2f2de28f42 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -1312,6 +1312,13 @@ Status StatsService::unregisterPullAtomCallback(int32_t uid, int32_t atomTag) { return Status::ok(); } +Status StatsService::unregisterNativePullAtomCallback(int32_t atomTag) { + VLOG("StatsService::unregisterNativePullAtomCallback called."); + int32_t uid = IPCThreadState::self()->getCallingUid(); + mPullerManager->UnregisterPullAtomCallback(uid, atomTag); + return Status::ok(); +} + Status StatsService::sendBinaryPushStateChangedAtom(const android::String16& trainNameIn, const int64_t trainVersionCodeIn, const int options, diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index c9a9072ecb923..7990e5e7d018a 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -202,6 +202,11 @@ public: */ virtual Status unregisterPullAtomCallback(int32_t uid, int32_t atomTag) override; + /** + * Binder call to unregister any existing callback for the given atom and calling uid. + */ + virtual Status unregisterNativePullAtomCallback(int32_t atomTag) override; + /** * Binder call to log BinaryPushStateChanged atom. */ diff --git a/cmds/statsd/src/external/StatsCallbackPuller.cpp b/cmds/statsd/src/external/StatsCallbackPuller.cpp index 0e6b677abb46c..e5a83a27bfcf6 100644 --- a/cmds/statsd/src/external/StatsCallbackPuller.cpp +++ b/cmds/statsd/src/external/StatsCallbackPuller.cpp @@ -42,7 +42,7 @@ StatsCallbackPuller::StatsCallbackPuller(int tagId, const sp& } bool StatsCallbackPuller::PullInternal(vector>* data) { - VLOG("StatsCallbackPuller called for tag %d", mTagId) + VLOG("StatsCallbackPuller called for tag %d", mTagId); if(mCallback == nullptr) { ALOGW("No callback registered"); return false; diff --git a/services/core/jni/com_android_server_GraphicsStatsService.cpp b/services/core/jni/com_android_server_GraphicsStatsService.cpp index 9353fbd712141..7644adebb10a7 100644 --- a/services/core/jni/com_android_server_GraphicsStatsService.cpp +++ b/services/core/jni/com_android_server_GraphicsStatsService.cpp @@ -178,15 +178,16 @@ static void writeGpuHistogram(stats_event* event, } // graphicsStatsPullCallback is invoked by statsd service to pull GRAPHICS_STATS atom. -static bool graphicsStatsPullCallback(int32_t atom_tag, pulled_stats_event_list* data, - const void* cookie) { +static status_pull_atom_return_t graphicsStatsPullCallback(int32_t atom_tag, + pulled_stats_event_list* data, + void* cookie) { JNIEnv* env = getJNIEnv(); if (!env) { return false; } if (gGraphicsStatsServiceObject == nullptr) { ALOGE("Failed to get graphicsstats service"); - return false; + return STATS_PULL_SKIP; } for (bool lastFullDay : {true, false}) { @@ -198,7 +199,7 @@ static bool graphicsStatsPullCallback(int32_t atom_tag, pulled_stats_event_list* env->ExceptionDescribe(); env->ExceptionClear(); ALOGE("Failed to invoke graphicsstats service"); - return false; + return STATS_PULL_SKIP; } if (!jdata) { // null means data is not available for that day. @@ -217,7 +218,7 @@ static bool graphicsStatsPullCallback(int32_t atom_tag, pulled_stats_event_list* if (!success) { ALOGW("Parse failed on GraphicsStatsPuller error='%s' dataSize='%d'", serviceDump.InitializationErrorString().c_str(), dataSize); - return false; + return STATS_PULL_SKIP; } for (int stat_index = 0; stat_index < serviceDump.stats_size(); stat_index++) { @@ -244,7 +245,7 @@ static bool graphicsStatsPullCallback(int32_t atom_tag, pulled_stats_event_list* stats_event_build(event); } } - return true; + return STATS_PULL_SUCCESS; } // Register a puller for GRAPHICS_STATS atom with the statsd service.