From 231f91d0ed40ec5ce7b6e9da7969a07c559229e1 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Tue, 8 Sep 2015 10:00:34 +0200 Subject: [PATCH] [Systeminfo] Fixes in CPU and STORAGE listeners, wifi additional check [Feature] Fixes for not triggering listeners continously, added control if something really changed. [Verification] Code compiles without errors. TCT passrate didn't change. Listeners checked in console. Change-Id: I33a72f5986c5271ed9d6ea0ef3ade3a2c3dd4a2f Signed-off-by: Piotr Kosko --- src/systeminfo/systeminfo_manager.cc | 70 ++++++++++++------------- src/systeminfo/systeminfo_manager.h | 5 +- src/systeminfo/systeminfo_properties_manager.cc | 41 ++++++++++----- 3 files changed, 63 insertions(+), 53 deletions(-) diff --git a/src/systeminfo/systeminfo_manager.cc b/src/systeminfo/systeminfo_manager.cc index 4585c7a..11487f0 100644 --- a/src/systeminfo/systeminfo_manager.cc +++ b/src/systeminfo/systeminfo_manager.cc @@ -124,14 +124,14 @@ static void OnBatteryChangedCb(keynode_t* node, void* event_ptr) { static gboolean OnCpuChangedCb(gpointer event_ptr) { LoggerD("Enter"); SysteminfoManager* manager = static_cast(event_ptr); - manager->CallListenerCallback(kPropertyIdCpu); + manager->CallCpuListenerCallback(); return G_SOURCE_CONTINUE; } static gboolean OnStorageChangedCb(gpointer event_ptr) { LoggerD("Enter"); SysteminfoManager* manager = static_cast(event_ptr); - manager->CallListenerCallback(kPropertyIdStorage); + manager->CallStorageListenerCallback(); return G_SOURCE_CONTINUE; } @@ -222,8 +222,11 @@ SysteminfoManager::SysteminfoManager(SysteminfoInstance* instance) sensor_handle_(-1), wifi_level_(WIFI_RSSI_LEVEL_0), cpu_load_(0), + last_cpu_load_(0), available_capacity_internal_(0), + last_available_capacity_internal_(0), available_capacity_mmc_(0), + last_available_capacity_mmc_(0), sim_count_(0), tapi_handles_{nullptr}, cpu_event_id_(0), @@ -1177,31 +1180,16 @@ void SysteminfoManager::DisconnectSensor(int handle_orientation) { } } -double SysteminfoManager::GetCpuInfoLoad() { - LoggerD("Enter"); - return cpu_load_; -} - void SysteminfoManager::SetCpuInfoLoad(double load) { LoggerD("Enter"); cpu_load_ = load; } -unsigned long long SysteminfoManager::GetAvailableCapacityInternal() { - LoggerD("Entered"); - return available_capacity_internal_; -} - void SysteminfoManager::SetAvailableCapacityInternal(unsigned long long capacity) { LoggerD("Entered"); available_capacity_internal_ = capacity; } -unsigned long long SysteminfoManager::GetAvailableCapacityMmc() { - LoggerD("Entered"); - return available_capacity_mmc_; -} - void SysteminfoManager::SetAvailableCapacityMmc(unsigned long long capacity) { LoggerD("Entered"); available_capacity_mmc_ = capacity; @@ -1298,21 +1286,29 @@ bool SysteminfoManager::IsListenerRegistered(const std::string& property_id) { return (registered_listeners_.find(property_id) != registered_listeners_.end()); } +void SysteminfoManager::PostListenerResponse(const std::string& property_id, + const picojson::value& result) { + LoggerD("Entered"); + const std::shared_ptr& response = + std::shared_ptr(new picojson::value(picojson::object())); + response->get()[kPropertyIdString] = picojson::value(property_id); + response->get()[kListenerIdString] = picojson::value(kListenerConstValue); + + ReportSuccess(result,response->get()); + Instance::PostMessage(instance_, response->serialize().c_str()); +} + + void SysteminfoManager::CallListenerCallback(const std::string& property_id) { LoggerD("Enter"); if(IsListenerRegistered(property_id)) { LoggerD("listener for %s property is registered, calling it", property_id.c_str()); - const std::shared_ptr& response = - std::shared_ptr(new picojson::value(picojson::object())); - response->get()[kPropertyIdString] = picojson::value(property_id); - response->get()[kListenerIdString] = picojson::value(kListenerConstValue); picojson::value result = picojson::value(picojson::object()); PlatformResult ret = GetPropertiesManager().GetPropertyValue( property_id, true, &result); if (ret.IsSuccess()) { - ReportSuccess(result,response->get()); - Instance::PostMessage(instance_, response->serialize().c_str()); + PostListenerResponse(property_id, result); } } else { LoggerD("listener for %s property is not registered, ignoring", property_id.c_str()); @@ -1324,17 +1320,16 @@ void SysteminfoManager::CallCpuListenerCallback() { std::string property_id = kPropertyIdCpu; if(IsListenerRegistered(property_id)) { LoggerD("listener for %s property is registered, calling it", property_id.c_str()); - const std::shared_ptr& response = - std::shared_ptr(new picojson::value(picojson::object())); - response->get()[kPropertyIdString] = picojson::value(property_id); - response->get()[kListenerIdString] = picojson::value(kListenerConstValue); - picojson::value result = picojson::value(picojson::object()); PlatformResult ret = GetPropertiesManager().GetPropertyValue( property_id, true, &result); if (ret.IsSuccess()) { - ReportSuccess(result,response->get()); - Instance::PostMessage(instance_, response->serialize().c_str()); + if (cpu_load_ == last_cpu_load_) { + LoggerD("Cpu load didn't change, ignoring"); + return; + } + last_cpu_load_ = cpu_load_; + PostListenerResponse(property_id, result); } } else { LoggerD("listener for %s property is not registered, ignoring", property_id.c_str()); @@ -1346,21 +1341,22 @@ void SysteminfoManager::CallStorageListenerCallback() { std::string property_id = kPropertyIdStorage; if(IsListenerRegistered(property_id)) { LoggerD("listener for %s property is registered, calling it", property_id.c_str()); - const std::shared_ptr& response = - std::shared_ptr(new picojson::value(picojson::object())); - response->get()[kPropertyIdString] = picojson::value(property_id); - response->get()[kListenerIdString] = picojson::value(kListenerConstValue); picojson::value result = picojson::value(picojson::object()); PlatformResult ret = GetPropertiesManager().GetPropertyValue( property_id, true, &result); if (ret.IsSuccess()) { - if (available_capacity_internal_ == last_available_capacity_internal_) { + // check if anything changed + if (available_capacity_internal_ == last_available_capacity_internal_ && + available_capacity_mmc_ == last_available_capacity_mmc_) { + LoggerD("Storage state didn't change, ignoring"); return; } + // refresh previous values last_available_capacity_internal_ = available_capacity_internal_; - ReportSuccess(result,response->get()); - Instance::PostMessage(instance_, response->serialize().c_str()); + last_available_capacity_mmc_ = available_capacity_mmc_; + + PostListenerResponse(property_id, result); } } else { LoggerD("listener for %s property is not registered, ignoring", property_id.c_str()); diff --git a/src/systeminfo/systeminfo_manager.h b/src/systeminfo/systeminfo_manager.h index 813875f..4c85f69 100644 --- a/src/systeminfo/systeminfo_manager.h +++ b/src/systeminfo/systeminfo_manager.h @@ -62,11 +62,8 @@ class SysteminfoManager { SysteminfoInstance* GetInstance() { return instance_;}; SysteminfoPropertiesManager& GetPropertiesManager() { return prop_manager_;}; - double GetCpuInfoLoad(); void SetCpuInfoLoad(double load); - unsigned long long GetAvailableCapacityInternal(); void SetAvailableCapacityInternal(unsigned long long capacity); - unsigned long long GetAvailableCapacityMmc(); void SetAvailableCapacityMmc(unsigned long long capacity); std::string GetCameraTypes(int index); int GetCameraTypesCount(); @@ -76,6 +73,7 @@ class SysteminfoManager { void CallCpuListenerCallback(); void CallStorageListenerCallback(); private: + void PostListenerResponse(const std::string& property_id, const picojson::value& result); common::PlatformResult ConnectSensor(int* result); void DisconnectSensor(int handle_orientation); void InitTapiHandles(); @@ -122,6 +120,7 @@ class SysteminfoManager { std::vector camera_types_; wifi_rssi_level_e wifi_level_; double cpu_load_; + double last_cpu_load_; unsigned long long available_capacity_internal_; unsigned long long last_available_capacity_internal_; unsigned long long available_capacity_mmc_; diff --git a/src/systeminfo/systeminfo_properties_manager.cc b/src/systeminfo/systeminfo_properties_manager.cc index c94becd..99c0745 100644 --- a/src/systeminfo/systeminfo_properties_manager.cc +++ b/src/systeminfo/systeminfo_properties_manager.cc @@ -598,26 +598,41 @@ PlatformResult SysteminfoPropertiesManager::ReportWifiNetwork(picojson::object* LoggerE("%s", log_msg.c_str()); return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg); } else { - LoggerD("WIFI initializatino succeed"); + LoggerD("WIFI initialization succeed"); } SCOPE_EXIT { wifi_deinitialize(); }; - wifi_ap_h wifi_ap_handle = nullptr; - error = wifi_get_connected_ap(&wifi_ap_handle); + // check if wifi activated + bool activated = false; + error = wifi_is_activated(&activated); if (WIFI_ERROR_NONE != error) { - LoggerD("Error while wifi_get_connnected_ap: %s", get_error_message(error)); - // in case of no connection, ignore error and leave status as false - if (WIFI_ERROR_NO_CONNECTION != error) { - std::string log_msg = "Cannot get connected access point handle: " + - std::string(get_error_message(error)); - LoggerE("%s", log_msg.c_str()); - return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg); - } + std::string log_msg = "Checking if wifi is activated failed: " + + std::string(get_error_message(error)); + LoggerE("%s", log_msg.c_str()); + return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg); } else { - //if getting connected AP succeed, set status on true - result_status = true; + LoggerD("WIFI activated check succeed"); + } + + wifi_ap_h wifi_ap_handle = nullptr; + if (activated) { + LoggerD("Wifi is activated"); + error = wifi_get_connected_ap(&wifi_ap_handle); + if (WIFI_ERROR_NONE != error) { + LoggerD("Error while wifi_get_connnected_ap: %s", get_error_message(error)); + // in case of no connection, ignore error and leave status as false + if (WIFI_ERROR_NO_CONNECTION != error) { + std::string log_msg = "Cannot get connected access point handle: " + + std::string(get_error_message(error)); + LoggerE("%s", log_msg.c_str()); + return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg); + } + } else { + //if getting connected AP succeed, set status on true + result_status = true; + } } if (result_status) { -- 2.7.4