Fix benchmark app not terminating model benchmark am: 62a6edcc0f am: 14a2e0d432
Original change: https://android-review.googlesource.com/c/platform/test/mlts/benchmark/+/1371958
Change-Id: I8ac035d11eedecacad988076167318607b96ba88
diff --git a/dogfood/src/com/android/nn/dogfood/BenchmarkJobService.java b/dogfood/src/com/android/nn/dogfood/BenchmarkJobService.java
index 21ce236..a2d485f 100644
--- a/dogfood/src/com/android/nn/dogfood/BenchmarkJobService.java
+++ b/dogfood/src/com/android/nn/dogfood/BenchmarkJobService.java
@@ -79,6 +79,7 @@
mProcessor = new Processor(this, this, randomModelList());
mProcessor.setUseNNApi(true);
mProcessor.setToggleLong(true);
+ mProcessor.setMaxRunIterations(1);
processorRunner.submit(mProcessor);
}
diff --git a/src/com/android/nn/benchmark/app/NNBenchmark.java b/src/com/android/nn/benchmark/app/NNBenchmark.java
index 58827a8..6253167 100644
--- a/src/com/android/nn/benchmark/app/NNBenchmark.java
+++ b/src/com/android/nn/benchmark/app/NNBenchmark.java
@@ -43,6 +43,7 @@
public static final String EXTRA_RESULTS_TESTS = "tests";
public static final String EXTRA_RESULTS_RESULTS = "results";
public static final long PROCESSOR_TERMINATION_TIMEOUT_MS = Duration.ofSeconds(20).toMillis();
+ public static final String EXTRA_MAX_ITERATIONS = "max_iterations";
private int mTestList[];
@@ -124,6 +125,7 @@
mProcessor.setToggleLong(i.getBooleanExtra(EXTRA_ENABLE_LONG, false));
mProcessor.setTogglePause(i.getBooleanExtra(EXTRA_ENABLE_PAUSE, false));
mProcessor.setUseNNApi(!i.getBooleanExtra(EXTRA_DISABLE_NNAPI, false));
+ mProcessor.setMaxRunIterations(i.getIntExtra(EXTRA_MAX_ITERATIONS, 0));
executorService.submit(mProcessor);
} else {
Log.v(TAG, "No test to run, doing nothing");
diff --git a/src/com/android/nn/benchmark/app/NNControls.java b/src/com/android/nn/benchmark/app/NNControls.java
index e953cbb..bc868f5 100644
--- a/src/com/android/nn/benchmark/app/NNControls.java
+++ b/src/com/android/nn/benchmark/app/NNControls.java
@@ -108,6 +108,7 @@
intent.putExtra(NNBenchmark.EXTRA_ENABLE_LONG, mSettings[SETTING_LONG_RUN]);
intent.putExtra(NNBenchmark.EXTRA_ENABLE_PAUSE, mSettings[SETTING_PAUSE]);
intent.putExtra(NNBenchmark.EXTRA_DISABLE_NNAPI, mSettings[SETTING_DISABLE_NNAPI]);
+ intent.putExtra(NNBenchmark.EXTRA_MAX_ITERATIONS, 1);
return intent;
}
diff --git a/src/com/android/nn/benchmark/core/Processor.java b/src/com/android/nn/benchmark/core/Processor.java
index 0a6cfa2..4e799c4 100644
--- a/src/com/android/nn/benchmark/core/Processor.java
+++ b/src/com/android/nn/benchmark/core/Processor.java
@@ -61,6 +61,9 @@
private String mAcceleratorName;
private boolean mIgnoreUnsupportedModels;
private boolean mRunModelCompilationOnly;
+ // Max number of benchmark iterations to do in run method.
+ // Less or equal to 0 means unlimited
+ private int mMaxRunIterations;
private boolean mBenchmarkCompilationCaching;
private float mCompilationBenchmarkWarmupTimeSeconds;
@@ -77,6 +80,7 @@
mAcceleratorName = null;
mIgnoreUnsupportedModels = false;
mRunModelCompilationOnly = false;
+ mMaxRunIterations = 0;
mBenchmarkCompilationCaching = false;
}
@@ -112,6 +116,10 @@
mMmapModel = value;
}
+ public void setMaxRunIterations(int value) {
+ mMaxRunIterations = value;
+ }
+
public void enableCompilationCachingBenchmarks(
float warmupTimeSeconds, float runTimeSeconds, int maxIterations) {
mBenchmarkCompilationCaching = true;
@@ -137,7 +145,7 @@
public static boolean isTestModelSupportedByAccelerator(Context context,
TestModels.TestModelEntry testModelEntry, String acceleratorName)
throws NnApiDelegationFailure {
- try(NNTestBase tb = testModelEntry.createNNTestBase(/*useNnnapi=*/ true,
+ try (NNTestBase tb = testModelEntry.createNNTestBase(/*useNnnapi=*/ true,
/*enableIntermediateTensorsDump=*/false,
/*mmapModel=*/ false)) {
tb.setNNApiDeviceName(acceleratorName);
@@ -147,7 +155,7 @@
String.format("Error trying to check support for model %s on accelerator %s",
testModelEntry.mModelName, acceleratorName), e);
return false;
- } catch (NnApiDelegationFailure nnApiDelegationFailure) {
+ } catch (NnApiDelegationFailure nnApiDelegationFailure) {
if (nnApiDelegationFailure.getNnApiErrno() == 4 /*ANEURALNETWORKS_BAD_DATA*/) {
// Compilation will fail with ANEURALNETWORKS_BAD_DATA if the device is not
// supporting all operation in the model
@@ -268,8 +276,13 @@
mHasBeenStarted = true;
Log.d(TAG, "Processor starting");
boolean success = true;
+ int benchmarkIterationsCount = 0;
try {
while (mRun.get()) {
+ if (mMaxRunIterations > 0 && benchmarkIterationsCount >= mMaxRunIterations) {
+ break;
+ }
+ benchmarkIterationsCount++;
try {
benchmarkAllModels();
} catch (IOException | BenchmarkException e) {