Index: content/renderer/render_process_discardable_memory_provider.h |
diff --git a/content/renderer/render_process_discardable_memory_provider.h b/content/renderer/render_process_discardable_memory_provider.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ef42c69bc21dd6ac492b2c8c193d33eabeeddb28 |
--- /dev/null |
+++ b/content/renderer/render_process_discardable_memory_provider.h |
@@ -0,0 +1,67 @@ |
+// Copyright (c) 2012 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 "base/hash_tables.h" |
+#include "base/memory/discardable_memory.h" |
+#include "content/common/content_export.h" |
+#include "content/renderer/render_process_visibility_manager.h" |
+ |
+#if defined(COMPILER_GCC) |
+namespace base { class DiscardableMemory; } |
+ |
+namespace BASE_HASH_NAMESPACE { |
+template <> |
+struct hash<const base::DiscardableMemory*> { |
+ size_t operator()(const base::DiscardableMemory* ptr) const { |
+ return hash<size_t>()(reinterpret_cast<size_t>(ptr)); |
+ } |
+}; |
+} // namespace BASE_HASH_NAMESPACE |
+#endif // COMPILER |
+ |
+namespace content { |
+ |
+class CONTENT_EXPORT RenderProcessDiscardableMemoryProvider |
+ : public base::DiscardableMemoryProvider, |
+ public RenderProcessVisibilityObserver { |
+ public: |
+ RenderProcessDiscardableMemoryProvider(); |
+ virtual ~RenderProcessDiscardableMemoryProvider(); |
+ |
+ private: |
+ struct AllocatedMemory { |
+ void* memory; |
+ bool locked; |
+ size_t size; |
+ }; |
+ |
+ // RenderProcessVisibilityObserver implementation. |
+ virtual void RenderProcessVisibilityChanged(bool visible) OVERRIDE; |
+ |
+ // base::DiscardableMemoryProvider implementation. |
+ virtual bool Register( |
+ const base::DiscardableMemory* discardable, size_t size) OVERRIDE; |
+ virtual void Unregister(const base::DiscardableMemory* discardable) OVERRIDE; |
+ virtual base::LockDiscardableMemoryStatus Lock( |
+ const base::DiscardableMemory* discardable) OVERRIDE; |
+ virtual void Unlock(const base::DiscardableMemory* discardable) OVERRIDE; |
+ virtual void* Memory( |
+ const base::DiscardableMemory* discardable) const OVERRIDE; |
+ virtual bool PurgeForTestingSupported() const OVERRIDE; |
+ virtual void PurgeForTesting() OVERRIDE; |
+ |
+ void Purge(); |
+ void EnforcePolicy(); |
+ |
+ typedef |
+ base::hash_map<const base::DiscardableMemory*, AllocatedMemory> |
+ AllocationMap; |
+ |
+ AllocationMap allocations_; |
+ bool visible_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenderProcessDiscardableMemoryProvider); |
+}; |
+ |
+} // namespace content |