Game Driver Metrics: add GpuStatsPuller to get gpu global stats
Bug: 123529932 Test: adb shell cmd stats pull-source 10054 Change-Id: Ib43a93661d24ce0d4b1e1ae6b6d0b50dbdfd3c15
This commit is contained in:
@@ -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",
|
||||
@@ -122,6 +123,7 @@ cc_defaults {
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder",
|
||||
"libgraphicsenv",
|
||||
"libincident",
|
||||
"liblog",
|
||||
"libutils",
|
||||
|
||||
91
cmds/statsd/src/external/GpuStatsPuller.cpp
vendored
Normal file
91
cmds/statsd/src/external/GpuStatsPuller.cpp
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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
|
||||
36
cmds/statsd/src/external/GpuStatsPuller.h
vendored
Normal file
36
cmds/statsd/src/external/GpuStatsPuller.h
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 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
|
||||
@@ -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"
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user