| Line | Source Code | Coverage |
|---|
| 1 | | - |
| 2 | | - |
| 3 | | - |
| 4 | | - |
| 5 | QEventLoop::QEventLoop(QObject *parent) | - |
| 6 | : QObject(*new QEventLoopPrivate, parent) | - |
| 7 | { | - |
| 8 | QEventLoopPrivate * const d = d_func(); | - |
| 9 | if (!QCoreApplication::instance()) { partially evaluated: !QCoreApplication::instance()| no Evaluation Count:0 | yes Evaluation Count:2677 |
| 0-2677 |
| 10 | QMessageLogger("kernel/qeventloop.cpp", 105, __PRETTY_FUNCTION__).warning("QEventLoop: Cannot be used without QApplication"); | - |
| 11 | } else if (!d->threadData->eventDispatcher) { evaluated: !d->threadData->eventDispatcher| yes Evaluation Count:2 | yes Evaluation Count:2678 |
| 0-2678 |
| 12 | QThreadPrivate::createEventDispatcher(d->threadData); | - |
| 13 | } executed: }Execution Count:2 | 2 |
| 14 | } | - |
| 15 | | - |
| 16 | | - |
| 17 | | - |
| 18 | | - |
| 19 | QEventLoop::~QEventLoop() | - |
| 20 | { } | - |
| 21 | bool QEventLoop::processEvents(ProcessEventsFlags flags) | - |
| 22 | { | - |
| 23 | QEventLoopPrivate * const d = d_func(); | - |
| 24 | if (!d->threadData->eventDispatcher) partially evaluated: !d->threadData->eventDispatcher| no Evaluation Count:0 | yes Evaluation Count:60448 |
| 0-60448 |
| 25 | return false; never executed: return false; | 0 |
| 26 | return d->threadData->eventDispatcher->processEvents(flags); executed: return d->threadData->eventDispatcher->processEvents(flags);Execution Count:60446 | 60446 |
| 27 | } | - |
| 28 | int QEventLoop::exec(ProcessEventsFlags flags) | - |
| 29 | { | - |
| 30 | QEventLoopPrivate * const d = d_func(); | - |
| 31 | | - |
| 32 | QMutexLocker locker(&static_cast<QThreadPrivate *>(QObjectPrivate::get(d->threadData->thread))->mutex); | - |
| 33 | if (d->threadData->quitNow) evaluated: d->threadData->quitNow| yes Evaluation Count:8 | yes Evaluation Count:2699 |
| 8-2699 |
| 34 | return -1; executed: return -1;Execution Count:8 | 8 |
| 35 | | - |
| 36 | if (d->inExec) { evaluated: d->inExec| yes Evaluation Count:1 | yes Evaluation Count:2698 |
| 1-2698 |
| 37 | QMessageLogger("kernel/qeventloop.cpp", 171, __PRETTY_FUNCTION__).warning("QEventLoop::exec: instance %p has already called exec()", this); | - |
| 38 | return -1; executed: return -1;Execution Count:1 | 1 |
| 39 | } | - |
| 40 | | - |
| 41 | struct LoopReference { | - |
| 42 | QEventLoopPrivate *d; | - |
| 43 | QMutexLocker &locker; | - |
| 44 | | - |
| 45 | bool exceptionCaught; | - |
| 46 | LoopReference(QEventLoopPrivate *d, QMutexLocker &locker) : d(d), locker(locker), exceptionCaught(true) | - |
| 47 | { | - |
| 48 | d->inExec = true; | - |
| 49 | d->exit = false; | - |
| 50 | ++d->threadData->loopLevel; | - |
| 51 | d->threadData->eventLoops.push(d->q_func()); | - |
| 52 | locker.unlock(); | - |
| 53 | } executed: }Execution Count:2698 | 2698 |
| 54 | | - |
| 55 | ~LoopReference() | - |
| 56 | { | - |
| 57 | if (exceptionCaught) { partially evaluated: exceptionCaught| no Evaluation Count:0 | yes Evaluation Count:2699 |
| 0-2699 |
| 58 | QMessageLogger("kernel/qeventloop.cpp", 192, __PRETTY_FUNCTION__).warning("Qt has caught an exception thrown from an event handler. Throwing\n" | - |
| 59 | "exceptions from an event handler is not supported in Qt. You must\n" | - |
| 60 | "reimplement QApplication::notify() and catch all exceptions there.\n"); | - |
| 61 | } | 0 |
| 62 | locker.relock(); | - |
| 63 | QEventLoop *eventLoop = d->threadData->eventLoops.pop(); | - |
| 64 | qt_noop(); | - |
| 65 | (void)eventLoop;; | - |
| 66 | d->inExec = false; | - |
| 67 | --d->threadData->loopLevel; | - |
| 68 | } executed: }Execution Count:2699 | 2699 |
| 69 | }; | - |
| 70 | LoopReference ref(d, locker); | - |
| 71 | | - |
| 72 | | - |
| 73 | QCoreApplication *app = QCoreApplication::instance(); | - |
| 74 | if (app && app->thread() == thread()) partially evaluated: app| yes Evaluation Count:2698 | no Evaluation Count:0 |
evaluated: app->thread() == thread()| yes Evaluation Count:1990 | yes Evaluation Count:708 |
| 0-2698 |
| 75 | QCoreApplication::removePostedEvents(app, QEvent::Quit); executed: QCoreApplication::removePostedEvents(app, QEvent::Quit);Execution Count:1990 | 1990 |
| 76 | | - |
| 77 | while (!d->exit) evaluated: !d->exit| yes Evaluation Count:60439 | yes Evaluation Count:2699 |
| 2699-60439 |
| 78 | processEvents(flags | WaitForMoreEvents | EventLoopExec); executed: processEvents(flags | WaitForMoreEvents | EventLoopExec);Execution Count:60438 | 60438 |
| 79 | | - |
| 80 | ref.exceptionCaught = false; | - |
| 81 | return d->returnCode; executed: return d->returnCode;Execution Count:2699 | 2699 |
| 82 | } | - |
| 83 | void QEventLoop::processEvents(ProcessEventsFlags flags, int maxTime) | - |
| 84 | { | - |
| 85 | QEventLoopPrivate * const d = d_func(); | - |
| 86 | if (!d->threadData->eventDispatcher) never evaluated: !d->threadData->eventDispatcher | 0 |
| 87 | return; | 0 |
| 88 | | - |
| 89 | QElapsedTimer start; | - |
| 90 | start.start(); | - |
| 91 | while (processEvents(flags & ~WaitForMoreEvents)) { never evaluated: processEvents(flags & ~WaitForMoreEvents) | 0 |
| 92 | if (start.elapsed() > maxTime) never evaluated: start.elapsed() > maxTime | 0 |
| 93 | break; | 0 |
| 94 | } | 0 |
| 95 | } | 0 |
| 96 | void QEventLoop::exit(int returnCode) | - |
| 97 | { | - |
| 98 | QEventLoopPrivate * const d = d_func(); | - |
| 99 | if (!d->threadData->eventDispatcher) partially evaluated: !d->threadData->eventDispatcher| no Evaluation Count:0 | yes Evaluation Count:2709 |
| 0-2709 |
| 100 | return; | 0 |
| 101 | | - |
| 102 | d->returnCode = returnCode; | - |
| 103 | d->exit = true; | - |
| 104 | d->threadData->eventDispatcher->interrupt(); | - |
| 105 | } executed: }Execution Count:2709 | 2709 |
| 106 | bool QEventLoop::isRunning() const | - |
| 107 | { | - |
| 108 | const QEventLoopPrivate * const d = d_func(); | - |
| 109 | return !d->exit; executed: return !d->exit;Execution Count:8 | 8 |
| 110 | } | - |
| 111 | | - |
| 112 | | - |
| 113 | | - |
| 114 | | - |
| 115 | | - |
| 116 | | - |
| 117 | void QEventLoop::wakeUp() | - |
| 118 | { | - |
| 119 | QEventLoopPrivate * const d = d_func(); | - |
| 120 | if (!d->threadData->eventDispatcher) partially evaluated: !d->threadData->eventDispatcher| no Evaluation Count:0 | yes Evaluation Count:1 |
| 0-1 |
| 121 | return; | 0 |
| 122 | d->threadData->eventDispatcher->wakeUp(); | - |
| 123 | } executed: }Execution Count:1 | 1 |
| 124 | | - |
| 125 | | - |
| 126 | | - |
| 127 | | - |
| 128 | | - |
| 129 | bool QEventLoop::event(QEvent *event) | - |
| 130 | { | - |
| 131 | if (event->type() == QEvent::Quit) { evaluated: event->type() == QEvent::Quit| yes Evaluation Count:2 | yes Evaluation Count:163 |
| 2-163 |
| 132 | quit(); | - |
| 133 | return true; executed: return true;Execution Count:2 | 2 |
| 134 | } else { | - |
| 135 | return QObject::event(event); executed: return QObject::event(event);Execution Count:163 | 163 |
| 136 | } | - |
| 137 | } | - |
| 138 | void QEventLoop::quit() | - |
| 139 | { exit(0); } executed: exit(0);Execution Count:380 | 380 |
| 140 | | - |
| 141 | | - |
| 142 | class QEventLoopLockerPrivate | - |
| 143 | { | - |
| 144 | public: | - |
| 145 | explicit QEventLoopLockerPrivate(QEventLoopPrivate *loop) | - |
| 146 | : loop(loop), type(EventLoop) | - |
| 147 | { | - |
| 148 | loop->ref(); | - |
| 149 | } executed: }Execution Count:11 | 11 |
| 150 | | - |
| 151 | explicit QEventLoopLockerPrivate(QThreadPrivate *thread) | - |
| 152 | : thread(thread), type(Thread) | - |
| 153 | { | - |
| 154 | thread->ref(); | - |
| 155 | } executed: }Execution Count:2 | 2 |
| 156 | | - |
| 157 | explicit QEventLoopLockerPrivate(QCoreApplicationPrivate *app) | - |
| 158 | : app(app), type(Application) | - |
| 159 | { | - |
| 160 | app->ref(); | - |
| 161 | } executed: }Execution Count:6 | 6 |
| 162 | | - |
| 163 | ~QEventLoopLockerPrivate() | - |
| 164 | { | - |
| 165 | switch (type) | - |
| 166 | { | - |
| 167 | case EventLoop: | - |
| 168 | loop->deref(); | - |
| 169 | break; executed: break;Execution Count:11 | 11 |
| 170 | case Thread: | - |
| 171 | thread->deref(); | - |
| 172 | break; executed: break;Execution Count:1 | 1 |
| 173 | default: | - |
| 174 | app->deref(); | - |
| 175 | break; executed: break;Execution Count:6 | 6 |
| 176 | } | - |
| 177 | } executed: }Execution Count:18 | 18 |
| 178 | | - |
| 179 | private: | - |
| 180 | union { | - |
| 181 | QEventLoopPrivate * loop; | - |
| 182 | QThreadPrivate * thread; | - |
| 183 | QCoreApplicationPrivate * app; | - |
| 184 | }; | - |
| 185 | enum Type { | - |
| 186 | EventLoop, | - |
| 187 | Thread, | - |
| 188 | Application | - |
| 189 | }; | - |
| 190 | const Type type; | - |
| 191 | }; | - |
| 192 | QEventLoopLocker::QEventLoopLocker() | - |
| 193 | : d_ptr(new QEventLoopLockerPrivate(static_cast<QCoreApplicationPrivate*>(QObjectPrivate::get(QCoreApplication::instance())))) | - |
| 194 | { | - |
| 195 | | - |
| 196 | } executed: }Execution Count:6 | 6 |
| 197 | QEventLoopLocker::QEventLoopLocker(QEventLoop *loop) | - |
| 198 | : d_ptr(new QEventLoopLockerPrivate(static_cast<QEventLoopPrivate*>(QObjectPrivate::get(loop)))) | - |
| 199 | { | - |
| 200 | | - |
| 201 | } executed: }Execution Count:11 | 11 |
| 202 | QEventLoopLocker::QEventLoopLocker(QThread *thread) | - |
| 203 | : d_ptr(new QEventLoopLockerPrivate(static_cast<QThreadPrivate*>(QObjectPrivate::get(thread)))) | - |
| 204 | { | - |
| 205 | | - |
| 206 | } executed: }Execution Count:2 | 2 |
| 207 | | - |
| 208 | | - |
| 209 | | - |
| 210 | | - |
| 211 | QEventLoopLocker::~QEventLoopLocker() | - |
| 212 | { | - |
| 213 | delete d_ptr; | - |
| 214 | } executed: }Execution Count:18 | 18 |
| 215 | | - |
| 216 | | - |
| 217 | | - |
| | |