diff options
author | 2024-01-29 12:47:18 -0800 | |
---|---|---|
committer | 2024-01-29 12:47:18 -0800 | |
commit | 2d701e14093b2e699d7dca00db3d7d66d0c96e29 (patch) | |
tree | c1b5916d12ac356ec1732e50293b335475ea83d0 /libs/graphicsenv/IGpuService.cpp | |
parent | c6e22d8533cee1d044b88f2eb4a94a8b6c041761 (diff) | |
parent | b507b71cc52f9203657f221808eef04d58dd6398 (diff) |
Merge Android 24Q1 Release (ab/11220357)
Bug: 319669529
Merged-In: I264e728c49f0500f2f868c3a25b0910d0d527340
Change-Id: I0de5ae0000a29e4b9735e6c4f381f680eb0723cd
Diffstat (limited to 'libs/graphicsenv/IGpuService.cpp')
-rw-r--r-- | libs/graphicsenv/IGpuService.cpp | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/libs/graphicsenv/IGpuService.cpp b/libs/graphicsenv/IGpuService.cpp index 4c070aec01..5dc195c438 100644 --- a/libs/graphicsenv/IGpuService.cpp +++ b/libs/graphicsenv/IGpuService.cpp @@ -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); @@ -180,9 +213,9 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep return reply->writeUtf8AsUtf16(driverPath); } case SHELL_COMMAND_TRANSACTION: { - int in = data.readFileDescriptor(); - int out = data.readFileDescriptor(); - int err = data.readFileDescriptor(); + int in = dup(data.readFileDescriptor()); + int out = dup(data.readFileDescriptor()); + int err = dup(data.readFileDescriptor()); std::vector<String16> args; data.readString16Vector(&args); @@ -195,6 +228,9 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep status = shellCommand(in, out, err, args); if (resultReceiver != nullptr) resultReceiver->send(status); + ::close(in); + ::close(out); + ::close(err); return OK; } |