You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
3.5 KiB

/*-------------------------------------------------------------------------
* drawElements Quality Program Tester Core
* ----------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Android test activity.
*//*--------------------------------------------------------------------*/
#include "tcuAndroidTestActivity.hpp"
#include "tcuAndroidUtil.hpp"
#include <android/window.h>
#include <string>
#include <stdlib.h>
using std::string;
namespace tcu
{
namespace Android
{
// TestThread
TestThread::TestThread (NativeActivity& activity, const std::string& cmdLineString, const CommandLine& cmdLine)
: RenderThread (activity)
, m_cmdLine (cmdLine)
, m_platform (activity)
, m_archive (activity.getNativeActivity()->assetManager)
, m_log (m_cmdLine.getLogFileName(), m_cmdLine.getLogFlags())
, m_app (m_platform, m_archive, m_log, m_cmdLine)
, m_finished (false)
{
const std::string sessionInfo = "#sessionInfo commandLineParameters \"";
m_log.writeSessionInfo(sessionInfo + cmdLineString + "\"\n");
}
TestThread::~TestThread (void)
{
// \note m_testApp is managed by thread.
}
void TestThread::run (void)
{
RenderThread::run();
}
void TestThread::onWindowCreated (ANativeWindow* window)
{
m_platform.getWindowRegistry().addWindow(window);
}
void TestThread::onWindowDestroyed (ANativeWindow* window)
{
m_platform.getWindowRegistry().destroyWindow(window);
}
void TestThread::onWindowResized (ANativeWindow* window)
{
DE_UNREF(window);
print("Warning: Native window was resized, results may be undefined");
}
bool TestThread::render (void)
{
if (!m_finished)
m_finished = !m_app.iterate();
return !m_finished;
}
// TestActivity
TestActivity::TestActivity (ANativeActivity* activity)
: RenderActivity (activity)
, m_cmdLine (getIntentStringExtra(activity, "cmdLine"))
, m_testThread (*this, getIntentStringExtra(activity, "cmdLine"), m_cmdLine)
, m_started (false)
{
// Set initial orientation.
setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
// Set up window flags.
ANativeActivity_setWindowFlags(activity, AWINDOW_FLAG_KEEP_SCREEN_ON |
AWINDOW_FLAG_TURN_SCREEN_ON |
AWINDOW_FLAG_FULLSCREEN |
AWINDOW_FLAG_SHOW_WHEN_LOCKED, 0);
}
TestActivity::~TestActivity (void)
{
}
void TestActivity::onStart (void)
{
if (!m_started)
{
setThread(&m_testThread);
m_testThread.start();
m_started = true;
}
RenderActivity::onStart();
}
void TestActivity::onDestroy (void)
{
if (m_started)
{
setThread(DE_NULL);
m_testThread.stop();
m_started = false;
}
RenderActivity::onDestroy();
// Kill this process.
print("Done, killing process");
exit(0);
}
void TestActivity::onConfigurationChanged (void)
{
RenderActivity::onConfigurationChanged();
// Update rotation.
setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
}
} // Android
} // tcu