diff options
author | Dewal Agarwal <d1.agarwal@samsung.com> | 2020-03-31 16:53:46 +0530 |
---|---|---|
committer | Dewal Agarwal <d1.agarwal@samsung.com> | 2020-03-31 16:53:46 +0530 |
commit | b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7 (patch) | |
tree | 4029fbdff3836af2f598059c5f2b6dfdfa4c8c03 | |
parent | fadd0cff0e9b1f77963f9dc89dfe5bc2153d02df (diff) | |
download | batterymonitor-b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7.tar.gz batterymonitor-b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7.tar.bz2 batterymonitor-b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7.zip |
Modify Wi-Fi Power Model
Change-Id: I1eb88067802074b177cd5ab2be1c6b67c4cba367
Signed-off-by: Dewal Agarwal <d1.agarwal@samsung.com>
-rw-r--r-- | include/bm_plugin_interface.h | 2 | ||||
-rw-r--r-- | src/bm_power_engine.c | 30 |
2 files changed, 22 insertions, 10 deletions
diff --git a/include/bm_plugin_interface.h b/include/bm_plugin_interface.h index e8e0b32..05ef8e9 100644 --- a/include/bm_plugin_interface.h +++ b/include/bm_plugin_interface.h @@ -139,6 +139,8 @@ typedef struct { uint time_level_2; /**< Total time in milliseconds during which rssi was on level 2 */ uint time_level_3; /**< Total time in milliseconds during which rssi was on level 3 */ uint time_level_4; /**< Total time in milliseconds during which rssi was on level 4 */ + uint rxTime; /**< Total time in milliseconds (RX) mode */ + uint txTime; /**< Total time in milliseconds (TX) mode */ time_t startTime; /**< start time of feature data collection session */ time_t endTime; /**< end time of feature data collection session */ uint scanTime; /**< Total time spent by the resource in (scan) mode during the session */ diff --git a/src/bm_power_engine.c b/src/bm_power_engine.c index 331704e..a186b66 100644 --- a/src/bm_power_engine.c +++ b/src/bm_power_engine.c @@ -788,19 +788,18 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode) long int sesTime = 0, scTime = 0, tl_total = 0; long int tl0 = 0, tl1 = 0, tl2 = 0, tl3 = 0, tl4 = 0; double onTime = 0; - long int RX = 0, TX = 0; + long int RX = 0, TX = 0, rx_time = 0, tx_time = 0; /* iterating over list for data accumulation */ for (wifi_data_iterator = handle->wifi_data_list; wifi_data_iterator; wifi_data_iterator = wifi_data_iterator->next) { bm_wifi_st *datalistnode = (bm_wifi_st *)(wifi_data_iterator->data); edTime = datalistnode->endTime; stTime = datalistnode->startTime; - sesTime += edTime - stTime; + sesTime += (edTime - stTime); scTime += datalistnode->scanTime; - tl0 += datalistnode->time_level_0; - tl1 += datalistnode->time_level_1; - tl2 += datalistnode->time_level_2; - tl3 += datalistnode->time_level_3; + tl0 += datalistnode->time_level_0; tl1 += datalistnode->time_level_1; + tl2 += datalistnode->time_level_2; tl3 += datalistnode->time_level_3; tl4 += datalistnode->time_level_4; + rx_time += datalistnode->rxTime; tx_time += datalistnode->txTime; wifi_atm_iterator = datalistnode->atm_list; for ( ; wifi_atm_iterator; wifi_atm_iterator = wifi_atm_iterator->next) { app_time_map_st2 *wifi_atm_node = NULL; @@ -847,6 +846,7 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode) tl0 /= 1000; tl1 /= 1000; tl2 /= 1000; tl3 /= 1000; tl4 /= 1000; scTime /= 1000; sesTime /= 1000; onTime /= 1000; + rx_time /= 1000; tx_time /= 1000; tl_total = tl0 + tl1 + tl2 + tl3 + tl4; /* Wifi power consumption Level - 1 at the Resource Level */ long int P_power_wifi = 0, P_power_data = 0, P_power_conn = 0; @@ -854,7 +854,11 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode) (sP_power_wf_tl2 * tl2) + (sP_power_wf_tl3 * tl3) + (sP_power_wf_tl4 * tl4) + (sP_power_wf_scan * scTime) + (sP_power_wf_idle * (sesTime - (tl_total + scTime)))); - P_power_data = ((sP_power_wf_tx) * TX) + ((sP_power_wf_rx) * RX); + /* Amount based usage calculation */ +// P_power_data = ((sP_power_wf_tx) * TX) + ((sP_power_wf_rx) * RX); + + /* Use rx and tx time to calculate the usage */ + P_power_data = ((sP_power_wf_tx * tx_time) + (sP_power_wf_rx * rx_time)); P_power_wifi = P_power_conn + P_power_data; _DBG("Calculated Power for Wifi P_power_wifi(%ld), P_power_conn (%ld), P_power_data(%ld)", P_power_wifi, P_power_conn, P_power_data); @@ -866,10 +870,16 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode) long int P_power_app_wifi = 0, P_power_app_data = 0, P_power_app_conn = 0; char *appid = NULL; long int apprx = 0, apptx = 0; - double apptime = 0; - long int rx_t = 0, tx_t = 0; + double apptime = 0, crtx_t = 0; + long int rx_t = 0, tx_t = 0, rx_tx_time = 0; long int ret_time = bm_get_log_time(); + /* Coefficient to divide the rx and tx time wrt rx and tx bytes */ + if (RX != 0 || TX != 0) { + rx_tx_time = rx_time + tx_time; + crtx_t = (double)rx_tx_time/(RX + TX); + } + appid_usage_s *app_usage = (appid_usage_s *)calloc(1, sizeof(appid_usage_s)); if (app_usage == NULL) { _ERR("memory allocation failed"); @@ -885,7 +895,7 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode) apptx = temp->tx; tx_t += apptx; apptime = temp->time; apptime /= 1000; - P_power_app_data = ((sP_power_wf_tx) * apptx) + ((sP_power_wf_rx) * apprx); + P_power_app_data = (sP_power_wf_tx * (crtx_t * apptx)) + (sP_power_wf_rx * (crtx_t * apprx)); if (onTime != 0) P_power_app_conn = (P_power_conn * apptime)/onTime; //check for 0 denominator & same units |