同步操作将从 liyonghelpme/LuaProfilerForUnity 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//// LuaP.cpp// LuaP//// Created by liyong on 2016年10月18日.// Copyright © 2016年 liyong. All rights reserved.//#include "LuaP.hpp"#include <chrono>#include "easylogging++.h"using namespace std;INITIALIZE_EASYLOGGINGPPextern "C" {static void callhook(lua_State *L, lua_Debug *ar) {lua_Debug previous_ar;lua_getstack(L, 1, &previous_ar);lua_getinfo(L, "n", ar);LuaP::getInstance().CallFunc(ar);}}void LuaP::SetLogPath(string path) {logPath = path;el::Configurations defaultConf;defaultConf.setToDefault();defaultConf.set(el::Level::Info, el::ConfigurationType::Enabled, "true");defaultConf.set(el::Level::Info, el::ConfigurationType::Format, "%datetime %msg");defaultConf.set(el::Level::Info, el::ConfigurationType::ToFile, "true");defaultConf.set(el::Level::Info, el::ConfigurationType::Filename, logPath);el::Loggers::reconfigureLogger("default", defaultConf);}void LuaP::Start(lua_State *L){lua_sethook(L, (lua_Hook)callhook, LUA_MASKCALL | LUA_MASKRET, 0);}void LuaP::CallFunc(lua_Debug *ar) {if(ar->name == NULL) {return;}auto ret = functionCalls.find(ar->name);if(ret == functionCalls.end()){if(ar->event == 1) {return;}shared_ptr<FunctionCallInfo> fc(new FunctionCallInfo());functionCalls[ar->name] = fc;fc->numbers = 0;fc->time = 0;}shared_ptr<FunctionCallInfo> fc1 = functionCalls[ar->name];if(!ar->event) {fc1->startTime = chrono::steady_clock::now();}else {auto diff = chrono::steady_clock::now()-fc1->startTime;auto d = chrono::duration<double, nano> (diff).count();fc1->time += d;fc1->numbers++;}}void LuaP::WriteLog() {for(auto f : functionCalls){auto fn = f.first;auto fc = f.second;LOG(INFO) << "FC:" << fn << ":" << fc->time << ":" << fc->numbers;}functionCalls.clear();}void LuaP::Stop() {el::Loggers::flushAll();}extern "C" {static int profiler_init(lua_State *L){LuaP::getInstance().Start(L);return 0;}static int profiler_stop(lua_State *L) {LuaP::getInstance().Stop();return 0;}static int profiler_setLogPath(lua_State *L) {const char*path = lua_tostring(L, 1);LuaP::getInstance().SetLogPath(path);return 0;}static int profiler_writeLog(lua_State *L) {LuaP::getInstance().WriteLog();return 0;}static const luaL_Reg prof_funcs[] = {{"start", profiler_init},{"stop", profiler_stop},{"setLogPath", profiler_setLogPath},{"writeLog", profiler_writeLog},{NULL, NULL},};int luaopen_luaProfiler(lua_State *L) {luaL_openlib(L, "luaProfiler", prof_funcs, 0);return 1;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。