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
2498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#include "egl_cache.h"
2598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis#include "egl_display.h"
2698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
2798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisnamespace android {
2898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
2998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisclass EGLCacheTest : public ::testing::Test {
3098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisprotected:
3198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    virtual void SetUp() {
3298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        mCache = egl_cache_t::get();
3398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    }
3498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
3598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    virtual void TearDown() {
3698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        mCache->setCacheFilename("");
3798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        mCache->terminate();
3898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    }
3998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
4098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    egl_cache_t* mCache;
4198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis};
4298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
4398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheTest, UninitializedCacheAlwaysMisses) {
4498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    char buf[4] = { 0xee, 0xee, 0xee, 0xee };
4598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->setBlob("abcd", 4, "efgh", 4);
4698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0, mCache->getBlob("abcd", 4, buf, 4));
4798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[0]);
4898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[1]);
4998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[2]);
5098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[3]);
5198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}
5298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
5398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheTest, InitializedCacheAlwaysHits) {
5498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    char buf[4] = { 0xee, 0xee, 0xee, 0xee };
5598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY));
5698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->setBlob("abcd", 4, "efgh", 4);
5798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(4, mCache->getBlob("abcd", 4, buf, 4));
5898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('e', buf[0]);
5998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('f', buf[1]);
6098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('g', buf[2]);
6198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('h', buf[3]);
6298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}
6398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
6498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheTest, TerminatedCacheAlwaysMisses) {
6598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    char buf[4] = { 0xee, 0xee, 0xee, 0xee };
6698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY));
6798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->setBlob("abcd", 4, "efgh", 4);
6898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->terminate();
6998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0, mCache->getBlob("abcd", 4, buf, 4));
7098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[0]);
7198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[1]);
7298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[2]);
7398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(0xee, buf[3]);
7498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}
7598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
7698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisclass EGLCacheSerializationTest : public EGLCacheTest {
7798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
7898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennisprotected:
7998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
8098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    virtual void SetUp() {
8198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        EGLCacheTest::SetUp();
8298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
8398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        char* tn = tempnam("/sdcard", "EGL_test-cache-");
8498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        mFilename = tn;
8598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        free(tn);
8698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    }
8798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
8898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    virtual void TearDown() {
8998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        unlink(mFilename.string());
9098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis        EGLCacheTest::TearDown();
9198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    }
9298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
9398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    String8 mFilename;
9498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis};
9598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
9698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie GennisTEST_F(EGLCacheSerializationTest, ReinitializedCacheContainsValues) {
9798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    char buf[4] = { 0xee, 0xee, 0xee, 0xee };
9898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->setCacheFilename(mFilename);
9998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY));
10098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->setBlob("abcd", 4, "efgh", 4);
10198c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->terminate();
10298c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    mCache->initialize(egl_display_t::get(EGL_DEFAULT_DISPLAY));
10398c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ(4, mCache->getBlob("abcd", 4, buf, 4));
10498c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('e', buf[0]);
10598c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('f', buf[1]);
10698c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('g', buf[2]);
10798c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis    ASSERT_EQ('h', buf[3]);
10898c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}
10998c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis
11098c6383580f94bb7ff9cc9a7cc24d8b8519e484aJamie Gennis}
111