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

Unified Diff: base/memory/discardable_shared_memory.cc

Issue 1018743003: Re-land: base: Replace PurgeAndTruncate with Shrink function. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: avoid using ftruncate on android 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 side-by-side diff with in-line comments
Download patch
Index: base/memory/discardable_shared_memory.cc
diff --git a/base/memory/discardable_shared_memory.cc b/base/memory/discardable_shared_memory.cc
index 49e93cdaf6f22a20e0a76fd0128b5aa8cdd743dd..2f952bd847ff2cb0b11e4eb93eb95363d7a15caf 100644
--- a/base/memory/discardable_shared_memory.cc
+++ b/base/memory/discardable_shared_memory.cc
@@ -116,6 +116,16 @@ DiscardableSharedMemory::DiscardableSharedMemory(
DiscardableSharedMemory::~DiscardableSharedMemory() {
}
+// static
+bool DiscardableSharedMemory::IsShrinkingSupported() {
+#if defined(OS_POSIX) && !defined(OS_ANDROID)
+ // ftruncate() can be used on to shrink memory segments.
+ return true;
+#else
+ return false;
+#endif
+}
+
bool DiscardableSharedMemory::CreateAndMap(size_t size) {
CheckedNumeric<size_t> checked_size = size;
checked_size += AlignToPageSize(sizeof(SharedState));
@@ -325,20 +335,21 @@ bool DiscardableSharedMemory::Purge(Time current_time) {
return true;
}
-bool DiscardableSharedMemory::PurgeAndTruncate(Time current_time) {
- if (!Purge(current_time))
- return false;
-
-#if defined(OS_POSIX)
- // Truncate shared memory to size of SharedState.
+void DiscardableSharedMemory::Shrink() {
+ DCHECK(IsShrinkingSupported());
+#if defined(OS_POSIX) && !defined(OS_ANDROID)
SharedMemoryHandle handle = shared_memory_.handle();
if (SharedMemory::IsHandleValid(handle)) {
- if (HANDLE_EINTR(ftruncate(handle.fd, sizeof(SharedState))) != 0)
+ // Truncate shared memory to size of SharedState.
+ if (HANDLE_EINTR(
+ ftruncate(handle.fd, AlignToPageSize(sizeof(SharedState)))) != 0) {
DPLOG(ERROR) << "ftruncate() failed";
+ return;
+ }
+
+ mapped_size_ = 0;
}
#endif
-
- return true;
}
bool DiscardableSharedMemory::IsMemoryResident() const {

Powered by Google App Engine
This is Rietveld 408576698