diff options
author | Adrian Salido <salidoa@google.com> | 2016-10-03 19:29:15 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-10-03 19:29:15 +0000 |
commit | 3af111cf5975e51318b8aa59f39e5d96c6bc3fbd (patch) | |
tree | fdac63686ade130497740f45ceb37b9ee2cf882c | |
parent | b38dbf65e012488d45a17507c0a761b2a1380def (diff) | |
parent | ff717ff5b00180242041c0bd74d4e26dcfb2d260 (diff) | |
download | drm_hwcomposer-3af111cf5975e51318b8aa59f39e5d96c6bc3fbd.tar.gz |
drm_hwcomposer: limit maximum depth of frame worker queue
am: ff717ff5b0
Change-Id: I89614273f61428a5303586c0fd63bdc4a53e3e63
-rw-r--r-- | drmdisplaycompositor.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp index 92323b6..5da9152 100644 --- a/drmdisplaycompositor.cpp +++ b/drmdisplaycompositor.cpp @@ -191,6 +191,16 @@ int DrmDisplayCompositor::FrameWorker::Init() { void DrmDisplayCompositor::FrameWorker::QueueFrame( std::unique_ptr<DrmDisplayComposition> composition, int status) { Lock(); + + // Block queue if it gets too large. Otherwise composition will + // start stacking up and eat limited resources (file descriptors) + // allocated for these. + while (frame_queue_.size() >= DRM_DISPLAY_COMPOSITOR_MAX_QUEUE_DEPTH) { + Unlock(); + sched_yield(); + Lock(); + } + FrameState frame; frame.composition = std::move(composition); frame.status = status; |