171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn/* 271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * Copyright (C) 2017 The Android Open Source Project 371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * 471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License"); 571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * you may not use this file except in compliance with the License. 671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * You may obtain a copy of the License at 771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * 871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * http://www.apache.org/licenses/LICENSE-2.0 971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * 1071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * Unless required by applicable law or agreed to in writing, software 1171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS, 1271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * See the License for the specific language governing permissions and 1471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn * limitations under the License. 1571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn */ 1671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 1771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn#include <stdio.h> 1871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 1971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn#include <android-base/file.h> 2071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn#include <benchmark/benchmark.h> 2171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn#include <log/logcat.h> 2271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 2371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn// Dump the statistics and report results 2471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 2571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void logcat_popen_libc(benchmark::State& state, const char* cmd) { 2671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn while (state.KeepRunning()) { 2771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn FILE* fp = popen(cmd, "r"); 2871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn std::string ret; 2971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn android::base::ReadFdToString(fileno(fp), &ret); 3071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn pclose(fp); 3171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn } 3271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 3371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 3471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_stat_popen_libc(benchmark::State& state) { 3571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_popen_libc(state, "logcat -b all -S"); 3671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 3771919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_stat_popen_libc); 3871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 3971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void logcat_popen_liblogcat(benchmark::State& state, const char* cmd) { 4071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn while (state.KeepRunning()) { 4171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn android_logcat_context ctx; 4271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn FILE* fp = android_logcat_popen(&ctx, cmd); 4371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn std::string ret; 4471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn android::base::ReadFdToString(fileno(fp), &ret); 4571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn android_logcat_pclose(&ctx, fp); 4671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn } 4771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 4871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 4971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_stat_popen_liblogcat(benchmark::State& state) { 5071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_popen_liblogcat(state, "logcat -b all -S"); 5171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 5271919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_stat_popen_liblogcat); 5371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 5471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void logcat_system_libc(benchmark::State& state, const char* cmd) { 5571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn while (state.KeepRunning()) { 5671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn system(cmd); 5771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn } 5871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 5971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 6071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_stat_system_libc(benchmark::State& state) { 6171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_system_libc(state, "logcat -b all -S >/dev/null 2>/dev/null"); 6271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 6371919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_stat_system_libc); 6471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 6571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void logcat_system_liblogcat(benchmark::State& state, const char* cmd) { 6671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn while (state.KeepRunning()) { 6771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn android_logcat_system(cmd); 6871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn } 6971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 7071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 7171919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_stat_system_liblogcat(benchmark::State& state) { 7271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_system_liblogcat(state, "logcat -b all -S >/dev/null 2>/dev/null"); 7371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 7471919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_stat_system_liblogcat); 7571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 7671919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn// Dump the logs and report results 7771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 7871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_dump_popen_libc(benchmark::State& state) { 7971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_popen_libc(state, "logcat -b all -d"); 8071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 8171919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_dump_popen_libc); 8271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 8371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_dump_popen_liblogcat(benchmark::State& state) { 8471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_popen_liblogcat(state, "logcat -b all -d"); 8571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 8671919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_dump_popen_liblogcat); 8771919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 8871919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_dump_system_libc(benchmark::State& state) { 8971919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_system_libc(state, "logcat -b all -d >/dev/null 2>/dev/null"); 9071919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 9171919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_dump_system_libc); 9271919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn 9371919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzynstatic void BM_logcat_dump_system_liblogcat(benchmark::State& state) { 9471919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn logcat_system_liblogcat(state, "logcat -b all -d >/dev/null 2>/dev/null"); 9571919f4f5d29745b3ba65e16e02826f400a78d5eMark Salyzyn} 9671919f4f5d29745b3ba65e16e02826f400a78d5eMark SalyzynBENCHMARK(BM_logcat_dump_system_liblogcat); 97