diff options
author | Dewal Agarwal <d1.agarwal@samsung.com> | 2020-04-24 12:09:20 +0530 |
---|---|---|
committer | Dewal Agarwal <d1.agarwal@samsung.com> | 2020-04-24 12:09:20 +0530 |
commit | 37a91a61388eb4a49293748d163bb21f2518ee39 (patch) | |
tree | 337546288be3a1654f82f477507ab01dc63c42f9 | |
parent | c0a3b331e9bb3bca6c8ef139f86af1eb09a49791 (diff) | |
download | batterymonitor-37a91a61388eb4a49293748d163bb21f2518ee39.tar.gz batterymonitor-37a91a61388eb4a49293748d163bb21f2518ee39.tar.bz2 batterymonitor-37a91a61388eb4a49293748d163bb21f2518ee39.zip |
Add Base System Battery Usage Dump
Change-Id: I8c2d97b864393d34293a4f44391b8c15fcfcbc8c
Signed-off-by: Dewal Agarwal <d1.agarwal@samsung.com>
-rw-r--r-- | include/bm_server_db.h | 2 | ||||
-rw-r--r-- | src/battery_dump/bd_history_item.c | 54 | ||||
-rw-r--r-- | src/bm_server_db.c | 77 |
3 files changed, 126 insertions, 7 deletions
diff --git a/include/bm_server_db.h b/include/bm_server_db.h index a8b0ce0..3b766d3 100644 --- a/include/bm_server_db.h +++ b/include/bm_server_db.h @@ -201,6 +201,8 @@ resourceid_usage_s *bm_server_query_resource_usage_resourceid(const char *resour resourceid_usage_s *bm_server_query_resource_usage_resourceid_ci(const char *resource_id, long long s_time, long long e_time, int *error_code); +resourceid_usage_s *bm_server_query_resource_base_usage_resourceid_ci(const char *resource_id, long long s_time, long long e_time, int *error_code); + int bm_server_resource_usage_insert_to_db(resourceid_usage_s *bm_resource_type); int bm_server_resource_base_usage_insert_to_db(resourceid_usage_s *bm_resource_type); diff --git a/src/battery_dump/bd_history_item.c b/src/battery_dump/bd_history_item.c index bfdbc18..8efefd6 100644 --- a/src/battery_dump/bd_history_item.c +++ b/src/battery_dump/bd_history_item.c @@ -143,6 +143,48 @@ static int bd_get_pool_entry_from_dump(int fd) return BATTERY_MONITOR_ERROR_NONE; } +static int bd_get_and_print_system_base_battery_usage_from_dump(int fd, long int duration) +{ + ENTER; + + int ret = BATTERY_MONITOR_ERROR_NONE; + GString *dump_p = NULL; + dump_p = g_string_sized_new(30); + BM_CHECK_MEM_ALLOC(dump_p, {}); + double usage_mah = 0; + time_t crr_time = 0; time(&crr_time); + int uid_n = 1000; //For Tizen + // Base Resource usage; + const char *rid_str = NULL; + for (int i = 0; i < 6; i++) { + rid_str = bm_get_resource_id_string(i); + if (g_strcmp0(rid_str, "UNKNOWN RESOURCE-ID") == 0) { + _ERR("invalid resource-id"); + return BATTERY_MONITOR_ERROR_INTERNAL; + } + resourceid_usage_s *res_use = + bm_server_query_resource_base_usage_resourceid_ci(rid_str, duration, crr_time, &ret); + if (res_use == NULL || ret != BATTERY_MONITOR_ERROR_NONE) { + _ERR("For resourceid %s", rid_str); + continue; + } + usage_mah += res_use->usage; + bm_resourceid_usage_free(res_use); + } + usage_mah /= 3600; + g_string_append(dump_p, TIZEN_DUMP_VERSION); + g_string_append_printf(dump_p, ",%d,l,pwi,uid,", uid_n); + g_string_append_printf(dump_p, "%0.2f", usage_mah); + g_string_append(dump_p, "\n"); + _DBG("%s", dump_p->str); + if (write(fd, dump_p->str, dump_p->len) < 0) + _WARN("write error"); + g_string_free(dump_p, TRUE); + + EXIT; + return ret; +} + static int bd_get_and_print_battery_usage_from_dump(int fd, long int duration) { ENTER; @@ -252,6 +294,10 @@ static int bd_get_and_print_battery_usage_from_dump(int fd, long int duration) g_string_free(dump_p, TRUE); } + ret = bd_get_and_print_system_base_battery_usage_from_dump(fd, duration); + if (ret != BATTERY_MONITOR_ERROR_NONE) + _ERR("Base usage dump failed"); + EXIT; return ret; } @@ -611,7 +657,7 @@ static int bd_get_and_print_uid_info_entry_from_dump(int fd) dump_p = g_string_sized_new(30); BM_CHECK_MEM_ALLOC(dump_p, {bm_set_free_gslist_appid_map(list); }); g_string_append(dump_p, TIZEN_DUMP_VERSION); - g_string_append(dump_p, ",0,i,uid,1000,tizen\n"); + g_string_append(dump_p, ",0,i,uid,1000,Tizen\n"); if (write(fd, dump_p->str, dump_p->len) < 0) _WARN("write error"); g_string_free(dump_p, TRUE); @@ -1233,21 +1279,15 @@ static int bd_free_history_data_memory() _DBG("Free History Data Memory"); for (int i = 0; i < h_count; i++) { if (history_data[i].wakelock_tag != NULL) { - _DBG("WL str"); g_string_free(history_data[i].wakelock_tag->string_info, TRUE); - _DBG("WL"); free(history_data[i].wakelock_tag); } if (history_data[i].wakereason_tag != NULL) { - _DBG("WR str"); g_string_free(history_data[i].wakereason_tag->string_info, TRUE); - _DBG("WR"); free(history_data[i].wakereason_tag); } if (history_data[i].event_tag != NULL) { - _DBG("ET str"); g_string_free(history_data[i].event_tag->string_info, TRUE); - _DBG("ET"); free(history_data[i].event_tag); } ret = bd_dump_data_item_reset(&history_data[i]); diff --git a/src/bm_server_db.c b/src/bm_server_db.c index 35c0b20..b34b21d 100644 --- a/src/bm_server_db.c +++ b/src/bm_server_db.c @@ -1953,6 +1953,69 @@ CATCH: return NULL; } +static resourceid_usage_s* bm_query_base_usage_by_resourceid_ci(sqlite3 *bm_db_handle, const char *resource_id, long long s_time, long long e_time, int *error_code) +{ + ENTER; + bm_stmt hstmt = NULL; + int rc = 0; + *error_code = BATTERY_MONITOR_ERROR_NONE; + long int s_t = (long)s_time; + long int e_t = (long)e_time; + char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, }; + BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX); + BM_SNPRINTF(query, sizeof(query), "SELECT ResourceId, sum(usage) FROM %s WHERE ResourceId = '%s' \ + AND log_time > %ld AND log_time < %ld", BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE, resource_id, s_t, e_t); + + hstmt = bm_prepare_query(bm_db_handle, query); + if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) { + _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle)); + *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED; + return NULL; + } + + resourceid_usage_s *bm_resource_type = NULL; + rc = bm_query_step(hstmt); + BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id)); + + bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s)); + if (bm_resource_type == NULL) { + _ERR("memory allocation failed"); + if (hstmt != NULL) { + rc = bm_query_finalize(hstmt); + BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error")); + hstmt = NULL; + } + *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY; + return NULL; + } + bm_convert_column_to_resourceid_usage(hstmt, bm_resource_type); + + rc = bm_query_finalize(hstmt); + BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error")); + hstmt = NULL; + *error_code = BATTERY_MONITOR_ERROR_NONE; + +CATCH: + if (hstmt != NULL) { + rc = bm_query_finalize(hstmt); + if (rc != BATTERY_MONITOR_ERROR_NONE) { + *error_code = rc; + _ERR("finalize error"); + } + hstmt = NULL; + } + if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) { + BM_FREE(bm_resource_type); + bm_resource_type = NULL; + } + if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) { + _INFO("Returning appid usage"); + return bm_resource_type; + } + EXIT; + return NULL; +} + static int bm_delete_table(sqlite3 *bm_db_handle, bm_stmt *phstmt, int num_app_id, const char *app_id, const char* table) { ENTER; @@ -2375,6 +2438,20 @@ resourceid_usage_s *bm_server_query_resource_usage_resourceid_ci(const char *res return bm_resource_type; } +resourceid_usage_s *bm_server_query_resource_base_usage_resourceid_ci(const char *resource_id, long long s_time, long long e_time, int *error_code) +{ + resourceid_usage_s *bm_resource_type = NULL; + *error_code = BATTERY_MONITOR_ERROR_NONE; + + BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected.")); + BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL")); + + bm_resource_type = bm_query_base_usage_by_resourceid_ci(g_hBatteryMonitorDB, resource_id, s_time, e_time, error_code); + + EXIT; + return bm_resource_type; +} + GSList* bm_server_query_appid_map(int *error_code) { ENTER; |