Github #320 Add logging and error checking to SimpleSample

These things are frequently asked questions, so I think it makes sense
to add them to the basic sample.

Signed-off-by: Matthew Bentham <Matthew.Bentham@arm.com>
Change-Id: I17cacb37fbe87e2a8fb14e7b7e85ebc528575386
diff --git a/samples/SimpleSample.cpp b/samples/SimpleSample.cpp
index ed7c0bf..5276d74 100644
--- a/samples/SimpleSample.cpp
+++ b/samples/SimpleSample.cpp
@@ -2,8 +2,12 @@
 // Copyright © 2017 Arm Ltd. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
+#include <armnn/INetwork.hpp>
+#include <armnn/IRuntime.hpp>
+#include <armnn/Utils.hpp>
+#include <armnn/Descriptors.hpp>
+
 #include <iostream>
-#include "armnn/ArmNN.hpp"
 
 /// A simple example of using the ArmNN SDK API. In this sample, the users single input number is multiplied by 1.0f
 /// using a fully connected layer with a single neuron to produce an output number that is the same as the input.
@@ -15,6 +19,10 @@
     std::cout << "Please enter a number: " << std::endl;
     std::cin >> number;
 
+    // Turn on logging to standard output
+    // This is useful in this sample so that users can learn more about what is going on
+    armnn::ConfigureLogging(true, false, LogSeverity::Warning);
+
     // Construct ArmNN network
     armnn::NetworkId networkIdentifier;
     INetworkPtr myNetwork = INetwork::Create();
@@ -47,6 +55,14 @@
 
     // Optimise ArmNN network
     armnn::IOptimizedNetworkPtr optNet = Optimize(*myNetwork, {Compute::CpuRef}, run->GetDeviceSpec());
+    if (!optNet)
+    {
+        // This shouldn't happen for this simple sample, with reference backend.
+        // But in general usage Optimize could fail if the hardware at runtime cannot
+        // support the model that has been provided.
+        std::cerr << "Error: Failed to optimise the input network." << std::endl;
+        return 1;
+    }
 
     // Load graph into runtime
     run->LoadNetwork(networkIdentifier, std::move(optNet));