diff --git a/services/native/include/battery_stats_core.h b/services/native/include/battery_stats_core.h index b1557ba73b046cefe0f6524adadeac176ec2764e..074a52ceb67168e467f471a7104e38ebd52252fc 100755 --- a/services/native/include/battery_stats_core.h +++ b/services/native/include/battery_stats_core.h @@ -16,7 +16,7 @@ #ifndef BATTERY_STATS_CORE_H #define BATTERY_STATS_CORE_H - +#include #include #include @@ -77,15 +77,21 @@ private: std::shared_ptr wakelockEntity_; int32_t lastSignalLevel_ = StatsUtils::INVALID_VALUE; int32_t lastBrightnessLevel_ = StatsUtils::INVALID_VALUE; + bool isScanning_ = false; std::string debugInfo_; void UpdateTimer(std::shared_ptr entity, StatsUtils::StatsType statsType, StatsUtils::StatsState state, int32_t uid = StatsUtils::INVALID_VALUE); void UpdateScreenStats(StatsUtils::StatsState state, int16_t level); void UpdateRadioStats(StatsUtils::StatsState state, int16_t level); - void UpdateConnectiviyStats(StatsUtils::StatsType statsType, StatsUtils::StatsState state, int32_t uid); + void UpdateConnectivityStats(StatsUtils::StatsType statsType, StatsUtils::StatsState state, int32_t uid); void UpdateCommonStats(StatsUtils::StatsType statsType, StatsUtils::StatsState state, int32_t uid); void CreatePartEntity(); void CreateAppEntity(); + void SaveForHardware(Json::Value& root); + void SaveForSoftware(Json::Value& root); + void SaveForSoftwareCommon(Json::Value& root, int32_t uid); + void SaveForSoftwareConnectivity(Json::Value& root, int32_t uid); + void SaveForPower(Json::Value& root); }; } // namespace PowerMgr } // namespace OHOS diff --git a/services/native/include/entities/battery_stats_entity.h b/services/native/include/entities/battery_stats_entity.h index f9a7fe0d1b7f2257a311e699c9bfb9cbd1fb68ec..25474c17ad7f627911bd42d203d3a62a41eddd42 100755 --- a/services/native/include/entities/battery_stats_entity.h +++ b/services/native/include/entities/battery_stats_entity.h @@ -45,6 +45,7 @@ public: virtual void UpdateUidMap(int32_t uid); virtual int64_t GetCpuTimeMs(int32_t uid); virtual void UpdateCpuTime(); + virtual std::vector GetUids(); virtual void DumpInfo(std::string& result, int32_t uid = StatsUtils::INVALID_VALUE); BatteryStatsInfo::ConsumptionType GetConsumptionType(); static double GetTotalPowerMah(); diff --git a/services/native/include/entities/uid_entity.h b/services/native/include/entities/uid_entity.h index 718b1a61a192d4152df7772169f40147ab1c9f73..597034afcee677da4c1700b59f36d9df9b1d31e9 100755 --- a/services/native/include/entities/uid_entity.h +++ b/services/native/include/entities/uid_entity.h @@ -32,6 +32,7 @@ public: double GetStatsPowerMah(StatsUtils::StatsType statsType, int32_t uid = StatsUtils::INVALID_VALUE) override; void UpdateUidMap(int32_t uid) override; + std::vector GetUids() override; void Reset() override; void DumpInfo(std::string& result, int32_t uid = StatsUtils::INVALID_VALUE) override; private: diff --git a/services/native/src/battery_stats_core.cpp b/services/native/src/battery_stats_core.cpp index ee51d642753aa3e65f056a3b5f9f41bec0ce9289..473fa2f0ba6ebb0aca7a37eafd4f45b0ca727139 100755 --- a/services/native/src/battery_stats_core.cpp +++ b/services/native/src/battery_stats_core.cpp @@ -17,7 +17,6 @@ #include #include -#include #include #include "battery_info.h" @@ -257,7 +256,7 @@ void BatteryStatsCore::UpdateStats(StatsUtils::StatsType statsType, long time, l STATS_HILOGI(STATS_MODULE_SERVICE, "Exit for data and duration updating"); } -void BatteryStatsCore::UpdateConnectiviyStats(StatsUtils::StatsType statsType, StatsUtils::StatsState state, +void BatteryStatsCore::UpdateConnectivityStats(StatsUtils::StatsType statsType, StatsUtils::StatsState state, int32_t uid) { STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); @@ -340,7 +339,7 @@ void BatteryStatsCore::UpdateStats(StatsUtils::StatsType statsType, StatsUtils:: case StatsUtils::STATS_TYPE_PHONE_ACTIVE: case StatsUtils::STATS_TYPE_BLUETOOTH_SCAN: case StatsUtils::STATS_TYPE_WIFI_SCAN: - UpdateConnectiviyStats(statsType, state, uid); + UpdateConnectivityStats(statsType, state, uid); break; case StatsUtils::STATS_TYPE_CAMERA_ON: case StatsUtils::STATS_TYPE_FLASHLIGHT_ON: @@ -360,36 +359,40 @@ void BatteryStatsCore::UpdateStats(StatsUtils::StatsType statsType, StatsUtils:: void BatteryStatsCore::UpdateRadioStats(StatsUtils::StatsState state, int16_t level) { STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + STATS_HILOGI(STATS_MODULE_SERVICE, "Last signal level: %{public}d", lastSignalLevel_); - bool isScanning = false; auto scanTimer = radioEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_RADIO_SCAN); - if (scanTimer == nullptr) { - STATS_HILOGE(STATS_MODULE_SERVICE, "Found no related timer, update failed"); - return; - } + if (state == StatsUtils::STATS_STATE_NETWORK_SEARCH) { - isScanning = true; + isScanning_ = true; STATS_HILOGI(STATS_MODULE_SERVICE, "Updated %{public}s timer for state: %{public}d", StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_SCAN).c_str(), state); scanTimer->StartRunning(); + } else { + STATS_HILOGD(STATS_MODULE_SERVICE, "Stop network search"); + isScanning_ = false; } - if (!isScanning) { + if (!isScanning_) { STATS_HILOGI(STATS_MODULE_SERVICE, "Updated %{public}s timer for state: %{public}d", StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_SCAN).c_str(), state); scanTimer->StopRunning(); } - if (lastSignalLevel_ != level) { - if (lastSignalLevel_ > StatsUtils::INVALID_VALUE) { - auto oldTimer = radioEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_RADIO_ON, lastSignalLevel_); - if (oldTimer != nullptr) { - STATS_HILOGI(STATS_MODULE_SERVICE, "Stop %{public}s timer for last level: %{public}d", - StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_ON).c_str(), lastSignalLevel_); - oldTimer->StopRunning(); - } else { - STATS_HILOGE(STATS_MODULE_SERVICE, "Found no %{public}s timer, update level: %{public}d failed", - StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_ON).c_str(), lastSignalLevel_); - } + if (lastSignalLevel_ <= StatsUtils::INVALID_VALUE || + (level > StatsUtils::INVALID_VALUE && level == lastSignalLevel_)) { + auto signalTimer = radioEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_RADIO_ON, level); + STATS_HILOGI(STATS_MODULE_SERVICE, "Start %{public}s timer for first/same level: %{public}d", + StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_ON).c_str(), level); + signalTimer->StartRunning(); + } else if (lastSignalLevel_ != level) { + auto oldTimer = radioEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_RADIO_ON, lastSignalLevel_); + if (oldTimer != nullptr) { + STATS_HILOGI(STATS_MODULE_SERVICE, "Stop %{public}s timer for last level: %{public}d", + StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_ON).c_str(), lastSignalLevel_); + oldTimer->StopRunning(); + } else { + STATS_HILOGE(STATS_MODULE_SERVICE, "Found no %{public}s timer, update level: %{public}d failed", + StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_ON).c_str(), lastSignalLevel_); } auto newTimer = radioEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_RADIO_ON, level); if (newTimer != nullptr) { @@ -400,36 +403,36 @@ void BatteryStatsCore::UpdateRadioStats(StatsUtils::StatsState state, int16_t le STATS_HILOGE(STATS_MODULE_SERVICE, "Found no %{public}s timer for level: %{public}d, update failed", StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_RADIO_ON).c_str(), level); } - lastSignalLevel_ = level; } + lastSignalLevel_ = level; STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); } void BatteryStatsCore::UpdateScreenStats(StatsUtils::StatsState state, int16_t level) { STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + STATS_HILOGI(STATS_MODULE_SERVICE, "Last brightness level: %{public}d", lastBrightnessLevel_); + auto onTimer = screenEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_SCREEN_ON); - if (onTimer == nullptr) { - STATS_HILOGE(STATS_MODULE_SERVICE, "Found no %{public}s timer, update failed", - StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_SCREEN_ON).c_str()); - return; - } if (state == StatsUtils::STATS_STATE_DISPLAY_OFF) { STATS_HILOGI(STATS_MODULE_SERVICE, "Stop %{public}s timer for state: %{public}d", StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_SCREEN_ON).c_str(), state); onTimer->StopRunning(); - if (lastBrightnessLevel_ != StatsUtils::INVALID_VALUE) { + if (lastBrightnessLevel_ > StatsUtils::INVALID_VALUE) { auto brightnessTimer = screenEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_SCREEN_BRIGHTNESS, lastBrightnessLevel_); + STATS_HILOGI(STATS_MODULE_SERVICE, "Stop timer for last level: %{public}d", lastBrightnessLevel_); brightnessTimer->StopRunning(); } } else { STATS_HILOGI(STATS_MODULE_SERVICE, "Start %{public}s timer for state: %{public}d", StatsUtils::ConvertStatsType(StatsUtils::STATS_TYPE_SCREEN_ON).c_str(), state); onTimer->StartRunning(); - if (lastBrightnessLevel_ == StatsUtils::INVALID_VALUE) { + if (lastBrightnessLevel_ <= StatsUtils::INVALID_VALUE || + (level > StatsUtils::INVALID_VALUE && level == lastBrightnessLevel_)) { auto brightnessTimer = screenEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_SCREEN_BRIGHTNESS, level); + STATS_HILOGI(STATS_MODULE_SERVICE, "Start screen_brightness timer for first/same level: %{public}d", level); brightnessTimer->StartRunning(); } else if (lastBrightnessLevel_ != level) { auto oldTimer = screenEntity_->GetOrCreateTimer(StatsUtils::STATS_TYPE_SCREEN_BRIGHTNESS, @@ -444,12 +447,10 @@ void BatteryStatsCore::UpdateScreenStats(StatsUtils::StatsState state, int16_t l "Found no screen_brightness timer for level: %{public}d, update failed", lastBrightnessLevel_); } if (newTimer != nullptr) { - STATS_HILOGI(STATS_MODULE_SERVICE, "Start screen_brightness timer for latest level: %{public}d", - level); + STATS_HILOGI(STATS_MODULE_SERVICE, "Start screen_brightness timer for latest level: %{public}d", level); newTimer->StartRunning(); } else { - STATS_HILOGE(STATS_MODULE_SERVICE, - "Found no screen_brightness timer for level: %{public}d, update failed", level); + STATS_HILOGE(STATS_MODULE_SERVICE, "Found no timer for level: %{public}d, update failed", level); } } } @@ -472,6 +473,11 @@ void BatteryStatsCore::UpdateTimer(std::shared_ptr entity, S timer = entity->GetOrCreateTimer(statsType); } + if (timer == nullptr) { + STATS_HILOGE(STATS_MODULE_SERVICE, "Timer is null, return"); + return; + } + switch (state) { case StatsUtils::STATS_STATE_ACTIVATED: timer->StartRunning(); @@ -725,25 +731,159 @@ double BatteryStatsCore::GetPartStatsPercent(const BatteryStatsInfo::Consumption return partStatsPercent; } -bool BatteryStatsCore::SaveBatteryStatsData() +void BatteryStatsCore::SaveForHardware(Json::Value& root) +{ + STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + // Save for Bluetooth + root["Hardware"]["bluetooth_on"] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_BLUETOOTH_ON)); + + // Save for Screen + root["Hardware"]["screen_on"] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_SCREEN_ON)); + for (uint16_t brightNess = 0; brightNess <= StatsUtils::SCREEN_BRIGHTNESS_BIN; brightNess++) { + root["Hardware"]["screen_brightness"][brightNess] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_SCREEN_BRIGHTNESS, brightNess)); + } + + // Save for Wifi + root["Hardware"]["wifi_on"] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_WIFI_ON)); + + // Save for CPU idle + root["Hardware"]["cpu_idle"] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_PHONE_IDLE)); + + // Save for Phone + root["Hardware"]["radio_active"] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_PHONE_ACTIVE)); + + // Save for Radio + root["Hardware"]["radio_scan"] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_RADIO_SCAN)); + for (uint16_t signal = 0; signal <= StatsUtils::RADIO_SIGNAL_BIN; signal++) { + root["Hardware"]["radio_on"][signal] = + Json::Value(GetTotalTimeMs(StatsUtils::STATS_TYPE_RADIO_ON, signal)); + } + STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); +} + +void BatteryStatsCore::SaveForSoftware(Json::Value& root) +{ + STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + for (auto it : uidEntity_->GetUids()) { + SaveForSoftwareCommon(root, it); + SaveForSoftwareConnectivity(root, it); + } + STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); +} + +void BatteryStatsCore::SaveForSoftwareCommon(Json::Value& root, int32_t uid) +{ + STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + // Save for camera related + root["Software"][uid]["camera_on"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_CAMERA_ON)); + + // Save for flashlight related + root["Software"][uid]["flashlight_on"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_FLASHLIGHT_ON)); + + // Save for gps related + root["Software"][uid]["gps_on"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_GPS_ON)); + + // Save for audio related + root["Software"][uid]["audio_on"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_AUDIO_ON)); + + // Save for wakelock related + root["Software"][uid]["cpu_awake"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_WAKELOCK_HOLD)); + + // Save for sensor related + root["Software"][uid]["sensor_gravity"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_SENSOR_GRAVITY_ON)); + root["Software"][uid]["sensor_proximity"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_SENSOR_PROXIMITY_ON)); + + // Save for cpu related + root["Software"][uid]["cpu_time"] = Json::Value(cpuEntity_->GetCpuTimeMs(uid)); + STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); +} + +void BatteryStatsCore::SaveForSoftwareConnectivity(Json::Value& root, int32_t uid) +{ + STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + // Save for Bluetooth related + root["Software"][uid]["bluetooth_scan"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_BLUETOOTH_SCAN)); + root["Software"][uid]["bluetooth_rx"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_BLUETOOTH_RX)); + root["Software"][uid]["bluetooth_tx"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_BLUETOOTH_TX)); + int32_t bluetoothTxBytes = GetTotalDataCount(StatsUtils::STATS_TYPE_BLUETOOTH_TX, uid); + int32_t bluetoothRxBytes = GetTotalDataCount(StatsUtils::STATS_TYPE_BLUETOOTH_RX, uid); + root["Software"][uid]["bluetooth_byte"] = Json::Value(bluetoothTxBytes + bluetoothRxBytes); + + // Save for wifi related + root["Software"][uid]["wifi_scan"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_WIFI_SCAN)); + root["Software"][uid]["wifi_rx"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_WIFI_RX)); + root["Software"][uid]["wifi_tx"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_WIFI_TX)); + int32_t wifiTxBytes = GetTotalDataCount(StatsUtils::STATS_TYPE_WIFI_TX, uid); + int32_t wifiRxBytes = GetTotalDataCount(StatsUtils::STATS_TYPE_WIFI_RX, uid); + root["Software"][uid]["wifi_byte"] = Json::Value(wifiTxBytes + wifiRxBytes); + + // Save for radio related + root["Software"][uid]["radio_tx"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_RADIO_TX)); + root["Software"][uid]["radio_rx"] = + Json::Value(GetTotalTimeMs(uid, StatsUtils::STATS_TYPE_RADIO_RX)); + int32_t radioTxBytes = GetTotalDataCount(StatsUtils::STATS_TYPE_RADIO_TX, uid); + int32_t radioRxBytes = GetTotalDataCount(StatsUtils::STATS_TYPE_RADIO_RX, uid); + root["Software"][uid]["radio_byte"] = Json::Value(radioTxBytes + radioRxBytes); + + STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); +} + +void BatteryStatsCore::SaveForPower(Json::Value& root) { STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); - ComputePower(); - Json::Value root; auto statsInfoList = BatteryStatsEntity::GetStatsInfoList(); for (auto iter = statsInfoList.begin(); iter != statsInfoList.end(); iter++) { if ((*iter)->GetConsumptionType() == BatteryStatsInfo::CONSUMPTION_TYPE_APP) { std::string name = std::to_string((*iter)->GetUid()); - root[name] = Json::Value((*iter)->GetPower()); + root["Power"][name] = Json::Value((*iter)->GetPower()); STATS_HILOGD(STATS_MODULE_SERVICE, "Saved power: %{public}lf for uid: %{public}s", (*iter)->GetPower(), name.c_str()); } else if ((*iter)->GetConsumptionType() != BatteryStatsInfo::CONSUMPTION_TYPE_USER) { std::string name = std::to_string((*iter)->GetConsumptionType()); - root[name] = Json::Value((*iter)->GetPower()); + root["Power"][name] = Json::Value((*iter)->GetPower()); STATS_HILOGD(STATS_MODULE_SERVICE, "Saved power: %{public}lf for type: %{public}s", (*iter)->GetPower(), name.c_str()); } } + STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); +} + +bool BatteryStatsCore::SaveBatteryStatsData() +{ + STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + ComputePower(); + Json::Value root; + + // Save for power + SaveForPower(root); + + // Save for hardware + SaveForHardware(root); + + // Save for software + SaveForSoftware(root); + Json::StreamWriterBuilder swb; std::ofstream ofs; ofs.open(BATTERY_STATS_JSON); @@ -773,7 +913,7 @@ bool BatteryStatsCore::LoadBatteryStatsData() } ifs.close(); BatteryStatsEntity::ResetStatsEntity(); - Json::Value::Members member = root.getMemberNames(); + Json::Value::Members member = root["Power"].getMemberNames(); std::map tmpUserPowerMap; for (auto iter = member.begin(); iter != member.end(); iter++) { auto id = std::stoi(*iter); @@ -781,7 +921,7 @@ bool BatteryStatsCore::LoadBatteryStatsData() if (id > StatsUtils::INVALID_VALUE) { info->SetUid(id); info->SetConsumptioType(BatteryStatsInfo::CONSUMPTION_TYPE_APP); - info->SetPower(root[*iter].asDouble()); + info->SetPower(root["Power"][*iter].asDouble()); int32_t usr = AccountSA::OhosAccountKits::GetInstance().GetDeviceAccountIdByUID(id); auto iter = tmpUserPowerMap.find(usr); if (iter != tmpUserPowerMap.end()) { @@ -793,7 +933,7 @@ bool BatteryStatsCore::LoadBatteryStatsData() } else if (id < StatsUtils::INVALID_VALUE && id > BatteryStatsInfo::CONSUMPTION_TYPE_INVALID) { info->SetUid(StatsUtils::INVALID_VALUE); info->SetConsumptioType(static_cast(id)); - info->SetPower(root[*iter].asDouble()); + info->SetPower(root["Power"][*iter].asDouble()); } STATS_HILOGD(STATS_MODULE_SERVICE, "Load power: %{public}lfmAh for id: %{public}d", info->GetPower(), id); BatteryStatsEntity::UpdateStatsInfoList(info); diff --git a/services/native/src/battery_stats_subscriber.cpp b/services/native/src/battery_stats_subscriber.cpp index ab1fa49a88a32308ae4f1e6fc1a9265ee741e44a..45be72be4e57f93de3be14c4391c93d387f83f68 100755 --- a/services/native/src/battery_stats_subscriber.cpp +++ b/services/native/src/battery_stats_subscriber.cpp @@ -45,6 +45,7 @@ void BatteryStatsSubscriber::OnReceiveEvent(const OHOS::EventFwk::CommonEventDat STATS_HILOGI(STATS_MODULE_SERVICE, "Received COMMON_EVENT_SHUTDOWN event"); } else if (action == OHOS::EventFwk::CommonEventSupport::COMMON_EVENT_BATTERY_CHANGED) { STATS_HILOGI(STATS_MODULE_SERVICE, "Received COMMON_EVENT_BATTERY_CHANGED event"); + statsService->GetBatteryStatsCore()->SaveBatteryStatsData(); int capacity = data.GetWant().GetIntParam( ToString(BatteryInfo::COMMON_EVENT_CODE_CAPACITY), StatsUtils::INVALID_VALUE); int pluggedType = data.GetWant().GetIntParam( diff --git a/services/native/src/entities/battery_stats_entity.cpp b/services/native/src/entities/battery_stats_entity.cpp index dbaad73938956f22555a2a2a5398d416e8295984..aada535e321bbf14534017387862b9bfa85a07f0 100755 --- a/services/native/src/entities/battery_stats_entity.cpp +++ b/services/native/src/entities/battery_stats_entity.cpp @@ -72,6 +72,13 @@ void BatteryStatsEntity::UpdateUidMap(int32_t uid) STATS_HILOGE(STATS_MODULE_SERVICE, "No need to update uid"); } +std::vector BatteryStatsEntity::GetUids() +{ + STATS_HILOGE(STATS_MODULE_SERVICE, "No need to get uids"); + std::vector empty; + return empty; +} + int64_t BatteryStatsEntity::GetCpuTimeMs(int32_t uid) { STATS_HILOGE(STATS_MODULE_SERVICE, "No need to get cpu time, return 0"); diff --git a/services/native/src/entities/screen_entity.cpp b/services/native/src/entities/screen_entity.cpp index 2406644c9e691823383920a537efc253df5a7987..1734573539a63ae8b08ad2803b182d34e2b6e17b 100755 --- a/services/native/src/entities/screen_entity.cpp +++ b/services/native/src/entities/screen_entity.cpp @@ -118,6 +118,10 @@ std::shared_ptr ScreenEntity::GetOrCreateTimer(StatsUt return screenOnTimer_; } } else if (statsType == StatsUtils::STATS_TYPE_SCREEN_BRIGHTNESS) { + if (level > StatsUtils::SCREEN_BRIGHTNESS_BIN) { + STATS_HILOGE(STATS_MODULE_SERVICE, "Illegal brightness"); + return nullptr; + } auto iter = screenBrightnessTimerMap_.find(level); if (iter != screenBrightnessTimerMap_.end() && iter->second != nullptr) { STATS_HILOGI(STATS_MODULE_SERVICE, "Got screen brightness timer of brightness level: %{public}d", level); diff --git a/services/native/src/entities/uid_entity.cpp b/services/native/src/entities/uid_entity.cpp index 825b0e705ce800952080419c120448287d0c2ecf..5402144b792a659f5ae9247d9e2f8852168dfaa9 100755 --- a/services/native/src/entities/uid_entity.cpp +++ b/services/native/src/entities/uid_entity.cpp @@ -15,7 +15,11 @@ #include "entities/uid_entity.h" +#include +#include #include +#include +#include #include "battery_stats_service.h" #include "stats_hilog_wrapper.h" @@ -46,6 +50,17 @@ void UidEntity::UpdateUidMap(int32_t uid) STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); } +std::vector UidEntity::GetUids() +{ + STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); + std::vector uids; + for (auto &iter : uidPowerMap_) { + uids.push_back(iter.first); + } + STATS_HILOGI(STATS_MODULE_SERVICE, "Exit"); + return uids; +} + double UidEntity::CalculateForConnectivity(int32_t uid) { STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); @@ -417,8 +432,28 @@ void UidEntity::DumpInfo(std::string& result, int32_t uid) STATS_HILOGI(STATS_MODULE_SERVICE, "Enter"); auto core = g_statsService->GetBatteryStatsCore(); for (auto &iter : uidPowerMap_) { + std::string bundleName = "NULL"; + auto bundleObj = + DelayedSingleton::GetInstance() + ->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); + if (bundleObj == nullptr) { + STATS_HILOGE(STATS_MODULE_SERVICE, "failed to get bundle manager service"); + } else { + sptr bmgr = iface_cast(bundleObj); + if (bmgr == nullptr) { + STATS_HILOGE(STATS_MODULE_SERVICE, "failed to get bundle manager proxy"); + } else { + bool res = bmgr->GetBundleNameForUid(iter.first, bundleName); + if (!res) { + STATS_HILOGE(STATS_MODULE_SERVICE, "failed to get bundle name for uid: %{public}d", iter.first); + } + } + } result.append("\n") .append(ToString(iter.first)) + .append("(Bundle name: ") + .append(bundleName) + .append(")") .append(":") .append("\n"); DumpForBluetooth(iter.first, result); diff --git a/utils/native/include/stats_utils.h b/utils/native/include/stats_utils.h index 96ebd39e15b70d8ce16761149514042b4338f54c..115ab7999cfddba8a0a1775bd4f81811a9c84255 100755 --- a/utils/native/include/stats_utils.h +++ b/utils/native/include/stats_utils.h @@ -24,7 +24,7 @@ namespace PowerMgr { class StatsUtils { public: static constexpr uint8_t DEFAULT_VALUE = 0; - static constexpr uint8_t SCREEN_BRIGHTNESS_BIN = 5; + static constexpr uint8_t SCREEN_BRIGHTNESS_BIN = 255; static constexpr uint8_t RADIO_SIGNAL_BIN = 5; static constexpr int8_t INVALID_VALUE = -1; static constexpr uint32_t MS_IN_HOUR = 3600000;