• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
25 namespace android {
26 
27 class EGLTest : public ::testing::Test {
28 protected:
29     EGLDisplay mEglDisplay;
30 
31 protected:
EGLTest()32     EGLTest() :
33             mEglDisplay(EGL_NO_DISPLAY) {
34     }
35 
SetUp()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 
TearDown()49     virtual void TearDown() {
50         EGLBoolean success = eglTerminate(mEglDisplay);
51         ASSERT_EQ(EGL_TRUE, success);
52         ASSERT_EQ(EGL_SUCCESS, eglGetError());
53     }
54 };
55 
TEST_F(EGLTest,DISABLED_EGLConfigEightBitFirst)56 TEST_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 
TEST_F(EGLTest,EGLTerminateSucceedsWithRemainingObjects)89 TEST_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() {}
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 
TEST_F(EGLTest,EGLConfigRGBA8888First)126 TEST_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