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