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> 21c6bae007e6e29b585fc1207f84b378a480006173Mathias Agopian#include <GLES2/gl2.h> 22c6bae007e6e29b585fc1207f84b378a480006173Mathias Agopian 23134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <gtest/gtest.h> 24c6bae007e6e29b585fc1207f84b378a480006173Mathias Agopian#include <gui/GLConsumer.h> 25e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/Surface.h> 26d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis#include <system/graphics.h> 27fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Log.h> 28fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Thread.h> 29134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 30134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisnamespace android { 31134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 32134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisclass SurfaceTextureClientTest : public ::testing::Test { 33134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisprotected: 347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian SurfaceTextureClientTest(): 357a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay(EGL_NO_DISPLAY), 367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface(EGL_NO_SURFACE), 377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext(EGL_NO_CONTEXT) { 387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 40134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void SetUp() { 41fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 42fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 43fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("Begin test: %s.%s", testInfo->test_case_name(), 44fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 45fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 468f938a53385a3c6d1c6aa24b3f38437bb2cc47aeMathias Agopian sp<BufferQueue> bq = new BufferQueue(); 478f938a53385a3c6d1c6aa24b3f38437bb2cc47aeMathias Agopian mST = new GLConsumer(bq, 123); 48db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian mSTC = new Surface(bq); 498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW = mSTC; 507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // We need a valid GL context so we can test updateTexImage() 527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // This initializes EGL and create a dummy GL context with a 537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // pbuffer render target. 547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 567a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint majorVersion, minorVersion; 597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLConfig myConfig; 637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint numConfigs = 0; 647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), 657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian &myConfig, 1, &numConfigs)); 667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 68993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian mEglConfig = myConfig; 697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint pbufferAttribs[] = { 707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_WIDTH, 16, 717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_HEIGHT, 16, 727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE }; 737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface = eglCreatePbufferSurface(mEglDisplay, myConfig, pbufferAttribs); 747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_SURFACE, mEglSurface); 767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 0); 787a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 797a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 817a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)); 827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 83134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 84134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 85134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void TearDown() { 86134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST.clear(); 87134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC.clear(); 888b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW.clear(); 898b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 917a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroyContext(mEglDisplay, mEglContext); 927a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroySurface(mEglDisplay, mEglSurface); 937a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglTerminate(mEglDisplay); 94fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 95fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 96fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 97fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("End test: %s.%s", testInfo->test_case_name(), 98fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 1007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 1017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual EGLint const* getConfigAttribs() { 1027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian static EGLint sDefaultConfigAttribs[] = { 103993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGL_SURFACE_TYPE, EGL_PBUFFER_BIT | EGL_WINDOW_BIT, 1047a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE 1057a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 1067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 1077a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return sDefaultConfigAttribs; 108134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 109134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 1102adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 111e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<Surface> mSTC; 1128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<ANativeWindow> mANW; 1138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 1147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay mEglDisplay; 1157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface mEglSurface; 1167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext mEglContext; 117993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLConfig mEglConfig; 118134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis}; 119134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 120bae774eb20bebd409441b93386b51bccda75f546Jamie GennisTEST_F(SurfaceTextureClientTest, GetISurfaceTextureIsNotNull) { 121cf0b8c85fb0106751256dba7821f86b5ad03126cMathias Agopian sp<IGraphicBufferProducer> ist(mSTC->getIGraphicBufferProducer()); 122bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis ASSERT_TRUE(ist != NULL); 123bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis} 124bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis 125134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTextureClientTest, QueuesToWindowCompositorIsFalse) { 126134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 1278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 128134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 129134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 130134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(0, result); 131134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 132134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 133391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie GennisTEST_F(SurfaceTextureClientTest, ConcreteTypeIsSurfaceTextureClient) { 134391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis int result = -123; 1358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); 136391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NO_ERROR, err); 137e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian EXPECT_EQ(NATIVE_WINDOW_SURFACE, result); 138391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis} 139391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis 1401b528fb9d818044973abf656c9d2d3c1192bcfdcJamie GennisTEST_F(SurfaceTextureClientTest, EglCreateWindowSurfaceSucceeds) { 1415c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 1425c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1435c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, dpy); 1445c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1455c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint majorVersion; 1465c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint minorVersion; 1475c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglInitialize(dpy, &majorVersion, &minorVersion)); 1485c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1495c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1505c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLConfig myConfig = {0}; 1515c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint numConfigs = 0; 1525c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint configAttribs[] = { 1535c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 1545c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 1555c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RED_SIZE, 8, 1565c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_GREEN_SIZE, 8, 1575c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_BLUE_SIZE, 8, 1585c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_ALPHA_SIZE, 8, 1595c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_DEPTH_SIZE, 16, 1605c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_STENCIL_SIZE, 8, 1615c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_NONE }; 1625c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglChooseConfig(dpy, configAttribs, &myConfig, 1, 1635c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis &numConfigs)); 1645c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1655c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EGLSurface eglSurface = eglCreateWindowSurface(dpy, myConfig, mANW.get(), 1675c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis NULL); 168eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 169eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 1705c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 171fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis if (eglSurface != EGL_NO_SURFACE) { 172fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis eglDestroySurface(dpy, eglSurface); 173fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis } 174fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 1755c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis eglTerminate(dpy); 1765c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis} 1775c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 178993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias AgopianTEST_F(SurfaceTextureClientTest, EglSwapBuffersAbandonErrorIsEglBadSurface) { 179993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 180993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLSurface eglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, mANW.get(), NULL); 181993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 182993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 183993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 184993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLBoolean success = eglMakeCurrent(mEglDisplay, eglSurface, eglSurface, mEglContext); 185ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_TRUE(success); 186993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 187993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian glClear(GL_COLOR_BUFFER_BIT); 188993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglSwapBuffers(mEglDisplay, eglSurface); 189ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_TRUE(success); 190993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 191993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian mST->abandon(); 192993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 193993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian glClear(GL_COLOR_BUFFER_BIT); 194993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglSwapBuffers(mEglDisplay, eglSurface); 195ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_FALSE(success); 196993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_EQ(EGL_BAD_SURFACE, eglGetError()); 197993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 198993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext); 199ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis ASSERT_TRUE(success); 200993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 201993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian if (eglSurface != EGL_NO_SURFACE) { 202993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian eglDestroySurface(mEglDisplay, eglSurface); 203993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian } 204993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian} 205993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 206a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryInvalidSizesFail) { 2078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, 0, 0)); 2088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, -1, 0)); 2098b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, -1)); 2108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, -1, 0)); 2118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 8, 0)); 2128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 8, 0, 0)); 213a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 214a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 215a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, DefaultGeometryValues) { 216697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 217d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 218a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 219a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 220a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 221d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 222a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 223a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 224a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryCanBeSet) { 225697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, PIXEL_FORMAT_RGB_565)); 227d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 228a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 229a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 230a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 231d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 232a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 233a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 234a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryDefaultSizeSetFormat) { 235697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2368b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 237d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 238a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 239a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 240a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 241d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 242a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 243a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 244a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySetSizeDefaultFormat) { 245697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2468b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 247d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 248a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 249a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 250a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 251d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 252a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 253a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 254a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeUnset) { 255697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 257d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 258a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 259a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 260a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 261d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, 0)); 263d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 264a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 265a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 266a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 267d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 268a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 269a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 270a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeChangedWithoutFormat) { 271697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2728b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 273d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 274a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 275a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 276a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 277d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2784697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 279d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 280a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 281a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 282a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 283d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 284a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 285a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 286a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSize) { 2872adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> st(mST); 288697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 289a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(OK, st->setDefaultBufferSize(16, 8)); 290d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 291a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 292a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 293a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 294d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 295a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 296a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 297a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeAfterDequeue) { 298697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 2998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 300d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 301d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 302a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 303d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 304d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 3058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 306d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 307d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 308a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 309a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 310a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 311a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 312a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 313d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 314d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 315a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 316a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 317a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeVsGeometry) { 318697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 3198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3208b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 321d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 322d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 323a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 324a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 325a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 326a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 327a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 328d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 329d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 3308b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 12, 24, 0)); 331d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 332d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 333a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 334a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[0]->width); 335a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[1]->width); 336a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[0]->height); 337a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[1]->height); 338d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 339d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 340a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 341a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 3427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureTooManyUpdateTexImage) { 3437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 344595264f1af12e25dce57d7c5b1d52ed86ac0d0c9Mathias Agopian ASSERT_EQ(OK, mANW->setSwapInterval(mANW.get(), 0)); 3458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 347d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 348d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3508b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 352595264f1af12e25dce57d7c5b1d52ed86ac0d0c9Mathias Agopian ASSERT_EQ(OK, mANW->setSwapInterval(mANW.get(), 1)); 3538b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 355d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 356d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 357d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 358d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3618b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeSlowRetire) { 3667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3678b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 368d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 369d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 370d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 3717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 374d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 375d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 376d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 3778b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3808b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3828b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3837a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3847a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeFastRetire) { 3867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 388d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 389d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 390d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 3917a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3927a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3937a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 394d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3958b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 397d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3988b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 400d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4028b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4047a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4057a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeDQQR) { 4067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 4087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 409d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 410d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 4118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 4137a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 414d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 4157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 416d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4178b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4188b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4197a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 420d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4217a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 422d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4278cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// XXX: We currently have no hardware that properly handles dequeuing the 4288cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// buffer that is currently bound to the texture. 4298cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeDequeueCurrent) { 4307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* firstBuf; 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, native_window_set_buffer_count(mANW.get(), 3)); 452c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4538b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis // We should be able to dequeue all the buffers before we've queued mANWy. 454d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 455d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 456d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 458d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 459d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4618b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 464d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 466c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // Once we've queued a buffer, however we should not be able to dequeue more 467c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // than (buffer-count - MIN_UNDEQUEUED_BUFFERS), which is 2 in this case. 468d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(-EBUSY, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 469c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 470d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 471d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 4727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 474d72f233ffa125856a44976a50a66ceb669f49ab2Jamie GennisTEST_F(SurfaceTextureClientTest, SetCropCropsCrop) { 475d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_rect_t rect = {-2, -13, 40, 18}; 476d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis native_window_set_crop(mANW.get(), &rect); 477d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 478d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 4, 4)); 479d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 480d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_buffer_t* buf; 481d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 482d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf, -1)); 483d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 484d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 485d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect crop = mST->getCurrentCrop(); 486d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.left); 487d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.top); 488d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.right); 489d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.bottom); 490d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis} 491d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 4928dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// XXX: This is not expected to pass until the synchronization hacks are removed 4938dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// from the SurfaceTexture class. 4948dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) { 4957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian class MyThread : public Thread { 4962adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 4977a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext ctx; 4987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface sur; 4997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay dpy; 5007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian bool mBufferRetired; 5017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex mLock; 5027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual bool threadLoop() { 5037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5047a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian usleep(20000); 5057a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5068b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5077a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mBufferRetired = true; 5087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5097a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return false; 5107a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5117a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian public: 5122adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden MyThread(const sp<GLConsumer>& mST) 5138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis : mST(mST), mBufferRetired(false) { 5147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ctx = eglGetCurrentContext(); 5157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sur = eglGetCurrentSurface(EGL_DRAW); 5167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian dpy = eglGetCurrentDisplay(); 5177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5197a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ~MyThread() { 5207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5217a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5227a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian void bufferDequeued() { 5237a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(true, mBufferRetired); 5257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 5277a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 5298b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 5307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // dequeue/queue/update so we have a current buffer 531d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 532d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread* thread = new MyThread(mST); 5367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sp<Thread> threadBase(thread); 5377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 538d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 539d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 540e122079be632b849a71181d83a6d38b701f642f5Mathias Agopian thread->run(); 541d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 542d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 543d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 544d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 5457a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->bufferDequeued(); 5467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->requestExitAndWait(); 5477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 5487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 54952226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixReturnsVerticalFlip) { 55052226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 55152226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5528b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 553d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 554d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5558b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 55752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 55852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 55952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 56052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 56152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 56252226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 56452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 56552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 56652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 56752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 56952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 57052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 57152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 57252226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 57452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 57552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 57652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 57752226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 57852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57952226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffers) { 58052226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 58152226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5828b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 583d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 584d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5858b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5868b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 5878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 58852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 59052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 59152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 59252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 59352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 59552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 59652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 59752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 59852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 60052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 60152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 60252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 60352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 60552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 60652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 60752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 60852226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 60952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 61052226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWithCrop) { 61152226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 61252226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 61352226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_rect_t crop; 61452226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.left = 0; 61552226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.top = 0; 61652226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.right = 5; 61752226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.bottom = 5; 61852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 6208b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 8, 8, 0)); 621d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 6228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_crop(mANW.get(), &crop)); 623d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 6248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 6258b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 6268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 62752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6284697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis // This accounts for the .5 texel shrink for each edge that's included in the 62952226048095c2eb27ede0c3389626df270a0abffJamie Gennis // transform matrix to avoid texturing outside the crop region. 6304697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.5, mtx[0]); 63152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 63252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 63352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 63452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 63552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 6364697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(-0.5, mtx[5]); 63752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 63852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 63952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 64052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 64152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 64252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 64352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 64452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6454697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.0625f, mtx[12]); 6464697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.5625f, mtx[13]); 64752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 64852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 649134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 65052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 651a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// This test verifies that the buffer format can be queried immediately after 652a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// it is set. 65307ed1a94bcad9b78b20f74f890d4271099da3a97Jamie GennisTEST_F(SurfaceTextureClientTest, QueryFormatAfterSettingWorks) { 654a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis sp<ANativeWindow> anw(mSTC); 655a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmts[] = { 656a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis // RGBA_8888 should not come first, as it's the default 657a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBX_8888, 658a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_8888, 659a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_888, 660a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_565, 661a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_BGRA_8888, 662a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_YV12, 663a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis }; 664a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 665a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis const int numFmts = (sizeof(fmts) / sizeof(fmts[0])); 666a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis for (int i = 0; i < numFmts; i++) { 667a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmt = -1; 668a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(anw.get(), 0, 0, fmts[i])); 669a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt)); 670a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis EXPECT_EQ(fmts[i], fmt); 671a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis } 672a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis} 673a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 674c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisclass MultiSurfaceTextureClientTest : public ::testing::Test { 675c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 676c8251a06df70de70d45ac477af816dcee7580205Jamie Gennispublic: 677c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis MultiSurfaceTextureClientTest() : 678c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay(EGL_NO_DISPLAY), 679c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext(EGL_NO_CONTEXT) { 680c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 681c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = EGL_NO_CONTEXT; 682c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 683c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 684c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 685c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisprotected: 686c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 687c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis enum { NUM_SURFACE_TEXTURES = 32 }; 688c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 689c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void SetUp() { 690c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 691c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 692c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 693c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 694c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint majorVersion, minorVersion; 695c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 696c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 697c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 698c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLConfig myConfig; 699c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint numConfigs = 0; 700c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint configAttribs[] = { 701c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 702c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NONE 703c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis }; 704c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglChooseConfig(mEglDisplay, configAttribs, &myConfig, 1, 705c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis &numConfigs)); 706c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 707c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 708c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 709c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 0); 710c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 711c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 712c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 713c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 7148f938a53385a3c6d1c6aa24b3f38437bb2cc47aeMathias Agopian sp<BufferQueue> bq = new BufferQueue(); 7158f938a53385a3c6d1c6aa24b3f38437bb2cc47aeMathias Agopian sp<GLConsumer> st(new GLConsumer(bq, i)); 716db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian sp<Surface> stc(new Surface(bq)); 717c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = eglCreateWindowSurface(mEglDisplay, myConfig, 718c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis static_cast<ANativeWindow*>(stc.get()), NULL); 719c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 720c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_SURFACE, mEglSurfaces[i]); 721c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 722c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 723c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 724c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void TearDown() { 725c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, 726c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NO_CONTEXT); 727c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 728c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 729c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglSurfaces[i] != EGL_NO_SURFACE) { 730c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroySurface(mEglDisplay, mEglSurfaces[i]); 731c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 732c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 733c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 734c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglContext != EGL_NO_CONTEXT) { 735c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroyContext(mEglDisplay, mEglContext); 736c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 737c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 738c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglDisplay != EGL_NO_DISPLAY) { 739c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglTerminate(mEglDisplay); 740c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 741c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 742c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 743c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLDisplay mEglDisplay; 744c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLSurface mEglSurfaces[NUM_SURFACE_TEXTURES]; 745c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLContext mEglContext; 746c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis}; 747c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 748c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// XXX: This test is disabled because it causes a hang on some devices. See bug 749c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// 5015672. 750c8251a06df70de70d45ac477af816dcee7580205Jamie GennisTEST_F(MultiSurfaceTextureClientTest, DISABLED_MakeCurrentBetweenSurfacesWorks) { 751c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int iter = 0; iter < 8; iter++) { 752c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 753c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, mEglSurfaces[i], mEglSurfaces[i], 754c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext); 755c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis glClear(GL_COLOR_BUFFER_BIT); 756c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglSwapBuffers(mEglDisplay, mEglSurfaces[i]); 757c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 758c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 759c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis} 760c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 76152226048095c2eb27ede0c3389626df270a0abffJamie Gennis} // namespace android 762