194c40fe92117f301c7758de2861ab0c1d6cfded0John Reck/*
294c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * Copyright (C) 2014 The Android Open Source Project
394c40fe92117f301c7758de2861ab0c1d6cfded0John Reck *
494c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * Licensed under the Apache License, Version 2.0 (the "License");
594c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * you may not use this file except in compliance with the License.
694c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * You may obtain a copy of the License at
794c40fe92117f301c7758de2861ab0c1d6cfded0John Reck *
894c40fe92117f301c7758de2861ab0c1d6cfded0John Reck *      http://www.apache.org/licenses/LICENSE-2.0
994c40fe92117f301c7758de2861ab0c1d6cfded0John Reck *
1094c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * Unless required by applicable law or agreed to in writing, software
1194c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * distributed under the License is distributed on an "AS IS" BASIS,
1294c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * See the License for the specific language governing permissions and
1494c40fe92117f301c7758de2861ab0c1d6cfded0John Reck * limitations under the License.
1594c40fe92117f301c7758de2861ab0c1d6cfded0John Reck */
1694c40fe92117f301c7758de2861ab0c1d6cfded0John Reck
1794c40fe92117f301c7758de2861ab0c1d6cfded0John Reck#ifndef TESTCONTEXT_H
1894c40fe92117f301c7758de2861ab0c1d6cfded0John Reck#define TESTCONTEXT_H
1994c40fe92117f301c7758de2861ab0c1d6cfded0John Reck
2084e390cc903ae4027276c33371ad5237b550910fJohn Reck#include <gui/DisplayEventReceiver.h>
2184e390cc903ae4027276c33371ad5237b550910fJohn Reck#include <gui/ISurfaceComposer.h>
22f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck#include <gui/BufferItemConsumer.h>
2384e390cc903ae4027276c33371ad5237b550910fJohn Reck#include <gui/SurfaceComposerClient.h>
2494c40fe92117f301c7758de2861ab0c1d6cfded0John Reck#include <gui/SurfaceControl.h>
2584e390cc903ae4027276c33371ad5237b550910fJohn Reck#include <gui/Surface.h>
2684e390cc903ae4027276c33371ad5237b550910fJohn Reck#include <ui/DisplayInfo.h>
2784e390cc903ae4027276c33371ad5237b550910fJohn Reck#include <utils/Looper.h>
2884e390cc903ae4027276c33371ad5237b550910fJohn Reck
29f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck#include <thread>
30f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck#include <atomic>
31f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck
3284e390cc903ae4027276c33371ad5237b550910fJohn Recknamespace android {
3384e390cc903ae4027276c33371ad5237b550910fJohn Recknamespace uirenderer {
3484e390cc903ae4027276c33371ad5237b550910fJohn Recknamespace test {
3584e390cc903ae4027276c33371ad5237b550910fJohn Reck
3684e390cc903ae4027276c33371ad5237b550910fJohn Reckextern DisplayInfo gDisplay;
3784e390cc903ae4027276c33371ad5237b550910fJohn Reck#define dp(x) ((x) * android::uirenderer::test::gDisplay.density)
3884e390cc903ae4027276c33371ad5237b550910fJohn Reck
39e702c9cd6a2b9b1378f740a79b0e349a9b02660fJohn ReckDisplayInfo getBuiltInDisplay();
40e702c9cd6a2b9b1378f740a79b0e349a9b02660fJohn Reck
4184e390cc903ae4027276c33371ad5237b550910fJohn Reckclass TestContext {
4284e390cc903ae4027276c33371ad5237b550910fJohn Reckpublic:
4384e390cc903ae4027276c33371ad5237b550910fJohn Reck    TestContext();
4484e390cc903ae4027276c33371ad5237b550910fJohn Reck    ~TestContext();
4584e390cc903ae4027276c33371ad5237b550910fJohn Reck
46f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    // Must be called before surface();
47f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    void setRenderOffscreen(bool renderOffscreen) {
48f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck        LOG_ALWAYS_FATAL_IF(mSurface.get(),
49f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck                "Must be called before surface is created");
50f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck        mRenderOffscreen = renderOffscreen;
51f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    }
52f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck
5384e390cc903ae4027276c33371ad5237b550910fJohn Reck    sp<Surface> surface();
5494c40fe92117f301c7758de2861ab0c1d6cfded0John Reck
5584e390cc903ae4027276c33371ad5237b550910fJohn Reck    void waitForVsync();
5694c40fe92117f301c7758de2861ab0c1d6cfded0John Reck
5784e390cc903ae4027276c33371ad5237b550910fJohn Reckprivate:
58f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    void createSurface();
59f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    void createWindowSurface();
60f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    void createOffscreenSurface();
61f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck
6284e390cc903ae4027276c33371ad5237b550910fJohn Reck    sp<SurfaceComposerClient> mSurfaceComposerClient;
6384e390cc903ae4027276c33371ad5237b550910fJohn Reck    sp<SurfaceControl> mSurfaceControl;
64f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    sp<BufferItemConsumer> mConsumer;
6584e390cc903ae4027276c33371ad5237b550910fJohn Reck    DisplayEventReceiver mDisplayEventReceiver;
6684e390cc903ae4027276c33371ad5237b550910fJohn Reck    sp<Looper> mLooper;
67f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    sp<Surface> mSurface;
68f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    bool mRenderOffscreen;
6984e390cc903ae4027276c33371ad5237b550910fJohn Reck};
7094c40fe92117f301c7758de2861ab0c1d6cfded0John Reck
7184e390cc903ae4027276c33371ad5237b550910fJohn Reck} // namespace test
7284e390cc903ae4027276c33371ad5237b550910fJohn Reck} // namespace uirenderer
7384e390cc903ae4027276c33371ad5237b550910fJohn Reck} // namespace android
7494c40fe92117f301c7758de2861ab0c1d6cfded0John Reck
7594c40fe92117f301c7758de2861ab0c1d6cfded0John Reck#endif
76