Browse Source

Speedup compilation speed

libtorrent has a relatively heavy headers, that take lots of time to
process. This commit removes unnecessary includes of libtorrent headers
and replaces them with forward declarations.

I had to move some functions in QBtSession from slots to regular
functions because moc'ed file want to see complete types of all
parameters of slots.

"time make" of full rebuild before this series of commits:

real    13m35.937s
user    12m1.295s
sys     1m25.908s

after:

real    10m54.390s
user    9m31.167s
sys     1m12.580s
adaptive-webui-19844
Ivan Sorokin 10 years ago
parent
commit
de5f38a160
  1. 1
      src/fs_utils.h
  2. 1
      src/preferences/options_imp.h
  3. 3
      src/properties/peeraddition.h
  4. 97
      src/qtlibtorrent/qbtsession.cpp
  5. 49
      src/qtlibtorrent/qbtsession.h
  6. 2
      src/qtlibtorrent/qtorrenthandle.h
  7. 2
      src/qtlibtorrent/torrentmodel.cpp
  8. 2
      src/statsdialog.cpp
  9. 3
      src/statusbar.h
  10. 2
      src/webui/btjson.cpp
  11. 2
      src/webui/httpconnection.cpp

1
src/fs_utils.h

@ -32,7 +32,6 @@
#define FS_UTILS_H #define FS_UTILS_H
#include <QString> #include <QString>
#include <QCoreApplication>
/** /**
* Utility functions related to file system. * Utility functions related to file system.

1
src/preferences/options_imp.h

@ -32,7 +32,6 @@
#define OPTIONS_IMP_H #define OPTIONS_IMP_H
#include "ui_options.h" #include "ui_options.h"
#include <libtorrent/ip_filter.hpp>
// actions on double-click on torrents // actions on double-click on torrents
enum DoubleClickAction {TOGGLE_PAUSE, OPEN_DEST, NO_ACTION}; enum DoubleClickAction {TOGGLE_PAUSE, OPEN_DEST, NO_ACTION};

3
src/properties/peeraddition.h

@ -37,7 +37,8 @@
#include <QHostAddress> #include <QHostAddress>
#include "ui_peer.h" #include "ui_peer.h"
#include <libtorrent/session.hpp> #include <libtorrent/socket.hpp>
#include <libtorrent/address.hpp>
#include <boost/version.hpp> #include <boost/version.hpp>
#if BOOST_VERSION < 103500 #if BOOST_VERSION < 103500

97
src/qtlibtorrent/qbtsession.cpp

@ -70,6 +70,9 @@
#include <libtorrent/alert_types.hpp> #include <libtorrent/alert_types.hpp>
#include <libtorrent/torrent_info.hpp> #include <libtorrent/torrent_info.hpp>
#include <libtorrent/error_code.hpp> #include <libtorrent/error_code.hpp>
#include <libtorrent/alert_types.hpp>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
#include <queue> #include <queue>
#include <string.h> #include <string.h>
#include "dnsupdater.h" #include "dnsupdater.h"
@ -2056,48 +2059,6 @@ void QBtSession::disableIPFilter() {
filterPath = ""; filterPath = "";
} }
// Set BT session settings (user_agent)
void QBtSession::setSessionSettings(const session_settings &sessionSettings) {
qDebug("Set session settings");
s->set_settings(sessionSettings);
}
// Set Proxy
void QBtSession::setProxySettings(proxy_settings proxySettings) {
qDebug() << Q_FUNC_INFO;
proxySettings.proxy_peer_connections = Preferences::instance()->proxyPeerConnections();
s->set_proxy(proxySettings);
// Define environment variable
QString proxy_str;
switch(proxySettings.type) {
case proxy_settings::http_pw:
proxy_str = "http://"+misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
case proxy_settings::http:
proxy_str = "http://"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
case proxy_settings::socks5:
proxy_str = misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
case proxy_settings::socks5_pw:
proxy_str = misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
default:
qDebug("Disabling HTTP communications proxy");
qputenv("http_proxy", QByteArray());
qputenv("sock_proxy", QByteArray());
return;
}
// We need this for urllib in search engine plugins
qDebug("HTTP communications proxy string: %s", qPrintable(proxy_str));
if (proxySettings.type == proxy_settings::socks5 || proxySettings.type == proxy_settings::socks5_pw)
qputenv("sock_proxy", proxy_str.toLocal8Bit());
else
qputenv("http_proxy", proxy_str.toLocal8Bit());
}
void QBtSession::recursiveTorrentDownload(const QTorrentHandle &h) { void QBtSession::recursiveTorrentDownload(const QTorrentHandle &h) {
try { try {
for (int i=0; i<h.num_files(); ++i) { for (int i=0; i<h.num_files(); ++i) {
@ -2794,6 +2755,53 @@ session_status QBtSession::getSessionStatus() const {
return s->status(); return s->status();
} }
void QBtSession::applyEncryptionSettings(pe_settings se) {
qDebug("Applying encryption settings");
s->set_pe_settings(se);
}
// Set Proxy
void QBtSession::setProxySettings(proxy_settings proxySettings) {
qDebug() << Q_FUNC_INFO;
proxySettings.proxy_peer_connections = Preferences::instance()->proxyPeerConnections();
s->set_proxy(proxySettings);
// Define environment variable
QString proxy_str;
switch(proxySettings.type) {
case proxy_settings::http_pw:
proxy_str = "http://"+misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
case proxy_settings::http:
proxy_str = "http://"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
case proxy_settings::socks5:
proxy_str = misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
case proxy_settings::socks5_pw:
proxy_str = misc::toQString(proxySettings.username)+":"+misc::toQString(proxySettings.password)+"@"+misc::toQString(proxySettings.hostname)+":"+QString::number(proxySettings.port);
break;
default:
qDebug("Disabling HTTP communications proxy");
qputenv("http_proxy", QByteArray());
qputenv("sock_proxy", QByteArray());
return;
}
// We need this for urllib in search engine plugins
qDebug("HTTP communications proxy string: %s", qPrintable(proxy_str));
if (proxySettings.type == proxy_settings::socks5 || proxySettings.type == proxy_settings::socks5_pw)
qputenv("sock_proxy", proxy_str.toLocal8Bit());
else
qputenv("http_proxy", proxy_str.toLocal8Bit());
}
// Set BT session settings (user_agent)
void QBtSession::setSessionSettings(const session_settings &sessionSettings) {
qDebug("Set session settings");
s->set_settings(sessionSettings);
}
QString QBtSession::getSavePath(const QString &hash, bool fromScanDir, QString filePath, bool imported) { QString QBtSession::getSavePath(const QString &hash, bool fromScanDir, QString filePath, bool imported) {
QString savePath; QString savePath;
if (TorrentTempData::hasTempData(hash)) { if (TorrentTempData::hasTempData(hash)) {
@ -2923,11 +2931,6 @@ qreal QBtSession::getPayloadUploadRate() const {
return s->status().payload_upload_rate; return s->status().payload_upload_rate;
} }
void QBtSession::applyEncryptionSettings(pe_settings se) {
qDebug("Applying encryption settings");
s->set_pe_settings(se);
}
// Will fast resume torrents in // Will fast resume torrents in
// backup directory // backup directory
void QBtSession::startUpTorrents() { void QBtSession::startUpTorrents() {

49
src/qtlibtorrent/qbtsession.h

@ -45,15 +45,50 @@
#include <QNetworkCookie> #include <QNetworkCookie>
#include <libtorrent/version.hpp> #include <libtorrent/version.hpp>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
#include <libtorrent/alert_types.hpp>
#include "qtorrenthandle.h" #include "qtorrenthandle.h"
#include "trackerinfos.h" #include "trackerinfos.h"
#include "misc.h" #include "misc.h"
#define MAX_SAMPLES 20 namespace libtorrent {
class add_torrent_params;
class pe_settings;
class proxy_settings;
class session;
class session_status;
class alert;
class torrent_finished_alert;
class save_resume_data_alert;
class file_renamed_alert;
class torrent_deleted_alert;
class storage_moved_alert;
class storage_moved_failed_alert;
class metadata_received_alert;
class file_error_alert;
class file_completed_alert;
class torrent_paused_alert;
class tracker_error_alert;
class tracker_reply_alert;
class tracker_warning_alert;
class portmap_error_alert;
class portmap_alert;
class peer_blocked_alert;
class peer_ban_alert;
class fastresume_rejected_alert;
class url_seed_alert;
class listen_succeeded_alert;
class listen_failed_alert;
class torrent_checked_alert;
class external_ip_alert;
class state_update_alert;
class stats_alert;
#if LIBTORRENT_VERSION_NUM < 10000
class upnp;
class natpmp;
#endif
}
class DownloadThread; class DownloadThread;
class FilterParserThread; class FilterParserThread;
@ -152,8 +187,6 @@ public slots:
void setMaxRatioPerTorrent(const QString &hash, qreal ratio); void setMaxRatioPerTorrent(const QString &hash, qreal ratio);
qreal getMaxRatioPerTorrent(const QString &hash, bool *usesGlobalRatio) const; qreal getMaxRatioPerTorrent(const QString &hash, bool *usesGlobalRatio) const;
void removeRatioPerTorrent(const QString &hash); void removeRatioPerTorrent(const QString &hash);
void setProxySettings(libtorrent::proxy_settings proxySettings);
void setSessionSettings(const libtorrent::session_settings &sessionSettings);
void setDefaultSavePath(const QString &savepath); void setDefaultSavePath(const QString &savepath);
void setDefaultTempPath(const QString &temppath); void setDefaultTempPath(const QString &temppath);
void setAppendLabelToSavePath(bool append); void setAppendLabelToSavePath(bool append);
@ -161,7 +194,6 @@ public slots:
void changeLabelInTorrentSavePath(const QTorrentHandle &h, QString old_label, QString new_label); void changeLabelInTorrentSavePath(const QTorrentHandle &h, QString old_label, QString new_label);
void appendqBextensionToTorrent(const QTorrentHandle &h, bool append); void appendqBextensionToTorrent(const QTorrentHandle &h, bool append);
void setAppendqBExtension(bool append); void setAppendqBExtension(bool append);
void applyEncryptionSettings(libtorrent::pe_settings se);
void setDownloadLimit(QString hash, long val); void setDownloadLimit(QString hash, long val);
void setUploadLimit(QString hash, long val); void setUploadLimit(QString hash, long val);
void enableUPnP(bool b); void enableUPnP(bool b);
@ -185,6 +217,9 @@ public slots:
void unhideMagnet(const QString &hash); void unhideMagnet(const QString &hash);
private: private:
void applyEncryptionSettings(libtorrent::pe_settings se);
void setProxySettings(libtorrent::proxy_settings proxySettings);
void setSessionSettings(const libtorrent::session_settings &sessionSettings);
QString getSavePath(const QString &hash, bool fromScanDir = false, QString filePath = QString::null, bool imported = false); QString getSavePath(const QString &hash, bool fromScanDir = false, QString filePath = QString::null, bool imported = false);
bool loadFastResumeData(const QString &hash, std::vector<char> &buf); bool loadFastResumeData(const QString &hash, std::vector<char> &buf);
void loadTorrentSettings(QTorrentHandle &h); void loadTorrentSettings(QTorrentHandle &h);

2
src/qtlibtorrent/qtorrenthandle.h

@ -31,9 +31,7 @@
#ifndef QTORRENTHANDLE_H #ifndef QTORRENTHANDLE_H
#define QTORRENTHANDLE_H #define QTORRENTHANDLE_H
#include <libtorrent/version.hpp>
#include <libtorrent/torrent_handle.hpp> #include <libtorrent/torrent_handle.hpp>
#include <libtorrent/torrent_info.hpp>
#include <QString> #include <QString>

2
src/qtlibtorrent/torrentmodel.cpp

@ -35,6 +35,8 @@
#include "qbtsession.h" #include "qbtsession.h"
#include "fs_utils.h" #include "fs_utils.h"
#include <libtorrent/session.hpp>
using namespace libtorrent; using namespace libtorrent;
namespace { namespace {

2
src/statsdialog.cpp

@ -32,6 +32,8 @@
#include "ui_statsdialog.h" #include "ui_statsdialog.h"
#include "misc.h" #include "misc.h"
#include <libtorrent/session.hpp>
#include <libtorrent/disk_io_thread.hpp>
StatsDialog::StatsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::StatsDialog) { StatsDialog::StatsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::StatsDialog) {
ui->setupUi(this); ui->setupUi(this);

3
src/statusbar.h

@ -46,6 +46,9 @@
#include "preferences.h" #include "preferences.h"
#include "misc.h" #include "misc.h"
#include <libtorrent/session.hpp>
#include <libtorrent/session_status.hpp>
class StatusBar: public QObject { class StatusBar: public QObject {
Q_OBJECT Q_OBJECT

2
src/webui/btjson.cpp

@ -39,6 +39,8 @@
#include <QElapsedTimer> #include <QElapsedTimer>
#endif #endif
#include <libtorrent/session_status.hpp>
using namespace libtorrent; using namespace libtorrent;
#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)

2
src/webui/httpconnection.cpp

@ -52,6 +52,8 @@
#include <queue> #include <queue>
#include <vector> #include <vector>
#include <libtorrent/session.hpp>
using namespace libtorrent; using namespace libtorrent;
HttpConnection::HttpConnection(QTcpSocket *socket, HttpServer *parent) HttpConnection::HttpConnection(QTcpSocket *socket, HttpServer *parent)

Loading…
Cancel
Save