mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 00:35:18 +03:00
Fixes #1339
This commit is contained in:
parent
e5e378b1b0
commit
5fcba6e193
3 changed files with 15 additions and 41 deletions
|
@ -5357,6 +5357,9 @@ void menuModelCustomScriptOne(uint8_t event)
|
||||||
|
|
||||||
void menuModelCustomScripts(uint8_t event)
|
void menuModelCustomScripts(uint8_t event)
|
||||||
{
|
{
|
||||||
|
lcd_outdezAtt(19*FW, 0, luaGetMemUsed(), 0);
|
||||||
|
lcd_puts(19*FW+1, 0, STR_BYTES);
|
||||||
|
|
||||||
MENU(STR_MENUCUSTOMSCRIPTS, menuTabModel, e_CustomScripts, MAX_SCRIPTS+1, {0, NAVIGATION_LINE_BY_LINE|3/*repeated*/});
|
MENU(STR_MENUCUSTOMSCRIPTS, menuTabModel, e_CustomScripts, MAX_SCRIPTS+1, {0, NAVIGATION_LINE_BY_LINE|3/*repeated*/});
|
||||||
|
|
||||||
uint8_t y;
|
uint8_t y;
|
||||||
|
@ -5390,19 +5393,14 @@ void menuModelCustomScripts(uint8_t event)
|
||||||
lcd_putsnAtt(5*FW, y, sd.file, sizeof(sd.file), 0);
|
lcd_putsnAtt(5*FW, y, sd.file, sizeof(sd.file), 0);
|
||||||
switch (scriptInternalData[scriptIndex].state) {
|
switch (scriptInternalData[scriptIndex].state) {
|
||||||
case SCRIPT_SYNTAX_ERROR:
|
case SCRIPT_SYNTAX_ERROR:
|
||||||
lcd_puts(28*FW+2, y, "(error)");
|
lcd_puts(30*FW+2, y, "(error)");
|
||||||
break;
|
break;
|
||||||
case SCRIPT_KILLED:
|
case SCRIPT_KILLED:
|
||||||
lcd_puts(27*FW+2, y, "(killed)");
|
lcd_puts(29*FW+2, y, "(killed)");
|
||||||
break;
|
|
||||||
case SCRIPT_LEAK:
|
|
||||||
lcd_puts(29*FW+2, y, "(leak)");
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lcd_outdezAtt(31*FW, y, luaGetCpuUsed(scriptIndex));
|
lcd_outdezAtt(34*FW, y, luaGetCpuUsed(scriptIndex));
|
||||||
lcd_putc(31*FW, y, '%');
|
lcd_putc(34*FW, y, '%');
|
||||||
lcd_outdezAtt(34*FW+2, y, luaGetMemUsed(scriptIndex));
|
|
||||||
lcd_putc(34*FW+2, y, 'k');
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
scriptIndex++;
|
scriptIndex++;
|
||||||
|
|
|
@ -1148,8 +1148,6 @@ int luaLoad(const char *filename, ScriptInternalData & sid, ScriptInputsOutputs
|
||||||
{
|
{
|
||||||
int init = 0;
|
int init = 0;
|
||||||
|
|
||||||
uint8_t prev_mem = lua_gc(L, LUA_GCCOUNT, 0);
|
|
||||||
|
|
||||||
sid.instructions = 0;
|
sid.instructions = 0;
|
||||||
sid.state = SCRIPT_OK;
|
sid.state = SCRIPT_OK;
|
||||||
|
|
||||||
|
@ -1199,8 +1197,6 @@ int luaLoad(const char *filename, ScriptInternalData & sid, ScriptInputsOutputs
|
||||||
sid.state = SCRIPT_SYNTAX_ERROR;
|
sid.state = SCRIPT_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
sid.memory = lua_gc(L, LUA_GCCOUNT, 0) - prev_mem;
|
|
||||||
|
|
||||||
if (sid.state != SCRIPT_OK) {
|
if (sid.state != SCRIPT_OK) {
|
||||||
luaFree(sid);
|
luaFree(sid);
|
||||||
}
|
}
|
||||||
|
@ -1345,9 +1341,6 @@ void luaError(uint8_t error)
|
||||||
case SCRIPT_KILLED:
|
case SCRIPT_KILLED:
|
||||||
msg = "Script killed";
|
msg = "Script killed";
|
||||||
break;
|
break;
|
||||||
case SCRIPT_LEAK:
|
|
||||||
msg = "Script memory leak";
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
POPUP_WARNING(msg);
|
POPUP_WARNING(msg);
|
||||||
}
|
}
|
||||||
|
@ -1459,7 +1452,6 @@ void luaTask(uint8_t evt)
|
||||||
for (int i=0; i<luaScriptsCount; i++) {
|
for (int i=0; i<luaScriptsCount; i++) {
|
||||||
ScriptInternalData & sid = scriptInternalData[i];
|
ScriptInternalData & sid = scriptInternalData[i];
|
||||||
if (sid.state == SCRIPT_OK) {
|
if (sid.state == SCRIPT_OK) {
|
||||||
uint8_t prev_mem = lua_gc(L, LUA_GCCOUNT, 0);
|
|
||||||
SET_LUA_INSTRUCTIONS_COUNT(PERMANENT_SCRIPTS_MAX_INSTRUCTIONS);
|
SET_LUA_INSTRUCTIONS_COUNT(PERMANENT_SCRIPTS_MAX_INSTRUCTIONS);
|
||||||
int inputsCount = 0;
|
int inputsCount = 0;
|
||||||
#if defined(SIMU) || defined(DEBUG)
|
#if defined(SIMU) || defined(DEBUG)
|
||||||
|
@ -1532,38 +1524,19 @@ void luaTask(uint8_t evt)
|
||||||
luaFree(sid);
|
luaFree(sid);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sid.memory += lua_gc(L, LUA_GCCOUNT, 0) - prev_mem;
|
|
||||||
if (instructionsPercent > sid.instructions) {
|
if (instructionsPercent > sid.instructions) {
|
||||||
sid.instructions = instructionsPercent;
|
sid.instructions = instructionsPercent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lua_gc(L, LUA_GCCOUNT, 0) > SCRIPTS_MAX_HEAP) {
|
|
||||||
uint8_t max_memory = 0;
|
|
||||||
int8_t max_idx = -1;
|
|
||||||
for (int i=0; i<MAX_SCRIPTS; i++) {
|
|
||||||
ScriptInternalData & sid = scriptInternalData[i];
|
|
||||||
if (sid.state == SCRIPT_OK && sid.memory > max_memory && sid.memory > 15) {
|
|
||||||
max_idx = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (max_idx >= 0) {
|
|
||||||
ScriptInternalData & sid = scriptInternalData[max_idx];
|
|
||||||
TRACE("Script %d killed", max_idx);
|
|
||||||
// TODO Global Warning
|
|
||||||
sid.state = SCRIPT_LEAK;
|
|
||||||
luaFree(sid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lua_gc(L, LUA_GCCOLLECT, 0);
|
lua_gc(L, LUA_GCCOLLECT, 0);
|
||||||
|
|
||||||
#if defined(SIMU) || defined(DEBUG)
|
#if defined(SIMU) || defined(DEBUG)
|
||||||
static int lastgc = 0;
|
static int lastgc = 0;
|
||||||
int gc = 1000*lua_gc(L, LUA_GCCOUNT, 0) + lua_gc(L, LUA_GCCOUNTB, 0);
|
int gc = luaGetMemUsed();
|
||||||
if (gc != lastgc) {
|
if (gc != lastgc) {
|
||||||
lastgc = gc;
|
lastgc = gc;
|
||||||
TRACE("GC Use: %dbytes", gc);
|
TRACE("GC Use: %dbytes", gc);
|
||||||
|
@ -1575,3 +1548,8 @@ void luaTask(uint8_t evt)
|
||||||
maxLuaDuration = t0;
|
maxLuaDuration = t0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int luaGetMemUsed()
|
||||||
|
{
|
||||||
|
return 1000*lua_gc(L, LUA_GCCOUNT, 0) + lua_gc(L, LUA_GCCOUNTB, 0);
|
||||||
|
}
|
||||||
|
|
|
@ -1450,8 +1450,7 @@ enum AUDIO_SOUNDS {
|
||||||
SCRIPT_OK,
|
SCRIPT_OK,
|
||||||
SCRIPT_NOFILE,
|
SCRIPT_NOFILE,
|
||||||
SCRIPT_SYNTAX_ERROR,
|
SCRIPT_SYNTAX_ERROR,
|
||||||
SCRIPT_KILLED,
|
SCRIPT_KILLED
|
||||||
SCRIPT_LEAK
|
|
||||||
};
|
};
|
||||||
enum ScriptReference {
|
enum ScriptReference {
|
||||||
SCRIPT_MIX_FIRST,
|
SCRIPT_MIX_FIRST,
|
||||||
|
@ -1467,7 +1466,6 @@ enum AUDIO_SOUNDS {
|
||||||
int run;
|
int run;
|
||||||
int background;
|
int background;
|
||||||
uint8_t instructions;
|
uint8_t instructions;
|
||||||
uint8_t memory;
|
|
||||||
};
|
};
|
||||||
struct ScriptInputsOutputs {
|
struct ScriptInputsOutputs {
|
||||||
uint8_t inputsCount;
|
uint8_t inputsCount;
|
||||||
|
@ -1487,7 +1485,7 @@ enum AUDIO_SOUNDS {
|
||||||
void luaExec(const char *filename);
|
void luaExec(const char *filename);
|
||||||
void luaLoadMixScript(uint8_t index);
|
void luaLoadMixScript(uint8_t index);
|
||||||
void luaLoadMixScripts();
|
void luaLoadMixScripts();
|
||||||
#define luaGetMemUsed(idx) scriptInternalData[idx].memory
|
int luaGetMemUsed();
|
||||||
#define luaGetCpuUsed(idx) scriptInternalData[idx].instructions
|
#define luaGetCpuUsed(idx) scriptInternalData[idx].instructions
|
||||||
bool isTelemetryScriptAvailable(uint8_t index);
|
bool isTelemetryScriptAvailable(uint8_t index);
|
||||||
#define LUA_INIT()
|
#define LUA_INIT()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue