1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2018 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #include <stdio.h> 12*fb1b10abSAndroid Build Coastguard Worker #include <algorithm> 13*fb1b10abSAndroid Build Coastguard Worker #include <cstdlib> 14*fb1b10abSAndroid Build Coastguard Worker 15*fb1b10abSAndroid Build Coastguard Worker #include "test/bench.h" 16*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/vpx_timer.h" 17*fb1b10abSAndroid Build Coastguard Worker RunNTimes(int n)18*fb1b10abSAndroid Build Coastguard Workervoid AbstractBench::RunNTimes(int n) { 19*fb1b10abSAndroid Build Coastguard Worker for (int r = 0; r < VPX_BENCH_ROBUST_ITER; r++) { 20*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer timer; 21*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer_start(&timer); 22*fb1b10abSAndroid Build Coastguard Worker for (int j = 0; j < n; ++j) { 23*fb1b10abSAndroid Build Coastguard Worker Run(); 24*fb1b10abSAndroid Build Coastguard Worker } 25*fb1b10abSAndroid Build Coastguard Worker vpx_usec_timer_mark(&timer); 26*fb1b10abSAndroid Build Coastguard Worker times_[r] = static_cast<int>(vpx_usec_timer_elapsed(&timer)); 27*fb1b10abSAndroid Build Coastguard Worker } 28*fb1b10abSAndroid Build Coastguard Worker } 29*fb1b10abSAndroid Build Coastguard Worker PrintMedian(const char * title)30*fb1b10abSAndroid Build Coastguard Workervoid AbstractBench::PrintMedian(const char *title) { 31*fb1b10abSAndroid Build Coastguard Worker std::sort(times_, times_ + VPX_BENCH_ROBUST_ITER); 32*fb1b10abSAndroid Build Coastguard Worker const int med = times_[VPX_BENCH_ROBUST_ITER >> 1]; 33*fb1b10abSAndroid Build Coastguard Worker int sad = 0; 34*fb1b10abSAndroid Build Coastguard Worker for (int t = 0; t < VPX_BENCH_ROBUST_ITER; t++) { 35*fb1b10abSAndroid Build Coastguard Worker sad += abs(times_[t] - med); 36*fb1b10abSAndroid Build Coastguard Worker } 37*fb1b10abSAndroid Build Coastguard Worker printf("[%10s] %s %.1f ms ( ±%.1f ms )\n", "BENCH ", title, med / 1000.0, 38*fb1b10abSAndroid Build Coastguard Worker sad / (VPX_BENCH_ROBUST_ITER * 1000.0)); 39*fb1b10abSAndroid Build Coastguard Worker } 40