| /* |
| * Copyright 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include <compositionengine/impl/OutputLayer.h> |
| #include <compositionengine/mock/CompositionEngine.h> |
| #include <compositionengine/mock/Layer.h> |
| #include <compositionengine/mock/LayerFE.h> |
| #include <compositionengine/mock/Output.h> |
| #include <gtest/gtest.h> |
| |
| #include "MockHWC2.h" |
| #include "MockHWComposer.h" |
| |
| namespace android::compositionengine { |
| namespace { |
| |
| using testing::StrictMock; |
| |
| constexpr DisplayId DEFAULT_DISPLAY_ID = DisplayId{42}; |
| |
| class OutputLayerTest : public testing::Test { |
| public: |
| ~OutputLayerTest() override = default; |
| |
| compositionengine::mock::Output mOutput; |
| std::shared_ptr<compositionengine::mock::Layer> mLayer{ |
| new StrictMock<compositionengine::mock::Layer>()}; |
| sp<compositionengine::mock::LayerFE> mLayerFE{ |
| new StrictMock<compositionengine::mock::LayerFE>()}; |
| impl::OutputLayer mOutputLayer{mOutput, mLayer, mLayerFE}; |
| }; |
| |
| /* ------------------------------------------------------------------------ |
| * Basic construction |
| */ |
| |
| TEST_F(OutputLayerTest, canInstantiateOutputLayer) {} |
| |
| /* ------------------------------------------------------------------------ |
| * OutputLayer::initialize() |
| */ |
| |
| TEST_F(OutputLayerTest, initializingOutputLayerWithoutHwcDoesNothingInteresting) { |
| StrictMock<compositionengine::mock::CompositionEngine> compositionEngine; |
| |
| mOutputLayer.initialize(compositionEngine, std::nullopt); |
| |
| EXPECT_FALSE(mOutputLayer.getState().hwc); |
| } |
| |
| TEST_F(OutputLayerTest, initializingOutputLayerWithHwcDisplayCreatesHwcLayer) { |
| StrictMock<compositionengine::mock::CompositionEngine> compositionEngine; |
| StrictMock<android::mock::HWComposer> hwc; |
| StrictMock<HWC2::mock::Layer> hwcLayer; |
| |
| EXPECT_CALL(compositionEngine, getHwComposer()).WillOnce(ReturnRef(hwc)); |
| EXPECT_CALL(hwc, createLayer(DEFAULT_DISPLAY_ID)).WillOnce(Return(&hwcLayer)); |
| |
| mOutputLayer.initialize(compositionEngine, DEFAULT_DISPLAY_ID); |
| |
| const auto& state = mOutputLayer.getState(); |
| ASSERT_TRUE(state.hwc); |
| |
| const auto& hwcState = *state.hwc; |
| EXPECT_EQ(&hwcLayer, hwcState.hwcLayer.get()); |
| |
| EXPECT_CALL(hwc, destroyLayer(DEFAULT_DISPLAY_ID, &hwcLayer)); |
| mOutputLayer.editState().hwc.reset(); |
| } |
| |
| } // namespace |
| } // namespace android::compositionengine |