You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.8 KiB
100 lines
2.8 KiB
#ifndef _TCUAPP_HPP
|
|
#define _TCUAPP_HPP
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program Tester Core
|
|
* ----------------------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Tester application.
|
|
*
|
|
* Platform port (see tcuPlatform.hpp) must create App and issue calls to
|
|
* App::iterate() until it signals that test execution is completed.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "tcuDefs.hpp"
|
|
#include "qpWatchDog.h"
|
|
#include "qpCrashHandler.h"
|
|
#include "deMutex.hpp"
|
|
|
|
namespace tcu
|
|
{
|
|
|
|
class Archive;
|
|
class Platform;
|
|
class TestContext;
|
|
class TestSessionExecutor;
|
|
class CommandLine;
|
|
class TestLog;
|
|
class TestPackageRoot;
|
|
class TestRunStatus;
|
|
|
|
enum
|
|
{
|
|
WATCHDOG_TOTAL_TIME_LIMIT_SECS = 300,
|
|
WATCHDOG_INTERVAL_TIME_LIMIT_SECS = 30
|
|
};
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Test application
|
|
*
|
|
* Test application encapsulates full test execution logic. Platform port
|
|
* must create App object and repeately call iterate() until it returns
|
|
* false.
|
|
*
|
|
* On systems where main loop is not in control of application (such as
|
|
* Android or iOS) iterate() should be called in application update/draw
|
|
* callback.
|
|
*
|
|
* App is responsible of setting up crash handler (qpCrashHandler) and
|
|
* watchdog (qpWatchDog).
|
|
*
|
|
* See tcuMain.cpp for an example on how to implement application stub.
|
|
*//*--------------------------------------------------------------------*/
|
|
class App
|
|
{
|
|
public:
|
|
App (Platform& platform, Archive& archive, TestLog& log, const CommandLine& cmdLine);
|
|
virtual ~App (void);
|
|
|
|
bool iterate (void);
|
|
const TestRunStatus& getResult (void) const;
|
|
|
|
protected:
|
|
void cleanup (void);
|
|
|
|
void onWatchdogTimeout (qpTimeoutReason reason);
|
|
void onCrash (void);
|
|
|
|
static void onWatchdogTimeout (qpWatchDog* watchDog, void* userPtr, qpTimeoutReason reason);
|
|
static void onCrash (qpCrashHandler* crashHandler, void* userPtr);
|
|
|
|
Platform& m_platform;
|
|
qpWatchDog* m_watchDog;
|
|
qpCrashHandler* m_crashHandler;
|
|
de::Mutex m_crashLock;
|
|
bool m_crashed;
|
|
|
|
TestContext* m_testCtx;
|
|
TestPackageRoot* m_testRoot;
|
|
TestSessionExecutor* m_testExecutor;
|
|
};
|
|
|
|
} // tcu
|
|
|
|
#endif // _TCUAPP_HPP
|