116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck/* 216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Copyright (C) 2015 The Android Open Source Project 316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * 416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * you may not use this file except in compliance with the License. 616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * You may obtain a copy of the License at 716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * 816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * http://www.apache.org/licenses/LICENSE-2.0 916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * 1016c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Unless required by applicable law or agreed to in writing, software 1116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * distributed under the License is distributed on an "AS IS" BASIS, 1216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * See the License for the specific language governing permissions and 1416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * limitations under the License. 1516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck */ 1616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#ifndef TESTS_TESTSCENE_H 1716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#define TESTS_TESTSCENE_H 1816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck 1927e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik#include <string> 2027e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik#include <unordered_map> 2127e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 2216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Recknamespace android { 2316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Recknamespace uirenderer { 2416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckclass RenderNode; 2516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck 2616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#if HWUI_NEW_OPS 2716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckclass RecordingCanvas; 2816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Recktypedef RecordingCanvas TestCanvas; 2916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#else 3016c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckclass DisplayListCanvas; 3116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Recktypedef DisplayListCanvas TestCanvas; 3216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#endif 3316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck 3416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Recknamespace test { 3516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck 3616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckclass TestScene { 3716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckpublic: 3827e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik struct Options { 3927e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik int count = 0; 40682573c84b7c21dc8ce4a2375da3961147442c4aJohn Reck int reportFrametimeWeight = 0; 4127e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik }; 4227e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 4327e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik template <class T> 4427e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik static test::TestScene* simpleCreateScene(const TestScene::Options&) { 4527e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik return new T(); 4627e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik } 4727e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 4827e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik typedef test::TestScene* (*CreateScene)(const TestScene::Options&); 4927e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 5027e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik struct Info { 5127e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik std::string name; 5227e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik std::string description; 5327e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik CreateScene createScene; 5427e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik }; 5527e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 5627e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik class Registrar { 5727e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik public: 5827e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik Registrar(const TestScene::Info& info) { 5927e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik TestScene::registerScene(info); 6027e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik } 6127e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik private: 6227e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik Registrar() = delete; 6327e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik Registrar(const Registrar&) = delete; 6427e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik Registrar& operator=(const Registrar&) = delete; 6527e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik }; 6627e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 6716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck virtual ~TestScene() {} 6816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck virtual void createContent(int width, int height, TestCanvas& renderer) = 0; 6916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck virtual void doFrame(int frameNr) = 0; 7027e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik 7127e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik static std::unordered_map<std::string, Info>& testMap(); 7227e58b4f54d693ff1db7ab2edb5d47ca296c1278Chris Craik static void registerScene(const Info& info); 7316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck}; 7416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck 7516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck} // namespace test 7616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck} // namespace uirenderer 7716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck} // namespace android 7816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck 7916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#endif /* TESTS_TESTSCENE_H */ 80