IVGCVSW-4270 Change .dot file name to start with netId

* .dot file will start with the same number as the associated input
  and output tensor dump files

Change-Id: Ic64539854c2b8c34a7034fa18a142b2dfe67df7d
Signed-off-by: Jim Flynn <jim.flynn@arm.com>

IVGCVSW-4271 Add getSupportedOperations marker file

* Also fix segfault in previous graph dump code

Change-Id: I01915f47ae17d89ad3595430d073a17b1a1fda58
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
diff --git a/Utils.hpp b/Utils.hpp
index 267e519..c5a2e65 100644
--- a/Utils.hpp
+++ b/Utils.hpp
@@ -104,47 +104,14 @@
                                  armnn::NetworkId networkId,
                                  const armnn::IProfiler* profiler);
 
-template <typename HalModel>
-void ExportNetworkGraphToDotFile(const armnn::IOptimizedNetwork& optimizedNetwork,
-                                 const std::string& dumpDir,
-                                 const HalModel& model)
-{
-    // The dump directory must exist in advance.
-    if (dumpDir.empty())
-    {
-        return;
-    }
+std::string ExportNetworkGraphToDotFile(const armnn::IOptimizedNetwork& optimizedNetwork,
+                                        const std::string& dumpDir);
 
-    // Get the memory address of the model and convert it to a hex string (of at least a '0' character).
-    size_t modelAddress = uintptr_t(&model);
-    std::stringstream ss;
-    ss << std::uppercase << std::hex << std::setfill('0') << std::setw(1) << modelAddress;
-    std::string modelAddressHexString = ss.str();
-
-    // Set the name of the output .dot file.
-    const std::string fileName = boost::str(boost::format("%1%/networkgraph_%2%.dot")
-                                            % dumpDir
-                                            % modelAddressHexString);
-
-    ALOGV("Exporting the optimized network graph to file: %s", fileName.c_str());
-
-    // Write the network graph to a dot file.
-    std::ofstream fileStream;
-    fileStream.open(fileName, std::ofstream::out | std::ofstream::trunc);
-
-    if (!fileStream.good())
-    {
-        ALOGW("Could not open file %s for writing", fileName.c_str());
-        return;
-    }
-
-    if (optimizedNetwork.SerializeToDot(fileStream) != armnn::Status::Success)
-    {
-        ALOGW("An error occurred when writing to file %s", fileName.c_str());
-    }
-}
+void RenameGraphDotFile(const std::string& oldName, const std::string& dumpDir, const armnn::NetworkId networkId);
 
 /// Checks if a tensor info represents a dynamic tensor
 bool IsDynamicTensor(const armnn::TensorInfo& outputInfo);
 
+std::string GetFileTimestamp();
+
 } // namespace armnn_driver