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