author | Brad Lassey <blassey@mozilla.com> |
Sun, 13 Feb 2011 23:25:22 -0500 | |
changeset 62500 | 385abb827ff331157305e44c2792e2a3d632e2df |
parent 62499 | 93cd6c60e16b34758a78d7f6b86963ce0cb1b3bb |
child 62501 | 26421a3b68f3d33e8496c29ecc0de9a9ba523a87 |
push id | 18749 |
push user | blassey@mozilla.com |
push date | Mon, 14 Feb 2011 04:27:14 +0000 |
treeherder | mozilla-central@385abb827ff3 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | dougt, blocking-fennec |
bugs | 632649 |
milestone | 2.0b12pre |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/embedding/android/GeckoApp.java +++ b/embedding/android/GeckoApp.java @@ -218,35 +218,62 @@ abstract public class GeckoApp new File(getApplication().getPackageResourcePath()).lastModified() >= libxulFile.lastModified())) surfaceView.mSplashStatusMsg = getResources().getString(R.string.splash_screen_installing); else surfaceView.mSplashStatusMsg = getResources().getString(R.string.splash_screen_label); mLibLoadThread.start(); - - // We don't currently support devices with less than 256Mb of RAM, warn on first run - if (Runtime.getRuntime().totalMemory() <= 262144L && !new File(sGREDir, "application.ini").exists()) { + if (IsNewInstall() && IsUnsupportedDevice()) { new AlertDialog.Builder(this) - .setMessage(R.string.incompatable_device) - .setCancelable(false) - .setPositiveButton(R.string.continue_label, null) - .setNegativeButton(R.string.exit_label, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, - int id) - { - GeckoApp.this.finish(); - System.exit(0); - } - }) - .show(); + .setMessage(R.string.incompatable_device) + .setCancelable(false) + .setPositiveButton(R.string.continue_label, null) + .setNegativeButton(R.string.exit_label, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, + int id) + { + GeckoApp.this.finish(); + System.exit(0); + } + }) + .show(); + } + } + + boolean IsNewInstall() { + File appIni = new File(sGREDir, "application.ini"); + return !appIni.exists(); + } + + boolean IsUnsupportedDevice() { + // We don't currently support devices with less than 256Mb of RAM, warn on first run + File meminfo = new File("/proc/meminfo"); + try { + BufferedReader br = new BufferedReader(new FileReader(meminfo)); + String totalMem = ""; + while(!totalMem.contains("MemTotal:") && totalMem != null) + totalMem = br.readLine(); + StringTokenizer st = new StringTokenizer(totalMem, " "); + st.nextToken(); // "MemInfo:" + totalMem = st.nextToken(); + + Log.i("GeckoMemory", "MemTotal: " + Integer.parseInt(totalMem)); + return Integer.parseInt(totalMem) <= 262144L; + } catch (Exception ex) { + // Will catch NullPointerException if totalMem isn't found, + // a NumberFormatException if the token isn't parsible + // IOException from the file reading or NoSuchElementException + // if totalMem doesn't have 2 tokens. None of these are fatal, + // so log it and move on. + Log.w("GeckoMemTest", "Exception when finding total memory", ex); } - + return false; } @Override protected void onNewIntent(Intent intent) { if (checkLaunchState(LaunchState.GeckoExiting)) { // We're exiting and shouldn't try to do anything else just incase // we're hung for some reason we'll force the process to exit System.exit(0);