By default the "Last session" configuration file will be saved in ${HOME}/.cache/kernelshark. If ${HOME}/.cache/kernelshark doesn't exist, it will be created automatically. The user can select another directory to be used to store the cached data. This can be done by setting the environment variable KS_USER_CACHE_DIR. In this case if the path (the value of KS_USER_CACHE_DIR) doesn't exist the user will be asked before create it. Suggested-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> Signed-off-by: Yordan Karadzhov <ykaradzhov@xxxxxxxxxx> --- kernel-shark/src/KsMainWindow.cpp | 68 +++++++++++++++++++++++++++---- kernel-shark/src/KsMainWindow.hpp | 4 ++ 2 files changed, 63 insertions(+), 9 deletions(-) diff --git a/kernel-shark/src/KsMainWindow.cpp b/kernel-shark/src/KsMainWindow.cpp index 7afb721..c839aca 100644 --- a/kernel-shark/src/KsMainWindow.cpp +++ b/kernel-shark/src/KsMainWindow.cpp @@ -133,13 +133,15 @@ KsMainWindow::KsMainWindow(QWidget *parent) KsMainWindow::~KsMainWindow() { kshark_context *kshark_ctx(nullptr); - QString file = KS_CONF_DIR; + QString file = lastSessionFile(); - file += "/lastsession.json"; + if (!file.isEmpty()) { + QByteArray fileBA = file.toLocal8Bit(); - _updateSession(); - kshark_save_config_file(file.toLocal8Bit().data(), - _session.getConfDocPtr()); + _updateSession(); + kshark_save_config_file(fileBA.data(), + _session.getConfDocPtr()); + } _data.clear(); @@ -368,12 +370,60 @@ void KsMainWindow::_open() loadDataFile(fileName); } -void KsMainWindow::_restoreSession() +QString KsMainWindow::_getCacheDir() +{ + QString dir; + + auto lamMakePath = [&] (bool ask) { + if (ask) { + QMessageBox::StandardButton reply; + QString err("KernelShark cache directory not found!\n"); + QString question = + QString("Do you want to create %1").arg(dir); + + reply = QMessageBox::question(this, "KernelShark", + err + question, + QMessageBox::Yes | + QMessageBox::No); + + if (reply == QMessageBox::No) { + dir.clear(); + return; + } + } + + QDir().mkpath(dir); + }; + + dir = getenv("KS_USER_CACHE_DIR"); + if (!dir.isEmpty()) { + if (!QDir(dir).exists()) + lamMakePath(true); + } else { + dir = QString(QDir::homePath()) + + "/.cache/kernelshark"; + if (!QDir(dir).exists()) + lamMakePath(false); + } + + return dir; +} + +/** Get the description file of the last session. */ +QString KsMainWindow::lastSessionFile() { - QString file = KS_CONF_DIR; - file += "/lastsession.json"; + QString file; - loadSession(file); + file = _getCacheDir(); + if (!file.isEmpty()) + file += "/lastsession.json"; + + return file; +} + +void KsMainWindow::_restoreSession() +{ + loadSession(lastSessionFile()); _graph.updateGeom(); } diff --git a/kernel-shark/src/KsMainWindow.hpp b/kernel-shark/src/KsMainWindow.hpp index 78cd442..ec6506e 100644 --- a/kernel-shark/src/KsMainWindow.hpp +++ b/kernel-shark/src/KsMainWindow.hpp @@ -37,6 +37,8 @@ public: void loadSession(const QString &fileName); + QString lastSessionFile(); + /** * @brief * @@ -230,6 +232,8 @@ private: void _filterSyncCBoxUpdate(kshark_context *kshark_ctx); + QString _getCacheDir(); + private slots: void _captureFinished(int, QProcess::ExitStatus); }; -- 2.20.1
![]() |