• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "host-common/GfxstreamFatalError.h"
2 
3 #include <cstdlib>
4 #include <ostream>
5 
6 #include "base/Metrics.h"
7 #include "host-common/logging.h"
8 
9 namespace {
10 
11 using android::base::CreateMetricsLogger;
12 using android::base::GfxstreamVkAbort;
13 
14 std::optional<std::function<void()>> customDieFunction = std::nullopt;
15 
die()16 [[noreturn]] void die() {
17     if (customDieFunction) {
18         (*customDieFunction)();
19     }
20     abort();
21 }
22 
23 }  // namespace
24 
25 namespace emugl {
26 
AbortMessage(const char * file,const char * function,int line,FatalError reason)27 AbortMessage::AbortMessage(const char *file, const char *function, int line, FatalError reason)
28     : mFile(file), mFunction(function), mLine(line), mReason(reason) {
29     mOss << "FATAL in " << function << ", err code: " << reason.getAbortCode() << ": ";
30 }
31 
~AbortMessage()32 AbortMessage::~AbortMessage() {
33     OutputLog(stderr, 'F', mFile, mLine, 0, mOss.str().c_str());
34     fflush(stderr);
35     CreateMetricsLogger()->logMetricEvent(GfxstreamVkAbort{.file = mFile,
36                                                            .function = mFunction,
37                                                            .msg = mOss.str().c_str(),
38                                                            .line = mLine,
39                                                            .abort_reason = mReason.getAbortCode()});
40 
41     die();
42 }
43 
setDieFunction(std::optional<std::function<void ()>> newDie)44 void setDieFunction(std::optional<std::function<void()>> newDie) { customDieFunction = newDie; }
45 }  // namespace emugl
46