1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <string>
20 #include <unordered_map>
21 
22 namespace android {
23 
24 class Canvas;
25 
26 namespace uirenderer {
27 class RenderNode;
28 class RecordingCanvas;
29 
30 namespace test {
31 
32 class TestScene {
33 public:
34     struct Options {
35         int count = 0;
36         int reportFrametimeWeight = 0;
37         bool renderOffscreen = true;
38     };
39 
40     template <class T>
simpleCreateScene(const TestScene::Options &)41     static test::TestScene* simpleCreateScene(const TestScene::Options&) {
42         return new T();
43     }
44 
45     typedef test::TestScene* (*CreateScene)(const TestScene::Options&);
46 
47     struct Info {
48         std::string name;
49         std::string description;
50         CreateScene createScene;
51     };
52 
53     class Registrar {
54     public:
Registrar(const TestScene::Info & info)55         explicit Registrar(const TestScene::Info& info) {
56             TestScene::registerScene(info);
57         }
58     private:
59         Registrar() = delete;
60         Registrar(const Registrar&) = delete;
61         Registrar& operator=(const Registrar&) = delete;
62     };
63 
~TestScene()64     virtual ~TestScene() {}
65     virtual void createContent(int width, int height, Canvas& renderer) = 0;
66     virtual void doFrame(int frameNr) = 0;
67 
68     static std::unordered_map<std::string, Info>& testMap();
69     static void registerScene(const Info& info);
70 };
71 
72 } // namespace test
73 } // namespace uirenderer
74 } // namespace android
75