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