summaryrefslogtreecommitdiff
path: root/profcollectd
diff options
context:
space:
mode:
Diffstat (limited to 'profcollectd')
-rw-r--r--profcollectd/libprofcollectd/binder_service.cpp39
-rw-r--r--profcollectd/libprofcollectd/binder_service.h3
-rw-r--r--profcollectd/libprofcollectd/config_utils.cpp23
-rw-r--r--profcollectd/libprofcollectd/config_utils.h1
-rw-r--r--profcollectd/libprofcollectd/scheduler.cpp2
5 files changed, 53 insertions, 15 deletions
diff --git a/profcollectd/libprofcollectd/binder_service.cpp b/profcollectd/libprofcollectd/binder_service.cpp
index 0e9534b3..1fbead9b 100644
--- a/profcollectd/libprofcollectd/binder_service.cpp
+++ b/profcollectd/libprofcollectd/binder_service.cpp
@@ -20,6 +20,7 @@
#include <android-base/logging.h>
+#include "config_utils.h"
#include "hwtrace_provider.h"
#include "scheduler.h"
@@ -31,7 +32,17 @@ using ::com::android::server::profcollect::IProfCollectd;
namespace {
-Status HandleIfError(const std::function<OptError()>& action) {
+static constexpr const char* NOT_ENABLED_ERRMSG =
+ "profcollectd is not enabled through device config.";
+static constexpr config_t CONFIG_ENABLED = {"enabled", "0"}; // Disabled by default.
+
+} // namespace
+
+Status ProfcollectdBinder::ForwardScheduler(const std::function<OptError()>& action) {
+ if (Scheduler == nullptr) {
+ return Status::fromExceptionCode(1, NOT_ENABLED_ERRMSG);
+ }
+
auto errmsg = action();
if (errmsg) {
LOG(ERROR) << errmsg.value();
@@ -40,39 +51,43 @@ Status HandleIfError(const std::function<OptError()>& action) {
return Status::ok();
}
-} // namespace
-
ProfcollectdBinder::ProfcollectdBinder() {
- ProfcollectdBinder::Scheduler = std::make_unique<ProfcollectdScheduler>();
- LOG(INFO) << "Binder service started";
+ static bool enabled = getConfigFlagBool(CONFIG_ENABLED);
+
+ if (enabled) {
+ ProfcollectdBinder::Scheduler = std::make_unique<ProfcollectdScheduler>();
+ LOG(INFO) << "Binder service started";
+ } else {
+ LOG(INFO) << NOT_ENABLED_ERRMSG;
+ }
}
Status ProfcollectdBinder::ReadConfig() {
- return HandleIfError([=]() { return Scheduler->ReadConfig(); });
+ return ForwardScheduler([=]() { return Scheduler->ReadConfig(); });
}
Status ProfcollectdBinder::ScheduleCollection() {
- return HandleIfError([=]() { return Scheduler->ScheduleCollection(); });
+ return ForwardScheduler([=]() { return Scheduler->ScheduleCollection(); });
}
Status ProfcollectdBinder::TerminateCollection() {
- return HandleIfError([=]() { return Scheduler->TerminateCollection(); });
+ return ForwardScheduler([=]() { return Scheduler->TerminateCollection(); });
}
Status ProfcollectdBinder::TraceOnce(const std::string& tag) {
- return HandleIfError([=]() { return Scheduler->TraceOnce(tag); });
+ return ForwardScheduler([=]() { return Scheduler->TraceOnce(tag); });
}
Status ProfcollectdBinder::ProcessProfile() {
- return HandleIfError([=]() { return Scheduler->ProcessProfile(); });
+ return ForwardScheduler([=]() { return Scheduler->ProcessProfile(); });
}
Status ProfcollectdBinder::CreateProfileReport() {
- return HandleIfError([=]() { return Scheduler->CreateProfileReport(); });
+ return ForwardScheduler([=]() { return Scheduler->CreateProfileReport(); });
}
Status ProfcollectdBinder::GetSupportedProvider(std::string* provider) {
- return HandleIfError([=]() { return Scheduler->GetSupportedProvider(*provider); });
+ return ForwardScheduler([=]() { return Scheduler->GetSupportedProvider(*provider); });
}
} // namespace profcollectd
diff --git a/profcollectd/libprofcollectd/binder_service.h b/profcollectd/libprofcollectd/binder_service.h
index e269b56f..28c69958 100644
--- a/profcollectd/libprofcollectd/binder_service.h
+++ b/profcollectd/libprofcollectd/binder_service.h
@@ -42,6 +42,9 @@ class ProfcollectdBinder : public BinderService<ProfcollectdBinder>,
protected:
inline static std::unique_ptr<ProfcollectdScheduler> Scheduler;
+
+ private:
+ binder::Status ForwardScheduler(const std::function<OptError()>& action);
};
} // namespace profcollectd
diff --git a/profcollectd/libprofcollectd/config_utils.cpp b/profcollectd/libprofcollectd/config_utils.cpp
index 40a03427..ce92017d 100644
--- a/profcollectd/libprofcollectd/config_utils.cpp
+++ b/profcollectd/libprofcollectd/config_utils.cpp
@@ -16,6 +16,8 @@
#include "config_utils.h"
+#include <android-base/parsedouble.h>
+#include <android-base/parseint.h>
#include <android-base/properties.h>
#include <server_configurable_flags/get_flags.h>
@@ -25,6 +27,8 @@ namespace android {
namespace profcollectd {
using ::android::base::GetProperty;
+using ::android::base::ParseFloat;
+using ::android::base::ParseInt;
using ::server_configurable_flags::GetServerConfigurableFlag;
std::string getBuildFingerprint() {
@@ -37,12 +41,27 @@ std::string getConfigFlag(const config_t& config) {
int getConfigFlagInt(const config_t& config) {
std::string value = getConfigFlag(config);
- return std::stoi(value);
+ int i;
+ if (!ParseInt(value, &i)) {
+ // Use default value if the server config value is malformed.
+ return ParseInt(config.defaultValue, &i);
+ }
+ return i;
}
float getConfigFlagFloat(const config_t& config) {
std::string value = getConfigFlag(config);
- return std::stof(value);
+ float f;
+ if (!ParseFloat(value, &f)) {
+ // Use default value if the server config value is malformed.
+ return ParseFloat(config.defaultValue, &f);
+ }
+ return f;
+}
+
+bool getConfigFlagBool(const config_t& config) {
+ std::string value = getConfigFlag(config);
+ return value == "true";
}
} // namespace profcollectd
diff --git a/profcollectd/libprofcollectd/config_utils.h b/profcollectd/libprofcollectd/config_utils.h
index 8ad5d0d1..b3a458a0 100644
--- a/profcollectd/libprofcollectd/config_utils.h
+++ b/profcollectd/libprofcollectd/config_utils.h
@@ -33,6 +33,7 @@ std::string getBuildFingerprint();
std::string getConfigFlag(const config_t& config);
int getConfigFlagInt(const config_t& config);
float getConfigFlagFloat(const config_t& config);
+bool getConfigFlagBool(const config_t& config);
} // namespace profcollectd
} // namespace android
diff --git a/profcollectd/libprofcollectd/scheduler.cpp b/profcollectd/libprofcollectd/scheduler.cpp
index ce316eed..7e0ae608 100644
--- a/profcollectd/libprofcollectd/scheduler.cpp
+++ b/profcollectd/libprofcollectd/scheduler.cpp
@@ -97,7 +97,7 @@ ProfcollectdScheduler::ProfcollectdScheduler() {
if ((hwtracer = REGISTER_SIMPLEPERF_ETM_PROVIDER())) {
LOG(INFO) << "ETM provider registered.";
} else {
- LOG(ERROR) << "No hardware trace provider found for this architecture.";
+ LOG(ERROR) << "No hardware trace provider available.";
}
}