Index: mojo/services/html_viewer/discardable_memory_allocator.cc |
diff --git a/mojo/services/html_viewer/discardable_memory_allocator.cc b/mojo/services/html_viewer/discardable_memory_allocator.cc |
deleted file mode 100644 |
index a75ac63b1dc3844811942aa5f60540d64aeb0d42..0000000000000000000000000000000000000000 |
--- a/mojo/services/html_viewer/discardable_memory_allocator.cc |
+++ /dev/null |
@@ -1,151 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "mojo/services/html_viewer/discardable_memory_allocator.h" |
- |
-#include "base/memory/discardable_memory.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/stl_util.h" |
- |
-namespace html_viewer { |
- |
-// Represents an actual memory chunk. This is an object owned by |
-// DiscardableMemoryAllocator. DiscardableMemoryChunkImpl are passed to the |
-// rest of the program, and access this memory through a weak ptr. |
-class DiscardableMemoryAllocator::OwnedMemoryChunk { |
- public: |
- OwnedMemoryChunk(size_t size, DiscardableMemoryAllocator* allocator) |
- : is_locked_(true), |
- size_(size), |
- data_(new uint8_t[size]), |
- allocator_(allocator), |
- weak_factory_(this) {} |
- ~OwnedMemoryChunk() {} |
- |
- void Lock() { |
- DCHECK(!is_locked_); |
- is_locked_ = true; |
- allocator_->NotifyLocked(unlocked_position_); |
- } |
- |
- void Unlock() { |
- DCHECK(is_locked_); |
- is_locked_ = false; |
- unlocked_position_ = allocator_->NotifyUnlocked(this); |
- } |
- |
- bool is_locked() const { return is_locked_; } |
- size_t size() const { return size_; } |
- void* data() const { |
- DCHECK(is_locked_); |
- return data_.get(); |
- } |
- |
- base::WeakPtr<OwnedMemoryChunk> GetWeakPtr() { |
- return weak_factory_.GetWeakPtr(); |
- } |
- |
- private: |
- bool is_locked_; |
- size_t size_; |
- scoped_ptr<uint8_t[]> data_; |
- DiscardableMemoryAllocator* allocator_; |
- |
- std::list<OwnedMemoryChunk*>::iterator unlocked_position_; |
- |
- base::WeakPtrFactory<OwnedMemoryChunk> weak_factory_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(OwnedMemoryChunk); |
-}; |
- |
-namespace { |
- |
-// Interface to the rest of the program. These objects are owned outside of the |
-// allocator and wrap a weak ptr. |
-class DiscardableMemoryChunkImpl : public base::DiscardableMemory { |
- public: |
- explicit DiscardableMemoryChunkImpl( |
- base::WeakPtr<DiscardableMemoryAllocator::OwnedMemoryChunk> chunk) |
- : memory_chunk_(chunk) {} |
- ~DiscardableMemoryChunkImpl() override { |
- // Either the memory chunk is invalid (because the backing has gone away), |
- // or the memory chunk is unlocked (because leaving the chunk locked once |
- // we deallocate means the chunk will never get cleaned up). |
- DCHECK(!memory_chunk_ || !memory_chunk_->is_locked()); |
- } |
- |
- // Overridden from DiscardableMemoryChunk: |
- bool Lock() override { |
- if (!memory_chunk_) |
- return false; |
- |
- memory_chunk_->Lock(); |
- return true; |
- } |
- |
- void Unlock() override { |
- DCHECK(memory_chunk_); |
- memory_chunk_->Unlock(); |
- } |
- |
- void* data() const override { |
- if (memory_chunk_) |
- return memory_chunk_->data(); |
- return nullptr; |
- } |
- |
- private: |
- base::WeakPtr<DiscardableMemoryAllocator::OwnedMemoryChunk> memory_chunk_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(DiscardableMemoryChunkImpl); |
-}; |
- |
-} // namespace |
- |
-DiscardableMemoryAllocator::DiscardableMemoryAllocator( |
- size_t desired_max_memory) |
- : desired_max_memory_(desired_max_memory), |
- total_live_memory_(0u), |
- locked_chunks_(0) { |
-} |
- |
-DiscardableMemoryAllocator::~DiscardableMemoryAllocator() { |
- DCHECK_EQ(0, locked_chunks_); |
- STLDeleteElements(&live_unlocked_chunks_); |
-} |
- |
-scoped_ptr<base::DiscardableMemory> |
-DiscardableMemoryAllocator::AllocateLockedDiscardableMemory(size_t size) { |
- OwnedMemoryChunk* chunk = new OwnedMemoryChunk(size, this); |
- total_live_memory_ += size; |
- locked_chunks_++; |
- |
- // Go through the list of unlocked live chunks starting from the least |
- // recently used, freeing as many as we can until we get our size under the |
- // desired maximum. |
- auto it = live_unlocked_chunks_.begin(); |
- while (total_live_memory_ > desired_max_memory_ && |
- it != live_unlocked_chunks_.end()) { |
- total_live_memory_ -= (*it)->size(); |
- delete *it; |
- it = live_unlocked_chunks_.erase(it); |
- } |
- |
- return make_scoped_ptr(new DiscardableMemoryChunkImpl(chunk->GetWeakPtr())); |
-} |
- |
-std::list<DiscardableMemoryAllocator::OwnedMemoryChunk*>::iterator |
-DiscardableMemoryAllocator::NotifyUnlocked( |
- DiscardableMemoryAllocator::OwnedMemoryChunk* chunk) { |
- locked_chunks_--; |
- return live_unlocked_chunks_.insert(live_unlocked_chunks_.end(), chunk); |
-} |
- |
-void DiscardableMemoryAllocator::NotifyLocked( |
- std::list<OwnedMemoryChunk*>::iterator it) { |
- locked_chunks_++; |
- live_unlocked_chunks_.erase(it); |
-} |
- |
-} // namespace html_viewer |