summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDewal Agarwal <d1.agarwal@samsung.com>2020-04-24 12:09:20 +0530
committerDewal Agarwal <d1.agarwal@samsung.com>2020-04-24 12:09:20 +0530
commit37a91a61388eb4a49293748d163bb21f2518ee39 (patch)
tree337546288be3a1654f82f477507ab01dc63c42f9
parentc0a3b331e9bb3bca6c8ef139f86af1eb09a49791 (diff)
downloadbatterymonitor-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.h2
-rw-r--r--src/battery_dump/bd_history_item.c54
-rw-r--r--src/bm_server_db.c77
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;