From 1a2a7367eaf1acffcfad09e63d97edaedf90011b Mon Sep 17 00:00:00 2001 From: houdisheng Date: Thu, 3 Mar 2022 21:29:20 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E8=BD=AC=E6=B5=8B=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: houdisheng --- .../common/include/bundle_active_constant.h | 2 +- services/common/include/bundle_active_core.h | 14 +- .../include/bundle_active_usage_database.h | 1 + services/common/src/bundle_active_core.cpp | 133 +++++++++++++----- .../src/bundle_active_usage_database.cpp | 43 +++++- .../include/bundle_active_group_handler.h | 2 +- .../bundle_active_stats_update_listener.h | 2 +- .../include/bundle_active_user_service.h | 6 +- .../src/bundle_active_package_stats.cpp | 2 +- .../src/bundle_active_report_handler.cpp | 4 +- .../src/bundle_active_user_service.cpp | 33 +++-- 11 files changed, 172 insertions(+), 70 deletions(-) diff --git a/services/common/include/bundle_active_constant.h b/services/common/include/bundle_active_constant.h index d3caa42..e77268b 100644 --- a/services/common/include/bundle_active_constant.h +++ b/services/common/include/bundle_active_constant.h @@ -59,7 +59,7 @@ const int BOOT_BASED_DURATION_COLUMN_INDEX = 0; const int SCREEN_ON_DURATION_COLUMN_INDEX = 1; const int DURATION_FLAG_COLUMN_INDEX = 2; const int TWO_SECONDS = 2 * 1000; -const int64_t SIX_DAY_IN_MILLIS_MAX = 6 * 24 * 60 * 60 * 1000; +const int64_t SIX_DAY_IN_MILLIS_MAX = 1 * 6 * 30 * 60 * 1000; const int64_t LAST_TIME_IN_MILLIS_MIN = 0; const int64_t EVENT_TIME_IN_MILLIS_MIN = 0; const int64_t EVENT_BEGIN_TIME_INITIAL_VALUE = -1; diff --git a/services/common/include/bundle_active_core.h b/services/common/include/bundle_active_core.h index 1956dc5..a9b6868 100644 --- a/services/common/include/bundle_active_core.h +++ b/services/common/include/bundle_active_core.h @@ -60,7 +60,7 @@ public: /* * function: OnStatsChanged, report flush to disk, end_of_day event to service. */ - void OnStatsChanged() override; + void OnStatsChanged(const int userId) override; /* * function: OnStatsChanged, when device reboot after more than one day, BundleActiveUserService * will use it to flush group info. @@ -91,10 +91,10 @@ public: * function: SetHandler, BundleActiveService call it to set event report handler */ void SetHandler(const std::shared_ptr& reportHandler); - // flush database. - void RestoreToDatabase(); - // flush database - void RestoreToDatabaseLocked(); + // flush database for one user data + void RestoreToDatabase(const int userId); + // flush database for one user data + void RestoreToDatabaseLocked(const int userId); // called when device shutdown, update the in-memory stat and flush the database. void ShutDown(); // query the package stat for calling user. @@ -108,7 +108,7 @@ public: // query the app group for calling app. int QueryPackageGroup(const int userId, const std::string bundleName); // get the wall time and check if the wall time is changed. - int64_t CheckTimeChangeAndGetWallTime(); + int64_t CheckTimeChangeAndGetWallTime(int userId = 0); // convert event timestamp from boot based time to wall time. void ConvertToSystemTimeLocked(BundleActiveEvent& event); // get or create BundleActiveUserService object for specifice user. @@ -122,6 +122,7 @@ public: void GetAllActiveUser(std::vector &osAccountInfos); // when service stop, call it to unregister commen event and shutdown call back. void UnRegisterSubscriber(); + int64_t GetSystemTimeMs(); private: static const int64_t FLUSH_INTERVAL = TWO_MINUTE; @@ -138,6 +139,7 @@ private: std::map> userStatServices_; void RegisterSubscriber(); std::shared_ptr commonEventSubscriber_; + void RestoreAllData(); }; } } diff --git a/services/common/include/bundle_active_usage_database.h b/services/common/include/bundle_active_usage_database.h index 345a247..f52a995 100644 --- a/services/common/include/bundle_active_usage_database.h +++ b/services/common/include/bundle_active_usage_database.h @@ -81,6 +81,7 @@ private: void DeleteUninstalledInfo(const int userId, const std::string& bundleName, const std::string& tableName, unsigned int databaseType); int32_t CreateDatabasePath(); + int64_t GetSystemTimeMs(); private: std::vector databaseFiles_; diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index 5f09345..60fe6d3 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -13,6 +13,9 @@ * limitations under the License. */ +#include +#include + #include "time_service_client.h" #include "bundle_active_event.h" @@ -127,10 +130,10 @@ void BundleActiveCore::Init() sptr timer = MiscServices::TimeServiceClient::GetInstance(); do { realTimeShot_ = timer->GetBootTimeMs(); - systemTimeShot_ = timer->GetWallTimeMs(); + systemTimeShot_ = GetSystemTimeMs(); } while (realTimeShot_ == -1 && systemTimeShot_ == -1); realTimeShot_ = timer->GetBootTimeMs(); - systemTimeShot_ = timer->GetWallTimeMs(); + systemTimeShot_ = GetSystemTimeMs(); bundleGroupController_ = std::make_shared(); BUNDLE_ACTIVE_LOGI("system time shot is %{public}lld", systemTimeShot_); } @@ -190,7 +193,7 @@ void BundleActiveCore::OnBundleUninstalled(const int userId, const std::string& { BUNDLE_ACTIVE_LOGI("BundleActiveCore::OnBundleUninstalled CALLED"); std::lock_guard lock(mutex_); - int64_t timeNow = CheckTimeChangeAndGetWallTime(); + int64_t timeNow = CheckTimeChangeAndGetWallTime(userId); auto service = GetUserDataAndInitializeIfNeeded(userId, timeNow); if (service == nullptr) { return; @@ -199,31 +202,20 @@ void BundleActiveCore::OnBundleUninstalled(const int userId, const std::string& bundleGroupController_->OnBundleUninstalled(userId, bundleName); } -void BundleActiveCore::OnStatsChanged() +void BundleActiveCore::OnStatsChanged(const int userId) { - auto event = AppExecFwk::InnerEvent::Get(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); if (!handler_.expired()) { BUNDLE_ACTIVE_LOGI("BundleActiveCore::OnStatsChanged send flush to disk event"); + BundleActiveReportHandlerObject tmpHandlerObject; + tmpHandlerObject.userId_ = userId; + std::shared_ptr handlerobjToPtr = + std::make_shared(tmpHandlerObject); + auto event = AppExecFwk::InnerEvent::Get(BundleActiveReportHandler::MSG_FLUSH_TO_DISK, handlerobjToPtr); handler_.lock()->SendEvent(event, FLUSH_INTERVAL); } } -void BundleActiveCore::RestoreToDatabase() -{ - BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabase called"); - std::lock_guard lock(mutex_); - sptr timer = MiscServices::TimeServiceClient::GetInstance(); - BundleActiveEvent event; - event.eventId_ = BundleActiveEvent::FLUSH; - event.timeStamp_ = timer->GetBootTimeMs(); - event.abilityId_ = ""; - ReportEventToAllUserId(event); - RestoreToDatabaseLocked(); -} - -void BundleActiveCore::RestoreToDatabaseLocked() -{ - BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked called"); +void BundleActiveCore::RestoreAllData() { for (std::map>::iterator it = userStatServices_.begin(); it != userStatServices_.end(); it++) { std::shared_ptr service = it->second; @@ -231,7 +223,7 @@ void BundleActiveCore::RestoreToDatabaseLocked() BUNDLE_ACTIVE_LOGI("service in BundleActiveCore::RestoreToDatabaseLocked() is null"); } BUNDLE_ACTIVE_LOGI("userid is %{public}d ", service->userId_); - service->RestoreStats(); + service->RestoreStats(true); if (bundleGroupController_ != nullptr && bundleGroupController_->bundleUserHistory_ != nullptr) { bundleGroupController_->RestoreToDatabase(it->first); } @@ -245,6 +237,44 @@ void BundleActiveCore::RestoreToDatabaseLocked() } } +void BundleActiveCore::RestoreToDatabase(const int userId) +{ + BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabase called"); + sptr timer = MiscServices::TimeServiceClient::GetInstance(); + BundleActiveEvent event; + event.eventId_ = BundleActiveEvent::FLUSH; + event.timeStamp_ = GetSystemTimeMs(); + event.abilityId_ = ""; + auto it = userStatServices_.find(userId); + if (it != userStatServices_.end()) { + it->second->ReportEvent(event); + } + if (bundleGroupController_ != nullptr) { + bundleGroupController_->RestoreDurationToDatabase(); + } + RestoreToDatabaseLocked(userId); +} + +void BundleActiveCore::RestoreToDatabaseLocked(const int userId) +{ + BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked called"); + auto it = userStatServices_.find(userId); + if (it != userStatServices_.end()) { + it->second->RestoreStats(false); + } + if (bundleGroupController_ != nullptr) { + bundleGroupController_->RestoreDurationToDatabase(); + } + if (!handler_.expired()) { + BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); + handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); + } + if (!handler_.expired()) { + BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); + handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); + } +} + void BundleActiveCore::ShutDown() { BUNDLE_ACTIVE_LOGI("BundleActiveCore::ShutDown called"); @@ -255,7 +285,7 @@ void BundleActiveCore::ShutDown() event.bundleName_ = BundleActiveEvent::DEVICE_EVENT_PACKAGE_NAME; bundleGroupController_->ShutDown(timeStamp); ReportEventToAllUserId(event); - RestoreToDatabaseLocked(); + RestoreAllData(); } void BundleActiveCore::OnStatsReload() @@ -268,26 +298,36 @@ void BundleActiveCore::OnSystemUpdate(int userId) { } -int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime() +int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime(int userId) { - BUNDLE_ACTIVE_LOGI("BundleActiveCore::CheckTimeChangeAndGetWallTime called"); + BUNDLE_ACTIVE_LOGI("BundleActiveCore::CheckTimeChangeAndGetWallTime called, userId is %{public}d", userId); sptr timer = MiscServices::TimeServiceClient::GetInstance(); - int64_t actualSystemTime = timer->GetWallTimeMs(); + int64_t actualSystemTime = GetSystemTimeMs(); int64_t actualRealTime = timer->GetBootTimeMs(); int64_t expectedSystemTime = (actualRealTime - realTimeShot_) + systemTimeShot_; int64_t diffSystemTime = actualSystemTime - expectedSystemTime; + BUNDLE_ACTIVE_LOGI("asystime is %{public}lld, artime is %{public}lld, esystime is %{public}lld, " + "diff is %{public}lld", actualSystemTime, actualRealTime, expectedSystemTime, diffSystemTime); if (std::abs(diffSystemTime) > TIME_CHANGE_THRESHOLD_MILLIS) { // 时区变换逻辑 - BUNDLE_ACTIVE_LOGI("time changed!"); - for (std::map>::iterator it = userStatServices_.begin(); - it != userStatServices_.end(); it++) { - BUNDLE_ACTIVE_LOGI("BundleActiveCore::CheckTimeChangeAndGetWallTime in update time loop"); - std::shared_ptr service = it->second; - service->RenewTableTime(expectedSystemTime, actualSystemTime); + auto it = userStatServices_.find(userId); + if (it != userStatServices_.end()) { + BundleActiveEvent event; + event.eventId_ = BundleActiveEvent::FLUSH; + event.timeStamp_ = GetSystemTimeMs(); + event.abilityId_ = ""; + it->second->ReportEvent(event); + it->second->RestoreStats(true); + it->second->RenewTableTime(expectedSystemTime, actualSystemTime); + it->second->LoadActiveStats(actualSystemTime, false); } realTimeShot_ = actualRealTime; systemTimeShot_ = actualSystemTime; } + if (!handler_.expired()) { + BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); + handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); + } return actualSystemTime; } @@ -314,11 +354,14 @@ void BundleActiveCore::OnUserRemoved(const int userId) int BundleActiveCore::ReportEvent(BundleActiveEvent& event, const int userId) { std::lock_guard lock(mutex_); + if (userId == 0) { + return -1; + } BUNDLE_ACTIVE_LOGI("BundleActiveCore::ReportEvent called"); BUNDLE_ACTIVE_LOGI("report event called bundle name %{public}s time %{public}lld userId %{public}d, " "eventid %{public}d, in lock range", event.bundleName_.c_str(), event.timeStamp_, userId, event.eventId_); sptr timer = MiscServices::TimeServiceClient::GetInstance(); - int64_t timeNow = CheckTimeChangeAndGetWallTime(); + int64_t timeNow = CheckTimeChangeAndGetWallTime(userId); int64_t bootBasedTimeStamp = timer->GetBootTimeMs(); ConvertToSystemTimeLocked(event); std::shared_ptr service = GetUserDataAndInitializeIfNeeded(userId, timeNow); @@ -348,7 +391,7 @@ int BundleActiveCore::ReportEventToAllUserId(BundleActiveEvent& event) } BUNDLE_ACTIVE_LOGI("BundleActiveCore::ReportEventToAllUserId SERVICE user ID IS userId %{public}d", service->userId_); - service->ReportForFlushAndShutdown(event); + service->ReportForShutdown(event); return 0; } return 0; @@ -360,7 +403,7 @@ std::vector BundleActiveCore::QueryPackageStats(const BUNDLE_ACTIVE_LOGI("BundleActiveCore::QueryPackageStats called"); std::lock_guard lock(mutex_); std::vector result; - int64_t timeNow = CheckTimeChangeAndGetWallTime(); + int64_t timeNow = CheckTimeChangeAndGetWallTime(userId); BUNDLE_ACTIVE_LOGI("BundleActiveCore::QueryPackageStats begin time is %{public}lld, end time is %{public}lld, " "intervaltype is %{public}d", beginTime, endTime, intervalType); if (beginTime > timeNow || beginTime >= endTime) { @@ -382,7 +425,7 @@ std::vector BundleActiveCore::QueryEvents(const int userId, c BUNDLE_ACTIVE_LOGI("BundleActiveCore::QueryEvents called"); std::vector result; std::lock_guard lock(mutex_); - int64_t timeNow = CheckTimeChangeAndGetWallTime(); + int64_t timeNow = CheckTimeChangeAndGetWallTime(userId); if (beginTime > timeNow || beginTime >= endTime) { return result; } @@ -424,5 +467,23 @@ void BundleActiveCore::GetAllActiveUser(std::vector(now) < 0) { + BUNDLE_ACTIVE_LOGE("Get now time error"); + return 0; + } + auto tarEndTimePoint = std::chrono::system_clock::from_time_t(now); + auto tarDuration = std::chrono::duration_cast(tarEndTimePoint.time_since_epoch()); + int64_t tarDate = tarDuration.count(); + if (tarDate < 0) { + BUNDLE_ACTIVE_LOGE("tarDuration is less than 0."); + return -1; + } + return static_cast(tarDate); +} } } \ No newline at end of file diff --git a/services/common/src/bundle_active_usage_database.cpp b/services/common/src/bundle_active_usage_database.cpp index 9a378e5..f6cd89c 100644 --- a/services/common/src/bundle_active_usage_database.cpp +++ b/services/common/src/bundle_active_usage_database.cpp @@ -683,8 +683,12 @@ void BundleActiveUsageDatabase::FlushPackageInfo(unsigned int databaseType, cons queryCondition.push_back(iter->first); valuesBucket.PutLong(BUNDLE_ACTIVE_DB_BUNDLE_STARTED_COUNT, iter->second->bundleStartedCount_); valuesBucket.PutLong(BUNDLE_ACTIVE_DB_LAST_TIME, (iter->second->lastTimeUsed_ - stats.beginTime_)); - valuesBucket.PutLong(BUNDLE_ACTIVE_DB_LAST_TIME_CONTINUOUS_TASK, (iter->second->lastContiniousTaskUsed_ - - stats.beginTime_)); + if (iter->second->lastContiniousTaskUsed_ == -1) { + valuesBucket.PutLong(BUNDLE_ACTIVE_DB_LAST_TIME_CONTINUOUS_TASK, (iter->second->lastContiniousTaskUsed_)); + } else { + valuesBucket.PutLong(BUNDLE_ACTIVE_DB_LAST_TIME_CONTINUOUS_TASK, (iter->second->lastContiniousTaskUsed_ - + stats.beginTime_)); + } valuesBucket.PutLong(BUNDLE_ACTIVE_DB_TOTAL_TIME, iter->second->totalInFrontTime_); valuesBucket.PutLong(BUNDLE_ACTIVE_DB_TOTAL_TIME_CONTINUOUS_TASK, iter->second->totalContiniousTaskUsedTime_); rdbStore->Update(changeRow, tableName, valuesBucket, "userId = ? and bundleName = ?", queryCondition); @@ -741,7 +745,11 @@ shared_ptr BundleActiveUsageDatabase::GetCurrentUsageDa bundleActiveResult->GetLong(LAST_TIME_COLUMN_INDEX, relativeLastTimeUsed); usageStats->lastTimeUsed_ = relativeLastTimeUsed + currentPackageTime; bundleActiveResult->GetLong(LAST_TIME_CONTINUOUS_TASK_COLUMN_INDEX, relativeLastTimeFrontServiceUsed); - usageStats->lastContiniousTaskUsed_ = relativeLastTimeFrontServiceUsed + currentPackageTime; + if (relativeLastTimeFrontServiceUsed == -1) { + usageStats->lastContiniousTaskUsed_ = -1; + } else { + usageStats->lastContiniousTaskUsed_ = relativeLastTimeFrontServiceUsed + currentPackageTime; + } bundleActiveResult->GetLong(TOTAL_TIME_COLUMN_INDEX, usageStats->totalInFrontTime_); bundleActiveResult->GetLong(TOTAL_TIME_CONTINUOUS_TASK_COLUMN_INDEX, usageStats->totalContiniousTaskUsedTime_); bundleStats.insert(pair>(usageStats->bundleName_, @@ -753,7 +761,7 @@ shared_ptr BundleActiveUsageDatabase::GetCurrentUsageDa eventBeginTime_ = currentPackageTime; } sptr timer = MiscServices::TimeServiceClient::GetInstance(); - int64_t systemTime = timer->GetWallTimeMs(); + int64_t systemTime = GetSystemTimeMs(); intervalStats->lastTimeSaved_ = systemTime; return intervalStats; } @@ -936,6 +944,7 @@ void BundleActiveUsageDatabase::RenewTableTime(int64_t changedTime) vector tableArray = sortedTableArray_.at(i); for (unsigned int j = 0; j < tableArray.size(); j++) { int64_t newTime = tableArray.at(j) + changedTime; + BUNDLE_ACTIVE_LOGI("new table time is %{public}lld", newTime); if (newTime < 0) { DeleteInvalidTable(i, tableArray.at(j)); } else { @@ -990,7 +999,7 @@ void BundleActiveUsageDatabase::UpdateUsageData(int32_t databaseType, BundleActi } FlushPackageInfo(databaseType, stats); sptr timer = MiscServices::TimeServiceClient::GetInstance(); - int64_t systemTime = timer->GetWallTimeMs(); + int64_t systemTime = GetSystemTimeMs(); stats.lastTimeSaved_ = systemTime; } @@ -1073,7 +1082,11 @@ vector BundleActiveUsageDatabase::QueryDatabaseUsageSt bundleActiveResult->GetLong(LAST_TIME_COLUMN_INDEX, relativeLastTimeUsed); usageStats.lastTimeUsed_ = relativeLastTimeUsed + packageTableTime; bundleActiveResult->GetLong(LAST_TIME_CONTINUOUS_TASK_COLUMN_INDEX, relativeLastTimeFrontServiceUsed); - usageStats.lastContiniousTaskUsed_ = relativeLastTimeFrontServiceUsed + packageTableTime; + if (relativeLastTimeFrontServiceUsed == -1) { + usageStats.lastContiniousTaskUsed_ = -1; + } else { + usageStats.lastContiniousTaskUsed_ = relativeLastTimeFrontServiceUsed + packageTableTime; + } bundleActiveResult->GetLong(TOTAL_TIME_COLUMN_INDEX, usageStats.totalInFrontTime_); bundleActiveResult->GetLong(TOTAL_TIME_CONTINUOUS_TASK_COLUMN_INDEX, usageStats.totalContiniousTaskUsedTime_); @@ -1179,5 +1192,23 @@ void BundleActiveUsageDatabase::DeleteUninstalledInfo(const int userId, const st rdbStore->Delete(deletedRows, tableName, "userId = ? and bundleName = ?", queryCondition); } } + +int64_t BundleActiveUsageDatabase::GetSystemTimeMs() +{ + time_t now; + (void)time(&now); // unit is seconds. + if (static_cast(now) < 0) { + BUNDLE_ACTIVE_LOGE("Get now time error"); + return 0; + } + auto tarEndTimePoint = std::chrono::system_clock::from_time_t(now); + auto tarDuration = std::chrono::duration_cast(tarEndTimePoint.time_since_epoch()); + int64_t tarDate = tarDuration.count(); + if (tarDate < 0) { + BUNDLE_ACTIVE_LOGE("tarDuration is less than 0."); + return -1; + } + return static_cast(tarDate); +} } } \ No newline at end of file diff --git a/services/packagegroup/include/bundle_active_group_handler.h b/services/packagegroup/include/bundle_active_group_handler.h index cb9ec0d..a954957 100644 --- a/services/packagegroup/include/bundle_active_group_handler.h +++ b/services/packagegroup/include/bundle_active_group_handler.h @@ -48,7 +48,7 @@ public: static const int MSG_CHECK_BUNDLE_STATE = 0; static const int MSG_ONE_TIME_CHECK_BUNDLE_STATE = 1; static const int MSG_CHECK_IDLE_STATE = 2; - static const int CHECK_IDLE_INTERVAL = TEN_MINUTE; + static const int CHECK_IDLE_INTERVAL = ONE_MINUTE; private: std::shared_ptr bundleActiveGroupController_; diff --git a/services/packageusage/include/bundle_active_stats_update_listener.h b/services/packageusage/include/bundle_active_stats_update_listener.h index 5f0b3b8..6968b6c 100644 --- a/services/packageusage/include/bundle_active_stats_update_listener.h +++ b/services/packageusage/include/bundle_active_stats_update_listener.h @@ -19,7 +19,7 @@ namespace OHOS { namespace DeviceUsageStats { class BundleActiveStatsUpdateListener { - virtual void OnStatsChanged() = 0; + virtual void OnStatsChanged(const int userId) = 0; virtual void OnStatsReload() = 0; virtual void OnSystemUpdate(int userId) = 0; }; diff --git a/services/packageusage/include/bundle_active_user_service.h b/services/packageusage/include/bundle_active_user_service.h index 1f4dfcf..d7ad255 100644 --- a/services/packageusage/include/bundle_active_user_service.h +++ b/services/packageusage/include/bundle_active_user_service.h @@ -44,9 +44,9 @@ public: } void Init(const int64_t timeStamp); ~BundleActiveUserService() {}; - void ReportForFlushAndShutdown(const BundleActiveEvent& event); + void ReportForShutdown(const BundleActiveEvent& event); void ReportEvent(const BundleActiveEvent& event); - void RestoreStats(); + void RestoreStats(bool forced); void RenewStatsInMemory(const int64_t timeStamp); void RenewTableTime(int64_t oldTime, int64_t newTime); void OnUserRemoved(); @@ -57,6 +57,7 @@ public: const int64_t endTime, const int userId, const std::string& bundleName); std::vector QueryEvents(const int64_t beginTime, const int64_t endTime, const int userId, const std::string& bundleName); + void LoadActiveStats(const int64_t timeStamp, const bool& force); private: static const int64_t ONE_SECOND_MILLISECONDS = 1000; @@ -68,7 +69,6 @@ private: inline static const std::vector PERIOD_LENGTH = {BundleActiveCalendar::DAY_MILLISECONDS, BundleActiveCalendar::WEEK_MILLISECONDS, BundleActiveCalendar::MONTH_MILLISECONDS, BundleActiveCalendar::YEAR_MILLISECONDS}; - void LoadActiveStats(const int64_t timeStamp, const bool& force); void NotifyStatsChanged(); void NotifyNewUpdate(); void printstat(); diff --git a/services/packageusage/src/bundle_active_package_stats.cpp b/services/packageusage/src/bundle_active_package_stats.cpp index 01048a2..c297264 100644 --- a/services/packageusage/src/bundle_active_package_stats.cpp +++ b/services/packageusage/src/bundle_active_package_stats.cpp @@ -24,7 +24,7 @@ BundleActivePackageStats::BundleActivePackageStats() endTimeStamp_ = 0; // stop time of counting lastTimeUsed_ = 0; // the timestamp of last launch totalInFrontTime_ = 0; // the total time of bundle in front. - lastContiniousTaskUsed_ = 0; // the timestamp of bundle calling a continuous task. + lastContiniousTaskUsed_ = -1; // the timestamp of bundle calling a continuous task. totalContiniousTaskUsedTime_ = 0; // the total time of bundle use continuous tasks. startCount_ = 0; bundleStartedCount_ = 0; diff --git a/services/packageusage/src/bundle_active_report_handler.cpp b/services/packageusage/src/bundle_active_report_handler.cpp index 87b1496..d02a40d 100644 --- a/services/packageusage/src/bundle_active_report_handler.cpp +++ b/services/packageusage/src/bundle_active_report_handler.cpp @@ -50,7 +50,9 @@ void BundleActiveReportHandler::ProcessEvent(const AppExecFwk::InnerEvent::Point } case MSG_FLUSH_TO_DISK: { BUNDLE_ACTIVE_LOGI("FLUSH TO DISK HANDLE"); - bundleActiveCore_->RestoreToDatabase(); + auto ptrToHandlerobj = event->GetSharedObject(); + BundleActiveReportHandlerObject tmpHandlerobj = *ptrToHandlerobj; + bundleActiveCore_->RestoreToDatabase(tmpHandlerobj.userId_); break; } case MSG_REMOVE_USER: { diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index cdc1639..ae3abd4 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -64,9 +64,8 @@ void BundleActiveUserService::DeleteUninstalledBundleStats(const std::string& bu void BundleActiveUserService::RenewTableTime(int64_t oldTime, int64_t newTime) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called"); - RestoreStats(); + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called current event size is %{public}d", currentStats_[0]->events_.Size()); database_.RenewTableTime(newTime - oldTime); - LoadActiveStats(newTime, true); } void BundleActiveUserService::NotifyStatsChanged() @@ -74,7 +73,7 @@ void BundleActiveUserService::NotifyStatsChanged() if (!statsChanged_) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::NotifyStatsChanged() set stats changed to true"); statsChanged_ = true; - listener_.OnStatsChanged(); + listener_.OnStatsChanged(userId_); } } @@ -136,10 +135,10 @@ void BundleActiveUserService::ReportEvent(const BundleActiveEvent& event) NotifyStatsChanged(); } -void BundleActiveUserService::ReportForFlushAndShutdown(const BundleActiveEvent& event) +void BundleActiveUserService::ReportForShutdown(const BundleActiveEvent& event) { - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportForFlushAndShutdown() called"); - if (event.eventId_ != BundleActiveEvent::FLUSH && event.eventId_ != BundleActiveEvent::SHUTDOWN) { + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportForShutdown() called"); + if (event.eventId_ != BundleActiveEvent::SHUTDOWN) { return; } if (event.eventId_ == BundleActiveEvent::SHUTDOWN) { @@ -153,17 +152,20 @@ void BundleActiveUserService::ReportForFlushAndShutdown(const BundleActiveEvent& it->Update(event.bundleName_, event.continuousTaskAbilityName_, event.timeStamp_, event.eventId_, event.abilityId_); } - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportForFlushAndShutdown called notify"); + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportForShutdown called notify"); NotifyStatsChanged(); } -void BundleActiveUserService::RestoreStats() +void BundleActiveUserService::RestoreStats(bool forced) { - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RestoreStats() called"); - if (statsChanged_) { + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RestoreStats() called, userId is %{public}d", userId_); + if (statsChanged_ || forced) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RestoreStats() stat changed is true"); for (int i = 0; i < currentStats_.size(); i++) { database_.UpdateUsageData(i, *(currentStats_[i])); + if (i == 0) { + BUNDLE_ACTIVE_LOGI("RESOTRE EVENT SIZE IS %{public}d, USER ID IS %{public}d", currentStats_[i]->events_.Size(), userId_); + } } currentStats_[BundleActivePeriodStats::PERIOD_DAILY]->events_.Clear(); statsChanged_ = false; @@ -203,6 +205,9 @@ void BundleActiveUserService::LoadActiveStats(const int64_t timeStamp, const boo currentStats_[intervalType]->beginTime_ = tmpCalendar.GetMilliseconds(); currentStats_[intervalType]->endTime_ = timeStamp; } + for (auto it : currentStats_) { + BUNDLE_ACTIVE_LOGI("loadactive current begin time is %{public}lld", it->beginTime_); + } statsChanged_ = false; // 延长统计时间到第二天0点 dailyExpiryDate_.SetMilliseconds(timeStamp); @@ -241,7 +246,7 @@ void BundleActiveUserService::RenewStatsInMemory(const int64_t timeStamp) } (*it)->CommitTime(dailyExpiryDate_.GetMilliseconds() - 1); } - RestoreStats(); + RestoreStats(true); database_.RemoveOldData(timeStamp); LoadActiveStats(timeStamp, false); // 新建intervalstat或加载当前数据库数据 for (std::string continueBundleName : continueBundles) { // 更新所有事件的时间戳到新的begintime @@ -260,10 +265,9 @@ void BundleActiveUserService::RenewStatsInMemory(const int64_t timeStamp) (*itInterval)->Update(continueBundleName, it->first, beginTime, it->second, ""); } } - NotifyStatsChanged(); } } - RestoreStats(); + RestoreStats(true); } std::vector BundleActiveUserService::QueryPackageStats(int intervalType, @@ -300,7 +304,7 @@ std::vector BundleActiveUserService::QueryPackageStats } int64_t truncatedEndTime = std::min(currentStats->beginTime_, endTime); - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats bundle name is %{public}s", bundleName.c_str()); + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats bundle name is %{public}s, truncatedEndTime IS %{public}lld, begin time is %{public}lld", bundleName.c_str(), truncatedEndTime, currentStats->beginTime_); result = database_.QueryDatabaseUsageStats(intervalType, beginTime, truncatedEndTime, userId); BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats is %{public}d", result.size()); // if we need a in-memory stats, combine current stats with result from database. @@ -339,6 +343,7 @@ std::vector BundleActiveUserService::QueryEvents(const int64_ } BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryEvents bundle name is %{public}s", bundleName.c_str()); result = database_.QueryDatabaseEvents(beginTime, endTime, userId, bundleName); + BUNDLE_ACTIVE_LOGI("event database query size is %{public}d", result.size()); // if we need a in-memory stats, combine current stats with result from database. if (currentStats->endTime_ != 0 && endTime > currentStats->beginTime_) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryEvents need in memory stats"); -- Gitee From db86479a0d753bdd2b5008f83392c569d3ae9a6e Mon Sep 17 00:00:00 2001 From: houdisheng Date: Thu, 3 Mar 2022 22:06:26 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E8=BD=AC=E6=B5=8B=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: houdisheng --- services.zip | Bin 0 -> 83532 bytes services/common/src/bundle_active_core.cpp | 6 ++---- .../src/bundle_active_user_service.cpp | 10 +++++++--- 3 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 services.zip diff --git a/services.zip b/services.zip new file mode 100644 index 0000000000000000000000000000000000000000..6e7befb6ef712ce3ccd12bc066471e199fea5c2a GIT binary patch literal 83532 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 literal 0 HcmV?d00001 diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index 60fe6d3..88f3abb 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -13,9 +13,6 @@ * limitations under the License. */ -#include -#include - #include "time_service_client.h" #include "bundle_active_event.h" @@ -215,7 +212,8 @@ void BundleActiveCore::OnStatsChanged(const int userId) } } -void BundleActiveCore::RestoreAllData() { +void BundleActiveCore::RestoreAllData() +{ for (std::map>::iterator it = userStatServices_.begin(); it != userStatServices_.end(); it++) { std::shared_ptr service = it->second; diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index ae3abd4..76e473e 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -64,7 +64,8 @@ void BundleActiveUserService::DeleteUninstalledBundleStats(const std::string& bu void BundleActiveUserService::RenewTableTime(int64_t oldTime, int64_t newTime) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called"); - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called current event size is %{public}d", currentStats_[0]->events_.Size()); + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called current event size is %{public}d" + currentStats_[0]->events_.Size()); database_.RenewTableTime(newTime - oldTime); } @@ -164,7 +165,8 @@ void BundleActiveUserService::RestoreStats(bool forced) for (int i = 0; i < currentStats_.size(); i++) { database_.UpdateUsageData(i, *(currentStats_[i])); if (i == 0) { - BUNDLE_ACTIVE_LOGI("RESOTRE EVENT SIZE IS %{public}d, USER ID IS %{public}d", currentStats_[i]->events_.Size(), userId_); + BUNDLE_ACTIVE_LOGI("RESOTRE EVENT SIZE IS %{public}d, USER ID IS %{public}d", + currentStats_[i]->events_.Size(), userId_); } } currentStats_[BundleActivePeriodStats::PERIOD_DAILY]->events_.Clear(); @@ -304,7 +306,9 @@ std::vector BundleActiveUserService::QueryPackageStats } int64_t truncatedEndTime = std::min(currentStats->beginTime_, endTime); - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats bundle name is %{public}s, truncatedEndTime IS %{public}lld, begin time is %{public}lld", bundleName.c_str(), truncatedEndTime, currentStats->beginTime_); + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats bundle name is %{public}s, " + "truncatedEndTime IS %{public}lld, begin time is %{public}lld", + bundleName.c_str(), truncatedEndTime, currentStats->beginTime_); result = database_.QueryDatabaseUsageStats(intervalType, beginTime, truncatedEndTime, userId); BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats is %{public}d", result.size()); // if we need a in-memory stats, combine current stats with result from database. -- Gitee From 3901f3315ace07d4a48911ac940c191cc22781b1 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 09:14:30 +0800 Subject: [PATCH 03/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/src/bundle_active_core.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index 88f3abb..eb95e9d 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -312,7 +312,7 @@ int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime(int userId) if (it != userStatServices_.end()) { BundleActiveEvent event; event.eventId_ = BundleActiveEvent::FLUSH; - event.timeStamp_ = GetSystemTimeMs(); + event.timeStamp_ = expectedSystemTime; event.abilityId_ = ""; it->second->ReportEvent(event); it->second->RestoreStats(true); @@ -484,4 +484,4 @@ int64_t BundleActiveCore::GetSystemTimeMs() return static_cast(tarDate); } } -} \ No newline at end of file +} -- Gitee From 38980f340fb97e8c66a1677f5f49668782e24dad Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 09:17:49 +0800 Subject: [PATCH 04/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/packageusage/src/bundle_active_user_service.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index 76e473e..42c001a 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -64,8 +64,8 @@ void BundleActiveUserService::DeleteUninstalledBundleStats(const std::string& bu void BundleActiveUserService::RenewTableTime(int64_t oldTime, int64_t newTime) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called"); - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called current event size is %{public}d" - currentStats_[0]->events_.Size()); + BUNDLE_ACTIVE_LOGI("BundleActiveUserService::RenewTableTime called current event size is %{public}d", + currentStats_[0]->events_.Size()); database_.RenewTableTime(newTime - oldTime); } -- Gitee From 4b2c2ddbfd40243bb680757b6a1ff7ff6938b6ed Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 09:38:57 +0800 Subject: [PATCH 05/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services.zip | Bin 83532 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 services.zip diff --git a/services.zip b/services.zip deleted file mode 100644 index 6e7befb6ef712ce3ccd12bc066471e199fea5c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83532 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 -- Gitee From 234743cd2090b5871843be5b49bad2f0cf8c314c Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 10:49:16 +0800 Subject: [PATCH 06/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/include/bundle_active_constant.h | 2 +- .../packagegroup/src/bundle_active_group_controller.cpp | 1 - services/packageusage/include/bundle_active_calendar.h | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/services/common/include/bundle_active_constant.h b/services/common/include/bundle_active_constant.h index e77268b..2e3bd8c 100644 --- a/services/common/include/bundle_active_constant.h +++ b/services/common/include/bundle_active_constant.h @@ -59,7 +59,7 @@ const int BOOT_BASED_DURATION_COLUMN_INDEX = 0; const int SCREEN_ON_DURATION_COLUMN_INDEX = 1; const int DURATION_FLAG_COLUMN_INDEX = 2; const int TWO_SECONDS = 2 * 1000; -const int64_t SIX_DAY_IN_MILLIS_MAX = 1 * 6 * 30 * 60 * 1000; +const int64_t SIX_DAY_IN_MILLIS_MAX = 1 * 6 * 10 * 60 * 1000; const int64_t LAST_TIME_IN_MILLIS_MIN = 0; const int64_t EVENT_TIME_IN_MILLIS_MIN = 0; const int64_t EVENT_BEGIN_TIME_INITIAL_VALUE = -1; diff --git a/services/packagegroup/src/bundle_active_group_controller.cpp b/services/packagegroup/src/bundle_active_group_controller.cpp index ca79fea..070c8e3 100644 --- a/services/packagegroup/src/bundle_active_group_controller.cpp +++ b/services/packagegroup/src/bundle_active_group_controller.cpp @@ -126,7 +126,6 @@ bool BundleActiveGroupController::CheckEachBundleState(const int userId) for (auto oneBundleName : bundleNamesOfUser) { CheckAndUpdateGroup(oneBundleName, userId, bootBasedTimeStamp); } - bundleUserHistory_->printdata(userId); return true; } diff --git a/services/packageusage/include/bundle_active_calendar.h b/services/packageusage/include/bundle_active_calendar.h index fa0d88d..2e7a2f4 100644 --- a/services/packageusage/include/bundle_active_calendar.h +++ b/services/packageusage/include/bundle_active_calendar.h @@ -23,10 +23,10 @@ namespace DeviceUsageStats { class BundleActiveCalendar { public: static const int64_t ONE_SECOND_MILLISECONDS = 1000; - static const int64_t DAY_MILLISECONDS = (int64_t)1 * 1 * 30 * 60 * 1000; - static const int64_t WEEK_MILLISECONDS = (int64_t)7 * 24 * 60 * 60 * 1000; - static const int64_t MONTH_MILLISECONDS = (int64_t)30 * 24 * 60 * 60 * 1000; - static const int64_t YEAR_MILLISECONDS = (int64_t)365 * 24 * 60 * 60 * 1000; + static const int64_t DAY_MILLISECONDS = (int64_t)1 * 1 * 10 * 60 * 1000; + static const int64_t WEEK_MILLISECONDS = (int64_t)1 * 1 * 20 * 60 * 1000; + static const int64_t MONTH_MILLISECONDS = (int64_t)1 * 1 * 30 * 60 * 1000; + static const int64_t YEAR_MILLISECONDS = (int64_t)1 * 1 * 40 * 60 * 1000; BundleActiveCalendar(const int64_t timeStamp); BundleActiveCalendar() { -- Gitee From 6de241b92807ec270c8d67784d0507bb61300ce0 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 11:45:49 +0800 Subject: [PATCH 07/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/src/bundle_active_core.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index eb95e9d..2e0b13f 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -267,10 +267,6 @@ void BundleActiveCore::RestoreToDatabaseLocked(const int userId) BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); } - if (!handler_.expired()) { - BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); - handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); - } } void BundleActiveCore::ShutDown() @@ -318,14 +314,14 @@ int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime(int userId) it->second->RestoreStats(true); it->second->RenewTableTime(expectedSystemTime, actualSystemTime); it->second->LoadActiveStats(actualSystemTime, false); + if (!handler_.expired()) { + BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); + handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); + } } realTimeShot_ = actualRealTime; systemTimeShot_ = actualSystemTime; } - if (!handler_.expired()) { - BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); - handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); - } return actualSystemTime; } -- Gitee From 3ca1f4503d8402113f5457839a990e139821dfa5 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 15:27:42 +0800 Subject: [PATCH 08/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/src/bundle_active_core.cpp | 2 +- services/packageusage/src/bundle_active_user_service.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index 2e0b13f..4f261e2 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -313,7 +313,7 @@ int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime(int userId) it->second->ReportEvent(event); it->second->RestoreStats(true); it->second->RenewTableTime(expectedSystemTime, actualSystemTime); - it->second->LoadActiveStats(actualSystemTime, false); + it->second->LoadActiveStats(actualSystemTime, true); if (!handler_.expired()) { BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index 42c001a..d5bb03b 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -85,9 +85,10 @@ void BundleActiveUserService::NotifyNewUpdate() void BundleActiveUserService::ReportEvent(const BundleActiveEvent& event) { - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportEvent called"); + BUNDLE_ACTIVE_LOGI(" BundleActiveUserService::ReportEvent later than daily expire, B time is %{public}lld," + "E time is %{public}lld", currentStats_[0]->beginTime_, dailyExpiryDate_.GetMilliseconds()); if (event.timeStamp_ >= dailyExpiryDate_.GetMilliseconds()) { - BUNDLE_ACTIVE_LOGI(" BundleActiveUserService::ReportEvent later than daily expire"); + BUNDLE_ACTIVE_LOGI(" BundleActiveUserService::ReportEvent later than daily expire, renew data in memory"); RenewStatsInMemory(event.timeStamp_); } BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportEvent later than daily expire check done"); -- Gitee From c5a52def2d6b8b7b98f65ab057874f4714f61b37 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 15:38:42 +0800 Subject: [PATCH 09/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/src/bundle_active_service.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/common/src/bundle_active_service.cpp b/services/common/src/bundle_active_service.cpp index 9b7bfd2..412bd31 100644 --- a/services/common/src/bundle_active_service.cpp +++ b/services/common/src/bundle_active_service.cpp @@ -164,20 +164,26 @@ bool BundleActiveService::SubscribeContinuousTask() return true; } + void BundleActiveService::OnStop() { if (shutdownCallback_ != nullptr) { auto& powerManagerClient = OHOS::PowerMgr::PowerMgrClient::GetInstance(); powerManagerClient.UnRegisterShutdownCallback(shutdownCallback_); + delete shutdownCallback_; + shutdownCallback_ = nullptr; } else { shutdownCallback_ = new BundleActiveShutdownCallbackService(bundleActiveCore_); } auto& powerManagerClient = OHOS::PowerMgr::PowerMgrClient::GetInstance(); powerManagerClient.UnRegisterShutdownCallback(shutdownCallback_); bundleActiveCore_->UnRegisterSubscriber(); + delete shutdownCallback_; + shutdownCallback_ = nullptr; BUNDLE_ACTIVE_LOGI("[Server] OnStop"); } + int BundleActiveService::ReportEvent(std::string& bundleName, std::string& abilityName, std::string abilityId, const std::string& continuousTask, const int userId, const int eventId) { -- Gitee From 8aaf4ebb771012b7f17f3c3dfd94738350ff84e2 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 16:30:19 +0800 Subject: [PATCH 10/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/packageusage/src/bundle_active_event_tracker.cpp | 6 +++--- services/packageusage/src/bundle_active_package_stats.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/packageusage/src/bundle_active_event_tracker.cpp b/services/packageusage/src/bundle_active_event_tracker.cpp index 85d828b..caea54d 100644 --- a/services/packageusage/src/bundle_active_event_tracker.cpp +++ b/services/packageusage/src/bundle_active_event_tracker.cpp @@ -27,7 +27,7 @@ BundleActiveEventTracker::BundleActiveEventTracker() void BundleActiveEventTracker::CommitTime(const int64_t timeStamp) { - if (curStartTime_ != 0) { + if (curStartTime_) { duration_ += timeStamp - curStartTime_; curStartTime_ = 0; } @@ -35,7 +35,7 @@ void BundleActiveEventTracker::CommitTime(const int64_t timeStamp) void BundleActiveEventTracker::Update(int64_t timeStamp) { - if (curStartTime_ == 0) { + if (!curStartTime_) { count_++; } CommitTime(timeStamp); @@ -46,7 +46,7 @@ void BundleActiveEventTracker::Update(int64_t timeStamp) void BundleActiveEventTracker::AddToEventStats(std::vector& eventStatsList, int eventId, int64_t beginTime, int64_t endTime) { - if (count_ != 0 || duration_ != 0) { + if (count_ || duration_) { BundleActiveEventStats newEvent; newEvent.eventId_ = eventId; newEvent.count_ = count_; diff --git a/services/packageusage/src/bundle_active_package_stats.cpp b/services/packageusage/src/bundle_active_package_stats.cpp index c297264..95205f0 100644 --- a/services/packageusage/src/bundle_active_package_stats.cpp +++ b/services/packageusage/src/bundle_active_package_stats.cpp @@ -141,7 +141,7 @@ void BundleActivePackageStats::UpdateAbility(const int64_t timeStamp, const int std::map::iterator it = abilities_.find(abilityId); if (it != abilities_.end()) { int lastEventId = it->second; - // When we recieve a new event, first update the time stats according to the last event in map. + // When we receive a new event, first update the time stats according to the last event in map. switch (lastEventId) { case BundleActiveEvent::ABILITY_FOREGROUND: IncrementTimeUsed(timeStamp); @@ -175,7 +175,7 @@ void BundleActivePackageStats::UpdateLongTimeTask(const std::string& longTimeTas return; } - // When we recieve a new event, first update the time stats according to the last service event in map. + // When we receive a new event, first update the time stats according to the last service event in map. std::map::iterator it = longTimeTasks_.find(longTimeTaskName); if (it != longTimeTasks_.end()) { int lastEventId = it->second; -- Gitee From f4355d91f9b35659b6651a7d8a38be21c86a8037 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 21:35:23 +0800 Subject: [PATCH 11/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/src/bundle_active_core.cpp | 2 +- .../include/bundle_active_user_service.h | 2 +- .../src/bundle_active_user_service.cpp | 15 ++++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index 4f261e2..a278a89 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -313,7 +313,7 @@ int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime(int userId) it->second->ReportEvent(event); it->second->RestoreStats(true); it->second->RenewTableTime(expectedSystemTime, actualSystemTime); - it->second->LoadActiveStats(actualSystemTime, true); + it->second->LoadActiveStats(actualSystemTime, true, true); if (!handler_.expired()) { BUNDLE_ACTIVE_LOGI("BundleActiveCore::RestoreToDatabaseLocked remove flush to disk event"); handler_.lock()->RemoveEvent(BundleActiveReportHandler::MSG_FLUSH_TO_DISK); diff --git a/services/packageusage/include/bundle_active_user_service.h b/services/packageusage/include/bundle_active_user_service.h index d7ad255..6aa13e7 100644 --- a/services/packageusage/include/bundle_active_user_service.h +++ b/services/packageusage/include/bundle_active_user_service.h @@ -57,7 +57,7 @@ public: const int64_t endTime, const int userId, const std::string& bundleName); std::vector QueryEvents(const int64_t beginTime, const int64_t endTime, const int userId, const std::string& bundleName); - void LoadActiveStats(const int64_t timeStamp, const bool& force); + void LoadActiveStats(const int64_t timeStamp, const bool& force, const bool& timeChanged); private: static const int64_t ONE_SECOND_MILLISECONDS = 1000; diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index d5bb03b..b15dbb5 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -22,7 +22,7 @@ void BundleActiveUserService::Init(const int64_t timeStamp) { database_.InitDatabaseTableInfo(timeStamp); BUNDLE_ACTIVE_LOGI("BundleActiveUserService::Init called"); - LoadActiveStats(timeStamp, false); + LoadActiveStats(timeStamp, false, false); std::shared_ptr currentDailyStats = currentStats_[BundleActivePeriodStats::PERIOD_DAILY]; if (currentDailyStats != nullptr) { BundleActiveEvent startupEvent(BundleActiveEvent::STARTUP, timeStamp - ONE_SECOND_MILLISECONDS); @@ -175,7 +175,7 @@ void BundleActiveUserService::RestoreStats(bool forced) } } -void BundleActiveUserService::LoadActiveStats(const int64_t timeStamp, const bool& force) +void BundleActiveUserService::LoadActiveStats(const int64_t timeStamp, const bool& force, const bool& timeChanged) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::LoadActiveStats called"); BundleActiveCalendar tmpCalendar(0); @@ -208,12 +208,13 @@ void BundleActiveUserService::LoadActiveStats(const int64_t timeStamp, const boo currentStats_[intervalType]->beginTime_ = tmpCalendar.GetMilliseconds(); currentStats_[intervalType]->endTime_ = timeStamp; } - for (auto it : currentStats_) { - BUNDLE_ACTIVE_LOGI("loadactive current begin time is %{public}lld", it->beginTime_); - } statsChanged_ = false; // 延长统计时间到第二天0点 - dailyExpiryDate_.SetMilliseconds(timeStamp); + if (timeChanged) { + dailyExpiryDate_.SetMilliseconds(currentStats_[BundleActivePeriodStats::PERIOD_DAILY]->beginTime_); + } else { + dailyExpiryDate_.SetMilliseconds(timeStamp); + } dailyExpiryDate_.IncreaseDays(1); dailyExpiryDate_.TruncateToDay(); listener_.OnStatsReload(); @@ -251,7 +252,7 @@ void BundleActiveUserService::RenewStatsInMemory(const int64_t timeStamp) } RestoreStats(true); database_.RemoveOldData(timeStamp); - LoadActiveStats(timeStamp, false); // 新建intervalstat或加载当前数据库数据 + LoadActiveStats(timeStamp, false, false); // 新建intervalstat或加载当前数据库数据 for (std::string continueBundleName : continueBundles) { // 更新所有事件的时间戳到新的begintime int64_t beginTime = currentStats_[BundleActivePeriodStats::PERIOD_DAILY]->beginTime_; for (std::vector>::iterator itInterval = currentStats_.begin(); -- Gitee From 1e6a8c1ca868c974ece76dc14d041dc9a94f38da Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 21:40:45 +0800 Subject: [PATCH 12/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/packageusage/src/bundle_active_user_service.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index b15dbb5..b074324 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -287,11 +287,7 @@ std::vector BundleActiveUserService::QueryPackageStats if (intervalType < 0 || intervalType >= currentStats_.size()) { return result; } - auto currentStats = currentStats_[intervalType]; - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats, intervaltype is %{public}d, " - "current begin time is %{public}lld, current end time is %{public}lld", - intervalType, currentStats->beginTime_, currentStats->endTime_); if (currentStats == nullptr) { BUNDLE_ACTIVE_LOGE("current interval stat is null!"); return result; @@ -307,12 +303,7 @@ std::vector BundleActiveUserService::QueryPackageStats return result; } int64_t truncatedEndTime = std::min(currentStats->beginTime_, endTime); - - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats bundle name is %{public}s, " - "truncatedEndTime IS %{public}lld, begin time is %{public}lld", - bundleName.c_str(), truncatedEndTime, currentStats->beginTime_); result = database_.QueryDatabaseUsageStats(intervalType, beginTime, truncatedEndTime, userId); - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats is %{public}d", result.size()); // if we need a in-memory stats, combine current stats with result from database. if (currentStats->endTime_ != 0 && endTime > currentStats->beginTime_) { BUNDLE_ACTIVE_LOGI("BundleActiveUserService::QueryPackageStats need in memory stats"); -- Gitee From f1bf0e73ead87d621f1e756bf4f84911bafa943f Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 22:05:05 +0800 Subject: [PATCH 13/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/common/src/bundle_active_core.cpp | 3 ++- services/packageusage/src/bundle_active_user_service.cpp | 6 ++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/services/common/src/bundle_active_core.cpp b/services/common/src/bundle_active_core.cpp index a278a89..665887b 100644 --- a/services/common/src/bundle_active_core.cpp +++ b/services/common/src/bundle_active_core.cpp @@ -301,7 +301,8 @@ int64_t BundleActiveCore::CheckTimeChangeAndGetWallTime(int userId) int64_t expectedSystemTime = (actualRealTime - realTimeShot_) + systemTimeShot_; int64_t diffSystemTime = actualSystemTime - expectedSystemTime; BUNDLE_ACTIVE_LOGI("asystime is %{public}lld, artime is %{public}lld, esystime is %{public}lld, " - "diff is %{public}lld", actualSystemTime, actualRealTime, expectedSystemTime, diffSystemTime); + "diff is %{public}lld", + actualSystemTime, actualRealTime, expectedSystemTime, diffSystemTime); if (std::abs(diffSystemTime) > TIME_CHANGE_THRESHOLD_MILLIS) { // 时区变换逻辑 auto it = userStatServices_.find(userId); diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index b074324..2acf243 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -86,12 +86,12 @@ void BundleActiveUserService::NotifyNewUpdate() void BundleActiveUserService::ReportEvent(const BundleActiveEvent& event) { BUNDLE_ACTIVE_LOGI(" BundleActiveUserService::ReportEvent later than daily expire, B time is %{public}lld," - "E time is %{public}lld", currentStats_[0]->beginTime_, dailyExpiryDate_.GetMilliseconds()); + "E time is %{public}lld", + currentStats_[0]->beginTime_, dailyExpiryDate_.GetMilliseconds()); if (event.timeStamp_ >= dailyExpiryDate_.GetMilliseconds()) { BUNDLE_ACTIVE_LOGI(" BundleActiveUserService::ReportEvent later than daily expire, renew data in memory"); RenewStatsInMemory(event.timeStamp_); } - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportEvent later than daily expire check done"); std::shared_ptr currentDailyStats = currentStats_[BundleActivePeriodStats::PERIOD_DAILY]; if (!currentDailyStats) { return; @@ -127,13 +127,11 @@ void BundleActiveUserService::ReportEvent(const BundleActiveEvent& event) it->Update(event.bundleName_, event.continuousTaskAbilityName_, event.timeStamp_, event.eventId_, event.abilityId_); if (incrementBundleLaunch) { - BUNDLE_ACTIVE_LOGI(" BundleActiveUserService::ReportEvent increase bundle started count"); it->bundleStats_[event.bundleName_]->IncrementBundleLaunchedCount(); } break; } } - BUNDLE_ACTIVE_LOGI("BundleActiveUserService::ReportEvent called notify"); NotifyStatsChanged(); } -- Gitee From 9b4336d6bfd6b636035d0acc653554ce12cf7a71 Mon Sep 17 00:00:00 2001 From: houdisheng Date: Fri, 4 Mar 2022 23:32:18 +0800 Subject: [PATCH 14/14] modify report flush event time when time zone changed Signed-off-by: houdisheng --- services/packageusage/src/bundle_active_user_service.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/packageusage/src/bundle_active_user_service.cpp b/services/packageusage/src/bundle_active_user_service.cpp index 2acf243..386804d 100644 --- a/services/packageusage/src/bundle_active_user_service.cpp +++ b/services/packageusage/src/bundle_active_user_service.cpp @@ -214,7 +214,9 @@ void BundleActiveUserService::LoadActiveStats(const int64_t timeStamp, const boo dailyExpiryDate_.SetMilliseconds(timeStamp); } dailyExpiryDate_.IncreaseDays(1); - dailyExpiryDate_.TruncateToDay(); + if (!timeChanged) { + dailyExpiryDate_.TruncateToDay(); + } listener_.OnStatsReload(); BUNDLE_ACTIVE_LOGI("BundleActiveUserService::LoadActiveStats current expire time is %{public}lld, " "begin time is %{public}lld", dailyExpiryDate_.GetMilliseconds(), tmpCalendar.GetMilliseconds()); -- Gitee