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
This commit is contained in:
Ivan Sorokin 2014-10-18 03:42:36 +04:00
parent f6732e87f2
commit de5f38a160
11 changed files with 105 additions and 59 deletions

View file

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

View file

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

View file

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

View file

@ -70,6 +70,9 @@
#include <libtorrent/alert_types.hpp>
#include <libtorrent/torrent_info.hpp>
#include <libtorrent/error_code.hpp>
#include <libtorrent/alert_types.hpp>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
#include <queue>
#include <string.h>
#include "dnsupdater.h"
@ -2056,48 +2059,6 @@ void QBtSession::disableIPFilter() {
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) {
try {
for (int i=0; i<h.num_files(); ++i) {
@ -2794,6 +2755,53 @@ session_status QBtSession::getSessionStatus() const {
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 savePath;
if (TorrentTempData::hasTempData(hash)) {
@ -2923,11 +2931,6 @@ qreal QBtSession::getPayloadUploadRate() const {
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
// backup directory
void QBtSession::startUpTorrents() {

View file

@ -45,15 +45,50 @@
#include <QNetworkCookie>
#include <libtorrent/version.hpp>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
#include <libtorrent/alert_types.hpp>
#include "qtorrenthandle.h"
#include "trackerinfos.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 FilterParserThread;
@ -152,8 +187,6 @@ public slots:
void setMaxRatioPerTorrent(const QString &hash, qreal ratio);
qreal getMaxRatioPerTorrent(const QString &hash, bool *usesGlobalRatio) const;
void removeRatioPerTorrent(const QString &hash);
void setProxySettings(libtorrent::proxy_settings proxySettings);
void setSessionSettings(const libtorrent::session_settings &sessionSettings);
void setDefaultSavePath(const QString &savepath);
void setDefaultTempPath(const QString &temppath);
void setAppendLabelToSavePath(bool append);
@ -161,7 +194,6 @@ public slots:
void changeLabelInTorrentSavePath(const QTorrentHandle &h, QString old_label, QString new_label);
void appendqBextensionToTorrent(const QTorrentHandle &h, bool append);
void setAppendqBExtension(bool append);
void applyEncryptionSettings(libtorrent::pe_settings se);
void setDownloadLimit(QString hash, long val);
void setUploadLimit(QString hash, long val);
void enableUPnP(bool b);
@ -185,6 +217,9 @@ public slots:
void unhideMagnet(const QString &hash);
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);
bool loadFastResumeData(const QString &hash, std::vector<char> &buf);
void loadTorrentSettings(QTorrentHandle &h);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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