Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4f1c06d authored by Tom Murphy's avatar Tom Murphy Committed by Android (Google) Code Review
Browse files

Merge "Add engine name to GpuStatsAppInfo" into main

parents 03a0d2d8 c23fcd04
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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;
}
@@ -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;
}
@@ -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;
}

+15 −0
Original line number Diff line number Diff line
@@ -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.
+28 −0
Original line number Diff line number Diff line
@@ -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());
@@ -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);

+5 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
};
+2 −0
Original line number Diff line number Diff line
@@ -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