SurfaceTextureClient_test.cpp revision 2adaf04fab35cf47c824d74d901b54094e01ccd3
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 432adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden mST = new GLConsumer(123); 44c911ea531830b9dd5d25cf6f0c03f2f93908c4d1Jamie Gennis mSTC = new SurfaceTextureClient(mST->getBufferQueue()); 458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW = mSTC; 467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // We need a valid GL context so we can test updateTexImage() 487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // This initializes EGL and create a dummy GL context with a 497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // pbuffer render target. 507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint majorVersion, minorVersion; 557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 567a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLConfig myConfig; 597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint numConfigs = 0; 607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), 617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian &myConfig, 1, &numConfigs)); 627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 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 1052adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> 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) { 1152adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<IGraphicBufferProducer> 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; 183d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 187d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 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)); 193d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 197d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 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)); 203d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 207d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 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)); 213d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 217d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 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)); 223d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 224a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 225a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 226a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 227d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, 0)); 229d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 233d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 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)); 239d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 243d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2444697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 245d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 249d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 250a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 251a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 252a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSize) { 2532adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> st(mST); 254697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 255a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(OK, st->setDefaultBufferSize(16, 8)); 256d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 260d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 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)); 266d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 267d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 268a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 269d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 270d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 2718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 272d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 273d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 279d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 280d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -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)); 287d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 288d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 294d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 295d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 2968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 12, 24, 0)); 297d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 298d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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); 304d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 305d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -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 313d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 314d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 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 321d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 322d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 323d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 324d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -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)); 335d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 336d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 337d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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]); 341d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 342d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 343d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 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)); 356d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 357d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 358d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(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]); 362d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3648b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 365d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3678b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 368d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 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 378d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 379d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3808b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 383d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 3847a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 385d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3868b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 389d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 3907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 391d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 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)); 403d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &firstBuf)); 404d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), firstBuf, -1)); 4058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4068b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), firstBuf); 407d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 408d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 409d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 410d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 411d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 412d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 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. 425d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 426d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 427d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 429d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 430d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4328b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 435d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(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. 439d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(-EBUSY, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 440c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 441d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 442d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 4437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 445d72f233ffa125856a44976a50a66ceb669f49ab2Jamie GennisTEST_F(SurfaceTextureClientTest, SetCropCropsCrop) { 446d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_rect_t rect = {-2, -13, 40, 18}; 447d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis native_window_set_crop(mANW.get(), &rect); 448d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 449d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 4, 4)); 450d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 451d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_buffer_t* buf; 452d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 453d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf, -1)); 454d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 455d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 456d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect crop = mST->getCurrentCrop(); 457d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.left); 458d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.top); 459d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.right); 460d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.bottom); 461d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis} 462d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 4638dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// XXX: This is not expected to pass until the synchronization hacks are removed 4648dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// from the SurfaceTexture class. 4658dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) { 4667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian class MyThread : public Thread { 4672adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 4687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext ctx; 4697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface sur; 4707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay dpy; 4717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian bool mBufferRetired; 4727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex mLock; 4737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual bool threadLoop() { 4747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 4757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian usleep(20000); 4767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 4778b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 4787a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mBufferRetired = true; 4797a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 4807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return false; 4817a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian public: 4832adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden MyThread(const sp<GLConsumer>& mST) 4848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis : mST(mST), mBufferRetired(false) { 4857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ctx = eglGetCurrentContext(); 4867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sur = eglGetCurrentSurface(EGL_DRAW); 4877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian dpy = eglGetCurrentDisplay(); 4887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 4897a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ~MyThread() { 4917a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 4927a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4937a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian void bufferDequeued() { 4947a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 4957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(true, mBufferRetired); 4967a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4977a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 4987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 5008b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 5018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 5027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // dequeue/queue/update so we have a current buffer 503d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 504d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread* thread = new MyThread(mST); 5087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sp<Thread> threadBase(thread); 5097a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 510d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 511d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 512e122079be632b849a71181d83a6d38b701f642f5Mathias Agopian thread->run(); 513d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 514d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 515d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 516d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 5177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->bufferDequeued(); 5187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->requestExitAndWait(); 5197a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 5207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 52152226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixReturnsVerticalFlip) { 52252226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 52352226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 525d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 526d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 52952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 53052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 53152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 53252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 53352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 53452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 53552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 53652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 53752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 53852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 53952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 54052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 54152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 54252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 54352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 54452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 54552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 54652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 54752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 54852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 54952226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 55052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 55152226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffers) { 55252226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 55352226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5548b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 555d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 556d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 5598b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 56052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 56252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 56352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 56452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 56552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 56752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 56852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 56952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 57052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 57252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 57352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 57452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 57552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 57752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 57852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 57952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 58052226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 58152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58252226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWithCrop) { 58352226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 58452226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 58552226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_rect_t crop; 58652226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.left = 0; 58752226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.top = 0; 58852226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.right = 5; 58952226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.bottom = 5; 59052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 5918b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 5928b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 8, 8, 0)); 593d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 5948b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_crop(mANW.get(), &crop)); 595d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 5988b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 59952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6004697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis // This accounts for the .5 texel shrink for each edge that's included in the 60152226048095c2eb27ede0c3389626df270a0abffJamie Gennis // transform matrix to avoid texturing outside the crop region. 6024697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.5, mtx[0]); 60352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 60452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 60552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 60652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 6084697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(-0.5, mtx[5]); 60952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 61052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 61152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 61252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 61352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 61452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 61552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 61652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 6174697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.0625f, mtx[12]); 6184697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(0.5625f, mtx[13]); 61952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 62052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 621134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 62252226048095c2eb27ede0c3389626df270a0abffJamie Gennis 623a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// This test verifies that the buffer format can be queried immediately after 624a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// it is set. 62507ed1a94bcad9b78b20f74f890d4271099da3a97Jamie GennisTEST_F(SurfaceTextureClientTest, QueryFormatAfterSettingWorks) { 626a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis sp<ANativeWindow> anw(mSTC); 627a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmts[] = { 628a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis // RGBA_8888 should not come first, as it's the default 629a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBX_8888, 630a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_8888, 631a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_888, 632a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_565, 633a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_BGRA_8888, 634a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_5551, 635a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_4444, 636a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_YV12, 637a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis }; 638a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 639a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis const int numFmts = (sizeof(fmts) / sizeof(fmts[0])); 640a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis for (int i = 0; i < numFmts; i++) { 641a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmt = -1; 642a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(anw.get(), 0, 0, fmts[i])); 643a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt)); 644a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis EXPECT_EQ(fmts[i], fmt); 645a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis } 646a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis} 647a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 648c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisclass MultiSurfaceTextureClientTest : public ::testing::Test { 649c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 650c8251a06df70de70d45ac477af816dcee7580205Jamie Gennispublic: 651c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis MultiSurfaceTextureClientTest() : 652c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay(EGL_NO_DISPLAY), 653c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext(EGL_NO_CONTEXT) { 654c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 655c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = EGL_NO_CONTEXT; 656c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 657c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 658c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 659c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisprotected: 660c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 661c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis enum { NUM_SURFACE_TEXTURES = 32 }; 662c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 663c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void SetUp() { 664c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 665c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 666c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 667c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 668c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint majorVersion, minorVersion; 669c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 670c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 671c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 672c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLConfig myConfig; 673c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint numConfigs = 0; 674c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint configAttribs[] = { 675c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 676c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NONE 677c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis }; 678c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglChooseConfig(mEglDisplay, configAttribs, &myConfig, 1, 679c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis &numConfigs)); 680c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 681c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 682c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 683c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 0); 684c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 685c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 686c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 687c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 6882adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> st(new GLConsumer(i)); 689c911ea531830b9dd5d25cf6f0c03f2f93908c4d1Jamie Gennis sp<SurfaceTextureClient> stc(new SurfaceTextureClient(st->getBufferQueue())); 690c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = eglCreateWindowSurface(mEglDisplay, myConfig, 691c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis static_cast<ANativeWindow*>(stc.get()), NULL); 692c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 693c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_SURFACE, mEglSurfaces[i]); 694c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 695c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 696c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 697c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void TearDown() { 698c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, 699c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NO_CONTEXT); 700c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 701c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 702c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglSurfaces[i] != EGL_NO_SURFACE) { 703c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroySurface(mEglDisplay, mEglSurfaces[i]); 704c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 705c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 706c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 707c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglContext != EGL_NO_CONTEXT) { 708c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroyContext(mEglDisplay, mEglContext); 709c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 710c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 711c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglDisplay != EGL_NO_DISPLAY) { 712c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglTerminate(mEglDisplay); 713c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 714c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 715c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 716c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLDisplay mEglDisplay; 717c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLSurface mEglSurfaces[NUM_SURFACE_TEXTURES]; 718c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLContext mEglContext; 719c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis}; 720c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 721c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// XXX: This test is disabled because it causes a hang on some devices. See bug 722c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// 5015672. 723c8251a06df70de70d45ac477af816dcee7580205Jamie GennisTEST_F(MultiSurfaceTextureClientTest, DISABLED_MakeCurrentBetweenSurfacesWorks) { 724c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int iter = 0; iter < 8; iter++) { 725c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 726c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, mEglSurfaces[i], mEglSurfaces[i], 727c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext); 728c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis glClear(GL_COLOR_BUFFER_BIT); 729c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglSwapBuffers(mEglDisplay, mEglSurfaces[i]); 730c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 731c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 732c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis} 733c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 73452226048095c2eb27ede0c3389626df270a0abffJamie Gennis} // namespace android 735