File indexing completed on 2024-10-13 05:03:20
0001 /* 0002 SPDX-FileCopyrightText: 2019 David Faure <david.faure@kdab.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "parser.h" 0008 0009 #include "analyze/suppressions.h" 0010 0011 #include <QCommandLineParser> 0012 #include <QCoreApplication> 0013 #include <QDebug> 0014 0015 int main(int argc, char** argv) 0016 { 0017 QCoreApplication app(argc, argv); 0018 0019 QCommandLineOption stopAfterOption( 0020 QStringLiteral("stop-after"), 0021 QStringLiteral("stop parsing after the given stage, possible values are: Summary, BottomUp, SizeHistogram, " 0022 "TopDownAndCallerCallee, Finished"), 0023 QStringLiteral("stage"), QStringLiteral("Finished")); 0024 QCommandLineParser commandLineParser; 0025 commandLineParser.addOption(stopAfterOption); 0026 commandLineParser.addPositionalArgument(QStringLiteral("file"), QStringLiteral("heaptrack data files to parse")); 0027 commandLineParser.addHelpOption(); 0028 0029 commandLineParser.process(app); 0030 0031 const auto files = commandLineParser.positionalArguments(); 0032 if (files.isEmpty()) 0033 return 1; 0034 0035 qRegisterMetaType<CallerCalleeResults>(); 0036 qRegisterMetaType<TreeData>(); 0037 0038 Parser parser; 0039 QObject::connect(&parser, &Parser::finished, &app, &QCoreApplication::quit); 0040 QObject::connect(&parser, &Parser::failedToOpen, &app, [&](const QString& path) { 0041 qWarning() << "failed to open" << path; 0042 app.exit(1); 0043 }); 0044 0045 const auto stopAfter = [&]() { 0046 const auto str = commandLineParser.value(stopAfterOption); 0047 if (str == QLatin1String("Summary")) { 0048 return Parser::StopAfter::Summary; 0049 } else if (str == QLatin1String("BottomUp")) { 0050 return Parser::StopAfter::BottomUp; 0051 } else if (str == QLatin1String("SizeHistogram")) { 0052 return Parser::StopAfter::SizeHistogram; 0053 } else if (str == QLatin1String("TopDownAndCallerCallee")) { 0054 return Parser::StopAfter::TopDownAndCallerCallee; 0055 } else if (str == QLatin1String("Finished")) { 0056 return Parser::StopAfter::Finished; 0057 } 0058 0059 qWarning() << "unsupported stopAfter stage:" << str; 0060 exit(1); 0061 }(); 0062 0063 FilterParameters params; 0064 const auto suppressionsFile = files.value(2); 0065 if (!suppressionsFile.isEmpty()) { 0066 bool parsedOk = false; 0067 params.suppressions = parseSuppressions(suppressionsFile.toStdString(), &parsedOk); 0068 if (!parsedOk) 0069 return 1; 0070 } 0071 0072 parser.parse(files.value(0), files.value(1), params, stopAfter); 0073 0074 return app.exec(); 0075 }