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