Slightly improves performance when diffing.
add_library(sharedprint STATIC accumulatedtracedata.cpp)
target_link_libraries(sharedprint LINK_PUBLIC ${Boost_LIBRARIES} ${ZLIB_LIBRARIES})
add_executable(heaptrack_print heaptrack_print.cpp)
-target_link_libraries(heaptrack_print LINK_PRIVATE sharedprint)
+target_link_libraries(heaptrack_print LINK_PRIVATE sharedprint ${CMAKE_THREAD_LIBS_INIT})
set(BIN_INSTALL_DIR "bin")
set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
KF5::I18n
KF5::KIOWidgets
KChart
- sharedprint)
+ sharedprint
+ ${CMAKE_THREAD_LIBS_INIT})
install(TARGETS heaptrack_gui ${INSTALL_TARGETS_DEFAULT_ARGS})
#include <vector>
#include <tuple>
+#include <future>
using namespace std;
const auto stdPath = path.toStdString();
auto data = make_shared<ParserData>();
emit progressMessageAvailable(i18n("parsing data..."));
- if (!data->read(stdPath)) {
- emit failedToOpen(path);
- return;
- }
if (!diffBase.isEmpty()) {
ParserData diffData;
- if (!diffData.read(diffBase.toStdString())) {
+ auto readBase = async(launch::async, [&diffData, diffBase] () {
+ return diffData.read(diffBase.toStdString());
+ });
+ if (!data->read(stdPath)) {
+ emit failedToOpen(path);
+ return;
+ }
+ if (!readBase.get()) {
emit failedToOpen(diffBase);
return;
}
data->diff(diffData);
data->stringCache.diffMode = true;
+ } else if (!data->read(stdPath)) {
+ emit failedToOpen(path);
+ return;
}
+
+
data->updateStringCache();
emit summaryAvailable({
#include <iostream>
#include <iomanip>
+#include <future>
#include "config.h"
const bool printTemporary = vm["print-temporary"].as<bool>();
cout << "reading file \"" << inputFile << "\" - please wait, this might take some time..." << endl;
- if (!data.read(inputFile)) {
- return 1;
- }
if (!diffFile.empty()) {
cout << "reading diff file \"" << diffFile << "\" - please wait, this might take some time..." << endl;
Printer diffData;
- if (!diffData.read(diffFile)) {
+ auto diffRead = async(launch::async, [&diffData, diffFile] () {
+ return diffData.read(diffFile);
+ });
+
+ if (!data.read(inputFile) || !diffRead.get()) {
return 1;
}
+
data.diff(diffData);
+ } else if (!data.read(inputFile)) {
+ return 1;
}
data.finalize();