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:
Yiwei Zhang
2019-03-01 17:25:27 -08:00
parent 5c81b6398f
commit 7e6330353e
4 changed files with 133 additions and 0 deletions

View File

@@ -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",

View 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

View 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

View File

@@ -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) {