xref: /aosp_15_r20/external/armnn/profiling/common/include/ProfilingException.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #pragma once
6*89c4ff92SAndroid Build Coastguard Worker 
7*89c4ff92SAndroid Build Coastguard Worker #include <stdexcept>
8*89c4ff92SAndroid Build Coastguard Worker #include <string>
9*89c4ff92SAndroid Build Coastguard Worker #include <sstream>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker namespace arm
12*89c4ff92SAndroid Build Coastguard Worker {
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker namespace pipe
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker struct Location
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker     const char* m_Function;
20*89c4ff92SAndroid Build Coastguard Worker     const char* m_File;
21*89c4ff92SAndroid Build Coastguard Worker     unsigned int m_Line;
22*89c4ff92SAndroid Build Coastguard Worker 
Locationarm::pipe::Location23*89c4ff92SAndroid Build Coastguard Worker     Location(const char* func,
24*89c4ff92SAndroid Build Coastguard Worker              const char* file,
25*89c4ff92SAndroid Build Coastguard Worker              unsigned int line)
26*89c4ff92SAndroid Build Coastguard Worker     : m_Function{func}
27*89c4ff92SAndroid Build Coastguard Worker     , m_File{file}
28*89c4ff92SAndroid Build Coastguard Worker     , m_Line{line}
29*89c4ff92SAndroid Build Coastguard Worker     {
30*89c4ff92SAndroid Build Coastguard Worker     }
31*89c4ff92SAndroid Build Coastguard Worker 
AsStringarm::pipe::Location32*89c4ff92SAndroid Build Coastguard Worker     std::string AsString() const
33*89c4ff92SAndroid Build Coastguard Worker     {
34*89c4ff92SAndroid Build Coastguard Worker         std::stringstream ss;
35*89c4ff92SAndroid Build Coastguard Worker         ss << " at function " << m_Function
36*89c4ff92SAndroid Build Coastguard Worker            << " [" << m_File << ':' << m_Line << "]";
37*89c4ff92SAndroid Build Coastguard Worker         return ss.str();
38*89c4ff92SAndroid Build Coastguard Worker     }
39*89c4ff92SAndroid Build Coastguard Worker 
FileLinearm::pipe::Location40*89c4ff92SAndroid Build Coastguard Worker     std::string FileLine() const
41*89c4ff92SAndroid Build Coastguard Worker     {
42*89c4ff92SAndroid Build Coastguard Worker         std::stringstream ss;
43*89c4ff92SAndroid Build Coastguard Worker         ss << " [" << m_File << ':' << m_Line << "]";
44*89c4ff92SAndroid Build Coastguard Worker         return ss.str();
45*89c4ff92SAndroid Build Coastguard Worker     }
46*89c4ff92SAndroid Build Coastguard Worker };
47*89c4ff92SAndroid Build Coastguard Worker 
48*89c4ff92SAndroid Build Coastguard Worker /// General Exception class for Profiling code
49*89c4ff92SAndroid Build Coastguard Worker class ProfilingException : public std::exception
50*89c4ff92SAndroid Build Coastguard Worker {
51*89c4ff92SAndroid Build Coastguard Worker public:
ProfilingException(const std::string & message)52*89c4ff92SAndroid Build Coastguard Worker     explicit ProfilingException(const std::string& message) : m_Message(message) {};
53*89c4ff92SAndroid Build Coastguard Worker 
ProfilingException(const std::string & message,const Location & location)54*89c4ff92SAndroid Build Coastguard Worker     explicit ProfilingException(const std::string& message,
55*89c4ff92SAndroid Build Coastguard Worker                                 const Location& location) : m_Message(message + location.AsString()) {};
56*89c4ff92SAndroid Build Coastguard Worker 
57*89c4ff92SAndroid Build Coastguard Worker     /// @return - Error message of ProfilingException
what() const58*89c4ff92SAndroid Build Coastguard Worker     virtual const char *what() const noexcept override
59*89c4ff92SAndroid Build Coastguard Worker     {
60*89c4ff92SAndroid Build Coastguard Worker          return m_Message.c_str();
61*89c4ff92SAndroid Build Coastguard Worker     }
62*89c4ff92SAndroid Build Coastguard Worker 
63*89c4ff92SAndroid Build Coastguard Worker private:
64*89c4ff92SAndroid Build Coastguard Worker     std::string m_Message;
65*89c4ff92SAndroid Build Coastguard Worker };
66*89c4ff92SAndroid Build Coastguard Worker 
67*89c4ff92SAndroid Build Coastguard Worker class BackendProfilingException : public ProfilingException
68*89c4ff92SAndroid Build Coastguard Worker {
69*89c4ff92SAndroid Build Coastguard Worker public:
70*89c4ff92SAndroid Build Coastguard Worker     using ProfilingException::ProfilingException;
71*89c4ff92SAndroid Build Coastguard Worker };
72*89c4ff92SAndroid Build Coastguard Worker 
73*89c4ff92SAndroid Build Coastguard Worker class BadOptionalAccessException : public ProfilingException
74*89c4ff92SAndroid Build Coastguard Worker {
75*89c4ff92SAndroid Build Coastguard Worker     using ProfilingException::ProfilingException;
76*89c4ff92SAndroid Build Coastguard Worker };
77*89c4ff92SAndroid Build Coastguard Worker 
78*89c4ff92SAndroid Build Coastguard Worker class BufferExhaustion : public ProfilingException
79*89c4ff92SAndroid Build Coastguard Worker {
80*89c4ff92SAndroid Build Coastguard Worker public:
81*89c4ff92SAndroid Build Coastguard Worker     using ProfilingException::ProfilingException;
82*89c4ff92SAndroid Build Coastguard Worker };
83*89c4ff92SAndroid Build Coastguard Worker 
84*89c4ff92SAndroid Build Coastguard Worker class InvalidArgumentException : public ProfilingException
85*89c4ff92SAndroid Build Coastguard Worker {
86*89c4ff92SAndroid Build Coastguard Worker public:
87*89c4ff92SAndroid Build Coastguard Worker     using ProfilingException::ProfilingException;
88*89c4ff92SAndroid Build Coastguard Worker };
89*89c4ff92SAndroid Build Coastguard Worker 
90*89c4ff92SAndroid Build Coastguard Worker class TimeoutException : public ProfilingException
91*89c4ff92SAndroid Build Coastguard Worker {
92*89c4ff92SAndroid Build Coastguard Worker public:
93*89c4ff92SAndroid Build Coastguard Worker     using ProfilingException::ProfilingException;
94*89c4ff92SAndroid Build Coastguard Worker };
95*89c4ff92SAndroid Build Coastguard Worker 
96*89c4ff92SAndroid Build Coastguard Worker class UnimplementedException : public ProfilingException
97*89c4ff92SAndroid Build Coastguard Worker {
98*89c4ff92SAndroid Build Coastguard Worker public:
99*89c4ff92SAndroid Build Coastguard Worker     using ProfilingException::ProfilingException;
100*89c4ff92SAndroid Build Coastguard Worker };
101*89c4ff92SAndroid Build Coastguard Worker 
102*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
103*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
104*89c4ff92SAndroid Build Coastguard Worker 
105*89c4ff92SAndroid Build Coastguard Worker #define LOCATION() arm::pipe::Location(__func__, __FILE__, __LINE__)
106