blob: 84621ae199a26f540cc34a65e5ff959479efe44e [file] [log] [blame]
#ifndef _TCUANDROIDEXECSERVICE_HPP
#define _TCUANDROIDEXECSERVICE_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 Android ExecService.
*//*--------------------------------------------------------------------*/
#include "tcuDefs.hpp"
#include "deThread.hpp"
#include "xsExecutionServer.hpp"
#include "xsPosixFileReader.hpp"
#include <jni.h>
namespace tcu
{
namespace Android
{
enum
{
DEFAULT_PORT = 50016,
DEFAULT_SOCKETFAMILY = DE_SOCKETFAMILY_INET4
};
class TestProcess : public xs::TestProcess
{
public:
TestProcess(JavaVM *vm, jobject context);
~TestProcess(void);
virtual void start(const char *name, const char *params, const char *workingDir, const char *caseList);
virtual void terminate(void);
virtual void cleanup(void);
virtual bool isRunning(void);
virtual int getExitCode(void) const;
virtual int readTestLog(uint8_t *dst, int numBytes);
virtual int readInfoLog(uint8_t *dst, int numBytes);
private:
JNIEnv *getCurrentThreadEnv(void);
JavaVM *m_vm;
jclass m_remoteCls;
jobject m_remote;
jmethodID m_start;
jmethodID m_kill;
jmethodID m_isRunning;
uint64_t m_launchTime;
uint64_t m_lastQueryTime;
bool m_lastRunningStatus;
xs::posix::FileReader m_logReader;
};
class ExecutionServer : public xs::ExecutionServer
{
public:
ExecutionServer(JavaVM *vm, xs::TestProcess *testProcess, deSocketFamily family, int port, RunMode runMode);
xs::ConnectionHandler *createHandler(de::Socket *socket, const de::SocketAddress &clientAddress);
private:
JavaVM *m_vm;
};
class ConnectionHandler : public xs::ExecutionRequestHandler
{
public:
ConnectionHandler(JavaVM *vm, xs::ExecutionServer *server, de::Socket *socket);
void run(void);
private:
JavaVM *m_vm;
};
class ServerThread : public de::Thread
{
public:
ServerThread(JavaVM *vm, xs::TestProcess *testProcess, deSocketFamily family, int port);
void run(void);
void stop(void);
private:
ExecutionServer m_server;
};
class ExecService
{
public:
ExecService(JavaVM *vm, jobject context, int port, deSocketFamily family = (deSocketFamily)DEFAULT_SOCKETFAMILY);
~ExecService(void);
void start(void);
void stop(void);
private:
ExecService(const ExecService &other);
ExecService &operator=(const ExecService &other);
TestProcess m_process;
ServerThread m_thread;
};
} // namespace Android
} // namespace tcu
#endif // _TCUANDROIDEXECSERVICE_HPP