int timestamp;
int stime;
int utime;
+ int pid;
while (k < lastCpuUsageLog.size()) {
lastCpuUsageLog[k].get(NULL, BATTERY_APP_ID, &appId);
lastCpuUsageLog[k].get(NULL, BATTERY_TIMESTAMP, ×tamp);
lastCpuUsageLog[k].get(NULL, BATTERY_UTIME, &utime);
lastCpuUsageLog[k].get(NULL, BATTERY_STIME, &stime);
+ lastCpuUsageLog[k].get(NULL, BATTERY_PID, &pid);
k++;
LastAppCpuUsageInfo lastAppCpuUsage;
lastAppCpuUsage.timestamp = timestamp;
lastAppCpuUsage.utime = utime;
lastAppCpuUsage.stime = stime;
+ lastAppCpuUsage.pid = pid;
(*lastCpuUsage)[appId] = lastAppCpuUsage;
}
return true;
_D("Delete all rows from app last times table");
__dbMgr.executeSync("DELETE FROM " BATTERY_LAST_CPU_USAGE_TABLE, NULL);
- std::string query("INSERT INTO " BATTERY_LAST_CPU_USAGE_TABLE "(" BATTERY_APP_ID ", " BATTERY_UTIME ", " BATTERY_STIME "," BATTERY_TIMESTAMP ") VALUES");
+ std::string query("INSERT INTO " BATTERY_LAST_CPU_USAGE_TABLE "(" BATTERY_APP_ID ", " BATTERY_UTIME ", " BATTERY_STIME ", " BATTERY_TIMESTAMP ", " BATTERY_PID ") VALUES");
std::string appId;
- int stime, utime;
+ int stime, utime, pid;
int timestamp;
for (auto it = usage.begin(); it != usage.end(); it++) {
timestamp = (it->second).timestamp;
utime = (it->second).utime;
stime = (it->second).stime;
+ pid = (it->second).pid;
query += " ('" + appId
+ "', " + std::to_string(utime)
+ ", " + std::to_string(stime)
- + ", " + std::to_string(timestamp) + ")";
+ + ", " + std::to_string(timestamp)
+ + ", " + std::to_string(pid) + ")";
query += ", ";
}
#define BATTERY_LAST_CPU_USAGE_TABLE "Temp_LastCpuUsagePerApp"
#define BATTERY_LAST_CPU_USAGE_TABLE_COLUMNS \
"AppId TEXT PRIMARY KEY, Utime INTEGER NOT NULL DEFAULT 0, " \
- "Stime INTEGER NOT NULL DEFAULT 0, Timestamp INTEGER NOT NULL DEFAULT 0"
+ "Stime INTEGER NOT NULL DEFAULT 0, Timestamp INTEGER NOT NULL DEFAULT 0, Pid INTEGER NOT NULL DEFAULT 0"
#define BATTERY_APP_ID "AppId"
#define BATTERY_INDEX "idx"
#define BATTERY_LAST_PERCENT_TIME "LastPercentTime"
#define BATTERY_LAST_HEART_TIMESTAMP "LastHeartTimestamp"
#define BATTERY_ROW_ID "RowId"
+#define BATTERY_PID "Pid"
#define CURRENT_TIME (int)(time(0))
int timestamp;
int utime;
int stime;
+ int pid;
};
typedef std::map<std::string, LastAppCpuUsageInfo> CpuUsageMap;
}
int stime;
int utime;
int idx;
+ int pid;
int totalUtime = 0;
int totalStime = 0;
cpuUsageLog[i].get(NULL, BATTERY_UTIME, &utime);
cpuUsageLog[i].get(NULL, BATTERY_STIME, &stime);
cpuUsageLog[i].get(NULL, BATTERY_INDEX, &idx);
+ cpuUsageLog[i].get(NULL, BATTERY_PID, &pid);
if (timestamp < lastTime) {
continue;
int prevUtime = 0;
int prevStime = 0;
int prevTimestamp = 0;
+ int prevPid = 0;
if (lastAppCpuUsage != lastCpuUsage.end()) {
prevTimestamp = (lastAppCpuUsage->second).timestamp;
prevUtime = (lastAppCpuUsage->second).utime;
prevStime = (lastAppCpuUsage->second).stime;
+ prevPid = (lastAppCpuUsage->second).pid;
// If the app is killed and launched again
- if (prevStime > stime || prevUtime > utime) {
+ if (pid != prevPid) {
prevUtime = 0;
prevStime = 0;
prevTimestamp = lastTime;
lastAppUsage.timestamp = timestamp;
lastAppUsage.utime = utime;
lastAppUsage.stime = stime;
+ lastAppUsage.pid = pid;
lastCpuUsage[appId] = lastAppUsage;
}
__normalizeBatteryUsage(usage, totalUtime, totalStime);
newRow->set(NULL, BATTERY_STIME, stime);
newRow->set(NULL, BATTERY_TYPE, type);
newRow->set(NULL, BATTERY_INDEX, index);
+ newRow->set(NULL, BATTERY_PID, pid);
}