File indexing completed on 2024-04-28 15:34:47

0001 /* -*- C++ -*-
0002     This file is part of ThreadWeaver.
0003 
0004     SPDX-FileCopyrightText: 2005-2013 Mirko Boehm <mirko@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #ifndef JOBLOGGINGDECORATOR_H
0010 #define JOBLOGGINGDECORATOR_H
0011 
0012 #include <QDateTime>
0013 #include <QElapsedTimer>
0014 #include <QMutex>
0015 #include <QVector>
0016 
0017 #include "src/iddecorator.h"
0018 
0019 class JobLoggingDecoratorCollector;
0020 
0021 class JobLoggingDecorator : public ThreadWeaver::IdDecorator
0022 {
0023 public:
0024     struct JobData {
0025         int threadId;
0026         QString description;
0027         qint64 start;
0028         qint64 end;
0029         JobData()
0030             : threadId(0)
0031         {
0032         }
0033     };
0034 
0035     explicit JobLoggingDecorator(const ThreadWeaver::JobPointer &job, JobLoggingDecoratorCollector *collector);
0036     void run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread) override;
0037 
0038 private:
0039     JobData data_;
0040     JobLoggingDecoratorCollector *collector_;
0041 };
0042 
0043 class JobLoggingDecoratorCollector
0044 {
0045 public:
0046     JobLoggingDecoratorCollector();
0047     void storeJobData(const JobLoggingDecorator::JobData &data);
0048     qint64 time();
0049 
0050 private:
0051     QVector<JobLoggingDecorator::JobData> jobData_;
0052     QElapsedTimer elapsed_;
0053     QDateTime start_;
0054     QMutex mutex_;
0055 };
0056 
0057 #endif // JOBLOGGINGDECORATOR_H