Index: content/browser/indexed_db/leveldb/leveldb_database.cc |
diff --git a/content/browser/indexed_db/leveldb/leveldb_database.cc b/content/browser/indexed_db/leveldb/leveldb_database.cc |
index 218a71b01901612a35e2bbb841fb9bbf838242db..0b6546b9f154901bdad26e3677cad1cede009dbb 100644 |
--- a/content/browser/indexed_db/leveldb/leveldb_database.cc |
+++ b/content/browser/indexed_db/leveldb/leveldb_database.cc |
@@ -25,6 +25,7 @@ |
#include "third_party/leveldatabase/src/helpers/memenv/memenv.h" |
#include "third_party/leveldatabase/src/include/leveldb/db.h" |
#include "third_party/leveldatabase/src/include/leveldb/env.h" |
+#include "third_party/leveldatabase/src/include/leveldb/filter_policy.h" |
#include "third_party/leveldatabase/src/include/leveldb/slice.h" |
using base::StringPiece; |
@@ -90,14 +91,18 @@ LevelDBDatabase::~LevelDBDatabase() { |
env_.reset(); |
} |
-static leveldb::Status OpenDB(leveldb::Comparator* comparator, |
- leveldb::Env* env, |
- const base::FilePath& path, |
- leveldb::DB** db) { |
+static leveldb::Status OpenDB( |
+ leveldb::Comparator* comparator, |
+ leveldb::Env* env, |
+ const base::FilePath& path, |
+ leveldb::DB** db, |
+ scoped_ptr<const leveldb::FilterPolicy>* filter_policy) { |
+ filter_policy->reset(leveldb::NewBloomFilterPolicy(10)); |
leveldb::Options options; |
options.comparator = comparator; |
options.create_if_missing = true; |
options.paranoid_checks = true; |
+ options.filter_policy = filter_policy->get(); |
options.compression = leveldb::kSnappyCompression; |
// For info about the troubles we've run into with this parameter, see: |
@@ -106,7 +111,9 @@ static leveldb::Status OpenDB(leveldb::Comparator* comparator, |
options.env = env; |
// ChromiumEnv assumes UTF8, converts back to FilePath before using. |
- return leveldb::DB::Open(options, path.AsUTF8Unsafe(), db); |
+ leveldb::Status s = leveldb::DB::Open(options, path.AsUTF8Unsafe(), db); |
+ |
+ return s; |
} |
leveldb::Status LevelDBDatabase::Destroy(const base::FilePath& file_name) { |
@@ -270,8 +277,12 @@ leveldb::Status LevelDBDatabase::Open(const base::FilePath& file_name, |
new ComparatorAdapter(comparator)); |
leveldb::DB* db; |
- const leveldb::Status s = |
- OpenDB(comparator_adapter.get(), leveldb::IDBEnv(), file_name, &db); |
+ scoped_ptr<const leveldb::FilterPolicy> filter_policy; |
+ const leveldb::Status s = OpenDB(comparator_adapter.get(), |
+ leveldb::IDBEnv(), |
+ file_name, |
+ &db, |
+ &filter_policy); |
if (!s.ok()) { |
HistogramLevelDBError("WebCore.IndexedDB.LevelDBOpenErrors", s); |
@@ -295,6 +306,7 @@ leveldb::Status LevelDBDatabase::Open(const base::FilePath& file_name, |
(*result)->db_ = make_scoped_ptr(db); |
(*result)->comparator_adapter_ = comparator_adapter.Pass(); |
(*result)->comparator_ = comparator; |
+ (*result)->filter_policy_ = filter_policy.Pass(); |
return s; |
} |
@@ -306,8 +318,12 @@ scoped_ptr<LevelDBDatabase> LevelDBDatabase::OpenInMemory( |
scoped_ptr<leveldb::Env> in_memory_env(leveldb::NewMemEnv(leveldb::IDBEnv())); |
leveldb::DB* db; |
- const leveldb::Status s = OpenDB( |
- comparator_adapter.get(), in_memory_env.get(), base::FilePath(), &db); |
+ scoped_ptr<const leveldb::FilterPolicy> filter_policy; |
+ const leveldb::Status s = OpenDB(comparator_adapter.get(), |
+ in_memory_env.get(), |
+ base::FilePath(), |
+ &db, |
+ &filter_policy); |
if (!s.ok()) { |
LOG(ERROR) << "Failed to open in-memory LevelDB database: " << s.ToString(); |
@@ -319,6 +335,7 @@ scoped_ptr<LevelDBDatabase> LevelDBDatabase::OpenInMemory( |
result->db_ = make_scoped_ptr(db); |
result->comparator_adapter_ = comparator_adapter.Pass(); |
result->comparator_ = comparator; |
+ result->filter_policy_ = filter_policy.Pass(); |
return result.Pass(); |
} |