Loading libstats/bootstrap/Android.bp 0 → 100644 +49 −0 Original line number Diff line number Diff line // // Copyright (C) 2021 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. // // ========================================================================= // Native library that provide a client to StatsBootstrapAtomService. // This library should only be used by processes that start in the bootstrap namespace. // All other clients should use libstatssocket, provided by the statsd apex. // ========================================================================= package { default_applicable_licenses: ["Android-Apache-2.0"], } cc_defaults { name: "libstatsbootstrap_defaults", srcs: [ "BootstrapClientInternal.cpp", "StatsBootstrapAtomClient.cpp", ], cflags: [ "-Wall", "-Werror", ], shared_libs: [ "libbinder", "libutils", "android.os.statsbootstrap_aidl-cpp", ], } cc_library { name: "libstatsbootstrap", defaults: ["libstatsbootstrap_defaults"], export_include_dirs: ["include"], } libstats/bootstrap/BootstrapClientInternal.cpp 0 → 100644 +57 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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 "BootstrapClientInternal.h" #include <binder/IServiceManager.h> namespace android { namespace os { namespace stats { sp<BootstrapClientInternal> BootstrapClientInternal::getInstance() { static sp<BootstrapClientInternal> client = new BootstrapClientInternal(); return client; } sp<IStatsBootstrapAtomService> BootstrapClientInternal::getServiceNonBlocking() { std::lock_guard<std::mutex> lock(mLock); if (mService != nullptr) { return mService; } connectNonBlockingLocked(); return mService; } void BootstrapClientInternal::binderDied(const wp<IBinder>&) { std::lock_guard<std::mutex> lock(mLock); mService = nullptr; connectNonBlockingLocked(); } void BootstrapClientInternal::connectNonBlockingLocked() { const String16 name("statsbootstrap"); mService = interface_cast<IStatsBootstrapAtomService>(defaultServiceManager()->checkService(name)); if (mService != nullptr) { // Set up binder death. IInterface::asBinder(mService)->linkToDeath(this); } } } // namespace stats } // namespace os } // namespace android No newline at end of file libstats/bootstrap/BootstrapClientInternal.h 0 → 100644 +41 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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/os/IStatsBootstrapAtomService.h> namespace android { namespace os { namespace stats { class BootstrapClientInternal : public IBinder::DeathRecipient { public: static sp<BootstrapClientInternal> getInstance(); void binderDied(const wp<IBinder>& who) override; sp<IStatsBootstrapAtomService> getServiceNonBlocking(); private: BootstrapClientInternal() {} void connectNonBlockingLocked(); mutable std::mutex mLock; sp<IStatsBootstrapAtomService> mService; }; } // namespace stats } // namespace os } // namespace android libstats/bootstrap/StatsBootstrapAtomClient.cpp 0 → 100644 +37 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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 "include/StatsBootstrapAtomClient.h" #include <android/os/IStatsBootstrapAtomService.h> #include "BootstrapClientInternal.h" namespace android { namespace os { namespace stats { bool StatsBootstrapAtomClient::reportBootstrapAtom(const StatsBootstrapAtom& atom) { sp<IStatsBootstrapAtomService> service = BootstrapClientInternal::getInstance()->getServiceNonBlocking(); if (service == nullptr) { return false; } return service->reportBootstrapAtom(atom).isOk(); } } // namespace stats } // namespace os } // namespace android No newline at end of file libstats/bootstrap/include/StatsBootstrapAtomClient.h 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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/os/StatsBootstrapAtom.h> namespace android { namespace os { namespace stats { class StatsBootstrapAtomClient { public: static bool reportBootstrapAtom(const StatsBootstrapAtom& atom); }; } // namespace stats } // namespace os } // namespace android No newline at end of file Loading
libstats/bootstrap/Android.bp 0 → 100644 +49 −0 Original line number Diff line number Diff line // // Copyright (C) 2021 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. // // ========================================================================= // Native library that provide a client to StatsBootstrapAtomService. // This library should only be used by processes that start in the bootstrap namespace. // All other clients should use libstatssocket, provided by the statsd apex. // ========================================================================= package { default_applicable_licenses: ["Android-Apache-2.0"], } cc_defaults { name: "libstatsbootstrap_defaults", srcs: [ "BootstrapClientInternal.cpp", "StatsBootstrapAtomClient.cpp", ], cflags: [ "-Wall", "-Werror", ], shared_libs: [ "libbinder", "libutils", "android.os.statsbootstrap_aidl-cpp", ], } cc_library { name: "libstatsbootstrap", defaults: ["libstatsbootstrap_defaults"], export_include_dirs: ["include"], }
libstats/bootstrap/BootstrapClientInternal.cpp 0 → 100644 +57 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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 "BootstrapClientInternal.h" #include <binder/IServiceManager.h> namespace android { namespace os { namespace stats { sp<BootstrapClientInternal> BootstrapClientInternal::getInstance() { static sp<BootstrapClientInternal> client = new BootstrapClientInternal(); return client; } sp<IStatsBootstrapAtomService> BootstrapClientInternal::getServiceNonBlocking() { std::lock_guard<std::mutex> lock(mLock); if (mService != nullptr) { return mService; } connectNonBlockingLocked(); return mService; } void BootstrapClientInternal::binderDied(const wp<IBinder>&) { std::lock_guard<std::mutex> lock(mLock); mService = nullptr; connectNonBlockingLocked(); } void BootstrapClientInternal::connectNonBlockingLocked() { const String16 name("statsbootstrap"); mService = interface_cast<IStatsBootstrapAtomService>(defaultServiceManager()->checkService(name)); if (mService != nullptr) { // Set up binder death. IInterface::asBinder(mService)->linkToDeath(this); } } } // namespace stats } // namespace os } // namespace android No newline at end of file
libstats/bootstrap/BootstrapClientInternal.h 0 → 100644 +41 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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/os/IStatsBootstrapAtomService.h> namespace android { namespace os { namespace stats { class BootstrapClientInternal : public IBinder::DeathRecipient { public: static sp<BootstrapClientInternal> getInstance(); void binderDied(const wp<IBinder>& who) override; sp<IStatsBootstrapAtomService> getServiceNonBlocking(); private: BootstrapClientInternal() {} void connectNonBlockingLocked(); mutable std::mutex mLock; sp<IStatsBootstrapAtomService> mService; }; } // namespace stats } // namespace os } // namespace android
libstats/bootstrap/StatsBootstrapAtomClient.cpp 0 → 100644 +37 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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 "include/StatsBootstrapAtomClient.h" #include <android/os/IStatsBootstrapAtomService.h> #include "BootstrapClientInternal.h" namespace android { namespace os { namespace stats { bool StatsBootstrapAtomClient::reportBootstrapAtom(const StatsBootstrapAtom& atom) { sp<IStatsBootstrapAtomService> service = BootstrapClientInternal::getInstance()->getServiceNonBlocking(); if (service == nullptr) { return false; } return service->reportBootstrapAtom(atom).isOk(); } } // namespace stats } // namespace os } // namespace android No newline at end of file
libstats/bootstrap/include/StatsBootstrapAtomClient.h 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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/os/StatsBootstrapAtom.h> namespace android { namespace os { namespace stats { class StatsBootstrapAtomClient { public: static bool reportBootstrapAtom(const StatsBootstrapAtom& atom); }; } // namespace stats } // namespace os } // namespace android No newline at end of file