1134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis/* 2134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Copyright (C) 2011 The Android Open Source Project 3134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * 4134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Licensed under the Apache License, Version 2.0 (the "License"); 5134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * you may not use this file except in compliance with the License. 6134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * You may obtain a copy of the License at 7134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * 8134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * http://www.apache.org/licenses/LICENSE-2.0 9134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * 10134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Unless required by applicable law or agreed to in writing, software 11134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * distributed under the License is distributed on an "AS IS" BASIS, 12134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * See the License for the specific language governing permissions and 14134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * limitations under the License. 15134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis */ 16134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 17fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#define LOG_TAG "SurfaceTextureClient_test" 18fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis//#define LOG_NDEBUG 0 19fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 205c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis#include <EGL/egl.h> 21134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <gtest/gtest.h> 22e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/Surface.h> 23d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis#include <system/graphics.h> 24fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Log.h> 25fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Thread.h> 26134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 27134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisnamespace android { 28134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 29134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisclass SurfaceTextureClientTest : public ::testing::Test { 30134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisprotected: 317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian SurfaceTextureClientTest(): 327a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay(EGL_NO_DISPLAY), 337a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface(EGL_NO_SURFACE), 347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext(EGL_NO_CONTEXT) { 357a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 37134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void SetUp() { 38fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 39fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 40fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("Begin test: %s.%s", testInfo->test_case_name(), 41fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 42fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 432adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden mST = new GLConsumer(123); 44e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian mSTC = new Surface(mST->getBufferQueue()); 458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW = mSTC; 467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // We need a valid GL context so we can test updateTexImage() 487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // This initializes EGL and create a dummy GL context with a 497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // pbuffer render target. 507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint majorVersion, minorVersion; 557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 567a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLConfig myConfig; 597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint numConfigs = 0; 607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), 617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian &myConfig, 1, &numConfigs)); 627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 64993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian mEglConfig = myConfig; 657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint pbufferAttribs[] = { 667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_WIDTH, 16, 677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_HEIGHT, 16, 687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE }; 697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface = eglCreatePbufferSurface(mEglDisplay, myConfig, pbufferAttribs); 707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_SURFACE, mEglSurface); 727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 0); 747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)); 787a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 79134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 80134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 81134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void TearDown() { 82134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST.clear(); 83134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC.clear(); 848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW.clear(); 858b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroyContext(mEglDisplay, mEglContext); 887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroySurface(mEglDisplay, mEglSurface); 897a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglTerminate(mEglDisplay); 90fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 91fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 92fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 93fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("End test: %s.%s", testInfo->test_case_name(), 94fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 967a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 977a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual EGLint const* getConfigAttribs() { 987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian static EGLint sDefaultConfigAttribs[] = { 99993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGL_SURFACE_TYPE, EGL_PBUFFER_BIT | EGL_WINDOW_BIT, 1007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE 1017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 1027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 1037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return sDefaultConfigAttribs; 104134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 105134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 1062adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 107e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<Surface> mSTC; 1088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<ANativeWindow> mANW; 1098b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 1107a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay mEglDisplay; 1117a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface mEglSurface; 1127a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext mEglContext; 113993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLConfig mEglConfig; 114134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis}; 115134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 116bae774eb20bebd409441b93386b51bccda75f546Jamie GennisTEST_F(SurfaceTextureClientTest, GetISurfaceTextureIsNotNull) { 117cf0b8c85fb0106751256dba7821f86b5ad03126cMathias Agopian sp<IGraphicBufferProducer> ist(mSTC->getIGraphicBufferProducer()); 118bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis ASSERT_TRUE(ist != NULL); 119bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis} 120bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis 121134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTextureClientTest, QueuesToWindowCompositorIsFalse) { 122134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 1238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 124134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 125134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 126134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(0, result); 127134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 128134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 129391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie GennisTEST_F(SurfaceTextureClientTest, ConcreteTypeIsSurfaceTextureClient) { 130391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis int result = -123; 1318b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); 132391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NO_ERROR, err); 133e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian EXPECT_EQ(NATIVE_WINDOW_SURFACE, result); 134391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis} 135391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis 1361b528fb9d818044973abf656c9d2d3c1192bcfdcJamie GennisTEST_F(SurfaceTextureClientTest, EglCreateWindowSurfaceSucceeds) { 1375c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 1385c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1395c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, dpy); 1405c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1415c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint majorVersion; 1425c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint minorVersion; 1435c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglInitialize(dpy, &majorVersion, &minorVersion)); 1445c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1455c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1465c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLConfig myConfig = {0}; 1475c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint numConfigs = 0; 1485c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint configAttribs[] = { 1495c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 1505c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 1515c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RED_SIZE, 8, 1525c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_GREEN_SIZE, 8, 1535c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_BLUE_SIZE, 8, 1545c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_ALPHA_SIZE, 8, 1555c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_DEPTH_SIZE, 16, 1565c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_STENCIL_SIZE, 8, 1575c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_NONE }; 1585c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglChooseConfig(dpy, configAttribs, &myConfig, 1, 1595c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis &numConfigs)); 1605c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1615c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EGLSurface eglSurface = eglCreateWindowSurface(dpy, myConfig, mANW.get(), 1635c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis NULL); 164eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 165eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 1665c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 167fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis if (eglSurface != EGL_NO_SURFACE) { 168fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis eglDestroySurface(dpy, eglSurface); 169fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis } 170fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 1715c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis eglTerminate(dpy); 1725c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis} 1735c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 174993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias AgopianTEST_F(SurfaceTextureClientTest, EglSwapBuffersAbandonErrorIsEglBadSurface) { 175993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 176993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLSurface eglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, mANW.get(), NULL); 177993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 178993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 179993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 180993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLBoolean success = eglMakeCurrent(mEglDisplay, eglSurface, eglSurface, mEglContext); 181ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_TRUE(success); 182993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 183993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian glClear(GL_COLOR_BUFFER_BIT); 184993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglSwapBuffers(mEglDisplay, eglSurface); 185ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_TRUE(success); 186993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 187993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian mST->abandon(); 188993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 189993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian glClear(GL_COLOR_BUFFER_BIT); 190993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglSwapBuffers(mEglDisplay, eglSurface); 191ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_FALSE(success); 192993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_EQ(EGL_BAD_SURFACE, eglGetError()); 193993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 194993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext); 195ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis ASSERT_TRUE(success); 196993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 197993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian if (eglSurface != EGL_NO_SURFACE) { 198993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian eglDestroySurface(mEglDisplay, eglSurface); 199993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian } 200993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian} 201993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 202a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryInvalidSizesFail) { 2038b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, 0, 0)); 2048b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, -1, 0)); 2058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, -1)); 2068b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, -1, 0)); 2078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 8, 0)); 2088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 8, 0, 0)); 209a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 210a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 211a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, DefaultGeometryValues) { 212697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 213d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 214a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 215a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 216a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 217d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 218a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 219a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 220a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryCanBeSet) { 221697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, PIXEL_FORMAT_RGB_565)); 223d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 224a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 225a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 226a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 227d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 228a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 229a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 230a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryDefaultSizeSetFormat) { 231697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2328b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 233d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 234a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 235a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 236a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 237d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 238a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 239a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 240a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySetSizeDefaultFormat) { 241697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2428b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 243d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 244a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 245a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 246a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 247d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 248a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 249a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 250a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeUnset) { 251697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2528b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 253d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 254a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 255a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 256a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 257d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, 0)); 259d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 260a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 261a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 262a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 263d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 264a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 265a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 266a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeChangedWithoutFormat) { 267697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2688b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 269d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 270a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 271a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 272a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 273d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2744697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 275d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 276a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 277a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 278a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 279d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 280a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 281a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 282a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSize) { 2832adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> st(mST); 284697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 285a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(OK, st->setDefaultBufferSize(16, 8)); 286d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 287a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 288a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 289a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 290d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 291a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 292a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 293a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeAfterDequeue) { 294697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 2958b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 296d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 297d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 298a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 299d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 300d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 3018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 302d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 303d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 304a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 305a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 306a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 307a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 308a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 309d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 310d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 311a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 312a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 313a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeVsGeometry) { 314697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 3158b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3168b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 317d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 318d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 319a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 320a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 321a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 322a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 323a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 324d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 325d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 3268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 12, 24, 0)); 327d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 328d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 329a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 330a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[0]->width); 331a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[1]->width); 332a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[0]->height); 333a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[1]->height); 334d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 335d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 336a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 337a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 3387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureTooManyUpdateTexImage) { 3397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3408b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(false)); 3418b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 343d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 344d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3468b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3488b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 351d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 352d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 353d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 354d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeSlowRetire) { 3627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3648b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 365d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 366d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 367d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 3687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 371d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 372d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 373d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 3748b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3758b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3768b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3778b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3817a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeFastRetire) { 3837a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3858b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 386d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 387d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 388d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 3897a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3917a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 392d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3948b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 395d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 398d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 3998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4008b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeDQQR) { 4047a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4068b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 4077a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 408d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 409d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 4108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 4127a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 413d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 4147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 415d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4168b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4178b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 419d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 421d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4268cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// XXX: We currently have no hardware that properly handles dequeuing the 4278cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// buffer that is currently bound to the texture. 4288cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeDequeueCurrent) { 4297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* firstBuf; 4318b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4328b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 433d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &firstBuf)); 434d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), firstBuf, -1)); 4358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4368b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), firstBuf); 437d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 438d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 439d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 440d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 441d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 442d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 4447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 4457a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 4467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(firstBuf, buf[2]); 4477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeMinUndequeued) { 4507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4518b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4528b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 453c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4548b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis // We should be able to dequeue all the buffers before we've queued mANWy. 455d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 456d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 457d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 459d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 460d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 465d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 467c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // Once we've queued a buffer, however we should not be able to dequeue more 468c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // than (buffer-count - MIN_UNDEQUEUED_BUFFERS), which is 2 in this case. 469d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(-EBUSY, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 470c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 471d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 472d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 4737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 475d72f233ffa125856a44976a50a66ceb669f49ab2Jamie GennisTEST_F(SurfaceTextureClientTest, SetCropCropsCrop) { 476d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_rect_t rect = {-2, -13, 40, 18}; 477d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis native_window_set_crop(mANW.get(), &rect); 478d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 479d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 4, 4)); 480d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 481d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_buffer_t* buf; 482d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 483d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf, -1)); 484d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 485d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 486d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect crop = mST->getCurrentCrop(); 487d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.left); 488d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.top); 489d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.right); 490d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.bottom); 491d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis} 492d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 4938dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// XXX: This is not expected to pass until the synchronization hacks are removed 4948dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// from the SurfaceTexture class. 4958dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) { 4967a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian class MyThread : public Thread { 4972adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 4987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext ctx; 4997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface sur; 5007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay dpy; 5017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian bool mBufferRetired; 5027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex mLock; 5037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual bool threadLoop() { 5047a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5057a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian usleep(20000); 5067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mBufferRetired = true; 5097a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5107a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return false; 5117a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5127a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian public: 5132adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden MyThread(const sp<GLConsumer>& mST) 5148b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis : mST(mST), mBufferRetired(false) { 5157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ctx = eglGetCurrentContext(); 5167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sur = eglGetCurrentSurface(EGL_DRAW); 5177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian dpy = eglGetCurrentDisplay(); 5187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5197a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ~MyThread() { 5217a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5227a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5237a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian void bufferDequeued() { 5247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(true, mBufferRetired); 5267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5277a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 5287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 5308b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 5318b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 5327a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // dequeue/queue/update so we have a current buffer 533d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 534d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5378b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread* thread = new MyThread(mST); 5387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sp<Thread> threadBase(thread); 5397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 540d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 541d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 542e122079be632b849a71181d83a6d38b701f642f5Mathias Agopian thread->run(); 543d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 544d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 545d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 546d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 5477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->bufferDequeued(); 5487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->requestExitAndWait(); 5497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 5507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 55152226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixReturnsVerticalFlip) { 55252226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 55352226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5548b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 555d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 556d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 55952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 56152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 56252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 56352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 56452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 56652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 56752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 56852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 56952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 57152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 57252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 57352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 57452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 57652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 57752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 57852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 57952226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 58052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58152226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffers) { 58252226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 58352226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 585d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 586d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5888b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 5898b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 59052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 59252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 59352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 59452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 59552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 59752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 59852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 59952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 60052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 60252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 60352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 60452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 60552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 60752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 60852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 60952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 61052226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 61152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 61252226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWithCrop) { 61352226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 61452226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 61552226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_rect_t crop; 61652226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.left = 0; 61752226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.top = 0; 61852226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.right = 5; 61952226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.bottom = 5; 62052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 6228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 8, 8, 0)); 623d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 6248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_crop(mANW.get(), &crop)); 625d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 6268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 6278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 6288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 62952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6304697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis // This accounts for the .5 texel shrink for each edge that's included in the 63152226048095c2eb27ede0c3389626df270a0abffJamie Gennis // transform matrix to avoid texturing outside the crop region. 6324697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.5, mtx[0]); 63352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 63452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 63552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 63652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 63752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 6384697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(-0.5, mtx[5]); 63952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 64052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 64152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 64252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 64352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 64452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 64552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 64652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6474697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.0625f, mtx[12]); 6484697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.5625f, mtx[13]); 64952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 65052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 651134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 65252226048095c2eb27ede0c3389626df270a0abffJamie Gennis 653a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// This test verifies that the buffer format can be queried immediately after 654a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// it is set. 65507ed1a94bcad9b78b20f74f890d4271099da3a97Jamie GennisTEST_F(SurfaceTextureClientTest, QueryFormatAfterSettingWorks) { 656a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis sp<ANativeWindow> anw(mSTC); 657a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmts[] = { 658a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis // RGBA_8888 should not come first, as it's the default 659a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBX_8888, 660a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_8888, 661a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_888, 662a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_565, 663a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_BGRA_8888, 664a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_5551, 665a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_4444, 666a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_YV12, 667a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis }; 668a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 669a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis const int numFmts = (sizeof(fmts) / sizeof(fmts[0])); 670a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis for (int i = 0; i < numFmts; i++) { 671a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmt = -1; 672a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(anw.get(), 0, 0, fmts[i])); 673a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt)); 674a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis EXPECT_EQ(fmts[i], fmt); 675a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis } 676a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis} 677a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 678c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisclass MultiSurfaceTextureClientTest : public ::testing::Test { 679c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 680c8251a06df70de70d45ac477af816dcee7580205Jamie Gennispublic: 681c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis MultiSurfaceTextureClientTest() : 682c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay(EGL_NO_DISPLAY), 683c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext(EGL_NO_CONTEXT) { 684c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 685c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = EGL_NO_CONTEXT; 686c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 687c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 688c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 689c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisprotected: 690c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 691c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis enum { NUM_SURFACE_TEXTURES = 32 }; 692c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 693c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void SetUp() { 694c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 695c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 696c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 697c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 698c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint majorVersion, minorVersion; 699c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 700c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 701c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 702c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLConfig myConfig; 703c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint numConfigs = 0; 704c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint configAttribs[] = { 705c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 706c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NONE 707c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis }; 708c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglChooseConfig(mEglDisplay, configAttribs, &myConfig, 1, 709c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis &numConfigs)); 710c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 711c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 712c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 713c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 0); 714c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 715c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 716c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 717c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 7182adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> st(new GLConsumer(i)); 719e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<Surface> stc(new Surface(st->getBufferQueue())); 720c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = eglCreateWindowSurface(mEglDisplay, myConfig, 721c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis static_cast<ANativeWindow*>(stc.get()), NULL); 722c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 723c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_SURFACE, mEglSurfaces[i]); 724c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 725c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 726c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 727c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void TearDown() { 728c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, 729c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NO_CONTEXT); 730c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 731c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 732c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglSurfaces[i] != EGL_NO_SURFACE) { 733c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroySurface(mEglDisplay, mEglSurfaces[i]); 734c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 735c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 736c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 737c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglContext != EGL_NO_CONTEXT) { 738c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroyContext(mEglDisplay, mEglContext); 739c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 740c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 741c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglDisplay != EGL_NO_DISPLAY) { 742c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglTerminate(mEglDisplay); 743c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 744c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 745c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 746c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLDisplay mEglDisplay; 747c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLSurface mEglSurfaces[NUM_SURFACE_TEXTURES]; 748c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLContext mEglContext; 749c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis}; 750c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 751c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// XXX: This test is disabled because it causes a hang on some devices. See bug 752c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// 5015672. 753c8251a06df70de70d45ac477af816dcee7580205Jamie GennisTEST_F(MultiSurfaceTextureClientTest, DISABLED_MakeCurrentBetweenSurfacesWorks) { 754c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int iter = 0; iter < 8; iter++) { 755c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 756c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, mEglSurfaces[i], mEglSurfaces[i], 757c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext); 758c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis glClear(GL_COLOR_BUFFER_BIT); 759c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglSwapBuffers(mEglDisplay, mEglSurfaces[i]); 760c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 761c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 762c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis} 763c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 76452226048095c2eb27ede0c3389626df270a0abffJamie Gennis} // namespace android 765