[Systeminfo] Removed caching a wifi signal level 92/286592/1
authorPiotr Kosko/Tizen API (PLT) /SRPOL/Engineer/Samsung Electronics <p.kosko@samsung.com>
Tue, 10 Jan 2023 09:03:54 +0000 (10:03 +0100)
committerPiotr Kosko <p.kosko@samsung.com>
Tue, 10 Jan 2023 09:19:52 +0000 (09:19 +0000)
Registering a wifi listener on boot can cause a performance issue on
application start even the application will never use wifi in its
lifetime.

I removed registering signal strength listener to avoid this problem,
instead the signal strength will be gathered from native API only when
needed (instead of using a cached value).

[Verification] TCT systeminfo 100% pass
I've checked performance of
tizen.systeminfo.getPropertyValue("WIFI_NETWORK", (s) => console.log(s.signalStrength), (s) => console.log(s))
the difference is ~2-4ms.

Change-Id: Iabe4101e5871f426526cf56c7b6fc3f69e59b159

src/systeminfo/systeminfo_manager.cc
src/systeminfo/systeminfo_manager.h
src/systeminfo/systeminfo_properties_manager.cc

index fbc0d9d..ca333f2 100644 (file)
@@ -220,13 +220,6 @@ static void OnBrightnessChangedCb(device_callback_e type, void* value, void* use
   }
 }
 
-static void OnWifiLevelChangedCb(wifi_manager_rssi_level_e rssi_level, void* user_data) {
-  ScopeLogger();
-  LoggerD("Level %d", rssi_level);
-  SysteminfoManager* manager = static_cast<SysteminfoManager*>(user_data);
-  manager->SetWifiLevel(rssi_level);
-}
-
 static void OnServiceCountryChangedCb(keynode_t* key, void* user_data) {
   ScopeLogger();
   SysteminfoManager* manager = static_cast<SysteminfoManager*>(user_data);
@@ -455,8 +448,6 @@ SysteminfoManager::SysteminfoManager(SysteminfoInstance* instance)
     : instance_(instance),
       prop_manager_(*this),
       sensor_handle_(-1),
-      wifi_level_(WIFI_MANAGER_RSSI_LEVEL_0),
-      wifi_manager_(nullptr),
       cpu_load_(0),
       last_cpu_load_(0),
       tapi_manager_(new TapiManager()),
@@ -466,20 +457,6 @@ SysteminfoManager::SysteminfoManager(SysteminfoInstance* instance)
       async_op_(new AsynchronousOperation()) {
   ScopeLogger();
 
-  int error = wifi_manager_initialize(&wifi_manager_);
-  if (WIFI_MANAGER_ERROR_NONE != error) {
-    std::string log_msg = "Initialization failed: " + std::string(get_error_message(error));
-    LoggerE("%s", log_msg.c_str());
-  } else {
-    LoggerD("WIFI initialization succeed");
-    error = wifi_manager_set_rssi_level_changed_cb(wifi_manager_, OnWifiLevelChangedCb, this);
-    if (WIFI_MANAGER_ERROR_NONE != error) {
-      std::string log_msg = "Setting wifi listener failed: " + std::string(get_error_message(error));
-      LoggerE("%s", log_msg.c_str());
-    } else {
-      LoggerD("Setting wifi listener succeed");
-    }
-  }
   InitCameraTypes();
 }
 
@@ -533,13 +510,6 @@ SysteminfoManager::~SysteminfoManager() {
   if (nullptr != connection_handle_) {
     connection_destroy(connection_handle_);
   }
-
-  if (nullptr != wifi_manager_) {
-    int ret = wifi_manager_deinitialize(wifi_manager_);
-    if (WIFI_MANAGER_ERROR_NONE != ret) {
-      LoggerE("wifi_manager_deinitialize failed %d [%s]", ret, get_error_message(ret));
-    }
-  }
 }
 
 void SysteminfoManager::GetCapabilities(const picojson::value& args, picojson::object* out) {
@@ -1444,16 +1414,6 @@ PlatformResult SysteminfoManager::GetPropertyCount(const std::string& property,
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
-wifi_manager_rssi_level_e SysteminfoManager::GetWifiLevel() {
-  ScopeLogger();
-  return wifi_level_;
-}
-
-void SysteminfoManager::SetWifiLevel(wifi_manager_rssi_level_e level) {
-  ScopeLogger();
-  wifi_level_ = level;
-}
-
 int SysteminfoManager::GetSensorHandle() {
   ScopeLogger();
   std::lock_guard<std::mutex> lock(sensor_mutex_);
index 614b498..7fb97db 100644 (file)
@@ -53,8 +53,6 @@ class SysteminfoManager {
   void GetCount(const picojson::value& args, picojson::object* out);
 
   common::PlatformResult GetPropertyCount(const std::string& property, unsigned long* count);
-  wifi_manager_rssi_level_e GetWifiLevel();
-  void SetWifiLevel(wifi_manager_rssi_level_e level);
   int GetSensorHandle();
 
   int GetChangedTapiIndex(TapiHandle* tapi);
@@ -136,8 +134,6 @@ class SysteminfoManager {
   std::mutex sensor_mutex_;
 
   std::vector<std::string> camera_types_;
-  wifi_manager_rssi_level_e wifi_level_;
-  wifi_manager_h wifi_manager_;
 
   double cpu_load_;
   double last_cpu_load_;
index de0449d..5ee798d 100644 (file)
@@ -789,23 +789,16 @@ PlatformResult SysteminfoPropertiesManager::ReportWifiNetwork(picojson::object*
       }
 
       // gathering strength
-      wifi_manager_rssi_level_e rssi_level = manager_.GetWifiLevel();
-      // this mean that level was not initialized or wifi not connected
-      if (WIFI_MANAGER_RSSI_LEVEL_0 == rssi_level) {
-        // so try to gather rssi level with dedicated function
-        int rssi = 0;
-        error = wifi_manager_ap_get_rssi(wifi_ap_handle, &rssi);
-        if (WIFI_MANAGER_ERROR_NONE == error) {
-          result_signal_strength = ((double)abs(rssi)) / kWifiSignalStrengthDivideValue;
-        } else {
-          std::string log_msg =
-              "Failed to get signal strength: " + std::string(get_error_message(error));
-          return LogAndCreateResult(
-              ErrorCode::UNKNOWN_ERR, log_msg,
-              ("wifi_manager_ap_get_rssi error: %d (%s)", error, get_error_message(error)));
-        }
+      int rssi = 0;
+      error = wifi_manager_ap_get_rssi(wifi_ap_handle, &rssi);
+      if (WIFI_MANAGER_ERROR_NONE == error) {
+        result_signal_strength = ((double)abs(rssi)) / kWifiSignalStrengthDivideValue;
       } else {
-        result_signal_strength = ((double)rssi_level) / WIFI_MANAGER_RSSI_LEVEL_4;
+        std::string log_msg =
+            "Failed to get signal strength: " + std::string(get_error_message(error));
+        return LogAndCreateResult(
+            ErrorCode::UNKNOWN_ERR, log_msg,
+            ("wifi_manager_ap_get_rssi error: %d (%s)", error, get_error_message(error)));
       }
     }
   }