From d986181df8ff886301adaf20404f886c730ba2c7 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Wed, 13 Feb 2019 11:51:55 -0800 Subject: Game Driver: plumb driver choice and loading time to GpuStats This change plumb the below info from GL and Vulkan loader: 1. Intended driver to use 2. Whether intended driver is loaded 3. Total driver loading time Bug: 123529932 Test: Build, flash and boot. Verify the GpuService receiver side. Change-Id: I967d4361bf0e04c02390c7555617575c19ecadd4 --- libs/graphicsenv/GraphicsEnv.cpp | 117 ++++++++++++++++++++++++++++++++------- 1 file changed, 96 insertions(+), 21 deletions(-) (limited to 'libs/graphicsenv/GraphicsEnv.cpp') diff --git a/libs/graphicsenv/GraphicsEnv.cpp b/libs/graphicsenv/GraphicsEnv.cpp index 75fe2d31df..a07627a657 100644 --- a/libs/graphicsenv/GraphicsEnv.cpp +++ b/libs/graphicsenv/GraphicsEnv.cpp @@ -157,10 +157,11 @@ void GraphicsEnv::setDriverPath(const std::string path) { } void GraphicsEnv::setGpuStats(const std::string& driverPackageName, - const std::string& driverVersionName, - const uint64_t driverVersionCode, const std::string& appPackageName) { + const std::string& driverVersionName, uint64_t driverVersionCode, + const std::string& appPackageName) { ATRACE_CALL(); + std::lock_guard lock(mStatsLock); ALOGV("setGpuStats:\n" "\tdriverPackageName[%s]\n" "\tdriverVersionName[%s]\n" @@ -169,15 +170,89 @@ void GraphicsEnv::setGpuStats(const std::string& driverPackageName, driverPackageName.c_str(), driverVersionName.c_str(), (unsigned long long)driverVersionCode, appPackageName.c_str()); - mGpuStats = { - .driverPackageName = driverPackageName, - .driverVersionName = driverVersionName, - .driverVersionCode = driverVersionCode, - .appPackageName = appPackageName, - }; + mGpuStats.driverPackageName = driverPackageName; + mGpuStats.driverVersionName = driverVersionName; + mGpuStats.driverVersionCode = driverVersionCode; + mGpuStats.appPackageName = appPackageName; +} + +void GraphicsEnv::setDriverToLoad(GraphicsEnv::Driver driver) { + ATRACE_CALL(); + + std::lock_guard lock(mStatsLock); + switch (driver) { + case GraphicsEnv::Driver::GL: + case GraphicsEnv::Driver::GL_UPDATED: + case GraphicsEnv::Driver::ANGLE: { + if (mGpuStats.glDriverToLoad == GraphicsEnv::Driver::NONE) { + mGpuStats.glDriverToLoad = driver; + break; + } + + if (mGpuStats.glDriverFallback == GraphicsEnv::Driver::NONE) { + mGpuStats.glDriverFallback = driver; + } + break; + } + case Driver::VULKAN: + case Driver::VULKAN_UPDATED: { + if (mGpuStats.vkDriverToLoad == GraphicsEnv::Driver::NONE) { + mGpuStats.vkDriverToLoad = driver; + break; + } + + if (mGpuStats.vkDriverFallback == GraphicsEnv::Driver::NONE) { + mGpuStats.vkDriverFallback = driver; + } + break; + } + default: + break; + } +} + +void GraphicsEnv::setDriverLoaded(GraphicsEnv::Api api, bool isLoaded, int64_t driverLoadingTime) { + ATRACE_CALL(); + + std::lock_guard lock(mStatsLock); + GraphicsEnv::Driver driver = GraphicsEnv::Driver::NONE; + bool isIntendedDriverLoaded = false; + if (api == GraphicsEnv::Api::API_GL) { + driver = mGpuStats.glDriverToLoad; + isIntendedDriverLoaded = isLoaded && + ((mGpuStats.glDriverFallback == GraphicsEnv::Driver::NONE) || + (mGpuStats.glDriverToLoad == mGpuStats.glDriverFallback)); + } else { + driver = mGpuStats.vkDriverToLoad; + isIntendedDriverLoaded = + isLoaded && (mGpuStats.vkDriverFallback == GraphicsEnv::Driver::NONE); + } + + sendGpuStatsLocked(driver, isIntendedDriverLoaded, driverLoadingTime); } -void GraphicsEnv::sendGpuStats() { +void GraphicsEnv::clearDriverLoadingInfo(GraphicsEnv::Api api) { + ATRACE_CALL(); + + std::lock_guard lock(mStatsLock); + if (api == GraphicsEnv::Api::API_GL) { + mGpuStats.glDriverToLoad = GraphicsEnv::Driver::NONE; + mGpuStats.glDriverFallback = GraphicsEnv::Driver::NONE; + } +} + +static sp getGpuService() { + const sp binder = defaultServiceManager()->checkService(String16("gpu")); + if (!binder) { + ALOGE("Failed to get gpu service"); + return nullptr; + } + + return interface_cast(binder); +} + +void GraphicsEnv::sendGpuStatsLocked(GraphicsEnv::Driver driver, bool isDriverLoaded, + int64_t driverLoadingTime) { ATRACE_CALL(); // Do not sendGpuStats for those skipping the GraphicsEnvironment setup @@ -187,20 +262,20 @@ void GraphicsEnv::sendGpuStats() { "\tdriverPackageName[%s]\n" "\tdriverVersionName[%s]\n" "\tdriverVersionCode[%llu]\n" - "\tappPackageName[%s]\n", + "\tappPackageName[%s]\n" + "\tdriver[%d]\n" + "\tisDriverLoaded[%d]\n" + "\tdriverLoadingTime[%lld]", mGpuStats.driverPackageName.c_str(), mGpuStats.driverVersionName.c_str(), - (unsigned long long)mGpuStats.driverVersionCode, mGpuStats.appPackageName.c_str()); - - const sp binder = defaultServiceManager()->checkService(String16("gpu")); - if (!binder) { - ALOGE("Failed to get gpu service for [%s]", mGpuStats.appPackageName.c_str()); - return; + (unsigned long long)mGpuStats.driverVersionCode, mGpuStats.appPackageName.c_str(), + static_cast(driver), isDriverLoaded, (long long)driverLoadingTime); + + const sp gpuService = getGpuService(); + if (gpuService) { + gpuService->setGpuStats(mGpuStats.driverPackageName, mGpuStats.driverVersionName, + mGpuStats.driverVersionCode, mGpuStats.appPackageName, driver, + isDriverLoaded, driverLoadingTime); } - - interface_cast(binder)->setGpuStats(mGpuStats.driverPackageName, - mGpuStats.driverVersionName, - mGpuStats.driverVersionCode, - mGpuStats.appPackageName); } void* GraphicsEnv::loadLibrary(std::string name) { -- cgit v1.2.3-59-g8ed1b