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..a93537968fab07a5487d8d966c5ad059ece63a38 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 LevelDBIteratorPoolController; |
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 PurgeMemory() override; |
pwnall
2017/03/24 09:16:03
I saw the earlier comments regarding these two nam
dmurph
2017/03/24 23:33:39
Done.
|
+ bool IsEvicted() const override; |
protected: |
- explicit LevelDBIteratorImpl(std::unique_ptr<leveldb::Iterator> iterator); |
+ explicit LevelDBIteratorImpl(std::unique_ptr<leveldb::Iterator> iterator, |
+ LevelDBIteratorPoolController* pool_controller, |
+ const leveldb::Snapshot* snapshot); |
private: |
+ enum class IteratorState { ACTIVE, EVICTED_AND_VALID, EVICTED_AND_INVALID }; |
+ |
void CheckStatus(); |
+ void RecordUsage(); |
+ void RestoreDBIteratorIfEvicted(); |
+ |
friend class IndexedDBClassFactory; |
friend class MockBrowserTestIndexedDBClassFactory; |
std::unique_ptr<leveldb::Iterator> iterator_; |
+ // Variables to facilitate memory purging. |
+ LevelDBIteratorPoolController* pool_controller_; |
+ IteratorState iterator_state_ = IteratorState::ACTIVE; |
+ std::string key_before_eviction_; |
+ const leveldb::Snapshot* snapshot_; |
+ |
DISALLOW_COPY_AND_ASSIGN(LevelDBIteratorImpl); |
}; |