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 // Tracks databases open via OpenDatabase() method and exposes them to | |
| 239 // memory-infra. The class is thread safe. | |
| 240 class DBTracker { | |
| 241 public: | |
| 242 // DBTracker singleton instance. | |
| 243 static DBTracker* GetInstance(); | |
| 244 | |
| 245 // Provides extra information about a tracked database. | |
| 246 class TrackedDB : public leveldb::DB { | |
| 247 public: | |
| 248 // Name that OpenDatabase() was called with. | |
| 249 virtual const std::string& name() const = 0; | |
| 250 }; | |
| 251 | |
| 252 // Opens a database and starts tracking it. As long as the opened database | |
| 253 // is alive (i.e. its instance is not destroyed) the database is exposed to | |
| 254 // memory-infra and is enumerated by VisitDatabases() method. | |
| 255 leveldb::Status OpenDatabase(const leveldb::Options& options, | |
| 256 const std::string& name, | |
| 257 TrackedDB** dbptr); | |
| 258 | |
| 259 using DatabaseVisitor = std::function<void(TrackedDB*)>; | |
|
pwnall
2017/06/30 22:21:09
Gah, I just realized std::function is banned by th
| |
| 260 | |
| 261 // Calls |visitor| for each live database. The database is live from the | |
| 262 // point it was returned from OpenDatabase() and up until its instance is | |
| 263 // destroyed. | |
| 264 // The databases may be visited in an arbitrary order. | |
| 265 // This function takes a lock, preventing any database from being opened or | |
| 266 // destroyed (but doesn't lock the databases themselves). | |
| 267 void VisitDatabases(const DatabaseVisitor& visitor); | |
| 268 | |
| 269 private: | |
| 270 class TrackedDBImpl; | |
| 271 class MemoryDumpProvider; | |
| 272 | |
| 273 DBTracker(); | |
| 274 ~DBTracker(); | |
| 275 | |
| 276 void DatabaseOpened(TrackedDBImpl* database); | |
| 277 void DatabaseDestroyed(TrackedDBImpl* database); | |
| 278 | |
| 279 std::unique_ptr<MemoryDumpProvider> mdp_; | |
| 280 | |
| 281 base::Lock databases_lock_; | |
| 282 base::LinkedList<TrackedDBImpl> databases_; | |
| 283 | |
| 284 DISALLOW_COPY_AND_ASSIGN(DBTracker); | |
| 285 }; | |
| 286 | |
| 287 // Opens a database and exposes it to Chrome's tracing (see DBTracker for | |
| 288 // details). Note that |dbptr| is touched only when function succeeds. | |
| 289 leveldb::Status OpenDB(const leveldb::Options& options, | |
| 290 const std::string& name, | |
| 291 std::unique_ptr<leveldb::DB>* dbptr); | |
| 292 | |
| 233 } // namespace leveldb_env | 293 } // namespace leveldb_env |
| 234 | 294 |
| 235 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ | 295 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ |
| OLD | NEW |