const DrmMode &mode = connector->active_mode();
DrmFramebuffer &fb = framebuffers_[framebuffer_index_];
- ret = fb.WaitReleased(-1);
+ ret = fb.WaitReleased(fb.kReleaseWaitTimeoutMs);
if (ret) {
ALOGE("Failed to wait for framebuffer release %d", ret);
return ret;
for (DrmCompositionLayer &layer : *layers) {
int acquire_fence = layer.acquire_fence.get();
if (acquire_fence >= 0) {
- ret = sync_wait(acquire_fence, -1);
+ ret = sync_wait(acquire_fence, kAcquireWaitTimeoutMs);
if (ret) {
ALOGE("Failed to wait for acquire %d/%d", acquire_fence, ret);
drmModePropertySetFree(pset);
private:
DrmDisplayCompositor(const DrmDisplayCompositor &) = delete;
+ // Set to 50ms which is somewhere between a reasonable amount of time to
+ // wait for a long render and a small enough delay to limit jank.
+ static const int kAcquireWaitTimeoutMs = 50;
+
int ApplyPreComposite(DrmDisplayComposition *display_comp);
int ApplyFrame(DrmDisplayComposition *display_comp);
int ApplyDpms(DrmDisplayComposition *display_comp);
return true;
if (release_fence_fd_ >= 0) {
- if (sync_wait(release_fence_fd_, -1) != 0) {
+ if (sync_wait(release_fence_fd_, kReleaseWaitTimeoutMs) != 0) {
+ ALOGE("Wait for release fence failed\n");
return false;
}
}
return ret;
}
+ // Somewhat arbitrarily chosen, but wanted to stay below 3000ms, which is the
+ // system timeout
+ static const int kReleaseWaitTimeoutMs = 1500;
+
private:
sp<GraphicBuffer> buffer_;
int release_fence_fd_;