db: Store timestamps to the sqlite db.
Test: make
Bug: 137786053
Change-Id: I401e80e6168c717258644a37e9d8753c61248acd
diff --git a/src/db/models.h b/src/db/models.h
index f2ff651..0eac13f 100644
--- a/src/db/models.h
+++ b/src/db/models.h
@@ -306,9 +306,18 @@
return static_cast<int>(last_rowid);
}
- // Returns the row ID that was inserted last.
template <typename... Args>
static bool Delete(DbHandle db, const std::string& sql, Args&&... args) {
+ return ExecuteOnce(db, sql, std::forward<Args>(args)...);
+ }
+
+ template <typename... Args>
+ static bool Update(DbHandle db, const std::string& sql, Args&&... args) {
+ return ExecuteOnce(db, sql, std::forward<Args>(args)...);
+ }
+
+ template <typename... Args>
+ static bool ExecuteOnce(DbHandle db, const std::string& sql, Args&&... args) {
ScopedLockDb lock{db};
DbStatement stmt = DbStatement::Prepare(db, sql, std::forward<Args>(args)...);
@@ -705,6 +714,7 @@
p.temperature,
p.trace_enabled,
p.readahead_enabled,
+ p.intent_started_ns,
p.total_time_ns,
p.report_fully_drawn_ns)) {
return std::nullopt;
@@ -718,13 +728,14 @@
AppLaunchHistoryModel::Temperature temperature,
bool trace_enabled,
bool readahead_enabled,
+ std::optional<uint64_t> intent_started_ns,
std::optional<uint64_t> total_time_ns,
std::optional<uint64_t> report_fully_drawn_ns)
{
const char* sql = "INSERT INTO app_launch_histories (activity_id, temperature, trace_enabled, "
- "readahead_enabled, total_time_ns, "
- "report_fully_drawn_ns) "
- "VALUES (?1, ?2, ?3, ?4, ?5, ?6);";
+ "readahead_enabled, intent_started_ns, "
+ "total_time_ns, report_fully_drawn_ns) "
+ "VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7);";
std::optional<int> inserted_row_id =
DbQueryBuilder::Insert(db,
@@ -733,6 +744,7 @@
temperature,
trace_enabled,
readahead_enabled,
+ intent_started_ns,
total_time_ns,
report_fully_drawn_ns);
if (!inserted_row_id) {
@@ -745,17 +757,36 @@
p.temperature = temperature;
p.trace_enabled = trace_enabled;
p.readahead_enabled = readahead_enabled;
+ p.intent_started_ns = intent_started_ns;
p.total_time_ns = total_time_ns;
p.report_fully_drawn_ns = report_fully_drawn_ns;
return p;
}
+ static bool UpdateReportFullyDrawn(DbHandle db,
+ int history_id,
+ std::optional<uint64_t> report_fully_drawn_ns)
+ {
+ const char* sql = "UPDATE app_launch_histories "
+ "SET report_fully_drawn_ns = ?1 "
+ "WHERE id = ?2;";
+
+ bool result = DbQueryBuilder::Update(db, sql, history_id, report_fully_drawn_ns);
+
+ if (!result) {
+ LOG(ERROR)<< "Failed to update history_id:"<< history_id
+ << ", report_fully_drawn_ns: " << report_fully_drawn_ns.value();
+ }
+ return result;
+ }
+
int id;
int activity_id; // ActivityModel::id
Temperature temperature = Temperature::kUninitialized;
bool trace_enabled;
bool readahead_enabled;
+ std::optional<uint64_t> intent_started_ns;
std::optional<uint64_t> total_time_ns;
std::optional<uint64_t> report_fully_drawn_ns;
};
@@ -766,7 +797,14 @@
<< "temperature=" << static_cast<int>(p.temperature) << ","
<< "trace_enabled=" << p.trace_enabled << ","
<< "readahead_enabled=" << p.readahead_enabled << ","
- << "total_time_ns=";
+ << "intent_started_ns=";
+ if (p.intent_started_ns) {
+ os << *p.intent_started_ns;
+ } else {
+ os << "(nullopt)";
+ }
+ os << ",";
+ os << "total_time_ns=";
if (p.total_time_ns) {
os << *p.total_time_ns;
} else {