diff --git a/bundle.json b/bundle.json index b52073198c24e5f2ba2c0977b19bb978d8256cdc..e3dd35de5fefd5cef63f1f88e8d7db7a06ed73e7 100755 --- a/bundle.json +++ b/bundle.json @@ -32,7 +32,8 @@ "memmgr", "safwk", "samgr", - "eventhandler" + "eventhandler", + "hicollie" ], "third_party": [] }, diff --git a/services/BUILD.gn b/services/BUILD.gn index 31681dd02c5090dc878a5515ff493f69f6d68b49..b21730faccd281dbd402db14db3eeec75fb398cb 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -58,6 +58,7 @@ ohos_shared_library("libsensor_service") { "access_token:libaccesstoken_sdk", "access_token:libtokenid_sdk", "c_utils:utils", + "hicollie:libhicollie", "hilog:libhilog", "ipc:ipc_single", "safwk:system_ability_fwk", @@ -153,6 +154,7 @@ ohos_static_library("libsensor_service_static") { "access_token:libaccesstoken_sdk", "access_token:libtokenid_sdk", "c_utils:utils", + "hicollie:libhicollie", "hilog:libhilog", "ipc:ipc_single", "safwk:system_ability_fwk", diff --git a/services/src/sensor_service_stub.cpp b/services/src/sensor_service_stub.cpp index 3d08b091b91743a795fe1c39e9880b5af1325fa2..c7fb3625e8620c3de1c2d7f575f7d11cf2716fab 100644 --- a/services/src/sensor_service_stub.cpp +++ b/services/src/sensor_service_stub.cpp @@ -31,6 +31,7 @@ #include "sensor_client_proxy.h" #include "sensor_errors.h" #include "sensor_parcel.h" +#include "sensor_xcollie.h" #undef LOG_TAG #define LOG_TAG "SensorServiceStub" @@ -149,7 +150,10 @@ ErrCode SensorServiceStub::SensorEnableInner(MessageParcel &data, MessageParcel int64_t maxReportDelayNs; READINT64(data, samplingPeriodNs, READ_PARCEL_ERR); READINT64(data, maxReportDelayNs, READ_PARCEL_ERR); - return EnableSensor(sensorId, samplingPeriodNs, maxReportDelayNs); + { + SensorXcollie SensorXcollie("SensorServiceStub:EnableSensor", XCOLLIE_TIMEOUT_5S); + return EnableSensor(sensorId, samplingPeriodNs, maxReportDelayNs); + } } ErrCode SensorServiceStub::SensorDisableInner(MessageParcel &data, MessageParcel &reply) @@ -171,13 +175,20 @@ ErrCode SensorServiceStub::SensorDisableInner(MessageParcel &data, MessageParcel SEN_HILOGE("sensorId:%{public}d grant failed, result:%{public}d", sensorId, ret); return PERMISSION_DENIED; } - return DisableSensor(sensorId); + { + SensorXcollie SensorXcollie("SensorServiceStub:DisableSensor", XCOLLIE_TIMEOUT_5S); + return DisableSensor(sensorId); + } } ErrCode SensorServiceStub::GetAllSensorsInner(MessageParcel &data, MessageParcel &reply) { (void)data; - std::vector sensors = GetSensorList(); + std::vector sensors; + { + SensorXcollie SensorXcollie("SensorServiceStub:GetSensorList", XCOLLIE_TIMEOUT_5S); + sensors = GetSensorList(); + } uint32_t sensorCount = static_cast(sensors.size()); if (sensorCount > MAX_SENSOR_COUNT) { SEN_HILOGD("SensorCount:%{public}u", sensorCount); @@ -205,14 +216,20 @@ ErrCode SensorServiceStub::CreateDataChannelInner(MessageParcel &data, MessagePa } sptr sensorClient = data.ReadRemoteObject(); CHKPR(sensorClient, OBJECT_NULL); - return TransferDataChannel(sensorChannel, sensorClient); + { + SensorXcollie SensorXcollie("SensorServiceStub:TransferDataChannel", XCOLLIE_TIMEOUT_5S); + return TransferDataChannel(sensorChannel, sensorClient); + } } ErrCode SensorServiceStub::DestroyDataChannelInner(MessageParcel &data, MessageParcel &reply) { sptr sensorClient = data.ReadRemoteObject(); CHKPR(sensorClient, OBJECT_NULL); - return DestroySensorChannel(sensorClient); + { + SensorXcollie SensorXcollie("SensorServiceStub:DestroySensorChannel", XCOLLIE_TIMEOUT_5S); + return DestroySensorChannel(sensorClient); + } } ErrCode SensorServiceStub::SuspendSensorsInner(MessageParcel &data, MessageParcel &reply) @@ -230,7 +247,10 @@ ErrCode SensorServiceStub::SuspendSensorsInner(MessageParcel &data, MessageParce (void)reply; int32_t pid; READINT32(data, pid, READ_PARCEL_ERR); - return SuspendSensors(pid); + { + SensorXcollie SensorXcollie("SensorServiceStub:SuspendSensors", XCOLLIE_TIMEOUT_5S); + return SuspendSensors(pid); + } } ErrCode SensorServiceStub::ResumeSensorsInner(MessageParcel &data, MessageParcel &reply) @@ -248,7 +268,10 @@ ErrCode SensorServiceStub::ResumeSensorsInner(MessageParcel &data, MessageParcel (void)reply; int32_t pid; READINT32(data, pid, READ_PARCEL_ERR); - return ResumeSensors(pid); + { + SensorXcollie SensorXcollie("SensorServiceStub:ResumeSensors", XCOLLIE_TIMEOUT_5S); + return ResumeSensors(pid); + } } ErrCode SensorServiceStub::GetActiveInfoListInner(MessageParcel &data, MessageParcel &reply) @@ -261,10 +284,13 @@ ErrCode SensorServiceStub::GetActiveInfoListInner(MessageParcel &data, MessagePa int32_t pid; READINT32(data, pid, READ_PARCEL_ERR); std::vector activeInfoList; - int32_t ret = GetActiveInfoList(pid, activeInfoList); - if (ret != ERR_OK) { - SEN_HILOGE("Get activeInfo list failed"); - return ret; + { + SensorXcollie SensorXcollie("SensorServiceStub:GetActiveInfoList", XCOLLIE_TIMEOUT_5S); + int32_t ret = GetActiveInfoList(pid, activeInfoList); + if (ret != ERR_OK) { + SEN_HILOGE("Get activeInfo list failed"); + return ret; + } } uint32_t activeInfoCount = static_cast(activeInfoList.size()); if (activeInfoCount > MAX_SENSOR_COUNT) { @@ -291,10 +317,13 @@ ErrCode SensorServiceStub::CreateSocketChannelInner(MessageParcel &data, Message sptr sensorClient = data.ReadRemoteObject(); CHKPR(sensorClient, INVALID_POINTER); int32_t clientFd = -1; - int32_t ret = CreateSocketChannel(sensorClient, clientFd); - if (ret != ERR_OK) { - SEN_HILOGE("Create socket channel failed"); - return ret; + { + SensorXcollie SensorXcollie("SensorServiceStub:CreateSocketChannel", XCOLLIE_TIMEOUT_5S); + int32_t ret = CreateSocketChannel(sensorClient, clientFd); + if (ret != ERR_OK) { + SEN_HILOGE("Create socket channel failed"); + return ret; + } } if (!reply.WriteFileDescriptor(clientFd)) { SEN_HILOGE("Parcel write file descriptor failed"); @@ -314,10 +343,13 @@ ErrCode SensorServiceStub::DestroySocketChannelInner(MessageParcel &data, Messag } sptr sensorClient = data.ReadRemoteObject(); CHKPR(sensorClient, INVALID_POINTER); - int32_t ret = DestroySocketChannel(sensorClient); - if (ret != ERR_OK) { - SEN_HILOGE("Destroy socket channel failed"); - return ret; + { + SensorXcollie SensorXcollie("SensorServiceStub:DestroySocketChannel", XCOLLIE_TIMEOUT_5S); + int32_t ret = DestroySocketChannel(sensorClient); + if (ret != ERR_OK) { + SEN_HILOGE("Destroy socket channel failed"); + return ret; + } } return ERR_OK; } @@ -329,7 +361,10 @@ ErrCode SensorServiceStub::EnableActiveInfoCBInner(MessageParcel &data, MessageP SEN_HILOGE("TokenType is not TOKEN_NATIVE"); return PERMISSION_DENIED; } - return EnableActiveInfoCB(); + { + SensorXcollie SensorXcollie("SensorServiceStub:EnableActiveInfoCB", XCOLLIE_TIMEOUT_5S); + return EnableActiveInfoCB(); + } } ErrCode SensorServiceStub::DisableActiveInfoCBInner(MessageParcel &data, MessageParcel &reply) @@ -339,7 +374,10 @@ ErrCode SensorServiceStub::DisableActiveInfoCBInner(MessageParcel &data, Message SEN_HILOGE("TokenType is not TOKEN_NATIVE"); return PERMISSION_DENIED; } - return DisableActiveInfoCB(); + { + SensorXcollie SensorXcollie("SensorServiceStub:DisableActiveInfoCB", XCOLLIE_TIMEOUT_5S); + return DisableActiveInfoCB(); + } } ErrCode SensorServiceStub::ResetSensorsInner(MessageParcel &data, MessageParcel &reply) @@ -354,7 +392,10 @@ ErrCode SensorServiceStub::ResetSensorsInner(MessageParcel &data, MessageParcel SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); return PERMISSION_DENIED; } - return ResetSensors(); + { + SensorXcollie SensorXcollie("SensorServiceStub:ResetSensors", XCOLLIE_TIMEOUT_5S); + return ResetSensors(); + } } } // namespace Sensors } // namespace OHOS diff --git a/utils/common/BUILD.gn b/utils/common/BUILD.gn index 093c0f2b9134af96ee2100e6b1911b373bc919cc..b8ce0701878b70564d188226228afd60a0f60e6f 100644 --- a/utils/common/BUILD.gn +++ b/utils/common/BUILD.gn @@ -24,6 +24,7 @@ ohos_shared_library("libsensor_utils") { "src/sensor_basic_data_channel.cpp", "src/sensor_basic_info.cpp", "src/sensor_channel_info.cpp", + "src/sensor_xcollie.cpp", ] branch_protector_ret = "pac_ret" @@ -43,6 +44,7 @@ ohos_shared_library("libsensor_utils") { "access_token:libaccesstoken_sdk", "access_token:libprivacy_sdk", "c_utils:utils", + "hicollie:libhicollie", "hilog:libhilog", "ipc:ipc_single", ] diff --git a/utils/common/include/sensor_xcollie.h b/utils/common/include/sensor_xcollie.h new file mode 100644 index 0000000000000000000000000000000000000000..65c03fc1085fa91eb6f4e444cee0984712cb975d --- /dev/null +++ b/utils/common/include/sensor_xcollie.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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. + */ + +#ifndef MISCDEVICE_XCOLLIE_H +#define MISCDEVICE_XCOLLIE_H + +#include + +#include "xcollie/xcollie.h" +#include "xcollie/xcollie_define.h" + +namespace OHOS { +namespace Sensors { +const unsigned int XCOLLIE_TIMEOUT_10S = 10; +const unsigned int XCOLLIE_TIMEOUT_5S = 5; + +class SensorXcollie { +public: + SensorXcollie(const std::string& tag, unsigned int timeoutSeconds = 10, + std::function func = nullptr, void *arg = nullptr, + unsigned int flag = HiviewDFX::XCOLLIE_FLAG_LOG); + ~SensorXcollie(); +private: + int id_; + std::string tag_; +}; +} // namespace Sensors +} // namespace OHOS +#endif // MISCDEVICE_XCOLLIE_H \ No newline at end of file diff --git a/utils/common/src/sensor_xcollie.cpp b/utils/common/src/sensor_xcollie.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9003a4bea7fd768aa20bcdb3388a3a655c4ce075 --- /dev/null +++ b/utils/common/src/sensor_xcollie.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * 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 "sensor_xcollie.h" + +namespace OHOS { +namespace Sensors { +SensorXcollie::SensorXcollie(const std::string& tag, unsigned int timeoutSeconds, + std::function func, void *arg, unsigned int flag) +{ + id_ = HiviewDFX::XCollie::GetInstance().SetTimer(tag, timeoutSeconds, func, arg, flag); + tag_ = tag; +} + +SensorXcollie::~SensorXcollie() +{ + HiviewDFX::XCollie::GetInstance().CancelTimer(id_); +} +} // namespace Sensors +} // namespace OHOS \ No newline at end of file