1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef HIDUMPER_SERVICES_DUMP_MANAGER_CPU_CLIENT_H
16 #define HIDUMPER_SERVICES_DUMP_MANAGER_CPU_CLIENT_H
17 #include <string>
18 #include <singleton.h>
19 #include <iservice_registry.h>
20 #include "dump_common_utils.h"
21 #include "idump_cpu_broker.h"
22 #include "dump_cpu_data.h"
23 #include "common.h"
24 namespace OHOS {
25 namespace HiviewDFX {
26 class DumpManagerCpuClient final : public DelayedRefSingleton<DumpManagerCpuClient> {
27     DECLARE_DELAYED_REF_SINGLETON(DumpManagerCpuClient)
28 public:
29     DISALLOW_COPY_AND_MOVE(DumpManagerCpuClient);
30 public:
31     int32_t Request(DumpCpuData &dumpCpuData);
32     int32_t GetCpuUsageByPid(int32_t pid, double &cpuUsage);
33     // Used for connect to hidump cpu SA.
34     ErrCode Connect();
35     // Used for reset connect.
36     void Reset();
37 private:
38     class DumpManagerCpuDeathRecipient : public IRemoteObject::DeathRecipient {
39     public:
40         DumpManagerCpuDeathRecipient() = default;
41         ~DumpManagerCpuDeathRecipient() = default;
42         void OnRemoteDied(const wptr<IRemoteObject>& remote);
43     private:
44         DISALLOW_COPY_AND_MOVE(DumpManagerCpuDeathRecipient);
45     };
46 private:
47     void ResetProxy(const wptr<IRemoteObject>& remote);
48     ErrCode OnDemandStart(sptr<ISystemAbilityManager> sam, sptr<IRemoteObject> &remoteObject);
49 private:
50     sptr<IDumpCpuBroker> proxy_ {nullptr};
51     sptr<IRemoteObject::DeathRecipient> deathRecipient_ {nullptr};
52     std::mutex mutex_;
53 };
54 } // namespace HiviewDFX
55 } // namespace OHOS
56 #endif // HIDUMPER_SERVICES_DUMP_MANAGER_CLIENT_H
57