IVGCVSW-6783 Re-ordering DumpJsonProfilingIfRequired in ArmnnPreparedModel

 * In the destructor of ArmnnPreparedModel, DumpJsonProfilingIfRequired
   was being called with a potentially null profiler.

Signed-off-by: Colm Donelan <colm.donelan@arm.com>
Change-Id: Id0d3a2403878fedc4e05dc498edb48d574232c71
diff --git a/ArmnnPreparedModel.cpp b/ArmnnPreparedModel.cpp
index 563abd4..38f1bc2 100644
--- a/ArmnnPreparedModel.cpp
+++ b/ArmnnPreparedModel.cpp
@@ -154,6 +154,12 @@
 {
     // Get a hold of the profiler used by this model.
     std::shared_ptr<armnn::IProfiler> profiler = m_Runtime->GetProfiler(m_NetworkId);
+    if (profiler && m_GpuProfilingEnabled)
+    {
+        // Dump the profiling info to a file if required.
+        DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId,
+                                    profiler.get());
+    }
 
     // Unload the network associated with this model.
     m_Runtime->UnloadNetwork(m_NetworkId);
@@ -163,9 +169,6 @@
     {
         m_Threadpool->UnloadMemHandles(m_NetworkId);
     }
-
-    // Dump the profiling info to a file if required.
-    DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId, profiler.get());
 }
 
 template<typename HalVersion>
diff --git a/ArmnnPreparedModel_1_2.cpp b/ArmnnPreparedModel_1_2.cpp
index 29055a7..7f35e60 100644
--- a/ArmnnPreparedModel_1_2.cpp
+++ b/ArmnnPreparedModel_1_2.cpp
@@ -230,6 +230,12 @@
 {
     // Get a hold of the profiler used by this model.
     std::shared_ptr<armnn::IProfiler> profiler = m_Runtime->GetProfiler(m_NetworkId);
+    if (profiler && m_GpuProfilingEnabled)
+    {
+        // Dump the profiling info to a file if required.
+        DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId,
+                                    profiler.get());
+    }
 
     // Unload the network associated with this model.
     m_Runtime->UnloadNetwork(m_NetworkId);
@@ -239,9 +245,6 @@
     {
         m_Threadpool->UnloadMemHandles(m_NetworkId);
     }
-
-    // Dump the profiling info to a file if required.
-    DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId, profiler.get());
 }
 
 template<typename HalVersion>
diff --git a/ArmnnPreparedModel_1_3.cpp b/ArmnnPreparedModel_1_3.cpp
index abd135e..36575b8 100644
--- a/ArmnnPreparedModel_1_3.cpp
+++ b/ArmnnPreparedModel_1_3.cpp
@@ -254,6 +254,12 @@
 {
     // Get a hold of the profiler used by this model.
     std::shared_ptr<armnn::IProfiler> profiler = m_Runtime->GetProfiler(m_NetworkId);
+    if (profiler && m_GpuProfilingEnabled)
+    {
+        // Dump the profiling info to a file if required.
+        DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId,
+                                    profiler.get());
+    }
 
     // Unload the network associated with this model.
     m_Runtime->UnloadNetwork(m_NetworkId);
@@ -263,9 +269,6 @@
     {
         m_Threadpool->UnloadMemHandles(m_NetworkId);
     }
-
-    // Dump the profiling info to a file if required.
-    DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId, profiler.get());
 }
 
 template<typename HalVersion>