diff options
Diffstat (limited to 'src/core/browser_main_parts_qt.cpp')
-rw-r--r-- | src/core/browser_main_parts_qt.cpp | 48 |
1 files changed, 11 insertions, 37 deletions
diff --git a/src/core/browser_main_parts_qt.cpp b/src/core/browser_main_parts_qt.cpp index e6c76fb4f..4dbff086b 100644 --- a/src/core/browser_main_parts_qt.cpp +++ b/src/core/browser_main_parts_qt.cpp @@ -39,6 +39,8 @@ #include "browser_main_parts_qt.h" +#include "api/qwebenginemessagepumpscheduler_p.h" + #include "base/message_loop/message_loop.h" #include "base/process/process.h" #include "base/threading/thread_restrictions.h" @@ -63,11 +65,7 @@ #include "service/service_qt.h" #include "web_engine_context.h" -#include <QCoreApplication> -#include <QEvent> #include <QEventLoop> -#include <QObject> -#include <QTimerEvent> #include <QtGui/qtgui-config.h> #if QT_CONFIG(opengl) @@ -106,16 +104,12 @@ int GetTimeIntervalMilliseconds(const base::TimeTicks &from) return delay < 0 ? 0 : delay; } -class MessagePumpForUIQt : public QObject, - public base::MessagePump +class MessagePumpForUIQt : public base::MessagePump { public: MessagePumpForUIQt() - : m_delegate(nullptr) - , m_explicitLoop(nullptr) - , m_timerId(0) - { - } + : m_scheduler([this]() { handleScheduledWork(); }) + {} void Run(Delegate *delegate) override { @@ -138,36 +132,17 @@ public: void ScheduleWork() override { + // NOTE: This method may called from any thread at any time. if (!m_delegate) m_delegate = base::MessageLoopForUI::current(); - QCoreApplication::postEvent(this, new QTimerEvent(0)); - m_timerScheduledTime = base::TimeTicks::Now(); + m_scheduler.scheduleWork(); } void ScheduleDelayedWork(const base::TimeTicks &delayed_work_time) override { if (!m_delegate) m_delegate = base::MessageLoopForUI::current(); - if (delayed_work_time.is_null()) { - killTimer(m_timerId); - m_timerId = 0; - m_timerScheduledTime = base::TimeTicks(); - } else if (!m_timerId || delayed_work_time < m_timerScheduledTime) { - killTimer(m_timerId); - m_timerId = startTimer(GetTimeIntervalMilliseconds(delayed_work_time)); - m_timerScheduledTime = delayed_work_time; - } - } - -protected: - void timerEvent(QTimerEvent *ev) override - { - Q_ASSERT(!ev->timerId() || m_timerId == ev->timerId()); - killTimer(m_timerId); - m_timerId = 0; - m_timerScheduledTime = base::TimeTicks(); - - handleScheduledWork(); + m_scheduler.scheduleDelayedWork(GetTimeIntervalMilliseconds(delayed_work_time)); } private: @@ -235,10 +210,9 @@ private: ScheduleDelayedWork(delayed_work_time); } - Delegate *m_delegate; - QEventLoop *m_explicitLoop; - int m_timerId; - base::TimeTicks m_timerScheduledTime; + Delegate *m_delegate = nullptr; + QEventLoop *m_explicitLoop = nullptr; + QWebEngineMessagePumpScheduler m_scheduler; }; } // anonymous namespace |