Line data Source code
1 : #include "FangObject.h"
2 :
3 : #include <QMutexLocker>
4 : #include <QMap>
5 :
6 : #include "utilities/FangLogging.h"
7 :
8 : QSet<FangObject*> FangObject::allObjects;
9 :
10 6999 : FangObject::FangObject(QObject *parent) :
11 6999 : QObject(parent)
12 : {
13 : #ifdef FANG_OBJECT_LEAK_CHECK
14 6999 : QMutexLocker locker(&mutex);
15 6999 : allObjects.insert(this);
16 : #endif
17 6999 : }
18 :
19 6920 : FangObject::~FangObject()
20 : {
21 : #ifdef FANG_OBJECT_LEAK_CHECK
22 6897 : QMutexLocker locker(&mutex);
23 6897 : allObjects.remove(this);
24 : #endif
25 6920 : }
26 :
27 3 : void FangObject::printRemainingObjects()
28 : {
29 : #ifdef FANG_OBJECT_LEAK_CHECK
30 6 : qCInfo(logApp);
31 6 : qCInfo(logApp) << "========== FangObject leak check ==========";
32 6 : qCInfo(logApp) << "Remaining objects: " << allObjects.size();
33 6 : qCInfo(logApp);
34 :
35 : // Key: Class name
36 : // Value: Number of instances
37 3 : QMap<QString, int> instanceCount;
38 :
39 : // Tally up the totals.
40 8 : for (FangObject* object : allObjects) {
41 5 : instanceCount[object->metaObject()->className()]++;
42 : }
43 :
44 : // Print 'em out!
45 6 : for (QString className : instanceCount.keys()) {
46 6 : qCDebug(logApp) << QString("%1 : %2").
47 3 : arg(instanceCount[className], 4).arg(className);
48 6 : }
49 :
50 6 : qCInfo(logApp) << "===========================================";
51 6 : qCInfo(logApp);
52 : #endif
53 3 : }
54 :
55 : #ifdef FANG_OBJECT_LEAK_CHECK
56 35 : int FangObject::getRemainingObjectCount()
57 : {
58 35 : return allObjects.size();
59 : }
60 : #endif
|