123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- discard """
- cmd: "nim $target --threads:on -d:release -d:useRealtimeGC $options $file"
- joinable:false
- """
- #[
- was: cmd: "nim $target --debuginfo $options $file"
- these dont' seem needed --debuginfo
- nor these from the previous main.nim.cfg: --app:console
- ]#
- #[
- Test the realtime GC without linking nimrtl.dll/so.
- To build by hand and run the test for 35 minutes:
- `nim r --threads:on -d:runtimeSecs:2100 tests/realtimeGC/tmain.nim`
- ]#
- import times, os, strformat, strutils
- from stdtest/specialpaths import buildDir
- # import threadpool
- const runtimeSecs {.intdefine.} = 5
- const file = "shared.nim"
- const dllname = buildDir / (DynlibFormat % "shared_D20210524T180506")
- static:
- # D20210524T180826:here we compile the dependency on the fly
- let nim = getCurrentCompilerExe()
- let (output, exitCode) = gorgeEx(fmt"{nim} c -o:{dllname} --debuginfo --app:lib --threads:on -d:release -d:useRealtimeGC {file}")
- doAssert exitCode == 0, output
- proc status() {.importc: "status", dynlib: dllname.}
- proc count() {.importc: "count", dynlib: dllname.}
- proc checkOccupiedMem() {.importc: "checkOccupiedMem", dynlib: dllname.}
- proc process() =
- let startTime = getTime()
- let runTime = cast[Time](runtimeSecs)
- var accumTime: Time
- while accumTime < runTime:
- for i in 0..10:
- count()
- # echo("1. sleeping... ")
- sleep(500)
- for i in 0..10:
- status()
- # echo("2. sleeping... ")
- sleep(500)
- checkOccupiedMem()
- accumTime = cast[Time]((getTime() - startTime))
- # echo("--- Minutes left to run: ", int(int(runTime-accumTime)/60))
- proc main() =
- process()
- # parallel:
- # for i in 0..0:
- # spawn process()
- # sync()
- main()
|