Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Side by Side Diff: third_party/leveldatabase/env_chromium.h

Issue 2855953002: leveldb: Add DBTracker for exposing databases to Chrome's memory-infra. (Closed)
Patch Set: OpenDB and friends Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/leveldatabase/env_chromium.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 opened database
pwnall 2017/06/28 22:52:55 nit: the opened database is alive
253 // is alive (i.e. its instance is not destroyed) the database is exposed
254 // to 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*)>;
260
261 // Calls |visitor| for each live database. Database is live from the point it
pwnall 2017/06/28 22:52:55 Nit: The database is live
262 // was returned from OpenDatabase() and up until its instance is destroyed.
263 // The databases may be visited in an arbitrary order.
264 // This function takes a lock, preventing any database from being opened or
265 // destroyed (but doesn't lock the databases themselves).
266 void VisitDatabases(const DatabaseVisitor& visitor);
267
268 private:
269 class TrackedDBImpl;
270 class MemoryDumpProvider;
271
272 DBTracker();
273 ~DBTracker();
274
275 void DatabaseOpened(TrackedDBImpl* database);
276 void DatabaseDestroyed(TrackedDBImpl* database);
277
278 std::unique_ptr<MemoryDumpProvider> mdp_;
279
280 base::Lock databases_lock_;
281 base::LinkedList<TrackedDBImpl> databases_;
282
283 DISALLOW_COPY_AND_ASSIGN(DBTracker);
284 };
285
286 // Opens a database and exposes it to Chrome's tracing (see DBTracker for
287 // details). Note that |dbptr| is touched only when function succeeds.
288 leveldb::Status OpenDB(const leveldb::Options& options,
289 const std::string& name,
290 std::unique_ptr<leveldb::DB>* dbptr);
291
233 } // namespace leveldb_env 292 } // namespace leveldb_env
234 293
235 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_ 294 #endif // THIRD_PARTY_LEVELDATABASE_ENV_CHROMIUM_H_
OLDNEW
« no previous file with comments | « no previous file | third_party/leveldatabase/env_chromium.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698