Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The LevelDB Authors. All rights reserved. | 1 // Copyright (c) 2013 The LevelDB Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. See the AUTHORS file for names of contributors. | 3 // found in the LICENSE file. See the AUTHORS file for names of contributors. |
| 4 | 4 |
| 5 #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ | 5 #ifndef THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ |
| 6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ | 6 #define THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <functional> | |
| 10 #include <memory> | |
| 9 #include <set> | 11 #include <set> |
| 10 #include <string> | 12 #include <string> |
| 11 #include <vector> | 13 #include <vector> |
| 12 | 14 |
| 15 #include "base/containers/linked_list.h" | |
| 13 #include "base/files/file.h" | 16 #include "base/files/file.h" |
| 14 #include "base/files/file_path.h" | 17 #include "base/files/file_path.h" |
| 18 #include "base/macros.h" | |
| 15 #include "base/metrics/histogram.h" | 19 #include "base/metrics/histogram.h" |
| 20 #include "leveldb/db.h" | |
| 16 #include "leveldb/env.h" | 21 #include "leveldb/env.h" |
| 17 #include "port/port_chromium.h" | 22 #include "port/port_chromium.h" |
| 18 #include "util/mutexlock.h" | 23 #include "util/mutexlock.h" |
| 19 | 24 |
| 20 namespace leveldb_env { | 25 namespace leveldb_env { |
| 21 | 26 |
| 22 // These entries map to values in tools/metrics/histograms/histograms.xml. New | 27 // These entries map to values in tools/metrics/histograms/histograms.xml. New |
| 23 // values should be appended at the end. | 28 // values should be appended at the end. |
| 24 enum MethodID { | 29 enum MethodID { |
| 25 kSequentialFileRead, | 30 kSequentialFileRead, |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 223 // Entry per Schedule() call | 228 // Entry per Schedule() call |
| 224 struct BGItem { | 229 struct BGItem { |
| 225 void* arg; | 230 void* arg; |
| 226 void (*function)(void*); | 231 void (*function)(void*); |
| 227 }; | 232 }; |
| 228 typedef std::deque<BGItem> BGQueue; | 233 typedef std::deque<BGItem> BGQueue; |
| 229 BGQueue queue_; | 234 BGQueue queue_; |
| 230 LockTable locks_; | 235 LockTable locks_; |
| 231 }; | 236 }; |
| 232 | 237 |
| 238 // Database registry. Keeps track of all live databases and reports them to | |
| 239 // memory-infra. This class is thread safe. | |
| 240 class DBRegistry { | |
| 241 public: | |
| 242 // Opens a database. Internally calls leveldb::DB::Open(options, name) | |
| 243 // and wraps the result in |DBWrapper| instance (see below). | |
| 244 static leveldb::Status Open(const leveldb::Options& options, | |
|
Marijn Kruisselbrink
2017/06/20 23:38:52
drive-by comment: presumably this is supposed to a
ssid
2017/06/20 23:52:13
I don't think we want to replace the existing prov
Marijn Kruisselbrink
2017/06/20 23:58:21
Ah, okay, makes sense. So there will be some magic
DmitrySkiba
2017/06/20 23:59:21
Yup, that's pretty much what we discussed with ssi
| |
| 245 const std::string& name, | |
| 246 leveldb::DB** dbptr); | |
| 247 | |
| 248 static DBRegistry* GetInstance(); | |
| 249 | |
| 250 // DB wrapper that provides extra information about the database. | |
| 251 class DBWrapper : public leveldb::DB { | |
| 252 public: | |
| 253 // DB name that Open() was called with. | |
| 254 virtual const std::string& name() const = 0; | |
| 255 }; | |
| 256 | |
| 257 using DatabaseVisitor = std::function<void(DBWrapper*)>; | |
| 258 | |
| 259 // Calls |visitor| for each live database. Takes a lock, preventing | |
| 260 // any database from being created or destroyed (but doesn't lock the | |
| 261 // databases themselves). | |
| 262 void VisitDatabases(const DatabaseVisitor& visitor); | |
| 263 | |
| 264 private: | |
| 265 class DBWrapperImpl; | |
| 266 class MDP; | |
| 267 | |
| 268 DBRegistry(); | |
| 269 ~DBRegistry(); | |
| 270 | |
| 271 void RegisterDatabase(DBWrapperImpl* database); | |
| 272 void UnregisterDatabase(DBWrapperImpl* database); | |
| 273 | |
| 274 std::unique_ptr<MDP> mdp_; | |
| 275 | |
| 276 base::Lock databases_lock_; | |
| 277 base::LinkedList<DBWrapperImpl> databases_; | |
| 278 | |
| 279 DISALLOW_COPY_AND_ASSIGN(DBRegistry); | |
| 280 }; | |
| 281 | |
| 233 } // namespace leveldb_env | 282 } // namespace leveldb_env |
| 234 | 283 |
| 235 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ | 284 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ |
| OLD | NEW |