Android Native性能測試方法

1、概述

性能測試在Java層和Native層的驗證是一個常用操作,在精度要求在ms量級情況下java層可以使用System.currentTimeMillis()或者SystemClock.elapsedRealtime()(推薦使用),在Nativce層可以使用gettimeofday和clock_gettime進行驗證。
(注意:驗證過程中都沒有考慮方法本身的調用耗時,在精度要求爲ms量級情況下基本能滿足要求。)

2、使用方法

  1. Java層使用簡單,推薦使用SystemClock.elapsedRealtime(),原因和使用方法不進行贅述
  2. Native層使用
    使用gettimeofday進行驗證
long long timeCost = 0;
struct timeval startTimestamp, endTimestamp;
gettimeofday(&startTimestamp, NULL);
//Funtion Code to be tested
gettimeofday(&endTimestamp, NULL);
timeCost += (endTimestamp.tv_sec - startTimestamp.tv_sec) * 1000000ll + (endTimestamp.tv_usec - startTimestamp.tv_usec);
__android_log_print(ANDROID_LOG_DEBUG, "PerfTest","function consumes:%lld us", timeCost);	//注意一定是%lld

使用clock_gettime進行驗證

long long timeCost = 0;
struct timespec startTimeSpec, endTimeSpec;
clock_gettime(CLOCK_MONOTONIC, &startTimeSpec);
//Funtion Code to be tested
clock_gettime(CLOCK_MONOTONIC, &endTimeSpec);
timeCost += (endTimeSpec.tv_sec - startTimeSpec.tv_sec) * 1000000000LL + (endTimeSpec.tv_nsec - startTimeSpec.tv_nsec);
__android_log_print(ANDROID_LOG_DEBUG, "PerfTest","function consumes:%lld ns", timeCost);	//注意一定是%lld

3、注意事項

  1. 兩種方法進行耗時打印時都應該使用%lld打印long long類型數值;
  2. clock_gettime的第一個參數可以爲如下參數:
    CLOCK_REALTIME(系統實時時間,隨系統實時時間改變而改變,中間時刻如果系統時間被用戶改動,則對應的時間相應改變);
    CLOCK_MONOTONIC(從系統啓動開始計時,不受系統時間被用戶改變的影響,推薦使用);
    CLOCK_PROCESS_CPUTIME_ID(系統CPU從本進程到當前代碼花費的時間);
    CLOCK_THREAD_CPUTIME_ID(系統CPU從本線程到當前代碼花費的時間)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章