Loading libs/graphicsenv/GpuStatsInfo.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ status_t GpuStatsAppInfo::writeToParcel(Parcel* parcel) const { if ((status = parcel->writeUint64(vulkanDeviceFeaturesEnabled)) != OK) return status; if ((status = parcel->writeInt32Vector(vulkanInstanceExtensions)) != OK) return status; if ((status = parcel->writeInt32Vector(vulkanDeviceExtensions)) != OK) return status; if ((status = parcel->writeUtf8VectorAsUtf16Vector(vulkanEngineNames)) != OK) return status; return OK; } Loading @@ -118,6 +119,7 @@ status_t GpuStatsAppInfo::readFromParcel(const Parcel* parcel) { if ((status = parcel->readUint64(&vulkanDeviceFeaturesEnabled)) != OK) return status; if ((status = parcel->readInt32Vector(&vulkanInstanceExtensions)) != OK) return status; if ((status = parcel->readInt32Vector(&vulkanDeviceExtensions)) != OK) return status; if ((status = parcel->readUtf8VectorFromUtf16Vector(&vulkanEngineNames)) != OK) return status; return OK; } Loading Loading @@ -161,6 +163,11 @@ std::string GpuStatsAppInfo::toString() const { StringAppendF(&result, " 0x%x", extension); } result.append("\n"); result.append("vulkanEngineNames:"); for (const std::string& engineName : vulkanEngineNames) { StringAppendF(&result, " %s,", engineName.c_str()); } result.append("\n"); return result; } Loading libs/graphicsenv/GraphicsEnv.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -445,6 +445,21 @@ void GraphicsEnv::setVulkanDeviceExtensions(uint32_t enabledExtensionCount, extensionHashes, numStats); } void GraphicsEnv::addVulkanEngineName(const char* engineName) { ATRACE_CALL(); if (engineName == nullptr) { return; } std::lock_guard<std::mutex> lock(mStatsLock); if (!readyToSendGpuStatsLocked()) return; const sp<IGpuService> gpuService = getGpuService(); if (gpuService) { gpuService->addVulkanEngineName(mGpuStats.appPackageName, mGpuStats.driverVersionCode, engineName); } } bool GraphicsEnv::readyToSendGpuStatsLocked() { // Only send stats for processes having at least one activity launched and that process doesn't // skip the GraphicsEnvironment setup. Loading libs/graphicsenv/IGpuService.cpp +28 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,19 @@ public: IBinder::FLAG_ONEWAY); } void addVulkanEngineName(const std::string& appPackageName, const uint64_t driverVersionCode, const char* engineName) override { Parcel data, reply; data.writeInterfaceToken(IGpuService::getInterfaceDescriptor()); data.writeUtf8AsUtf16(appPackageName); data.writeUint64(driverVersionCode); data.writeCString(engineName); remote()->transact(BnGpuService::ADD_VULKAN_ENGINE_NAME, data, &reply, IBinder::FLAG_ONEWAY); } void setUpdatableDriverPath(const std::string& driverPath) override { Parcel data, reply; data.writeInterfaceToken(IGpuService::getInterfaceDescriptor()); Loading Loading @@ -197,6 +210,21 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep return OK; } case ADD_VULKAN_ENGINE_NAME: { CHECK_INTERFACE(IGpuService, data, reply); std::string appPackageName; if ((status = data.readUtf8FromUtf16(&appPackageName)) != OK) return status; uint64_t driverVersionCode; if ((status = data.readUint64(&driverVersionCode)) != OK) return status; const char* engineName; if ((engineName = data.readCString()) == nullptr) return BAD_VALUE; addVulkanEngineName(appPackageName, driverVersionCode, engineName); return OK; } case SET_UPDATABLE_DRIVER_PATH: { CHECK_INTERFACE(IGpuService, data, reply); Loading libs/graphicsenv/include/graphicsenv/GpuStatsInfo.h +5 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,10 @@ class GpuStatsAppInfo : public Parcelable { public: // This limits the worst case number of extensions to be tracked. static const uint32_t MAX_NUM_EXTENSIONS = 100; // Max number of vulkan engine names for a single GpuStatsAppInfo static const uint32_t MAX_VULKAN_ENGINE_NAMES = 16; // Max length of a vulkan engine name string static const size_t MAX_VULKAN_ENGINE_NAME_LENGTH = 50; GpuStatsAppInfo() = default; GpuStatsAppInfo(const GpuStatsAppInfo&) = default; Loading @@ -84,6 +88,7 @@ public: uint64_t vulkanDeviceFeaturesEnabled = 0; std::vector<int32_t> vulkanInstanceExtensions = {}; std::vector<int32_t> vulkanDeviceExtensions = {}; std::vector<std::string> vulkanEngineNames = {}; std::chrono::time_point<std::chrono::system_clock> lastAccessTime; }; Loading libs/graphicsenv/include/graphicsenv/GraphicsEnv.h +2 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,8 @@ public: // Set which device extensions are enabled for the app. void setVulkanDeviceExtensions(uint32_t enabledExtensionCount, const char* const* ppEnabledExtensionNames); // Add the engine name passed in VkApplicationInfo during CreateInstance void addVulkanEngineName(const char* engineName); /* * Api for Vk/GL layer injection. Presently, drivers enable certain Loading Loading
libs/graphicsenv/GpuStatsInfo.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ status_t GpuStatsAppInfo::writeToParcel(Parcel* parcel) const { if ((status = parcel->writeUint64(vulkanDeviceFeaturesEnabled)) != OK) return status; if ((status = parcel->writeInt32Vector(vulkanInstanceExtensions)) != OK) return status; if ((status = parcel->writeInt32Vector(vulkanDeviceExtensions)) != OK) return status; if ((status = parcel->writeUtf8VectorAsUtf16Vector(vulkanEngineNames)) != OK) return status; return OK; } Loading @@ -118,6 +119,7 @@ status_t GpuStatsAppInfo::readFromParcel(const Parcel* parcel) { if ((status = parcel->readUint64(&vulkanDeviceFeaturesEnabled)) != OK) return status; if ((status = parcel->readInt32Vector(&vulkanInstanceExtensions)) != OK) return status; if ((status = parcel->readInt32Vector(&vulkanDeviceExtensions)) != OK) return status; if ((status = parcel->readUtf8VectorFromUtf16Vector(&vulkanEngineNames)) != OK) return status; return OK; } Loading Loading @@ -161,6 +163,11 @@ std::string GpuStatsAppInfo::toString() const { StringAppendF(&result, " 0x%x", extension); } result.append("\n"); result.append("vulkanEngineNames:"); for (const std::string& engineName : vulkanEngineNames) { StringAppendF(&result, " %s,", engineName.c_str()); } result.append("\n"); return result; } Loading
libs/graphicsenv/GraphicsEnv.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -445,6 +445,21 @@ void GraphicsEnv::setVulkanDeviceExtensions(uint32_t enabledExtensionCount, extensionHashes, numStats); } void GraphicsEnv::addVulkanEngineName(const char* engineName) { ATRACE_CALL(); if (engineName == nullptr) { return; } std::lock_guard<std::mutex> lock(mStatsLock); if (!readyToSendGpuStatsLocked()) return; const sp<IGpuService> gpuService = getGpuService(); if (gpuService) { gpuService->addVulkanEngineName(mGpuStats.appPackageName, mGpuStats.driverVersionCode, engineName); } } bool GraphicsEnv::readyToSendGpuStatsLocked() { // Only send stats for processes having at least one activity launched and that process doesn't // skip the GraphicsEnvironment setup. Loading
libs/graphicsenv/IGpuService.cpp +28 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,19 @@ public: IBinder::FLAG_ONEWAY); } void addVulkanEngineName(const std::string& appPackageName, const uint64_t driverVersionCode, const char* engineName) override { Parcel data, reply; data.writeInterfaceToken(IGpuService::getInterfaceDescriptor()); data.writeUtf8AsUtf16(appPackageName); data.writeUint64(driverVersionCode); data.writeCString(engineName); remote()->transact(BnGpuService::ADD_VULKAN_ENGINE_NAME, data, &reply, IBinder::FLAG_ONEWAY); } void setUpdatableDriverPath(const std::string& driverPath) override { Parcel data, reply; data.writeInterfaceToken(IGpuService::getInterfaceDescriptor()); Loading Loading @@ -197,6 +210,21 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep return OK; } case ADD_VULKAN_ENGINE_NAME: { CHECK_INTERFACE(IGpuService, data, reply); std::string appPackageName; if ((status = data.readUtf8FromUtf16(&appPackageName)) != OK) return status; uint64_t driverVersionCode; if ((status = data.readUint64(&driverVersionCode)) != OK) return status; const char* engineName; if ((engineName = data.readCString()) == nullptr) return BAD_VALUE; addVulkanEngineName(appPackageName, driverVersionCode, engineName); return OK; } case SET_UPDATABLE_DRIVER_PATH: { CHECK_INTERFACE(IGpuService, data, reply); Loading
libs/graphicsenv/include/graphicsenv/GpuStatsInfo.h +5 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,10 @@ class GpuStatsAppInfo : public Parcelable { public: // This limits the worst case number of extensions to be tracked. static const uint32_t MAX_NUM_EXTENSIONS = 100; // Max number of vulkan engine names for a single GpuStatsAppInfo static const uint32_t MAX_VULKAN_ENGINE_NAMES = 16; // Max length of a vulkan engine name string static const size_t MAX_VULKAN_ENGINE_NAME_LENGTH = 50; GpuStatsAppInfo() = default; GpuStatsAppInfo(const GpuStatsAppInfo&) = default; Loading @@ -84,6 +88,7 @@ public: uint64_t vulkanDeviceFeaturesEnabled = 0; std::vector<int32_t> vulkanInstanceExtensions = {}; std::vector<int32_t> vulkanDeviceExtensions = {}; std::vector<std::string> vulkanEngineNames = {}; std::chrono::time_point<std::chrono::system_clock> lastAccessTime; }; Loading
libs/graphicsenv/include/graphicsenv/GraphicsEnv.h +2 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,8 @@ public: // Set which device extensions are enabled for the app. void setVulkanDeviceExtensions(uint32_t enabledExtensionCount, const char* const* ppEnabledExtensionNames); // Add the engine name passed in VkApplicationInfo during CreateInstance void addVulkanEngineName(const char* engineName); /* * Api for Vk/GL layer injection. Presently, drivers enable certain Loading