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

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

Issue 2760163002: [IndexedDB] Pool and evict leveldb iterators, to save memory (Closed)
Patch Set: compile fixed 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_transaction.h
diff --git a/content/browser/indexed_db/leveldb/leveldb_transaction.h b/content/browser/indexed_db/leveldb/leveldb_transaction.h
index a701a94748a6b02c10dcfdbd4f947084fa0f2a8f..444c4545931c31b9d182114a42ba9457c01096bf 100644
--- a/content/browser/indexed_db/leveldb/leveldb_transaction.h
+++ b/content/browser/indexed_db/leveldb/leveldb_transaction.h
@@ -21,6 +21,7 @@
namespace content {
class LevelDBTransactionRangeTest;
+class LevelDBTransactionTest;
class LevelDBWriteBatch;
class CONTENT_EXPORT LevelDBTransaction
@@ -50,6 +51,7 @@ class CONTENT_EXPORT LevelDBTransaction
private:
friend class base::RefCounted<LevelDBTransaction>;
friend class content::LevelDBTransactionRangeTest;
+ friend class content::LevelDBTransactionTest;
FRIEND_TEST_ALL_PREFIXES(LevelDBTransactionTest, GetAndPut);
FRIEND_TEST_ALL_PREFIXES(LevelDBTransactionTest, Commit);
FRIEND_TEST_ALL_PREFIXES(LevelDBTransactionTest, Iterator);
@@ -93,6 +95,7 @@ class CONTENT_EXPORT LevelDBTransaction
leveldb::Status Prev() override;
base::StringPiece Key() const override;
base::StringPiece Value() const override;
+
bool IsDeleted() const;
// Mark the current record as deleted.
@@ -123,6 +126,9 @@ class CONTENT_EXPORT LevelDBTransaction
leveldb::Status Prev() override;
base::StringPiece Key() const override;
base::StringPiece Value() const override;
+ void PurgeMemory() override;
+ bool IsMemoryPurged() const override;
jsbell 2017/03/22 23:55:32 I think I'd keep this called 'IsEvicted' to be con
dmurph 2017/03/23 20:56:48 Done.
+
void DataChanged();
// Mark the current record as deleted. If an existing record
@@ -133,6 +139,12 @@ class CONTENT_EXPORT LevelDBTransaction
private:
enum Direction { FORWARD, REVERSE };
+ enum class DBIteratorState {
+ ACTIVE,
+ EVICTED_AND_VALID,
+ EVICTED_AND_INVALID
+ };
+
explicit TransactionIterator(scoped_refptr<LevelDBTransaction> transaction);
void HandleConflictsAndDeletes();
void SetCurrentIteratorToSmallestKey();
@@ -141,12 +153,17 @@ class CONTENT_EXPORT LevelDBTransaction
bool DataIteratorIsLower() const;
bool DataIteratorIsHigher() const;
+ void LoadDBIteratorIfEvicted();
jsbell 2017/03/22 23:55:32 Maybe 'RestoreDBIteratorIfEvicted' ?
dmurph 2017/03/23 20:56:48 Done.
+
scoped_refptr<LevelDBTransaction> transaction_;
const LevelDBComparator* comparator_;
mutable std::unique_ptr<DataIterator> data_iterator_;
std::unique_ptr<LevelDBIterator> db_iterator_;
+ DBIteratorState db_iterator_state_ = DBIteratorState::ACTIVE;
LevelDBIterator* current_ = nullptr;
+ std::string db_key_before_eviction_;
+
Direction direction_ = FORWARD;
mutable bool data_changed_ = false;

Powered by Google App Engine
This is Rietveld 408576698