13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief dEQP instrumentation
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypackage com.drawelements.deqp.testercore;
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.app.ActivityManager;
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.app.Instrumentation;
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.app.Activity;
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.app.NativeActivity;
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.content.Context;
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.content.Intent;
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.content.ComponentName;
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport android.os.Bundle;
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport java.util.List;
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport java.lang.Thread;
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport java.io.File;
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport java.io.FileInputStream;
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport java.io.FileNotFoundException;
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport java.io.IOException;
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic class DeqpInstrumentation extends Instrumentation
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4685a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos	private static final String	LOG_TAG					= "dEQP/Instrumentation";
4785a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos	private static final long	LAUNCH_TIMEOUT_MS		= 10000;
4885a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos	private static final long	NO_DATA_TIMEOUT_MS		= 1000;
4985a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos	private static final long	NO_ACTIVITY_SLEEP_MS	= 100;
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	private String				m_cmdLine;
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	private String				m_logFileName;
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	private boolean				m_logData;
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	@Override
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void onCreate (Bundle arguments) {
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		super.onCreate(arguments);
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		start();
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_cmdLine		= arguments.getString("deqpCmdLine");
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_logFileName	= arguments.getString("deqpLogFilename");
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_cmdLine == null)
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_cmdLine = "";
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_logFileName == null)
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_logFileName = "/sdcard/TestLog.qpa";
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (arguments.getString("deqpLogData") != null)
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (arguments.getString("deqpLogData").compareToIgnoreCase("true") == 0)
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				m_logData = true;
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				m_logData = false;
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_logData = false;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	@Override
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void onStart () {
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		super.onStart();
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos		final RemoteAPI		remoteApi	= new RemoteAPI(getTargetContext(), m_logFileName);
8585a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos		final TestLogParser	parser		= new TestLogParser();
8685a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		try
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			Log.d(LOG_TAG, "onStart");
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			final String	testerName		= "";
9285a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			final File		logFile			= new File(m_logFileName);
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			if (logFile.exists())
9585a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				logFile.delete(); // Remove log file left by previous session
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			remoteApi.start(testerName, m_cmdLine, null);
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
10085a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				final long startTimeMs = System.currentTimeMillis();
10185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos
10285a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				while (true)
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				{
10485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					final long timeSinceStartMs = System.currentTimeMillis()-startTimeMs;
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10685a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					if (logFile.exists())
10785a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						break;
10885a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					else if (timeSinceStartMs > LAUNCH_TIMEOUT_MS)
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					{
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						remoteApi.kill();
11185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						throw new Exception("Timeout while waiting for log file");
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					}
11385a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					else
11485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						Thread.sleep(NO_ACTIVITY_SLEEP_MS);
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				}
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11885a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			parser.init(this, m_logFileName, m_logData);
11985a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos
12085a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			{
12185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				long lastDataMs = System.currentTimeMillis();
12285a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos
12385a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				while (true)
12485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				{
12585a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					if (parser.parse())
12685a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						lastDataMs = System.currentTimeMillis();
12785a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					else if (!remoteApi.isRunning())
12885a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					{
12985a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						final long timeSinceLastDataMs = System.currentTimeMillis()-lastDataMs;
13085a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos
13185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						if (timeSinceLastDataMs > NO_DATA_TIMEOUT_MS)
13285a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos							break; // Assume no data is available for reading any more
13385a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					}
13485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos					else
13585a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos						Thread.sleep(NO_ACTIVITY_SLEEP_MS);
13685a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				}
13785a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			}
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			finish(0, new Bundle());
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		catch (Exception e)
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
14385a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			Log.e(LOG_TAG, "Exception", e);
14485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			Bundle info = new Bundle();
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			info.putString("Exception", e.getMessage());
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			finish(1, new Bundle());
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15085a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos		finally
15185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos		{
15285a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			try
15385a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			{
15485a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				parser.deinit();
15585a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			}
15685a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			catch (Exception e)
15785a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			{
15885a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos				Log.w(LOG_TAG, "Got exception while closing log", e);
15985a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			}
16085a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos			remoteApi.kill();
16185a7efa09c2487d7a1907e4f70115fb7f579eca1Pyry Haulos		}
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void testCaseResult (String code, String details)
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "TestCaseResult");
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-TestCaseResult-Code", code);
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-TestCaseResult-Details", details);
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void beginTestCase (String testCase)
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "BeginTestCase");
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-BeginTestCase-TestCasePath", testCase);
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void endTestCase ()
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "EndTestCase");
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void testLogData (String log) throws InterruptedException
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_logData)
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			final int chunkSize = 4*1024;
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			while (log != null)
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				String message;
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				if (log.length() > chunkSize)
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				{
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					message = log.substring(0, chunkSize);
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					log = log.substring(chunkSize);
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				}
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				else
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				{
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					message = log;
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					log = null;
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				}
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				Bundle info = new Bundle();
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				info.putString("dEQP-EventType", "TestLogData");
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				info.putString("dEQP-TestLogData-Log", message);
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				sendStatus(0, info);
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				if (log != null)
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				{
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					Thread.sleep(1); // 1ms
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				}
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void beginSession ()
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "BeginSession");
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void endSession ()
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "EndSession");
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void sessionInfo (String name, String value)
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "SessionInfo");
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-SessionInfo-Name", name);
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-SessionInfo-Value", value);
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void terminateTestCase (String reason)
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Bundle info = new Bundle();
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-EventType", "TerminateTestCase");
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.putString("dEQP-TerminateTestCase-Reason", reason);
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		sendStatus(0, info);
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	@Override
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public void onDestroy() {
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Log.e(LOG_TAG, "onDestroy");
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		super.onDestroy();
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		Log.e(LOG_TAG, "onDestroy");
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
272