| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <windows.h> | 5 #include <windows.h> |
| 6 #include <objidl.h> | 6 #include <objidl.h> |
| 7 #include <mlang.h> | 7 #include <mlang.h> |
| 8 | 8 |
| 9 #include "chrome/renderer/render_process.h" | 9 #include "chrome/renderer/render_process.h" |
| 10 | 10 |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 void RenderProcess::GlobalCleanup() { | 101 void RenderProcess::GlobalCleanup() { |
| 102 ChildProcess::GlobalCleanup(); | 102 ChildProcess::GlobalCleanup(); |
| 103 } | 103 } |
| 104 | 104 |
| 105 // static | 105 // static |
| 106 bool RenderProcess::ShouldLoadPluginsInProcess() { | 106 bool RenderProcess::ShouldLoadPluginsInProcess() { |
| 107 return load_plugins_in_process_; | 107 return load_plugins_in_process_; |
| 108 } | 108 } |
| 109 | 109 |
| 110 // static | 110 // static |
| 111 SharedMemory* RenderProcess::AllocSharedMemory(size_t size) { | 111 base::SharedMemory* RenderProcess::AllocSharedMemory(size_t size) { |
| 112 self()->clearer_factory_.RevokeAll(); | 112 self()->clearer_factory_.RevokeAll(); |
| 113 | 113 |
| 114 SharedMemory* mem = self()->GetSharedMemFromCache(size); | 114 base::SharedMemory* mem = self()->GetSharedMemFromCache(size); |
| 115 if (mem) | 115 if (mem) |
| 116 return mem; | 116 return mem; |
| 117 | 117 |
| 118 // Round-up size to allocation granularity | 118 // Round-up size to allocation granularity |
| 119 SYSTEM_INFO info; | 119 SYSTEM_INFO info; |
| 120 GetSystemInfo(&info); | 120 GetSystemInfo(&info); |
| 121 | 121 |
| 122 size = size / info.dwAllocationGranularity + 1; | 122 size = size / info.dwAllocationGranularity + 1; |
| 123 size = size * info.dwAllocationGranularity; | 123 size = size * info.dwAllocationGranularity; |
| 124 | 124 |
| 125 mem = new SharedMemory(); | 125 mem = new base::SharedMemory(); |
| 126 if (!mem) | 126 if (!mem) |
| 127 return NULL; | 127 return NULL; |
| 128 if (!mem->Create(L"", false, true, size)) { | 128 if (!mem->Create(L"", false, true, size)) { |
| 129 delete mem; | 129 delete mem; |
| 130 return NULL; | 130 return NULL; |
| 131 } | 131 } |
| 132 | 132 |
| 133 return mem; | 133 return mem; |
| 134 } | 134 } |
| 135 | 135 |
| 136 // static | 136 // static |
| 137 void RenderProcess::FreeSharedMemory(SharedMemory* mem) { | 137 void RenderProcess::FreeSharedMemory(base::SharedMemory* mem) { |
| 138 if (self()->PutSharedMemInCache(mem)) { | 138 if (self()->PutSharedMemInCache(mem)) { |
| 139 self()->ScheduleCacheClearer(); | 139 self()->ScheduleCacheClearer(); |
| 140 return; | 140 return; |
| 141 } | 141 } |
| 142 DeleteSharedMem(mem); | 142 DeleteSharedMem(mem); |
| 143 } | 143 } |
| 144 | 144 |
| 145 // static | 145 // static |
| 146 void RenderProcess::DeleteSharedMem(SharedMemory* mem) { | 146 void RenderProcess::DeleteSharedMem(base::SharedMemory* mem) { |
| 147 delete mem; | 147 delete mem; |
| 148 } | 148 } |
| 149 | 149 |
| 150 SharedMemory* RenderProcess::GetSharedMemFromCache(size_t size) { | 150 base::SharedMemory* RenderProcess::GetSharedMemFromCache(size_t size) { |
| 151 // look for a cached object that is suitable for the requested size. | 151 // look for a cached object that is suitable for the requested size. |
| 152 for (int i = 0; i < arraysize(shared_mem_cache_); ++i) { | 152 for (int i = 0; i < arraysize(shared_mem_cache_); ++i) { |
| 153 SharedMemory* mem = shared_mem_cache_[i]; | 153 base::SharedMemory* mem = shared_mem_cache_[i]; |
| 154 if (mem && mem->max_size() >= size) { | 154 if (mem && mem->max_size() >= size) { |
| 155 shared_mem_cache_[i] = NULL; | 155 shared_mem_cache_[i] = NULL; |
| 156 return mem; | 156 return mem; |
| 157 } | 157 } |
| 158 } | 158 } |
| 159 return NULL; | 159 return NULL; |
| 160 } | 160 } |
| 161 | 161 |
| 162 bool RenderProcess::PutSharedMemInCache(SharedMemory* mem) { | 162 bool RenderProcess::PutSharedMemInCache(base::SharedMemory* mem) { |
| 163 // simple algorithm: | 163 // simple algorithm: |
| 164 // - look for an empty slot to store mem, or | 164 // - look for an empty slot to store mem, or |
| 165 // - if full, then replace any existing cache entry that is smaller than the | 165 // - if full, then replace any existing cache entry that is smaller than the |
| 166 // given shared memory object. | 166 // given shared memory object. |
| 167 for (int i = 0; i < arraysize(shared_mem_cache_); ++i) { | 167 for (int i = 0; i < arraysize(shared_mem_cache_); ++i) { |
| 168 if (!shared_mem_cache_[i]) { | 168 if (!shared_mem_cache_[i]) { |
| 169 shared_mem_cache_[i] = mem; | 169 shared_mem_cache_[i] = mem; |
| 170 return true; | 170 return true; |
| 171 } | 171 } |
| 172 } | 172 } |
| 173 for (int i = 0; i < arraysize(shared_mem_cache_); ++i) { | 173 for (int i = 0; i < arraysize(shared_mem_cache_); ++i) { |
| 174 SharedMemory* cached_mem = shared_mem_cache_[i]; | 174 base::SharedMemory* cached_mem = shared_mem_cache_[i]; |
| 175 if (cached_mem->max_size() < mem->max_size()) { | 175 if (cached_mem->max_size() < mem->max_size()) { |
| 176 shared_mem_cache_[i] = mem; | 176 shared_mem_cache_[i] = mem; |
| 177 DeleteSharedMem(cached_mem); | 177 DeleteSharedMem(cached_mem); |
| 178 return true; | 178 return true; |
| 179 } | 179 } |
| 180 } | 180 } |
| 181 return false; | 181 return false; |
| 182 } | 182 } |
| 183 | 183 |
| 184 void RenderProcess::ClearSharedMemCache() { | 184 void RenderProcess::ClearSharedMemCache() { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 200 5000 /* 5 seconds */); | 200 5000 /* 5 seconds */); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void RenderProcess::Cleanup() { | 203 void RenderProcess::Cleanup() { |
| 204 #ifndef NDEBUG | 204 #ifndef NDEBUG |
| 205 // log important leaked objects | 205 // log important leaked objects |
| 206 webkit_glue::CheckForLeaks(); | 206 webkit_glue::CheckForLeaks(); |
| 207 #endif | 207 #endif |
| 208 } | 208 } |
| 209 | 209 |
| OLD | NEW |