summaryrefslogtreecommitdiff
path: root/indra/lscript
diff options
context:
space:
mode:
authorAndrew Meadows <andrew@lindenlab.com>2009-01-17 01:29:45 +0000
committerAndrew Meadows <andrew@lindenlab.com>2009-01-17 01:29:45 +0000
commit15a6d273cc00e1f4f9f9d56d8c878b46b283b289 (patch)
treef4ac9fa1f96c6d246b571412ce6a67ee1837794d /indra/lscript
parent446c55538e1fb12d8a1feb541edf99c16bb29121 (diff)
svn merge -r108142:108148 svn+ssh://svn.lindenlab.com/svn/linden/qa/maint-server/maint-server-5-r108113
Diffstat (limited to 'indra/lscript')
-rw-r--r--indra/lscript/lscript_execute.h7
-rw-r--r--indra/lscript/lscript_execute/lscript_execute.cpp9
2 files changed, 13 insertions, 3 deletions
diff --git a/indra/lscript/lscript_execute.h b/indra/lscript/lscript_execute.h
index b1b866570c..a22c37cfe9 100644
--- a/indra/lscript/lscript_execute.h
+++ b/indra/lscript/lscript_execute.h
@@ -452,9 +452,16 @@ public:
// Called when the script is scheduled to be stopped from newsim/LLScriptData
virtual void stopRunning() = 0;
+ // A timer is regularly checked to see if script takes too long, but we
+ // don't do it every opcode due to performance hits.
+ static void setTimerCheckSkip( S32 value ) { sTimerCheckSkip = value; }
+ static S32 getTimerCheckSkip() { return sTimerCheckSkip; }
+
private:
BOOL mReset;
+
+ static S32 sTimerCheckSkip; // Number of times to skip the timer check for performance reasons
};
class LLScriptExecuteLSL2 : public LLScriptExecute
diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp
index 43834758f1..5630f2de0b 100644
--- a/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -42,6 +42,10 @@
#include "lscript_heapruntime.h"
#include "lscript_alloc.h"
+// Static
+const S32 DEFAULT_SCRIPT_TIMER_CHECK_SKIP = 4;
+S32 LLScriptExecute::sTimerCheckSkip = DEFAULT_SCRIPT_TIMER_CHECK_SKIP;
+
void (*binary_operations[LST_EOF][LST_EOF])(U8 *buffer, LSCRIPTOpCodesEnum opcode);
void (*unary_operations[LST_EOF])(U8 *buffer, LSCRIPTOpCodesEnum opcode);
@@ -924,7 +928,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,
// Run for a single timeslice, or until a yield or state transition is due
F32 LLScriptExecute::runQuanta(BOOL b_print, const LLUUID &id, const char **errorstr, F32 quanta, U32& events_processed, LLTimer& timer)
{
- U32 timer_checks = 0;
+ S32 timer_checks = 0;
F32 inloop = 0;
// Loop while not finished, yield not due and time remaining
@@ -936,12 +940,11 @@ F32 LLScriptExecute::runQuanta(BOOL b_print, const LLUUID &id, const char **erro
runInstructions(b_print, id, errorstr,
events_processed, quanta);
- static const S32 lsl_timer_check_skip = 4;
if(isYieldDue())
{
break;
}
- else if(timer_checks++ == lsl_timer_check_skip)
+ else if(timer_checks++ >= LLScriptExecute::sTimerCheckSkip)
{
inloop = timer.getElapsedTimeF32();
if(inloop > quanta)