summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2019-07-24 14:20:23 -0400
committer GitHub <noreply@github.com>2019-07-24 14:20:23 -0400
commite846cbcce88e7d29c3ca9a71fb82582f3455a2cd (patch)
tree75019b9124c252f17d33f03c865e23716fba8b27
parent86da5d6353e60a84138305f5cb34ca8589ccee3c (diff)
parent65e26990d1be6863d4983f1af4566beff53e8a53 (diff)
Merge pull request #5386 from npwoods/profile_lua
Added support for profiling LUA
-rw-r--r--src/emu/profiler.cpp1
-rw-r--r--src/emu/profiler.h3
-rw-r--r--src/frontend/mame/luaengine.cpp23
-rw-r--r--src/frontend/mame/luaengine.h3
4 files changed, 24 insertions, 6 deletions
diff --git a/src/emu/profiler.cpp b/src/emu/profiler.cpp
index 8678c917447..c3c0ea05608 100644
--- a/src/emu/profiler.cpp
+++ b/src/emu/profiler.cpp
@@ -159,6 +159,7 @@ void real_profiler_state::update_text(running_machine &machine)
{ PROFILER_INPUT, "Input Processing" },
{ PROFILER_MOVIE_REC, "Movie Recording" },
{ PROFILER_LOGERROR, "Error Logging" },
+ { PROFILER_LUA, "LUA" },
{ PROFILER_EXTRA, "Unaccounted/Overhead" },
{ PROFILER_USER1, "User 1" },
{ PROFILER_USER2, "User 2" },
diff --git a/src/emu/profiler.h b/src/emu/profiler.h
index 8000840af9a..99712afe029 100644
--- a/src/emu/profiler.h
+++ b/src/emu/profiler.h
@@ -48,9 +48,10 @@ enum profile_type
PROFILER_BLIT,
PROFILER_SOUND,
PROFILER_TIMER_CALLBACK,
- PROFILER_INPUT, // input.c and inptport.c
+ PROFILER_INPUT, // input.cpp and inptport.cpp
PROFILER_MOVIE_REC, // movie recording
PROFILER_LOGERROR, // logerror
+ PROFILER_LUA, // LUA
PROFILER_EXTRA, // everything else
// the USER types are available to driver writers to profile
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index f50c1d20907..8ca06e1459e 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -592,7 +592,7 @@ sol::object lua_engine::call_plugin(const std::string &name, sol::object in)
sol::object obj = sol().registry()[field];
if(obj.is<sol::protected_function>())
{
- auto res = (obj.as<sol::protected_function>())(in);
+ auto res = invoke(obj.as<sol::protected_function>(), in);
if(!res.valid())
{
sol::error err = res;
@@ -610,7 +610,7 @@ void lua_engine::menu_populate(const std::string &menu, std::vector<std::tuple<s
sol::object obj = sol().registry()[field];
if(obj.is<sol::protected_function>())
{
- auto res = (obj.as<sol::protected_function>())();
+ auto res = invoke(obj.as<sol::protected_function>());
if(!res.valid())
{
sol::error err = res;
@@ -638,7 +638,7 @@ bool lua_engine::menu_callback(const std::string &menu, int index, const std::st
sol::object obj = sol().registry()[field];
if(obj.is<sol::protected_function>())
{
- auto res = (obj.as<sol::protected_function>())(index, event);
+ auto res = invoke(obj.as<sol::protected_function>(), index, event);
if(!res.valid())
{
sol::error err = res;
@@ -659,7 +659,7 @@ bool lua_engine::execute_function(const char *id)
{
if(func.second.is<sol::protected_function>())
{
- auto ret = (func.second.as<sol::protected_function>())();
+ auto ret = invoke(func.second.as<sol::protected_function>());
if(!ret.valid())
{
sol::error err = ret;
@@ -2554,7 +2554,7 @@ void lua_engine::run(sol::load_result res)
{
if(res.valid())
{
- auto ret = (res.get<sol::protected_function>())();
+ auto ret = invoke(res.get<sol::protected_function>());
if(!ret.valid())
{
sol::error err = ret;
@@ -2582,3 +2582,16 @@ void lua_engine::load_string(const char *value)
{
run(sol().load(value));
}
+
+//-------------------------------------------------
+// invoke - invokes a function, wrapping profiler
+//-------------------------------------------------
+
+template<typename TFunc, typename... TArgs>
+sol::protected_function_result lua_engine::invoke(TFunc &&func, TArgs&&... args)
+{
+ g_profiler.start(PROFILER_LUA);
+ sol::protected_function_result result = func(std::forward<TArgs>(args)...);
+ g_profiler.stop();
+ return result;
+}
diff --git a/src/frontend/mame/luaengine.h b/src/frontend/mame/luaengine.h
index c8189f82083..2937b723b74 100644
--- a/src/frontend/mame/luaengine.h
+++ b/src/frontend/mame/luaengine.h
@@ -166,6 +166,9 @@ private:
bool busy;
bool yield;
};
+
+ template<typename TFunc, typename... TArgs>
+ sol::protected_function_result invoke(TFunc &&func, TArgs&&... args);
};
#endif // MAME_FRONTEND_MAME_LUAENGINE_H