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