diff --git a/aidl/memtrack/Android.bp b/aidl/memtrack/Android.bp new file mode 100755 index 0000000..5d368cc --- /dev/null +++ b/aidl/memtrack/Android.bp @@ -0,0 +1,30 @@ +// Copyright (C) 2020 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.memtrack-service.exynos9810", + relative_install_path: "hw", + init_rc: ["memtrack-exynos9810.rc"], + vintf_fragments: ["memtrack-exynos9810.xml"], + vendor: true, + shared_libs: [ + "libbase", + "libbinder_ndk", + "android.hardware.memtrack-V1-ndk", + ], + srcs: [ + "main.cpp", + "Memtrack.cpp", + ], +} diff --git a/aidl/memtrack/Memtrack.cpp b/aidl/memtrack/Memtrack.cpp new file mode 100755 index 0000000..49a6582 --- /dev/null +++ b/aidl/memtrack/Memtrack.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2020 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 "Memtrack.h" + +namespace aidl { +namespace android { +namespace hardware { +namespace memtrack { + +ndk::ScopedAStatus Memtrack::getMemory(int pid, MemtrackType type, + std::vector* _aidl_return) { + if (pid < 0) { + return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT)); + } + if (type != MemtrackType::OTHER && type != MemtrackType::GL && type != MemtrackType::GRAPHICS && + type != MemtrackType::MULTIMEDIA && type != MemtrackType::CAMERA) { + return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION)); + } + _aidl_return->clear(); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Memtrack::getGpuDeviceInfo(std::vector* _aidl_return) { + _aidl_return->clear(); + DeviceInfo dev_info = {.id = 0, .name = "virtio_gpu"}; + _aidl_return->emplace_back(dev_info); + return ndk::ScopedAStatus::ok(); +} + +} // namespace memtrack +} // namespace hardware +} // namespace android +} // namespace aidl diff --git a/aidl/memtrack/Memtrack.h b/aidl/memtrack/Memtrack.h new file mode 100755 index 0000000..f2ef60e --- /dev/null +++ b/aidl/memtrack/Memtrack.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2020 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 +#include +#include +#include + +namespace aidl { +namespace android { +namespace hardware { +namespace memtrack { + +class Memtrack : public BnMemtrack { + ndk::ScopedAStatus getMemory(int pid, MemtrackType type, + std::vector* _aidl_return) override; + + ndk::ScopedAStatus getGpuDeviceInfo(std::vector* _aidl_return) override; +}; + +} // namespace memtrack +} // namespace hardware +} // namespace android +} // namespace aidl diff --git a/aidl/memtrack/main.cpp b/aidl/memtrack/main.cpp new file mode 100755 index 0000000..5cf5f94 --- /dev/null +++ b/aidl/memtrack/main.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2020 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 "Memtrack.h" + +#include +#include +#include + +using aidl::android::hardware::memtrack::Memtrack; + +int main() { + ABinderProcess_setThreadPoolMaxThreadCount(0); + std::shared_ptr memtrack = ndk::SharedRefBase::make(); + + const std::string instance = std::string() + Memtrack::descriptor + "/default"; + binder_status_t status = + AServiceManager_addService(memtrack->asBinder().get(), instance.c_str()); + CHECK_EQ(status, STATUS_OK); + + ABinderProcess_joinThreadPool(); + return EXIT_FAILURE; // Unreachable +} diff --git a/aidl/memtrack/memtrack-exynos9810.rc b/aidl/memtrack/memtrack-exynos9810.rc new file mode 100755 index 0000000..643c537 --- /dev/null +++ b/aidl/memtrack/memtrack-exynos9810.rc @@ -0,0 +1,4 @@ +service vendor.memtrack-default /vendor/bin/hw/android.hardware.memtrack-service.exynos9810 + class hal + user nobody + group system diff --git a/aidl/memtrack/memtrack-exynos9810.xml b/aidl/memtrack/memtrack-exynos9810.xml new file mode 100755 index 0000000..3e3e0f6 --- /dev/null +++ b/aidl/memtrack/memtrack-exynos9810.xml @@ -0,0 +1,7 @@ + + + android.hardware.memtrack + IMemtrack/default + + + diff --git a/common.mk b/common.mk index 0843018..44a1cfd 100644 --- a/common.mk +++ b/common.mk @@ -154,8 +154,7 @@ PRODUCT_PACKAGES += \ android.hardware.graphics.mapper@3.0-impl-qti-display \ android.hardware.graphics.mapper@4.0-impl-qti-display \ vendor.qti.hardware.display.allocator-service \ - android.hardware.memtrack@1.0-impl \ - android.hardware.memtrack@1.0-service \ + android.hardware.memtrack-service.exynos9810 \ android.hardware.renderscript@1.0-impl \ libtinyxml \ libtinyxml2 \ diff --git a/configs/manifest.xml b/configs/manifest.xml index e5cf923..c723f57 100644 --- a/configs/manifest.xml +++ b/configs/manifest.xml @@ -83,16 +83,6 @@ @1.0::IOmx/default @1.0::IOmxStore/default - - android.hardware.memtrack - hwbinder - 1.0 - - IMemtrack - default - - @1.0::IMemtrack/default - android.hardware.radio hwbinder diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index 670c7ca..8da570b 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -69,6 +69,7 @@ /(vendor|system/vendor)/bin/hw/android\.hardware\.vibrator(@[0-9].[0-9])?-service\.exynos9810 u:object_r:hal_vibrator_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.power(@[0-9]\.[0-9])?-service\.exynos9810-libperfmgr u:object_r:hal_power_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.sensors-service(\.exynos9810-multihal)? u:object_r:hal_sensors_default_exec:s0 +/(vendor|system/vendor)/bin/hw/android\.hardware\.memtrack-service.exynos9810 u:object_r:hal_memtrack_default_exec:s0 /(vendor|system/vendor)/bin/hw/android.hardware.vibrator-service.sm7125 u:object_r:hal_vibrator_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.health@2\.1-service-samsung u:object_r:hal_health_default_exec:s0