aboutsummaryrefslogtreecommitdiff
path: root/platform_tools
diff options
context:
space:
mode:
authorHal Canary <halcanary@google.com>2018-11-26 14:07:41 -0500
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-11-30 18:38:00 +0000
commitac7f23c8077cadec224682e593f19a0478139cd2 (patch)
treedf06714780566fa7d1c32407c78d0078275281d5 /platform_tools
parent20bd0f93f2aeb32dfb89d21985e04dba26da4a5f (diff)
downloadskqp-ac7f23c8077cadec224682e593f19a0478139cd2.tar.gz
SkQP: refatctor C++ bits.
* C++ code moved into tools/skqp/src/. * State held with single SkQP class. * gmkb functions moved to skqp_model.{h,cpp} * model no longer knows about report format. * skqp_main and skqp_lib no longer have globals * jni code has fewer globals. * skqp_main no longer uses googletest. * AssetMng returns SkData, not a SkStream. * Add jitter tool. * dump GPU information into grdump.txt * JUnit puts report in directory with timestamp. * Document SkQP Render Test Algorithm. * GPU driver correctness workarounds always off * cut_release tool for assembling models * make_rendertests_list.py to help cut_release * make_gmkb.go emits a list of models CQ_INCLUDE_TRYBOTS=skia.primary:Build-Debian9-Clang-x86-devrel-Android_SKQP Change-Id: I7d4f0c24592b1f64be0088578a3f1a0bc366dd4d Reviewed-on: https://skia-review.googlesource.com/c/110420 Reviewed-by: Hal Canary <halcanary@google.com> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'platform_tools')
-rw-r--r--platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQP.java8
-rw-r--r--platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQPRunner.java64
2 files changed, 33 insertions, 39 deletions
diff --git a/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQP.java b/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQP.java
index 58e09ec982..2f1381b0ab 100644
--- a/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQP.java
+++ b/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQP.java
@@ -14,8 +14,8 @@ import java.io.File;
import java.io.IOException;
public class SkQP {
- protected native void nInit(AssetManager assetManager, String dataDir, boolean experimentalMode);
- protected native float nExecuteGM(int gm, int backend) throws SkQPException;
+ protected native void nInit(AssetManager assetManager, String dataDir);
+ protected native long nExecuteGM(int gm, int backend) throws SkQPException;
protected native String[] nExecuteUnitTest(int test);
protected native void nMakeReport();
@@ -42,13 +42,13 @@ public class SkQP {
// Note: nInit will initialize the mGMs, mBackends and mUnitTests fields.
AssetManager assetManager = context.getResources().getAssets();
- this.nInit(assetManager, outputDirPath, true);
+ this.nInit(assetManager, outputDirPath);
for (int backend = 0; backend < mBackends.length; backend++) {
String classname = kSkiaGM + mBackends[backend];
for (int gm = 0; gm < mGMs.length; gm++) {
String testName = kSkiaGM + mBackends[backend] + "_" +mGMs[gm];
- float value = java.lang.Float.MAX_VALUE;
+ long value = java.lang.Long.MAX_VALUE;
String error = null;
Log.w(LOG_PREFIX, "Running: " + testName);
try {
diff --git a/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQPRunner.java b/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQPRunner.java
index 11a8e2bd6c..7827f3e88c 100644
--- a/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQPRunner.java
+++ b/platform_tools/android/apps/skqp/src/main/java/org/skia/skqp/SkQPRunner.java
@@ -14,6 +14,8 @@ import android.support.test.InstrumentationRegistry;
import android.util.Log;
import java.io.File;
import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import org.junit.runner.Description;
import org.junit.runner.RunWith;
import org.junit.runner.Runner;
@@ -28,48 +30,40 @@ public class SkQPRunner extends Runner implements Filterable {
private int mShouldRunTestCount;
private Description[] mTests;
private boolean[] mShouldSkipTest;
- private SkQP impl;
+ private String mOutputDirectory;
+ private SkQP mImpl;
private static final String TAG = SkQP.LOG_PREFIX;
private static void Fail(Description desc, RunNotifier notifier, String failure) {
notifier.fireTestFailure(new Failure(desc, new SkQPFailure(failure)));
}
- private static File GetOutputDir() {
- Context c = InstrumentationRegistry.getTargetContext();
- // File f = c.getFilesDir();
- File f = c.getExternalFilesDir(null);
- return new File(f, "output");
- }
-
////////////////////////////////////////////////////////////////////////////
public SkQPRunner(Class testClass) {
- impl = new SkQP();
- File filesDir = SkQPRunner.GetOutputDir();
- try {
- SkQP.ensureEmtpyDirectory(filesDir);
- } catch (IOException e) {
- Log.w(TAG, "ensureEmtpyDirectory: " + e.getMessage());
- }
- Log.i(TAG, String.format("output written to \"%s\"", filesDir.getAbsolutePath()));
+ mImpl = new SkQP();
+ Context context = InstrumentationRegistry.getTargetContext();
+ String now = (new SimpleDateFormat("yyyy-MM-dd'T'HHmmss")).format(new Date());
+ File reportPath = new File(context.getExternalFilesDir(null), "skqp_report_" + now);
+ reportPath.mkdirs();
+ mOutputDirectory = reportPath.getAbsolutePath();
+ Log.i(TAG, String.format("output written to \"%s\"", mOutputDirectory));
- Resources resources = InstrumentationRegistry.getTargetContext().getResources();
- AssetManager mAssetManager = resources.getAssets();
- impl.nInit(mAssetManager, filesDir.getAbsolutePath(), false);
+ AssetManager assetManager = context.getResources().getAssets();
+ mImpl.nInit(assetManager, mOutputDirectory);
mTests = new Description[this.testCount()];
mShouldSkipTest = new boolean[mTests.length]; // = {false, false, ....};
int index = 0;
- for (int backend = 0; backend < impl.mBackends.length; backend++) {
- for (int gm = 0; gm < impl.mGMs.length; gm++) {
+ for (int backend = 0; backend < mImpl.mBackends.length; backend++) {
+ for (int gm = 0; gm < mImpl.mGMs.length; gm++) {
mTests[index++] = Description.createTestDescription(SkQPRunner.class,
- impl.mBackends[backend] + "_" + impl.mGMs[gm]);
+ mImpl.mBackends[backend] + "_" + mImpl.mGMs[gm]);
}
}
- for (int unitTest = 0; unitTest < impl.mUnitTests.length; unitTest++) {
+ for (int unitTest = 0; unitTest < mImpl.mUnitTests.length; unitTest++) {
mTests[index++] = Description.createTestDescription(SkQPRunner.class,
- "unitTest_" + impl.mUnitTests[unitTest]);
+ "unitTest_" + mImpl.mUnitTests[unitTest]);
}
assert(index == mTests.length);
mShouldRunTestCount = mTests.length;
@@ -101,15 +95,15 @@ public class SkQPRunner extends Runner implements Filterable {
@Override
public int testCount() {
- return impl.mUnitTests.length + impl.mGMs.length * impl.mBackends.length;
+ return mImpl.mUnitTests.length + mImpl.mGMs.length * mImpl.mBackends.length;
}
@Override
public void run(RunNotifier notifier) {
int testNumber = 0; // out of number of actually run tests.
int testIndex = 0; // out of potential tests.
- for (int backend = 0; backend < impl.mBackends.length; backend++) {
- for (int gm = 0; gm < impl.mGMs.length; gm++, testIndex++) {
+ for (int backend = 0; backend < mImpl.mBackends.length; backend++) {
+ for (int gm = 0; gm < mImpl.mGMs.length; gm++, testIndex++) {
Description desc = mTests[testIndex];
String name = desc.getMethodName();
if (mShouldSkipTest[testIndex]) {
@@ -117,10 +111,10 @@ public class SkQPRunner extends Runner implements Filterable {
}
++testNumber;
notifier.fireTestStarted(desc);
- float value = java.lang.Float.MAX_VALUE;
+ long value = java.lang.Long.MAX_VALUE;
String error = null;
try {
- value = impl.nExecuteGM(gm, backend);
+ value = mImpl.nExecuteGM(gm, backend);
} catch (SkQPException exept) {
error = exept.getMessage();
}
@@ -131,8 +125,8 @@ public class SkQPRunner extends Runner implements Filterable {
result = "ERROR";
} else if (value != 0) {
SkQPRunner.Fail(desc, notifier, String.format(
- "Image mismatch: max channel diff = %f", value));
- Log.w(TAG, String.format("[FAIL] '%s': %f > 0", name, value));
+ "Image mismatch: max channel diff = %d", value));
+ Log.w(TAG, String.format("[FAIL] '%s': %d > 0", name, value));
result = "FAIL";
}
notifier.fireTestFinished(desc);
@@ -140,7 +134,7 @@ public class SkQPRunner extends Runner implements Filterable {
name, testNumber, mShouldRunTestCount, result));
}
}
- for (int unitTest = 0; unitTest < impl.mUnitTests.length; unitTest++, testIndex++) {
+ for (int unitTest = 0; unitTest < mImpl.mUnitTests.length; unitTest++, testIndex++) {
Description desc = mTests[testIndex];
String name = desc.getMethodName();
if (mShouldSkipTest[testIndex]) {
@@ -148,7 +142,7 @@ public class SkQPRunner extends Runner implements Filterable {
}
++testNumber;
notifier.fireTestStarted(desc);
- String[] errors = impl.nExecuteUnitTest(unitTest);
+ String[] errors = mImpl.nExecuteUnitTest(unitTest);
String result = "pass";
if (errors != null && errors.length > 0) {
Log.w(TAG, String.format("[FAIL] Test '%s' had %d failures.", name, errors.length));
@@ -162,7 +156,7 @@ public class SkQPRunner extends Runner implements Filterable {
Log.i(TAG, String.format("Test '%s' complete (%d/%d). [%s]",
name, testNumber, mShouldRunTestCount, result));
}
- impl.nMakeReport();
- Log.i(TAG, String.format("output written to \"%s\"", GetOutputDir().getAbsolutePath()));
+ mImpl.nMakeReport();
+ Log.i(TAG, String.format("output written to \"%s\"", mOutputDirectory));
}
}