blob: a4364c688cbeb4b226a1080d02e6e60ff92fb9f2 [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() {}
Jesse Hall85c0fee2014-03-13 14:34:28 -0700106 virtual void onSidebandStreamChanged() {}
Mathias Agopian595264f2013-07-16 22:56:09 -0700107 };
108
Daniel Lam1cbcb982012-04-16 22:21:02 -0700109 // Create a EGLSurface
Dan Stoza5603a2f2014-04-07 13:41:37 -0700110 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);
Daniel Lam1cbcb982012-04-16 22:21:02 -0700115 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
Mathias Agopian2f739f82011-07-07 14:54:30 -0700126TEST_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}