1616#include < csignal>
1717
1818#include " hotspot-config.h"
19-
20- QString sshOutput (const QString& hostname, const QStringList& command)
21- {
22- QProcess ssh;
23- ssh.setProgram (QStandardPaths::findExecutable (QLatin1String (" ssh" )));
24- const auto arguments = QStringList ({hostname}) + command;
25- ssh.setArguments (arguments);
26- ssh.start ();
27- ssh.waitForFinished ();
28- return QString::fromUtf8 (ssh.readAll ());
29- }
30-
31- int sshExitCode (const QString& hostname, const QStringList& command)
32- {
33- QProcess ssh;
34- ssh.setProgram (QStandardPaths::findExecutable (QLatin1String (" ssh" )));
35- const auto arguments = QStringList ({hostname}) + command;
36- ssh.setArguments (arguments);
37- ssh.start ();
38- ssh.waitForFinished ();
39- return ssh.exitCode ();
40- }
19+ #include " ssh.h"
4120
4221PerfRecordSSH::PerfRecordSSH (QObject* parent)
4322 : PerfRecord(parent)
4423{
45- m_hostname = QStringLiteral (" user@localhost" );
4624}
4725
4826PerfRecordSSH::~PerfRecordSSH () = default ;
@@ -102,7 +80,7 @@ QString PerfRecordSSH::currentUsername()
10280
10381bool PerfRecordSSH::canTrace (const QString& path)
10482{
105- if (m_hostname .isEmpty ())
83+ if (m_deviceName .isEmpty ())
10684 return false ;
10785
10886 // assume best case
@@ -111,7 +89,7 @@ bool PerfRecordSSH::canTrace(const QString& path)
11189
11290bool PerfRecordSSH::canProfileOffCpu ()
11391{
114- if (m_hostname .isEmpty ())
92+ if (m_deviceName .isEmpty ())
11593 return false ;
11694 return canTrace (QStringLiteral (" events/sched/sched_switch" ));
11795}
@@ -142,16 +120,16 @@ QString perfBuildOptions(const QString& hostname)
142120
143121bool PerfRecordSSH::canSampleCpu ()
144122{
145- if (m_hostname .isEmpty ())
123+ if (m_deviceName .isEmpty ())
146124 return false ;
147- return perfRecordHelp (m_hostname ).contains (QLatin1String (" --sample-cpu" ));
125+ return perfRecordHelp (m_deviceName ).contains (QLatin1String (" --sample-cpu" ));
148126}
149127
150128bool PerfRecordSSH::canSwitchEvents ()
151129{
152- if (m_hostname .isEmpty ())
130+ if (m_deviceName .isEmpty ())
153131 return false ;
154- return perfRecordHelp (m_hostname ).contains (QLatin1String (" --switch-events" ));
132+ return perfRecordHelp (m_deviceName ).contains (QLatin1String (" --switch-events" ));
155133}
156134
157135bool PerfRecordSSH::canUseAio ()
@@ -162,16 +140,16 @@ bool PerfRecordSSH::canUseAio()
162140
163141bool PerfRecordSSH::canCompress ()
164142{
165- if (m_hostname .isEmpty ())
143+ if (m_deviceName .isEmpty ())
166144 return false ;
167- return Zstd_FOUND && perfBuildOptions (m_hostname ).contains (QLatin1String (" zstd: [ on ]" ));
145+ return Zstd_FOUND && perfBuildOptions (m_deviceName ).contains (QLatin1String (" zstd: [ on ]" ));
168146}
169147
170148bool PerfRecordSSH::isPerfInstalled ()
171149{
172- if (m_hostname .isEmpty ())
150+ if (m_deviceName .isEmpty ())
173151 return false ;
174- return sshExitCode (m_hostname , {QLatin1String (" command" ), QLatin1String (" -v" ), QLatin1String (" perf" )}) != 0 ;
152+ return sshExitCode (m_deviceName , {QLatin1String (" command" ), QLatin1String (" -v" ), QLatin1String (" perf" )}) != 0 ;
175153}
176154
177155void PerfRecordSSH::startRecording (const QStringList& perfOptions, const QString& outputPath,
@@ -197,29 +175,26 @@ void PerfRecordSSH::startRecording(const QStringList& perfOptions, const QString
197175 return ;
198176 }
199177
178+ qRegisterMetaType<QProcess::ExitStatus>(" QProcess::ExitStatus" );
179+
200180 QStringList perfCommand = {QStringLiteral (" record" ), QStringLiteral (" -o" ), QStringLiteral (" -" )};
201181 perfCommand += perfOptions;
202182 perfCommand += recordOptions;
203-
204183 m_outputFile = new QFile (outputPath);
205184 m_outputFile->open (QIODevice::WriteOnly);
206185
207- m_recordProcess = new QProcess (this );
208- m_recordProcess->setProgram (QStandardPaths::findExecutable (QLatin1String (" ssh" )));
209- m_recordProcess->setArguments ({m_hostname, QLatin1String (" perf " ) + perfCommand.join (QLatin1Char (' ' ))});
210- m_recordProcess->start ();
211- m_recordProcess->waitForStarted ();
186+ m_recordProcess = createSshProcess (m_deviceName, perfCommand);
212187
213188 emit recordingStarted (QLatin1String (" perf" ), perfCommand);
214189
215- connect (m_recordProcess, &QProcess::readyReadStandardOutput, this ,
190+ connect (m_recordProcess. get () , &QProcess::readyReadStandardOutput, this ,
216191 [this ] { m_outputFile->write (m_recordProcess->readAllStandardOutput ()); });
217192
218- connect (m_recordProcess, &QProcess::readyReadStandardError, this ,
193+ connect (m_recordProcess. get () , &QProcess::readyReadStandardError, this ,
219194 [this ] { emit recordingOutput (QString::fromUtf8 (m_recordProcess->readAllStandardError ())); });
220195
221- connect (m_recordProcess, static_cast <void (QProcess::*)(int , QProcess::ExitStatus)>(&QProcess::finished), this ,
222- [this ](int exitCode, QProcess::ExitStatus exitStatus) {
196+ connect (m_recordProcess. get () , static_cast <void (QProcess::*)(int , QProcess::ExitStatus)>(&QProcess::finished),
197+ this , [this ](int exitCode, QProcess::ExitStatus exitStatus) {
223198 Q_UNUSED (exitStatus)
224199
225200 m_outputFile->close ();
0 commit comments