blob: cc085ac228dafe8f7de01531617f74ed225c5e6f [file] [log] [blame]
package org.skia.skqp;
import android.content.Context;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import java.io.File;
import java.io.IOException;
public class SkQPActivity extends AppCompatActivity implements Runnable {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_skqp);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Start the tests.
run();
}
// run implements the Runnable interface.
public void run() {
// Note: /sdcard/Android/data/<package-name> is a location an app is allowed to write to.
// When running tests on Firebase it expects any result files to have a '/sdcard
// prefix or it won't trigger tests from the CLI.
Context context = getApplicationContext();
String outputDirPath = "/sdcard/Android/data/" + context.getPackageName();
SkQP impl = new SkQP();
Log.i(SkQP.LOG_PREFIX, "Output Dir: " + outputDirPath);
File outputDir = new File(outputDirPath);
try {
SkQPActivity.ensureEmtpyDirectory(outputDir);
} catch (IOException e) {
Log.e(SkQP.LOG_PREFIX, "ensureEmtpyDirectory:" + e.getMessage());
}
// Note: nInit will initialize the mGMs, mBackends and mUnitTests fields.
AssetManager assetManager = context.getResources().getAssets();
impl.nInit(assetManager, outputDirPath);
for (int backend = 0; backend < impl.mBackends.length; backend++) {
String classname = SkQP.kSkiaGM + impl.mBackends[backend];
for (int gm = 0; gm < impl.mGMs.length; gm++) {
String testName = SkQP.kSkiaGM + impl.mBackends[backend] + "_" + impl.mGMs[gm];
long value = java.lang.Long.MAX_VALUE;
String error = null;
Log.i(SkQP.LOG_PREFIX, "Running: " + testName);
try {
value = impl.nExecuteGM(gm, backend);
} catch (SkQPException exept) {
error = exept.getMessage();
}
if (error != null) {
Log.w(SkQP.LOG_PREFIX, "Error: " + testName + " " + error);
} else if (value != 0) {
Log.w(SkQP.LOG_PREFIX, String.format("Fail: %s %f", testName, value));
} else {
Log.i(SkQP.LOG_PREFIX, "Pass: " + testName);
}
}
}
for (int unitTest = 0; unitTest < impl.mUnitTests.length; unitTest++) {
String testName = SkQP.kSkiaUnitTests + "_" + impl.mUnitTests[unitTest];
Log.w(SkQP.LOG_PREFIX, "Running: " + testName);
String[] errors = impl.nExecuteUnitTest(unitTest);
if (errors != null && errors.length > 0) {
for (String error : errors) {
Log.w(SkQP.LOG_PREFIX, "Error running " + testName + ":" + error);
}
} else {
Log.i(SkQP.LOG_PREFIX, "Test: " + testName + " finished successfully.");
}
}
Log.i(SkQP.LOG_PREFIX, "Finished running all tests.");
impl.nMakeReport();
finish();
}
private static void ensureEmtpyDirectory(File f) throws IOException {
if (f.exists()) {
SkQPActivity.delete(f);
}
if (!f.mkdirs()) {
throw new IOException("Unable to create directory:" + f.getAbsolutePath());
}
}
private static void delete(File f) throws IOException {
if (f.isDirectory()) {
for (File s : f.listFiles()) {
SkQPActivity.delete(s);
}
}
if (!f.delete()) {
throw new IOException("Unable to delete:" + f.getAbsolutePath());
}
}
}