summaryrefslogtreecommitdiff
path: root/profcollectd
diff options
context:
space:
mode:
authorYi Kong <yikong@google.com>2020-09-11 00:07:49 +0800
committerYi Kong <yikong@google.com>2020-09-11 00:29:44 +0800
commitf6e56ff3b0b9135ef8b41024642a9afad1fcb9ec (patch)
tree59cdfae12f648c41c37e9dfbcddfff6adfcf74c1 /profcollectd
parente470453f510299b077a83060a138e99fdb382710 (diff)
downloadextras-f6e56ff3b0b9135ef8b41024642a9afad1fcb9ec.tar.gz
profcollectd: remove option for output paths
Since we enabled SELinux policies for profcollectd builds, these paths are no longer flexiable. Also move report file to the data partition since we don't have permission to write to /sdcard. Test: run profcollect Bug: 79161490 Change-Id: I448b3263491b1a69f14a83834b1b299b5b490846
Diffstat (limited to 'profcollectd')
-rw-r--r--profcollectd/libprofcollectd/scheduler.cpp38
1 files changed, 17 insertions, 21 deletions
diff --git a/profcollectd/libprofcollectd/scheduler.cpp b/profcollectd/libprofcollectd/scheduler.cpp
index 0c88884f..cf707bcc 100644
--- a/profcollectd/libprofcollectd/scheduler.cpp
+++ b/profcollectd/libprofcollectd/scheduler.cpp
@@ -30,20 +30,23 @@
#include "json/json.h"
#include "json/writer.h"
+namespace fs = std::filesystem;
+
// Default option values.
using config_t = std::pair<const char*, std::variant<const int, const char*>>;
static constexpr const config_t CONFIG_BUILD_FINGERPRINT = {"Fingerprint", "unknown"};
static constexpr const config_t CONFIG_COLLECTION_INTERVAL_SEC = {"CollectionInterval", 600};
static constexpr const config_t CONFIG_SAMPLING_PERIOD_MS = {"SamplingPeriod", 500};
-static constexpr const config_t CONFIG_TRACE_OUTDIR = {"TraceDir", "/data/misc/profcollectd/trace"};
-static constexpr const config_t CONFIG_PROFILE_OUTDIR = {"ProfileDir",
- "/data/misc/profcollectd/output"};
static constexpr const config_t CONFIG_BINARY_FILTER = {"BinaryFilter", ""};
+static const fs::path OUT_ROOT_DIR("/data/misc/profcollectd");
+static const fs::path TRACE_DIR(OUT_ROOT_DIR / "trace");
+static const fs::path OUTPUT_DIR(OUT_ROOT_DIR / "output");
+static const fs::path REPORT_FILE(OUT_ROOT_DIR / "report.zip");
+
namespace android {
namespace profcollectd {
-namespace fs = std::filesystem;
using ::android::base::GetIntProperty;
using ::android::base::GetProperty;
@@ -61,7 +64,7 @@ void ClearDir(const fs::path& path) {
}
bool ClearOnConfigChange(const ProfcollectdScheduler::Config& config) {
- const fs::path configFile = config.profileOutputDir / "config.json";
+ const fs::path configFile = OUTPUT_DIR / "config.json";
ProfcollectdScheduler::Config oldConfig{};
// Read old config, if exists.
@@ -72,8 +75,8 @@ bool ClearOnConfigChange(const ProfcollectdScheduler::Config& config) {
if (oldConfig != config) {
LOG(INFO) << "Clearing profiles due to config change.";
- ClearDir(config.traceOutputDir);
- ClearDir(config.profileOutputDir);
+ ClearDir(TRACE_DIR);
+ ClearDir(OUTPUT_DIR);
// Write new config.
std::ofstream ofs(configFile);
@@ -118,11 +121,6 @@ OptError ProfcollectdScheduler::ReadConfig() {
config.samplingPeriod = std::chrono::milliseconds(GetIntProperty(
"persist.profcollectd.sampling_period_ms",
std::get<const int>(CONFIG_SAMPLING_PERIOD_MS.second)));
- config.traceOutputDir = GetProperty("persist.profcollectd.trace_output_dir",
- std::get<const char*>(CONFIG_TRACE_OUTDIR.second));
- config.profileOutputDir =
- GetProperty("persist.profcollectd.output_dir",
- std::get<const char*>(CONFIG_PROFILE_OUTDIR.second));
config.binaryFilter =
GetProperty("persist.profcollectd.binary_filter",
std::get<const char*>(CONFIG_BINARY_FILTER.second));
@@ -162,7 +160,7 @@ OptError ProfcollectdScheduler::TraceOnce(const std::string& tag) {
}
const std::lock_guard<std::mutex> lock(mu);
- bool success = hwtracer->Trace(config.traceOutputDir, tag, config.samplingPeriod);
+ bool success = hwtracer->Trace(TRACE_DIR, tag, config.samplingPeriod);
if (!success) {
static std::string errmsg = "Trace failed";
return errmsg;
@@ -177,7 +175,7 @@ OptError ProfcollectdScheduler::ProcessProfile() {
const std::lock_guard<std::mutex> lock(mu);
bool success =
- hwtracer->Process(config.traceOutputDir, config.profileOutputDir, config.binaryFilter);
+ hwtracer->Process(TRACE_DIR, OUTPUT_DIR, config.binaryFilter);
if (!success) {
static std::string errmsg = "Process profiles failed";
return errmsg;
@@ -192,9 +190,11 @@ OptError ProfcollectdScheduler::CreateProfileReport() {
}
std::vector<fs::path> profiles;
- profiles.insert(profiles.begin(), fs::directory_iterator(config.profileOutputDir),
- fs::directory_iterator());
- bool success = CompressFiles("/sdcard/profile.zip", profiles);
+ if (fs::exists(OUTPUT_DIR)) {
+ profiles.insert(profiles.begin(), fs::directory_iterator(OUTPUT_DIR),
+ fs::directory_iterator());
+ }
+ bool success = CompressFiles(REPORT_FILE, profiles);
if (!success) {
static std::string errmsg = "Compress files failed";
return errmsg;
@@ -213,8 +213,6 @@ std::ostream& operator<<(std::ostream& os, const ProfcollectdScheduler::Config&
root[CONFIG_BUILD_FINGERPRINT.first] = config.buildFingerprint;
root[CONFIG_COLLECTION_INTERVAL_SEC.first] = config.collectionInterval.count();
root[CONFIG_SAMPLING_PERIOD_MS.first] = config.samplingPeriod.count();
- root[CONFIG_TRACE_OUTDIR.first] = config.traceOutputDir.c_str();
- root[CONFIG_PROFILE_OUTDIR.first] = config.profileOutputDir.c_str();
root[CONFIG_BINARY_FILTER.first] = config.binaryFilter.c_str();
writer->write(os, root);
return os;
@@ -233,8 +231,6 @@ std::istream& operator>>(std::istream& is, ProfcollectdScheduler::Config& config
std::chrono::seconds(root[CONFIG_COLLECTION_INTERVAL_SEC.first].asInt64());
config.samplingPeriod =
std::chrono::duration<float>(root[CONFIG_SAMPLING_PERIOD_MS.first].asFloat());
- config.traceOutputDir = root[CONFIG_TRACE_OUTDIR.first].asString();
- config.profileOutputDir = root[CONFIG_PROFILE_OUTDIR.first].asString();
config.binaryFilter = root[CONFIG_BINARY_FILTER.first].asString();
return is;