diff options
-rw-r--r-- | services/gpuservice/gpustats/GpuStats.cpp | 25 | ||||
-rw-r--r-- | services/gpuservice/gpustats/include/gpustats/GpuStats.h | 5 |
2 files changed, 20 insertions, 10 deletions
diff --git a/services/gpuservice/gpustats/GpuStats.cpp b/services/gpuservice/gpustats/GpuStats.cpp index d0945326b3..263bf61c12 100644 --- a/services/gpuservice/gpustats/GpuStats.cpp +++ b/services/gpuservice/gpustats/GpuStats.cpp @@ -30,16 +30,11 @@ namespace android { -GpuStats::GpuStats() { - AStatsManager_registerPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO, - GpuStats::pullAtomCallback, nullptr, this); - AStatsManager_registerPullAtomCallback(android::util::GPU_STATS_APP_INFO, - GpuStats::pullAtomCallback, nullptr, this); -} - GpuStats::~GpuStats() { - AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO); - AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_APP_INFO); + if (mStatsdRegistered) { + AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO); + AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_APP_INFO); + } } static void addLoadingCount(GpuStatsInfo::Driver driver, bool isDriverLoaded, @@ -97,6 +92,7 @@ void GpuStats::insertDriverStats(const std::string& driverPackageName, ATRACE_CALL(); std::lock_guard<std::mutex> lock(mLock); + registerStatsdCallbacksIfNeeded(); ALOGV("Received:\n" "\tdriverPackageName[%s]\n" "\tdriverVersionName[%s]\n" @@ -150,6 +146,7 @@ void GpuStats::insertTargetStats(const std::string& appPackageName, const std::string appStatsKey = appPackageName + std::to_string(driverVersionCode); std::lock_guard<std::mutex> lock(mLock); + registerStatsdCallbacksIfNeeded(); if (!mAppStats.count(appStatsKey)) { return; } @@ -179,6 +176,16 @@ void GpuStats::interceptSystemDriverStatsLocked() { mGlobalStats[0].glesVersion = property_get_int32("ro.opengles.version", 0); } +void GpuStats::registerStatsdCallbacksIfNeeded() { + if (!mStatsdRegistered) { + AStatsManager_registerPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO, + GpuStats::pullAtomCallback, nullptr, this); + AStatsManager_registerPullAtomCallback(android::util::GPU_STATS_APP_INFO, + GpuStats::pullAtomCallback, nullptr, this); + mStatsdRegistered = true; + } +} + void GpuStats::dump(const Vector<String16>& args, std::string* result) { ATRACE_CALL(); diff --git a/services/gpuservice/gpustats/include/gpustats/GpuStats.h b/services/gpuservice/gpustats/include/gpustats/GpuStats.h index 8ca4e4ed71..55f0da1bc5 100644 --- a/services/gpuservice/gpustats/include/gpustats/GpuStats.h +++ b/services/gpuservice/gpustats/include/gpustats/GpuStats.h @@ -30,7 +30,6 @@ namespace android { class GpuStats { public: - GpuStats(); ~GpuStats(); // Insert new gpu driver stats into global stats and app stats. @@ -66,12 +65,16 @@ private: void dumpAppLocked(std::string* result); // Append cpuVulkanVersion and glesVersion to system driver stats void interceptSystemDriverStatsLocked(); + // Registers statsd callbacks if they have not already been registered + void registerStatsdCallbacksIfNeeded(); // Below limits the memory usage of GpuStats to be less than 10KB. This is // the preferred number for statsd while maintaining nice data quality. static const size_t MAX_NUM_APP_RECORDS = 100; // GpuStats access should be guarded by mLock. std::mutex mLock; + // True if statsd callbacks have been registered. + bool mStatsdRegistered = false; // Key is driver version code. std::unordered_map<uint64_t, GpuStatsGlobalInfo> mGlobalStats; // Key is <app package name>+<driver version code>. |