blob: 2adf114df5bb4f6c643c171f1c91d3aef03b9e89 [file] [log] [blame]
Than McIntosh7e2f4e92015-03-05 11:05:02 -05001/*
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
Than McIntosh8c7c7db2015-09-03 15:16:04 -040018#ifndef SYSTEM_EXTRAS_PERFPROFD_PERFPROFDCORE_H_
19#define SYSTEM_EXTRAS_PERFPROFD_PERFPROFDCORE_H_
20
Andreas Gampe577e6462018-01-10 20:02:20 -080021#include <functional>
22#include <memory>
23
Andreas Gampe0c09e0e2018-03-13 16:04:01 -070024#include "perfprofd_record-fwd.h"
Than McIntosh8c7c7db2015-09-03 15:16:04 -040025
Andreas Gampe0c09e0e2018-03-13 16:04:01 -070026struct Config;
Andreas Gampe577e6462018-01-10 20:02:20 -080027
Andreas Gampef9a35612018-01-04 14:22:50 -080028namespace perfprofd {
29struct Symbolizer;
30}
31
Andreas Gampe04672dd2018-03-28 14:28:18 -070032void CommonInit(uint32_t use_fixed_seed, const char* dest_dir);
Than McIntosh7e2f4e92015-03-05 11:05:02 -050033
34//
35// This enumeration holds the results of what happened when on an
36// attempted perf profiling run.
37//
38typedef 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//
65PROFILE_RESULT encode_to_proto(const std::string &data_file_path,
Than McIntosh8c7c7db2015-09-03 15:16:04 -040066 const char *encoded_file_path,
Andreas Gampee44ae142017-12-21 10:02:23 -080067 const Config& config,
Andreas Gampef9a35612018-01-04 14:22:50 -080068 unsigned cpu_utilization,
69 perfprofd::Symbolizer* symbolizer);
Than McIntosh8c7c7db2015-09-03 15:16:04 -040070
Andreas Gampe0c09e0e2018-03-13 16:04:01 -070071using HandlerFn = std::function<bool(android::perfprofd::PerfprofdRecord* proto,
Andreas Gampe577e6462018-01-10 20:02:20 -080072 Config* config)>;
73
74void ProfilingLoop(Config& config, HandlerFn handler);
Andreas Gampe04672dd2018-03-28 14:28:18 -070075void ProfilingLoop(std::function<Config*()> config_fn,
76 std::function<void()> update_fn,
77 HandlerFn handler);
Andreas Gampe84a77f72017-12-21 18:15:37 -080078
Than McIntosh8c7c7db2015-09-03 15:16:04 -040079//
80// Exposed for unit testing
81//
82extern unsigned collect_cpu_utilization();
83extern bool get_booting();
84extern bool get_charging();
85extern bool get_camera_active();
86
Andreas Gampe04672dd2018-03-28 14:28:18 -070087bool IsDebugBuild();
88
Than McIntosh8c7c7db2015-09-03 15:16:04 -040089#endif