mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Avoid creating an in-memory copy of the log where possible.
This helps to avoid OOMs on low-memory devices.
This commit is contained in:
@@ -26,7 +26,9 @@ import java.lang.reflect.Method;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.Scanner;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.FutureTask;
|
||||
@@ -54,6 +56,8 @@ import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty;
|
||||
|
||||
public class BriarReportPrimer implements ReportPrimer {
|
||||
|
||||
private static final int MAX_PERSISTED_LOG_LINES = 1_000;
|
||||
|
||||
@Override
|
||||
public void primeReport(@NonNull Context ctx,
|
||||
@NonNull ReportBuilder builder) {
|
||||
@@ -271,9 +275,16 @@ public class BriarReportPrimer implements ReportPrimer {
|
||||
File logDir = ctx.getDir("log", MODE_PRIVATE);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
try {
|
||||
for (String line : logManager.getPersistedLog(logDir, old)) {
|
||||
sb.append(line).append('\n');
|
||||
Scanner scanner = logManager.getPersistedLog(logDir, old);
|
||||
LinkedList<String> lines = new LinkedList<>();
|
||||
int numLines = 0;
|
||||
while (scanner.hasNextLine()) {
|
||||
lines.add(scanner.nextLine());
|
||||
if (numLines == MAX_PERSISTED_LOG_LINES) lines.pollFirst();
|
||||
else numLines++;
|
||||
}
|
||||
scanner.close();
|
||||
for (String line : lines) sb.append(line).append('\n');
|
||||
} catch (IOException e) {
|
||||
sb.append("Could not recover persisted log: ").append(e);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -106,18 +106,19 @@ public class SettingsActivity extends BriarActivity {
|
||||
ioExecutor.execute(() -> {
|
||||
try {
|
||||
File logDir = getApplication().getDir("log", MODE_PRIVATE);
|
||||
List<String> lines = logManager.getPersistedLog(logDir, old);
|
||||
if (lines.isEmpty()) {
|
||||
Scanner scanner = logManager.getPersistedLog(logDir, old);
|
||||
if (!scanner.hasNextLine()) {
|
||||
scanner.close();
|
||||
runOnUiThreadUnlessDestroyed(() ->
|
||||
Toast.makeText(getApplication(), "Log is empty",
|
||||
LENGTH_LONG).show());
|
||||
return;
|
||||
}
|
||||
PrintWriter w = new PrintWriter(osp.getOutputStream());
|
||||
for (String line : lines) {
|
||||
w.println(line);
|
||||
}
|
||||
while (scanner.hasNextLine()) w.println(scanner.nextLine());
|
||||
w.flush();
|
||||
w.close();
|
||||
scanner.close();
|
||||
runOnUiThreadUnlessDestroyed(() ->
|
||||
Toast.makeText(getApplication(), "Log exported",
|
||||
LENGTH_LONG).show());
|
||||
|
||||
Reference in New Issue
Block a user