diff --git a/memory/gtest/TestJemalloc.cpp b/memory/gtest/TestJemalloc.cpp deleted file mode 100644 index f37c57376a794..0000000000000 --- a/memory/gtest/TestJemalloc.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ -/* 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/. */ - -#include "mozilla/mozalloc.h" -#include "mozmemory.h" - -#include "gtest/gtest.h" - -static inline void -TestOne(size_t size) -{ - size_t req = size; - size_t adv = malloc_good_size(req); - char* p = (char*)malloc(req); - size_t usable = moz_malloc_usable_size(p); - // NB: Using EXPECT here so that we still free the memory on failure. - EXPECT_EQ(adv, usable) << - "malloc_good_size(" << req << ") --> " << adv << "; " - "malloc_usable_size(" << req << ") --> " << usable; - free(p); -} - -static inline void -TestThree(size_t size) -{ - ASSERT_NO_FATAL_FAILURE(TestOne(size - 1)); - ASSERT_NO_FATAL_FAILURE(TestOne(size)); - ASSERT_NO_FATAL_FAILURE(TestOne(size + 1)); -} - -TEST(Jemalloc, UsableSizeInAdvance) -{ - #define K * 1024 - #define M * 1024 * 1024 - - /* - * Test every size up to a certain point, then (N-1, N, N+1) triplets for a - * various sizes beyond that. - */ - - for (size_t n = 0; n < 16 K; n++) - ASSERT_NO_FATAL_FAILURE(TestOne(n)); - - for (size_t n = 16 K; n < 1 M; n += 4 K) - ASSERT_NO_FATAL_FAILURE(TestThree(n)); - - for (size_t n = 1 M; n < 8 M; n += 128 K) - ASSERT_NO_FATAL_FAILURE(TestThree(n)); -} diff --git a/memory/gtest/moz.build b/memory/gtest/moz.build deleted file mode 100644 index 8d50ee4e39905..0000000000000 --- a/memory/gtest/moz.build +++ /dev/null @@ -1,11 +0,0 @@ -# -*- 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/. - -UNIFIED_SOURCES += [ - 'TestJemalloc.cpp', -] - -FINAL_LIBRARY = 'xul-gtest' diff --git a/memory/moz.build b/memory/moz.build index 538655c90992d..ea74b1609e834 100644 --- a/memory/moz.build +++ b/memory/moz.build @@ -15,7 +15,6 @@ if not CONFIG['JS_STANDALONE']: if CONFIG['MOZ_MEMORY']: DIRS += [ 'build', - 'gtest', 'mozjemalloc', ] diff --git a/testing/cppunittest.ini b/testing/cppunittest.ini index e8026be351cd1..0b74bd55d7467 100644 --- a/testing/cppunittest.ini +++ b/testing/cppunittest.ini @@ -31,6 +31,7 @@ skip-if = os != 'win' [TestIntegerRange] [TestIsCertBuiltInRoot] [TestJSONWriter] +[TestJemalloc] [TestLinkedList] [TestMacroArgs] [TestMacroForEach] diff --git a/xpcom/tests/TestJemalloc.cpp b/xpcom/tests/TestJemalloc.cpp new file mode 100644 index 0000000000000..6e14bea4bc9be --- /dev/null +++ b/xpcom/tests/TestJemalloc.cpp @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* 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/. */ + +/* + * Ideally, this test would be in memory/test/. But I couldn't get it to build + * there (couldn't find TestHarness.h). I think memory/ is processed too early + * in the build. So it's here. + */ + +#include "TestHarness.h" +#include "mozmemory.h" + +static inline bool +TestOne(size_t size) +{ + size_t req = size; + size_t adv = malloc_good_size(req); + char* p = (char*)malloc(req); + size_t usable = moz_malloc_usable_size(p); + if (adv != usable) { + fail("malloc_good_size(%d) --> %d; " + "malloc_usable_size(%d) --> %d", + req, adv, req, usable); + return false; + } + free(p); + return true; +} + +static inline bool +TestThree(size_t size) +{ + return TestOne(size - 1) && TestOne(size) && TestOne(size + 1); +} + +static nsresult +TestJemallocUsableSizeInAdvance() +{ + #define K * 1024 + #define M * 1024 * 1024 + + /* + * Test every size up to a certain point, then (N-1, N, N+1) triplets for a + * various sizes beyond that. + */ + + for (size_t n = 0; n < 16 K; n++) + if (!TestOne(n)) + return NS_ERROR_UNEXPECTED; + + for (size_t n = 16 K; n < 1 M; n += 4 K) + if (!TestThree(n)) + return NS_ERROR_UNEXPECTED; + + for (size_t n = 1 M; n < 8 M; n += 128 K) + if (!TestThree(n)) + return NS_ERROR_UNEXPECTED; + + passed("malloc_good_size"); + + return NS_OK; +} + +int main(int argc, char** argv) +{ + int rv = 0; + ScopedXPCOM xpcom("jemalloc"); + if (xpcom.failed()) + return 1; + + if (NS_FAILED(TestJemallocUsableSizeInAdvance())) + rv = 1; + + return rv; +} + diff --git a/xpcom/tests/moz.build b/xpcom/tests/moz.build index 8eb071a5990c5..86e380a32a9f8 100644 --- a/xpcom/tests/moz.build +++ b/xpcom/tests/moz.build @@ -45,6 +45,11 @@ if CONFIG['WRAP_STL_INCLUDES'] and not CONFIG['CLANG_CL']: XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini'] +if CONFIG['MOZ_MEMORY']: + GeckoCppUnitTests([ + 'TestJemalloc', + ]) + # FIXME: bug 577500 TestStaticAtoms fails when run in dist/bin #CPP_UNIT_TESTS += [ # 'TestStaticAtoms',