Chromium 的 time API

fcamel
fcamel的程式開發心得
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 的影響。

--

--