, m_IncomingCaptureFile("")
, m_FileOnly(false)
, m_CapturePeriod(LOWEST_CAPTURE_PERIOD)
+ , m_FileFormat("binary")
{}
bool m_EnableProfiling;
std::string m_IncomingCaptureFile;
bool m_FileOnly;
uint32_t m_CapturePeriod;
+ std::string m_FileFormat;
};
ExternalProfilingOptions m_ProfilingOptions;
std::unique_ptr<IProfilingConnection> ProfilingConnectionFactory::GetProfilingConnection(
const Runtime::CreationOptions::ExternalProfilingOptions& options) const
{
+ // Before proceed to create the IProfilingConnection, check if the file format is supported
+ if (!(options.m_FileFormat == "binary"))
+ {
+ throw armnn::UnimplementedException("Unsupported profiling file format, only binary is supported");
+ }
+
// We can create 3 different types of IProfilingConnection.
// 1: If no relevant options are specified then a SocketProfilingConnection is returned.
// 2: If both incoming and outgoing capture files are specified then a SocketProfilingConnection decorated by a
BOOST_TEST(93 == readValue);
}
+BOOST_AUTO_TEST_CASE(CheckFileFormat) {
+ // Locally reduce log level to "Warning", as this test needs to parse a warning message from the standard output
+ LogLevelSwapper logLevelSwapper(armnn::LogSeverity::Warning);
+
+ // Create profiling options.
+ armnn::Runtime::CreationOptions::ExternalProfilingOptions options;
+ options.m_EnableProfiling = true;
+ // Check the default value set to binary
+ BOOST_CHECK(options.m_FileFormat == "binary");
+
+ // Change file format to an unsupported value
+ options.m_FileFormat = "json";
+ // Enable the profiling service
+ armnn::profiling::ProfilingService profilingService;
+ profilingService.ResetExternalProfilingOptions(options, true);
+ // Start the command handler and the send thread
+ profilingService.Update();
+ BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::NotConnected);
+
+ // Redirect the output to a local stream so that we can parse the warning message
+ std::stringstream ss;
+ StreamRedirector streamRedirector(std::cout, ss.rdbuf());
+
+ // When Update is called and the current state is ProfilingState::NotConnected
+ // an exception will be raised from GetProfilingConnection and displayed as warning in the output local stream
+ profilingService.Update();
+
+ streamRedirector.CancelRedirect();
+
+ // Check that the expected error has occurred and logged to the standard output
+ if (!boost::contains(ss.str(), "Unsupported profiling file format, only binary is supported"))
+ {
+ std::cout << ss.str();
+ BOOST_FAIL("Expected string not found.");
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END()
std::string outgoingCaptureFile;
std::string incomingCaptureFile;
uint32_t counterCapturePeriod;
+ std::string fileFormat;
double thresholdTime = 0.0;
"If enabled then the 'file-only' test mode of external profiling will be enabled")
("counter-capture-period,u", po::value<uint32_t>(&counterCapturePeriod)->default_value(150u),
"If profiling is enabled in 'file-only' mode this is the capture period that will be used in the test")
+ ("file-format,ff", po::value(&fileFormat),
+ "If profiling is enabled specifies the output file format")
("parse-unsupported", po::bool_switch()->default_value(false),
"Add unsupported operators as stand-in layers (where supported by parser)");
}
// Create runtime
armnn::IRuntime::CreationOptions options;
- options.m_EnableGpuProfiling = enableProfiling;
- options.m_DynamicBackendsPath = dynamicBackendsPath;
- options.m_ProfilingOptions.m_EnableProfiling = enableExternalProfiling;
+ options.m_EnableGpuProfiling = enableProfiling;
+ options.m_DynamicBackendsPath = dynamicBackendsPath;
+ options.m_ProfilingOptions.m_EnableProfiling = enableExternalProfiling;
options.m_ProfilingOptions.m_IncomingCaptureFile = incomingCaptureFile;
options.m_ProfilingOptions.m_OutgoingCaptureFile = outgoingCaptureFile;
- options.m_ProfilingOptions.m_FileOnly = fileOnlyExternalProfiling;
- options.m_ProfilingOptions.m_CapturePeriod = counterCapturePeriod;
+ options.m_ProfilingOptions.m_FileOnly = fileOnlyExternalProfiling;
+ options.m_ProfilingOptions.m_CapturePeriod = counterCapturePeriod;
+ options.m_ProfilingOptions.m_FileFormat = fileFormat;
std::shared_ptr<armnn::IRuntime> runtime(armnn::IRuntime::Create(options));
const std::string executableName("ExecuteNetwork");
options.m_ProfilingOptions.m_OutgoingCaptureFile = outgoingCaptureFile;
options.m_ProfilingOptions.m_FileOnly = fileOnlyExternalProfiling;
options.m_ProfilingOptions.m_CapturePeriod = counterCapturePeriod;
+ options.m_ProfilingOptions.m_FileFormat = fileFormat;
std::shared_ptr<armnn::IRuntime> runtime(armnn::IRuntime::Create(options));
return RunTest(modelFormat, inputTensorShapes, computeDevices, dynamicBackendsPath, modelPath, inputNames,