Loading services/gpuservice/gpustats/GpuStats.cpp +16 −9 Original line number Original line Diff line number Diff line Loading @@ -30,17 +30,12 @@ namespace android { 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() { GpuStats::~GpuStats() { if (mStatsdRegistered) { AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO); AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO); AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_APP_INFO); AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_APP_INFO); } } } static void addLoadingCount(GpuStatsInfo::Driver driver, bool isDriverLoaded, static void addLoadingCount(GpuStatsInfo::Driver driver, bool isDriverLoaded, GpuStatsGlobalInfo* const outGlobalInfo) { GpuStatsGlobalInfo* const outGlobalInfo) { Loading Loading @@ -97,6 +92,7 @@ void GpuStats::insertDriverStats(const std::string& driverPackageName, ATRACE_CALL(); ATRACE_CALL(); std::lock_guard<std::mutex> lock(mLock); std::lock_guard<std::mutex> lock(mLock); registerStatsdCallbacksIfNeeded(); ALOGV("Received:\n" ALOGV("Received:\n" "\tdriverPackageName[%s]\n" "\tdriverPackageName[%s]\n" "\tdriverVersionName[%s]\n" "\tdriverVersionName[%s]\n" Loading Loading @@ -150,6 +146,7 @@ void GpuStats::insertTargetStats(const std::string& appPackageName, const std::string appStatsKey = appPackageName + std::to_string(driverVersionCode); const std::string appStatsKey = appPackageName + std::to_string(driverVersionCode); std::lock_guard<std::mutex> lock(mLock); std::lock_guard<std::mutex> lock(mLock); registerStatsdCallbacksIfNeeded(); if (!mAppStats.count(appStatsKey)) { if (!mAppStats.count(appStatsKey)) { return; return; } } Loading Loading @@ -179,6 +176,16 @@ void GpuStats::interceptSystemDriverStatsLocked() { mGlobalStats[0].glesVersion = property_get_int32("ro.opengles.version", 0); 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) { void GpuStats::dump(const Vector<String16>& args, std::string* result) { ATRACE_CALL(); ATRACE_CALL(); Loading services/gpuservice/gpustats/include/gpustats/GpuStats.h +4 −1 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ namespace android { class GpuStats { class GpuStats { public: public: GpuStats(); ~GpuStats(); ~GpuStats(); // Insert new gpu driver stats into global stats and app stats. // Insert new gpu driver stats into global stats and app stats. Loading Loading @@ -66,12 +65,16 @@ private: void dumpAppLocked(std::string* result); void dumpAppLocked(std::string* result); // Append cpuVulkanVersion and glesVersion to system driver stats // Append cpuVulkanVersion and glesVersion to system driver stats void interceptSystemDriverStatsLocked(); 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 // Below limits the memory usage of GpuStats to be less than 10KB. This is // the preferred number for statsd while maintaining nice data quality. // the preferred number for statsd while maintaining nice data quality. static const size_t MAX_NUM_APP_RECORDS = 100; static const size_t MAX_NUM_APP_RECORDS = 100; // GpuStats access should be guarded by mLock. // GpuStats access should be guarded by mLock. std::mutex mLock; std::mutex mLock; // True if statsd callbacks have been registered. bool mStatsdRegistered = false; // Key is driver version code. // Key is driver version code. std::unordered_map<uint64_t, GpuStatsGlobalInfo> mGlobalStats; std::unordered_map<uint64_t, GpuStatsGlobalInfo> mGlobalStats; // Key is <app package name>+<driver version code>. // Key is <app package name>+<driver version code>. Loading Loading
services/gpuservice/gpustats/GpuStats.cpp +16 −9 Original line number Original line Diff line number Diff line Loading @@ -30,17 +30,12 @@ namespace android { 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() { GpuStats::~GpuStats() { if (mStatsdRegistered) { AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO); AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_GLOBAL_INFO); AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_APP_INFO); AStatsManager_unregisterPullAtomCallback(android::util::GPU_STATS_APP_INFO); } } } static void addLoadingCount(GpuStatsInfo::Driver driver, bool isDriverLoaded, static void addLoadingCount(GpuStatsInfo::Driver driver, bool isDriverLoaded, GpuStatsGlobalInfo* const outGlobalInfo) { GpuStatsGlobalInfo* const outGlobalInfo) { Loading Loading @@ -97,6 +92,7 @@ void GpuStats::insertDriverStats(const std::string& driverPackageName, ATRACE_CALL(); ATRACE_CALL(); std::lock_guard<std::mutex> lock(mLock); std::lock_guard<std::mutex> lock(mLock); registerStatsdCallbacksIfNeeded(); ALOGV("Received:\n" ALOGV("Received:\n" "\tdriverPackageName[%s]\n" "\tdriverPackageName[%s]\n" "\tdriverVersionName[%s]\n" "\tdriverVersionName[%s]\n" Loading Loading @@ -150,6 +146,7 @@ void GpuStats::insertTargetStats(const std::string& appPackageName, const std::string appStatsKey = appPackageName + std::to_string(driverVersionCode); const std::string appStatsKey = appPackageName + std::to_string(driverVersionCode); std::lock_guard<std::mutex> lock(mLock); std::lock_guard<std::mutex> lock(mLock); registerStatsdCallbacksIfNeeded(); if (!mAppStats.count(appStatsKey)) { if (!mAppStats.count(appStatsKey)) { return; return; } } Loading Loading @@ -179,6 +176,16 @@ void GpuStats::interceptSystemDriverStatsLocked() { mGlobalStats[0].glesVersion = property_get_int32("ro.opengles.version", 0); 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) { void GpuStats::dump(const Vector<String16>& args, std::string* result) { ATRACE_CALL(); ATRACE_CALL(); Loading
services/gpuservice/gpustats/include/gpustats/GpuStats.h +4 −1 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ namespace android { class GpuStats { class GpuStats { public: public: GpuStats(); ~GpuStats(); ~GpuStats(); // Insert new gpu driver stats into global stats and app stats. // Insert new gpu driver stats into global stats and app stats. Loading Loading @@ -66,12 +65,16 @@ private: void dumpAppLocked(std::string* result); void dumpAppLocked(std::string* result); // Append cpuVulkanVersion and glesVersion to system driver stats // Append cpuVulkanVersion and glesVersion to system driver stats void interceptSystemDriverStatsLocked(); 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 // Below limits the memory usage of GpuStats to be less than 10KB. This is // the preferred number for statsd while maintaining nice data quality. // the preferred number for statsd while maintaining nice data quality. static const size_t MAX_NUM_APP_RECORDS = 100; static const size_t MAX_NUM_APP_RECORDS = 100; // GpuStats access should be guarded by mLock. // GpuStats access should be guarded by mLock. std::mutex mLock; std::mutex mLock; // True if statsd callbacks have been registered. bool mStatsdRegistered = false; // Key is driver version code. // Key is driver version code. std::unordered_map<uint64_t, GpuStatsGlobalInfo> mGlobalStats; std::unordered_map<uint64_t, GpuStatsGlobalInfo> mGlobalStats; // Key is <app package name>+<driver version code>. // Key is <app package name>+<driver version code>. Loading