summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvichang <vichang@chromium.org>2016-01-28 14:09:03 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-28 22:09:52 +0000
commit7ce37c1ec34e33f7e2c4b87341f16885942c3e5c (patch)
treeb91e0bc688a150d03e12ca8f54cf2d700ecfef5f
parent12607e58c74926c0480c08f19214908f987a37a3 (diff)
downloadchromium_src-7ce37c1ec34e33f7e2c4b87341f16885942c3e5c.zip
chromium_src-7ce37c1ec34e33f7e2c4b87341f16885942c3e5c.tar.gz
chromium_src-7ce37c1ec34e33f7e2c4b87341f16885942c3e5c.tar.bz2
Add flag to disable mmap in all sql connection in work build
Work Chrome runs in environment without a proper mmap support. Disable it for all work chrome. BUG=554269 Review URL: https://codereview.chromium.org/1637683003 Cr-Commit-Position: refs/heads/master@{#372179}
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java7
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java8
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java1
-rw-r--r--chrome/browser/android/feature_utilities.cc7
-rw-r--r--sql/connection.cc10
-rw-r--r--sql/connection.h5
6 files changed, 36 insertions, 2 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java
index 1c778c7..6734c5a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java
@@ -47,6 +47,13 @@ public class ChromeVersionInfo {
}
/**
+ * @return Whether this build is a work build.
+ */
+ public static boolean isWorkBuild() {
+ return ChromeVersionConstants.CHANNEL == ChromeVersionConstants.CHANNEL_WORK;
+ }
+
+ /**
* @return Whether this is an official (i.e. Google Chrome) build.
*/
public static boolean isOfficialBuild() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
index e19384c..dcd59ea 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
@@ -27,10 +27,12 @@ import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.ChromeStrictMode;
import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.ChromeVersionInfo;
import org.chromium.chrome.browser.FileProviderHelper;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.services.GoogleServicesManager;
import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelImpl;
+import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.browser.webapps.ActivityAssigner;
import org.chromium.content.app.ContentApplication;
import org.chromium.content.browser.BrowserStartupController;
@@ -185,6 +187,12 @@ public class ChromeBrowserInitializer {
throws ProcessInitException {
assert ThreadUtils.runningOnUiThread() : "Tried to start the browser on the wrong thread";
+ // This has to be called to stop mmap in sql connection before any db initialized.
+ // It applies to Work Chrome only as mmap doesn't work properly.
+ if (ChromeVersionInfo.isWorkBuild()) {
+ FeatureUtilities.nativeSetSqlMmapDisabledByDefault();
+ }
+
final LinkedList<Runnable> initQueue = new LinkedList<Runnable>();
abstract class NativeInitTask implements Runnable {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
index 735c27e..2089a3b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -173,4 +173,5 @@ public class FeatureUtilities {
private static native void nativeSetDocumentModeEnabled(boolean enabled);
private static native void nativeSetCustomTabVisible(boolean visible);
+ public static native void nativeSetSqlMmapDisabledByDefault();
}
diff --git a/chrome/browser/android/feature_utilities.cc b/chrome/browser/android/feature_utilities.cc
index 23111c6..41ff282 100644
--- a/chrome/browser/android/feature_utilities.cc
+++ b/chrome/browser/android/feature_utilities.cc
@@ -6,6 +6,8 @@
#include "jni/FeatureUtilities_jni.h"
+#include "sql/connection.h"
+
namespace {
bool document_mode_enabled = false;
bool custom_tab_visible = false;
@@ -39,6 +41,11 @@ static void SetCustomTabVisible(JNIEnv* env,
custom_tab_visible = visible;
}
+static void SetSqlMmapDisabledByDefault(JNIEnv* env,
+ const JavaParamRef<jclass>& clazz) {
+ sql::Connection::set_mmap_disabled_by_default();
+}
+
bool RegisterFeatureUtilities(JNIEnv* env) {
return RegisterNativesImpl(env);
}
diff --git a/sql/connection.cc b/sql/connection.cc
index 003005a..f08560c 100644
--- a/sql/connection.cc
+++ b/sql/connection.cc
@@ -43,6 +43,8 @@ namespace {
// TODO(shess): Better story on this. http://crbug.com/56559
const int kBusyTimeoutSeconds = 1;
+bool g_mmap_disabled_default = false;
+
class ScopedBusyTimeout {
public:
explicit ScopedBusyTimeout(sqlite3* db)
@@ -254,6 +256,12 @@ bool Connection::ShouldIgnoreSqliteCompileError(int error) {
basic_error == SQLITE_CORRUPT;
}
+// static
+void Connection::set_mmap_disabled_by_default() {
+ g_mmap_disabled_default = true;
+}
+
+
void Connection::ReportDiagnosticInfo(int extended_error, Statement* stmt) {
AssertIOAllowed();
@@ -339,7 +347,7 @@ Connection::Connection()
needs_rollback_(false),
in_memory_(false),
poisoned_(false),
- mmap_disabled_(false),
+ mmap_disabled_(g_mmap_disabled_default),
mmap_enabled_(false),
total_changes_at_last_release_(0),
stats_histogram_(NULL),
diff --git a/sql/connection.h b/sql/connection.h
index b35e2fa..4606a1f 100644
--- a/sql/connection.h
+++ b/sql/connection.h
@@ -149,9 +149,12 @@ class SQL_EXPORT Connection {
// other platforms.
void set_restrict_to_user() { restrict_to_user_ = true; }
- // Call to opt out of memory-mapped file I/O.
+ // Call to opt out of memory-mapped file I/O on per connection basis.
void set_mmap_disabled() { mmap_disabled_ = true; }
+ // Call to opt out of memory-mapped file I/O on all connections.
+ static void set_mmap_disabled_by_default();
+
// Set an error-handling callback. On errors, the error number (and
// statement, if available) will be passed to the callback.
//