| 55 | }; |
| 56 | |
| 57 | struct TimerIdData |
| 58 | { |
| 59 | TimerIdData() = default; |
| 60 | |
| 61 | void update(const TimerId &id, QObject *receiver = nullptr) |
| 62 | { |
| 63 | info.update(id, receiver); |
| 64 | } |
| 65 | |
| 66 | void addEvent(const GammaRay::TimeoutEvent &event) |
| 67 | { |
| 68 | timeoutEvents.append(event); |
| 69 | if (timeoutEvents.size() > s_maxTimeoutEvents) |
| 70 | timeoutEvents.removeFirst(); |
| 71 | totalWakeupsEvents++; |
| 72 | changed = true; |
| 73 | } |
| 74 | |
| 75 | TimerIdInfo &toInfo(TimerId::Type type) |
| 76 | { |
| 77 | info.totalWakeups = totalWakeups(); |
| 78 | info.wakeupsPerSec = wakeupsPerSec(); |
| 79 | info.timePerWakeup = timePerWakeup(type); |
| 80 | info.maxWakeupTime = maxWakeupTime(type); |
| 81 | return info; |
| 82 | } |
| 83 | |
| 84 | int totalWakeups() const |
| 85 | { |
| 86 | return totalWakeupsEvents; |
| 87 | } |
| 88 | |
| 89 | qreal wakeupsPerSec() const |
| 90 | { |
| 91 | int wakeups = 0; |
| 92 | int start = 0; |
| 93 | int end = timeoutEvents.size() - 1; |
| 94 | for (int i = end; i >= 0; i--) { |
| 95 | const TimeoutEvent &event = timeoutEvents.at(i); |
| 96 | if (event.timeStamp.msecsTo(QTime::currentTime()) > s_maxTimeSpan) { |
| 97 | start = i; |
| 98 | break; |
| 99 | } |
| 100 | wakeups++; |
| 101 | } |
| 102 | |
| 103 | if (wakeups > 0 && end > start) { |
| 104 | const QTime startTime = timeoutEvents[start].timeStamp; |
| 105 | const QTime endTime = timeoutEvents[end].timeStamp; |
| 106 | const int timeSpan = startTime.msecsTo(endTime); |
| 107 | const qreal wakeupsPerSec = wakeups / ( qreal )timeSpan * ( qreal )1000; |
| 108 | return wakeupsPerSec; |
| 109 | } |
| 110 | return 0; |
| 111 | } |
| 112 | |
| 113 | qreal timePerWakeup(TimerId::Type type) const |
| 114 | { |
no outgoing calls
no test coverage detected