Chromium 的 time API
Published in
2 min readApr 29, 2018
使用 Chromium 的程式久了以後,發覺 Chromium 是不錯的學習寶典,有任何需求可以直接參考 Chromium 的程式,裡面會有跨平台的解法,可以直接拿來用,或是參考關鍵部份,簡化後取用必要的部份。
Chromium 的 base/time/time.h 定義了以下 API:
- Time: 系統時間,也就是一般使用者關心的「現在是幾點」。使用者改了作業系統的時間,這個時間會跟著改變。
- TimeTicks: monotonically non-decreasing clock time。適合用來測量程式相對的時間,比方使用者滑動螢幕產生一堆 touch event / gesture event,這些 event 帶的時間,需要確保它們的相對值是正確的。或是用來測量網路封包來回花的時間。
- ThreadTicks: 和 TimeTicks 類似,著重兩個 ThreadTicks 的差值,而非單一 ThreadTicks 的值。只有 thread 執行的時候才會增加,適合測量目前 thread 執行了多少 CPU time。
POSIX 的實作 (base/time/time_now_posix.cc) 滿單純的:
- Time::Now(): 用 gettimeofday()
- TimeTicks::Now(): 用 clock_gettime() 配 flag CLOCK_MONOTONIC
- ThreadTicks::Now(): 用 clock_gettime() 配 flag CLOCK_THREAD_CPUTIME_ID
有了 TimeTicks 和 ThreadTicks,可以在觀察程式範圍用兩者計算時間差,就知道是否太慢,以及是否為 CPU bound。若 TimeTicks 的時間差很大,ThreadTicks 時間差很小,有可能是 lock (在等別的 thread) 或 IO bound 的影響。