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; |