Bug 1313485 - Convert XPCOM test TestJemalloc to a gtest. r=njn
authorEric Rahm <erahm@mozilla.com>
Wed, 09 Nov 2016 10:24:22 -0800
changeset 321865 ea97ec1c574330bc76f453058f2fa8e55027db3d
parent 321864 0d61fccdd9f60e9a95b70e5f8bd9e130e7b173a1
child 321866 d769f46c4248935ab000186136cdb21640d3b503
push id83694
push usererahm@mozilla.com
push dateWed, 09 Nov 2016 18:24:36 +0000
treeherdermozilla-inbound@ea97ec1c5743 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnjn
bugs1313485
milestone52.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 1313485 - Convert XPCOM test TestJemalloc to a gtest. r=njn MozReview-Commit-ID: 5yzn8o33Ne5
memory/gtest/TestJemalloc.cpp
memory/gtest/moz.build
memory/moz.build
testing/cppunittest.ini
toolkit/toolkit.mozbuild
xpcom/tests/TestJemalloc.cpp
xpcom/tests/moz.build
rename from xpcom/tests/TestJemalloc.cpp
rename to memory/gtest/TestJemalloc.cpp
--- a/xpcom/tests/TestJemalloc.cpp
+++ b/memory/gtest/TestJemalloc.cpp
@@ -1,78 +1,51 @@
 /* -*-  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 "mozilla/mozalloc.h"
 #include "mozmemory.h"
 
-static inline bool
+#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);
-    if (adv != usable) {
-      fail("malloc_good_size(%d) --> %d; "
-           "malloc_usable_size(%d) --> %d",
-           req, adv, req, usable);
-      return false;
-    }
+    // 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);
-    return true;
 }
 
-static inline bool
+static inline void
 TestThree(size_t size)
 {
-    return TestOne(size - 1) && TestOne(size) && TestOne(size + 1);
+    ASSERT_NO_FATAL_FAILURE(TestOne(size - 1));
+    ASSERT_NO_FATAL_FAILURE(TestOne(size));
+    ASSERT_NO_FATAL_FAILURE(TestOne(size + 1));
 }
 
-static nsresult
-TestJemallocUsableSizeInAdvance()
+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++)
-    if (!TestOne(n))
-      return NS_ERROR_UNEXPECTED;
+    ASSERT_NO_FATAL_FAILURE(TestOne(n));
 
   for (size_t n = 16 K; n < 1 M; n += 4 K)
-    if (!TestThree(n))
-      return NS_ERROR_UNEXPECTED;
+    ASSERT_NO_FATAL_FAILURE(TestThree(n));
 
   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;
+    ASSERT_NO_FATAL_FAILURE(TestThree(n));
 }
-
-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;
-}
-
new file mode 100644
--- /dev/null
+++ b/memory/gtest/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/.
+
+UNIFIED_SOURCES += [
+    'TestJemalloc.cpp',
+]
+
+FINAL_LIBRARY = 'xul-gtest'
--- a/memory/moz.build
+++ b/memory/moz.build
@@ -8,16 +8,18 @@ DIRS += [
     'mozalloc',
     'fallible',
 ]
 
 if not CONFIG['JS_STANDALONE']:
     DIRS += ['volatile']
 
 if CONFIG['MOZ_MEMORY']:
+    # NB: gtest dir is included in toolkit/toolkit.build due to its dependency
+    # on libxul.
     DIRS += [
         'build',
         'mozjemalloc',
     ]
 
     if CONFIG['MOZ_JEMALLOC4'] or CONFIG['MOZ_REPLACE_MALLOC']:
         if not CONFIG['MOZ_SYSTEM_JEMALLOC']:
             DIRS += ['jemalloc']
--- a/testing/cppunittest.ini
+++ b/testing/cppunittest.ini
@@ -26,17 +26,16 @@ skip-if = os != 'win'
 [TestEnumTypeTraits]
 [TestFastBernoulliTrial]
 [TestFloatingPoint]
 [TestFunction]
 [TestIntegerPrintfMacros]
 [TestIntegerRange]
 [TestIsCertBuiltInRoot]
 [TestJSONWriter]
-[TestJemalloc]
 [TestLinkedList]
 [TestMacroArgs]
 [TestMacroForEach]
 [TestMathAlgorithms]
 [TestMaybe]
 [TestNtPathToDosPath]
 skip-if = os != 'win'
 [TestPLDHash]
--- a/toolkit/toolkit.mozbuild
+++ b/toolkit/toolkit.mozbuild
@@ -190,8 +190,11 @@ if CONFIG['ENABLE_TESTS']:
     if CONFIG['MOZ_WEBRTC'] and CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk' and not CONFIG['MOZ_TASK_TRACER']:
             DIRS += [
                 '/media/webrtc/signaling/test',
                 '/media/mtransport/test',
             ]
 
 if CONFIG['FUZZING']:
     DIRS += ['/tools/fuzzing']
+
+if CONFIG['MOZ_MEMORY']:
+    DIRS += ['/memory/gtest']
--- a/xpcom/tests/moz.build
+++ b/xpcom/tests/moz.build
@@ -43,21 +43,16 @@ if CONFIG['OS_TARGET'] == 'WINNT':
 
 if CONFIG['WRAP_STL_INCLUDES'] and not CONFIG['CLANG_CL']:
     GeckoSimplePrograms([
         'TestSTLWrappers',
     ])
 
 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',
 #]
 
 if CONFIG['MOZ_DEBUG'] and CONFIG['OS_ARCH'] not in ('WINNT'):
     # FIXME bug 523392: TestDeadlockDetector doesn't like Windows
     # FIXME bug 523378: also fails on OS X