From 6ce301426d2b0c43c679e4434545a70478dfd363 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 25 Feb 2021 14:28:58 +0100 Subject: [PATCH] Added checkpointing (debug version) --- app/src/main/java/eu/faircode/email/DB.java | 23 +++++++++++++++++++ .../java/eu/faircode/email/WorkerFts.java | 2 ++ 2 files changed, 25 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/DB.java b/app/src/main/java/eu/faircode/email/DB.java index 1be8c7b78e..30bdb55cf2 100644 --- a/app/src/main/java/eu/faircode/email/DB.java +++ b/app/src/main/java/eu/faircode/email/DB.java @@ -29,6 +29,7 @@ import org.json.JSONObject; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -1856,6 +1857,28 @@ public abstract class DB extends RoomDatabase { }); } + public void checkpoint(Context context) { + if (!BuildConfig.DEBUG) + return; + + // https://www.sqlite.org/pragma.html#pragma_wal_checkpoint + long start = new Date().getTime(); + StringBuilder sb = new StringBuilder(); + SupportSQLiteDatabase db = getInstance(context).getOpenHelper().getWritableDatabase(); + try (Cursor cursor = db.query("PRAGMA wal_checkpoint(PASSIVE);")) { + if (cursor.moveToNext()) { + for (int i = 0; i < cursor.getColumnCount(); i++) { + if (i > 0) + sb.append(","); + sb.append(cursor.getInt(i)); + } + } + } + + long elapse = new Date().getTime() - start; + Log.i("PRAGMA wal_checkpoint=" + sb + " elapse=" + elapse); + } + @Override @SuppressWarnings("deprecation") public void beginTransaction() { diff --git a/app/src/main/java/eu/faircode/email/WorkerFts.java b/app/src/main/java/eu/faircode/email/WorkerFts.java index 9535670510..2c3de8c2c5 100644 --- a/app/src/main/java/eu/faircode/email/WorkerFts.java +++ b/app/src/main/java/eu/faircode/email/WorkerFts.java @@ -62,6 +62,8 @@ public class WorkerFts extends Worker { int indexed = 0; List ids = new ArrayList<>(INDEX_BATCH_SIZE); DB db = DB.getInstance(context); + db.checkpoint(context); + SQLiteDatabase sdb = FtsDbHelper.getInstance(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); try (Cursor cursor = db.message().getMessageFts()) {