summaryrefslogtreecommitdiff
path: root/drmdisplaycompositor.cpp
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2015-11-17 16:38:10 -0500
committerSean Paul <seanpaul@chromium.org>2015-11-19 14:42:27 -0500
commitc07b21121553f981a1888bb855c987138879c267 (patch)
treed1ddd56b71a5d0d7fdc1ef79e4a3cf47ef9aa726 /drmdisplaycompositor.cpp
parent35301f498c372f3ad2bbbc969acda39056131b26 (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.cpp21
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_);