composer: 2.4: fix VTS usage of desired time

Test_setActiveConfigWithConstraints is setting the desired time
for a config change to be before the test starts.
This causes the test to use the same value for all configurations,
which becomes stale the more configurations the device supports.
This fix is setting the desired time before calling
to setActiveConfigWithConstraints.

Bug: 161023185
Test: adb shell data/nativetest64/VtsHalGraphicsComposerV2_4TargetTest/VtsHalGraphicsComposerV2_4TargetTest
Change-Id: I236e5c9c16b4ba730677cd4c980a7071ba25840e
This commit is contained in:
Ady Abraham
2020-07-16 09:35:35 -07:00
parent 32e3cd9a02
commit 30d2573834

View File

@@ -201,8 +201,12 @@ class GraphicsComposerHidlCommandTest : public GraphicsComposerHidlTest {
void execute() { mComposerClient->execute(mReader.get(), mWriter.get()); }
void Test_setActiveConfigWithConstraints(
const IComposerClient::VsyncPeriodChangeConstraints& constraints, bool refreshMiss);
struct TestParameters {
nsecs_t delayForChange;
bool refreshMiss;
};
void Test_setActiveConfigWithConstraints(const TestParameters& params);
void sendRefreshFrame(const VsyncPeriodChangeTimeline*);
@@ -453,9 +457,7 @@ void GraphicsComposerHidlCommandTest::waitForVsyncPeriodChange(
}
void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
const IComposerClient::VsyncPeriodChangeConstraints& constraints, bool refreshMiss) {
VsyncPeriodChangeTimeline timeline = {};
const TestParameters& params) {
for (Display display : mComposerCallback->getDisplays()) {
forEachTwoConfigs(display, [&](Config config1, Config config2) {
mComposerClient->setActiveConfig(display, config1);
@@ -470,6 +472,10 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
return; // continue
}
VsyncPeriodChangeTimeline timeline;
IComposerClient::VsyncPeriodChangeConstraints constraints = {
.desiredTimeNanos = systemTime() + params.delayForChange,
.seamlessRequired = false};
EXPECT_EQ(Error::NONE, mComposerClient->setActiveConfigWithConstraints(
display, config2, constraints, &timeline));
@@ -480,7 +486,7 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
kReasonableTimeForChange.count());
if (timeline.refreshRequired) {
if (refreshMiss) {
if (params.refreshMiss) {
// Miss the refresh frame on purpose to make sure the implementation sends a
// callback
std::this_thread::sleep_until(toTimePoint(timeline.refreshTimeNanos) + 100ms);
@@ -494,7 +500,7 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
// cases the implementation might have missed the deadline. In this case a new
// timeline should have been provided.
auto newTimeline = mComposerCallback->takeLastVsyncPeriodChangeTimeline();
if (timeline.refreshRequired && refreshMiss) {
if (timeline.refreshRequired && params.refreshMiss) {
EXPECT_TRUE(newTimeline.has_value());
}
@@ -515,28 +521,16 @@ void GraphicsComposerHidlCommandTest::Test_setActiveConfigWithConstraints(
}
TEST_P(GraphicsComposerHidlCommandTest, setActiveConfigWithConstraints) {
IComposerClient::VsyncPeriodChangeConstraints constraints;
constraints.seamlessRequired = false;
constraints.desiredTimeNanos = systemTime();
Test_setActiveConfigWithConstraints(constraints, false);
Test_setActiveConfigWithConstraints({.delayForChange = 0, .refreshMiss = false});
}
TEST_P(GraphicsComposerHidlCommandTest, setActiveConfigWithConstraints_Delayed) {
IComposerClient::VsyncPeriodChangeConstraints constraints;
constexpr nsecs_t kDelayForChange = 300'000'000; // 300ms
constraints.seamlessRequired = false;
constraints.desiredTimeNanos = systemTime() + kDelayForChange;
Test_setActiveConfigWithConstraints(constraints, false);
Test_setActiveConfigWithConstraints({.delayForChange = 300'000'000, // 300ms
.refreshMiss = false});
}
TEST_P(GraphicsComposerHidlCommandTest, setActiveConfigWithConstraints_MissRefresh) {
IComposerClient::VsyncPeriodChangeConstraints constraints;
constraints.seamlessRequired = false;
constraints.desiredTimeNanos = systemTime();
Test_setActiveConfigWithConstraints(constraints, true);
Test_setActiveConfigWithConstraints({.delayForChange = 0, .refreshMiss = true});
}
TEST_P(GraphicsComposerHidlTest, setAutoLowLatencyModeBadDisplay) {