1 /*
2  * Copyright (C) 2023, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <aidl/android/os/IStatsd.h>
18 #include <android/binder_auto_utils.h>
19 
20 using StatsProviderBinderDiedCallback = void (*)(void);
21 
22 /**
23  * Wrapper class for providing IStatsd Binder service.
24  * It handles Binder death and registers a callback for when the Binder service is restored after
25  * death.
26  */
27 class StatsProvider {
28 public:
29     StatsProvider(StatsProviderBinderDiedCallback callback);
30 
31     ~StatsProvider();
32 
33     std::shared_ptr<aidl::android::os::IStatsd> getStatsService();
34 
35 private:
36     static void binderDied(void* cookie);
37 
38     void resetStatsService();
39 
40     std::mutex mMutex;
41     std::shared_ptr<aidl::android::os::IStatsd> mStatsd;
42     const ::ndk::ScopedAIBinder_DeathRecipient mDeathRecipient;
43     const StatsProviderBinderDiedCallback mCallback;
44 };
45