Modify Wi-Fi Power Model 70/229370/4
authorDewal Agarwal <d1.agarwal@samsung.com>
Tue, 31 Mar 2020 11:23:46 +0000 (16:53 +0530)
committerKichan Kwon <k_c.kwon@samsung.com>
Fri, 10 Apr 2020 04:45:25 +0000 (13:45 +0900)
- Based scan time not included in rx and tx time

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 bec7a15..985f774 100644 (file)
@@ -790,19 +790,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;
@@ -849,6 +848,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;
@@ -857,8 +857,10 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode)
                        (sP_power_wf_tl4 * tl4) + (sP_power_wf_scan * scTime) +
                        (sP_power_wf_idle * (sesTime - (tl_total + scTime))));
        /* Amount based usage calculation */
-       P_power_data = ((sP_power_wf_tx) * TX) + ((sP_power_wf_rx) * RX);
+//     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);
@@ -870,10 +872,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;
+       double apptime = 0, crx_t = 0, ctx_t = 0;
        long int rx_t = 0, tx_t = 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)
+               crx_t = (double)rx_time/RX;
+       if (TX != 0)
+               ctx_t = (double)tx_time/TX;
+
        appid_usage_s *app_usage = (appid_usage_s *)calloc(1, sizeof(appid_usage_s));
        if (app_usage == NULL) {
                _ERR("memory allocation failed");
@@ -889,7 +897,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 * (ctx_t * apptx)) + (sP_power_wf_rx * (crx_t * apprx));
 
                if (onTime != 0)
                        P_power_app_conn = (P_power_conn * apptime)/onTime; //check for 0 denominator & same units