Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <stdio.h>
     18 
     19 #include <android-base/file.h>
     20 #include <benchmark/benchmark.h>
     21 #include <log/logcat.h>
     22 
     23 // Dump the statistics and report results
     24 
     25 static void logcat_popen_libc(benchmark::State& state, const char* cmd) {
     26     while (state.KeepRunning()) {
     27         FILE* fp = popen(cmd, "r");
     28         std::string ret;
     29         android::base::ReadFdToString(fileno(fp), &ret);
     30         pclose(fp);
     31     }
     32 }
     33 
     34 static void BM_logcat_stat_popen_libc(benchmark::State& state) {
     35     logcat_popen_libc(state, "logcat -b all -S");
     36 }
     37 BENCHMARK(BM_logcat_stat_popen_libc);
     38 
     39 static void logcat_popen_liblogcat(benchmark::State& state, const char* cmd) {
     40     while (state.KeepRunning()) {
     41         android_logcat_context ctx;
     42         FILE* fp = android_logcat_popen(&ctx, cmd);
     43         std::string ret;
     44         android::base::ReadFdToString(fileno(fp), &ret);
     45         android_logcat_pclose(&ctx, fp);
     46     }
     47 }
     48 
     49 static void BM_logcat_stat_popen_liblogcat(benchmark::State& state) {
     50     logcat_popen_liblogcat(state, "logcat -b all -S");
     51 }
     52 BENCHMARK(BM_logcat_stat_popen_liblogcat);
     53 
     54 static void logcat_system_libc(benchmark::State& state, const char* cmd) {
     55     while (state.KeepRunning()) {
     56         system(cmd);
     57     }
     58 }
     59 
     60 static void BM_logcat_stat_system_libc(benchmark::State& state) {
     61     logcat_system_libc(state, "logcat -b all -S >/dev/null 2>/dev/null");
     62 }
     63 BENCHMARK(BM_logcat_stat_system_libc);
     64 
     65 static void logcat_system_liblogcat(benchmark::State& state, const char* cmd) {
     66     while (state.KeepRunning()) {
     67         android_logcat_system(cmd);
     68     }
     69 }
     70 
     71 static void BM_logcat_stat_system_liblogcat(benchmark::State& state) {
     72     logcat_system_liblogcat(state, "logcat -b all -S >/dev/null 2>/dev/null");
     73 }
     74 BENCHMARK(BM_logcat_stat_system_liblogcat);
     75 
     76 // Dump the logs and report results
     77 
     78 static void BM_logcat_dump_popen_libc(benchmark::State& state) {
     79     logcat_popen_libc(state, "logcat -b all -d");
     80 }
     81 BENCHMARK(BM_logcat_dump_popen_libc);
     82 
     83 static void BM_logcat_dump_popen_liblogcat(benchmark::State& state) {
     84     logcat_popen_liblogcat(state, "logcat -b all -d");
     85 }
     86 BENCHMARK(BM_logcat_dump_popen_liblogcat);
     87 
     88 static void BM_logcat_dump_system_libc(benchmark::State& state) {
     89     logcat_system_libc(state, "logcat -b all -d >/dev/null 2>/dev/null");
     90 }
     91 BENCHMARK(BM_logcat_dump_system_libc);
     92 
     93 static void BM_logcat_dump_system_liblogcat(benchmark::State& state) {
     94     logcat_system_liblogcat(state, "logcat -b all -d >/dev/null 2>/dev/null");
     95 }
     96 BENCHMARK(BM_logcat_dump_system_liblogcat);
     97