diff --git a/build_and_run_benchmark.sh b/build_and_run_benchmark.sh
index 83ca2ab..ab40c49 100755
--- a/build_and_run_benchmark.sh
+++ b/build_and_run_benchmark.sh
@@ -4,18 +4,21 @@
 #
 # Output is logged to a temporary folder and summarized in txt and JSON formats.
 
-case "$1" in
-  ""|scoring)
-    MODE=scoring
+MODE="${1:=scoring}"
+
+case "$MODE" in
+  scoring)
     CLASS=com.android.nn.benchmark.app.NNScoringTest
     ;;
-  stress)
-    MODE=stress
-    CLASS=com.android.nn.benchmark.app.NNStressTest
+  inference-stress)
+    CLASS=com.android.nn.benchmark.app.NNInferenceStressTest
+    ;;
+  model-loading-stress)
+    CLASS=com.android.nn.benchmark.app.NNModelLoadingStressTest
     ;;
   *)
     echo "Unknown execution mode: $1"
-    echo "Known modes: scoring (default), stress"
+    echo "Known modes: scoring (default), inference-stress, model-loading-stress"
     exit 1
     ;;
 esac
diff --git a/jni/run_tflite.cpp b/jni/run_tflite.cpp
index fc722b5..9472480 100644
--- a/jni/run_tflite.cpp
+++ b/jni/run_tflite.cpp
@@ -236,7 +236,9 @@
     int seqInferencesMaxCount, float timeout, int flags,
     std::vector<InferenceResult>* results) {
   if (inOutData.empty()) {
-    FATAL("Input/output vector is empty");
+    __android_log_print(ANDROID_LOG_WARN, LOG_TAG,
+                        "Input/output vector is empty");
+    return true;
   }
 
   float inferenceTotal = 0.0;
diff --git a/src/com/android/nn/benchmark/app/NNStressTest.java b/src/com/android/nn/benchmark/app/NNInferenceStressTest.java
similarity index 80%
rename from src/com/android/nn/benchmark/app/NNStressTest.java
rename to src/com/android/nn/benchmark/app/NNInferenceStressTest.java
index b586417..c4fbdc1 100644
--- a/src/com/android/nn/benchmark/app/NNStressTest.java
+++ b/src/com/android/nn/benchmark/app/NNInferenceStressTest.java
@@ -28,18 +28,18 @@
 import org.junit.runners.Parameterized.Parameters;
 
 /**
- * Tests that ensure stability of NNAPI by putting it under heavy load.
+ * Tests that ensure stability of NNAPI by running inference for a
+ * prolonged period of time.
  */
 @RunWith(Parameterized.class)
-public class NNStressTest extends BenchmarkTestBase {
-    private static final String TAG = NNStressTest.class.getSimpleName();
+public class NNInferenceStressTest extends BenchmarkTestBase {
+    private static final String TAG = NNInferenceStressTest.class.getSimpleName();
 
     private static final String[] MODEL_NAMES = NNScoringTest.MODEL_NAMES;
+    private static final float WARMUP_SECONDS = 0; // No warmup.
+    private static final float RUNTIME_SECONDS = 60 * 60; // 1 hour.
 
-    private static final float STRESS_TEST_WARMUP_SECONDS = 0; // No warmup.
-    private static final float STRESS_TEST_RUNTIME_SECONDS = 60 * 60; // 1 hour.
-
-    public NNStressTest(TestModels.TestModelEntry model) {
+    public NNInferenceStressTest(TestModels.TestModelEntry model) {
         super(model);
     }
 
@@ -68,8 +68,7 @@
     public void stressTestNNAPI() throws IOException {
         setUseNNApi(true);
         setCompleteInputSet(false);
-        TestAction ta = new TestAction(mModel, STRESS_TEST_WARMUP_SECONDS,
-            STRESS_TEST_RUNTIME_SECONDS);
+        TestAction ta = new TestAction(mModel, WARMUP_SECONDS, RUNTIME_SECONDS);
         runTest(ta, mModel.getTestName());
     }
 }
diff --git a/src/com/android/nn/benchmark/app/NNStressTest.java b/src/com/android/nn/benchmark/app/NNModelLoadingStressTest.java
similarity index 62%
copy from src/com/android/nn/benchmark/app/NNStressTest.java
copy to src/com/android/nn/benchmark/app/NNModelLoadingStressTest.java
index b586417..1ab5e2e 100644
--- a/src/com/android/nn/benchmark/app/NNStressTest.java
+++ b/src/com/android/nn/benchmark/app/NNModelLoadingStressTest.java
@@ -17,29 +17,34 @@
 package com.android.nn.benchmark.app;
 
 import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import com.android.nn.benchmark.core.InferenceInOutSequence;
 import com.android.nn.benchmark.core.TestModels;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
+import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.rules.Stopwatch;
 import org.junit.runners.Parameterized.Parameters;
 
 /**
- * Tests that ensure stability of NNAPI by putting it under heavy load.
+ * Tests that ensure stability of NNAPI by loading models for a prolonged
+ * period of time.
  */
-@RunWith(Parameterized.class)
-public class NNStressTest extends BenchmarkTestBase {
-    private static final String TAG = NNStressTest.class.getSimpleName();
+public class NNModelLoadingStressTest extends BenchmarkTestBase {
+    private static final String TAG = NNModelLoadingStressTest.class.getSimpleName();
 
     private static final String[] MODEL_NAMES = NNScoringTest.MODEL_NAMES;
+    private static final float WARMUP_SECONDS = 0; // No warmup.
+    private static final float INFERENCE_SECONDS = 0; // No inference.
+    private static final float RUNTIME_SECONDS = 30 * 60;
 
-    private static final float STRESS_TEST_WARMUP_SECONDS = 0; // No warmup.
-    private static final float STRESS_TEST_RUNTIME_SECONDS = 60 * 60; // 1 hour.
+    @Rule public Stopwatch stopwatch = new Stopwatch() {};
 
-    public NNStressTest(TestModels.TestModelEntry model) {
+    public NNModelLoadingStressTest(TestModels.TestModelEntry model) {
         super(model);
     }
 
@@ -53,8 +58,8 @@
                     model.mModelName,
                     model.mBaselineSec,
                     model.mInputShape,
-                    model.mInOutAssets,
-                    model.mInOutDatasets,
+                    new InferenceInOutSequence.FromAssets[0], // No inputs for inference.
+                    null,
                     model.mTestName,
                     model.mModelFile,
                     null, // Disable evaluation.
@@ -66,10 +71,12 @@
     @Test
     @LargeTest
     public void stressTestNNAPI() throws IOException {
+        Log.i(TAG, mModel.getTestName());
         setUseNNApi(true);
-        setCompleteInputSet(false);
-        TestAction ta = new TestAction(mModel, STRESS_TEST_WARMUP_SECONDS,
-            STRESS_TEST_RUNTIME_SECONDS);
-        runTest(ta, mModel.getTestName());
+        setCompleteInputSet(true);
+        TestAction ta = new TestAction(mModel, WARMUP_SECONDS, INFERENCE_SECONDS);
+        while (stopwatch.runtime(TimeUnit.SECONDS) < RUNTIME_SECONDS) {
+            runTest(ta, mModel.getTestName());
+        }
     }
 }
