mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 09:15:34 +08:00
Refactor crashpad initialization
Crashpad handler was initialized quite late since we were waiting for settings. However the settings in crashpad are persistent itself, hence we can start it at the earliest possible time and change the upload settings independently later. The only prerequisite is to have QCoreApplication constructed in order for the application name to be available. ref T652
This commit is contained in:
committed by
Klaus Basan
parent
99bcee87aa
commit
a7509669f9
92
src/blackmisc/crashhandler.h
Normal file
92
src/blackmisc/crashhandler.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/* Copyright (C) 2019
|
||||
* swift project Community / Contributors
|
||||
*
|
||||
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
|
||||
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
|
||||
* or distributed except according to the terms contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
//! \file
|
||||
|
||||
#ifndef BLACKMISC_CRASHHANDLER_H
|
||||
#define BLACKMISC_CRASHHANDLER_H
|
||||
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/crashinfo.h"
|
||||
#include "blackmisc/digestsignal.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#if !defined(Q_CC_MINGW)
|
||||
#define BLACK_USE_CRASHPAD
|
||||
#endif
|
||||
|
||||
namespace crashpad
|
||||
{
|
||||
class CrashpadClient;
|
||||
class CrashReportDatabase;
|
||||
}
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
//! Crash handler
|
||||
class BLACKMISC_EXPORT CCrashHandler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
//! Get singleton instance
|
||||
static CCrashHandler *instance();
|
||||
|
||||
//! Destructor
|
||||
virtual ~CCrashHandler();
|
||||
|
||||
//! Initialize and start crashpad handler process
|
||||
void init();
|
||||
|
||||
//! Enable/disable automatic uploading
|
||||
void setUploadsEnabled(bool enable);
|
||||
|
||||
//! Is automatic dump uploading enabled?
|
||||
bool isCrashDumpUploadEnabled() const;
|
||||
|
||||
// ----------------------- Crash info ---------------------------------
|
||||
|
||||
//! Extra annotation for crash to easier identify annotation
|
||||
void setCrashInfo(const BlackMisc::CCrashInfo &info);
|
||||
|
||||
//! Set user name for crash info
|
||||
void crashAndLogInfoUserName(const QString &name);
|
||||
|
||||
//! Set simulator string in crash info
|
||||
void crashAndLogInfoSimulator(const QString &simulator);
|
||||
|
||||
//! Set flight network in crash info
|
||||
void crashAndLogInfoFlightNetwork(const QString &flightNetwork);
|
||||
|
||||
//! Append crash info
|
||||
void crashAndLogAppendInfo(const QString &info);
|
||||
|
||||
//! Get crash info
|
||||
const BlackMisc::CCrashInfo &getCrashInfo() const { return m_crashAndLogInfo; }
|
||||
|
||||
//! Simulate a crash
|
||||
void simulateCrash();
|
||||
|
||||
private:
|
||||
CCrashHandler(QObject *parent = nullptr);
|
||||
|
||||
// crash info
|
||||
void triggerCrashInfoWrite();
|
||||
|
||||
BlackMisc::CCrashInfo m_crashAndLogInfo; //!< info representing details
|
||||
BlackMisc::CDigestSignal m_dsCrashAndLogInfo { this, &CCrashHandler::triggerCrashInfoWrite, 10000, 5 };
|
||||
|
||||
#ifdef BLACK_USE_CRASHPAD
|
||||
std::unique_ptr<crashpad::CrashpadClient> m_crashpadClient;
|
||||
std::unique_ptr<crashpad::CrashReportDatabase> m_crashReportDatabase;
|
||||
#endif
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user