Reset pending commands
Allow takePendingCommands to have ownership for mComamnds so commands
are reset on each call. Make reset method to be private.
Bug: 273525126
Test: manual
Change-Id: Ifecad733e5e85d475825969296ddf68081ce9e60
diff --git a/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h b/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h
index 4a5ac69..2e902e5 100644
--- a/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h
+++ b/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h
@@ -70,12 +70,6 @@
ComposerClientWriter(const ComposerClientWriter&) = delete;
ComposerClientWriter& operator=(const ComposerClientWriter&) = delete;
- void reset() {
- mDisplayCommand.reset();
- mLayerCommand.reset();
- mCommands.clear();
- }
-
void setColorTransform(int64_t display, const float* matrix) {
std::vector<float> matVec;
matVec.reserve(16);
@@ -235,10 +229,12 @@
getLayerCommand(display, layer).blockingRegion.emplace(blocking.begin(), blocking.end());
}
- const std::vector<DisplayCommand>& getPendingCommands() {
+ std::vector<DisplayCommand> takePendingCommands() {
flushLayerCommand();
flushDisplayCommand();
- return mCommands;
+ std::vector<DisplayCommand> moved = std::move(mCommands);
+ mCommands.clear();
+ return moved;
}
private:
@@ -289,6 +285,12 @@
}
return *mLayerCommand;
}
+
+ void reset() {
+ mDisplayCommand.reset();
+ mLayerCommand.reset();
+ mCommands.clear();
+ }
};
} // namespace aidl::android::hardware::graphics::composer3
diff --git a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_ReadbackTest.cpp b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_ReadbackTest.cpp
index 6fa3392..b047220 100644
--- a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_ReadbackTest.cpp
+++ b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_ReadbackTest.cpp
@@ -207,9 +207,8 @@
}
void execute() {
- const auto& commands = mWriter->getPendingCommands();
+ auto commands = mWriter->takePendingCommands();
if (commands.empty()) {
- mWriter->reset();
return;
}
@@ -217,7 +216,6 @@
ASSERT_TRUE(status.isOk()) << "executeCommands failed " << status.getDescription();
mReader.parse(std::move(results));
- mWriter->reset();
}
bool getHasReadbackBuffer() {
diff --git a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
index 3ea5bf5..ed4f28c 100644
--- a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
+++ b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
@@ -1171,15 +1171,13 @@
void execute() {
std::vector<CommandResultPayload> payloads;
for (auto& [_, writer] : mWriters) {
- const auto& commands = writer.getPendingCommands();
+ auto commands = writer.takePendingCommands();
if (commands.empty()) {
- writer.reset();
continue;
}
auto [status, results] = mComposerClient->executeCommands(commands);
ASSERT_TRUE(status.isOk()) << "executeCommands failed " << status.getDescription();
- writer.reset();
payloads.reserve(payloads.size() + results.size());
payloads.insert(payloads.end(), std::make_move_iterator(results.begin()),