@@ -43,6 +43,10 @@ using ::testing::ReturnRef;
4343using ::testing::SaveArg;
4444using ::testing::StrictMock;
4545
46+ static constexpr PhysicalDisplayId kDisplayId1 = PhysicalDisplayId::fromPort(123u );
47+ static constexpr PhysicalDisplayId kDisplayId2 = PhysicalDisplayId::fromPort(234u );
48+ static constexpr PhysicalDisplayId kDisplayId3 = PhysicalDisplayId::fromPort(567u );
49+
4650struct CompositionEngineTest : public testing ::Test {
4751 std::shared_ptr<TimeStats> mTimeStats ;
4852
@@ -52,6 +56,26 @@ struct CompositionEngineTest : public testing::Test {
5256 std::shared_ptr<mock::Output> mOutput1 {std::make_shared<StrictMock<mock::Output>>()};
5357 std::shared_ptr<mock::Output> mOutput2 {std::make_shared<StrictMock<mock::Output>>()};
5458 std::shared_ptr<mock::Output> mOutput3 {std::make_shared<StrictMock<mock::Output>>()};
59+
60+ std::array<impl::OutputCompositionState, 3 > mOutputStates ;
61+
62+ void SetUp () override {
63+ EXPECT_CALL (*mOutput1 , getDisplayId)
64+ .WillRepeatedly (Return (std::make_optional<DisplayId>(kDisplayId1 )));
65+ EXPECT_CALL (*mOutput2 , getDisplayId)
66+ .WillRepeatedly (Return (std::make_optional<DisplayId>(kDisplayId2 )));
67+ EXPECT_CALL (*mOutput3 , getDisplayId)
68+ .WillRepeatedly (Return (std::make_optional<DisplayId>(kDisplayId3 )));
69+
70+ // Most tests will depend on the outputs being enabled.
71+ for (auto & state : mOutputStates ) {
72+ state.isEnabled = true ;
73+ }
74+
75+ EXPECT_CALL (*mOutput1 , getState).WillRepeatedly (ReturnRef (mOutputStates [0 ]));
76+ EXPECT_CALL (*mOutput2 , getState).WillRepeatedly (ReturnRef (mOutputStates [1 ]));
77+ EXPECT_CALL (*mOutput3 , getState).WillRepeatedly (ReturnRef (mOutputStates [2 ]));
78+ }
5579};
5680
5781TEST_F (CompositionEngineTest, canInstantiateCompositionEngine) {
@@ -94,15 +118,15 @@ struct CompositionEnginePresentTest : public CompositionEngineTest {
94118 StrictMock<CompositionEnginePartialMock> mEngine ;
95119};
96120
97- TEST_F (CompositionEnginePresentTest, worksWithEmptyRequest ) {
121+ TEST_F (CompositionEnginePresentTest, zeroOutputs ) {
98122 // present() always calls preComposition() and postComposition()
99123 EXPECT_CALL (mEngine , preComposition (Ref (mRefreshArgs )));
100124 EXPECT_CALL (mEngine , postComposition (Ref (mRefreshArgs )));
101125
102126 mEngine .present (mRefreshArgs );
103127}
104128
105- TEST_F (CompositionEnginePresentTest, worksAsExpected ) {
129+ TEST_F (CompositionEnginePresentTest, threeOutputs ) {
106130 // Expect calls to in a certain sequence
107131 InSequence seq;
108132
@@ -114,9 +138,7 @@ TEST_F(CompositionEnginePresentTest, worksAsExpected) {
114138 EXPECT_CALL (*mOutput2 , prepare (Ref (mRefreshArgs ), _));
115139 EXPECT_CALL (*mOutput3 , prepare (Ref (mRefreshArgs ), _));
116140
117- // All of mOutput<i> are StrictMocks. If the flag is true, it will introduce
118- // calls to getDisplayId, which are not relevant to this test.
119- SET_FLAG_FOR_TEST (flags::multithreaded_present, false );
141+ EXPECT_CALL (*mOutput1 , supportsOffloadPresent).WillOnce (Return (false ));
120142
121143 // The last step is to actually present each output.
122144 EXPECT_CALL (*mOutput1 , present (Ref (mRefreshArgs )))
@@ -284,8 +306,6 @@ struct CompositionEngineOffloadTest : public testing::Test {
284306 std::shared_ptr<mock::Output> mVirtualDisplay {std::make_shared<StrictMock<mock::Output>>()};
285307 std::shared_ptr<mock::Output> mHalVirtualDisplay {std::make_shared<StrictMock<mock::Output>>()};
286308
287- static constexpr PhysicalDisplayId kDisplayId1 = PhysicalDisplayId::fromPort(123u );
288- static constexpr PhysicalDisplayId kDisplayId2 = PhysicalDisplayId::fromPort(234u );
289309 static constexpr GpuVirtualDisplayId kGpuVirtualDisplayId {789u };
290310 static constexpr HalVirtualDisplayId kHalVirtualDisplayId {456u };
291311
@@ -332,7 +352,6 @@ TEST_F(CompositionEngineOffloadTest, basic) {
332352 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (1 );
333353 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
334354
335- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
336355 setOutputs ({mDisplay1 , mDisplay2 });
337356
338357 mEngine .present (mRefreshArgs );
@@ -345,7 +364,6 @@ TEST_F(CompositionEngineOffloadTest, dependsOnSupport) {
345364 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (0 );
346365 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
347366
348- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
349367 setOutputs ({mDisplay1 , mDisplay2 });
350368
351369 mEngine .present (mRefreshArgs );
@@ -358,20 +376,6 @@ TEST_F(CompositionEngineOffloadTest, dependsOnSupport2) {
358376 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (0 );
359377 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
360378
361- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
362- setOutputs ({mDisplay1 , mDisplay2 });
363-
364- mEngine .present (mRefreshArgs );
365- }
366-
367- TEST_F (CompositionEngineOffloadTest, dependsOnFlag) {
368- EXPECT_CALL (*mDisplay1 , supportsOffloadPresent).Times (0 );
369- EXPECT_CALL (*mDisplay2 , supportsOffloadPresent).Times (0 );
370-
371- EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (0 );
372- EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
373-
374- SET_FLAG_FOR_TEST (flags::multithreaded_present, false );
375379 setOutputs ({mDisplay1 , mDisplay2 });
376380
377381 mEngine .present (mRefreshArgs );
@@ -382,7 +386,6 @@ TEST_F(CompositionEngineOffloadTest, oneDisplay) {
382386
383387 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (0 );
384388
385- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
386389 setOutputs ({mDisplay1 });
387390
388391 mEngine .present (mRefreshArgs );
@@ -397,7 +400,6 @@ TEST_F(CompositionEngineOffloadTest, virtualDisplay) {
397400 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
398401 EXPECT_CALL (*mVirtualDisplay , offloadPresentNextFrame).Times (0 );
399402
400- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
401403 setOutputs ({mDisplay1 , mDisplay2 , mVirtualDisplay });
402404
403405 mEngine .present (mRefreshArgs );
@@ -410,7 +412,6 @@ TEST_F(CompositionEngineOffloadTest, virtualDisplay2) {
410412 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (0 );
411413 EXPECT_CALL (*mVirtualDisplay , offloadPresentNextFrame).Times (0 );
412414
413- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
414415 setOutputs ({mDisplay1 , mVirtualDisplay });
415416
416417 mEngine .present (mRefreshArgs );
@@ -423,7 +424,6 @@ TEST_F(CompositionEngineOffloadTest, halVirtual) {
423424 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (1 );
424425 EXPECT_CALL (*mHalVirtualDisplay , offloadPresentNextFrame).Times (0 );
425426
426- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
427427 setOutputs ({mDisplay1 , mHalVirtualDisplay });
428428
429429 mEngine .present (mRefreshArgs );
@@ -440,7 +440,6 @@ TEST_F(CompositionEngineOffloadTest, ordering) {
440440 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (1 );
441441 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
442442
443- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
444443 setOutputs ({mVirtualDisplay , mHalVirtualDisplay , mDisplay1 , mDisplay2 });
445444
446445 mEngine .present (mRefreshArgs );
@@ -458,7 +457,6 @@ TEST_F(CompositionEngineOffloadTest, dependsOnEnabled) {
458457 EXPECT_CALL (*mDisplay1 , offloadPresentNextFrame).Times (0 );
459458 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
460459
461- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
462460 setOutputs ({mDisplay1 , mDisplay2 });
463461
464462 mEngine .present (mRefreshArgs );
@@ -478,7 +476,6 @@ TEST_F(CompositionEngineOffloadTest, disabledDisplaysDoNotPreventOthersFromOfflo
478476 EXPECT_CALL (*mDisplay2 , offloadPresentNextFrame).Times (0 );
479477 EXPECT_CALL (*mHalVirtualDisplay , offloadPresentNextFrame).Times (0 );
480478
481- SET_FLAG_FOR_TEST (flags::multithreaded_present, true );
482479 setOutputs ({mDisplay1 , mDisplay2 , mHalVirtualDisplay });
483480
484481 mEngine .present (mRefreshArgs );
0 commit comments