gui_unix.go 627 B

12345678910111213141516171819202122232425262728293031
  1. //+build !windows,!solaris
  2. package main
  3. import (
  4. "syscall"
  5. "time"
  6. )
  7. func init() {
  8. go trackCPUUsage()
  9. }
  10. func trackCPUUsage() {
  11. var prevUsage int64
  12. var prevTime = time.Now().UnixNano()
  13. var rusage syscall.Rusage
  14. for {
  15. time.Sleep(10 * time.Second)
  16. syscall.Getrusage(syscall.RUSAGE_SELF, &rusage)
  17. curTime := time.Now().UnixNano()
  18. timeDiff := curTime - prevTime
  19. curUsage := rusage.Utime.Nano() + rusage.Stime.Nano()
  20. usageDiff := curUsage - prevUsage
  21. cpuUsageLock.Lock()
  22. cpuUsagePercent = 100 * float64(usageDiff) / float64(timeDiff)
  23. cpuUsageLock.Unlock()
  24. prevTime = curTime
  25. prevUsage = curUsage
  26. }
  27. }