Skip to content

Commit 815f070

Browse files
authored
Compile Lua-CSharp and MoonSharp scripts outside of benchmark code (#8)
* Compile Lua-CSharp scripts outside of benchmark code * Also do MoonSharp
1 parent 22b234a commit 815f070

File tree

2 files changed

+39
-23
lines changed

2 files changed

+39
-23
lines changed

ScriptingBenchmark.Lua-CSharp/LuaCSBenchmark.cs

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
using Lua;
2+
using Lua.CodeAnalysis.Compilation;
3+
using Lua.CodeAnalysis.Syntax;
4+
using Lua.Runtime;
25
using Lua.Standard;
36
using ScriptingBenchmark.Shared;
47

@@ -8,10 +11,11 @@ public class LuaCSBenchmark : IBenchmarkableAsync
811
{
912
public int LoopCount { get; private set; }
1013
private LuaState? _luaVM;
14+
private readonly LuaValue[] _returnBuffer = new LuaValue[1024];
1115

12-
private string? _CSharpToLangCode;
13-
private string? _LangToCSharpCode;
14-
private string? _LangAllocCode;
16+
private Chunk? _CSharpToLangCode;
17+
private Chunk? _LangToCSharpCode;
18+
private Chunk? _LangAllocCode;
1519

1620
public LuaCSBenchmark(int loopCount)
1721
{
@@ -20,9 +24,9 @@ public LuaCSBenchmark(int loopCount)
2024

2125
public void Setup()
2226
{
23-
_CSharpToLangCode = Codes.GetLuaCSharpToLang();
24-
_LangToCSharpCode = Codes.GetLuaLangToCSharp(LoopCount);
25-
_LangAllocCode = Codes.GetLuaAlloc(LoopCount);
27+
_CSharpToLangCode = Compile(Codes.GetLuaCSharpToLang());
28+
_LangToCSharpCode = Compile(Codes.GetLuaLangToCSharp(LoopCount));
29+
_LangAllocCode = Compile(Codes.GetLuaAlloc(LoopCount));
2630

2731
_luaVM = LuaState.Create();
2832
_luaVM.OpenTableLibrary();
@@ -37,6 +41,12 @@ public void Setup()
3741
});
3842
}
3943

44+
private static Chunk Compile(string source)
45+
{
46+
var syntaxTree = LuaSyntaxTree.Parse(source);
47+
return LuaCompiler.Default.Compile(syntaxTree);
48+
}
49+
4050
public void Cleanup()
4151
{
4252
}
@@ -67,9 +77,11 @@ public string LangAlloc()
6777

6878
public async Task<int> CSharpToLangAsync()
6979
{
70-
LuaValue[] result = await _luaVM!.DoStringAsync(_CSharpToLangCode!);
71-
var func = result[0].Read<LuaFunction>();
80+
var returnCount = await _luaVM!.RunAsync(_CSharpToLangCode!, _returnBuffer);
81+
if (returnCount != 1)
82+
throw new InvalidOperationException("Invalid return count");
7283

84+
var func = _returnBuffer[0].Read<LuaFunction>();
7385
var number = 0;
7486

7587
for (int i = 0; i < LoopCount; i++)
@@ -83,16 +95,21 @@ public async Task<int> CSharpToLangAsync()
8395

8496
public async Task<int> LangToCSharpAsync()
8597
{
86-
LuaValue[] result = await _luaVM!.DoStringAsync(_LangToCSharpCode!);
87-
var number = result[0].Read<int>();
98+
var returnCount = await _luaVM!.RunAsync(_LangToCSharpCode!, _returnBuffer);
99+
if (returnCount != 1)
100+
throw new InvalidOperationException("Invalid return count");
101+
102+
var number = _returnBuffer[0].Read<int>();
88103
return number;
89104
}
90105

91106
public async Task<string> LangAllocAsync()
92107
{
93-
LuaValue[] result = await _luaVM!.DoStringAsync(_LangAllocCode!);
108+
var returnCount = await _luaVM!.RunAsync(_LangAllocCode!, _returnBuffer);
109+
if (returnCount != 1)
110+
throw new InvalidOperationException("Invalid return count");
94111

95-
var arr = result[0].Read<LuaTable>();
112+
var arr = _returnBuffer[0].Read<LuaTable>();
96113
var arrItem = arr[LoopCount].Read<LuaTable>();
97114
return arrItem["test"].Read<string>();
98115
}

ScriptingBenchmark.Moonsharp/MoonsharpBenchmark.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ public class MoonsharpBenchmark : IBenchmarkableAsync
77
{
88
public int LoopCount { get; private set; }
99

10-
private string? _CSharpToLangCode;
11-
private string? _LangToCSharpCode;
12-
private string? _LangAllocCode;
10+
private DynValue? _CSharpToLangCode;
11+
private DynValue? _LangToCSharpCode;
12+
private DynValue? _LangAllocCode;
1313

1414
private Script? _luaVM;
1515

@@ -20,24 +20,23 @@ public MoonsharpBenchmark(int loopCount)
2020

2121
public void Setup()
2222
{
23-
_CSharpToLangCode = Codes.GetLuaCSharpToLang();
24-
_LangToCSharpCode = Codes.GetLuaLangToCSharp(LoopCount);
25-
_LangAllocCode = Codes.GetLuaAlloc(LoopCount);
23+
_luaVM = new Script();
2624

25+
_CSharpToLangCode = _luaVM.LoadString(Codes.GetLuaCSharpToLang());
26+
_LangToCSharpCode = _luaVM.LoadString(Codes.GetLuaLangToCSharp(LoopCount));
27+
_LangAllocCode = _luaVM.LoadString(Codes.GetLuaAlloc(LoopCount));
2728

28-
_luaVM = new Script();
2929
_luaVM.Globals["increment"] = (Func<int, int>)(number => number += 1);
3030
}
3131

32-
3332
public void Cleanup()
3433
{
3534

3635
}
3736

3837
public int CSharpToLang()
3938
{
40-
DynValue result = _luaVM!.DoString(_CSharpToLangCode);
39+
DynValue result = _luaVM!.Call(_CSharpToLangCode);
4140

4241
var number = 0;
4342

@@ -52,14 +51,14 @@ public int CSharpToLang()
5251

5352
public int LangToCSharp()
5453
{
55-
DynValue result = _luaVM!.DoString(_LangToCSharpCode);
54+
DynValue result = _luaVM!.Call(_LangToCSharpCode);
5655
var number = (int)result.Number;
5756
return number;
5857
}
5958

6059
public string LangAlloc()
6160
{
62-
DynValue result = _luaVM!.DoString(_LangAllocCode);
61+
DynValue result = _luaVM!.Call(_LangAllocCode);
6362
Table arr = result.Table;
6463
DynValue arrItem = arr.Get(LoopCount);
6564
return arrItem.Table.Get("test").String;

0 commit comments

Comments
 (0)