resolve merge conflicts of f5a50cbc to deqp-dev
[platform/upstream/VK-GL-CTS.git] / framework / common / tcuApp.hpp
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
34 namespace tcu
35 {
36
37 class Archive;
38 class Platform;
39 class TestContext;
40 class TestSessionExecutor;
41 class CommandLine;
42 class TestLog;
43 class TestPackageRoot;
44 class TestRunStatus;
45
46 /*--------------------------------------------------------------------*//*!
47  * \brief Test application
48  *
49  * Test application encapsulates full test execution logic. Platform port
50  * must create App object and repeately call iterate() until it returns
51  * false.
52  *
53  * On systems where main loop is not in control of application (such as
54  * Android or iOS) iterate() should be called in application update/draw
55  * callback.
56  *
57  * App is responsible of setting up crash handler (qpCrashHandler) and
58  * watchdog (qpWatchDog).
59  *
60  * See tcuMain.cpp for an example on how to implement application stub.
61  *//*--------------------------------------------------------------------*/
62 class App
63 {
64 public:
65                                                         App                                     (Platform& platform, Archive& archive, TestLog& log, const CommandLine& cmdLine);
66         virtual                                 ~App                            (void);
67
68         bool                                    iterate                         (void);
69         const TestRunStatus&    getResult                       (void) const;
70
71 protected:
72         void                                    cleanup                         (void);
73
74         void                                    onWatchdogTimeout       (qpTimeoutReason reason);
75         void                                    onCrash                         (void);
76
77         static void                             onWatchdogTimeout       (qpWatchDog* watchDog, void* userPtr, qpTimeoutReason reason);
78         static void                             onCrash                         (qpCrashHandler* crashHandler, void* userPtr);
79
80         Platform&                               m_platform;
81         qpWatchDog*                             m_watchDog;
82         qpCrashHandler*                 m_crashHandler;
83         de::Mutex                               m_crashLock;
84         bool                                    m_crashed;
85
86         TestContext*                    m_testCtx;
87         TestPackageRoot*                m_testRoot;
88         TestSessionExecutor*    m_testExecutor;
89 };
90
91 } // tcu
92
93 #endif // _TCUAPP_HPP