You.i Engine
YiCrashHandler.h
Go to the documentation of this file.
1 #ifndef _YI_CRASH_HANDLER_H_
2 #define _YI_CRASH_HANDLER_H_
3 
4 #include "signal/YiSignal.h"
6 #include "utility/YiString.h"
7 
9 
19 {
20 public:
24  class PostData
25  {
26  public:
30  void SetUrl(CYIString postUrl);
31 
37  const CYIString &GetUrl() const;
38 
44  void AddHeaders(const std::vector<std::pair<CYIString, CYIString>> &headers);
45 
51  void AddHeader(const CYIString &name, const CYIString &value);
52 
56  void RemoveHeader(const CYIString &name);
57 
61  void RemoveAllHeaders();
62 
69  const std::vector<std::pair<CYIString, CYIString>> &GetHeaders() const;
70 
71  private:
72  CYIString m_url;
73  std::vector<std::pair<CYIString, CYIString>> m_headers;
74  };
75 
94 
102  static void AddAppDataValue(const CYIString &key, const CYIString &value);
103 
111  static CYIString GetAppDataValue(const CYIString &key);
112 
116  static void ClearAppData();
117 
124 
130  static void ReplacePlaceholderWithMinidumpFilename(CYIStringView filename, CYIString *pJSON);
131 
137  static void ReplacePlaceholderWithTimestamp(CYIString *pJSON);
138 
145  static void ReplacePlaceholders(CYIStringView minidumpFilename, CYIString *pJSON);
146 
156  static const CYIString &GetCrashReport();
157 
163  static void ReportFatalError(const CYIString &callStack);
164 
173  static CYIString GetCallStack();
174 
175  /*
176  \details Sets PostData POST request data. \a data is available as #CYICrashHandler::GetCrashReportPostData
177 
178  Example usage:
179  \code{.cpp}
180  auto postData = CYICrashHandler::GetCrashReportPostData();
181  postData.SetUrl("www.example.com");
182  postData.AddHeader("name", "value");
183  CYICrashHandler::SetCrashReportPostData(postData);
184  \endcode
185 
186  \note Calling this function will trigger #CYICrashHandler::MinidumpPostDataChanged signal after changing the data.
187  \sa #CYICrashHandler::GetCrashReportPostData
188  */
189  static void SetCrashReportPostData(const PostData &data);
190 
194  static const PostData &GetCrashReportPostData();
195 
209  static void SetMinidumpPostData(const PostData &data);
210 
214  static const PostData &GetMinidumpPostData();
215 
223  static void SetEngineInformation();
224 
232  static void SetDeviceInformation();
233 
241  static void UpdateRenderingSurfaceData(const CYIRenderingSurfaceInfo &surface);
242 
247 
252 
257 
264 
265 protected:
267 
272 
276  static constexpr const char *s_pMinidumpFilenameKey = "minidump_filename";
282  static void ResetCrashReportForTesting();
283 
284 private:
288  static CYIString s_crashReport;
289 
293  static PostData s_crashReportPostData;
294 
298  static PostData s_minidumpPostData;
299 
303  static void RemoveCrashReportValue(const char *pKey);
304 
305  template<typename T>
306  static void SetCrashReportValue(const char *pKey, T jsonValue);
307 };
308 
311 #endif
A collection of functions used to report information about a crash.
Definition: YiCrashHandler.h:18
static constexpr const char * s_pMinidumpFilenameKey
Definition: YiCrashHandler.h:276
static void ResetCrashReportForTesting()
static void SetCrashReportPostData(const PostData &data)
static void ReplacePlaceholderWithTimestamp(CYIString *pJSON)
static void SetMinidumpPostData(const PostData &data)
static const CYIStringView s_quotedUnixTimestampMsPlaceholder
Definition: YiCrashHandler.h:93
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:32
static CYISignal FatalErrorOccurred
Definition: YiCrashHandler.h:263
static CYISignal MinidumpPostDataChanged
Definition: YiCrashHandler.h:256
Definition: YiCrashHandlerPlatform.h:28
static CYISignal CrashReportChanged
Definition: YiCrashHandler.h:246
static void ReportFatalError(const CYIString &callStack)
static CYISignal CrashReportPostDataChanged
Definition: YiCrashHandler.h:251
static void SetEngineInformation()
static void PreallocateMinidumpFilenameStorage()
Definition: YiRenderingSurfaceInfo.h:21
A container for information required to make a POST request.
Definition: YiCrashHandler.h:24
const CYIString & GetUrl() const
static void ClearAppData()
void AddHeaders(const std::vector< std::pair< CYIString, CYIString >> &headers)
void RemoveHeader(const CYIString &name)
static void ReplacePlaceholderWithMinidumpFilename(CYIStringView filename, CYIString *pJSON)
static const PostData & GetCrashReportPostData()
static void SetDeviceInformation()
void SetUrl(CYIString postUrl)
const std::vector< std::pair< CYIString, CYIString > > & GetHeaders() const
static const CYIStringView s_quotedUnixTimestampMsForReplacement
Definition: YiCrashHandler.h:271
void AddHeader(const CYIString &name, const CYIString &value)
static void AddAppDataValue(const CYIString &key, const CYIString &value)
static void UpdateRenderingSurfaceData(const CYIRenderingSurfaceInfo &surface)
static const PostData & GetMinidumpPostData()
static void ReplacePlaceholders(CYIStringView minidumpFilename, CYIString *pJSON)
Signals and slots are a thread-safe and flexible communication framework that will allow various obje...
Definition: YiSignal.h:169
static const CYIString & GetCrashReport()
static CYIString GetCallStack()
static CYIString GetAppDataValue(const CYIString &key)
A lightweight wrapper around a sequence of Unicode characters.
Definition: YiStringView.h:56