cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=8c094d1b2d1894aa003d975858f464ddea3dc691

commit 8c094d1b2d1894aa003d975858f464ddea3dc691
Author: Cedric Bail <cedric.b...@free.fr>
Date:   Sun Jan 5 22:44:50 2014 +0900

    evas: let's use HUGETLB when it makes sense.
---
 src/lib/evas/common/evas_image_main.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/lib/evas/common/evas_image_main.c 
b/src/lib/evas/common/evas_image_main.c
index eed7dec..4a680d9 100644
--- a/src/lib/evas/common/evas_image_main.c
+++ b/src/lib/evas/common/evas_image_main.c
@@ -113,6 +113,7 @@ static inline size_t
 _evas_common_rgba_image_surface_size(unsigned int w, unsigned int h, Eina_Bool 
alpha_only)
 {
 #define PAGE_SIZE (4 * 1024)
+#define HUGE_PAGE_SIZE (2 * 1024 * 1024)
 #if defined (HAVE_SYS_MMAN_H) && (!defined (_WIN32))
 # define ALIGN_TO_PAGE(Siz) (((Siz / PAGE_SIZE) + (Siz % PAGE_SIZE ? 1 : 0)) * 
PAGE_SIZE)
 #else
@@ -136,7 +137,7 @@ static void *
 _evas_common_rgba_image_surface_mmap(unsigned int w, unsigned int h, Eina_Bool 
alpha_only)
 {
    size_t siz;
-   void *r;
+   void *r = MAP_FAILED;
 
    siz = _evas_common_rgba_image_surface_size(w, h, alpha_only);
 
@@ -154,7 +155,8 @@ _evas_common_rgba_image_surface_mmap(unsigned int w, 
unsigned int h, Eina_Bool a
 # endif
 #endif
 
-   r = mmap(NULL, siz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | 
MAP_HUGETLB, -1, 0);
+   if (siz > ((HUGE_PAGE_SIZE * 75) / 100))
+     r = mmap(NULL, siz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | 
MAP_HUGETLB, -1, 0);
    if (r == MAP_FAILED)
      r = mmap(NULL, siz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 
-1, 0);
    if (r == MAP_FAILED)

-- 


Reply via email to