// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_MEMORY_DISCARDABLE_SHARED_MEMORY_H_ #define BASE_MEMORY_DISCARDABLE_SHARED_MEMORY_H_ #include <stddef.h> #include "base/base_export.h" #include "base/containers/span.h" #include "base/dcheck_is_on.h" #include "base/memory/shared_memory_mapping.h" #include "base/memory/unsafe_shared_memory_region.h" #include "base/threading/thread_collision_warner.h" #include "base/time/time.h" #include "build/build_config.h" #if DCHECK_IS_ON() #include <set> #endif // Linux (including Android) support the MADV_REMOVE argument with madvise() // which has the behavior of reliably causing zero-fill-on-demand pages to // be returned after a call. Here we define // DISCARDABLE_SHARED_MEMORY_ZERO_FILL_ON_DEMAND_PAGES_AFTER_PURGE on Linux // and Android to indicate that this type of behavior can be expected on // those platforms. Note that madvise() will still be used on other POSIX // platforms but doesn't provide the zero-fill-on-demand pages guarantee. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) #define DISCARDABLE_SHARED_MEMORY_ZERO_FILL_ON_DEMAND_PAGES_AFTER_PURGE #endif namespace base { namespace trace_event { class MemoryAllocatorDump; class ProcessMemoryDump; } // namespace trace_event // Platform abstraction for discardable shared memory. // // This class is not thread-safe. Clients are responsible for synchronizing // access to an instance of this class. class BASE_EXPORT DiscardableSharedMemory { … }; } // namespace base #endif // BASE_MEMORY_DISCARDABLE_SHARED_MEMORY_H_