| Index: sql/connection.cc
|
| diff --git a/sql/connection.cc b/sql/connection.cc
|
| index d220c8e8d78906aad8f9064bd752ea811ec43cf6..a4fa48f534c3af60ac527b830f51b2347949027b 100644
|
| --- a/sql/connection.cc
|
| +++ b/sql/connection.cc
|
| @@ -33,6 +33,7 @@
|
| #include "sql/connection_memory_dump_provider.h"
|
| #include "sql/meta_table.h"
|
| #include "sql/statement.h"
|
| +#include "sql/vfs_wrapper.h"
|
| #include "third_party/sqlite/sqlite3.h"
|
|
|
| #if defined(OS_IOS) && defined(USE_SYSTEM_SQLITE)
|
| @@ -40,8 +41,24 @@
|
| #include "third_party/sqlite/src/ext/icu/sqliteicu.h"
|
| #endif
|
|
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| +#include <CoreFoundation/CoreFoundation.h>
|
| +#include <CoreServices/CoreServices.h>
|
| +#endif
|
| +
|
| namespace {
|
|
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| +void gross() {
|
| + CFPreferencesSetAppValue(CFSTR("CSBackupDebugLogging"),
|
| + kCFBooleanTrue,
|
| + kCFPreferencesCurrentApplication);
|
| +}
|
| +#else
|
| +void gross() {
|
| +}
|
| +#endif
|
| +
|
| // Spin for up to a second waiting for the lock to clear when setting
|
| // up the database.
|
| // TODO(shess): Better story on this. http://crbug.com/56559
|
| @@ -159,6 +176,7 @@ void InitializeSqlite() {
|
| base::AutoLock lock(g_sqlite_init_lock.Get());
|
| static bool first_call = true;
|
| if (first_call) {
|
| + gross();
|
| sqlite3_initialize();
|
|
|
| // Schedule callback to record memory footprint histograms at 10m, 1h, and
|
| @@ -1690,7 +1708,12 @@ bool Connection::OpenInternal(const std::string& file_name,
|
| DLOG_IF(FATAL, poisoned_) << "sql::Connection is already open.";
|
| poisoned_ = false;
|
|
|
| - int err = sqlite3_open(file_name.c_str(), &db_);
|
| + // Custom memory-mapping VFS which reads pages using regular I/O on first hit.
|
| + sqlite3_vfs* vfs = VFSWrapper();
|
| + const char* vfs_name = (vfs ? vfs->zName : NULL);
|
| + int err = sqlite3_open_v2(file_name.c_str(), &db_,
|
| + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
|
| + vfs_name);
|
| if (err != SQLITE_OK) {
|
| // Extended error codes cannot be enabled until a handle is
|
| // available, fetch manually.
|
|
|