1e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 2e5c31af7Sopenharmony_ci * drawElements Quality Program Tester Core 3e5c31af7Sopenharmony_ci * ---------------------------------------- 4e5c31af7Sopenharmony_ci * 5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 10e5c31af7Sopenharmony_ci * 11e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 12e5c31af7Sopenharmony_ci * 13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 17e5c31af7Sopenharmony_ci * limitations under the License. 18e5c31af7Sopenharmony_ci * 19e5c31af7Sopenharmony_ci *//*! 20e5c31af7Sopenharmony_ci * \file 21e5c31af7Sopenharmony_ci * \brief Android test activity. 22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/ 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci#include "tcuAndroidTestActivity.hpp" 25e5c31af7Sopenharmony_ci#include "tcuAndroidUtil.hpp" 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_ci#include <android/window.h> 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ci#include <string> 30e5c31af7Sopenharmony_ci#include <stdlib.h> 31e5c31af7Sopenharmony_ci 32e5c31af7Sopenharmony_ciusing std::string; 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_cinamespace tcu 35e5c31af7Sopenharmony_ci{ 36e5c31af7Sopenharmony_cinamespace Android 37e5c31af7Sopenharmony_ci{ 38e5c31af7Sopenharmony_ci 39e5c31af7Sopenharmony_ci// TestThread 40e5c31af7Sopenharmony_ci 41e5c31af7Sopenharmony_ciTestThread::TestThread (NativeActivity& activity, const std::string& cmdLineString, const CommandLine& cmdLine) 42e5c31af7Sopenharmony_ci : RenderThread (activity) 43e5c31af7Sopenharmony_ci , m_cmdLine (cmdLine) 44e5c31af7Sopenharmony_ci , m_platform (activity) 45e5c31af7Sopenharmony_ci , m_archive (activity.getNativeActivity()->assetManager) 46e5c31af7Sopenharmony_ci , m_log (m_cmdLine.getLogFileName(), m_cmdLine.getLogFlags()) 47e5c31af7Sopenharmony_ci , m_app (m_platform, m_archive, m_log, m_cmdLine) 48e5c31af7Sopenharmony_ci , m_finished (false) 49e5c31af7Sopenharmony_ci{ 50e5c31af7Sopenharmony_ci const std::string sessionInfo = "#sessionInfo commandLineParameters \""; 51e5c31af7Sopenharmony_ci m_log.writeSessionInfo(sessionInfo + cmdLineString + "\"\n"); 52e5c31af7Sopenharmony_ci} 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ciTestThread::~TestThread (void) 55e5c31af7Sopenharmony_ci{ 56e5c31af7Sopenharmony_ci // \note m_testApp is managed by thread. 57e5c31af7Sopenharmony_ci} 58e5c31af7Sopenharmony_ci 59e5c31af7Sopenharmony_civoid TestThread::run (void) 60e5c31af7Sopenharmony_ci{ 61e5c31af7Sopenharmony_ci RenderThread::run(); 62e5c31af7Sopenharmony_ci} 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_civoid TestThread::onWindowCreated (ANativeWindow* window) 65e5c31af7Sopenharmony_ci{ 66e5c31af7Sopenharmony_ci m_platform.getWindowRegistry().addWindow(window); 67e5c31af7Sopenharmony_ci} 68e5c31af7Sopenharmony_ci 69e5c31af7Sopenharmony_civoid TestThread::onWindowDestroyed (ANativeWindow* window) 70e5c31af7Sopenharmony_ci{ 71e5c31af7Sopenharmony_ci m_platform.getWindowRegistry().destroyWindow(window); 72e5c31af7Sopenharmony_ci} 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_civoid TestThread::onWindowResized (ANativeWindow* window) 75e5c31af7Sopenharmony_ci{ 76e5c31af7Sopenharmony_ci DE_UNREF(window); 77e5c31af7Sopenharmony_ci print("Warning: Native window was resized, results may be undefined"); 78e5c31af7Sopenharmony_ci} 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_cibool TestThread::render (void) 81e5c31af7Sopenharmony_ci{ 82e5c31af7Sopenharmony_ci if (!m_finished) 83e5c31af7Sopenharmony_ci m_finished = !m_app.iterate(); 84e5c31af7Sopenharmony_ci return !m_finished; 85e5c31af7Sopenharmony_ci} 86e5c31af7Sopenharmony_ci 87e5c31af7Sopenharmony_ci// TestActivity 88e5c31af7Sopenharmony_ci 89e5c31af7Sopenharmony_ciTestActivity::TestActivity (ANativeActivity* activity) 90e5c31af7Sopenharmony_ci : RenderActivity (activity) 91e5c31af7Sopenharmony_ci , m_cmdLine (getIntentStringExtra(activity, "cmdLine")) 92e5c31af7Sopenharmony_ci , m_testThread (*this, getIntentStringExtra(activity, "cmdLine"), m_cmdLine) 93e5c31af7Sopenharmony_ci , m_started (false) 94e5c31af7Sopenharmony_ci{ 95e5c31af7Sopenharmony_ci // Set initial orientation. 96e5c31af7Sopenharmony_ci setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation())); 97e5c31af7Sopenharmony_ci 98e5c31af7Sopenharmony_ci // Set up window flags. 99e5c31af7Sopenharmony_ci ANativeActivity_setWindowFlags(activity, AWINDOW_FLAG_KEEP_SCREEN_ON | 100e5c31af7Sopenharmony_ci AWINDOW_FLAG_TURN_SCREEN_ON | 101e5c31af7Sopenharmony_ci AWINDOW_FLAG_FULLSCREEN | 102e5c31af7Sopenharmony_ci AWINDOW_FLAG_SHOW_WHEN_LOCKED, 0); 103e5c31af7Sopenharmony_ci} 104e5c31af7Sopenharmony_ci 105e5c31af7Sopenharmony_ciTestActivity::~TestActivity (void) 106e5c31af7Sopenharmony_ci{ 107e5c31af7Sopenharmony_ci} 108e5c31af7Sopenharmony_ci 109e5c31af7Sopenharmony_civoid TestActivity::onStart (void) 110e5c31af7Sopenharmony_ci{ 111e5c31af7Sopenharmony_ci if (!m_started) 112e5c31af7Sopenharmony_ci { 113e5c31af7Sopenharmony_ci setThread(&m_testThread); 114e5c31af7Sopenharmony_ci m_testThread.start(); 115e5c31af7Sopenharmony_ci m_started = true; 116e5c31af7Sopenharmony_ci } 117e5c31af7Sopenharmony_ci 118e5c31af7Sopenharmony_ci RenderActivity::onStart(); 119e5c31af7Sopenharmony_ci} 120e5c31af7Sopenharmony_ci 121e5c31af7Sopenharmony_civoid TestActivity::onDestroy (void) 122e5c31af7Sopenharmony_ci{ 123e5c31af7Sopenharmony_ci if (m_started) 124e5c31af7Sopenharmony_ci { 125e5c31af7Sopenharmony_ci setThread(DE_NULL); 126e5c31af7Sopenharmony_ci m_testThread.stop(); 127e5c31af7Sopenharmony_ci m_started = false; 128e5c31af7Sopenharmony_ci } 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_ci RenderActivity::onDestroy(); 131e5c31af7Sopenharmony_ci 132e5c31af7Sopenharmony_ci // Kill this process. 133e5c31af7Sopenharmony_ci print("Done, killing process"); 134e5c31af7Sopenharmony_ci exit(0); 135e5c31af7Sopenharmony_ci} 136e5c31af7Sopenharmony_ci 137e5c31af7Sopenharmony_civoid TestActivity::onConfigurationChanged (void) 138e5c31af7Sopenharmony_ci{ 139e5c31af7Sopenharmony_ci RenderActivity::onConfigurationChanged(); 140e5c31af7Sopenharmony_ci 141e5c31af7Sopenharmony_ci // Update rotation. 142e5c31af7Sopenharmony_ci setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation())); 143e5c31af7Sopenharmony_ci} 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ci} // Android 146e5c31af7Sopenharmony_ci} // tcu 147