Surface_test.cpp revision 134f0422866e8985188ed10dfbdcb8e6c34b87f7
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 17134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <gtest/gtest.h> 18134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <surfaceflinger/ISurfaceComposer.h> 19134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <surfaceflinger/Surface.h> 20134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <surfaceflinger/SurfaceComposerClient.h> 21134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 22134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <utils/String8.h> 23134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 24134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisnamespace android { 25134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 26134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisclass SurfaceTest : public ::testing::Test { 27134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisprotected: 28134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual sp<SurfaceComposerClient> getSurfaceComposerClient() { 29134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis return sp<SurfaceComposerClient>(new SurfaceComposerClient); 30134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 31134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 32134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void SetUp() { 33134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mComposerClient = getSurfaceComposerClient(); 34134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_EQ(NO_ERROR, mComposerClient->initCheck()); 35134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 36134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSurfaceControl = mComposerClient->createSurface(getpid(), 37134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis String8("Test Surface"), 0, 32, 32, PIXEL_FORMAT_RGB_888, 0); 38134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 39134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_TRUE(mSurfaceControl != NULL); 40134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_TRUE(mSurfaceControl->isValid()); 41134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 42134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_EQ(NO_ERROR, mComposerClient->openTransaction()); 43134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_EQ(NO_ERROR, mSurfaceControl->setLayer(30000)); 44134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_EQ(NO_ERROR, mSurfaceControl->show()); 45134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_EQ(NO_ERROR, mComposerClient->closeTransaction()); 46134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 47134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSurface = mSurfaceControl->getSurface(); 48134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ASSERT_TRUE(mSurface != NULL); 49134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 50134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 51134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void TearDown() { 52134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mComposerClient->dispose(); 53134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 54134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 55134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<Surface> mSurface; 56134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<SurfaceComposerClient> mComposerClient; 57134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<SurfaceControl> mSurfaceControl; 58134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis}; 59134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 60134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { 61134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<ANativeWindow> anw(mSurface); 62134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 63134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int err = anw->query(anw.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 64134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 65134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 66134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(1, result); 67134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 68134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 69134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { 70134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSurfaceControl.clear(); 71134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 72134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis sp<ANativeWindow> anw(mSurface); 73134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 74134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int err = anw->query(anw.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 75134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 76134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 77134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(1, result); 78134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 79134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 80134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 81