Added setting for number of query threads

This commit is contained in:
M66B 2021-09-11 17:48:48 +02:00
parent 946b7d1c7b
commit 78e801bc95
4 changed files with 63 additions and 32 deletions

View File

@ -117,7 +117,8 @@ public abstract class DB extends RoomDatabase {
private static Context sContext;
private static DB sInstance;
static final int DB_DEFAULT_CACHE = 5; // percentage
static final int DEFAULT_QUERY_THREADS = 4; // AndroidX default thread count: 4
static final int DEFAULT_CACHE_SIZE = 5; // percentage
private static final String DB_NAME = "fairemail";
private static final int DB_CHECKPOINT = 1000; // requery/sqlite-android default
@ -373,9 +374,9 @@ public abstract class DB extends RoomDatabase {
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
int threads = prefs.getInt("query_threads", 4); // AndroidX default thread count: 4
int threads = prefs.getInt("query_threads", DEFAULT_QUERY_THREADS);
boolean wal = prefs.getBoolean("wal", true);
int sqlite_cache = prefs.getInt("sqlite_cache", DB.DB_DEFAULT_CACHE);
int sqlite_cache = prefs.getInt("sqlite_cache", DEFAULT_CACHE_SIZE);
Log.i("DB query threads=" + threads + " wal=" + wal);
ExecutorService executorQuery = Helper.getBackgroundExecutor(threads, "query");
ExecutorService executorTransaction = Helper.getBackgroundExecutor(0, "transaction");

View File

@ -118,11 +118,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private TextView tvLastCleanup;
private Button btnApp;
private Button btnMore;
private SwitchCompat swProtocol;
private SwitchCompat swLogInfo;
private SwitchCompat swDebug;
private SwitchCompat swQueries;
private TextView tvRoomQueryThreads;
private SeekBar sbRoomQueryThreads;
private ImageButton ibRoom;
private SwitchCompat swWal;
private SwitchCompat swCheckpoints;
private TextView tvSqliteCache;
@ -234,11 +236,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
tvLastCleanup = view.findViewById(R.id.tvLastCleanup);
btnApp = view.findViewById(R.id.btnApp);
btnMore = view.findViewById(R.id.btnMore);
swProtocol = view.findViewById(R.id.swProtocol);
swLogInfo = view.findViewById(R.id.swLogInfo);
swDebug = view.findViewById(R.id.swDebug);
swQueries = view.findViewById(R.id.swQueries);
tvRoomQueryThreads = view.findViewById(R.id.tvRoomQueryThreads);
sbRoomQueryThreads = view.findViewById(R.id.sbRoomQueryThreads);
ibRoom = view.findViewById(R.id.ibRoom);
swWal = view.findViewById(R.id.swWal);
swCheckpoints = view.findViewById(R.id.swCheckpoints);
tvSqliteCache = view.findViewById(R.id.tvSqliteCache);
@ -599,13 +603,27 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
swQueries.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
sbRoomQueryThreads.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
if (checked)
prefs.edit().putInt("query_threads", 2).commit(); // apply won't work here
else
prefs.edit().remove("query_threads").commit(); // apply won't work here
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
prefs.edit().putInt("query_threads", progress).apply();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// Do nothing
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// Do nothing
}
});
ibRoom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ApplicationEx.restart(v.getContext());
}
});
@ -1104,11 +1122,15 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swProtocol.setChecked(prefs.getBoolean("protocol", false));
swLogInfo.setChecked(prefs.getInt("log_level", Log.getDefaultLogLevel()) <= android.util.Log.INFO);
swDebug.setChecked(prefs.getBoolean("debug", false));
swQueries.setChecked(prefs.getInt("query_threads", 4) < 4);
int query_threads = prefs.getInt("query_threads", DB.DEFAULT_QUERY_THREADS);
tvRoomQueryThreads.setText(getString(R.string.title_advanced_room_query_threads, NF.format(query_threads)));
sbRoomQueryThreads.setProgress(query_threads);
swWal.setChecked(prefs.getBoolean("wal", true));
swCheckpoints.setChecked(prefs.getBoolean("checkpoints", true));
int sqlite_cache = prefs.getInt("sqlite_cache", DB.DB_DEFAULT_CACHE);
int sqlite_cache = prefs.getInt("sqlite_cache", DB.DEFAULT_CACHE_SIZE);
int cache_size = sqlite_cache * class_mb * 1024 / 100;
tvSqliteCache.setText(getString(R.string.title_advanced_sqlite_cache,
NF.format(sqlite_cache),

View File

@ -594,31 +594,40 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swQueries"
<eu.faircode.email.FixedTextView
android:id="@+id/tvRoomQueryThreads"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_query_threads"
android:layout_marginEnd="48dp"
android:text="@string/title_advanced_room_query_threads"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCaptionDebug"
app:switchPadding="12dp" />
app:layout_constraintTop_toBottomOf="@id/tvCaptionDebug" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvQueriesHint"
<SeekBar
android:id="@+id/sbRoomQueryThreads"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="48dp"
android:text="@string/title_advanced_queries_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
android:max="32"
android:min="0"
android:progress="4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swQueries" />
app:layout_constraintTop_toBottomOf="@id/tvRoomQueryThreads" />
<ImageButton
android:id="@+id/ibRoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/sbRoomQueryThreads"
app:srcCompat="@drawable/twotone_check_24" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvQueriesRemark"
android:id="@+id/tvRoomHint"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="48dp"
@ -627,7 +636,7 @@
android:textStyle="italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvQueriesHint" />
app:layout_constraintTop_toBottomOf="@id/ibRoom" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swWal"
@ -637,7 +646,7 @@
android:text="@string/title_advanced_wal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvQueriesRemark"
app:layout_constraintTop_toBottomOf="@id/tvRoomHint"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat

View File

@ -628,7 +628,7 @@
<string name="title_advanced_protocol">Protocol logging</string>
<string name="title_advanced_log_info">Debug logging</string>
<string name="title_advanced_debug">Debug mode</string>
<string name="title_advanced_query_threads">Limit parallel database access</string>
<string name="title_advanced_room_query_threads" translatable="false">ROOM query threads %1$s</string>
<string name="title_advanced_wal" translatable="false">WAL</string>
<string name="title_advanced_checkpoints" translatable="false">Checkpoints</string>
<string name="title_advanced_sqlite_cache" translatable="false">Sqlite cache %1$s %% - %2$s</string>
@ -730,7 +730,6 @@
<string name="title_advanced_notify_no_grouping">This Android version does not support notification grouping</string>
<string name="title_advanced_notify_no_channels">This Android version does not support notification channels</string>
<string name="title_advanced_queries_hint">Enabling this will decrease performance, however, enabling is required on some devices</string>
<string name="title_advanced_fts_hint">Enabling this improves search performance, but also increases battery and storage space usage</string>
<string name="title_advanced_english_hint">This will restart the app</string>
<string name="title_advanced_experiments_hint">List of current experimental features</string>