Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_updater_context.h
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2010 Dmitry Kazakov <dimula73@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
#ifndef __KIS_UPDATER_CONTEXT_H
8
#define __KIS_UPDATER_CONTEXT_H
9
10
#include <QMutex>
11
#include <QReadWriteLock>
12
#include <QThreadPool>
13
#include <QWaitCondition>
14
15
#include "
kis_base_rects_walker.h
"
16
#include "
kis_async_merger.h
"
17
#include "
kis_lock_free_lod_counter.h
"
18
19
#include "
KisUpdaterContextSnapshotEx.h
"
20
#include "
kis_update_scheduler.h
"
21
22
class
KisUpdateJobItem
;
23
class
KisSpontaneousJob
;
24
class
KisStrokeJob
;
25
class
KisUpdateScheduler
;
26
27
class
KRITAIMAGE_EXPORT
KisUpdaterContext
28
{
29
public
:
30
static
const
int
useIdealThreadCountTag
;
31
32
public
:
33
KisUpdaterContext
(qint32 threadCount = useIdealThreadCountTag,
KisUpdateScheduler
*parent = 0);
34
~KisUpdaterContext
();
35
36
43
void
getJobsSnapshot(qint32 &numMergeJobs, qint32 &numStrokeJobs);
44
45
KisUpdaterContextSnapshotEx getContextSnapshotEx()
const
;
46
51
int
currentLevelOfDetail()
const
;
52
57
bool
hasSpareThread();
58
67
bool
isJobAllowed(
KisBaseRectsWalkerSP
walker);
68
79
void
addMergeJob(
KisBaseRectsWalkerSP
walker);
80
86
void
addStrokeJob(
KisStrokeJob
*strokeJob);
87
88
94
void
addSpontaneousJob(
KisSpontaneousJob
*spontaneousJob);
95
99
void
waitForDone();
100
108
bool
isIdle()
const
;
109
114
void
lock();
115
121
void
unlock();
122
131
void
setThreadsLimit(
int
value
);
132
137
int
threadsLimit()
const
;
138
139
void
continueUpdate(
const
QRect& rc);
140
void
doSomeUsefulWork();
141
void
jobFinished();
142
void
jobThreadExited();
143
144
void
setTestingMode(
bool
value
);
145
146
protected
:
147
static
bool
walkerIntersectsJob(
KisBaseRectsWalkerSP
walker,
148
const
KisUpdateJobItem
* job);
149
qint32 findSpareThread();
150
151
protected
:
158
QReadWriteLock
m_exclusiveJobLock
;
159
160
QMutex
m_lock
;
161
mutable
QMutex
m_runningThreadsMutex
;
162
int
m_numRunningThreads = 0;
163
QWaitCondition
m_waitForDoneCondition
;
164
QVector<KisUpdateJobItem*>
m_jobs
;
165
QThreadPool
m_threadPool
;
166
KisLockFreeLodCounter
m_lodCounter
;
167
KisUpdateScheduler
*
m_scheduler
;
168
bool
m_testingMode =
false
;
169
170
private
:
171
172
friend
class
KisUpdaterContextTest;
173
friend
class
KisUpdateSchedulerTest;
174
friend
class
KisStrokesQueueTest;
175
friend
class
KisSimpleUpdateQueueTest;
176
friend
class
KisUpdateJobItem
;
177
178
const
QVector<KisUpdateJobItem*>
getJobs();
179
void
clear();
180
181
void
startThread(
int
index);
182
183
};
184
185
class
KRITAIMAGE_EXPORT
KisTestableUpdaterContext
:
public
KisUpdaterContext
186
{
187
public
:
191
KisTestableUpdaterContext
(qint32 threadCount);
192
};
193
194
195
#endif
/* __KIS_UPDATER_CONTEXT_H */
196
197
198
value
float value(const T *src, size_t ch)
Definition
JPEGXLImport.cpp:93
KisUpdaterContextSnapshotEx.h
KisLockFreeLodCounter
Definition
kis_lock_free_lod_counter.h:14
KisSharedPtr< KisBaseRectsWalker >
KisSpontaneousJob
Definition
kis_spontaneous_job.h:19
KisStrokeJob
Definition
kis_stroke_job.h:14
KisTestableUpdaterContext
Definition
kis_updater_context.h:186
KisUpdateJobItem
Definition
kis_update_job_item.h:25
KisUpdaterContext
Definition
kis_updater_context.h:28
KisUpdaterContext::m_lodCounter
KisLockFreeLodCounter m_lodCounter
Definition
kis_updater_context.h:166
KisUpdaterContext::m_threadPool
QThreadPool m_threadPool
Definition
kis_updater_context.h:165
KisUpdaterContext::m_exclusiveJobLock
QReadWriteLock m_exclusiveJobLock
Definition
kis_updater_context.h:158
KisUpdaterContext::m_runningThreadsMutex
QMutex m_runningThreadsMutex
Definition
kis_updater_context.h:161
KisUpdaterContext::m_lock
QMutex m_lock
Definition
kis_updater_context.h:160
KisUpdaterContext::m_jobs
QVector< KisUpdateJobItem * > m_jobs
Definition
kis_updater_context.h:164
KisUpdaterContext::useIdealThreadCountTag
static const int useIdealThreadCountTag
Definition
kis_updater_context.h:30
KisUpdaterContext::m_scheduler
KisUpdateScheduler * m_scheduler
Definition
kis_updater_context.h:167
KisUpdaterContext::m_waitForDoneCondition
QWaitCondition m_waitForDoneCondition
Definition
kis_updater_context.h:163
QList
Definition
KisQStringListFwd.h:16
kis_async_merger.h
kis_base_rects_walker.h
kis_lock_free_lod_counter.h
kis_update_scheduler.h
KisUpdateScheduler
Definition
kis_update_scheduler.cpp:38
libs
image
kis_updater_context.h
Generated at
2026-06-01 02:30:02+02:00
from
Krita
branch
master
, commit
a9b6c3f4afae3a0c297c10252e67294f96104a6a