From 0eaf46209cf519deb3383c8d0bbb7477b3b426a6 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Thu, 10 Apr 2014 15:46:53 +0100 Subject: [PATCH] Show more debugging info: system memory, VM memory and disk space. --- .../briarproject/android/BriarService.java | 7 ++ .../briarproject/android/TestingActivity.java | 70 ++++++++++++++----- .../briarproject/system/AndroidFileUtils.java | 8 +++ .../briarproject/api/system/FileUtils.java | 2 + .../briarproject/system/DesktopFileUtils.java | 17 +++++ .../system/DesktopSystemModule.java | 9 +-- .../src/org/briarproject/TestFileUtils.java | 6 +- 7 files changed, 91 insertions(+), 28 deletions(-) create mode 100644 briar-desktop/src/org/briarproject/system/DesktopFileUtils.java diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java index 7a5ffe65f6..ea17bfa2f5 100644 --- a/briar-android/src/org/briarproject/android/BriarService.java +++ b/briar-android/src/org/briarproject/android/BriarService.java @@ -145,6 +145,13 @@ public class BriarService extends RoboService implements EventListener { }.start(); } + @Override + public void onLowMemory() { + super.onLowMemory(); + LOG.warning("Memory is low"); + // FIXME: Work out what to do about it + } + public void eventOccurred(Event e) { if(e instanceof MessageAddedEvent) { MessageAddedEvent m = (MessageAddedEvent) e; diff --git a/briar-android/src/org/briarproject/android/TestingActivity.java b/briar-android/src/org/briarproject/android/TestingActivity.java index d063d4ae55..f9b8df9b3d 100644 --- a/briar-android/src/org/briarproject/android/TestingActivity.java +++ b/briar-android/src/org/briarproject/android/TestingActivity.java @@ -51,8 +51,10 @@ import org.briarproject.api.db.DbException; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.plugins.Plugin; import org.briarproject.api.plugins.PluginManager; +import org.briarproject.api.system.FileUtils; import org.briarproject.util.StringUtils; +import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.content.Intent; import android.content.res.Resources; @@ -87,6 +89,8 @@ public class TestingActivity extends BriarActivity implements OnClickListener { private ImageButton refresh = null, share = null; private File temp = null; + @Inject private volatile FileUtils fileUtils; + @Override public void onCreate(Bundle state) { super.onCreate(state); @@ -194,7 +198,8 @@ public class TestingActivity extends BriarActivity implements OnClickListener { String brand = Build.BRAND; if(model.startsWith(manufacturer)) deviceType = capitalize(model); else deviceType = capitalize(manufacturer) + " " + model; - if(!StringUtils.isNullOrEmpty(brand)) deviceType += " (" + brand + ")"; + if(!StringUtils.isNullOrEmpty(brand)) + deviceType += " (" + capitalize(brand) + ")"; statusMap.put("Device type:", deviceType); // Android version @@ -205,8 +210,52 @@ public class TestingActivity extends BriarActivity implements OnClickListener { // CPU architecture statusMap.put("Architecture:", Build.CPU_ABI); + // System memory + Object o = getSystemService(ACTIVITY_SERVICE); + ActivityManager am = (ActivityManager) o; + ActivityManager.MemoryInfo mem = new ActivityManager.MemoryInfo(); + am.getMemoryInfo(mem); + String systemMemory = (mem.totalMem / 1024 / 1024) + " MiB total, " + + (mem.availMem / 1024 / 1204) + " MiB free, " + + (mem.threshold / 1024 / 1024) + " MiB threshold"; + statusMap.put("System memory:", systemMemory); + + // Virtual machine memory + Runtime runtime = Runtime.getRuntime(); + long heap = runtime.totalMemory(); + long heapFree = runtime.freeMemory(); + long heapMax = runtime.maxMemory(); + String vmMemory = (heap / 1024 / 1024) + " MiB allocated, " + + (heapFree / 1024 / 1024) + " MiB free, " + + (heapMax / 1024 / 1024) + " MiB maximum"; + statusMap.put("Virtual machine memory:", vmMemory); + + // Internal storage + try { + File root = Environment.getRootDirectory(); + long rootTotal = fileUtils.getTotalSpace(root); + long rootFree = fileUtils.getFreeSpace(root); + String internal = (rootTotal / 1024 / 1024) + " MiB total, " + + (rootFree / 1024 / 1024) + " MiB free"; + statusMap.put("Internal storage:", internal); + } catch(IOException e) { + statusMap.put("Internal storage:", "Unknown"); + } + + // External storage (SD card) + try { + File sd = Environment.getExternalStorageDirectory(); + long sdTotal = fileUtils.getTotalSpace(sd); + long sdFree = fileUtils.getFreeSpace(sd); + String external = (sdTotal / 1024 / 1024) + " MiB total, " + + (sdFree / 1024 / 1024) + " MiB free"; + statusMap.put("External storage:", external); + } catch(IOException e) { + statusMap.put("External storage:", "Unknown"); + } + // Is mobile data available? - Object o = getSystemService(CONNECTIVITY_SERVICE); + o = getSystemService(CONNECTIVITY_SERVICE); ConnectivityManager cm = (ConnectivityManager) o; NetworkInfo mobile = cm.getNetworkInfo(TYPE_MOBILE); boolean mobileAvailable = mobile != null && mobile.isAvailable(); @@ -367,7 +416,6 @@ public class TestingActivity extends BriarActivity implements OnClickListener { try { int pid = android.os.Process.myPid(); Pattern pattern = Pattern.compile(".*\\( *" + pid + "\\).*"); - Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("logcat -d -v time *:I"); Scanner scanner = new Scanner(process.getInputStream()); while(scanner.hasNextLine()) { @@ -383,22 +431,6 @@ public class TestingActivity extends BriarActivity implements OnClickListener { } statusMap.put("Debugging log:", log.toString()); - // TorPlugin log output for all processes - StringBuilder torLog = new StringBuilder(); - try { - Runtime runtime = Runtime.getRuntime(); - Process process = runtime.exec("logcat -d -v time -s TorPlugin"); - Scanner scanner = new Scanner(process.getInputStream()); - while(scanner.hasNextLine()) { - torLog.append(scanner.nextLine()); - torLog.append('\n'); - } - scanner.close(); - } catch(IOException e) { - if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - } - statusMap.put("Tor debugging log:", torLog.toString()); - return Collections.unmodifiableMap(statusMap); } diff --git a/briar-android/src/org/briarproject/system/AndroidFileUtils.java b/briar-android/src/org/briarproject/system/AndroidFileUtils.java index f4b49144e4..d7cc516a96 100644 --- a/briar-android/src/org/briarproject/system/AndroidFileUtils.java +++ b/briar-android/src/org/briarproject/system/AndroidFileUtils.java @@ -10,6 +10,14 @@ import android.os.StatFs; class AndroidFileUtils implements FileUtils { + @SuppressWarnings("deprecation") + public long getTotalSpace(File f) throws IOException { + if(Build.VERSION.SDK_INT >= 9) return f.getTotalSpace(); + StatFs s = new StatFs(f.getAbsolutePath()); + // These deprecated methods are the best thing available for SDK < 9 + return (long) s.getBlockCount() * s.getBlockSize(); + } + @SuppressWarnings("deprecation") public long getFreeSpace(File f) throws IOException { if(Build.VERSION.SDK_INT >= 9) return f.getUsableSpace(); diff --git a/briar-api/src/org/briarproject/api/system/FileUtils.java b/briar-api/src/org/briarproject/api/system/FileUtils.java index 306a7f80ac..bde3960497 100644 --- a/briar-api/src/org/briarproject/api/system/FileUtils.java +++ b/briar-api/src/org/briarproject/api/system/FileUtils.java @@ -5,5 +5,7 @@ import java.io.IOException; public interface FileUtils { + long getTotalSpace(File f) throws IOException; + long getFreeSpace(File f) throws IOException; } diff --git a/briar-desktop/src/org/briarproject/system/DesktopFileUtils.java b/briar-desktop/src/org/briarproject/system/DesktopFileUtils.java new file mode 100644 index 0000000000..c397068646 --- /dev/null +++ b/briar-desktop/src/org/briarproject/system/DesktopFileUtils.java @@ -0,0 +1,17 @@ +package org.briarproject.system; + +import java.io.File; +import java.io.IOException; + +import org.briarproject.api.system.FileUtils; + +class DesktopFileUtils implements FileUtils { + + public long getTotalSpace(File f) throws IOException { + return f.getTotalSpace(); // Requires Java 1.6 + } + + public long getFreeSpace(File f) throws IOException { + return f.getUsableSpace(); // Requires Java 1.6 + } +} diff --git a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java index 5a3badb9fa..1f4939c842 100644 --- a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java +++ b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java @@ -1,8 +1,5 @@ package org.briarproject.system; -import java.io.File; -import java.io.IOException; - import org.briarproject.api.system.Clock; import org.briarproject.api.system.FileUtils; import org.briarproject.api.system.SeedProvider; @@ -18,10 +15,6 @@ public class DesktopSystemModule extends AbstractModule { bind(Timer.class).to(SystemTimer.class); if(OsUtils.isLinux()) bind(SeedProvider.class).to(LinuxSeedProvider.class); - bind(FileUtils.class).toInstance(new FileUtils() { - public long getFreeSpace(File f) throws IOException { - return f.getFreeSpace(); - } - }); + bind(FileUtils.class).to(DesktopFileUtils.class); } } diff --git a/briar-tests/src/org/briarproject/TestFileUtils.java b/briar-tests/src/org/briarproject/TestFileUtils.java index c5e55ea7ac..e81b16bde3 100644 --- a/briar-tests/src/org/briarproject/TestFileUtils.java +++ b/briar-tests/src/org/briarproject/TestFileUtils.java @@ -7,7 +7,11 @@ import org.briarproject.api.system.FileUtils; public class TestFileUtils implements FileUtils { + public long getTotalSpace(File f) throws IOException { + return f.getTotalSpace(); // Requires Java 1.6 + } + public long getFreeSpace(File f) throws IOException { - return f.getFreeSpace(); + return f.getUsableSpace(); // Requires Java 1.6 } } -- GitLab