@quenty/servicebag 11.2.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/package.json +2 -2
- package/src/Shared/ServiceBag.lua +18 -0
- package/src/Shared/ServiceInitLogger.lua +100 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [11.3.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/servicebag@11.2.0...@quenty/servicebag@11.3.0) (2024-05-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* Add logging to service bag ([d1a2804](https://github.com/Quenty/NevermoreEngine/commit/d1a28048a9fc02d8ab2d272f7a0eb1c81c4f60f6))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [11.2.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/servicebag@11.1.0...@quenty/servicebag@11.2.0) (2024-04-27)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @quenty/servicebag
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/servicebag",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.3.0",
|
|
4
4
|
"description": "Service providing mechanisms for Nevermore",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"publishConfig": {
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "afbb66378d568ebb9450db13de0b4fe61113a2f1"
|
|
37
37
|
}
|
|
@@ -26,6 +26,7 @@ local require = require(script.Parent.loader).load(script)
|
|
|
26
26
|
|
|
27
27
|
local Signal = require("Signal")
|
|
28
28
|
local BaseObject = require("BaseObject")
|
|
29
|
+
local ServiceInitLogger = require("ServiceInitLogger")
|
|
29
30
|
|
|
30
31
|
--[=[
|
|
31
32
|
@interface Service
|
|
@@ -61,6 +62,9 @@ function ServiceBag.new(parentProvider)
|
|
|
61
62
|
self._initializing = false
|
|
62
63
|
self._destructing = false
|
|
63
64
|
|
|
65
|
+
self._serviceInitLogger = ServiceInitLogger.new("initialized")
|
|
66
|
+
self._serviceStartLogger = ServiceInitLogger.new("started")
|
|
67
|
+
|
|
64
68
|
self._serviceTypesToStart = {}
|
|
65
69
|
|
|
66
70
|
self._destroyingSignal = Signal.new()
|
|
@@ -68,6 +72,11 @@ function ServiceBag.new(parentProvider)
|
|
|
68
72
|
return self
|
|
69
73
|
end
|
|
70
74
|
|
|
75
|
+
function ServiceBag:PrintInitialization()
|
|
76
|
+
self._serviceInitLogger:Print()
|
|
77
|
+
self._serviceStartLogger:Print()
|
|
78
|
+
end
|
|
79
|
+
|
|
71
80
|
--[=[
|
|
72
81
|
Returns whether the value is a serviceBag
|
|
73
82
|
|
|
@@ -161,9 +170,13 @@ function ServiceBag:Start()
|
|
|
161
170
|
if service.Start then
|
|
162
171
|
local current
|
|
163
172
|
task.spawn(function()
|
|
173
|
+
local stopClock = self._serviceStartLogger:StartInitClock(serviceName)
|
|
174
|
+
|
|
164
175
|
debug.setmemorycategory(serviceName)
|
|
165
176
|
current = coroutine.running()
|
|
166
177
|
service:Start()
|
|
178
|
+
|
|
179
|
+
stopClock()
|
|
167
180
|
end)
|
|
168
181
|
|
|
169
182
|
local isDead = coroutine.status(current) == "dead"
|
|
@@ -272,8 +285,13 @@ function ServiceBag:_initService(serviceType)
|
|
|
272
285
|
local current
|
|
273
286
|
task.spawn(function()
|
|
274
287
|
debug.setmemorycategory(serviceName)
|
|
288
|
+
|
|
289
|
+
local stopClock = self._serviceInitLogger:StartInitClock(serviceName)
|
|
290
|
+
|
|
275
291
|
current = coroutine.running()
|
|
276
292
|
service:Init(self)
|
|
293
|
+
|
|
294
|
+
stopClock()
|
|
277
295
|
end)
|
|
278
296
|
|
|
279
297
|
local isDead = coroutine.status(current) == "dead"
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
--[=[
|
|
2
|
+
@class ServiceInitLogger
|
|
3
|
+
]=]
|
|
4
|
+
|
|
5
|
+
local require = require(script.Parent.loader).load(script)
|
|
6
|
+
|
|
7
|
+
local EPSILON = 1e-6
|
|
8
|
+
|
|
9
|
+
local ServiceInitLogger = {}
|
|
10
|
+
ServiceInitLogger.ClassName = "ServiceInitLogger"
|
|
11
|
+
ServiceInitLogger.__index = ServiceInitLogger
|
|
12
|
+
|
|
13
|
+
function ServiceInitLogger.new(action)
|
|
14
|
+
assert(type(action) == "string", "Bad action")
|
|
15
|
+
local self = setmetatable({}, ServiceInitLogger)
|
|
16
|
+
|
|
17
|
+
self._action = action
|
|
18
|
+
self._rootNode = {
|
|
19
|
+
name = "ROOT";
|
|
20
|
+
children = {}
|
|
21
|
+
}
|
|
22
|
+
self._stack = { self._rootNode }
|
|
23
|
+
self._totalTimeUsed = 0
|
|
24
|
+
self._initIndent = 0
|
|
25
|
+
self._totalServices = 0
|
|
26
|
+
|
|
27
|
+
self._startLogs = {}
|
|
28
|
+
|
|
29
|
+
return self
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
function ServiceInitLogger:StartInitClock(serviceName)
|
|
33
|
+
assert(type(serviceName) == "string", "serviceName")
|
|
34
|
+
|
|
35
|
+
local startTime = os.clock()
|
|
36
|
+
|
|
37
|
+
local initialIndent = self._initIndent
|
|
38
|
+
local initialTotalTimeUsed = self._totalTimeUsed
|
|
39
|
+
local initialTotalServices = self._totalServices
|
|
40
|
+
|
|
41
|
+
self._initIndent = initialIndent + 1
|
|
42
|
+
self._totalServices = self._totalServices + 1
|
|
43
|
+
|
|
44
|
+
local parent = self._stack[#self._stack]
|
|
45
|
+
local entry = {
|
|
46
|
+
name = serviceName;
|
|
47
|
+
children = {};
|
|
48
|
+
log = string.format("%sService is not loaded", string.rep(" ", initialIndent), serviceName)
|
|
49
|
+
}
|
|
50
|
+
table.insert(parent.children, entry)
|
|
51
|
+
table.insert(self._stack, entry)
|
|
52
|
+
|
|
53
|
+
return function()
|
|
54
|
+
for i=#self._stack, 1, -1 do
|
|
55
|
+
if self._stack[i] == entry then
|
|
56
|
+
table.remove(self._stack, i)
|
|
57
|
+
break
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
local timeUsed = (os.clock() - startTime)
|
|
62
|
+
local otherServiceTime = self._totalTimeUsed - initialTotalTimeUsed
|
|
63
|
+
local internalTimeUsed = timeUsed - otherServiceTime
|
|
64
|
+
local totalServices = self._totalServices - initialTotalServices - 1
|
|
65
|
+
|
|
66
|
+
self._totalTimeUsed = self._totalTimeUsed + internalTimeUsed
|
|
67
|
+
self._initIndent = self._initIndent - 1
|
|
68
|
+
|
|
69
|
+
if math.abs(internalTimeUsed - timeUsed) <= EPSILON then
|
|
70
|
+
entry.log = string.format("%sService %s %s in %0.2f ms",
|
|
71
|
+
string.rep(" ", initialIndent),
|
|
72
|
+
serviceName,
|
|
73
|
+
self._action,
|
|
74
|
+
1000*internalTimeUsed)
|
|
75
|
+
else
|
|
76
|
+
entry.log = string.format("%sService %s %s in %0.2f ms (%0.2f ms total for %d descendants)",
|
|
77
|
+
string.rep(" ", initialIndent),
|
|
78
|
+
serviceName,
|
|
79
|
+
self._action,
|
|
80
|
+
1000*internalTimeUsed,
|
|
81
|
+
1000*timeUsed,
|
|
82
|
+
totalServices)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
function ServiceInitLogger:Print()
|
|
88
|
+
local function recurse(node)
|
|
89
|
+
print(node.log)
|
|
90
|
+
for _, childNode in pairs(node.children) do
|
|
91
|
+
recurse(childNode)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
for _, child in pairs(self._rootNode.children) do
|
|
96
|
+
recurse(child)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
return ServiceInitLogger
|