9#include "app_manager.hpp"
27 QApplication::setApplicationName(Configuration::PROJECT_NAME);
28 QApplication::setOrganizationName(
"eiG");
29 const QString version = QStringLiteral(
"%1.%2.%3")
30 .arg(Configuration::VERSION_MAJOR)
31 .arg(Configuration::VERSION_MINOR)
32 .arg(Configuration::PATCH_VERSION);
33 QApplication::setApplicationVersion(version);
43 bool diagnosticsEnabled =
false;
44 for (
const auto& arg : QApplication::arguments()) {
45 if (arg == QLatin1String(
"-D") ||
46 arg == QLatin1String(
"--diagnostics") ||
47 arg == QLatin1String(
"-c") ||
48 arg == QLatin1String(
"--debugConsole")) {
49 diagnosticsEnabled =
true;
58 auto tr_func = [](
const char* text) {
59 return QCoreApplication::translate(
"CmdLine::CmdLineArgs", text);
82 QApplication::translate(
"MainWindow",
"Pure C++"));
91 menuBar->addMenu(QApplication::translate(
"MainWindow",
"&File"));
93 fileMenu->addAction(QApplication::translate(
"MainWindow",
"&Quit"));
94 quitAction->setShortcut(QKeySequence::Quit);
95 connect(quitAction, &QAction::triggered,
bridge_,
100 menuBar->addMenu(QApplication::translate(
"MainWindow",
"&Help"));
101 QAction* aboutAction = helpMenu->addAction(
102 QApplication::translate(
"MainWindow",
"About Pure C++"));
103 connect(aboutAction, &QAction::triggered,
bridge_,
105 QAction* aboutQtAction = helpMenu->addAction(
106 QApplication::translate(
"MainWindow",
"About Qt"));
107 connect(aboutQtAction, &QAction::triggered,
bridge_,
113 if (
bridge_->displayContainer()) {
123 &QMainWindow::close, Qt::QueuedConnection);
127 mainWindow_->setAttribute(Qt::WA_DeleteOnClose,
false);
137 int exitCode = QApplication::exec();
152 using CleanupClock = std::chrono::high_resolution_clock;
153 auto phaseStart = CleanupClock::now();
160 const bool useFastCleanup =
163 QWidget* container =
nullptr;
165 container =
bridge_->displayContainer();
167 phaseStart = CleanupClock::now();
170 std::chrono::duration<double>(CleanupClock::now() -
177 phaseStart = CleanupClock::now();
182 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
186 const auto manualDestroyStart = CleanupClock::now();
187 phaseStart = CleanupClock::now();
188 if (useFastCleanup) {
189 bridge_->releaseDisplayDeferred(container);
191 bridge_->releaseDisplayStrict(container);
194 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
197 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
200 std::chrono::duration<double>(CleanupClock::now() -
206 phaseStart = CleanupClock::now();
207 if (useFastCleanup) {
214 if (!useFastCleanup) {
215 phaseStart = CleanupClock::now();
216 QApplication::processEvents(
217 QEventLoop::ExcludeUserInputEvents);
219 std::chrono::duration<double>(CleanupClock::now() -
Global application profiling instrumentation.
QPointer< Window::QmlBridge > bridge_
The QML bridge for exposing C++ functionality.
int run()
Runs the main application event loop.
bool setup()
Sets up all application components before running.
QMainWindow * mainWindow_
The main window (stored for proper cleanup order).
void cleanup()
Performs cleanup after the event loop has finished.
std::unique_ptr< AppUtils::Logger > logger_
The logger for the application.
AppManager()
Constructs the application manager and sets application-wide metadata.
std::unique_ptr< CmdLine::CmdLineArgs > args_
The command line arguments for the application.
static void addCleanupAppProcessEvents(double seconds)
Adds measured time spent in AppManager cleanup processEvents.
static void addCleanupAppManualDestroy(double seconds)
Adds measured time for manual destroy operations.
static void startEventLoop()
Starts timing the Qt event loop.
static void printReport()
Prints the profiling report.
static void addCleanupAppBridgeCleanup(double seconds)
Adds measured time spent in bridge/display cleanup call.
static void addCleanupAppDetachContainer(double seconds)
Adds measured time for detaching the display container.
static void stopEventLoop()
Stops timing the Qt event loop.
static void startCleanup()
Starts timing cleanup.
static void addCleanupAppContainerDeleteSchedule(double seconds)
Adds measured time for container delete action.
static void stopWindowCreation()
Stops timing 3D window creation.
static void addCleanupAppReleaseDisplay(double seconds)
Adds measured time for explicit display release.
static void startWindowCreation()
Starts timing 3D window creation.
static void stopCleanup()
Stops timing cleanup.
static void loadTranslations(bool in_diagnosticsEnabled)
Loads and installs the best-matching translation for the system’s locale.
Bridge class to expose C++ functionality to QML.
void showAboutQt()
Slot to display the "About Qt" dialogue.
void quit()
Slot to quit the application.
void simulationFinished()
Emitted when the simulation finishes.
void showAbout()
Slot to display the "About" dialogue.
static std::unique_ptr< CmdLineArgs > parse(const QStringList &q_args, const std::function< QString(const char *)> &tr_func)
Parses and validates command-line arguments.