diff --git a/chatterino.pro b/chatterino.pro index 1665eef0a..62a5b2c2d 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -178,7 +178,9 @@ SOURCES += \ src/providers/irc/ircchannel2.cpp \ src/util/streamlink.cpp \ src/providers/twitch/twitchhelpers.cpp \ - src/widgets/helper/signallabel.cpp + src/widgets/helper/signallabel.cpp \ + src/widgets/helper/debugpopup.cpp \ + src/util/debugcount.cpp HEADERS += \ src/precompiled_header.hpp \ @@ -292,7 +294,9 @@ HEADERS += \ src/providers/irc/ircserver.hpp \ src/providers/irc/ircchannel2.hpp \ src/util/streamlink.hpp \ - src/providers/twitch/twitchhelpers.hpp + src/providers/twitch/twitchhelpers.hpp \ + src/util/debugcount.hpp \ + src/widgets/helper/debugpopup.hpp RESOURCES += \ resources/resources.qrc diff --git a/lib/settings b/lib/settings index ad31b3886..2fa3adf42 160000 --- a/lib/settings +++ b/lib/settings @@ -1 +1 @@ -Subproject commit ad31b38866d80a17ced902476ed06da69edce3a0 +Subproject commit 2fa3adf42da988dc2a34b9b625654aa08e906d4f diff --git a/src/messages/image.cpp b/src/messages/image.cpp index 0792d8c35..57c09062a 100644 --- a/src/messages/image.cpp +++ b/src/messages/image.cpp @@ -30,6 +30,7 @@ Image::Image(const QString &url, qreal scale, const QString &name, const QString , scale(scale) , isLoading(false) { + util::DebugCount::increase("images"); } Image::Image(QPixmap *image, qreal scale, const QString &name, const QString &tooltip, @@ -43,6 +44,20 @@ Image::Image(QPixmap *image, qreal scale, const QString &name, const QString &to , isLoading(true) , isLoaded(true) { + util::DebugCount::increase("images"); +} + +Image::~Image() +{ + util::DebugCount::decrease("images"); + + if (this->isAnimated()) { + util::DebugCount::decrease("animated images"); + } + + if (this->isLoaded) { + util::DebugCount::decrease("loaded images"); + } } void Image::loadImage() @@ -79,11 +94,14 @@ void Image::loadImage() if (lli->allFrames.size() > 1) { lli->animated = true; + + util::DebugCount::increase("animated images"); } lli->currentPixmap = lli->loadedPixmap; lli->isLoaded = true; + util::DebugCount::increase("loaded images"); singletons::EmoteManager::getInstance().incGeneration(); diff --git a/src/messages/image.hpp b/src/messages/image.hpp index f107ed769..f5b340e71 100644 --- a/src/messages/image.hpp +++ b/src/messages/image.hpp @@ -12,8 +12,6 @@ namespace messages { class Image : public QObject, boost::noncopyable { public: - Image() = delete; - explicit Image(const QString &_url, qreal _scale = 1, const QString &_name = "", const QString &_tooltip = "", const QMargins &_margin = QMargins(), bool isHat = false); @@ -21,6 +19,7 @@ public: explicit Image(QPixmap *_currentPixmap, qreal _scale = 1, const QString &_name = "", const QString &_tooltip = "", const QMargins &_margin = QMargins(), bool isHat = false); + ~Image(); const QPixmap *getPixmap(); qreal getScale() const; diff --git a/src/messages/layouts/messagelayout.cpp b/src/messages/layouts/messagelayout.cpp index 7da65450a..eca39b64d 100644 --- a/src/messages/layouts/messagelayout.cpp +++ b/src/messages/layouts/messagelayout.cpp @@ -25,6 +25,12 @@ MessageLayout::MessageLayout(MessagePtr _message) if (_message->flags & Message::Collapsed) { this->flags &= MessageLayout::Collapsed; } + util::DebugCount::increase("message layout"); +} + +MessageLayout::~MessageLayout() +{ + util::DebugCount::decrease("message layout"); } Message *MessageLayout::getMessage() diff --git a/src/messages/layouts/messagelayout.hpp b/src/messages/layouts/messagelayout.hpp index 09dd2e615..82bfaea50 100644 --- a/src/messages/layouts/messagelayout.hpp +++ b/src/messages/layouts/messagelayout.hpp @@ -22,6 +22,7 @@ public: enum Flags : uint8_t { Collapsed, RequiresBufferUpdate, RequiresLayout }; MessageLayout(MessagePtr message); + ~MessageLayout(); Message *getMessage(); diff --git a/src/messages/layouts/messagelayoutelement.cpp b/src/messages/layouts/messagelayoutelement.cpp index cf43237c3..0d4d6b1aa 100644 --- a/src/messages/layouts/messagelayoutelement.cpp +++ b/src/messages/layouts/messagelayoutelement.cpp @@ -1,5 +1,6 @@ #include "messages/layouts/messagelayoutelement.hpp" #include "messages/messageelement.hpp" +#include "util/debugcount.hpp" #include #include @@ -17,6 +18,12 @@ MessageLayoutElement::MessageLayoutElement(MessageElement &_creator, const QSize : creator(_creator) { this->rect.setSize(size); + util::DebugCount::increase("message layout elements"); +} + +MessageLayoutElement::~MessageLayoutElement() +{ + util::DebugCount::decrease("message layout elements"); } MessageElement &MessageLayoutElement::getCreator() const diff --git a/src/messages/layouts/messagelayoutelement.hpp b/src/messages/layouts/messagelayoutelement.hpp index 646c44c7f..1f98b6cd1 100644 --- a/src/messages/layouts/messagelayoutelement.hpp +++ b/src/messages/layouts/messagelayoutelement.hpp @@ -24,7 +24,7 @@ class MessageLayoutElement : boost::noncopyable { public: MessageLayoutElement(MessageElement &creator, const QSize &size); - virtual ~MessageLayoutElement() = default; + virtual ~MessageLayoutElement(); const QRect &getRect() const; MessageElement &getCreator() const; diff --git a/src/messages/message.hpp b/src/messages/message.hpp index 56afc2b52..2d3ee6970 100644 --- a/src/messages/message.hpp +++ b/src/messages/message.hpp @@ -10,10 +10,22 @@ #include #include +#include "util/debugcount.hpp" + namespace chatterino { namespace messages { struct Message { + Message() + { + util::DebugCount::increase("messages"); + } + + ~Message() + { + util::DebugCount::decrease("messages"); + } + enum MessageFlags : uint16_t { None = 0, System = (1 << 0), diff --git a/src/messages/messageelement.cpp b/src/messages/messageelement.cpp index 85b0e4e96..faf3c00bf 100644 --- a/src/messages/messageelement.cpp +++ b/src/messages/messageelement.cpp @@ -11,6 +11,12 @@ namespace messages { MessageElement::MessageElement(Flags _flags) : flags(_flags) { + util::DebugCount::increase("message elements"); +} + +MessageElement::~MessageElement() +{ + util::DebugCount::decrease("message elements"); } MessageElement *MessageElement::setLink(const Link &_link) diff --git a/src/messages/messageelement.hpp b/src/messages/messageelement.hpp index e943b0e77..2f281c121 100644 --- a/src/messages/messageelement.hpp +++ b/src/messages/messageelement.hpp @@ -110,7 +110,7 @@ public: Update_All = Update_Text | Update_Emotes | Update_Images }; - virtual ~MessageElement() = default; + virtual ~MessageElement(); MessageElement *setLink(const Link &link); MessageElement *setTooltip(const QString &tooltip); diff --git a/src/util/debugcount.cpp b/src/util/debugcount.cpp new file mode 100644 index 000000000..a8a454352 --- /dev/null +++ b/src/util/debugcount.cpp @@ -0,0 +1,10 @@ +#include "debugcount.hpp" + +namespace chatterino { +namespace util { + +QMap DebugCount::counts; +std::mutex DebugCount::mut; + +} // namespace util +} // namespace chatterino diff --git a/src/util/debugcount.hpp b/src/util/debugcount.hpp new file mode 100644 index 000000000..7aae6ebc1 --- /dev/null +++ b/src/util/debugcount.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +#include +#include + +namespace chatterino { +namespace util { + +class DebugCount +{ + static QMap counts; + static std::mutex mut; + +public: + static void increase(const QString &name) + { + std::lock_guard lock(mut); + + auto it = counts.find(name); + if (it == counts.end()) { + counts.insert(name, 1); + } else { + reinterpret_cast(it.value())++; + } + } + + static void decrease(const QString &name) + { + std::lock_guard lock(mut); + + auto it = counts.find(name); + if (it == counts.end()) { + counts.insert(name, -1); + } else { + reinterpret_cast(it.value())--; + } + } + + static QString getDebugText() + { + std::lock_guard lock(mut); + + QString text; + for (auto it = counts.begin(); it != counts.end(); it++) { + text += it.key() + ": " + QString::number(it.value()) + "\n"; + } + return text; + } + + QString toString() + { + } +}; + +} // namespace util +} // namespace chatterino diff --git a/src/widgets/helper/channelview.cpp b/src/widgets/helper/channelview.cpp index 2d12bf4d4..a732bc1fd 100644 --- a/src/widgets/helper/channelview.cpp +++ b/src/widgets/helper/channelview.cpp @@ -95,9 +95,11 @@ ChannelView::ChannelView(BaseWidget *parent) this->pauseTimeout.setSingleShot(true); - auto e = new QResizeEvent(this->size(), this->size()); - this->resizeEvent(e); - delete e; + // auto e = new QResizeEvent(this->size(), this->size()); + // this->resizeEvent(e); + // delete e; + + this->scrollBar.resize(this->scrollBar.width(), height()); singletons::SettingManager::getInstance().showLastMessageIndicator.connect( [this](auto, auto) { this->update(); }, this->managedConnections); diff --git a/src/widgets/helper/debugpopup.cpp b/src/widgets/helper/debugpopup.cpp new file mode 100644 index 000000000..d4ecc346a --- /dev/null +++ b/src/widgets/helper/debugpopup.cpp @@ -0,0 +1,30 @@ +#include "debugpopup.hpp" + +#include "util/debugcount.hpp" + +#include +#include +#include +#include + +namespace chatterino { +namespace widgets { + +DebugPopup::DebugPopup() +{ + auto *layout = new QHBoxLayout(this); + auto *text = new QLabel(this); + auto *timer = new QTimer(this); + + timer->setInterval(1000); + QObject::connect(timer, &QTimer::timeout, + [text] { text->setText(util::DebugCount::getDebugText()); }); + timer->start(); + + text->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); + + layout->addWidget(text); +} + +} // namespace widgets +} // namespace chatterino diff --git a/src/widgets/helper/debugpopup.hpp b/src/widgets/helper/debugpopup.hpp new file mode 100644 index 000000000..c9a4c7431 --- /dev/null +++ b/src/widgets/helper/debugpopup.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace chatterino { +namespace widgets { + +class DebugPopup : public QWidget +{ +public: + DebugPopup(); +}; + +} // namespace widgets +} // namespace chatterino diff --git a/src/widgets/split.cpp b/src/widgets/split.cpp index 7d6692005..7cfad2b66 100644 --- a/src/widgets/split.cpp +++ b/src/widgets/split.cpp @@ -9,6 +9,7 @@ #include "singletons/windowmanager.hpp" #include "util/streamlink.hpp" #include "util/urlfetch.hpp" +#include "widgets/helper/debugpopup.hpp" #include "widgets/helper/searchpopup.hpp" #include "widgets/helper/shortcut.hpp" #include "widgets/qualitypopup.hpp" @@ -72,6 +73,13 @@ Split::Split(SplitContainer *parent, const std::string &_uuid) // CTRL+F: Search CreateShortcut(this, "CTRL+F", &Split::doSearch); + // F12 + CreateShortcut(this, "F10", [] { + auto *popup = new DebugPopup; + popup->setAttribute(Qt::WA_DeleteOnClose); + popup->show(); + }); + // xd // CreateShortcut(this, "ALT+SHIFT+RIGHT", &Split::doIncFlexX); // CreateShortcut(this, "ALT+SHIFT+LEFT", &Split::doDecFlexX); diff --git a/src/widgets/split.hpp b/src/widgets/split.hpp index 054513b2d..38e2168bd 100644 --- a/src/widgets/split.hpp +++ b/src/widgets/split.hpp @@ -22,6 +22,10 @@ namespace widgets { class SplitContainer; +class xD +{ +}; + // Each ChatWidget consists of three sub-elements that handle their own part of the chat widget: // ChatWidgetHeader // - Responsible for rendering which channel the ChatWidget is in, and the menu in the top-left of diff --git a/src/widgets/splitcontainer.cpp b/src/widgets/splitcontainer.cpp index 7689a3d77..b736397aa 100644 --- a/src/widgets/splitcontainer.cpp +++ b/src/widgets/splitcontainer.cpp @@ -41,7 +41,7 @@ SplitContainer::SplitContainer(Notebook *parent, NotebookTab *_tab, const std::s this->setHidden(true); this->setAcceptDrops(true); - this->ui.parentLayout.addSpacing(2); + this->ui.parentLayout.addSpacing(1); this->ui.parentLayout.addLayout(&this->ui.hbox); this->ui.parentLayout.setMargin(0);