SurfaceTextureClient_test.cpp revision cf0b8c85fb0106751256dba7821f86b5ad03126c
1134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis/*
2134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Copyright (C) 2011 The Android Open Source Project
3134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis *
4134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Licensed under the Apache License, Version 2.0 (the "License");
5134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * you may not use this file except in compliance with the License.
6134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * You may obtain a copy of the License at
7134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis *
8134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis *      http://www.apache.org/licenses/LICENSE-2.0
9134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis *
10134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Unless required by applicable law or agreed to in writing, software
11134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * distributed under the License is distributed on an "AS IS" BASIS,
12134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * See the License for the specific language governing permissions and
14134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * limitations under the License.
15134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis */
16134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis
17fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#define LOG_TAG "SurfaceTextureClient_test"
18fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis//#define LOG_NDEBUG 0
19fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis
205c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis#include <EGL/egl.h>
21134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <gtest/gtest.h>
22e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/Surface.h>
23d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis#include <system/graphics.h>
24fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Log.h>
25fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Thread.h>
26134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis
27134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisnamespace android {
28134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis
29134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisclass SurfaceTextureClientTest : public ::testing::Test {
30134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisprotected:
317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian    SurfaceTextureClientTest():
327a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian            mEglDisplay(EGL_NO_DISPLAY),
337a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian            mEglSurface(EGL_NO_SURFACE),
347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian            mEglContext(EGL_NO_CONTEXT) {
357a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian    }
367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian
37134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis    virtual void SetUp() {
38fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis        const ::testing::TestInfo* const testInfo =
39fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis            ::testing::UnitTest::GetInstance()->current_test_info();
40fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis        ALOGV("Begin test: %s.%s", testInfo->test_case_name(),
41fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis                testInfo->name());
42fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis
432adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden        mST = new GLConsumer(123);
44e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian        mSTC = new Surface(mST->getBufferQueue());
458b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis        mANW = mSTC;
467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian
477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        // We need a valid GL context so we can test updateTexImage()
487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        // This initializes EGL and create a dummy GL context with a
497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        // pbuffer render target.
507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        ASSERT_EQ(EGL_SUCCESS, eglGetError());
527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay);
537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian
547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        EGLint majorVersion, minorVersion;
557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion));
567a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        ASSERT_EQ(EGL_SUCCESS, eglGetError());
577a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian
587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        EGLConfig myConfig;
597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        EGLint numConfigs = 0;
607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(),
617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian                &myConfig, 1, &numConfigs));
627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian        ASSERT_EQ(EGL_SUCCESS, eglGetError());
637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian
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;
106e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian    sp<Surface> 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) {
115cf0b8c85fb0106751256dba7821f86b5ad03126cMathias Agopian    sp<IGraphicBufferProducer> ist(mSTC->getIGraphicBufferProducer());
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);
131e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian    EXPECT_EQ(NATIVE_WINDOW_SURFACE, 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));
689e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian            sp<Surface> stc(new Surface(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