Hwc2TestLayers.h revision 563030b4402f4b9aa08cece732f2a4a756a0f72c
1273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/*
2273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Copyright (C) 2016 The Android Open Source Project
3273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *
4273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Licensed under the Apache License, Version 2.0 (the "License");
5273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * you may not use this file except in compliance with the License.
6273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * You may obtain a copy of the License at
7273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *
8273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *      http://www.apache.org/licenses/LICENSE-2.0
9273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *
10273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Unless required by applicable law or agreed to in writing, software
11273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * distributed under the License is distributed on an "AS IS" BASIS,
12273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * See the License for the specific language governing permissions and
14273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * limitations under the License.
15273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall */
16273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
17273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#ifndef _HWC2_TEST_LAYERS_H
18273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#define _HWC2_TEST_LAYERS_H
19273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
20273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include <map>
21273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
22273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#define HWC2_INCLUDE_STRINGIFICATION
23273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#define HWC2_USE_CPP11
24273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include <hardware/hwcomposer2.h>
25273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#undef HWC2_INCLUDE_STRINGIFICATION
26273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#undef HWC2_USE_CPP11
27273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
28273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestProperties.h"
29273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayer.h"
30273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
31273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallclass Hwc2TestLayers {
32273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallpublic:
33273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall    Hwc2TestLayers(const std::vector<hwc2_layer_t>& layers,
34600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall            Hwc2TestCoverage coverage, const Area& displayArea);
35273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
36563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall    Hwc2TestLayers(const std::vector<hwc2_layer_t>& layers,
37563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall            Hwc2TestCoverage coverage, const Area& displayArea,
38563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall            const std::unordered_map<Hwc2TestPropertyName,
39563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall            Hwc2TestCoverage>& coverageExceptions);
40563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall
41273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall    std::string dump() const;
42273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
43273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall    void reset();
44273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    bool advance();
46f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall    bool advanceVisibleRegions();
47f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall
48f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall    /* Test cases with multiple layers and property values can take quite some
49f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall     * time to run. A significant amount of time can be spent on test cases
50f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall     * where one layer is changing property values but is not visible. To
51f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall     * decrease runtime, this function can be called. Removes layouts where a
52f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall     * layer is completely blocked from view. It also removes layouts that do
53f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall     * not cover the entire display.*/
54f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall    bool optimizeLayouts();
55f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall
561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    bool contains(hwc2_layer_t layer) const;
571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall
581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    int  getBuffer(hwc2_layer_t layer, buffer_handle_t* outHandle,
591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall            int32_t* outAcquireFence);
601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall
611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc2_blend_mode_t      getBlendMode(hwc2_layer_t layer) const;
62f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall    Area                   getBufferArea(hwc2_layer_t layer) const;
631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_color_t            getColor(hwc2_layer_t layer) const;
641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc2_composition_t     getComposition(hwc2_layer_t layer) const;
651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_rect_t             getCursorPosition(hwc2_layer_t layer) const;
661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    android_dataspace_t    getDataspace(hwc2_layer_t layer) const;
671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_rect_t             getDisplayFrame(hwc2_layer_t layer) const;
681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    android_pixel_format_t getFormat(hwc2_layer_t layer) const;
691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    float                  getPlaneAlpha(hwc2_layer_t layer) const;
701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_frect_t            getSourceCrop(hwc2_layer_t layer) const;
711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_region_t           getSurfaceDamage(hwc2_layer_t layer) const;
721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_transform_t        getTransform(hwc2_layer_t layer) const;
731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    hwc_region_t           getVisibleRegion(hwc2_layer_t layer) const;
741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    uint32_t               getZOrder(hwc2_layer_t layer) const;
75273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
76273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallprivate:
77f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall    bool setVisibleRegions();
78f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall
79273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall    std::map<hwc2_layer_t, Hwc2TestLayer> mTestLayers;
801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall
811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall    Area mDisplayArea;
82f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall
83f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall    bool mOptimize = false;
84273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall};
85273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall
86273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#endif /* ifndef _HWC2_TEST_LAYERS_H */
87