From 16b804f5cd9f126e2a0143b160c19c00822b4791 Mon Sep 17 00:00:00 2001 From: Leslie Krause Date: Wed, 22 Aug 2018 19:53:22 -0400 Subject: [PATCH] Build 01 - initial beta version --- README.txt | 44 +++++++++++++++++++++++++++++++++++++++++ init.lua | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 README.txt create mode 100644 init.lua diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..64be2f3 --- /dev/null +++ b/README.txt @@ -0,0 +1,44 @@ +Stopwatch Mod v1.0 +By Leslie Krause + +Repository +---------------------- + +Browse source code: + https://bitbucket.org/sorcerykid/stopwatch + +Download archive: + https://bitbucket.org/sorcerykid/stopwatch/get/master.zip + https://bitbucket.org/sorcerykid/stopwatch/get/master.tar.gz + +Installation +---------------------- + + 1) Unzip the archive into the mods directory of your game + 2) Rename the stopwatch-master directory to "stopwatch" + +Source Code License +---------------------- + +The MIT License (MIT) + +Copyright (c) 2018, Leslie Krause (leslie@searstower.org) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..74fd39c --- /dev/null +++ b/init.lua @@ -0,0 +1,57 @@ +-------------------------------------------------------- +-- Minetest :: Stopwatch Mod v1.0 (stopwatch) +-- +-- See README.txt for licensing and release notes. +-- Copyright (c) 2016-2018, Leslie Ellen Krause +-------------------------------------------------------- + +function Stopwatch( scale ) + local clock = minetest.get_us_time + local sprintf = string.format + local getinfo = debug.getinfo + local factors = { us = 1, ms = 1000, s = 1000000 } + local origin = getinfo( 2 ).source + local trials = { } + local id + + if not scale then + scale = "ms" + elseif not factors[ scale ] then + error( "Invalid scale specified, aborting." ) + end + + local function S( desc ) + local i = getinfo( 2, "lf" ) + id = desc or tostring( i.func ) .. ", line " .. i.currentline + local v = trials[ id ] + if not v then + v = { count = 0, delta_t = 0 } + trials[ id ] = v + end + v.start = clock( ) + end + local function S_( is_show, desc ) + if not desc and not id then + local i = getinfo( 2, "lf" ) + id = tostring( i.func ) .. ", line " .. i.currentline + end + local v = trials[ desc or id ] + local delta = clock( ) - v.start + if is_show then + print( sprintf( "** trial count = %9.3f %s @%s", delta / factors[ scale ], scale, id ) ) + end + v.delta_t = v.delta_t + delta + v.count = v.count + 1 + end + minetest.register_on_shutdown( function ( ) + local delta_g = 0 + print( "** " .. origin ) + for i, v in pairs( trials ) do + print( sprintf( "** trial total = %9.3f %s %4d tries %8.3f %s each @%s", + v.delta_t / factors[ scale ], scale, v.count, v.delta_t / v.count / factors[ scale ], scale, i ) ) + delta_g = delta_g + v.delta_t + end + print( sprintf( "** grand total = %9.3f %s", delta_g / factors[ scale ], scale ) ) + end ) + return S, S_ +end