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

Commit 0ae29275 authored by Serdar Kocdemir's avatar Serdar Kocdemir
Browse files

Implement array version of GPU stat update calls

Adding SET_TARGET_STATS_ARRAY GPU Service tag to reduce the number
of binder calls required when setting Vulkan extension usage stats.

Bug: b/289491729
Test: adb shell dumpsys gpu
Test: atest GpuStatsTest
Change-Id: I5bb219e3600c2711a57194ae4518c9f19f7b5ad3
parent ddba9342
Loading
Loading
Loading
Loading
+36 −3
Original line number Diff line number Diff line
@@ -64,9 +64,17 @@ public:
    void setTargetStatsArray(const std::string& appPackageName, const uint64_t driverVersionCode,
                             const GpuStatsInfo::Stats stats, const uint64_t* values,
                             const uint32_t valueCount) override {
        for (uint32_t i = 0; i < valueCount; i++) {
            setTargetStats(appPackageName, driverVersionCode, stats, values[i]);
        }
        Parcel data, reply;
        data.writeInterfaceToken(IGpuService::getInterfaceDescriptor());

        data.writeUtf8AsUtf16(appPackageName);
        data.writeUint64(driverVersionCode);
        data.writeInt32(static_cast<int32_t>(stats));
        data.writeUint32(valueCount);
        data.write(values, valueCount * sizeof(uint64_t));

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

    void setUpdatableDriverPath(const std::string& driverPath) override {
@@ -164,6 +172,31 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep

            return OK;
        }
        case SET_TARGET_STATS_ARRAY: {
            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;

            int32_t stats;
            if ((status = data.readInt32(&stats)) != OK) return status;

            uint32_t valueCount;
            if ((status = data.readUint32(&valueCount)) != OK) return status;

            std::vector<uint64_t> values(valueCount);
            if ((status = data.read(values.data(), valueCount * sizeof(uint64_t))) != OK) {
                return status;
            }

            setTargetStatsArray(appPackageName, driverVersionCode,
                                static_cast<GpuStatsInfo::Stats>(stats), values.data(), valueCount);

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

+1 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ public:
        SET_UPDATABLE_DRIVER_PATH,
        GET_UPDATABLE_DRIVER_PATH,
        TOGGLE_ANGLE_AS_SYSTEM_DRIVER,
        SET_TARGET_STATS_ARRAY,
        // Always append new enum to the end.
    };