Home | History | Annotate | Download | only in perfprofd
      1 /*
      2 **
      3 ** Copyright 2015, The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 #ifndef SYSTEM_EXTRAS_PERFPROFD_PERFPROFDCORE_H_
     19 #define SYSTEM_EXTRAS_PERFPROFD_PERFPROFDCORE_H_
     20 
     21 #include <functional>
     22 #include <memory>
     23 
     24 #include "perfprofd_record-fwd.h"
     25 
     26 struct Config;
     27 
     28 namespace perfprofd {
     29 struct Symbolizer;
     30 }
     31 
     32 void CommonInit(uint32_t use_fixed_seed, const char* dest_dir);
     33 
     34 //
     35 // This enumeration holds the results of what happened when on an
     36 // attempted perf profiling run.
     37 //
     38 typedef enum {
     39 
     40   // Success
     41   OK_PROFILE_COLLECTION,
     42 
     43   // Fork system call failed (lo mem?)
     44   ERR_FORK_FAILED,
     45 
     46   // Perf ran but crashed or returned a bad exit status
     47   ERR_PERF_RECORD_FAILED,
     48 
     49   // The perf.data encoding process failed somehow
     50   ERR_PERF_ENCODE_FAILED,
     51 
     52   // We tried to open the output file perf.data.encoded but the open failed
     53   ERR_OPEN_ENCODED_FILE_FAILED,
     54 
     55   // Error while writing perf.data.encoded
     56   ERR_WRITE_ENCODED_FILE_FAILED
     57 } PROFILE_RESULT;
     58 
     59 //
     60 // Given a full path to a perf.data file specified by "data_file_path",
     61 // read/summarize/encode the contents into a new file specified
     62 // by "encoded_file_path". Return status indicates whether the operation
     63 // was successful (either OK_PROFILE_COLLECTION or an error of some sort).
     64 //
     65 PROFILE_RESULT encode_to_proto(const std::string &data_file_path,
     66                                const char *encoded_file_path,
     67                                const Config& config,
     68                                unsigned cpu_utilization,
     69                                perfprofd::Symbolizer* symbolizer);
     70 
     71 using HandlerFn = std::function<bool(android::perfprofd::PerfprofdRecord* proto,
     72                                      Config* config)>;
     73 
     74 void ProfilingLoop(Config& config, HandlerFn handler);
     75 void ProfilingLoop(std::function<Config*()> config_fn,
     76                    std::function<void()> update_fn,
     77                    HandlerFn handler);
     78 
     79 //
     80 // Exposed for unit testing
     81 //
     82 extern unsigned collect_cpu_utilization();
     83 extern bool get_booting();
     84 extern bool get_charging();
     85 extern bool get_camera_active();
     86 
     87 bool IsDebugBuild();
     88 
     89 #endif
     90