MCPcopy Create free account
hub / github.com/Snapchat/Valdi / flush

Method flush

valdi/src/valdi/runtime/Context/ViewNodesVisibilityObserver.cpp:21–89  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19ViewNodesVisibilityObserver::~ViewNodesVisibilityObserver() = default;
20
21void ViewNodesVisibilityObserver::flush(const Ref<Context>& context) {
22 if (_isFlushing || (_visibilityUpdates.empty() && _viewportUpdates.empty()) || _callback == nullptr) {
23 return;
24 }
25
26 auto eventTime = _lastUpdateTime;
27 _lastUpdateTime = TimePoint();
28
29 size_t visibleIdsSize = 0;
30 size_t invisibleIdsSize = 0;
31
32 for (const auto& it : _visibilityUpdates) {
33 if (it.second) {
34 visibleIdsSize++;
35 } else {
36 invisibleIdsSize++;
37 }
38 }
39
40 auto visibleIds = ValueArray::make(visibleIdsSize);
41 auto invisibleIds = ValueArray::make(invisibleIdsSize);
42 size_t visibleIdsIndex = 0;
43 size_t invisibleIdsIndex = 0;
44
45 for (const auto& it : _visibilityUpdates) {
46 if (it.second) {
47 (*visibleIds)[visibleIdsIndex++] = Value(it.first);
48 } else {
49 (*invisibleIds)[invisibleIdsIndex++] = Value(it.first);
50 }
51 }
52
53 auto viewportUpdates = ValueArray::make(_viewportUpdates.size() * 5);
54
55 size_t index = 0;
56 for (const auto& it : _viewportUpdates) {
57 auto frame = it.second;
58 viewportUpdates->emplace(index++, Value(it.first));
59 viewportUpdates->emplace(index++, Value(frame.x));
60 viewportUpdates->emplace(index++, Value(frame.y));
61 viewportUpdates->emplace(index++, Value(frame.width));
62 viewportUpdates->emplace(index++, Value(frame.height));
63 }
64
65 _visibilityUpdates.clear();
66 _viewportUpdates.clear();
67 _isFlushing = true;
68
69 auto updateId = context->enqueueUpdate();
70
71 auto self = strongRef(this);
72 auto callback = makeShared<ValueFunctionWithCallable>(
73 [self, context, updateId](const ValueFunctionCallContext& /*callContext*/) -> Value {
74 DispatchFunction dispatchFn = [self, context, updateId]() {
75 self->onFlushAcknowledged(context);
76 context->markUpdateCompleted(updateId);
77 };
78 if (self->_mainThreadManager != nullptr) {

Callers

nothing calls this directly

Calls 12

onFlushAcknowledgedMethod · 0.95
strongRefFunction · 0.85
markUpdateCompletedMethod · 0.80
getTimeMethod · 0.80
clearMethod · 0.65
TimePointClass · 0.50
ValueClass · 0.50
emptyMethod · 0.45
sizeMethod · 0.45
emplaceMethod · 0.45
enqueueUpdateMethod · 0.45
dispatchMethod · 0.45

Tested by

no test coverage detected