summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Luc Brouillet <jeanluc@google.com>2015-07-23 14:03:19 -0700
committerJean-Luc Brouillet <jeanluc@google.com>2015-08-04 13:05:49 -0700
commit0c905c882fb351eb754a630d18339c14392fdbcb (patch)
tree76371bc30e9ecdbf626fff52a315c458de56e9fb
parent4581f03df1786d3a2585dabb599278b9c0257df9 (diff)
downloadrs-0c905c882fb351eb754a630d18339c14392fdbcb.tar.gz
Provide better diagnostics on CTS failures.
Intializes the arrays to a non-zero value to help diagnose what is causing the 0 return bug, i.e. is a zero found in b/22556317 because the buffer is not copied or because it is copied and all null? Also reports all the failures instead of stopping after the first one. See b/22556317 Change-Id: I5ad769616f120a847eebe1386c726daacb831fc7
-rw-r--r--api/GenerateTestFiles.cpp51
1 files changed, 43 insertions, 8 deletions
diff --git a/api/GenerateTestFiles.cpp b/api/GenerateTestFiles.cpp
index 4c3cb405..ddb7c782 100644
--- a/api/GenerateTestFiles.cpp
+++ b/api/GenerateTestFiles.cpp
@@ -399,6 +399,8 @@ void PermutationWriter::writeJavaVerifyScalarMethod(bool verifierValidates) cons
}
}
+ mJava->indent() << "StringBuilder message = new StringBuilder();\n";
+ mJava->indent() << "boolean errorFound = false;\n";
mJava->indent() << "for (int i = 0; i < INPUTSIZE; i++)";
mJava->startBlock();
@@ -458,8 +460,10 @@ void PermutationWriter::writeJavaVerifyScalarMethod(bool verifierValidates) cons
mJava->indent() << "if (!valid)";
mJava->startBlock();
+ mJava->indent() << "if (!errorFound)";
+ mJava->startBlock();
+ mJava->indent() << "errorFound = true;\n";
- mJava->indent() << "StringBuilder message = new StringBuilder();\n";
for (auto p : mAllInputsAndOutputs) {
if (p->isOutParameter) {
writeJavaAppendOutputToMessage(*p, "", "[i * " + p->vectorWidth + " + j]",
@@ -471,14 +475,23 @@ void PermutationWriter::writeJavaVerifyScalarMethod(bool verifierValidates) cons
if (verifierValidates) {
mJava->indent() << "message.append(errorMessage);\n";
}
+ mJava->indent() << "message.append(\"Errors at\");\n";
+ mJava->endBlock();
- mJava->indent() << "assertTrue(\"Incorrect output for " << mJavaCheckMethodName << "\" +\n";
- mJava->indentPlus()
- << "(relaxed ? \"_relaxed\" : \"\") + \":\\n\" + message.toString(), valid);\n";
+ mJava->indent() << "message.append(\" [\");\n";
+ mJava->indent() << "message.append(Integer.toString(i));\n";
+ mJava->indent() << "message.append(\", \");\n";
+ mJava->indent() << "message.append(Integer.toString(j));\n";
+ mJava->indent() << "message.append(\"]\");\n";
mJava->endBlock();
mJava->endBlock();
mJava->endBlock();
+
+ mJava->indent() << "assertFalse(\"Incorrect output for " << mJavaCheckMethodName << "\" +\n";
+ mJava->indentPlus()
+ << "(relaxed ? \"_relaxed\" : \"\") + \":\\n\" + message.toString(), errorFound);\n";
+
mJava->endBlock();
*mJava << "\n";
}
@@ -490,6 +503,8 @@ void PermutationWriter::writeJavaVerifyVectorMethod() const {
for (auto p : mAllInputsAndOutputs) {
writeJavaArrayInitialization(*p);
}
+ mJava->indent() << "StringBuilder message = new StringBuilder();\n";
+ mJava->indent() << "boolean errorFound = false;\n";
mJava->indent() << "for (int i = 0; i < INPUTSIZE; i++)";
mJava->startBlock();
@@ -538,8 +553,10 @@ void PermutationWriter::writeJavaVerifyVectorMethod() const {
mJava->indent() << "if (!valid)";
mJava->startBlock();
+ mJava->indent() << "if (!errorFound)";
+ mJava->startBlock();
+ mJava->indent() << "errorFound = true;\n";
- mJava->indent() << "StringBuilder message = new StringBuilder();\n";
for (auto p : mAllInputsAndOutputs) {
if (p->isOutParameter) {
writeJavaAppendVectorOutputToMessage(*p);
@@ -547,13 +564,20 @@ void PermutationWriter::writeJavaVerifyVectorMethod() const {
writeJavaAppendVectorInputToMessage(*p);
}
}
+ mJava->indent() << "message.append(\"Errors at\");\n";
+ mJava->endBlock();
- mJava->indent() << "assertTrue(\"Incorrect output for " << mJavaCheckMethodName << "\" +\n";
- mJava->indentPlus()
- << "(relaxed ? \"_relaxed\" : \"\") + \":\\n\" + message.toString(), valid);\n";
+ mJava->indent() << "message.append(\" [\");\n";
+ mJava->indent() << "message.append(Integer.toString(i));\n";
+ mJava->indent() << "message.append(\"]\");\n";
mJava->endBlock();
mJava->endBlock();
+
+ mJava->indent() << "assertFalse(\"Incorrect output for " << mJavaCheckMethodName << "\" +\n";
+ mJava->indentPlus()
+ << "(relaxed ? \"_relaxed\" : \"\") + \":\\n\" + message.toString(), errorFound);\n";
+
mJava->endBlock();
*mJava << "\n";
}
@@ -569,6 +593,16 @@ void PermutationWriter::writeJavaVerifyMethodHeader() const {
void PermutationWriter::writeJavaArrayInitialization(const ParameterDefinition& p) const {
mJava->indent() << p.javaBaseType << "[] " << p.javaArrayName << " = new " << p.javaBaseType
<< "[INPUTSIZE * " << p.vectorWidth << "];\n";
+
+ /* For basic types, populate the array with values, to help understand failures. We have had
+ * bugs where the output buffer was all 0. We were not sure if there was a failed copy or
+ * the GPU driver was copying zeroes.
+ */
+ if (p.typeIndex >= 0) {
+ mJava->indent() << "Arrays.fill(" << p.javaArrayName << ", (" << TYPES[p.typeIndex].javaType
+ << ") 42);\n";
+ }
+
mJava->indent() << p.javaAllocName << ".copyTo(" << p.javaArrayName << ");\n";
}
@@ -870,6 +904,7 @@ static bool startJavaFile(GeneratedFile* file, const Function& function, const s
*file << "import android.renderscript.Allocation;\n";
*file << "import android.renderscript.RSRuntimeException;\n";
*file << "import android.renderscript.Element;\n\n";
+ *file << "import java.util.Arrays;\n\n";
*file << "public class " << testName << " extends RSBaseCompute";
file->startBlock(); // The corresponding endBlock() is in finishJavaFile()