Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit 1a084308 authored by Chavi Weingarten's avatar Chavi Weingarten
Browse files

Use sync screen capture when needed

The ideal way to request screenshots is via the async oneway call into
SurfaceFlinger. However, a lot of the legacy code requires the buffer to
be available before proceeding. This means we still need to handle sync
screenshots even when there's performance overhead.

This is needed because there are places in system server that request
screenshots while holding a lock and then wait synchronously on the
results. While waiting on the buffer and holding the lock, additional
two way binder calls can be made into system server that are waiting to
acquire the same lock. If there are enough requests, we may run out of
binder threads and then the screen capture result can't be posted back
to system server because it needs a free binder thread. This will result
in a deadlock because the lock that the screenshot request is holding
can never be unlocked without a free binder thread. Binder threads will
never be freed up because they are waiting to acquire the lock.

The async screencapture code is still useful for cases where there's no
global lock being held while waiting on results or the results is
posted.

Removed simple places where the global lock is held when making screenshot
requests

Bug: 321263247
Test: Screenshots
Change-Id: I027cec03bf83db10da29c4ef1195a9e4c8867df8
parent b431dc66
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment