blob: f7dcf6f08e51996d54851657ffd00a50bfb8202e [file] [log] [blame]
/*
* 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