|
18 | 18 | #include <gtest/gtest.h> |
19 | 19 | #include <gui/SurfaceComposerClient.h> |
20 | 20 | #include <gui/SurfaceControl.h> |
| 21 | +#include <private/gui/SyncFeatures.h> |
21 | 22 | #include <ui/Fence.h> |
22 | 23 | #include <utils/Timers.h> |
23 | 24 | #include <chrono> |
@@ -95,18 +96,21 @@ class ExpectedResult { |
95 | 96 | if (mTransactionResult == ExpectedResult::Transaction::PRESENTED) { |
96 | 97 | ASSERT_GE(latchTime, 0) << "bad latch time"; |
97 | 98 | ASSERT_NE(presentFence, nullptr); |
98 | | - if (mExpectedPresentTime >= 0) { |
99 | | - ASSERT_EQ(presentFence->wait(3000), NO_ERROR); |
100 | | - ASSERT_GE(presentFence->getSignalTime(), mExpectedPresentTime - nsecs_t(5 * 1e6)); |
101 | | - // if the panel is running at 30 hz, at the worst case, our expected time just |
102 | | - // misses vsync and we have to wait another 33.3ms |
103 | | - ASSERT_LE(presentFence->getSignalTime(), |
104 | | - mExpectedPresentTime + nsecs_t(66.666666 * 1e6)); |
105 | | - } else if (mExpectedPresentTimeForVsyncId >= 0) { |
106 | | - ASSERT_EQ(presentFence->wait(3000), NO_ERROR); |
107 | | - // We give 4ms for prediction error |
108 | | - ASSERT_GE(presentFence->getSignalTime(), |
109 | | - mExpectedPresentTimeForVsyncId - 4'000'000); |
| 99 | + if (SyncFeatures::getInstance().useNativeFenceSync()) { |
| 100 | + if (mExpectedPresentTime >= 0) { |
| 101 | + ASSERT_EQ(presentFence->wait(3000), NO_ERROR); |
| 102 | + ASSERT_GE(presentFence->getSignalTime(), |
| 103 | + mExpectedPresentTime - nsecs_t(5 * 1e6)); |
| 104 | + // if the panel is running at 30 hz, at the worst case, our expected time just |
| 105 | + // misses vsync and we have to wait another 33.3ms |
| 106 | + ASSERT_LE(presentFence->getSignalTime(), |
| 107 | + mExpectedPresentTime + nsecs_t(66.666666 * 1e6)); |
| 108 | + } else if (mExpectedPresentTimeForVsyncId >= 0) { |
| 109 | + ASSERT_EQ(presentFence->wait(3000), NO_ERROR); |
| 110 | + // We give 4ms for prediction error |
| 111 | + ASSERT_GE(presentFence->getSignalTime(), |
| 112 | + mExpectedPresentTimeForVsyncId - 4'000'000); |
| 113 | + } |
110 | 114 | } |
111 | 115 | } else { |
112 | 116 | ASSERT_EQ(presentFence, nullptr) << "transaction shouldn't have been presented"; |
@@ -150,12 +154,16 @@ class ExpectedResult { |
150 | 154 | } |
151 | 155 | } |
152 | 156 |
|
153 | | - if (mBufferResult == ExpectedResult::Buffer::ACQUIRED) { |
154 | | - ASSERT_GT(acquireTime, 0) << "acquire time should be valid"; |
155 | | - } else { |
156 | | - ASSERT_LE(acquireTime, 0) << "acquire time should not be valid"; |
| 157 | + // If the device doesn't have native fence support, skip validating the acquire time. |
| 158 | + // Cuttlefish uses a fence with a signal time of -1 to indicate completion. |
| 159 | + if (SyncFeatures::getInstance().useNativeFenceSync()) { |
| 160 | + if (mBufferResult == ExpectedResult::Buffer::ACQUIRED) { |
| 161 | + ASSERT_GT(acquireTime, 0) << "acquire time should be valid"; |
| 162 | + } else { |
| 163 | + ASSERT_LE(acquireTime, 0) << "acquire time should not be valid"; |
| 164 | + } |
| 165 | + ASSERT_EQ(acquireTime > 0, mBufferResult == ExpectedResult::Buffer::ACQUIRED); |
157 | 166 | } |
158 | | - ASSERT_EQ(acquireTime > 0, mBufferResult == ExpectedResult::Buffer::ACQUIRED); |
159 | 167 |
|
160 | 168 | if (mPreviousBufferResult == ExpectedResult::PreviousBuffer::RELEASED) { |
161 | 169 | ASSERT_NE(previousReleaseFence, nullptr) |
|
0 commit comments