1#ifndef _TCUAPP_HPP 2#define _TCUAPP_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Tester application. 24 * 25 * Platform port (see tcuPlatform.hpp) must create App and issue calls to 26 * App::iterate() until it signals that test execution is completed. 27 *//*--------------------------------------------------------------------*/ 28 29#include "tcuDefs.hpp" 30#include "qpWatchDog.h" 31#include "qpCrashHandler.h" 32#include "deMutex.hpp" 33 34namespace tcu 35{ 36 37class Archive; 38class Platform; 39class TestContext; 40class TestSessionExecutor; 41class CommandLine; 42class TestLog; 43class TestPackageRoot; 44 45/*--------------------------------------------------------------------*//*! 46 * \brief Test application 47 * 48 * Test application encapsulates full test execution logic. Platform port 49 * must create App object and repeately call iterate() until it returns 50 * false. 51 * 52 * On systems where main loop is not in control of application (such as 53 * Android or iOS) iterate() should be called in application update/draw 54 * callback. 55 * 56 * App is responsible of setting up crash handler (qpCrashHandler) and 57 * watchdog (qpWatchDog). 58 * 59 * See tcuMain.cpp for an example on how to implement application stub. 60 *//*--------------------------------------------------------------------*/ 61class App 62{ 63public: 64 App (Platform& platform, Archive& archive, TestLog& log, const CommandLine& cmdLine); 65 virtual ~App (void); 66 67 bool iterate (void); 68 69protected: 70 void cleanup (void); 71 72 void onWatchdogTimeout (void); 73 void onCrash (void); 74 75 static void onWatchdogTimeout (qpWatchDog* watchDog, void* userPtr); 76 static void onCrash (qpCrashHandler* crashHandler, void* userPtr); 77 78 Platform& m_platform; 79 qpWatchDog* m_watchDog; 80 qpCrashHandler* m_crashHandler; 81 de::Mutex m_crashLock; 82 bool m_crashed; 83 84 TestContext* m_testCtx; 85 TestPackageRoot* m_testRoot; 86 TestSessionExecutor* m_testExecutor; 87}; 88 89} // tcu 90 91#endif // _TCUAPP_HPP 92