1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
/*
timerinfo.h
This file is part of GammaRay, the Qt application inspection and manipulation tool.
SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Thomas McGuire <thomas.mcguire@kdab.com>
SPDX-License-Identifier: GPL-2.0-or-later
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#ifndef GAMMARAY_TIMERTOP_TIMERINFO_H
#define GAMMARAY_TIMERTOP_TIMERINFO_H
#include <QPointer>
#include <QHash>
#include <QMetaType>
QT_BEGIN_NAMESPACE
class QTimer;
QT_END_NAMESPACE
namespace GammaRay {
class TimerId
{
friend uint qHash(const TimerId &);
public:
enum Type
{
InvalidType,
// A QObject, no timer id
QQmlTimerType,
// A QObject, unstable timerId across stop/start
QTimerType,
// A timerId attached to a QObject
QObjectType
};
TimerId() = default;
explicit TimerId(QObject *timer);
explicit TimerId(int timerId, QObject *receiver);
Type type() const;
QObject *address() const;
int timerId() const;
bool operator==(const TimerId &other) const;
bool operator<(const TimerId &other) const;
private:
Type m_type = InvalidType;
QObject *m_timerAddress = nullptr;
int m_timerId = -1;
};
struct TimerIdInfo
{
enum State
{
InvalidState,
InactiveState,
SingleShotState,
RepeatState
};
TimerIdInfo()
: type(TimerId::InvalidType)
, timerId(-1)
, interval(0)
, totalWakeups(0)
, lastReceiverAddress(nullptr)
, state(InvalidState)
, wakeupsPerSec(0.0)
, timePerWakeup(0.0)
, maxWakeupTime(0)
{
}
~TimerIdInfo()
{
}
/** Update timer information to the current state.
* It's the callers responsibility to ensure the receiver or timer object
* is and stays valid during this call, if necessary by using Probe::objectLock().
*/
void update(const TimerId &id, QObject *receiver = nullptr);
TimerId::Type type;
int timerId;
int interval;
uint totalWakeups;
QObject *lastReceiverAddress; // The QTimer/QQmlTimer or last known receiver address
QPointer<QObject> lastReceiverObject;
QString objectName;
State state;
qreal wakeupsPerSec;
qreal timePerWakeup;
uint maxWakeupTime;
};
uint qHash(const TimerId &id);
}
#endif // GAMMARAY_TIMERINFO_H
|