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

Commit bcba4117 authored by Yiwei Zhang's avatar Yiwei Zhang
Browse files

GpuStats: refactor single stats pieces into a uniform way

This change makes it easy for adding single stats pieces into GpuService without
adding or modifying the binder interface each time.

Bug: 135210726
Test: adb shell dumpsys gpu
Change-Id: I2907065a55d03a6c1494737e6f0a77f6e94272eb
parent 81e26a1c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -267,14 +267,14 @@ static sp<IGpuService> getGpuService() {
    return interface_cast<IGpuService>(binder);
}

void GraphicsEnv::setCpuVulkanInUse() {
void GraphicsEnv::setTargetStats(const GpuStatsInfo::Stats stats, const uint64_t value) {
    ATRACE_CALL();

    // Use the same stats lock to protect getGpuService() as well.
    std::lock_guard<std::mutex> lock(mStatsLock);
    const sp<IGpuService> gpuService = getGpuService();
    if (gpuService) {
        gpuService->setCpuVulkanInUse(mGpuStats.appPackageName, mGpuStats.driverVersionCode);
        gpuService->setTargetStats(mGpuStats.appPackageName, mGpuStats.driverVersionCode, stats,
                                   value);
    }
}

+14 −5
Original line number Diff line number Diff line
@@ -92,15 +92,17 @@ public:
        return reply.readParcelableVector(outStats);
    }

    virtual void setCpuVulkanInUse(const std::string& appPackageName,
                                   const uint64_t driverVersionCode) {
    virtual void setTargetStats(const std::string& appPackageName, const uint64_t driverVersionCode,
                                const GpuStatsInfo::Stats stats, const uint64_t value) {
        Parcel data, reply;
        data.writeInterfaceToken(IGpuService::getInterfaceDescriptor());

        data.writeUtf8AsUtf16(appPackageName);
        data.writeUint64(driverVersionCode);
        data.writeInt32(static_cast<int32_t>(stats));
        data.writeUint64(value);

        remote()->transact(BnGpuService::SET_CPU_VULKAN_IN_USE, data, &reply, IBinder::FLAG_ONEWAY);
        remote()->transact(BnGpuService::SET_TARGET_STATS, data, &reply, IBinder::FLAG_ONEWAY);
    }
};

@@ -174,7 +176,7 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep

            return OK;
        }
        case SET_CPU_VULKAN_IN_USE: {
        case SET_TARGET_STATS: {
            CHECK_INTERFACE(IGpuService, data, reply);

            std::string appPackageName;
@@ -183,7 +185,14 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep
            uint64_t driverVersionCode;
            if ((status = data.readUint64(&driverVersionCode)) != OK) return status;

            setCpuVulkanInUse(appPackageName, driverVersionCode);
            int32_t stats;
            if ((status = data.readInt32(&stats)) != OK) return status;

            uint64_t value;
            if ((status = data.readUint64(&value)) != OK) return status;

            setTargetStats(appPackageName, driverVersionCode,
                           static_cast<GpuStatsInfo::Stats>(stats), value);

            return OK;
        }
+4 −0
Original line number Diff line number Diff line
@@ -91,6 +91,10 @@ public:
        ANGLE = 5,
    };

    enum Stats {
        CPU_VULKAN_IN_USE = 0,
    };

    GpuStatsInfo() = default;
    GpuStatsInfo(const GpuStatsInfo&) = default;
    virtual ~GpuStatsInfo() = default;
+2 −2
Original line number Diff line number Diff line
@@ -60,8 +60,8 @@ public:
    void setGpuStats(const std::string& driverPackageName, const std::string& driverVersionName,
                     uint64_t versionCode, int64_t driverBuildTime,
                     const std::string& appPackageName, const int32_t vulkanVersion);
    // Set that CPU type physical device is in use.
    void setCpuVulkanInUse();
    // Set stats for target GpuStatsInfo::Stats type.
    void setTargetStats(const GpuStatsInfo::Stats stats, const uint64_t value = 0);
    // Set which driver is intended to load.
    void setDriverToLoad(GpuStatsInfo::Driver driver);
    // Set which driver is actually loaded.
+4 −4
Original line number Diff line number Diff line
@@ -40,9 +40,9 @@ public:
                             const int32_t vulkanVersion, GpuStatsInfo::Driver driver,
                             bool isDriverLoaded, int64_t driverLoadingTime) = 0;

    // set CPU Vulkan in use signal from GraphicsEnvironment.
    virtual void setCpuVulkanInUse(const std::string& appPackageName,
                                   const uint64_t driverVersionCode) = 0;
    // set target stats.
    virtual void setTargetStats(const std::string& appPackageName, const uint64_t driverVersionCode,
                                const GpuStatsInfo::Stats stats, const uint64_t value = 0) = 0;

    // get GPU global stats from GpuStats module.
    virtual status_t getGpuStatsGlobalInfo(std::vector<GpuStatsGlobalInfo>* outStats) const = 0;
@@ -57,7 +57,7 @@ public:
        SET_GPU_STATS = IBinder::FIRST_CALL_TRANSACTION,
        GET_GPU_STATS_GLOBAL_INFO,
        GET_GPU_STATS_APP_INFO,
        SET_CPU_VULKAN_IN_USE,
        SET_TARGET_STATS,
        // Always append new enum to the end.
    };

Loading