diff --git a/hisysevent.yaml b/hisysevent.yaml index 22a697a64dedcc267a7d0ee82df0262bdd27b7ab..ec8a8d752a93938933e362eb1a43892dded0f755 100644 --- a/hisysevent.yaml +++ b/hisysevent.yaml @@ -121,4 +121,10 @@ 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} + TARGET_TIME: {type: UINT64, desc: target time} + TRIGGER_TIME: {type: UINT64, desc: trigger time} + ERROR_CODE: {type: UINT8, desc: error code} \ 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 d0ebb0cd5e8813f213807a065bc0b1c05e3b3267..80e6eb4401e17fbe0e84efa266ad8fcffcfd65d9 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 10594d17e0843f2717b0276eaf20e4fc8006bf77..386bd3fb427fea5b8dbcce077df33d24e947adfd 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 704372157f2553884aea85ae7b08cfaa120c4ee6..4ffacc9ac6c20a7b517ebffa0633af0df5ba1acf 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(); @@ -382,5 +383,22 @@ ErrCode ReminderDataManager::CancelReminderToDb(const int32_t reminderId, const store_->Delete(reminderId); return ERR_OK; } + +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; + } + uint8_t errorCode = isSysTimeChanged ? 0 : 1; + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::NOTIFICATION, event, HiviewDFX::HiSysEvent::EventType::STATISTIC, + "TARGET_TIME", targetTime, "TRIGGER_TIME", now, "ERROR_CODE", errorCode); +#endif +} } } diff --git a/services/reminder/src/reminder_datashare_helper.cpp b/services/reminder/src/reminder_datashare_helper.cpp index ed2cd3c7e3d1b8e65a2a3593f50b8545f139573a..aa1452120977cfe9ea38c97565bb61281697ad69 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; } diff --git a/services/reminder/test/unittest/reminder_data_manager_test.cpp b/services/reminder/test/unittest/reminder_data_manager_test.cpp index b8152b8300e692dc9d59eb24a292070d4c943fa3..f49072b4fb4d7dd8a7376608f188e23d5b31849e 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