Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qtconcurrentiteratekernel.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#include "
qtconcurrentiteratekernel.h
"
5
6
#include <
qdeadlinetimer.h
>
7
#include "private/qfunctions_p.h"
8
9
10
#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
11
12
QT_BEGIN_NAMESPACE
13
14
enum
{
15
TargetRatio
= 100
16
};
17
18
static
qint64
getticks
()
19
{
20
return
QDeadlineTimer::current
(
Qt::PreciseTimer
).deadlineNSecs();
21
}
22
23
static
double
elapsed
(
qint64
after,
qint64
before)
24
{
25
return
double(after - before);
26
}
27
28
namespace
QtConcurrent
{
29
69
BlockSizeManager::BlockSizeManager
(
QThreadPool
*
pool
,
int
iterationCount)
70
: maxBlockSize(iterationCount / (
std
::max(
pool
->maxThreadCount(), 1) * 2)),
71
beforeUser(0), afterUser(0),
72
m_blockSize(1)
73
{ }
74
75
// Records the time before user code.
76
void
BlockSizeManager::timeBeforeUser
()
77
{
78
if
(blockSizeMaxed())
79
return
;
80
81
beforeUser =
getticks
();
82
controlPartElapsed.
addValue
(
elapsed
(beforeUser, afterUser));
83
}
84
85
// Records the time after user code and adjust the block size if we are spending
86
// to much time in the for control code compared with the user code.
87
void
BlockSizeManager::timeAfterUser
()
88
{
89
if
(blockSizeMaxed())
90
return
;
91
92
afterUser =
getticks
();
93
userPartElapsed.
addValue
(
elapsed
(afterUser, beforeUser));
94
95
if
(controlPartElapsed.
isMedianValid
() ==
false
)
96
return
;
97
98
if
(controlPartElapsed.
median
() *
int
(
TargetRatio
) < userPartElapsed.
median
())
99
return
;
100
101
m_blockSize =
qMin
(m_blockSize * 2, maxBlockSize);
102
103
#ifdef QTCONCURRENT_FOR_DEBUG
104
qDebug
() <<
QThread::currentThread
() <<
"adjusting block size"
<< controlPartElapsed.
median
() << userPartElapsed.
median
() << m_blockSize;
105
#endif
106
107
// Reset the medians after adjusting the block size so we get
108
// new measurements with the new block size.
109
controlPartElapsed.
reset
();
110
userPartElapsed.
reset
();
111
}
112
113
int
BlockSizeManager::blockSize
()
114
{
115
return
m_blockSize;
116
}
117
118
}
// namespace QtConcurrent
119
120
QT_END_NAMESPACE
121
122
#endif
// QT_NO_CONCURRENT
QDeadlineTimer::current
static QDeadlineTimer current(Qt::TimerType timerType=Qt::CoarseTimer) noexcept
Returns a QDeadlineTimer that is expired but is guaranteed to contain the current time.
Definition
qdeadlinetimer.cpp:583
QThreadPool
\inmodule QtCore
Definition
qthreadpool.h:22
QThread::currentThread
static QThread * currentThread()
Definition
qthread.cpp:1039
QtConcurrent::BlockSizeManager::timeBeforeUser
void timeBeforeUser()
Definition
qtconcurrentiteratekernel.cpp:76
QtConcurrent::BlockSizeManager::BlockSizeManager
BlockSizeManager(QThreadPool *pool, int iterationCount)
Definition
qtconcurrentiteratekernel.cpp:69
QtConcurrent::BlockSizeManager::timeAfterUser
void timeAfterUser()
Definition
qtconcurrentiteratekernel.cpp:87
QtConcurrent::BlockSizeManager::blockSize
int blockSize()
Definition
qtconcurrentiteratekernel.cpp:113
QtConcurrent::Median::median
double median()
Definition
qtconcurrentmedian.h:62
QtConcurrent::Median::isMedianValid
bool isMedianValid() const
Definition
qtconcurrentmedian.h:57
QtConcurrent::Median::addValue
void addValue(double value)
Definition
qtconcurrentmedian.h:37
QtConcurrent::Median::reset
void reset()
Definition
qtconcurrentmedian.h:29
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qstandardpaths_haiku.cpp:21
QT_END_NAMESPACE
Definition
qsharedpointer.cpp:1590
QtConcurrent
\inmodule QtConcurrent
Definition
qtaskbuilder.h:45
Qt::PreciseTimer
@ PreciseTimer
Definition
qnamespace.h:1679
std
Definition
qfloat16.h:502
qdeadlinetimer.h
qDebug
#define qDebug
[1]
Definition
qlogging.h:164
qMin
constexpr const T & qMin(const T &a, const T &b)
Definition
qminmax.h:40
TargetRatio
@ TargetRatio
Definition
qtconcurrentiteratekernel.cpp:15
getticks
static qint64 getticks()
Definition
qtconcurrentiteratekernel.cpp:18
elapsed
static double elapsed(qint64 after, qint64 before)
Definition
qtconcurrentiteratekernel.cpp:23
qtconcurrentiteratekernel.h
qint64
long long qint64
Definition
qtypes.h:60
pool
QThreadPool pool
Definition
src_concurrent_qtconcurrentrun.cpp:12
qtbase
src
concurrent
qtconcurrentiteratekernel.cpp
Generated by
1.10.0