diff options
author | Sean Paul <seanpaul@chromium.org> | 2015-11-17 16:38:10 -0500 |
---|---|---|
committer | Sean Paul <seanpaul@chromium.org> | 2015-11-19 14:42:27 -0500 |
commit | c07b21121553f981a1888bb855c987138879c267 (patch) | |
tree | d1ddd56b71a5d0d7fdc1ef79e4a3cf47ef9aa726 /drmdisplaycompositor.cpp | |
parent | 35301f498c372f3ad2bbbc969acda39056131b26 (diff) |
drm_hwcomposer: Add test_only mode to CommitFrame
Allow the caller of CommitFrame to run the commit in "test only" mode
which will send the frame to the kernel, but won't actually change any
registers.
Bug: 25379136
Test: Tested on smaug
Change-Id: I831b5f17d433bc60d9f107689feb1d7672c100a9
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drmdisplaycompositor.cpp')
-rw-r--r-- | drmdisplaycompositor.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp index bcd1a14..7c26343 100644 --- a/drmdisplaycompositor.cpp +++ b/drmdisplaycompositor.cpp @@ -593,7 +593,8 @@ int DrmDisplayCompositor::PrepareFrame(DrmDisplayComposition *display_comp) { return ret; } -int DrmDisplayCompositor::CommitFrame(DrmDisplayComposition *display_comp) { +int DrmDisplayCompositor::CommitFrame(DrmDisplayComposition *display_comp, + bool test_only) { ATRACE_CALL(); int ret = 0; @@ -660,7 +661,7 @@ int DrmDisplayCompositor::CommitFrame(DrmDisplayComposition *display_comp) { break; } DrmHwcLayer &layer = layers[comp_plane.source_layer]; - if (layer.acquire_fence.get() >= 0) { + if (!test_only && layer.acquire_fence.get() >= 0) { int acquire_fence = layer.acquire_fence.get(); for (int i = 0; i < kAcquireWaitTries; ++i) { ret = sync_wait(acquire_fence, kAcquireWaitTimeoutMs); @@ -788,10 +789,16 @@ int DrmDisplayCompositor::CommitFrame(DrmDisplayComposition *display_comp) { out: if (!ret) { - ret = drmModePropertySetCommit(drm_->fd(), DRM_MODE_ATOMIC_ALLOW_MODESET, - drm_, pset); + uint32_t flags = DRM_MODE_ATOMIC_ALLOW_MODESET; + if (test_only) + flags |= DRM_MODE_ATOMIC_TEST_ONLY; + + ret = drmModePropertySetCommit(drm_->fd(), flags, drm_, pset); if (ret) { - ALOGE("Failed to commit pset ret=%d\n", ret); + if (test_only) + ALOGI("Commit test pset failed ret=%d\n", ret); + else + ALOGE("Failed to commit pset ret=%d\n", ret); drmModePropertySetFree(pset); return ret; } @@ -799,7 +806,7 @@ out: if (pset) drmModePropertySetFree(pset); - if (mode_.needs_modeset) { + if (!test_only && mode_.needs_modeset) { ret = drm_->DestroyPropertyBlob(mode_.old_blob_id); if (ret) { ALOGE("Failed to destroy old mode property blob %lld/%d", @@ -862,7 +869,7 @@ void DrmDisplayCompositor::ApplyFrame( int ret = status; if (!ret) - ret = CommitFrame(composition.get()); + ret = CommitFrame(composition.get(), false); if (ret) { ALOGE("Composite failed for display %d", display_); |