render: keep lock while pushing dirty rows to worker queue

Instead of locking the queue for each dirty row we append, and
signaling a condition variable, just keep the lock while going through
the visible rows.

Release the lock once done.

Since we take the lock *before* posting the 'start' semaphore, all
workers will be waiting for the lock to be released.

Then, one at a time they'll get the lock and pick a row to
render. The queue will never get empty - when all rows have been
rendered, each worker will pick a 'frame done' "job" from the queue,
and break the rendering loop.
This commit is contained in:
Daniel Eklöf 2020-07-13 13:27:23 +02:00
parent 669d36afa8
commit 09bdf20aa0
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 3 additions and 19 deletions

View file

@ -369,7 +369,6 @@ struct terminal {
size_t count;
sem_t start;
sem_t done;
cnd_t cond;
mtx_t lock;
tll(int) queue;
thrd_t *threads;