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 Android test activity.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuAndroidTestActivity.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuAndroidUtil.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <android/window.h>
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string>
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <stdlib.h>
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string;
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Android
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// TestThread
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
413c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestThread::TestThread (NativeActivity& activity, const CommandLine& cmdLine)
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: RenderThread	(activity)
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_cmdLine		(cmdLine)
44217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	, m_archive		(activity.getNativeActivity()->assetManager)
45217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	, m_log			(m_cmdLine.getLogFileName())
46217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	, m_app			(m_platform, m_archive, m_log, m_cmdLine)
47217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	, m_finished	(false)
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
513c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestThread::~TestThread (void)
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \note m_testApp is managed by thread.
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TestThread::run (void)
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RenderThread::run();
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TestThread::onWindowCreated (ANativeWindow* window)
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
63217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	m_platform.getWindowRegistry().addWindow(window);
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TestThread::onWindowDestroyed (ANativeWindow* window)
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
68217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	m_platform.getWindowRegistry().destroyWindow(window);
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TestThread::onWindowResized (ANativeWindow* window)
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_UNREF(window);
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	print("Warning: Native window was resized, results may be undefined");
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool TestThread::render (void)
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
79217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	if (!m_finished)
80217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		m_finished = !m_app.iterate();
81217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	return !m_finished;
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// TestActivity
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
863c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestActivity::TestActivity (ANativeActivity* activity)
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: RenderActivity	(activity)
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_cmdLine			(getIntentStringExtra(activity, "cmdLine"))
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_testThread		(*this, m_cmdLine)
90217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	, m_started			(false)
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Set initial orientation.
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Set up window flags.
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ANativeActivity_setWindowFlags(activity, AWINDOW_FLAG_KEEP_SCREEN_ON	|
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry											 AWINDOW_FLAG_TURN_SCREEN_ON	|
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry											 AWINDOW_FLAG_FULLSCREEN		|
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry											 AWINDOW_FLAG_SHOW_WHEN_LOCKED, 0);
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1023c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestActivity::~TestActivity (void)
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
106217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulosvoid TestActivity::onStart (void)
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
108217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	if (!m_started)
109217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	{
110217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		setThread(&m_testThread);
111217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		m_testThread.start();
112217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		m_started = true;
113217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	}
114217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos
115217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	RenderActivity::onStart();
116217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos}
117217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos
118217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulosvoid TestActivity::onDestroy (void)
119217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos{
120217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	if (m_started)
121217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	{
122217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		setThread(DE_NULL);
123217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		m_testThread.stop();
124217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos		m_started = false;
125217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	}
126217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos
127217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos	RenderActivity::onDestroy();
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Kill this process.
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	print("Done, killing process");
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	exit(0);
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TestActivity::onConfigurationChanged (void)
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RenderActivity::onConfigurationChanged();
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Update rotation.
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Android
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // tcu
144