static int __lastHeartTimestamp = 0;
static bool __isCharging = 0;
static std::vector<Json> __batteryTimeInfoVec;
+static bool __timerRunning = false;
+#define DB_QUERY_DELAY 600000
BatteryMonitor::BatteryMonitor()
{
battTimeInfo.set(NULL, BATTERY_END_TIME, currentTime);
__batteryTimeInfoVec.push_back(battTimeInfo);
- instance->processBatteryUsage();
+ bool dataRemaining = instance->processBatteryUsage();
+ if (dataRemaining && !__timerRunning) {
+ __timerRunning = true;
+ _D("Start timer to request HEART data");
+ g_timeout_add(DB_QUERY_DELAY, __timeoutCb, instance);
+ }
}
__lastPercentTime = currentTime;
}
}
+gboolean BatteryMonitor::__timeoutCb(gpointer data) {
+ BatteryMonitor* instance = static_cast<BatteryMonitor*>(data);
+
+ bool dataRemaining = instance->processBatteryUsage();
+ if (!dataRemaining) {
+ _D("Stop timer, no more data to process");
+ __timerRunning = false;
+ }
+
+ return dataRemaining ? TRUE : FALSE;
+}
+
int BatteryMonitor::start()
{
__loadLastInfo();
error = device_add_callback(DEVICE_CALLBACK_BATTERY_CHARGING, __chargerChangeCb, NULL);
IF_FAIL_RETURN_TAG(error == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Failed to set battery charging change cb");
+ __timerRunning = true;
+ _D("Start timer to request HEAERT data");
+ g_timeout_add(DB_QUERY_DELAY, __timeoutCb, this);
return ERR_NONE;
}
return true;
}
+//Return false if all is processed, true otherwise
bool BatteryMonitor::processBatteryUsage()
{
- IF_FAIL_RETURN_TAG(__batteryTimeInfoVec.size() > 0, true, _D, "All per-app battery usages are already calculated");
+ IF_FAIL_RETURN_TAG(__batteryTimeInfoVec.size() > 0, false, _D, "All per-app battery usages are already calculated");
int totalStartTime;
int totalEndTime;
// Read cpu table from heart db for time span of stacked in __batteryTimeInfoVec
HeartDbReader heartReader;
bool ret = heartReader.open();
- IF_FAIL_RETURN_TAG(ret, false, _E, "Failed to open heart db");
+ IF_FAIL_RETURN_TAG(ret, true, _E, "Failed to open heart db");
std::vector<Json> cpuUsageLog;
ret = heartReader.readCpuUsageLog(totalStartTime, totalEndTime, &cpuUsageLog);
heartReader.close();
- IF_FAIL_RETURN_TAG(ret, false, _E, "Cannot read from heart cpu table");
+ IF_FAIL_RETURN_TAG(ret, true, _E, "Cannot read from heart cpu table");
IF_FAIL_RETURN_TAG(cpuUsageLog.size() > 0, true, _W, "Heart cpu data is not prepared yet (%d ~ %d)", totalStartTime, totalEndTime);
_D("Read %d rows from heart cpu table from %d to %d", cpuUsageLog.size(), totalStartTime, totalEndTime);
_D("Total %d time intervals, %d intervals are calculated", __batteryTimeInfoVec.size(), i);
__batteryTimeInfoVec.erase(__batteryTimeInfoVec.begin(), __batteryTimeInfoVec.begin() + i);
- return true;
+ if (__batteryTimeInfoVec.size() == 0) {
+ return false;
+ }
+ else {
+ return true;
+ }
}
bool BatteryMonitor::__insertBatteryUsageLog(std::vector<Json>& usage)