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) {