From: Mu-Woong Lee Date: Fri, 1 Jul 2016 06:46:33 +0000 (+0900) Subject: sensor: try to record one tuple per one minute to reduce the pedometer DB table size X-Git-Tag: submit/tizen/20160705.023110~1^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4bf3cf03e0a0bb34d39d41898aa511e2d66f9090;p=platform%2Fcore%2Fcontext%2Fcontext-provider.git sensor: try to record one tuple per one minute to reduce the pedometer DB table size Change-Id: I546bb46802bc51b9e0b7dab491638228e1c12003 Signed-off-by: Mu-Woong Lee --- diff --git a/src/sensor/pedometer/PedometerLogger.cpp b/src/sensor/pedometer/PedometerLogger.cpp index c215d30..d4c820a 100644 --- a/src/sensor/pedometer/PedometerLogger.cpp +++ b/src/sensor/pedometer/PedometerLogger.cpp @@ -21,6 +21,8 @@ #include "../TimeUtil.h" #include "PedometerLogger.h" +#define MIN_INTERVAL 60000 + using namespace ctx; PedometerLogger::PedometerLogger() : @@ -72,61 +74,73 @@ void PedometerLogger::stop() __firstEvent = true; } +void PedometerLogger::flushCache(bool force) +{ + DataRecord record; + record.walkSteps = __lastRecord.walkSteps - __baseline.walkSteps; + record.runSteps = __lastRecord.runSteps - __baseline.runSteps; + record.distance = __lastRecord.distance - __baseline.distance; + record.calories = __lastRecord.calories - __baseline.calories; + + if (record.walkSteps + record.runSteps > 0) { + char *query = sqlite3_mprintf( + "INSERT INTO " PEDOMETER_RECORD " (" \ + KEY_START_TIME ", " \ + KEY_END_TIME ", " \ + KEY_WALK_STEPS ", " \ + KEY_RUN_STEPS ", " \ + KEY_DISTANCE ", " \ + KEY_CALORIES ") " \ + "VALUES (%llu, %llu, %u, %u, %.3f, %.3f)", + __baseline.timestamp, __lastRecord.timestamp, record.walkSteps, record.runSteps, record.distance, record.calories); + executeQuery(query); + sqlite3_free(query); + } + + __baseline = __lastRecord; +} + void PedometerLogger::onEvent(sensor_data_t *eventData) { sensor_pedometer_data_t *pedometerData = reinterpret_cast(eventData); uint64_t timestamp = TimeUtil::getTime(); if (__firstEvent) { - _D("Baseline event"); __firstEvent = false; + __setRecord(__lastRecord, timestamp, pedometerData); + __baseline = __lastRecord; + + _SD("Baseline: %u, %u, %.3f, %.3f", + __baseline.walkSteps, __baseline.runSteps, __baseline.distance, __baseline.calories); + } else if (pedometerData->diffs_count == 0) { - _D("Single event"); + _SD("Single: %.0f, %.0f, %.3f, %.3f", + eventData->values[1], eventData->values[2], eventData->values[3], eventData->values[4]); __recordSingle(pedometerData, timestamp); + } else { - _D("Batch event"); + _SD("Batch [%d]: %.0f, %.0f, %.3f, %.3f", + pedometerData->diffs_count, + eventData->values[1], eventData->values[2], eventData->values[3], eventData->values[4]); __recordBatch(pedometerData, timestamp); } - __baseline.timestamp = timestamp; - __baseline.walkSteps = eventData->values[1]; - __baseline.runSteps = eventData->values[2]; - __baseline.distance = eventData->values[3]; - __baseline.calories = eventData->values[4]; - - _D("Baseline: %u, %u, %.3f, %.3f", - __baseline.walkSteps, __baseline.runSteps, __baseline.distance, __baseline.calories); - removeExpired(SUBJ_SENSOR_PEDOMETER, PEDOMETER_RECORD, KEY_END_TIME); } void PedometerLogger::__recordSingle(sensor_pedometer_data_t *eventData, uint64_t timestamp) { - DataRecord record; - record.walkSteps = static_cast(eventData->values[1]) - __baseline.walkSteps; - record.runSteps = static_cast(eventData->values[2]) - __baseline.runSteps; - record.distance = eventData->values[3] - __baseline.distance; - record.calories = eventData->values[4] - __baseline.calories; - - IF_FAIL_VOID_TAG(record.walkSteps + record.runSteps > 0, _D, "Skipping zero-count event"); + if (timestamp - __baseline.timestamp >= MIN_INTERVAL) + flushCache(); - char *query = sqlite3_mprintf( - "INSERT INTO " PEDOMETER_RECORD "(" \ - KEY_START_TIME ", " \ - KEY_END_TIME ", " \ - KEY_WALK_STEPS ", " \ - KEY_RUN_STEPS ", " \ - KEY_DISTANCE ", " \ - KEY_CALORIES ") " \ - "VALUES (%llu, %llu, %u, %u, %.3f, %.3f)", - __baseline.timestamp, timestamp, record.walkSteps, record.runSteps, record.distance, record.calories); - executeQuery(query); - sqlite3_free(query); + __setRecord(__lastRecord, timestamp, eventData); } void PedometerLogger::__recordBatch(sensor_pedometer_data_t *eventData, uint64_t timestamp) { - std::string query("INSERT INTO " PEDOMETER_RECORD "(" \ + flushCache(); + + std::string query("INSERT INTO " PEDOMETER_RECORD " (" \ KEY_START_TIME ", " \ KEY_END_TIME ", " \ KEY_WALK_STEPS ", " \ @@ -156,4 +170,16 @@ void PedometerLogger::__recordBatch(sensor_pedometer_data_t *eventData, uint64_t IF_FAIL_VOID_TAG(query.at(query.size() - 1) == ')', _D, "No records"); executeQuery(query.c_str()); + + __setRecord(__lastRecord, timestamp, eventData); + __baseline = __lastRecord; +} + +void PedometerLogger::__setRecord(DataRecord &record, uint64_t timestamp, sensor_pedometer_data_t *eventData) +{ + record.timestamp = timestamp; + record.walkSteps = static_cast(eventData->values[1]); + record.runSteps = static_cast(eventData->values[2]); + record.distance = eventData->values[3]; + record.calories = eventData->values[4]; } diff --git a/src/sensor/pedometer/PedometerLogger.h b/src/sensor/pedometer/PedometerLogger.h index 57832f9..f4b32f9 100644 --- a/src/sensor/pedometer/PedometerLogger.h +++ b/src/sensor/pedometer/PedometerLogger.h @@ -29,6 +29,7 @@ namespace ctx { bool start(); void stop(); + void flushCache(bool force = false); protected: void onEvent(sensor_data_t *eventData); @@ -44,9 +45,11 @@ namespace ctx { void __recordSingle(sensor_pedometer_data_t *eventData, uint64_t timestamp); void __recordBatch(sensor_pedometer_data_t *eventData, uint64_t timestamp); + void __setRecord(DataRecord &record, uint64_t timestamp, sensor_pedometer_data_t *eventData); bool __firstEvent; DataRecord __baseline; + DataRecord __lastRecord; }; }