198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis/* 298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * Copyright (C) 2011 The Android Open Source Project 398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * 498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * Licensed under the Apache License, Version 2.0 (the "License"); 598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * you may not use this file except in compliance with the License. 698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * You may obtain a copy of the License at 798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * 898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * http://www.apache.org/licenses/LICENSE-2.0 998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * 1098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * Unless required by applicable law or agreed to in writing, software 1198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * distributed under the License is distributed on an "AS IS" BASIS, 1298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * See the License for the specific language governing permissions and 1498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis * limitations under the License. 1598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis */ 1698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 1798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#define LOG_TAG "EGL_test" 1898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis//#define LOG_NDEBUG 0 1998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 2098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#include <gtest/gtest.h> 2198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 2298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#include <utils/Log.h> 2398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 24454c92e07e7248b6d41c547842031ae37b053950Kalle Raita#include <android-base/test_utils.h> 25454c92e07e7248b6d41c547842031ae37b053950Kalle Raita 2698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#include "egl_cache.h" 2798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#include "egl_display.h" 2898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 29454c92e07e7248b6d41c547842031ae37b053950Kalle Raita#include <memory> 30454c92e07e7248b6d41c547842031ae37b053950Kalle Raita 3198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisnamespace android { 3298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 3398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisclass EGLCacheTest : public ::testing::Test { 3498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisprotected: 3598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis virtual void SetUp() { 3698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache = egl_cache_t::get(); 3798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis } 3898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 3998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis virtual void TearDown() { 4098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->setCacheFilename(""); 4198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->terminate(); 4298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis } 4398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 4498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis egl_cache_t* mCache; 4598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}; 4698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 4798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheTest, UninitializedCacheAlwaysMisses) { 483bded9177b579d96d72397d73b8f85bba47ec438Chih-Hung Hsieh uint8_t buf[4] = { 0xee, 0xee, 0xee, 0xee }; 4998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->setBlob("abcd", 4, "efgh", 4); 5098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0, mCache->getBlob("abcd", 4, buf, 4)); 5198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[0]); 5298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[1]); 5398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[2]); 5498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[3]); 5598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis} 5698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 5798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheTest, InitializedCacheAlwaysHits) { 583bded9177b579d96d72397d73b8f85bba47ec438Chih-Hung Hsieh uint8_t buf[4] = { 0xee, 0xee, 0xee, 0xee }; 5998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY)); 6098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->setBlob("abcd", 4, "efgh", 4); 6198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(4, mCache->getBlob("abcd", 4, buf, 4)); 6298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('e', buf[0]); 6398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('f', buf[1]); 6498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('g', buf[2]); 6598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('h', buf[3]); 6698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis} 6798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 6898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheTest, TerminatedCacheAlwaysMisses) { 693bded9177b579d96d72397d73b8f85bba47ec438Chih-Hung Hsieh uint8_t buf[4] = { 0xee, 0xee, 0xee, 0xee }; 7098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY)); 7198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->setBlob("abcd", 4, "efgh", 4); 7298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->terminate(); 7398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0, mCache->getBlob("abcd", 4, buf, 4)); 7498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[0]); 7598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[1]); 7698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[2]); 7798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(0xee, buf[3]); 7898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis} 7998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 8098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisclass EGLCacheSerializationTest : public EGLCacheTest { 8198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 8298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisprotected: 8398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 8498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis virtual void SetUp() { 8598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis EGLCacheTest::SetUp(); 86454c92e07e7248b6d41c547842031ae37b053950Kalle Raita mTempFile.reset(new TemporaryFile()); 8798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis } 8898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 8998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis virtual void TearDown() { 90454c92e07e7248b6d41c547842031ae37b053950Kalle Raita mTempFile.reset(nullptr); 9198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis EGLCacheTest::TearDown(); 9298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis } 9398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 94454c92e07e7248b6d41c547842031ae37b053950Kalle Raita std::unique_ptr<TemporaryFile> mTempFile; 9598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}; 9698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 9798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheSerializationTest, ReinitializedCacheContainsValues) { 983bded9177b579d96d72397d73b8f85bba47ec438Chih-Hung Hsieh uint8_t buf[4] = { 0xee, 0xee, 0xee, 0xee }; 99454c92e07e7248b6d41c547842031ae37b053950Kalle Raita mCache->setCacheFilename(&mTempFile->path[0]); 10098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY)); 10198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->setBlob("abcd", 4, "efgh", 4); 10298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->terminate(); 10398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY)); 10498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ(4, mCache->getBlob("abcd", 4, buf, 4)); 10598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('e', buf[0]); 10698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('f', buf[1]); 10798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('g', buf[2]); 10898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis ASSERT_EQ('h', buf[3]); 10998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis} 11098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis 11198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis} 112