Skip to content

Commit

Permalink
added node for tracking task usage
Browse files Browse the repository at this point in the history
  • Loading branch information
rdaci23 committed Oct 23, 2023
1 parent 1526774 commit efcdb05
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 8 deletions.
36 changes: 29 additions & 7 deletions src/source/core/Tasks.bs
Original file line number Diff line number Diff line change
Expand Up @@ -112,24 +112,26 @@ namespace mc.tasks
mc.tasks.observeNodeField(task, fieldName, callback, sendMode, true, scope)
end if

if isRunning
task.control = "RUN"
end if

if asBoolean(globalObj.isTrackingTaskUsage)
mc.tasks.observeNodeField(task, "state", mc.tasks.onTaskStateChange, "both")
if globalObj.taskUsage = invalid
taskUsage = {}
taskUsage[taskType] = 1
taskUsage = mc.createSGNode("Node")
mc.setOrAddNodeField(taskUsage, taskType, 1)
else
taskUsage = globalObj.taskUsage

if taskUsage[taskType] = invalid
taskUsage[taskType] = 0
mc.setOrAddNodeField(taskUsage, taskType, 0)
end if
taskUsage[taskType] += 1
end if
mc.setOrAddNodeField(globalObj, "taskUsage", taskUsage)
end if

if isRunning
task.control = "RUN"
end if

return task
end function

Expand Down Expand Up @@ -378,6 +380,26 @@ namespace mc.tasks
end if
end function

function onTaskStateChange(state as string, task as mc.types.node)
if state = "done" or state = "stop"
globalObj = mc.getGlobal()
if asBoolean(globalObj.isTrackingTaskUsage)
taskUsage = globalObj.taskUsage
taskType = task.subType()
if taskUsage[taskType] <> invalid
if taskUsage[taskType] > 0
taskUsage[taskType] = taskUsage[taskType] - 1
end if
if taskUsage[taskType] = 0
taskUsage.removeField(taskType)
end if
mc.setOrAddNodeField(globalObj, "taskUsage", taskUsage)
end if
mc.tasks.unObserveNodeField(task, "state", mc.tasks.onTaskStateChange)
end if
end if
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'++ ValueObserver class
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Expand Down
64 changes: 63 additions & 1 deletion src/source/core/Tasks.spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace tests
super.beforeEach()
'bs:disable-next-line
tests.setNodeLogger()
m.global.removeField("taskUsage")
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Expand Down Expand Up @@ -71,7 +72,6 @@ namespace tests
}
}
mc.setOrAddNodeField(m.global, "isTrackingTaskUsage", true)

t = mc.tasks.createTask("mc_RequestTask", fields, m.taskCallback, false, "none", m)
mc.tasks.createTask("mc_RequestTask", fields, m.taskCallback, false, "none", m)
mc.tasks.createTask("mc_LaunchSequence", invalid, m.taskCallback, false, "none", m)
Expand All @@ -98,6 +98,68 @@ namespace tests
m.assertEqual(t.control, "run")
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("onTaskStateChange")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("it gets called when a task changes state and does't do anything if state is run or init")
@params("run")
@params("init")
function _(state)
task = { "id": "task" }
mc.setOrAddNodeField(m.global, "taskUsage", { "mc_RequestTask": 2 })

m.expectNotCalled(task.subType)

mc.tasks.onTaskStateChange(state, task)
m.assertEqual(m.global.taskUsage["mc_RequestTask"], 2)
end function

@it("doesn't do anything if state is done or stop and isTrackingTaskUsage global flag is set to false")
@params("done")
@params("stop")
function _(state)
task = { "id": "task" }
mc.setOrAddNodeField(m.global, "taskUsage", { "mc_RequestTask": 2 })
mc.setOrAddNodeField(m.global, "isTrackingTaskUsage", false)

m.expectNotCalled(task.subType)

mc.tasks.onTaskStateChange(state, task)
m.assertEqual(m.global.taskUsage["mc_RequestTask"], 2)
end function

@it("decreases the task usage if state is done or stop and isTrackingTaskUsage global flag is set to true")
@params("done")
@params("stop")
function _(state)
task = { "id": "task" }
mc.setOrAddNodeField(m.global, "taskUsage", { "mc_RequestTask": 2 })
mc.setOrAddNodeField(m.global, "isTrackingTaskUsage", true)

m.expectCalled(task.subType(), "mc_RequestTask")
m.expectNotCalled(taskUsage.removeField)

mc.tasks.onTaskStateChange(state, task)
m.assertEqual(m.global.taskUsage["mc_RequestTask"], 1)
end function

@it("removes entries from taskUsage if there are no more entries and state is done or stop and isTrackingTaskUsage global flag is set to true")
@params("done")
@params("stop")
function _(state)
task = { "id": "task" }
taskUsage = mc.createSGNode("Node")
mc.setOrAddNodeField(taskUsage, "mc_RequestTask", 1)
mc.setOrAddNodeField(m.global, "taskUsage", taskUsage)
mc.setOrAddNodeField(m.global, "isTrackingTaskUsage", true)

m.expectCalled(task.subType(), "mc_RequestTask")

mc.tasks.onTaskStateChange(state, task)
m.assertInvalid(m.global.taskUsage["mc_RequestTask"])
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("waitAFrame")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Expand Down

0 comments on commit efcdb05

Please sign in to comment.