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