Modify Wi-Fi Power Model
authorDewal Agarwal <d1.agarwal@samsung.com>
Tue, 31 Mar 2020 11:23:46 +0000 (16:53 +0530)
committerDewal Agarwal <d1.agarwal@samsung.com>
Tue, 31 Mar 2020 11:23:46 +0000 (16:53 +0530)
Change-Id: I1eb88067802074b177cd5ab2be1c6b67c4cba367
Signed-off-by: Dewal Agarwal <d1.agarwal@samsung.com>
include/bm_plugin_interface.h
src/bm_power_engine.c

index e8e0b32..05ef8e9 100644 (file)
@@ -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 */
index 331704e..a186b66 100644 (file)
@@ -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