]> git.cworth.org Git - apitrace/commitdiff
Trace via "apitrace trace" command.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 25 Nov 2011 13:16:35 +0000 (13:16 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 25 Nov 2011 13:37:59 +0000 (13:37 +0000)
It could be done via the library directly, but this allows to use
QProcess as before, and therefore run asynchronously without extra effort.

gui/traceprocess.cpp

index ae27e81c0cd3245cfa9cb3cf2b94bc363555f7ee..67cc64a252807145bee3be82ed3ef610afaae4c2 100644 (file)
@@ -5,29 +5,6 @@
 #include <QFile>
 #include <QFileInfo>
 
-static QString
-findPreloader()
-{
-    QString libPath;
-    QFileInfo fi;
-
-#ifdef APITRACE_BINARY_DIR
-    libPath = QString::fromLatin1(APITRACE_BINARY_DIR "/wrappers/glxtrace.so");
-    fi = QFileInfo(libPath);
-    if (fi.exists())
-        return libPath;
-#endif
-
-#ifdef APITRACE_WRAPPER_INSTALL_DIR
-    libPath = QString::fromLatin1(APITRACE_WRAPPER_INSTALL_DIR "/glxtrace.so");
-    fi = QFileInfo(libPath);
-    if (fi.exists())
-        return libPath;
-#endif
-
-    return QString();
-}
-
 TraceProcess::TraceProcess(QObject *parent)
     : QObject(parent),
       m_canTrace(true)
@@ -43,18 +20,15 @@ TraceProcess::TraceProcess(QObject *parent)
     qWarning()<<"Windows tracing isn't supported right now!";
     m_canTrace = false;
 #else
-    QString var = QLatin1String("LD_PRELOAD");
-    QString libPath = findPreloader();
+#ifdef Q_OS_WIN
+    QString format = QLatin1String("%1;");
+#else
+    QString format = QLatin1String("%1:");
+#endif
+    QString buildPath = format.arg(APITRACE_BINARY_DIR);
     QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
-
-    if (libPath.isEmpty()) {
-        m_canTrace = false;
-    }
-
-    env.insert("LD_PRELOAD", libPath);
-    qputenv("LD_PRELOAD", env.value("LD_PRELOAD").toLatin1());
-
-    m_process->setProcessEnvironment(env);
+    env.insert("PATH", buildPath + env.value("PATH"));
+    qputenv("PATH", env.value("PATH").toLatin1());
 #endif
 }
 
@@ -67,23 +41,18 @@ void TraceProcess::setExecutablePath(const QString &str)
     m_execPath = str;
 
     QFileInfo fi(m_execPath);
+    QString baseName = fi.baseName();
 
-    m_process->setWorkingDirectory(fi.absolutePath());
-
-    QString format = QString::fromLatin1("%1%2%3.trace");
+    QString format = QString::fromLatin1("%1.trace");
 
     m_tracePath = format
-                  .arg(fi.absolutePath())
-                  .arg(QDir::separator())
-                  .arg(fi.baseName());
+                  .arg(baseName);
 
     int i = 1;
     while (QFile::exists(m_tracePath)) {
-        QString format = QString::fromLatin1("%1%2%3.%4.trace");
+        format = QString::fromLatin1("%1.%2.trace");
         m_tracePath = format
-                      .arg(fi.absolutePath())
-                      .arg(QDir::separator())
-                      .arg(fi.baseName())
+                      .arg(baseName)
                       .arg(i++);
     }
 }
@@ -126,7 +95,16 @@ void TraceProcess::traceError(QProcess::ProcessError err)
 
 void TraceProcess::start()
 {
-    m_process->start(m_execPath, m_args);
+    QStringList arguments;
+
+    arguments << QLatin1String("trace");
+    arguments << QLatin1String("--output");
+    arguments << m_tracePath;
+    arguments << QLatin1String("--");
+    arguments << m_execPath;
+    arguments << m_args;
+
+    m_process->start(QLatin1String("apitrace"), arguments);
 }
 
 bool TraceProcess::canTrace() const