blob: f6644fbfdb644eb3e0e107bcb09c961833ffcef3 [file] [log] [blame]
Mathias Agopian2f739f82011-07-07 14:54:30 -07001/*
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>
Mathias Agopiane3c697f2013-02-14 17:11:02 -080022#include <gui/Surface.h>
Daniel Lam1cbcb982012-04-16 22:21:02 -070023
Mathias Agopian2f739f82011-07-07 14:54:30 -070024
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
Daniel Lam1cbcb982012-04-16 22:21:02 -070089TEST_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
Mathias Agopiana4e19522013-07-31 20:09:53 -0700103 struct DummyConsumer : public BnConsumerListener {
Mathias Agopian595264f2013-07-16 22:56:09 -0700104 virtual void onFrameAvailable() {}
105 virtual void onBuffersReleased() {}
106 };
107
Daniel Lam1cbcb982012-04-16 22:21:02 -0700108 // Create a EGLSurface
109 sp<BufferQueue> bq = new BufferQueue();
Mathias Agopian595264f2013-07-16 22:56:09 -0700110 bq->consumerConnect(new DummyConsumer, false);
Mathias Agopiane3c697f2013-02-14 17:11:02 -0800111 sp<Surface> mSTC = new Surface(static_cast<sp<IGraphicBufferProducer> >( bq));
Daniel Lam1cbcb982012-04-16 22:21:02 -0700112 sp<ANativeWindow> mANW = mSTC;
113
114 EGLSurface eglSurface = eglCreateWindowSurface(mEglDisplay, config,
115 mANW.get(), NULL);
116 ASSERT_EQ(EGL_SUCCESS, eglGetError());
117 ASSERT_NE(EGL_NO_SURFACE, eglSurface) ;
118
119 // do not destroy eglSurface
120 // eglTerminate is called in the tear down and should destroy it for us
121}
122
Mathias Agopian2f739f82011-07-07 14:54:30 -0700123TEST_F(EGLTest, EGLConfigRGBA8888First) {
124
125 EGLint numConfigs;
126 EGLConfig config;
127 EGLBoolean success;
128 EGLint attrs[] = {
129 EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
130 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
131 EGL_RED_SIZE, 8,
132 EGL_GREEN_SIZE, 8,
133 EGL_BLUE_SIZE, 8,
134 EGL_ALPHA_SIZE, 8,
135 EGL_NONE
136 };
137
138 success = eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs);
139 ASSERT_EQ(EGL_TRUE, success);
140 ASSERT_EQ(EGL_SUCCESS, eglGetError());
141 ASSERT_GE(numConfigs, 1);
142
143 EGLint components[4];
144
145 success = eglGetConfigAttrib(mEglDisplay, config, EGL_RED_SIZE, &components[0]);
146 ASSERT_EQ(EGL_TRUE, success);
147 ASSERT_EQ(EGL_SUCCESS, eglGetError());
148 success = eglGetConfigAttrib(mEglDisplay, config, EGL_GREEN_SIZE, &components[1]);
149 ASSERT_EQ(EGL_TRUE, success);
150 ASSERT_EQ(EGL_SUCCESS, eglGetError());
151 success = eglGetConfigAttrib(mEglDisplay, config, EGL_BLUE_SIZE, &components[2]);
152 ASSERT_EQ(EGL_TRUE, success);
153 ASSERT_EQ(EGL_SUCCESS, eglGetError());
154 success = eglGetConfigAttrib(mEglDisplay, config, EGL_ALPHA_SIZE, &components[3]);
155 ASSERT_EQ(EGL_TRUE, success);
156 ASSERT_EQ(EGL_SUCCESS, eglGetError());
157
158 EXPECT_GE(components[0], 8);
159 EXPECT_GE(components[1], 8);
160 EXPECT_GE(components[2], 8);
161 EXPECT_GE(components[3], 8);
162}
163
164
165}