diff options
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 |
commit | e846cbcce88e7d29c3ca9a71fb82582f3455a2cd (patch) | |
tree | 75019b9124c252f17d33f03c865e23716fba8b27 | |
parent | 86da5d6353e60a84138305f5cb34ca8589ccee3c (diff) | |
parent | 65e26990d1be6863d4983f1af4566beff53e8a53 (diff) |
Merge pull request #5386 from npwoods/profile_lua
Added support for profiling LUA
-rw-r--r-- | src/emu/profiler.cpp | 1 | ||||
-rw-r--r-- | src/emu/profiler.h | 3 | ||||
-rw-r--r-- | src/frontend/mame/luaengine.cpp | 23 | ||||
-rw-r--r-- | src/frontend/mame/luaengine.h | 3 |
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 |