@@ -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+
689719Error AidlComposer::presentDisplay (Display display, int * outPresentFence) {
690720 const auto displayId = translate<int64_t >(display);
691721 SFTRACE_FORMAT (" HwcPresentDisplay %" PRId64, displayId);
0 commit comments