summaryrefslogtreecommitdiff
path: root/atrace
diff options
context:
space:
mode:
authorWei Wang <wvw@google.com>2019-05-10 15:28:42 -0700
committerWei Wang <wvw@google.com>2019-05-16 14:06:49 -0700
commitbdc01697f47f61d7bc1dc3feeede2fc4dc9a156d (patch)
treeeacc44808796c1f92d7fa5607720c43292dad46c /atrace
parenta1f868e78ee87bff55d10ad60f28f1e4a803043c (diff)
downloadpixel-bdc01697f47f61d7bc1dc3feeede2fc4dc9a156d.tar.gz
add generic Pixel atrace HAL
Bug: 110111068 Bug: 131630776 Bug: 131352179 Test: take a trace Change-Id: Ie6d8cde30a548a3fda617f1221e4e2dda2ae29d0
Diffstat (limited to 'atrace')
-rw-r--r--atrace/Android.bp35
-rw-r--r--atrace/AtraceDevice.cpp120
-rw-r--r--atrace/AtraceDevice.h50
-rw-r--r--atrace/android.hardware.atrace@1.0-service.pixel.rc19
-rw-r--r--atrace/android.hardware.atrace@1.0-service.pixel.xml11
-rw-r--r--atrace/service.cpp42
6 files changed, 277 insertions, 0 deletions
diff --git a/atrace/Android.bp b/atrace/Android.bp
new file mode 100644
index 00000000..560f47b1
--- /dev/null
+++ b/atrace/Android.bp
@@ -0,0 +1,35 @@
+//
+// Copyright (C) 2019 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+cc_binary {
+ name: "android.hardware.atrace@1.0-service.pixel",
+ defaults: ["hidl_defaults"],
+ relative_install_path: "hw",
+ vendor: true,
+ init_rc: ["android.hardware.atrace@1.0-service.pixel.rc"],
+ vintf_fragments: ["android.hardware.atrace@1.0-service.pixel.xml"],
+ srcs: [
+ "AtraceDevice.cpp",
+ "service.cpp",
+ ],
+ shared_libs: [
+ "liblog",
+ "libbase",
+ "libutils",
+ "libhidlbase",
+ "libhidltransport",
+ "android.hardware.atrace@1.0",
+ ],
+}
diff --git a/atrace/AtraceDevice.cpp b/atrace/AtraceDevice.cpp
new file mode 100644
index 00000000..ba13cd21
--- /dev/null
+++ b/atrace/AtraceDevice.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+
+#include "AtraceDevice.h"
+
+namespace android {
+namespace hardware {
+namespace atrace {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::atrace::V1_0::Status;
+using ::android::hardware::atrace::V1_0::TracingCategory;
+
+struct TracingConfig {
+ std::string description;
+ // path and if error on failure
+ std::vector<std::pair<std::string, bool>> paths;
+};
+
+// This is a map stores categories and their sysfs paths with required flags
+const std::map<std::string, TracingConfig> kTracingMap = {
+ {
+ "gfx",
+ {"Graphics",
+ {{"/sys/kernel/debug/tracing/events/mdss/enable", false},
+ {"/sys/kernel/debug/tracing/events/sde/enable", false},
+ {"/sys/kernel/debug/tracing/events/mali_systrace/enable", false}}},
+ },
+ {
+ "ion",
+ {"ION allocation",
+ {{"/sys/kernel/debug/tracing/events/kmem/ion_alloc_buffer_start/enable", false}}},
+ },
+ {
+ "tz",
+ {"Trust zone",
+ {{"/sys/kernel/debug/tracing/events/scm/enable", false},
+ {"/sys/kernel/debug/tracing/events/systrace/enable", false}}},
+ },
+ {
+ "freq",
+ {"Clocks", {{"/sys/kernel/debug/tracing/events/msm_bus/enable", false}}},
+ },
+};
+
+// Methods from ::android::hardware::atrace::V1_0::IAtraceDevice follow.
+Return<void> AtraceDevice::listCategories(listCategories_cb _hidl_cb) {
+ hidl_vec<TracingCategory> categories;
+ categories.resize(kTracingMap.size());
+ std::size_t i = 0;
+ for (auto &c : kTracingMap) {
+ categories[i].name = c.first;
+ categories[i].description = c.second.description;
+ i++;
+ }
+ _hidl_cb(categories);
+ return Void();
+}
+
+Return<::android::hardware::atrace::V1_0::Status> AtraceDevice::enableCategories(
+ const hidl_vec<hidl_string> &categories) {
+ if (!categories.size()) {
+ return Status::ERROR_INVALID_ARGUMENT;
+ }
+ for (auto &c : categories) {
+ if (kTracingMap.count(c)) {
+ for (auto &p : kTracingMap.at(c).paths) {
+ if (!android::base::WriteStringToFile("1", p.first)) {
+ LOG(ERROR) << "Failed to disable tracing on: " << p.first;
+ if (p.second) {
+ // disable before return
+ disableAllCategories();
+ return Status::ERROR_TRACING_POINT;
+ }
+ }
+ }
+ } else {
+ return Status::ERROR_INVALID_ARGUMENT;
+ }
+ }
+ return Status::SUCCESS;
+}
+
+Return<::android::hardware::atrace::V1_0::Status> AtraceDevice::disableAllCategories() {
+ auto ret = Status::SUCCESS;
+ for (auto &c : kTracingMap) {
+ for (auto &p : c.second.paths) {
+ if (!android::base::WriteStringToFile("0", p.first)) {
+ LOG(ERROR) << "Failed to enable tracing on: " << p.first;
+ if (p.second) {
+ ret = Status::ERROR_TRACING_POINT;
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace atrace
+} // namespace hardware
+} // namespace android
diff --git a/atrace/AtraceDevice.h b/atrace/AtraceDevice.h
new file mode 100644
index 00000000..a15cd6c5
--- /dev/null
+++ b/atrace/AtraceDevice.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <android/hardware/atrace/1.0/IAtraceDevice.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace atrace {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+
+struct AtraceDevice : public IAtraceDevice {
+ // Methods from ::android::hardware::atrace::V1_0::IAtraceDevice follow.
+ Return<void> listCategories(listCategories_cb _hidl_cb) override;
+ Return<::android::hardware::atrace::V1_0::Status> enableCategories(
+ const hidl_vec<hidl_string> &categories) override;
+ Return<::android::hardware::atrace::V1_0::Status> disableAllCategories() override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace atrace
+} // namespace hardware
+} // namespace android
diff --git a/atrace/android.hardware.atrace@1.0-service.pixel.rc b/atrace/android.hardware.atrace@1.0-service.pixel.rc
new file mode 100644
index 00000000..ef50fd0a
--- /dev/null
+++ b/atrace/android.hardware.atrace@1.0-service.pixel.rc
@@ -0,0 +1,19 @@
+on late-init
+ # vendor graphics trace points
+ chmod 0666 /sys/kernel/debug/tracing/events/sde/enable
+ chmod 0666 /sys/kernel/debug/tracing/events/mdss/enable
+ chmod 0666 /sys/kernel/debug/tracing/events/mali_systrace/enable
+ # ion allocation trace point
+ chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_alloc_buffer_start/enable
+ # scm trace point
+ chmod 0666 /sys/kernel/debug/tracing/events/scm/enable
+ # system bus clk trace point
+ chmod 0666 /sys/kernel/debug/tracing/events/msm_bus/enable
+ # legacy systrace point
+ chmod 0666 /sys/kernel/debug/tracing/events/systrace/enable
+
+service vendor.atrace-hal-1-0 /vendor/bin/hw/android.hardware.atrace@1.0-service.pixel
+ interface android.hardware.atrace@1.0::IAtraceDevice default
+ class early_hal
+ user system
+ group system
diff --git a/atrace/android.hardware.atrace@1.0-service.pixel.xml b/atrace/android.hardware.atrace@1.0-service.pixel.xml
new file mode 100644
index 00000000..fd3631ca
--- /dev/null
+++ b/atrace/android.hardware.atrace@1.0-service.pixel.xml
@@ -0,0 +1,11 @@
+<manifest version="1.0" type="device">
+ <hal format="hidl">
+ <name>android.hardware.atrace</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IAtraceDevice</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+</manifest>
diff --git a/atrace/service.cpp b/atrace/service.cpp
new file mode 100644
index 00000000..423c39d0
--- /dev/null
+++ b/atrace/service.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.atrace@1.0-service.pixel"
+
+#include <hidl/HidlSupport.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "AtraceDevice.h"
+
+using ::android::OK;
+using ::android::sp;
+using ::android::hardware::configureRpcThreadpool;
+using ::android::hardware::joinRpcThreadpool;
+using ::android::hardware::atrace::V1_0::IAtraceDevice;
+using ::android::hardware::atrace::V1_0::implementation::AtraceDevice;
+
+int main(int /* argc */, char * /* argv */ []) {
+ sp<IAtraceDevice> atrace = new AtraceDevice;
+ configureRpcThreadpool(1, true /* will join */);
+ if (atrace->registerAsService() != OK) {
+ ALOGE("Could not register service.");
+ return 1;
+ }
+ joinRpcThreadpool();
+
+ ALOGE("Service exited!");
+ return 1;
+}