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
105
void
lock();
106
112
void
unlock();
113
122
void
setThreadsLimit(
int
value
);
123
128
int
threadsLimit()
const
;
129
130
void
continueUpdate(
const
QRect& rc);
131
void
doSomeUsefulWork();
132
void
jobFinished();
133
void
jobThreadExited();
134
135
void
setTestingMode(
bool
value
);
136
137
protected
:
138
static
bool
walkerIntersectsJob(
KisBaseRectsWalkerSP
walker,
139
const
KisUpdateJobItem
* job);
140
qint32 findSpareThread();
141
142
protected
:
149
QReadWriteLock
m_exclusiveJobLock
;
150
151
QMutex
m_lock
;
152
QMutex
m_runningThreadsMutex
;
153
int
m_numRunningThreads = 0;
154
QWaitCondition
m_waitForDoneCondition
;
155
QVector<KisUpdateJobItem*>
m_jobs
;
156
QThreadPool
m_threadPool
;
157
KisLockFreeLodCounter
m_lodCounter
;
158
KisUpdateScheduler
*
m_scheduler
;
159
bool
m_testingMode =
false
;
160
161
private
:
162
163
friend
class
KisUpdaterContextTest;
164
friend
class
KisUpdateSchedulerTest;
165
friend
class
KisStrokesQueueTest;
166
friend
class
KisSimpleUpdateQueueTest;
167
friend
class
KisUpdateJobItem
;
168
169
const
QVector<KisUpdateJobItem*>
getJobs();
170
void
clear();
171
172
void
startThread(
int
index);
173
174
};
175
176
class
KRITAIMAGE_EXPORT
KisTestableUpdaterContext
:
public
KisUpdaterContext
177
{
178
public
:
182
KisTestableUpdaterContext
(qint32 threadCount);
183
};
184
185
186
#endif
/* __KIS_UPDATER_CONTEXT_H */
187
188
189
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:177
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:157
KisUpdaterContext::m_threadPool
QThreadPool m_threadPool
Definition
kis_updater_context.h:156
KisUpdaterContext::m_exclusiveJobLock
QReadWriteLock m_exclusiveJobLock
Definition
kis_updater_context.h:149
KisUpdaterContext::m_runningThreadsMutex
QMutex m_runningThreadsMutex
Definition
kis_updater_context.h:152
KisUpdaterContext::m_lock
QMutex m_lock
Definition
kis_updater_context.h:151
KisUpdaterContext::m_jobs
QVector< KisUpdateJobItem * > m_jobs
Definition
kis_updater_context.h:155
KisUpdaterContext::useIdealThreadCountTag
static const int useIdealThreadCountTag
Definition
kis_updater_context.h:30
KisUpdaterContext::m_scheduler
KisUpdateScheduler * m_scheduler
Definition
kis_updater_context.h:158
KisUpdaterContext::m_waitForDoneCondition
QWaitCondition m_waitForDoneCondition
Definition
kis_updater_context.h:154
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
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52