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