summaryrefslogtreecommitdiff
path: root/indra/newview/llaisapi.cpp
diff options
context:
space:
mode:
authorMnikolenko Productengine <mnikolenko@productengine.com>2026-02-25 13:45:30 +0200
committerMnikolenko Productengine <mnikolenko@productengine.com>2026-02-25 13:45:30 +0200
commite9c4c1aacffa9eb45628f6356152a70e5a61a32b (patch)
tree5bd58156971c04c6106679f0d5a4368005cdff69 /indra/newview/llaisapi.cpp
parentaa4ad2e95da5207a1250ca5fd23f7f0e6528a44e (diff)
parent3529bc5f9d29a71355f3a3666540abff57dc1a4c (diff)
Merge branch 'release/2026.02' into maxim/flat-ui-fonts-update
# Conflicts: # indra/newview/skins/default/xui/en/panel_preferences_general.xml
Diffstat (limited to 'indra/newview/llaisapi.cpp')
-rw-r--r--indra/newview/llaisapi.cpp35
1 files changed, 30 insertions, 5 deletions
diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index 1da1647fe8..f67f2688a1 100644
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -1019,6 +1019,9 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht
}
//-------------------------------------------------------------------------
+U32 AISUpdate::sBatchFrameCount = 0;
+LLTimer AISUpdate::sBatchTimer;
+
AISUpdate::AISUpdate(const LLSD& update, AISAPI::COMMAND_TYPE type, const LLSD& request_body)
: mType(type)
{
@@ -1036,8 +1039,16 @@ AISUpdate::AISUpdate(const LLSD& update, AISAPI::COMMAND_TYPE type, const LLSD&
mFetchDepth = request_body["depth"].asInteger();
}
- mTimer.setTimerExpirySec(AIS_EXPIRY_SECONDS);
- mTimer.start();
+ mTaskTimer.setTimerExpirySec(AIS_TASK_EXPIRY_SECONDS);
+ mTaskTimer.start();
+
+ U32 current_frame = LLFrameTimer::getFrameCount();
+ if (sBatchFrameCount != current_frame)
+ {
+ sBatchTimer.setTimerExpirySec(AIS_BATCH_EXPIRY_SECONDS);
+ sBatchTimer.start();
+ sBatchFrameCount = current_frame;
+ }
parseUpdate(update);
}
@@ -1058,11 +1069,25 @@ void AISUpdate::clearParseResults()
void AISUpdate::checkTimeout()
{
- if (mTimer.hasExpired())
+ if (mTaskTimer.hasExpired() || sBatchTimer.hasExpired())
{
- llcoro::suspend();
+ // If we are taking too long, don't starve other tasks,
+ // yield to mainloop.
+ // If we use normal suspend(), there will be a chance of
+ // waking up from other suspends, before main coro had
+ // a chance, so wait for a frame tick instead.
+ llcoro::suspendUntilNextFrame();
LLCoros::checkStop();
- mTimer.setTimerExpirySec(AIS_EXPIRY_SECONDS);
+ mTaskTimer.setTimerExpirySec(AIS_TASK_EXPIRY_SECONDS);
+
+ U32 current_frame = LLFrameTimer::getFrameCount();
+ if (sBatchFrameCount != current_frame)
+ {
+ // To give other tasks a chance batch timer
+ // has a longer delay.
+ sBatchTimer.setTimerExpirySec(AIS_BATCH_EXPIRY_SECONDS);
+ sBatchFrameCount = current_frame;
+ }
}
}