mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 00:54:54 +00:00
optimizations
This commit is contained in:
parent
dcd01e1231
commit
55b0ecb487
3 changed files with 38 additions and 33 deletions
|
|
@ -57,6 +57,7 @@ enum EvalConstants
|
||||||
MaxStackSize = 1024,
|
MaxStackSize = 1024,
|
||||||
FieldBufferSizeString = 2048,
|
FieldBufferSizeString = 2048,
|
||||||
FieldBufferSizeNumeric = 128,
|
FieldBufferSizeNumeric = 128,
|
||||||
|
ConcatBufferInitialSize = 8192,
|
||||||
MethodOnComponent = -2
|
MethodOnComponent = -2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -118,6 +119,23 @@ S32 _STK = 0;
|
||||||
char curFieldArray[256];
|
char curFieldArray[256];
|
||||||
char prevFieldArray[256];
|
char prevFieldArray[256];
|
||||||
|
|
||||||
|
const char* tsconcat(const char* strA, const char* strB, S32& outputLen)
|
||||||
|
{
|
||||||
|
S32 lenA = dStrlen(strA);
|
||||||
|
S32 lenB = dStrlen(strB);
|
||||||
|
|
||||||
|
S32 len = lenA + lenB + 1;
|
||||||
|
|
||||||
|
char* concatBuffer = (char*)dMalloc(len);
|
||||||
|
|
||||||
|
concatBuffer[len - 1] = '\0';
|
||||||
|
memcpy(concatBuffer, strA, lenA);
|
||||||
|
memcpy(concatBuffer + lenA, strB, lenB);
|
||||||
|
|
||||||
|
outputLen = lenA + lenB;
|
||||||
|
return concatBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Con
|
namespace Con
|
||||||
{
|
{
|
||||||
// Current script file name and root, these are registered as
|
// Current script file name and root, these are registered as
|
||||||
|
|
@ -1727,7 +1745,6 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
|
||||||
{
|
{
|
||||||
if (nsEntry->mFunctionOffset)
|
if (nsEntry->mFunctionOffset)
|
||||||
{
|
{
|
||||||
// TODO: not make this strings only for returns.
|
|
||||||
ConsoleValue returnFromFn = nsEntry->mCode->exec(nsEntry->mFunctionOffset, fnName, nsEntry->mNamespace, callArgc, callArgv, false, nsEntry->mPackage);
|
ConsoleValue returnFromFn = nsEntry->mCode->exec(nsEntry->mFunctionOffset, fnName, nsEntry->mNamespace, callArgc, callArgv, false, nsEntry->mPackage);
|
||||||
stack[_STK + 1] = std::move(returnFromFn);
|
stack[_STK + 1] = std::move(returnFromFn);
|
||||||
}
|
}
|
||||||
|
|
@ -1834,34 +1851,28 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
|
||||||
|
|
||||||
case OP_ADVANCE_STR_APPENDCHAR:
|
case OP_ADVANCE_STR_APPENDCHAR:
|
||||||
{
|
{
|
||||||
// TODO: Create a better way to handle string concatination without
|
|
||||||
// heap allocating every time.
|
|
||||||
|
|
||||||
val = stack[_STK].getString();
|
|
||||||
dsize_t len = dStrlen(val) + 2;
|
|
||||||
|
|
||||||
char buff[2];
|
char buff[2];
|
||||||
buff[0] = (char)code[ip++];
|
buff[0] = (char)code[ip++];
|
||||||
buff[1] = '\0';
|
buff[1] = '\0';
|
||||||
|
|
||||||
char* concat = new char[len];
|
S32 len;
|
||||||
dMemset(concat, 0, len);
|
const char* concat = tsconcat(stack[_STK].getString(), buff, len);
|
||||||
dStrcat(concat, val, len);
|
|
||||||
dStrcat(concat, buff, len);
|
|
||||||
|
|
||||||
stack[_STK].setString(concat);
|
|
||||||
|
|
||||||
delete[] concat;
|
|
||||||
|
|
||||||
|
stack[_STK].setStringRef(concat, len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case OP_REWIND_STR:
|
case OP_REWIND_STR:
|
||||||
TORQUE_CASE_FALLTHROUGH;
|
TORQUE_CASE_FALLTHROUGH;
|
||||||
case OP_TERMINATE_REWIND_STR:
|
case OP_TERMINATE_REWIND_STR:
|
||||||
stack[_STK - 1].setString((String(stack[_STK - 1] + String(stack[_STK]))));
|
{
|
||||||
|
S32 len;
|
||||||
|
const char* concat = tsconcat(stack[_STK - 1].getString(), stack[_STK].getString(), len);
|
||||||
|
|
||||||
|
stack[_STK - 1].setStringRef(concat, len);
|
||||||
_STK--;
|
_STK--;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case OP_COMPARE_STR:
|
case OP_COMPARE_STR:
|
||||||
stack[_STK - 1].setBool(!dStricmp(stack[_STK].getString(), stack[_STK - 1].getString()));
|
stack[_STK - 1].setBool(!dStricmp(stack[_STK].getString(), stack[_STK - 1].getString()));
|
||||||
|
|
|
||||||
|
|
@ -46,31 +46,21 @@
|
||||||
extern StringStack STR;
|
extern StringStack STR;
|
||||||
extern ConsoleValueStack<4096> gCallStack;
|
extern ConsoleValueStack<4096> gCallStack;
|
||||||
|
|
||||||
S32 ConsoleValue::sBufferOffset = 0;
|
|
||||||
char ConsoleValue::sConversionBuffer[ConversionBufferSize];
|
char ConsoleValue::sConversionBuffer[ConversionBufferSize];
|
||||||
|
|
||||||
void ConsoleValue::init()
|
void ConsoleValue::init()
|
||||||
{
|
{
|
||||||
sBufferOffset = 0;
|
|
||||||
dMemset(sConversionBuffer, '\0', ConversionBufferSize);
|
dMemset(sConversionBuffer, '\0', ConversionBufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* ConsoleValue::convertToBuffer() const
|
char* ConsoleValue::convertToBuffer() const
|
||||||
{
|
{
|
||||||
sBufferOffset += StringSize;
|
|
||||||
if (sBufferOffset > ConversionBufferSize)
|
|
||||||
{
|
|
||||||
dMemset(sConversionBuffer, '\0', ConversionBufferSize);
|
|
||||||
sBufferOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char* offset = sConversionBuffer + sBufferOffset;
|
|
||||||
if (type == ConsoleValueType::cvFloat)
|
if (type == ConsoleValueType::cvFloat)
|
||||||
dSprintf(offset, StringSize, "%.9g", f);
|
dSprintf(sConversionBuffer, ConversionBufferSize, "%.9g", f);
|
||||||
else
|
else
|
||||||
dSprintf(offset, StringSize, "%lld", i);
|
dSprintf(sConversionBuffer, ConversionBufferSize, "%lld", i);
|
||||||
|
|
||||||
return offset;
|
return sConversionBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* ConsoleValue::getConsoleData() const
|
const char* ConsoleValue::getConsoleData() const
|
||||||
|
|
|
||||||
|
|
@ -149,12 +149,10 @@ class ConsoleValue
|
||||||
|
|
||||||
enum Constants
|
enum Constants
|
||||||
{
|
{
|
||||||
ConversionBufferSize = 1024,
|
ConversionBufferSize = 32
|
||||||
StringSize = 16
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static char sConversionBuffer[ConversionBufferSize];
|
static char sConversionBuffer[ConversionBufferSize];
|
||||||
static S32 sBufferOffset;
|
|
||||||
|
|
||||||
char* convertToBuffer() const;
|
char* convertToBuffer() const;
|
||||||
|
|
||||||
|
|
@ -314,6 +312,13 @@ public:
|
||||||
dStrcpy(s, val, static_cast<dsize_t>(len) + 1);
|
dStrcpy(s, val, static_cast<dsize_t>(len) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TORQUE_FORCEINLINE void setStringRef(const char* ref, S32 len)
|
||||||
|
{
|
||||||
|
cleanupData();
|
||||||
|
type = ConsoleValueType::cvString;
|
||||||
|
s = const_cast<char*>(ref);
|
||||||
|
}
|
||||||
|
|
||||||
TORQUE_FORCEINLINE void setBool(const bool val)
|
TORQUE_FORCEINLINE void setBool(const bool val)
|
||||||
{
|
{
|
||||||
cleanupData();
|
cleanupData();
|
||||||
|
|
@ -361,7 +366,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static S32 getConstantBufferCount() { return (S32)ConversionBufferSize / StringSize; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Transparently converts ConsoleValue[] to const char**
|
// Transparently converts ConsoleValue[] to const char**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue