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 348626 ea97ec1c574330bc76f453058f2fa8e55027db3d
parent 348625 0d61fccdd9f60e9a95b70e5f8bd9e130e7b173a1
child 348627 d769f46c4248935ab000186136cdb21640d3b503
push id10298
push userraliiev@mozilla.com
push dateMon, 14 Nov 2016 12:33:03 +0000
treeherdermozilla-aurora@7e29173b1641 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnjn
bugs1313485
milestone52.0a1
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