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

Side by Side Diff: content/common/host_discardable_shared_memory_manager.cc

Issue 1001873002: base: Rename discardable memory allocator interface and remove unnecessary class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove-dm-types
Patch Set: fix child process DiscardableMemoryImpl Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/host_discardable_shared_memory_manager.h" 5 #include "content/common/host_discardable_shared_memory_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/debug/crash_logging.h" 12 #include "base/debug/crash_logging.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/memory/discardable_memory.h"
14 #include "base/numerics/safe_math.h" 15 #include "base/numerics/safe_math.h"
15 #include "base/profiler/scoped_tracker.h" 16 #include "base/profiler/scoped_tracker.h"
16 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
17 #include "base/sys_info.h" 18 #include "base/sys_info.h"
18 #include "base/trace_event/trace_event.h" 19 #include "base/trace_event/trace_event.h"
19 20
20 namespace content { 21 namespace content {
21 namespace { 22 namespace {
22 23
23 class DiscardableMemoryShmemChunkImpl 24 class DiscardableMemoryImpl : public base::DiscardableMemory {
24 : public base::DiscardableMemoryShmemChunk {
25 public: 25 public:
26 DiscardableMemoryShmemChunkImpl( 26 DiscardableMemoryImpl(scoped_ptr<base::DiscardableSharedMemory> shared_memory,
27 scoped_ptr<base::DiscardableSharedMemory> shared_memory, 27 const base::Closure& deleted_callback)
28 const base::Closure& deleted_callback)
29 : shared_memory_(shared_memory.Pass()), 28 : shared_memory_(shared_memory.Pass()),
30 deleted_callback_(deleted_callback), 29 deleted_callback_(deleted_callback),
31 is_locked_(true) {} 30 is_locked_(true) {}
32 ~DiscardableMemoryShmemChunkImpl() override { 31
32 ~DiscardableMemoryImpl() override {
33 if (is_locked_) 33 if (is_locked_)
34 shared_memory_->Unlock(0, 0); 34 shared_memory_->Unlock(0, 0);
35 35
36 deleted_callback_.Run(); 36 deleted_callback_.Run();
37 } 37 }
38 38
39 // Overridden from base::DiscardableMemoryShmemChunk: 39 // Overridden from base::DiscardableMemory:
40 bool Lock() override { 40 bool Lock() override {
41 DCHECK(!is_locked_); 41 DCHECK(!is_locked_);
42 42
43 if (shared_memory_->Lock(0, 0) != base::DiscardableSharedMemory::SUCCESS) 43 if (shared_memory_->Lock(0, 0) != base::DiscardableSharedMemory::SUCCESS)
44 return false; 44 return false;
45 45
46 is_locked_ = true; 46 is_locked_ = true;
47 return true; 47 return true;
48 } 48 }
49 void Unlock() override { 49 void Unlock() override {
50 DCHECK(is_locked_); 50 DCHECK(is_locked_);
51 51
52 shared_memory_->Unlock(0, 0); 52 shared_memory_->Unlock(0, 0);
53 is_locked_ = false; 53 is_locked_ = false;
54 } 54 }
55 void* Memory() const override { 55 void* Memory() const override {
56 DCHECK(is_locked_); 56 DCHECK(is_locked_);
57 return shared_memory_->memory(); 57 return shared_memory_->memory();
58 } 58 }
59 59
60 private: 60 private:
61 scoped_ptr<base::DiscardableSharedMemory> shared_memory_; 61 scoped_ptr<base::DiscardableSharedMemory> shared_memory_;
62 const base::Closure deleted_callback_; 62 const base::Closure deleted_callback_;
63 bool is_locked_; 63 bool is_locked_;
64 64
65 DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryShmemChunkImpl); 65 DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryImpl);
66 }; 66 };
67 67
68 base::LazyInstance<HostDiscardableSharedMemoryManager> 68 base::LazyInstance<HostDiscardableSharedMemoryManager>
69 g_discardable_shared_memory_manager = LAZY_INSTANCE_INITIALIZER; 69 g_discardable_shared_memory_manager = LAZY_INSTANCE_INITIALIZER;
70 70
71 const int64_t kMaxDefaultMemoryLimit = 512 * 1024 * 1024; 71 const int64_t kMaxDefaultMemoryLimit = 512 * 1024 * 1024;
72 72
73 const int kEnforceMemoryPolicyDelayMs = 1000; 73 const int kEnforceMemoryPolicyDelayMs = 1000;
74 74
75 // Global atomic to generate unique discardable shared memory IDs. 75 // Global atomic to generate unique discardable shared memory IDs.
(...skipping 24 matching lines...) Expand all
100 } 100 }
101 101
102 HostDiscardableSharedMemoryManager::~HostDiscardableSharedMemoryManager() { 102 HostDiscardableSharedMemoryManager::~HostDiscardableSharedMemoryManager() {
103 } 103 }
104 104
105 HostDiscardableSharedMemoryManager* 105 HostDiscardableSharedMemoryManager*
106 HostDiscardableSharedMemoryManager::current() { 106 HostDiscardableSharedMemoryManager::current() {
107 return g_discardable_shared_memory_manager.Pointer(); 107 return g_discardable_shared_memory_manager.Pointer();
108 } 108 }
109 109
110 scoped_ptr<base::DiscardableMemoryShmemChunk> 110 scoped_ptr<base::DiscardableMemory>
111 HostDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( 111 HostDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory(
112 size_t size) { 112 size_t size) {
113 DiscardableSharedMemoryId new_id = 113 DiscardableSharedMemoryId new_id =
114 g_next_discardable_shared_memory_id.GetNext(); 114 g_next_discardable_shared_memory_id.GetNext();
115 base::ProcessHandle current_process_handle = base::GetCurrentProcessHandle(); 115 base::ProcessHandle current_process_handle = base::GetCurrentProcessHandle();
116 116
117 // Note: Use DiscardableSharedMemoryHeap for in-process allocation 117 // Note: Use DiscardableSharedMemoryHeap for in-process allocation
118 // of discardable memory if the cost of each allocation is too high. 118 // of discardable memory if the cost of each allocation is too high.
119 base::SharedMemoryHandle handle; 119 base::SharedMemoryHandle handle;
120 AllocateLockedDiscardableSharedMemory(current_process_handle, size, new_id, 120 AllocateLockedDiscardableSharedMemory(current_process_handle, size, new_id,
121 &handle); 121 &handle);
122 CHECK(base::SharedMemory::IsHandleValid(handle)); 122 CHECK(base::SharedMemory::IsHandleValid(handle));
123 scoped_ptr<base::DiscardableSharedMemory> memory( 123 scoped_ptr<base::DiscardableSharedMemory> memory(
124 new base::DiscardableSharedMemory(handle)); 124 new base::DiscardableSharedMemory(handle));
125 CHECK(memory->Map(size)); 125 CHECK(memory->Map(size));
126 return make_scoped_ptr(new DiscardableMemoryShmemChunkImpl( 126 return make_scoped_ptr(new DiscardableMemoryImpl(
127 memory.Pass(), 127 memory.Pass(),
128 base::Bind( 128 base::Bind(
129 &HostDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory, 129 &HostDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory,
130 base::Unretained(this), new_id, current_process_handle))); 130 base::Unretained(this), new_id, current_process_handle)));
131 } 131 }
132 132
133 void HostDiscardableSharedMemoryManager:: 133 void HostDiscardableSharedMemoryManager::
134 AllocateLockedDiscardableSharedMemoryForChild( 134 AllocateLockedDiscardableSharedMemoryForChild(
135 base::ProcessHandle process_handle, 135 base::ProcessHandle process_handle,
136 size_t size, 136 size_t size,
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 418
419 enforce_memory_policy_pending_ = true; 419 enforce_memory_policy_pending_ = true;
420 base::MessageLoop::current()->PostDelayedTask( 420 base::MessageLoop::current()->PostDelayedTask(
421 FROM_HERE, 421 FROM_HERE,
422 base::Bind(&HostDiscardableSharedMemoryManager::EnforceMemoryPolicy, 422 base::Bind(&HostDiscardableSharedMemoryManager::EnforceMemoryPolicy,
423 weak_ptr_factory_.GetWeakPtr()), 423 weak_ptr_factory_.GetWeakPtr()),
424 base::TimeDelta::FromMilliseconds(kEnforceMemoryPolicyDelayMs)); 424 base::TimeDelta::FromMilliseconds(kEnforceMemoryPolicyDelayMs));
425 } 425 }
426 426
427 } // namespace content 427 } // namespace content
OLDNEW
« no previous file with comments | « content/common/host_discardable_shared_memory_manager.h ('k') | content/renderer/render_thread_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698