1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include <gtest/gtest.h> 18 19#include <utils/String8.h> 20 21#include <EGL/egl.h> 22#include <gui/Surface.h> 23 24 25namespace android { 26 27class EGLTest : public ::testing::Test { 28protected: 29 EGLDisplay mEglDisplay; 30 31protected: 32 EGLTest() : 33 mEglDisplay(EGL_NO_DISPLAY) { 34 } 35 36 virtual void SetUp() { 37 mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 38 ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 39 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 40 41 EGLint majorVersion; 42 EGLint minorVersion; 43 EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 44 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 45 RecordProperty("EglVersionMajor", majorVersion); 46 RecordProperty("EglVersionMajor", minorVersion); 47 } 48 49 virtual void TearDown() { 50 EGLBoolean success = eglTerminate(mEglDisplay); 51 ASSERT_EQ(EGL_TRUE, success); 52 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 53 } 54}; 55 56TEST_F(EGLTest, DISABLED_EGLConfigEightBitFirst) { 57 58 EGLint numConfigs; 59 EGLConfig config; 60 EGLBoolean success; 61 EGLint attrs[] = { 62 EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 63 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 64 EGL_NONE 65 }; 66 67 success = eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs); 68 ASSERT_EQ(EGL_TRUE, success); 69 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 70 ASSERT_GE(numConfigs, 1); 71 72 EGLint components[3]; 73 74 success = eglGetConfigAttrib(mEglDisplay, config, EGL_RED_SIZE, &components[0]); 75 ASSERT_EQ(EGL_TRUE, success); 76 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 77 success = eglGetConfigAttrib(mEglDisplay, config, EGL_GREEN_SIZE, &components[1]); 78 ASSERT_EQ(EGL_TRUE, success); 79 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 80 success = eglGetConfigAttrib(mEglDisplay, config, EGL_BLUE_SIZE, &components[2]); 81 ASSERT_EQ(EGL_TRUE, success); 82 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 83 84 EXPECT_GE(components[0], 8); 85 EXPECT_GE(components[1], 8); 86 EXPECT_GE(components[2], 8); 87} 88 89TEST_F(EGLTest, EGLTerminateSucceedsWithRemainingObjects) { 90 EGLint numConfigs; 91 EGLConfig config; 92 EGLint attrs[] = { 93 EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 94 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 95 EGL_RED_SIZE, 8, 96 EGL_GREEN_SIZE, 8, 97 EGL_BLUE_SIZE, 8, 98 EGL_ALPHA_SIZE, 8, 99 EGL_NONE 100 }; 101 EXPECT_TRUE(eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs)); 102 103 struct DummyConsumer : public BnConsumerListener { 104 virtual void onFrameAvailable(const BufferItem& /* item */) {} 105 virtual void onBuffersReleased() {} 106 virtual void onSidebandStreamChanged() {} 107 }; 108 109 // Create a EGLSurface 110 sp<IGraphicBufferProducer> producer; 111 sp<IGraphicBufferConsumer> consumer; 112 BufferQueue::createBufferQueue(&producer, &consumer); 113 consumer->consumerConnect(new DummyConsumer, false); 114 sp<Surface> mSTC = new Surface(producer); 115 sp<ANativeWindow> mANW = mSTC; 116 117 EGLSurface eglSurface = eglCreateWindowSurface(mEglDisplay, config, 118 mANW.get(), NULL); 119 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 120 ASSERT_NE(EGL_NO_SURFACE, eglSurface) ; 121 122 // do not destroy eglSurface 123 // eglTerminate is called in the tear down and should destroy it for us 124} 125 126TEST_F(EGLTest, EGLConfigRGBA8888First) { 127 128 EGLint numConfigs; 129 EGLConfig config; 130 EGLBoolean success; 131 EGLint attrs[] = { 132 EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 133 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 134 EGL_RED_SIZE, 8, 135 EGL_GREEN_SIZE, 8, 136 EGL_BLUE_SIZE, 8, 137 EGL_ALPHA_SIZE, 8, 138 EGL_NONE 139 }; 140 141 success = eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs); 142 ASSERT_EQ(EGL_TRUE, success); 143 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 144 ASSERT_GE(numConfigs, 1); 145 146 EGLint components[4]; 147 148 success = eglGetConfigAttrib(mEglDisplay, config, EGL_RED_SIZE, &components[0]); 149 ASSERT_EQ(EGL_TRUE, success); 150 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 151 success = eglGetConfigAttrib(mEglDisplay, config, EGL_GREEN_SIZE, &components[1]); 152 ASSERT_EQ(EGL_TRUE, success); 153 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 154 success = eglGetConfigAttrib(mEglDisplay, config, EGL_BLUE_SIZE, &components[2]); 155 ASSERT_EQ(EGL_TRUE, success); 156 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 157 success = eglGetConfigAttrib(mEglDisplay, config, EGL_ALPHA_SIZE, &components[3]); 158 ASSERT_EQ(EGL_TRUE, success); 159 ASSERT_EQ(EGL_SUCCESS, eglGetError()); 160 161 EXPECT_GE(components[0], 8); 162 EXPECT_GE(components[1], 8); 163 EXPECT_GE(components[2], 8); 164 EXPECT_GE(components[3], 8); 165} 166 167 168} 169