diff --git a/src/com/android/nn/benchmark/app/AcceleratorSpecificTestSupport.java b/src/com/android/nn/benchmark/app/AcceleratorSpecificTestSupport.java
index 0bdac1f..83875d6 100644
--- a/src/com/android/nn/benchmark/app/AcceleratorSpecificTestSupport.java
+++ b/src/com/android/nn/benchmark/app/AcceleratorSpecificTestSupport.java
@@ -166,6 +166,7 @@
             mProcessor.setNnApiAcceleratorName(acceleratorName);
             mProcessor.setUseNnApiSupportLibrary(NNTestBase.shouldUseNnApiSupportLibrary());
             mProcessor.setExtractNnApiSupportLibrary(NNTestBase.shouldExtractNnApiSupportLibrary());
+            mProcessor.setNnApiSupportLibraryVendor(NNTestBase.getNnApiSupportLibraryVendor());
             mTestModelEntry = testModelEntry;
         }
 
diff --git a/src/com/android/nn/benchmark/app/BenchmarkTestBase.java b/src/com/android/nn/benchmark/app/BenchmarkTestBase.java
index 294e439..10c4254 100644
--- a/src/com/android/nn/benchmark/app/BenchmarkTestBase.java
+++ b/src/com/android/nn/benchmark/app/BenchmarkTestBase.java
@@ -95,9 +95,11 @@
         if (useNNApi) {
             final boolean useNnApiSupportLibrary = NNTestBase.shouldUseNnApiSupportLibrary();
             final boolean extractNnApiSupportLibrary = NNTestBase.shouldExtractNnApiSupportLibrary();
+            final String nnApiSupportLibraryVendor = NNTestBase.getNnApiSupportLibraryVendor();
             Log.i(NNBenchmark.TAG, "Configuring usage of NNAPI SL to " + useNnApiSupportLibrary);
             mActivity.setUseNnApiSupportLibrary(useNnApiSupportLibrary);
             mActivity.setExtractNnApiSupportLibrary(extractNnApiSupportLibrary);
+            mActivity.setNnApiSupportLibraryVendor(nnApiSupportLibraryVendor);
         }
     }
 
diff --git a/src/com/android/nn/benchmark/app/NNBenchmark.java b/src/com/android/nn/benchmark/app/NNBenchmark.java
index a0e6f28..93c1ec8 100644
--- a/src/com/android/nn/benchmark/app/NNBenchmark.java
+++ b/src/com/android/nn/benchmark/app/NNBenchmark.java
@@ -50,6 +50,7 @@
 
     private boolean mUseNnApiSupportLibrary = false;
     private boolean mExtractNnApiSupportLibrary = false;
+    private String mNnApiSupportLibraryVendor = "";
 
     private Processor mProcessor;
     private final ExecutorService executorService = Executors.newSingleThreadExecutor();
@@ -85,6 +86,11 @@
         mProcessor.setUseNnApiSupportLibrary(mUseNnApiSupportLibrary);
     }
 
+    public void setNnApiSupportLibraryVendor(String value) {
+        mNnApiSupportLibraryVendor = value;
+        mProcessor.setNnApiSupportLibraryVendor(mNnApiSupportLibraryVendor);
+    }
+
     public void setExtractNnApiSupportLibrary(boolean value) {
         mExtractNnApiSupportLibrary = value;
         mProcessor.setExtractNnApiSupportLibrary(value);
@@ -145,6 +151,7 @@
             mProcessor.setTfLiteBackend(!i.getBooleanExtra(EXTRA_DISABLE_NNAPI, false) ? TfLiteBackend.NNAPI : TfLiteBackend.CPU);
             mProcessor.setMaxRunIterations(i.getIntExtra(EXTRA_MAX_ITERATIONS, 0));
             mProcessor.setUseNnApiSupportLibrary(mUseNnApiSupportLibrary);
+            mProcessor.setNnApiSupportLibraryVendor(mNnApiSupportLibraryVendor);
             mProcessor.setExtractNnApiSupportLibrary(mExtractNnApiSupportLibrary);
             executorService.submit(mProcessor);
         } else {
diff --git a/src/com/android/nn/benchmark/core/NNTestBase.java b/src/com/android/nn/benchmark/core/NNTestBase.java
index fe0bddd..169572a 100644
--- a/src/com/android/nn/benchmark/core/NNTestBase.java
+++ b/src/com/android/nn/benchmark/core/NNTestBase.java
@@ -150,9 +150,11 @@
     // from the library.
     private boolean mUseNnApiSupportLibrary = false;
     private boolean mExtractNnApiSupportLibrary = false;
+    private String mNnApiSupportLibraryVendor = "";
 
     static final String USE_NNAPI_SL_PROPERTY = "useNnApiSupportLibrary";
     static final String EXTRACT_NNAPI_SL_PROPERTY = "extractNnApiSupportLibrary";
+    static final String NNAPI_SL_VENDOR = "nnApiSupportLibraryVendor";
 
     private static boolean getBooleanTestParameter(String key, boolean defaultValue) {
       // All instrumentation arguments are passed as String so I have to convert the value here.
@@ -168,6 +170,10 @@
         return getBooleanTestParameter(EXTRACT_NNAPI_SL_PROPERTY, false);
     }
 
+    public static String getNnApiSupportLibraryVendor() {
+        return InstrumentationRegistry.getArguments().getString(NNAPI_SL_VENDOR);
+    }
+
     public NNTestBase(String modelName, String modelFile, int[] inputShape,
             InferenceInOutSequence.FromAssets[] inputOutputAssets,
             InferenceInOutSequence.FromDataset[] inputOutputDatasets,
@@ -210,6 +216,7 @@
 
     public  void setUseNnApiSupportLibrary(boolean value) {mUseNnApiSupportLibrary = value;}
     public  void setExtractNnApiSupportLibrary(boolean value) {mExtractNnApiSupportLibrary = value;}
+    public  void setNnApiSupportLibraryVendor(String value) {mNnApiSupportLibraryVendor = value;}
 
     public void setNNApiDeviceName(String value) {
         if (mTfLiteBackend != TfLiteBackend.NNAPI) {
diff --git a/src/com/android/nn/benchmark/core/Processor.java b/src/com/android/nn/benchmark/core/Processor.java
index 87a4455..1955b26 100644
--- a/src/com/android/nn/benchmark/core/Processor.java
+++ b/src/com/android/nn/benchmark/core/Processor.java
@@ -77,6 +77,7 @@
 
     private boolean mUseNnApiSupportLibrary;
     private boolean mExtractNnApiSupportLibrary;
+    private String mNnApiSupportLibraryVendor;
 
     public Processor(Context context, Processor.Callback callback, int[] testList) {
         mContext = context;
@@ -94,6 +95,7 @@
         mModelFilterRegex = null;
         mUseNnApiSupportLibrary = false;
         mExtractNnApiSupportLibrary = false;
+        mNnApiSupportLibraryVendor = "";
     }
 
     public void setUseNNApi(boolean useNNApi) {
@@ -142,6 +144,7 @@
 
     public void setUseNnApiSupportLibrary(boolean value) { mUseNnApiSupportLibrary = value; }
     public void setExtractNnApiSupportLibrary(boolean value) { mExtractNnApiSupportLibrary = value; }
+    public void setNnApiSupportLibraryVendor(String value) { mNnApiSupportLibraryVendor = value; }
 
     public void enableCompilationCachingBenchmarks(
             float warmupTimeSeconds, float runTimeSeconds, int maxIterations) {
@@ -183,7 +186,8 @@
                 /*enableIntermediateTensorsDump=*/false,
                 /*mmapModel=*/ false,
                 NNTestBase.shouldUseNnApiSupportLibrary(),
-                NNTestBase.shouldExtractNnApiSupportLibrary()
+                NNTestBase.shouldExtractNnApiSupportLibrary(),
+                NNTestBase.getNnApiSupportLibraryVendor()
             )) {
             tb.setNNApiDeviceName(acceleratorName);
             return tb.setupModel(context);
@@ -210,7 +214,7 @@
             oldTestBase.destroy();
         }
         NNTestBase tb = t.createNNTestBase(mBackend, /*enableIntermediateTensorsDump=*/false,
-            mMmapModel, mUseNnApiSupportLibrary, mExtractNnApiSupportLibrary);
+            mMmapModel, mUseNnApiSupportLibrary, mExtractNnApiSupportLibrary, mNnApiSupportLibraryVendor);
         if (mBackend == TfLiteBackend.NNAPI) {
             tb.setNNApiDeviceName(mAcceleratorName);
         }
diff --git a/src/com/android/nn/benchmark/core/TestModels.java b/src/com/android/nn/benchmark/core/TestModels.java
index d91e013..99eac1b 100644
--- a/src/com/android/nn/benchmark/core/TestModels.java
+++ b/src/com/android/nn/benchmark/core/TestModels.java
@@ -82,24 +82,25 @@
 
         public NNTestBase createNNTestBase(TfLiteBackend tfLiteBackend, boolean enableIntermediateTensorsDump) {
             return createNNTestBase(tfLiteBackend, enableIntermediateTensorsDump, /*mmapModel=*/false,
-                /*useNnApiSl=*/false, /*extractNnApiSl=*/false);
+                /*useNnApiSl=*/false, /*extractNnApiSl=*/false, /*nnApiSlVendor=*/"");
         }
 
         // Used by CTS tests.
         public NNTestBase createNNTestBase(boolean useNNAPI, boolean enableIntermediateTensorsDump) {
             TfLiteBackend tfLiteBackend = useNNAPI ? TfLiteBackend.NNAPI : TfLiteBackend.CPU;
             return createNNTestBase(tfLiteBackend, enableIntermediateTensorsDump,
-                /*mmapModel=*/false, /*useNnApiSl=*/false, /*extractNnApiSl=*/false);
+                /*mmapModel=*/false, /*useNnApiSl=*/false, /*extractNnApiSl=*/false, /*nnApiSlVendor=*/"");
         }
 
         public NNTestBase createNNTestBase(TfLiteBackend tfLiteBackend, boolean enableIntermediateTensorsDump,
-                boolean mmapModel, boolean useNnApiSl, boolean extractNnApiSl) {
+                boolean mmapModel, boolean useNnApiSl, boolean extractNnApiSl, String nnApiSlVendor) {
             NNTestBase test = createNNTestBase();
             test.setTfLiteBackend(tfLiteBackend);
             test.enableIntermediateTensorsDump(enableIntermediateTensorsDump);
             test.setMmapModel(mmapModel);
             test.setUseNnApiSupportLibrary(useNnApiSl);
             test.setExtractNnApiSupportLibrary(extractNnApiSl);
+            test.setNnApiSupportLibraryVendor(nnApiSlVendor);
             return test;
         }
 
diff --git a/src/com/android/nn/benchmark/util/DumpIntermediateTensors.java b/src/com/android/nn/benchmark/util/DumpIntermediateTensors.java
index 438384a..22d7f16 100644
--- a/src/com/android/nn/benchmark/util/DumpIntermediateTensors.java
+++ b/src/com/android/nn/benchmark/util/DumpIntermediateTensors.java
@@ -96,7 +96,8 @@
                     try (NNTestBase testBase = modelEntry.createNNTestBase(
                             backend, /*enableIntermediateTensorsDump*/true, /*mmapModel*/false,
                         NNTestBase.shouldUseNnApiSupportLibrary(),
-                        NNTestBase.shouldExtractNnApiSupportLibrary())) {
+                        NNTestBase.shouldExtractNnApiSupportLibrary(),
+                        NNTestBase.getNnApiSupportLibraryVendor())) {
                         testBase.setupModel(this);
                         File outputDir = new File(getFilesDir() + "/" + DUMP_DIR +
                                 "/" + modelName, useNNAPIDir);
