Bug 1368932 - Add a testcase for a replace-malloc library that doesn't implement all functions. r=njn
authorMike Hommey <mh+mozilla@glandium.org>
Wed, 31 May 2017 15:04:32 +0900
changeset 361713 bc5283bd5f85f9de1c17a2d86c1a0a7eec48dce1
parent 361712 4bd3eb1b5f3761565871f226e80c4b158defdf48
child 361714 d2e141768c617d8e45c89d1f55e1f5659fefc5e3
push id31939
push usercbook@mozilla.com
push dateThu, 01 Jun 2017 11:49:28 +0000
treeherdermozilla-central@d96110d76619 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnjn
bugs1368932
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1368932 - Add a testcase for a replace-malloc library that doesn't implement all functions. r=njn
memory/replace/logalloc/LogAlloc.cpp
memory/replace/logalloc/logalloc.mozbuild
memory/replace/logalloc/minimal/moz.build
memory/replace/logalloc/moz.build
memory/replace/logalloc/replay/Makefile.in
memory/replace/logalloc/replay/expected_output_minimal.log
memory/replace/logalloc/replay/replay.log
--- a/memory/replace/logalloc/LogAlloc.cpp
+++ b/memory/replace/logalloc/LogAlloc.cpp
@@ -181,16 +181,17 @@ replace_malloc(size_t aSize)
   AutoLock lock(sLock);
   void* ptr = sFuncs->malloc(aSize);
   if (ptr) {
     FdPrintf(sFd, "%zu %zu malloc(%zu)=%p\n", GetPid(), GetTid(), aSize, ptr);
   }
   return ptr;
 }
 
+#ifndef LOGALLOC_MINIMAL
 int
 replace_posix_memalign(void** aPtr, size_t aAlignment, size_t aSize)
 {
   AutoLock lock(sLock);
   int ret = sFuncs->posix_memalign(aPtr, aAlignment, aSize);
   if (ret == 0) {
     FdPrintf(sFd, "%zu %zu posix_memalign(%zu,%zu)=%p\n", GetPid(), GetTid(),
              aAlignment, aSize, *aPtr);
@@ -204,16 +205,17 @@ replace_aligned_alloc(size_t aAlignment,
   AutoLock lock(sLock);
   void* ptr = sFuncs->aligned_alloc(aAlignment, aSize);
   if (ptr) {
     FdPrintf(sFd, "%zu %zu aligned_alloc(%zu,%zu)=%p\n", GetPid(), GetTid(),
              aAlignment, aSize, ptr);
   }
   return ptr;
 }
+#endif
 
 void*
 replace_calloc(size_t aNum, size_t aSize)
 {
   AutoLock lock(sLock);
   void* ptr = sFuncs->calloc(aNum, aSize);
   if (ptr) {
     FdPrintf(sFd, "%zu %zu calloc(%zu,%zu)=%p\n", GetPid(), GetTid(), aNum,
@@ -251,26 +253,28 @@ replace_memalign(size_t aAlignment, size
   void* ptr = sFuncs->memalign(aAlignment, aSize);
   if (ptr) {
     FdPrintf(sFd, "%zu %zu memalign(%zu,%zu)=%p\n", GetPid(), GetTid(),
              aAlignment, aSize, ptr);
   }
   return ptr;
 }
 
+#ifndef LOGALLOC_MINIMAL
 void*
 replace_valloc(size_t aSize)
 {
   AutoLock lock(sLock);
   void* ptr = sFuncs->valloc(aSize);
   if (ptr) {
     FdPrintf(sFd, "%zu %zu valloc(%zu)=%p\n", GetPid(), GetTid(), aSize, ptr);
   }
   return ptr;
 }
+#endif
 
 void
 replace_jemalloc_stats(jemalloc_stats_t* aStats)
 {
   AutoLock lock(sLock);
   sFuncs->jemalloc_stats(aStats);
   FdPrintf(sFd, "%zu %zu jemalloc_stats()\n", GetPid(), GetTid());
 }
copy from memory/replace/logalloc/moz.build
copy to memory/replace/logalloc/logalloc.mozbuild
--- a/memory/replace/logalloc/moz.build
+++ b/memory/replace/logalloc/logalloc.mozbuild
@@ -1,16 +1,14 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-SharedLibrary('logalloc')
-
 SOURCES += [
     'FdPrintf.cpp',
     'LogAlloc.cpp',
 ]
 
 DISABLE_STL_WRAPPING = True
 USE_STATIC_LIBS = True
 DEFINES['MOZ_NO_MOZALLOC'] = True
@@ -30,12 +28,8 @@ else:
 
 include('/ipc/chromium/chromium-config.mozbuild')
 
 # Android doesn't have pthread_atfork, but we have our own in mozglue.
 if CONFIG['OS_TARGET'] == 'Android':
     USE_LIBS += [
         'mozglue',
     ]
-
-DIRS += [
-    'replay',
-]
new file mode 100644
--- /dev/null
+++ b/memory/replace/logalloc/minimal/moz.build
@@ -0,0 +1,11 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+SharedLibrary('logalloc_minimal')
+
+include('../logalloc.mozbuild')
+
+DEFINES['LOGALLOC_MINIMAL'] = True
--- a/memory/replace/logalloc/moz.build
+++ b/memory/replace/logalloc/moz.build
@@ -1,41 +1,14 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 SharedLibrary('logalloc')
 
-SOURCES += [
-    'FdPrintf.cpp',
-    'LogAlloc.cpp',
-]
-
-DISABLE_STL_WRAPPING = True
-USE_STATIC_LIBS = True
-DEFINES['MOZ_NO_MOZALLOC'] = True
-# Avoid Lock_impl code depending on mozilla::Logger.
-DEFINES['NDEBUG'] = True
-DEFINES['DEBUG'] = False
-
-# Use locking code from the chromium stack.
-if CONFIG['OS_TARGET'] == 'WINNT':
-    SOURCES += [
-        '../../../ipc/chromium/src/base/lock_impl_win.cc',
-    ]
-else:
-    SOURCES += [
-        '../../../ipc/chromium/src/base/lock_impl_posix.cc',
-    ]
-
-include('/ipc/chromium/chromium-config.mozbuild')
-
-# Android doesn't have pthread_atfork, but we have our own in mozglue.
-if CONFIG['OS_TARGET'] == 'Android':
-    USE_LIBS += [
-        'mozglue',
-    ]
+include('logalloc.mozbuild')
 
 DIRS += [
+    'minimal',
     'replay',
 ]
--- a/memory/replace/logalloc/replay/Makefile.in
+++ b/memory/replace/logalloc/replay/Makefile.in
@@ -2,35 +2,40 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/mozglue/build/replace_malloc.mk
 
 ifndef CROSS_COMPILE
 
 ifeq ($(OS_TARGET),WINNT)
-LOGALLOC = MOZ_REPLACE_MALLOC_LIB=$(CURDIR)/../logalloc.dll
+LOGALLOC_VAR = MOZ_REPLACE_MALLOC_LIB
 else
 ifeq ($(OS_TARGET),Darwin)
-LOGALLOC = DYLD_INSERT_LIBRARIES=$(CURDIR)/../liblogalloc.dylib
+LOGALLOC_VAR = DYLD_INSERT_LIBRARIES
 else
-LOGALLOC = LD_PRELOAD=$(CURDIR)/../$(DLL_PREFIX)logalloc$(DLL_SUFFIX)
+LOGALLOC_VAR = LD_PRELOAD
 endif
 endif
 
+LOGALLOC = $(LOGALLOC_VAR)=$(CURDIR)/../$(DLL_PREFIX)logalloc$(DLL_SUFFIX)
+LOGALLOC_MINIMAL = $(LOGALLOC_VAR)=$(CURDIR)/../minimal/$(DLL_PREFIX)logalloc_minimal$(DLL_SUFFIX)
+
 expected_output.log: $(srcdir)/replay.log
 # The logalloc-replay program will only replay entries from the first pid,
 # so the expected output only contains entries beginning with "1 "
 	grep "^1 " $< > $@
 
-check:: $(srcdir)/replay.log expected_output.log
+check:: $(srcdir)/replay.log expected_output.log $(srcdir)/expected_output_minimal.log
 # Test with MALLOC_LOG as a file descriptor number
 # We filter out anything happening before the first jemalloc_stats (first
 # command in replay.log) because starting with libstdc++ 5, a static
 # initializer in the STL allocates memory, which we obviously don't have
 # in expected_output.log.
 	MALLOC_LOG=1 $(LOGALLOC) ./$(PROGRAM) < $< | sed -n '/jemalloc_stats/,$$p' | $(PYTHON) $(srcdir)/logalloc_munge.py | diff -w - expected_output.log
 # Test with MALLOC_LOG as a file name
 	$(RM) test_output.log
 	MALLOC_LOG=test_output.log $(LOGALLOC) ./$(PROGRAM) < $<
 	sed -n '/jemalloc_stats/,$$p' test_output.log | $(PYTHON) $(srcdir)/logalloc_munge.py | diff -w - expected_output.log
 
+	MALLOC_LOG=1 $(LOGALLOC_MINIMAL) ./$(PROGRAM) < $< | sed -n '/jemalloc_stats/,$$p' | $(PYTHON) $(srcdir)/logalloc_munge.py | diff -w - $(srcdir)/expected_output_minimal.log
+
 endif
copy from memory/replace/logalloc/replay/replay.log
copy to memory/replace/logalloc/replay/expected_output_minimal.log
--- a/memory/replace/logalloc/replay/replay.log
+++ b/memory/replace/logalloc/replay/expected_output_minimal.log
@@ -1,18 +1,17 @@
 1 1 jemalloc_stats()
 1 1 malloc(42)=#1
 1 1 malloc(24)=#2
-2 2 malloc(42)=#1
 1 1 free(#1)
-1 1 posix_memalign(4096,1024)=#1
+1 1 memalign(4096,1024)=#1
 1 1 calloc(4,42)=#3
 1 1 free(#2)
 1 1 realloc(#3,84)=#2
-1 1 aligned_alloc(512,1024)=#3
+1 1 memalign(256,1024)=#3
 1 1 memalign(512,1024)=#4
-1 1 valloc(1024)=#5
+1 1 memalign(4096,1024)=#5
 1 1 jemalloc_stats()
 1 1 free(#5)
 1 1 free(#4)
 1 1 free(#3)
 1 1 free(#2)
 1 1 free(#1)
--- a/memory/replace/logalloc/replay/replay.log
+++ b/memory/replace/logalloc/replay/replay.log
@@ -2,17 +2,17 @@ 1 1 jemalloc_stats()
 1 1 malloc(42)=#1
 1 1 malloc(24)=#2
 2 2 malloc(42)=#1
 1 1 free(#1)
 1 1 posix_memalign(4096,1024)=#1
 1 1 calloc(4,42)=#3
 1 1 free(#2)
 1 1 realloc(#3,84)=#2
-1 1 aligned_alloc(512,1024)=#3
+1 1 aligned_alloc(256,1024)=#3
 1 1 memalign(512,1024)=#4
 1 1 valloc(1024)=#5
 1 1 jemalloc_stats()
 1 1 free(#5)
 1 1 free(#4)
 1 1 free(#3)
 1 1 free(#2)
 1 1 free(#1)