SurfaceTextureClient_test.cpp revision 07ed1a94bcad9b78b20f74f890d4271099da3a97
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 175c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis#include <EGL/egl.h> 18134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <gtest/gtest.h> 195c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis#include <gui/SurfaceTextureClient.h> 207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian#include <utils/threads.h> 21134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 22134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisnamespace android { 23134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 24134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisclass SurfaceTextureClientTest : public ::testing::Test { 25134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisprotected: 267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian SurfaceTextureClientTest(): 277a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay(EGL_NO_DISPLAY), 287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface(EGL_NO_SURFACE), 297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext(EGL_NO_CONTEXT) { 307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 32134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void SetUp() { 33134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST = new SurfaceTexture(123); 34134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC = new SurfaceTextureClient(mST); 358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW = mSTC; 367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // We need a valid GL context so we can test updateTexImage() 387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // This initializes EGL and create a dummy GL context with a 397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // pbuffer render target. 407a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 417a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint majorVersion, minorVersion; 457a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLConfig myConfig; 497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint numConfigs = 0; 507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), 517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian &myConfig, 1, &numConfigs)); 527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint pbufferAttribs[] = { 557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_WIDTH, 16, 567a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_HEIGHT, 16, 577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE }; 587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface = eglCreatePbufferSurface(mEglDisplay, myConfig, pbufferAttribs); 597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_SURFACE, mEglSurface); 617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 0); 637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)); 677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 68134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 69134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 70134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void TearDown() { 71134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST.clear(); 72134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC.clear(); 738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW.clear(); 748b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroyContext(mEglDisplay, mEglContext); 777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroySurface(mEglDisplay, mEglSurface); 787a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglTerminate(mEglDisplay); 797a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 817a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual EGLint const* getConfigAttribs() { 827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian static EGLint sDefaultConfigAttribs[] = { 837a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, 847a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE 857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return sDefaultConfigAttribs; 88134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 89134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 90134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<SurfaceTexture> mST; 91134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<SurfaceTextureClient> mSTC; 928b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<ANativeWindow> mANW; 938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 947a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay mEglDisplay; 957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface mEglSurface; 967a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext mEglContext; 97134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis}; 98134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 99bae774eb20bebd409441b93386b51bccda75f546Jamie GennisTEST_F(SurfaceTextureClientTest, GetISurfaceTextureIsNotNull) { 100bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis sp<ISurfaceTexture> ist(mSTC->getISurfaceTexture()); 101bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis ASSERT_TRUE(ist != NULL); 102bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis} 103bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis 104134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTextureClientTest, QueuesToWindowCompositorIsFalse) { 105134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 1068b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 107134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 108134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 109134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(0, result); 110134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 111134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 112391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie GennisTEST_F(SurfaceTextureClientTest, ConcreteTypeIsSurfaceTextureClient) { 113391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis int result = -123; 1148b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); 115391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NO_ERROR, err); 116391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NATIVE_WINDOW_SURFACE_TEXTURE_CLIENT, result); 117391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis} 118391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis 1195c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie GennisTEST_F(SurfaceTextureClientTest, ANativeWindowLockFails) { 1205c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ANativeWindow_Buffer buf; 1218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(BAD_VALUE, ANativeWindow_lock(mANW.get(), &buf, NULL)); 1225c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis} 1235c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1241b528fb9d818044973abf656c9d2d3c1192bcfdcJamie GennisTEST_F(SurfaceTextureClientTest, EglCreateWindowSurfaceSucceeds) { 1255c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 1265c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1275c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, dpy); 1285c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1295c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint majorVersion; 1305c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint minorVersion; 1315c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglInitialize(dpy, &majorVersion, &minorVersion)); 1325c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1335c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1345c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLConfig myConfig = {0}; 1355c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint numConfigs = 0; 1365c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint configAttribs[] = { 1375c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 1385c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 1395c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RED_SIZE, 8, 1405c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_GREEN_SIZE, 8, 1415c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_BLUE_SIZE, 8, 1425c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_ALPHA_SIZE, 8, 1435c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_DEPTH_SIZE, 16, 1445c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_STENCIL_SIZE, 8, 1455c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_NONE }; 1465c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglChooseConfig(dpy, configAttribs, &myConfig, 1, 1475c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis &numConfigs)); 1485c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1495c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1508b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EGLSurface eglSurface = eglCreateWindowSurface(dpy, myConfig, mANW.get(), 1515c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis NULL); 152eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 153eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 1545c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1555c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis eglTerminate(dpy); 1565c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis} 1575c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 158a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryInvalidSizesFail) { 1598b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, 0, 0)); 1608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, -1, 0)); 1618b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, -1)); 1628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), -1, -1, 0)); 1638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 0, 8, 0)); 1648b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_GT(OK, native_window_set_buffers_geometry(mANW.get(), 8, 0, 0)); 165a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 166a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 167a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, DefaultGeometryValues) { 168697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 1698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 170a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 171a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 172a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 1738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 174a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 175a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 176a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryCanBeSet) { 177697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 1788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, PIXEL_FORMAT_RGB_565)); 1798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 180a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 181a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 182a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 1838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 184a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 185a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 186a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryDefaultSizeSetFormat) { 187697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 1888b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 1898b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 190a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 191a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 192a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 1938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 194a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 195a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 196a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySetSizeDefaultFormat) { 197697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 1988b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 1998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 200a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 201a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 202a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2038b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 204a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 205a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 206a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeUnset) { 207697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 2098b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 210a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 211a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 212a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 2148b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, 0)); 2158b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 216a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 217a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 218a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 220a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 221a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 222a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeChangedWithoutFormat) { 223697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 2248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 0, 0, PIXEL_FORMAT_RGB_565)); 2258b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 226a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 227a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 228a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 2298b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 2308b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 16, 8, 0)); 2318b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 232a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 233a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 234a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 2358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 236a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 237a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 238a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSize) { 239a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian sp<SurfaceTexture> st(mST); 240697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 241a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(OK, st->setDefaultBufferSize(16, 8)); 2428b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf)); 243a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 244a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 245a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 2468b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf)); 247a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 248a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 249a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeAfterDequeue) { 250697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 2518b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 2528b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2538b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 254a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 2558b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 2578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 2588b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2598b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 260a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 261a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 262a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 263a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 264a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 2658b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 267a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 268a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 269a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeVsGeometry) { 270697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 2718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 2728b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 2738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2748b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 275a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 276a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 277a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 278a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 279a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 2808b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 2828b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 12, 24, 0)); 2838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 2848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 285a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 286a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[0]->width); 287a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[1]->width); 288a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[0]->height); 289a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[1]->height); 2908b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 2918b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1])); 292a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 293a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 2947a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureTooManyUpdateTexImage) { 2957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 2968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(false)); 2978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 2987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 2998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3008b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3028b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3048b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3058b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3098b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3117a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3148b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeSlowRetire) { 3187a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3208b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 3278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3298b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3308b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3318b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3328b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3348b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeFastRetire) { 3397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3408b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3418b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3428b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3438b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3448b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3457a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 3488b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3498b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3508b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3518b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3528b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3538b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3548b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3558b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeDQQR) { 3607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3618b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3648b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3658b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3678b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 3687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3728b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 3747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3758b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3778b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 3807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3817a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3828cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// XXX: We currently have no hardware that properly handles dequeuing the 3838cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// buffer that is currently bound to the texture. 3848cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeDequeueCurrent) { 3857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 3867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* firstBuf; 3878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 3888b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3898b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &firstBuf)); 3908b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), firstBuf)); 3918b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3928b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), firstBuf); 3938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 3948b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 3958b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 3968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 3978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 3988b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 3997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 4007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 4017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 4027a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(firstBuf, buf[2]); 4037a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4047a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4057a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeMinUndequeued) { 4067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4078b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4088b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 409c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis // We should be able to dequeue all the buffers before we've queued mANWy. 4118b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 4128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 4138b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 4147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4158b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2])); 4168b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 4177a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4188b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4207a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 4227a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 423c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // Once we've queued a buffer, however we should not be able to dequeue more 424c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // than (buffer-count - MIN_UNDEQUEUED_BUFFERS), which is 2 in this case. 4258b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(-EBUSY, mANW->dequeueBuffer(mANW.get(), &buf[1])); 426c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0])); 4288b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2])); 4297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4318dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// XXX: This is not expected to pass until the synchronization hacks are removed 4328dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// from the SurfaceTexture class. 4338dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) { 4347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian class MyThread : public Thread { 4358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<SurfaceTexture> mST; 4367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext ctx; 4377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface sur; 4387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay dpy; 4397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian bool mBufferRetired; 4407a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex mLock; 4417a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual bool threadLoop() { 4427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 4437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian usleep(20000); 4447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 4458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 4467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mBufferRetired = true; 4477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 4487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return false; 4497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian public: 4518b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread(const sp<SurfaceTexture>& mST) 4528b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis : mST(mST), mBufferRetired(false) { 4537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ctx = eglGetCurrentContext(); 4547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sur = eglGetCurrentSurface(EGL_DRAW); 4557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian dpy = eglGetCurrentDisplay(); 4567a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 4577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ~MyThread() { 4597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 4607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian void bufferDequeued() { 4627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 4637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(true, mBufferRetired); 4647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 4657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 4667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4688b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->setSynchronousMode(true)); 4698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 4707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // dequeue/queue/update so we have a current buffer 4718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 4728b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 4738b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 4747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4758b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread* thread = new MyThread(mST); 4767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sp<Thread> threadBase(thread); 4777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 4798b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 480e122079be632b849a71181d83a6d38b701f642f5Mathias Agopian thread->run(); 4818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[1])); 4828b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1])); 4838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis //ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[2])); 4848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis //ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2])); 4857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->bufferDequeued(); 4867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->requestExitAndWait(); 4877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 48952226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixReturnsVerticalFlip) { 49052226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 49152226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 4928b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 4938b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 4948b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 4958b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 4968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 49752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 49852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 49952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 50052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 50152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 50252226048095c2eb27ede0c3389626df270a0abffJamie Gennis 50352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 50452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 50552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 50652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 50752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 50852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 50952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 51052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 51152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 51252226048095c2eb27ede0c3389626df270a0abffJamie Gennis 51352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 51452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 51552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 51652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 51752226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 51852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 51952226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffers) { 52052226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 52152226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 5228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 5238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 5248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 5258b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5268b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 5278b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 52852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 52952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 53052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 53152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 53252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 53352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 53452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 53552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 53652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 53752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 53852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 53952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 54052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 54152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 54252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 54352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 54452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 54552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 54652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 54752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 54852226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 54952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 55052226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWithCrop) { 55152226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 55252226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 55352226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_rect_t crop; 55452226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.left = 0; 55552226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.top = 0; 55652226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.right = 5; 55752226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.bottom = 5; 55852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 5598b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 5608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(mANW.get(), 8, 8, 0)); 5618b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->dequeueBuffer(mANW.get(), &buf[0])); 5628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_crop(mANW.get(), &crop)); 5638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0])); 5648b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5658b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 5668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 56752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 56852226048095c2eb27ede0c3389626df270a0abffJamie Gennis // This accounts for the 1 texel shrink for each edge that's included in the 56952226048095c2eb27ede0c3389626df270a0abffJamie Gennis // transform matrix to avoid texturing outside the crop region. 57052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(.5f, mtx[0]); 57152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 57252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 57352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 57452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 57552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 57652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-.5f, mtx[5]); 57752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 57852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 57952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 58152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 58252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 58352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 58452226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 58652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(.5f, mtx[13]); 58752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 58852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 589134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 59052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 591a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// This test verifies that the buffer format can be queried immediately after 592a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// it is set. 59307ed1a94bcad9b78b20f74f890d4271099da3a97Jamie GennisTEST_F(SurfaceTextureClientTest, QueryFormatAfterSettingWorks) { 594a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis sp<ANativeWindow> anw(mSTC); 595a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmts[] = { 596a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis // RGBA_8888 should not come first, as it's the default 597a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBX_8888, 598a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_8888, 599a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_888, 600a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_565, 601a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_BGRA_8888, 602a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_5551, 603a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_4444, 604a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_YV12, 605a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis }; 606a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 607a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis const int numFmts = (sizeof(fmts) / sizeof(fmts[0])); 608a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis for (int i = 0; i < numFmts; i++) { 609a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmt = -1; 610a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_geometry(anw.get(), 0, 0, fmts[i])); 611a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt)); 612a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis EXPECT_EQ(fmts[i], fmt); 613a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis } 614a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis} 615a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 61652226048095c2eb27ede0c3389626df270a0abffJamie Gennis} // namespace android 617