Loading cmds/statsd/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ cc_defaults { "src/config/ConfigKey.cpp", "src/config/ConfigListener.cpp", "src/config/ConfigManager.cpp", "src/external/GpuStatsPuller.cpp", "src/external/Perfetto.cpp", "src/external/Perfprofd.cpp", "src/external/StatsPuller.cpp", Loading Loading @@ -122,6 +123,7 @@ cc_defaults { shared_libs: [ "libbase", "libbinder", "libgraphicsenv", "libincident", "liblog", "libutils", Loading cmds/statsd/src/external/GpuStatsPuller.cpp 0 → 100644 +91 −0 Original line number Diff line number Diff line /* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "GpuStatsPuller.h" #include <binder/IServiceManager.h> #include <graphicsenv/GpuStatsInfo.h> #include <graphicsenv/IGpuService.h> #include "logd/LogEvent.h" #include "stats_log_util.h" #include "statslog.h" namespace android { namespace os { namespace statsd { GpuStatsPuller::GpuStatsPuller(const int tagId) : StatsPuller(tagId) { } static sp<IGpuService> getGpuService() { const sp<IBinder> binder = defaultServiceManager()->checkService(String16("gpu")); if (!binder) { ALOGE("Failed to get gpu service"); return nullptr; } return interface_cast<IGpuService>(binder); } static bool pullGpuStatsGlobalInfo(const sp<IGpuService>& gpuService, std::vector<std::shared_ptr<LogEvent>>* data) { std::vector<GpuStatsGlobalInfo> stats; status_t status = gpuService->getGpuStatsGlobalInfo(&stats); if (status != OK) { return false; } data->clear(); data->reserve(stats.size()); for (const auto& info : stats) { std::shared_ptr<LogEvent> event = make_shared<LogEvent>( android::util::GPU_STATS_GLOBAL_INFO, getWallClockNs(), getElapsedRealtimeNs()); if (!event->write(info.driverPackageName)) return false; if (!event->write(info.driverVersionName)) return false; if (!event->write((int64_t)info.driverVersionCode)) return false; if (!event->write(info.driverBuildTime)) return false; if (!event->write((int64_t)info.glLoadingCount)) return false; if (!event->write((int64_t)info.glLoadingFailureCount)) return false; if (!event->write((int64_t)info.vkLoadingCount)) return false; if (!event->write((int64_t)info.vkLoadingFailureCount)) return false; event->init(); data->emplace_back(event); } return true; } bool GpuStatsPuller::PullInternal(std::vector<std::shared_ptr<LogEvent>>* data) { const sp<IGpuService> gpuService = getGpuService(); if (!gpuService) { return false; } switch (mTagId) { case android::util::GPU_STATS_GLOBAL_INFO: return pullGpuStatsGlobalInfo(gpuService, data); default: break; } return false; } } // namespace statsd } // namespace os } // namespace android cmds/statsd/src/external/GpuStatsPuller.h 0 → 100644 +36 −0 Original line number Diff line number Diff line /* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "StatsPuller.h" namespace android { namespace os { namespace statsd { /** * Pull GpuStats from GpuService. */ class GpuStatsPuller : public StatsPuller { public: explicit GpuStatsPuller(const int tagId); bool PullInternal(std::vector<std::shared_ptr<LogEvent>>* data) override; }; } // namespace statsd } // namespace os } // namespace android cmds/statsd/src/external/StatsPullerManager.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "../logd/LogEvent.h" #include "../stats_log_util.h" #include "../statscompanion_util.h" #include "GpuStatsPuller.h" #include "PowerStatsPuller.h" #include "ResourceHealthManagerPuller.h" #include "StatsCallbackPuller.h" Loading Loading @@ -240,6 +241,9 @@ std::map<int, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = { // SDCardInfo {android::util::SDCARD_INFO, {.puller = new StatsCompanionServicePuller(android::util::SDCARD_INFO)}}, // GpuStatsGlobalInfo {android::util::GPU_STATS_GLOBAL_INFO, {.puller = new GpuStatsPuller(android::util::GPU_STATS_GLOBAL_INFO)}}, }; StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) { Loading Loading
cmds/statsd/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ cc_defaults { "src/config/ConfigKey.cpp", "src/config/ConfigListener.cpp", "src/config/ConfigManager.cpp", "src/external/GpuStatsPuller.cpp", "src/external/Perfetto.cpp", "src/external/Perfprofd.cpp", "src/external/StatsPuller.cpp", Loading Loading @@ -122,6 +123,7 @@ cc_defaults { shared_libs: [ "libbase", "libbinder", "libgraphicsenv", "libincident", "liblog", "libutils", Loading
cmds/statsd/src/external/GpuStatsPuller.cpp 0 → 100644 +91 −0 Original line number Diff line number Diff line /* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "GpuStatsPuller.h" #include <binder/IServiceManager.h> #include <graphicsenv/GpuStatsInfo.h> #include <graphicsenv/IGpuService.h> #include "logd/LogEvent.h" #include "stats_log_util.h" #include "statslog.h" namespace android { namespace os { namespace statsd { GpuStatsPuller::GpuStatsPuller(const int tagId) : StatsPuller(tagId) { } static sp<IGpuService> getGpuService() { const sp<IBinder> binder = defaultServiceManager()->checkService(String16("gpu")); if (!binder) { ALOGE("Failed to get gpu service"); return nullptr; } return interface_cast<IGpuService>(binder); } static bool pullGpuStatsGlobalInfo(const sp<IGpuService>& gpuService, std::vector<std::shared_ptr<LogEvent>>* data) { std::vector<GpuStatsGlobalInfo> stats; status_t status = gpuService->getGpuStatsGlobalInfo(&stats); if (status != OK) { return false; } data->clear(); data->reserve(stats.size()); for (const auto& info : stats) { std::shared_ptr<LogEvent> event = make_shared<LogEvent>( android::util::GPU_STATS_GLOBAL_INFO, getWallClockNs(), getElapsedRealtimeNs()); if (!event->write(info.driverPackageName)) return false; if (!event->write(info.driverVersionName)) return false; if (!event->write((int64_t)info.driverVersionCode)) return false; if (!event->write(info.driverBuildTime)) return false; if (!event->write((int64_t)info.glLoadingCount)) return false; if (!event->write((int64_t)info.glLoadingFailureCount)) return false; if (!event->write((int64_t)info.vkLoadingCount)) return false; if (!event->write((int64_t)info.vkLoadingFailureCount)) return false; event->init(); data->emplace_back(event); } return true; } bool GpuStatsPuller::PullInternal(std::vector<std::shared_ptr<LogEvent>>* data) { const sp<IGpuService> gpuService = getGpuService(); if (!gpuService) { return false; } switch (mTagId) { case android::util::GPU_STATS_GLOBAL_INFO: return pullGpuStatsGlobalInfo(gpuService, data); default: break; } return false; } } // namespace statsd } // namespace os } // namespace android
cmds/statsd/src/external/GpuStatsPuller.h 0 → 100644 +36 −0 Original line number Diff line number Diff line /* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "StatsPuller.h" namespace android { namespace os { namespace statsd { /** * Pull GpuStats from GpuService. */ class GpuStatsPuller : public StatsPuller { public: explicit GpuStatsPuller(const int tagId); bool PullInternal(std::vector<std::shared_ptr<LogEvent>>* data) override; }; } // namespace statsd } // namespace os } // namespace android
cmds/statsd/src/external/StatsPullerManager.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "../logd/LogEvent.h" #include "../stats_log_util.h" #include "../statscompanion_util.h" #include "GpuStatsPuller.h" #include "PowerStatsPuller.h" #include "ResourceHealthManagerPuller.h" #include "StatsCallbackPuller.h" Loading Loading @@ -240,6 +241,9 @@ std::map<int, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = { // SDCardInfo {android::util::SDCARD_INFO, {.puller = new StatsCompanionServicePuller(android::util::SDCARD_INFO)}}, // GpuStatsGlobalInfo {android::util::GPU_STATS_GLOBAL_INFO, {.puller = new GpuStatsPuller(android::util::GPU_STATS_GLOBAL_INFO)}}, }; StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) { Loading