Reduce contention for renderengine's async ops.
RenderEngine was holding a lock when executing work items in a task queue. The lock was intended for managing the task queue itself since we're not using a concurrent data structure for the queue, but the lock was not required to be held while executing work. This was causing performance issues where if multiple ExternalTextures were destroyed very closely in time, subsequent requests to unmap the underlying GrBackendTexture needed to block on prior requests to finish. The exemplary case is destroying a layer, where many buffers associated with that layer needed to be freed on the main thread. The fix in this patch is two-fold: 1. Don't lock anything else with the work queue lock 2. (1) breaks thread-safety for mRunning, so make it atomic which is sufficient since it's only used for safe destruction. Bug: 188632264 Bug: 190375955 Test: Perfetto trace of app lifecyle. Change-Id: Ia238b43cb971fde42a92eab4f8247286d2e2d247
Loading
Please register or sign in to comment