Skip to content

Commit bf8f9f7

Browse files
author
Sameer
committed
Plumb buffer latencies and present fences out of Composer HAL (AidlComposerHal code)
Bug: 337330263 Test: build Flag: EXEMPT HAL interface change Change-Id: I90594b5a8a2d2b5fe039a0a4cdef69f02ef20d4b
1 parent b2361af commit bf8f9f7

6 files changed

Lines changed: 49 additions & 0 deletions

File tree

services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,36 @@ Error AidlComposer::getReleaseFences(Display display, std::vector<Layer>* outLay
686686
return error;
687687
}
688688

689+
Error AidlComposer::getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
690+
std::vector<int>* outFences,
691+
std::vector<int64_t>* outLatenciesNanos) {
692+
Error error = Error::NONE;
693+
std::vector<PresentFence::LayerPresentFence> fences;
694+
{
695+
mMutex.lock_shared();
696+
if (auto reader = getReader(display)) {
697+
fences = reader->get().takeLayerPresentFences(translate<int64_t>(display));
698+
} else {
699+
error = Error::BAD_DISPLAY;
700+
}
701+
mMutex.unlock_shared();
702+
}
703+
704+
outLayers->reserve(fences.size());
705+
outFences->reserve(fences.size());
706+
outLatenciesNanos->reserve(fences.size());
707+
708+
for (auto& fence : fences) {
709+
outLayers->emplace_back(translate<Layer>(fence.layer));
710+
// take ownership
711+
const int fenceOwner = fence.bufferFence.get();
712+
*fence.bufferFence.getR() = -1;
713+
outFences->emplace_back(fenceOwner);
714+
outLatenciesNanos->emplace_back(fence.bufferLatencyNanos);
715+
}
716+
return error;
717+
}
718+
689719
Error AidlComposer::presentDisplay(Display display, int* outPresentFence) {
690720
const auto displayId = translate<int64_t>(display);
691721
SFTRACE_FORMAT("HwcPresentDisplay %" PRId64, displayId);

services/surfaceflinger/DisplayHardware/AidlComposerHal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ class AidlComposer final : public Hwc2::Composer {
106106
Error getReleaseFences(Display display, std::vector<Layer>* outLayers,
107107
std::vector<int>* outReleaseFences) override;
108108

109+
Error getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
110+
std::vector<int>* outFences,
111+
std::vector<int64_t>* outLatenciesNanos) override;
112+
109113
Error presentDisplay(Display display, int* outPresentFence) override;
110114

111115
Error setActiveConfig(Display display, Config config) override;

services/surfaceflinger/DisplayHardware/ComposerHal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@ class Composer {
157157
virtual Error getReleaseFences(Display display, std::vector<Layer>* outLayers,
158158
std::vector<int>* outReleaseFences) = 0;
159159

160+
virtual Error getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
161+
std::vector<int>* outFences,
162+
std::vector<int64_t>* outLatenciesNanos) = 0;
163+
160164
virtual Error presentDisplay(Display display, int* outPresentFence) = 0;
161165

162166
virtual Error setActiveConfig(Display display, Config config) = 0;

services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,11 @@ Error HidlComposer::getReleaseFences(Display display, std::vector<Layer>* outLay
590590
return Error::NONE;
591591
}
592592

593+
Error HidlComposer::getLayerPresentFences(Display, std::vector<Layer>*, std::vector<int>*,
594+
std::vector<int64_t>*) {
595+
return Error::UNSUPPORTED;
596+
}
597+
593598
Error HidlComposer::presentDisplay(Display display, int* outPresentFence) {
594599
SFTRACE_NAME("HwcPresentDisplay");
595600
mWriter.selectDisplay(display);

services/surfaceflinger/DisplayHardware/HidlComposerHal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ class HidlComposer final : public Composer {
214214
Error getReleaseFences(Display display, std::vector<Layer>* outLayers,
215215
std::vector<int>* outReleaseFences) override;
216216

217+
Error getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
218+
std::vector<int>* outFences,
219+
std::vector<int64_t>* outLatenciesNanos) override;
220+
217221
Error presentDisplay(Display display, int* outPresentFence) override;
218222

219223
Error setActiveConfig(Display display, Config config) override;

services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ class Composer : public Hwc2::Composer {
193193
MOCK_METHOD(Error, getLuts,
194194
(Display, const std::vector<sp<GraphicBuffer>>&,
195195
std::vector<aidl::android::hardware::graphics::composer3::Luts>*));
196+
MOCK_METHOD4(getLayerPresentFences,
197+
Error(Display, std::vector<Layer>*, std::vector<int>*, std::vector<int64_t>*));
196198
};
197199

198200
} // namespace Hwc2::mock

0 commit comments

Comments
 (0)