[Systeminfo] Fixes in CPU and STORAGE listeners, wifi additional check
authorPiotr Kosko <p.kosko@samsung.com>
Tue, 8 Sep 2015 08:00:34 +0000 (10:00 +0200)
committerPiotr Kosko <p.kosko@samsung.com>
Tue, 8 Sep 2015 11:16:22 +0000 (13:16 +0200)
[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 <p.kosko@samsung.com>
src/systeminfo/systeminfo_manager.cc
src/systeminfo/systeminfo_manager.h
src/systeminfo/systeminfo_properties_manager.cc

index 4585c7a82b1ffd6c9f083e8c95c45c606b1fe080..11487f00e1f81a7b122a6e154de74950343d707b 100644 (file)
@@ -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<SysteminfoManager*>(event_ptr);
-  manager->CallListenerCallback(kPropertyIdCpu);
+  manager->CallCpuListenerCallback();
   return G_SOURCE_CONTINUE;
 }
 
 static gboolean OnStorageChangedCb(gpointer event_ptr) {
   LoggerD("Enter");
   SysteminfoManager* manager = static_cast<SysteminfoManager*>(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<picojson::value>& response =
+      std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
+  response->get<picojson::object>()[kPropertyIdString] = picojson::value(property_id);
+  response->get<picojson::object>()[kListenerIdString] = picojson::value(kListenerConstValue);
+
+  ReportSuccess(result,response->get<picojson::object>());
+  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<picojson::value>& response =
-        std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
-    response->get<picojson::object>()[kPropertyIdString] = picojson::value(property_id);
-    response->get<picojson::object>()[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<picojson::object>());
-      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<picojson::value>& response =
-        std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
-    response->get<picojson::object>()[kPropertyIdString] = picojson::value(property_id);
-    response->get<picojson::object>()[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<picojson::object>());
-      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<picojson::value>& response =
-        std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
-    response->get<picojson::object>()[kPropertyIdString] = picojson::value(property_id);
-    response->get<picojson::object>()[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<picojson::object>());
-      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());
index 813875f3aea320bf541e1cc11de8688519de8bb7..4c85f698a76c206f7395ed36e140378cbf21523a 100644 (file)
@@ -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<std::string> 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_;
index c94becd7c01c1981f1c706f3e9758d9cbcd59a5d..99c074510886f6294e54d4348403a653a71c7993 100644 (file)
@@ -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) {