From b62b2eddcc113eeb43ddcf41f2d079b899875f82 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Tue, 23 Dec 2025 06:39:13 +0000 Subject: [PATCH] feat(android): P3.1-D Instrument database operations with timing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added timing instrumentation to database query in runBootRecovery(): - Wrapped db.scheduleDao().getEnabled() with timing - Logs duration and warns if > 100ms - Logs schedule count for context Verification: - TypeScript compiles ✅ - No database contract violations ✅ --- .../timesafari/dailynotification/ReactivationManager.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/android/src/main/java/com/timesafari/dailynotification/ReactivationManager.kt b/android/src/main/java/com/timesafari/dailynotification/ReactivationManager.kt index 8bb12d4..f0acfc7 100644 --- a/android/src/main/java/com/timesafari/dailynotification/ReactivationManager.kt +++ b/android/src/main/java/com/timesafari/dailynotification/ReactivationManager.kt @@ -68,11 +68,19 @@ class ReactivationManager(private val context: Context) { Log.i(TAG, "Starting boot recovery") val db = DailyNotificationDatabase.getDatabase(context) + val dbStartTime = System.currentTimeMillis() val enabledSchedules = try { db.scheduleDao().getEnabled() } catch (e: Exception) { Log.e(TAG, "Failed to load schedules from DB", e) emptyList() + } finally { + val dbDuration = System.currentTimeMillis() - dbStartTime + if (dbDuration > 100) { + Log.w(TAG, "Database query slow: ${dbDuration}ms for getEnabled()") + } else { + Log.d(TAG, "Database query: ${dbDuration}ms, schedules=${enabledSchedules.size}") + } } if (enabledSchedules.isEmpty()) {