Home | History | Annotate | Download | only in process
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef BASE_PROCESS_MEMORY_H_
      6 #define BASE_PROCESS_MEMORY_H_
      7 
      8 #include "base/base_export.h"
      9 #include "base/basictypes.h"
     10 #include "base/process/process_handle.h"
     11 #include "build/build_config.h"
     12 
     13 #if defined(OS_WIN)
     14 #include <windows.h>
     15 #endif
     16 
     17 namespace base {
     18 
     19 // Enables low fragmentation heap (LFH) for every heaps of this process. This
     20 // won't have any effect on heaps created after this function call. It will not
     21 // modify data allocated in the heaps before calling this function. So it is
     22 // better to call this function early in initialization and again before
     23 // entering the main loop.
     24 // Note: Returns true on Windows 2000 without doing anything.
     25 BASE_EXPORT bool EnableLowFragmentationHeap();
     26 
     27 // Enables 'terminate on heap corruption' flag. Helps protect against heap
     28 // overflow. Has no effect if the OS doesn't provide the necessary facility.
     29 BASE_EXPORT void EnableTerminationOnHeapCorruption();
     30 
     31 // Turns on process termination if memory runs out.
     32 BASE_EXPORT void EnableTerminationOnOutOfMemory();
     33 
     34 #if defined(OS_WIN)
     35 // Returns the module handle to which an address belongs. The reference count
     36 // of the module is not incremented.
     37 BASE_EXPORT HMODULE GetModuleFromAddress(void* address);
     38 #endif
     39 
     40 #if defined(OS_LINUX) || defined(OS_ANDROID)
     41 BASE_EXPORT extern size_t g_oom_size;
     42 
     43 // The maximum allowed value for the OOM score.
     44 const int kMaxOomScore = 1000;
     45 
     46 // This adjusts /proc/<pid>/oom_score_adj so the Linux OOM killer will
     47 // prefer to kill certain process types over others. The range for the
     48 // adjustment is [-1000, 1000], with [0, 1000] being user accessible.
     49 // If the Linux system doesn't support the newer oom_score_adj range
     50 // of [0, 1000], then we revert to using the older oom_adj, and
     51 // translate the given value into [0, 15].  Some aliasing of values
     52 // may occur in that case, of course.
     53 BASE_EXPORT bool AdjustOOMScore(ProcessId process, int score);
     54 #endif
     55 
     56 #if defined(OS_MACOSX)
     57 // Very large images or svg canvases can cause huge mallocs.  Skia
     58 // does tricks on tcmalloc-based systems to allow malloc to fail with
     59 // a NULL rather than hit the oom crasher.  This replicates that for
     60 // OSX.
     61 //
     62 // IF YOU USE THIS WITHOUT CONSULTING YOUR FRIENDLY OSX DEVELOPER,
     63 // YOUR CODE IS LIKELY TO BE REVERTED.  THANK YOU.
     64 BASE_EXPORT void* UncheckedMalloc(size_t size);
     65 #endif  // defined(OS_MACOSX)
     66 
     67 }  // namespace base
     68 
     69 #endif  // BASE_PROCESS_MEMORY_H_
     70