From 7717b451aa85a0ceb7acd4116175d0d556abb00d Mon Sep 17 00:00:00 2001 From: gaojiaqi Date: Wed, 4 Jun 2025 17:25:22 +0800 Subject: [PATCH 1/2] add hisysevent Signed-off-by: gaojiaqi --- hisysevent.yaml | 9 ++++++- .../reminder/include/reminder_data_manager.h | 3 ++- .../reminder/src/reminder_data_manager.cpp | 7 +++++ .../src/reminder_data_manager_inner.cpp | 27 ++++++++++++++++++- .../src/reminder_datashare_helper.cpp | 3 +++ 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/hisysevent.yaml b/hisysevent.yaml index 22a697a64..4ea976148 100644 --- a/hisysevent.yaml +++ b/hisysevent.yaml @@ -121,4 +121,11 @@ STATIC_LIVE_VIEW_UPLOAD: NOTIFICATION_ID: {type: INT32, desc: notification Id} BUNDLE_NAME: {type: STRING, desc: bundle name} CONTENT_TYPE: {type: INT32, desc: notification content type} - OPERATE_FLAG: {type: INT32, desc: download liveview operate flag} \ No newline at end of file + OPERATE_FLAG: {type: INT32, desc: download liveview operate flag} + +REMINDER_TIMER_ERROR: + __BASE: {type: STATISTIC, level: MINOR, desc: reminder timer error} + BUNDLE_NAME: {type: STRING, desc: bundle name} + TARGET_TIME: {type: UINT64, desc: target time} + TRIGGER_TIME: {type: UINT64, desc: trigger time} + ERROR_INFO: {type: STRING, desc: error info} \ No newline at end of file diff --git a/services/reminder/include/reminder_data_manager.h b/services/reminder/include/reminder_data_manager.h index 9f046a812..2d936388b 100644 --- a/services/reminder/include/reminder_data_manager.h +++ b/services/reminder/include/reminder_data_manager.h @@ -672,6 +672,7 @@ private: * @brief report event to dfx */ void ReportSysEvent(const sptr& reminder); + void ReportTimerEvent(const int64_t targetTime, const bool isSysTimeChanged); /** * @brief Create load reminder timer. @@ -751,7 +752,7 @@ private: * Indicates the active reminder that timing is taking effect. */ std::atomic activeReminderId_ = -1; - std::atomic activeTriggerTime_ = -1; + std::atomic activeTriggerTime_ = 0; sptr activeReminder_ = nullptr; /** diff --git a/services/reminder/src/reminder_data_manager.cpp b/services/reminder/src/reminder_data_manager.cpp index dfdbdd2c2..f7003e5de 100644 --- a/services/reminder/src/reminder_data_manager.cpp +++ b/services/reminder/src/reminder_data_manager.cpp @@ -829,6 +829,7 @@ void ReminderDataManager::RefreshRemindersDueToSysTimeChange(uint8_t type) ANSR_LOGW("bundle service or ability service not ready."); return; } + int64_t targetTime = static_cast(activeTriggerTime_.load()); std::string typeInfo = type == TIME_ZONE_CHANGE ? "timeZone" : "dateTime"; ANSR_LOGI("Refresh all reminders due to %{public}s changed by user", typeInfo.c_str()); if (activeReminderId_ != -1) { @@ -848,6 +849,10 @@ void ReminderDataManager::RefreshRemindersDueToSysTimeChange(uint8_t type) } else if (type == TIME_ZONE_CHANGE) { ReminderDataShareHelper::GetInstance().StartDataExtension(ReminderCalendarShareTable::START_BY_TIMEZONE_CHANGE); } + + if (type == DATE_TIME_CHANGE) { + ReportTimerEvent(targetTime, true); + } std::vector> showImmediately; std::vector> extensionReminders; RefreshRemindersLocked(type, showImmediately, extensionReminders); @@ -961,6 +966,7 @@ bool ReminderDataManager::ShouldAlert(const sptr &reminder) con void ReminderDataManager::ShowActiveReminder(const EventFwk::Want &want) { int32_t reminderId = static_cast(want.GetIntParam(ReminderRequest::PARAM_REMINDER_ID, -1)); + int64_t targetTime = static_cast(activeTriggerTime_.load()); bool isShare = want.GetBoolParam(ReminderRequest::PARAM_REMINDER_SHARE, false); ANSR_LOGI("Begin to show reminder(reminderId=%{public}d)", reminderId); if (reminderId == activeReminderId_) { @@ -974,6 +980,7 @@ void ReminderDataManager::ShowActiveReminder(const EventFwk::Want &want) if (HandleSysTimeChange(reminder)) { return; } + ReportTimerEvent(targetTime, false); std::vector> extensionReminders; ShowActiveReminderExtendLocked(reminder, extensionReminders); HandleExtensionReminder(extensionReminders, NORMAL_CALLBACK); diff --git a/services/reminder/src/reminder_data_manager_inner.cpp b/services/reminder/src/reminder_data_manager_inner.cpp index c5c8fd78e..50f50bb93 100644 --- a/services/reminder/src/reminder_data_manager_inner.cpp +++ b/services/reminder/src/reminder_data_manager_inner.cpp @@ -42,6 +42,7 @@ #include "hitrace_meter_adapter.h" #ifdef HAS_HISYSEVENT_PART #include "hisysevent.h" +#include "reminder_utils.h" #endif namespace OHOS { @@ -346,7 +347,7 @@ void ReminderDataManager::SetActiveReminder(const sptr &reminde if (reminder == nullptr) { // activeReminder_ should not be set with null as it point to actual object. activeReminderId_ = -1; - activeTriggerTime_ = -1; + activeTriggerTime_ = 0; } else { activeReminderId_ = reminder->GetReminderId(); activeTriggerTime_ = reminder->GetTriggerTimeInMilli(); @@ -367,5 +368,29 @@ void ReminderDataManager::SetAlertingReminder(const sptr &remin } ANSR_LOGD("Set alertingReminderId=%{public}d", alertingReminderId_.load()); } + +void ReminderDataManager::ReportTimerEvent(const int64_t targetTime, const bool isSysTimeChanged) +{ +#ifdef HAS_HISYSEVENT_PART + if (targetTime == 0) { + return; + } + constexpr int64_t deviation = 1000 * 60; // 1min + int64_t now = GetCurrentTime(); + if ((now - targetTime) <= deviation) { + return; + } + std::string event = "REMINDER_TIMER_ERROR"; + std::string bundleName = ""; + std::string errorInfo = ""; + if (isSysTimeChanged) { + errorInfo = "SYSTEM_TIME_CHANGED"; + } else { + errorInfo = "TIMER_ERROR"; + } + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::NOTIFICATION, event, HiviewDFX::HiSysEvent::EventType::STATISTIC, + "BUNDLE_NAME", bundleName, "TARGET_TIME", targetTime, "TRIGGER_TIME", now, "ERROR_INFO", errorInfo); +#endif +} } } diff --git a/services/reminder/src/reminder_datashare_helper.cpp b/services/reminder/src/reminder_datashare_helper.cpp index ed2cd3c7e..aa1452120 100644 --- a/services/reminder/src/reminder_datashare_helper.cpp +++ b/services/reminder/src/reminder_datashare_helper.cpp @@ -564,14 +564,17 @@ void ReminderDataShareHelper::ReminderDataObserver::OnChange(const ChangeInfo& i { switch (info.changeType_) { case DataShare::DataShareObserver::ChangeType::INSERT: { + ANSR_LOGI("DataShare insert."); ReminderDataShareHelper::GetInstance().OnDataInsertOrDelete(); break; } case DataShare::DataShareObserver::ChangeType::UPDATE: { + ANSR_LOGI("DataShare update."); ReminderDataShareHelper::GetInstance().OnDataUpdate(info); break; } case DataShare::DataShareObserver::ChangeType::DELETE: { + ANSR_LOGI("DataShare delete."); ReminderDataShareHelper::GetInstance().OnDataInsertOrDelete(); break; } -- Gitee From c61d82735cf4ceda023ffa3a54aa7bfcc701e0ea Mon Sep 17 00:00:00 2001 From: gaojiaqi Date: Fri, 6 Jun 2025 15:06:39 +0800 Subject: [PATCH 2/2] update Signed-off-by: gaojiaqi --- hisysevent.yaml | 3 +-- .../src/reminder_data_manager_inner.cpp | 11 ++--------- .../unittest/reminder_data_manager_test.cpp | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/hisysevent.yaml b/hisysevent.yaml index 4ea976148..ec8a8d752 100644 --- a/hisysevent.yaml +++ b/hisysevent.yaml @@ -125,7 +125,6 @@ STATIC_LIVE_VIEW_UPLOAD: REMINDER_TIMER_ERROR: __BASE: {type: STATISTIC, level: MINOR, desc: reminder timer error} - BUNDLE_NAME: {type: STRING, desc: bundle name} TARGET_TIME: {type: UINT64, desc: target time} TRIGGER_TIME: {type: UINT64, desc: trigger time} - ERROR_INFO: {type: STRING, desc: error info} \ No newline at end of file + ERROR_CODE: {type: UINT8, desc: error code} \ No newline at end of file diff --git a/services/reminder/src/reminder_data_manager_inner.cpp b/services/reminder/src/reminder_data_manager_inner.cpp index 0d48eb1e0..4ffacc9ac 100644 --- a/services/reminder/src/reminder_data_manager_inner.cpp +++ b/services/reminder/src/reminder_data_manager_inner.cpp @@ -395,16 +395,9 @@ void ReminderDataManager::ReportTimerEvent(const int64_t targetTime, const bool if ((now - targetTime) <= deviation) { return; } - std::string event = "REMINDER_TIMER_ERROR"; - std::string bundleName = ""; - std::string errorInfo = ""; - if (isSysTimeChanged) { - errorInfo = "SYSTEM_TIME_CHANGED"; - } else { - errorInfo = "TIMER_ERROR"; - } + uint8_t errorCode = isSysTimeChanged ? 0 : 1; HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::NOTIFICATION, event, HiviewDFX::HiSysEvent::EventType::STATISTIC, - "BUNDLE_NAME", bundleName, "TARGET_TIME", targetTime, "TRIGGER_TIME", now, "ERROR_INFO", errorInfo); + "TARGET_TIME", targetTime, "TRIGGER_TIME", now, "ERROR_CODE", errorCode); #endif } } diff --git a/services/reminder/test/unittest/reminder_data_manager_test.cpp b/services/reminder/test/unittest/reminder_data_manager_test.cpp index b8152b830..f49072b4f 100644 --- a/services/reminder/test/unittest/reminder_data_manager_test.cpp +++ b/services/reminder/test/unittest/reminder_data_manager_test.cpp @@ -34,6 +34,7 @@ #include "reminder_config_change_observer.h" #include "reminder_calendar_share_table.h" #include "reminder_timer_info.h" +#include "reminder_utils.h" using namespace testing::ext; using namespace OHOS::EventFwk; @@ -1555,5 +1556,21 @@ HWTEST_F(ReminderDataManagerTest, ReminderDataManagerTest_033, Level1) manager->UpdateAndSaveReminderLocked(calendar, true); EXPECT_TRUE(manager != nullptr); } + +/** + * @tc.name: ReminderDataManagerTest_034 + * @tc.desc: Reminder data manager test + * @tc.type: FUNC + * @tc.require: issueI5YTF3 + */ +HWTEST_F(ReminderDataManagerTest, ReminderDataManagerTest_034, Level1) +{ + manager->ReportTimerEvent(0, false); + int64_t targetTime = GetCurrentTime(); + manager->ReportTimerEvent(targetTime, false); + targetTime -= 60 * 60 * 1000; + manager->ReportTimerEvent(targetTime, false); + EXPECT_TRUE(manager != nullptr); +} } // namespace Notification } // namespace OHOS -- Gitee