Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qohosbatchingrequestshandler.h
Go to the documentation of this file.
1
// Copyright (C) 2025 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
#
ifndef
QOHOSBATCHINGREQUESTSHANDLER_H
5
#
define
QOHOSBATCHINGREQUESTSHANDLER_H
6
7
#
include
<
QtCore
/
qglobal
.
h
>
8
#
include
<
QtCore
/
private
/
qcore_ohos_p
.
h
>
9
#
include
<
QtCore
/
private
/
qohoscommon_p
.
h
>
10
#
include
<
QtCore
/
qmetaobject
.
h
>
11
#
include
<
QtCore
/
qobject
.
h
>
12
#
include
<
functional
>
13
#
include
<
memory
>
14
#
include
<
mutex
>
15
#
include
<
vector
>
16
17
QT_BEGIN_NAMESPACE
18
19
namespace
details_qohosbatchingrequestshandler_h
{
20
21
inline
QOhosConsumer
<
std
::
function
<
void
()>>
makeQtThreadTasksExecutor
(QtOhos::QObjectThreadSafeRef qtContext)
22
{
23
return
[qtContext](
std
::function<
void
()> task) {
24
qtContext.visitInQtThreadIfAlive(
25
[task = std::move(task)](
auto
&) {
26
task();
27
});
28
};
29
}
30
31
template
<
typename
Batch>
32
class
QtOhosBatchingAsyncMTRequestsHandler
:
public
std
::enable_shared_from_this<
QtOhosBatchingAsyncMTRequestsHandler
<Batch>>
33
{
34
public
:
35
QtOhosBatchingAsyncMTRequestsHandler
(
36
QOhosConsumer<std::function<
void
()>> tasksExecutor, std::function<
void
(Batch &&)> targetThreadHandleBatchFunc);
37
38
void
updateBatch
(
const
std
::function<
void
(Batch &)> &updateFunc);
39
40
private
:
41
void
postRequestTaskIfNeeded();
42
43
std
::mutex m_batchMutex;
44
Batch m_batch = {};
45
bool
m_batchPending =
false
;
46
QOhosConsumer<std::function<
void
()>> m_tasksExecutor;
47
std
::function<
void
(Batch &&)> m_targetThreadHandleBatchFunc;
48
};
49
50
template
<
typename
Batch>
51
QtOhosBatchingAsyncMTRequestsHandler
<Batch>::QtOhosBatchingAsyncMTRequestsHandler(
52
QOhosConsumer<std::function<
void
()>> tasksExecutor,
std
::function<
void
(Batch &&)> targetThreadHandleBatchFunc)
53
: m_tasksExecutor(tasksExecutor)
54
, m_targetThreadHandleBatchFunc(
std
::move(targetThreadHandleBatchFunc))
55
{
56
}
57
58
template
<
typename
Batch>
59
void
QtOhosBatchingAsyncMTRequestsHandler
<Batch>::
updateBatch
(
const
std
::function<
void
(Batch &)> &updateFunc)
60
{
61
std
::lock_guard<
std
::mutex> requestLock(m_batchMutex);
62
63
updateFunc(m_batch);
64
65
if
(!m_batchPending) {
66
auto
weakSelf =
std
::weak_ptr<
QtOhosBatchingAsyncMTRequestsHandler
<Batch>>(
this
->shared_from_this());
67
m_tasksExecutor(
68
[weakSelf]() {
69
auto
self = weakSelf.lock();
70
if
(self) {
71
std::unique_ptr<Batch> optRequest;
72
{
73
std::lock_guard<std::mutex> requestLock(self->m_batchMutex);
74
if
(self->m_batchPending) {
75
optRequest = std::make_unique<Batch>(std::exchange(self->m_batch, Batch()));
76
self->m_batchPending =
false
;
77
}
78
}
79
if
(optRequest)
80
self->m_targetThreadHandleBatchFunc(std::move(*optRequest));
81
}
82
});
83
m_batchPending =
true
;
84
}
85
}
86
87
}
88
89
template
<
typename
Request>
90
std
::function<
void
(
std
::function<
void
(Request &)>)>
makeQtOhosBatchingMTRequestsHandler
(
91
QOhosConsumer<std::function<
void
()>> tasksExecutor,
92
QOhosConsumer<Request &&> targetThreadBatchConsumer);
93
94
template
<
typename
QtRequest>
95
std
::function<
void
(
std
::function<
void
(QtRequest &)>)>
makeQtOhosBatchingQtRequestsHandler
(
96
QtOhos::QObjectThreadSafeRef qtContext,
std
::function<
void
(QtRequest &&)> qtHandleRequestFunc);
97
98
template
<
typename
QtRequest>
99
QOhosConsumer
<
QtRequest
>
makeQtOhosSimpleBatchingQtRequestsHandler
(
100
QtOhos::QObjectThreadSafeRef qtContext, QOhosConsumer<std::vector<QtRequest>> qtThreadBatchConsumer);
101
102
template
<
typename
Request>
103
QOhosConsumer
<
Request
>
makeQtOhosSimpleBatchingMTRequestsHandler
(
104
QOhosConsumer<std::function<
void
()>> tasksExecutor,
105
QOhosConsumer<std::vector<Request>> targetThreadBatchConsumer);
106
107
template
<
typename
Request>
108
std
::function<
void
(
std
::function<
void
(Request &)>)>
makeQtOhosBatchingMTRequestsHandler
(
109
QOhosConsumer<std::function<
void
()>> tasksExecutor,
110
QOhosConsumer<Request &&> targetThreadBatchConsumer)
111
{
112
using
namespace
details_qohosbatchingrequestshandler_h
;
113
auto
requestsHandler =
std
::make_shared<
QtOhosBatchingAsyncMTRequestsHandler
<Request>>(
114
std
::move(tasksExecutor),
std
::move(targetThreadBatchConsumer));
115
return
[requestsHandler](
const
std
::function<
void
(Request &)> &updateFunc) {
116
requestsHandler->updateBatch(updateFunc);
117
};
118
}
119
120
template
<
typename
QtRequest>
121
std
::function<
void
(
std
::function<
void
(QtRequest &)>)>
makeQtOhosBatchingQtRequestsHandler
(
122
QtOhos::QObjectThreadSafeRef qtContext,
std
::function<
void
(QtRequest &&)> qtHandleRequestFunc)
123
{
124
using
namespace
details_qohosbatchingrequestshandler_h
;
125
return
makeQtOhosBatchingMTRequestsHandler(
126
makeQtThreadTasksExecutor(qtContext),
std
::move(qtHandleRequestFunc));
127
}
128
129
template
<
typename
QtRequest>
130
QOhosConsumer
<
QtRequest
>
makeQtOhosSimpleBatchingQtRequestsHandler
(
131
QtOhos::QObjectThreadSafeRef qtContext, QOhosConsumer<std::vector<QtRequest>> qtThreadBatchConsumer)
132
{
133
using
namespace
details_qohosbatchingrequestshandler_h
;
134
return
makeQtOhosSimpleBatchingMTRequestsHandler(
135
makeQtThreadTasksExecutor(qtContext),
std
::move(qtThreadBatchConsumer));
136
}
137
138
template
<
typename
Request>
139
QOhosConsumer
<
Request
>
makeQtOhosSimpleBatchingMTRequestsHandler
(
140
QOhosConsumer<std::function<
void
()>> tasksExecutor,
141
QOhosConsumer<std::vector<Request>> targetThreadBatchConsumer)
142
{
143
using
namespace
details_qohosbatchingrequestshandler_h
;
144
auto
baseRequestsHandler = std::make_shared<QtOhosBatchingAsyncMTRequestsHandler<std::vector<Request>>>(
145
std::move(tasksExecutor), std::move(targetThreadBatchConsumer));
146
return
[baseRequestsHandler = std::move(baseRequestsHandler)](Request request) {
147
baseRequestsHandler->updateBatch(
148
[&](std::vector<Request> &batch) {
149
batch.push_back(
std
::move(request));
150
});
151
};
152
}
153
154
QT_END_NAMESPACE
155
156
#
endif
QtOhos::TypedId
Definition
qohosutils.h:27
details_qohosbatchingrequestshandler_h::QtOhosBatchingAsyncMTRequestsHandler
Definition
qohosbatchingrequestshandler.h:33
details_qohosbatchingrequestshandler_h::QtOhosBatchingAsyncMTRequestsHandler::updateBatch
void updateBatch(const std::function< void(Batch &)> &updateFunc)
Definition
qohosbatchingrequestshandler.h:59
QArkUi
Definition
displaymanager.cpp:17
QArkUi::makeVSyncFrameRequester
std::function< void()> makeVSyncFrameRequester(::OHNativeWindow *nativeWindow, std::function< void()> vsyncFrameReadyFunc)
Definition
vsync.cpp:156
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QtOhos
Definition
qcore_ohos.cpp:59
details_qohosbatchingrequestshandler_h
Definition
qohosbatchingrequestshandler.h:19
details_qohosbatchingrequestshandler_h::makeQtThreadTasksExecutor
QOhosConsumer< std::function< void()> > makeQtThreadTasksExecutor(QtOhos::QObjectThreadSafeRef qtContext)
Definition
qohosbatchingrequestshandler.h:21
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
makeQtOhosSimpleBatchingQtRequestsHandler
QOhosConsumer< QtRequest > makeQtOhosSimpleBatchingQtRequestsHandler(QtOhos::QObjectThreadSafeRef qtContext, QOhosConsumer< std::vector< QtRequest > > qtThreadBatchConsumer)
Definition
qohosbatchingrequestshandler.h:130
makeQtOhosBatchingMTRequestsHandler
std::function< void(std::function< void(Request &)>)> makeQtOhosBatchingMTRequestsHandler(QOhosConsumer< std::function< void()> > tasksExecutor, QOhosConsumer< Request && > targetThreadBatchConsumer)
Definition
qohosbatchingrequestshandler.h:108
makeQtOhosSimpleBatchingMTRequestsHandler
QOhosConsumer< Request > makeQtOhosSimpleBatchingMTRequestsHandler(QOhosConsumer< std::function< void()> > tasksExecutor, QOhosConsumer< std::vector< Request > > targetThreadBatchConsumer)
Definition
qohosbatchingrequestshandler.h:139
makeQtOhosBatchingQtRequestsHandler
std::function< void(std::function< void(QtRequest &)>)> makeQtOhosBatchingQtRequestsHandler(QtOhos::QObjectThreadSafeRef qtContext, std::function< void(QtRequest &&)> qtHandleRequestFunc)
Definition
qohosbatchingrequestshandler.h:121
std::hash< VsyncId >
Definition
vsync.cpp:22
std::hash< VsyncId >::operator()
std::size_t operator()(const VsyncId &vsyncId) const noexcept
Definition
vsync.cpp:164
VsyncId
QtOhos::TypedId< std::uintptr_t, struct VsyncIdTag > VsyncId
Definition
vsync.cpp:18
qtbase
src
plugins
platforms
ohos
render
qohosbatchingrequestshandler.h
Generated on
for Qt by
1.18.0