/* * 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. */ // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wconversion" #pragma clang diagnostic ignored "-Wextra" #undef LOG_TAG #define LOG_TAG "CachingTest" #include #include #include #include "BufferStateLayer.h" namespace android { class SlotGenerationTest : public testing::Test { protected: sp mHwcSlotGenerator = sp::make(); sp mBuffer1{new GraphicBuffer(1, 1, HAL_PIXEL_FORMAT_RGBA_8888, 1, 0)}; sp mBuffer2{new GraphicBuffer(1, 1, HAL_PIXEL_FORMAT_RGBA_8888, 1, 0)}; sp mBuffer3{new GraphicBuffer(10, 10, HAL_PIXEL_FORMAT_RGBA_8888, 1, 0)}; }; TEST_F(SlotGenerationTest, getHwcCacheSlot_Invalid) { sp binder = new BBinder(); // test getting invalid client_cache_id client_cache_t id; uint32_t slot = mHwcSlotGenerator->getHwcCacheSlot(id); EXPECT_EQ(BufferQueue::INVALID_BUFFER_SLOT, slot); } TEST_F(SlotGenerationTest, getHwcCacheSlot_Basic) { sp binder = new BBinder(); client_cache_t id; id.token = binder; id.id = 0; uint32_t slot = mHwcSlotGenerator->getHwcCacheSlot(id); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - 1, slot); client_cache_t idB; idB.token = binder; idB.id = 1; slot = mHwcSlotGenerator->getHwcCacheSlot(idB); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - 2, slot); slot = mHwcSlotGenerator->getHwcCacheSlot(idB); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - 2, slot); slot = mHwcSlotGenerator->getHwcCacheSlot(id); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - 1, slot); } TEST_F(SlotGenerationTest, getHwcCacheSlot_Reuse) { sp binder = new BBinder(); std::vector ids; uint32_t cacheId = 0; // fill up cache for (uint32_t i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) { client_cache_t id; id.token = binder; id.id = cacheId; ids.push_back(id); uint32_t slot = mHwcSlotGenerator->getHwcCacheSlot(id); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - (i + 1), slot); cacheId++; } for (uint32_t i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) { uint32_t slot = mHwcSlotGenerator->getHwcCacheSlot(ids[i]); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - (i + 1), slot); } for (uint32_t i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) { client_cache_t id; id.token = binder; id.id = cacheId; uint32_t slot = mHwcSlotGenerator->getHwcCacheSlot(id); EXPECT_EQ(BufferQueue::NUM_BUFFER_SLOTS - (i + 1), slot); cacheId++; } } } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra"