diff --git a/test/app/fiber.result b/test/app/fiber.result index 4a094939f9c6..8eb506bd5e90 100644 --- a/test/app/fiber.result +++ b/test/app/fiber.result @@ -1469,6 +1469,16 @@ sum = 0 fiber.top_enable() --- ... +function isnan(num)\ + return num ~= num\ +end +--- +... +-- Wait till a full event loop iteration passes, so that +-- top() contains meaningful results. +while isnan(fiber.top().cpu["1/sched"].instant) do fiber.yield() end +--- +... a = fiber.top() --- ... @@ -1504,9 +1514,9 @@ for k, v in pairs(a) do\ end --- ... -sum_inst +sum_inst > 99 and sum_inst < 101 or sum_inst --- -- 100 +- true ... -- not exact due to accumulated integer division errors sum_avg > 99 and sum_avg < 101 or sum_avg @@ -1517,24 +1527,28 @@ tbl = nil --- ... f = fiber.new(function()\ - for i = 1,1000 do end\ - fiber.yield()\ - tbl = fiber.top().cpu[fiber.self().id()..'/'..fiber.self().name()]\ + local fiber_key = fiber.self().id()..'/'..fiber.self().name()\ + tbl = fiber.top().cpu[fiber_key]\ + while tbl.time == 0 do\ + for i = 1,1000 do end\ + fiber.yield()\ + tbl = fiber.top().cpu[fiber_key]\ + end\ end) --- ... -while f:status() ~= 'dead' do fiber.sleep(0.01) end +while f:status() ~= 'dead' do fiber.yield() end --- ... -tbl["average"] > 0 +tbl.average > 0 --- - true ... -tbl["instant"] > 0 +tbl.instant > 0 --- - true ... -tbl["time"] > 0 +tbl.time > 0 --- - true ... diff --git a/test/app/fiber.test.lua b/test/app/fiber.test.lua index 38b85d554036..24cb8b4924a3 100644 --- a/test/app/fiber.test.lua +++ b/test/app/fiber.test.lua @@ -634,6 +634,14 @@ sum = 0 -- gh-2694 fiber.top() fiber.top_enable() +function isnan(num)\ + return num ~= num\ +end + +-- Wait till a full event loop iteration passes, so that +-- top() contains meaningful results. +while isnan(fiber.top().cpu["1/sched"].instant) do fiber.yield() end + a = fiber.top() type(a) -- scheduler is present in fiber.top() @@ -652,19 +660,23 @@ for k, v in pairs(a) do\ sum_avg = sum_avg + v["average"]\ end -sum_inst +sum_inst > 99 and sum_inst < 101 or sum_inst -- not exact due to accumulated integer division errors sum_avg > 99 and sum_avg < 101 or sum_avg tbl = nil f = fiber.new(function()\ - for i = 1,1000 do end\ - fiber.yield()\ - tbl = fiber.top().cpu[fiber.self().id()..'/'..fiber.self().name()]\ + local fiber_key = fiber.self().id()..'/'..fiber.self().name()\ + tbl = fiber.top().cpu[fiber_key]\ + while tbl.time == 0 do\ + for i = 1,1000 do end\ + fiber.yield()\ + tbl = fiber.top().cpu[fiber_key]\ + end\ end) -while f:status() ~= 'dead' do fiber.sleep(0.01) end -tbl["average"] > 0 -tbl["instant"] > 0 -tbl["time"] > 0 +while f:status() ~= 'dead' do fiber.yield() end +tbl.average > 0 +tbl.instant > 0 +tbl.time > 0 fiber.top_disable() fiber.top()