Merge "More benchmarks."
This commit is contained in:
commit
811a1dd868
4 changed files with 147 additions and 0 deletions
|
@ -22,11 +22,13 @@ cc_defaults {
|
|||
"-Wall",
|
||||
"-Wextra",
|
||||
"-Werror",
|
||||
"-Wno-gcc-compat",
|
||||
"-Wunused",
|
||||
],
|
||||
srcs: [
|
||||
"bionic_benchmarks.cpp",
|
||||
"atomic_benchmark.cpp",
|
||||
"inttypes_benchmark.cpp",
|
||||
"math_benchmark.cpp",
|
||||
"property_benchmark.cpp",
|
||||
"pthread_benchmark.cpp",
|
||||
|
|
34
benchmarks/inttypes_benchmark.cpp
Normal file
34
benchmarks/inttypes_benchmark.cpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <benchmark/benchmark.h>
|
||||
#include "util.h"
|
||||
|
||||
void BM_inttypes_strtoimax(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
strtoimax(" -123", nullptr, 0);
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_inttypes_strtoimax);
|
||||
|
||||
void BM_inttypes_strtoumax(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
strtoumax(" -123", nullptr, 0);
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_inttypes_strtoumax);
|
|
@ -223,6 +223,7 @@ static void BM_stdio_scanf_d(benchmark::State& state) {
|
|||
}
|
||||
BIONIC_BENCHMARK(BM_stdio_scanf_d);
|
||||
|
||||
// Parsing maps is a common use of sscanf with a relatively complex format string.
|
||||
static void BM_stdio_scanf_maps(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
uintptr_t start;
|
||||
|
@ -236,3 +237,71 @@ static void BM_stdio_scanf_maps(benchmark::State& state) {
|
|||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdio_scanf_maps);
|
||||
|
||||
// Hard-coded equivalent of the maps sscanf from libunwindstack/Maps.cpp for a baseline.
|
||||
static int ParseMap(const char* line, const char* /*fmt*/, uintptr_t* start, uintptr_t* end,
|
||||
char* permissions, uintptr_t* offset, int* name_pos) __attribute__((noinline)) {
|
||||
char* str;
|
||||
const char* old_str = line;
|
||||
|
||||
// "%" PRIxPTR "-"
|
||||
*start = strtoul(old_str, &str, 16);
|
||||
if (old_str == str || *str++ != '-') return 0;
|
||||
|
||||
// "%" PRIxPTR " "
|
||||
old_str = str;
|
||||
*end = strtoul(old_str, &str, 16);
|
||||
if (old_str == str || !std::isspace(*str++)) return 0;
|
||||
while (std::isspace(*str)) str++;
|
||||
|
||||
// "%4s "
|
||||
if (*str == '\0') return 0;
|
||||
permissions[0] = *str;
|
||||
str++;
|
||||
permissions[1] = *str;
|
||||
str++;
|
||||
permissions[2] = *str;
|
||||
str++;
|
||||
permissions[3] = *str;
|
||||
str++;
|
||||
permissions[4] = 0;
|
||||
if (!std::isspace(*str++)) return 0;
|
||||
|
||||
// "%" PRIxPTR " "
|
||||
old_str = str;
|
||||
*offset = strtoul(old_str, &str, 16);
|
||||
if (old_str == str || !std::isspace(*str)) return 0;
|
||||
|
||||
// "%*x:%*x "
|
||||
old_str = str;
|
||||
(void)strtoul(old_str, &str, 16);
|
||||
if (old_str == str || *str++ != ':') return 0;
|
||||
if (std::isspace(*str)) return 0;
|
||||
old_str = str;
|
||||
(void)strtoul(str, &str, 16);
|
||||
if (old_str == str || !std::isspace(*str++)) return 0;
|
||||
|
||||
// "%*d "
|
||||
old_str = str;
|
||||
(void)strtoul(old_str, &str, 10);
|
||||
if (old_str == str || (!std::isspace(*str) && *str != '\0')) return 0;
|
||||
while (std::isspace(*str)) str++;
|
||||
|
||||
// "%n"
|
||||
*name_pos = (str - line);
|
||||
return 4;
|
||||
}
|
||||
|
||||
static void BM_stdio_scanf_maps_baseline(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
uintptr_t start;
|
||||
uintptr_t end;
|
||||
uintptr_t offset;
|
||||
char permissions[5];
|
||||
int name_pos;
|
||||
if (ParseMap("6f000000-6f01e000 rwxp 00000000 00:0c 16389419 /system/lib/libcomposer.so",
|
||||
"%" PRIxPTR "-%" PRIxPTR " %4s %" PRIxPTR " %*x:%*x %*d %n",
|
||||
&start, &end, permissions, &offset, &name_pos) != 4) abort();
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdio_scanf_maps_baseline);
|
||||
|
|
|
@ -118,3 +118,45 @@ static void BM_stdlib_mbrtowc(benchmark::State& state) {
|
|||
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(500000));
|
||||
}
|
||||
BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_mbrtowc, "0");
|
||||
|
||||
void BM_stdlib_atoi(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
benchmark::DoNotOptimize(atoi(" -123"));
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdlib_atoi);
|
||||
|
||||
void BM_stdlib_atol(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
benchmark::DoNotOptimize(atol(" -123"));
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdlib_atol);
|
||||
|
||||
void BM_stdlib_strtol(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
benchmark::DoNotOptimize(strtol(" -123", nullptr, 0));
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdlib_strtol);
|
||||
|
||||
void BM_stdlib_strtoll(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
benchmark::DoNotOptimize(strtoll(" -123", nullptr, 0));
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdlib_strtoll);
|
||||
|
||||
void BM_stdlib_strtoul(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
benchmark::DoNotOptimize(strtoul(" -123", nullptr, 0));
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdlib_strtoul);
|
||||
|
||||
void BM_stdlib_strtoull(benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
benchmark::DoNotOptimize(strtoull(" -123", nullptr, 0));
|
||||
}
|
||||
}
|
||||
BIONIC_BENCHMARK(BM_stdlib_strtoull);
|
||||
|
|
Loading…
Reference in a new issue