SurfaceTextureClient_test.cpp revision d72f233ffa125856a44976a50a66ceb669f49ab2
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> 225c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis#include <gui/SurfaceTextureClient.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 43134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST = new SurfaceTexture(123); 44134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC = new SurfaceTextureClient(mST); 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 647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint pbufferAttribs[] = { 657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_WIDTH, 16, 667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_HEIGHT, 16, 677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE }; 687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface = eglCreatePbufferSurface(mEglDisplay, myConfig, pbufferAttribs); 697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_SURFACE, mEglSurface); 717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 0); 737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)); 777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 78134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 79134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 80134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void TearDown() { 81134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST.clear(); 82134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC.clear(); 838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW.clear(); 848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroyContext(mEglDisplay, mEglContext); 877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroySurface(mEglDisplay, mEglSurface); 887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglTerminate(mEglDisplay); 89fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 90fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 91fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 92fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("End test: %s.%s", testInfo->test_case_name(), 93fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 947a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 967a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual EGLint const* getConfigAttribs() { 977a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian static EGLint sDefaultConfigAttribs[] = { 987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, 997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE 1007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 1017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 1027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return sDefaultConfigAttribs; 103134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 104134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 105134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<SurfaceTexture> mST; 106134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<SurfaceTextureClient> mSTC; 1078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<ANativeWindow> mANW; 1088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 1097a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay mEglDisplay; 1107a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface mEglSurface; 1117a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext mEglContext; 112134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis}; 113134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 114bae774eb20bebd409441b93386b51bccda75f546Jamie GennisTEST_F(SurfaceTextureClientTest, GetISurfaceTextureIsNotNull) { 115bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis sp<ISurfaceTexture> ist(mSTC->getISurfaceTexture()); 116bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis ASSERT_TRUE(ist != NULL); 117bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis} 118bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis 119134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTextureClientTest, QueuesToWindowCompositorIsFalse) { 120134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 1218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 122134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 123134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 124134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(0, result); 125134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 126134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 127391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie GennisTEST_F(SurfaceTextureClientTest, ConcreteTypeIsSurfaceTextureClient) { 128391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis int result = -123; 1298b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); 130391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NO_ERROR, err); 131391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NATIVE_WINDOW_SURFACE_TEXTURE_CLIENT, result); 132391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis} 133391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis 1341b528fb9d818044973abf656c9d2d3c1192bcfdcJamie GennisTEST_F(SurfaceTextureClientTest, EglCreateWindowSurfaceSucceeds) { 1355c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 1365c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1375c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, dpy); 1385c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1395c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint majorVersion; 1405c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint minorVersion; 1415c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglInitialize(dpy, &majorVersion, &minorVersion)); 1425c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1435c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1445c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLConfig myConfig = {0}; 1455c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint numConfigs = 0; 1465c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint configAttribs[] = { 1475c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 1485c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 1495c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RED_SIZE, 8, 1505c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_GREEN_SIZE, 8, 1515c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_BLUE_SIZE, 8, 1525c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_ALPHA_SIZE, 8, 1535c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_DEPTH_SIZE, 16, 1545c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_STENCIL_SIZE, 8, 1555c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_NONE }; 1565c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglChooseConfig(dpy, configAttribs, &myConfig, 1, 1575c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis &numConfigs)); 1585c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1595c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EGLSurface eglSurface = eglCreateWindowSurface(dpy, myConfig, mANW.get(), 1615c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis NULL); 162eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 163eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 1645c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 165fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis if (eglSurface != EGL_NO_SURFACE) { 166fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis eglDestroySurface(dpy, eglSurface); 167fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis } 168fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 1695c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis eglTerminate(dpy); 1705c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis} 1715c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 172a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryInvalidSizesFail) { 1738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, 0, 0)); 1748b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, -1, 0)); 1758b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, -1)); 1768b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, -1, 0)); 1778b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 8, 0)); 1788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 8, 0, 0)); 179a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 180a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 181a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, DefaultGeometryValues) { 182697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 1838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 184a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 185a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 186a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 1878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 188a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 189a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 190a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryCanBeSet) { 191697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 1928b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, PIXEL_FORMAT_RGB_565)); 1938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 194a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 195a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 196a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 1978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 198a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 199a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 200a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryDefaultSizeSetFormat) { 201697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2028b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 2038b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 204a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 205a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 206a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 2078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 208a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 209a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 210a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySetSizeDefaultFormat) { 211697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 2138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 214a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 215a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 216a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2178b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 218a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 219a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 220a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeUnset) { 221697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 2238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 224a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 225a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 226a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 2288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, 0)); 2298b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 230a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 231a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 232a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 234a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 235a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 236a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeChangedWithoutFormat) { 237697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2388b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 2398b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 240a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 241a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 242a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 2438b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 2448b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 2458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 246a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 247a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 248a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 2498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 250a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 251a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 252a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSize) { 253a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian sp<SurfaceTexture> st(mST); 254697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 255a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(OK, st->setDefaultBufferSize(16, 8)); 2568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 257a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 258a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 259a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 261a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 262a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 263a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeAfterDequeue) { 264697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 2658b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 2668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2678b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 268a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 2698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2708b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 2718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 2728b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 274a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 275a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 276a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 277a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 278a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 2798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2808b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 281a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 282a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 283a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeVsGeometry) { 284697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 2858b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 2868b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 2878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2888b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 289a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 290a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 291a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 292a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 293a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 2948b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2958b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 2968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 12, 24, 0)); 2978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2988b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 299a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 300a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[0]->width); 301a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[1]->width); 302a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[0]->height); 303a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[1]->height); 3048b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 3058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 306a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 307a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 3087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureTooManyUpdateTexImage) { 3097a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(false)); 3118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3127a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3148b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3158b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3168b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3188b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeSlowRetire) { 3327a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3348b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3368b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3378b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3407a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 3418b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3428b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3438b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3448b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3468b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3478b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3488b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeFastRetire) { 3537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3548b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3558b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 3628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3648b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3658b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3678b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3688b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3708b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeDQQR) { 3747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3758b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3768b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3808b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3847a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3858b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3868b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3898b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3918b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3928b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3947a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3968cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// XXX: We currently have no hardware that properly handles dequeuing the 3978cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// buffer that is currently bound to the texture. 3988cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeDequeueCurrent) { 3997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* firstBuf; 4018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4028b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 4038b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &firstBuf)); 4048b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), firstBuf)); 4058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4068b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), firstBuf); 4078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 4088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 4098b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 4108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 4118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 4128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 4137a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 4147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 4157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 4167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(firstBuf, buf[2]); 4177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4197a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeMinUndequeued) { 4207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 423c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis // We should be able to dequeue all the buffers before we've queued mANWy. 4258b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 4268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 4278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 4287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4298b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2])); 4308b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 4317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4328b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 4367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 437c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // Once we've queued a buffer, however we should not be able to dequeue more 438c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // than (buffer-count - MIN_UNDEQUEUED_BUFFERS), which is 2 in this case. 4398b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(-EBUSY, mANW->dequeueBuffer(mANW.get(), &buf[1])); 440c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4418b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 4428b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2])); 4437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 445d72f233ffa125856a44976a50a66ceb669f49ab2Jamie GennisTEST_F(SurfaceTextureClientTest, SetPostTransformCropUntransforms) { 446d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_rect_t rect = {1, 5, 4, 14}; 447d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis native_window_set_post_transform_crop(mANW.get(), &rect); 448d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 449d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis uint32_t xforms[] = { 450d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis HAL_TRANSFORM_FLIP_H, 451d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis HAL_TRANSFORM_FLIP_V, 452d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis HAL_TRANSFORM_ROT_90, 453d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis HAL_TRANSFORM_ROT_180, 454d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis HAL_TRANSFORM_ROT_270, 455d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis }; 456d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 457d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect expectedRects[] = { 458d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect(4, 5, 7, 14), // HAL_TRANSFORM_FLIP_H 459d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect(1, 2, 4, 11), // HAL_TRANSFORM_FLIP_V 460d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect(5, 4, 14, 7), // HAL_TRANSFORM_ROT_90 461d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect(4, 2, 7, 11), // HAL_TRANSFORM_ROT_180 462d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect(2, 1, 11, 4), // HAL_TRANSFORM_ROT_270 463d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis }; 464d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 465d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis for (size_t i = 0; i < sizeof(xforms)/sizeof(xforms[0]); i++) { 466d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis SCOPED_TRACE(String8::format("xform=%#x", xforms[i]).string()); 467d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 468d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis int w = 8, h = 16; 469d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis if (xforms[i] & HAL_TRANSFORM_ROT_90) { 470d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis w = 16; 471d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis h = 8; 472d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis } 473d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_transform(mANW.get(), xforms[i])); 474d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), w, h)); 475d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 476d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_buffer_t* buf; 477d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 478d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf)); 479d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 480d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 481d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect crop = mST->getCurrentCrop(); 482d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(expectedRects[i].left, crop.left); 483d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(expectedRects[i].top, crop.top); 484d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(expectedRects[i].right, crop.right); 485d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(expectedRects[i].bottom, crop.bottom); 486d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis } 487d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis} 488d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 489d72f233ffa125856a44976a50a66ceb669f49ab2Jamie GennisTEST_F(SurfaceTextureClientTest, SetCropCropsCrop) { 490d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_rect_t rect = {-2, -13, 40, 18}; 491d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis native_window_set_crop(mANW.get(), &rect); 492d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 493d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 4, 4)); 494d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 495d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_buffer_t* buf; 496d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 497d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf)); 498d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 499d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 500d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect crop = mST->getCurrentCrop(); 501d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.left); 502d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.top); 503d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.right); 504d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.bottom); 505d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis} 506d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 5078dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// XXX: This is not expected to pass until the synchronization hacks are removed 5088dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// from the SurfaceTexture class. 5098dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) { 5107a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian class MyThread : public Thread { 5118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<SurfaceTexture> mST; 5127a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext ctx; 5137a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface sur; 5147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay dpy; 5157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian bool mBufferRetired; 5167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex mLock; 5177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual bool threadLoop() { 5187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5197a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian usleep(20000); 5207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5227a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mBufferRetired = true; 5237a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return false; 5257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian public: 5278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread(const sp<SurfaceTexture>& mST) 5288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis : mST(mST), mBufferRetired(false) { 5297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ctx = eglGetCurrentContext(); 5307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sur = eglGetCurrentSurface(EGL_DRAW); 5317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian dpy = eglGetCurrentDisplay(); 5327a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5337a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ~MyThread() { 5357a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian void bufferDequeued() { 5387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(true, mBufferRetired); 5407a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5417a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 5427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 5448b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 5458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 5467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // dequeue/queue/update so we have a current buffer 5478b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 5488b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 5498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5518b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread* thread = new MyThread(mST); 5527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sp<Thread> threadBase(thread); 5537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5548b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 5558b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 556e122079be632b849a71181d83a6d38b701f642f5Mathias Agopian thread->run(); 5578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 5588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 5598b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis //ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 5608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis //ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 5617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->bufferDequeued(); 5627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->requestExitAndWait(); 5637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 5647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 56552226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixReturnsVerticalFlip) { 56652226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 56752226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5688b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 5698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 5708b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 5718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5728b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 57352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 57552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 57652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 57752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 57852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 58052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 58152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 58252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 58352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 58552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 58652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 58752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 58852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 59052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 59152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 59252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 59352226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 59452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59552226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffers) { 59652226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 59752226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5988b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 5998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 6008b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 6018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 6028b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 6038b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 60452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 60652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 60752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 60852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 60952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 61052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 61152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 61252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 61352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 61452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 61552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 61652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 61752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 61852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 61952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 62052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 62152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 62252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 62352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 62452226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 62552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 62652226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWithCrop) { 62752226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 62852226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 62952226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_rect_t crop; 63052226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.left = 0; 63152226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.top = 0; 63252226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.right = 5; 63352226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.bottom = 5; 63452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 6368b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 8, 8, 0)); 6378b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 6388b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_crop(mANW.get(), &crop)); 6398b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 6408b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 6418b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 6428b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 64352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 64452226048095c2eb27ede0c3389626df270a0abffJamie Gennis // This accounts for the 1 texel shrink for each edge that's included in the 64552226048095c2eb27ede0c3389626df270a0abffJamie Gennis // transform matrix to avoid texturing outside the crop region. 64691a6826d6794c19cdedfa58c42f8820c5cf5fe2bJamie Gennis EXPECT_EQ(.375f, mtx[0]); 64752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 64852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 64952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 65052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 65152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 65291a6826d6794c19cdedfa58c42f8820c5cf5fe2bJamie Gennis EXPECT_EQ(-.375f, mtx[5]); 65352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 65452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 65552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 65652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 65752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 65852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 65952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 66052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 66191a6826d6794c19cdedfa58c42f8820c5cf5fe2bJamie Gennis EXPECT_EQ(.125f, mtx[12]); 66252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(.5f, mtx[13]); 66352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 66452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 665134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 66652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 667a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// This test verifies that the buffer format can be queried immediately after 668a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// it is set. 66907ed1a94bcad9b78b20f74f890d4271099da3a97Jamie GennisTEST_F(SurfaceTextureClientTest, QueryFormatAfterSettingWorks) { 670a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis sp<ANativeWindow> anw(mSTC); 671a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmts[] = { 672a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis // RGBA_8888 should not come first, as it's the default 673a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBX_8888, 674a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_8888, 675a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_888, 676a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_565, 677a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_BGRA_8888, 678a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_5551, 679a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_4444, 680a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_YV12, 681a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis }; 682a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 683a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis const int numFmts = (sizeof(fmts) / sizeof(fmts[0])); 684a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis for (int i = 0; i < numFmts; i++) { 685a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmt = -1; 686a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(anw.get(), 0, 0, fmts[i])); 687a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt)); 688a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis EXPECT_EQ(fmts[i], fmt); 689a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis } 690a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis} 691a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 692c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisclass MultiSurfaceTextureClientTest : public ::testing::Test { 693c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 694c8251a06df70de70d45ac477af816dcee7580205Jamie Gennispublic: 695c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis MultiSurfaceTextureClientTest() : 696c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay(EGL_NO_DISPLAY), 697c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext(EGL_NO_CONTEXT) { 698c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 699c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = EGL_NO_CONTEXT; 700c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 701c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 702c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 703c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisprotected: 704c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 705c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis enum { NUM_SURFACE_TEXTURES = 32 }; 706c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 707c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void SetUp() { 708c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 709c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 710c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 711c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 712c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint majorVersion, minorVersion; 713c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 714c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 715c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 716c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLConfig myConfig; 717c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint numConfigs = 0; 718c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint configAttribs[] = { 719c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 720c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NONE 721c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis }; 722c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglChooseConfig(mEglDisplay, configAttribs, &myConfig, 1, 723c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis &numConfigs)); 724c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 725c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 726c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 727c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 0); 728c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 729c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 730c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 731c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 732c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis sp<SurfaceTexture> st(new SurfaceTexture(i)); 733c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis sp<SurfaceTextureClient> stc(new SurfaceTextureClient(st)); 734c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = eglCreateWindowSurface(mEglDisplay, myConfig, 735c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis static_cast<ANativeWindow*>(stc.get()), NULL); 736c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 737c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_SURFACE, mEglSurfaces[i]); 738c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 739c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 740c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 741c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void TearDown() { 742c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, 743c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NO_CONTEXT); 744c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 745c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 746c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglSurfaces[i] != EGL_NO_SURFACE) { 747c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroySurface(mEglDisplay, mEglSurfaces[i]); 748c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 749c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 750c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 751c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglContext != EGL_NO_CONTEXT) { 752c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroyContext(mEglDisplay, mEglContext); 753c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 754c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 755c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglDisplay != EGL_NO_DISPLAY) { 756c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglTerminate(mEglDisplay); 757c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 758c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 759c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 760c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLDisplay mEglDisplay; 761c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLSurface mEglSurfaces[NUM_SURFACE_TEXTURES]; 762c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLContext mEglContext; 763c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis}; 764c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 765c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// XXX: This test is disabled because it causes a hang on some devices. See bug 766c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// 5015672. 767c8251a06df70de70d45ac477af816dcee7580205Jamie GennisTEST_F(MultiSurfaceTextureClientTest, DISABLED_MakeCurrentBetweenSurfacesWorks) { 768c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int iter = 0; iter < 8; iter++) { 769c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 770c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, mEglSurfaces[i], mEglSurfaces[i], 771c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext); 772c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis glClear(GL_COLOR_BUFFER_BIT); 773c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglSwapBuffers(mEglDisplay, mEglSurfaces[i]); 774c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 775c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 776c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis} 777c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 77852226048095c2eb27ede0c3389626df270a0abffJamie Gennis} // namespace android 779