summaryrefslogtreecommitdiff
path: root/libs/graphicsenv/IGpuService.cpp
diff options
context:
space:
mode:
author Xin Li <delphij@google.com> 2024-01-29 12:47:18 -0800
committer Xin Li <delphij@google.com> 2024-01-29 12:47:18 -0800
commit2d701e14093b2e699d7dca00db3d7d66d0c96e29 (patch)
treec1b5916d12ac356ec1732e50293b335475ea83d0 /libs/graphicsenv/IGpuService.cpp
parentc6e22d8533cee1d044b88f2eb4a94a8b6c041761 (diff)
parentb507b71cc52f9203657f221808eef04d58dd6398 (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.cpp48
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;
}