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

Unified Diff: content/browser/indexed_db/leveldb/leveldb_iterator_impl.h

Issue 2760163002: [IndexedDB] Pool and evict leveldb iterators, to save memory (Closed)
Patch Set: comments Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
diff --git a/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h b/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
index 22ca5d145cc8863ef1aa4faa9710ed05e278bddb..5ebfdd3166318be1530607c178f72f30606636a0 100644
--- a/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
+++ b/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
@@ -6,13 +6,19 @@
#define CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_ITERATOR_IMPL_H_
#include <memory>
+#include <string>
#include "base/macros.h"
#include "content/browser/indexed_db/leveldb/leveldb_iterator.h"
#include "content/common/content_export.h"
#include "third_party/leveldatabase/src/include/leveldb/iterator.h"
+namespace leveldb {
+class Snapshot;
+}
+
namespace content {
+class LevelDBDatabase;
class CONTENT_EXPORT LevelDBIteratorImpl : public content::LevelDBIterator {
public:
@@ -24,18 +30,33 @@ class CONTENT_EXPORT LevelDBIteratorImpl : public content::LevelDBIterator {
leveldb::Status Prev() override;
base::StringPiece Key() const override;
base::StringPiece Value() const override;
+ void Detach() override;
+ bool IsDetached() const override;
protected:
- explicit LevelDBIteratorImpl(std::unique_ptr<leveldb::Iterator> iterator);
+ explicit LevelDBIteratorImpl(std::unique_ptr<leveldb::Iterator> iterator,
+ LevelDBDatabase* db,
+ const leveldb::Snapshot* snapshot);
private:
- void CheckStatus();
+ enum class IteratorState { ACTIVE, EVICTED_AND_VALID, EVICTED_AND_INVALID };
+
+ leveldb::Status CheckStatus();
+
+ // Notifies the database of iterator usage and recreates iterator if needed.
+ void WillUseDBIterator();
friend class IndexedDBClassFactory;
friend class MockBrowserTestIndexedDBClassFactory;
std::unique_ptr<leveldb::Iterator> iterator_;
+ // State used to facilitate memory purging.
+ LevelDBDatabase* db_;
+ IteratorState iterator_state_ = IteratorState::ACTIVE;
+ std::string key_before_eviction_;
+ const leveldb::Snapshot* snapshot_;
+
DISALLOW_COPY_AND_ASSIGN(LevelDBIteratorImpl);
};
« no previous file with comments | « content/browser/indexed_db/leveldb/leveldb_iterator.cc ('k') | content/browser/indexed_db/leveldb/leveldb_iterator_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698