337 lines
8.5 KiB
Text
337 lines
8.5 KiB
Text
//
|
|
// Copyright (C) 2014 The Android Open Source Project
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
common_cflags = [
|
|
"-D_REENTRANT",
|
|
"-O3",
|
|
"-funroll-loops",
|
|
"-fvisibility=hidden",
|
|
"-Wno-unused-parameter",
|
|
"-Wno-type-limits",
|
|
]
|
|
|
|
// These parameters change the way jemalloc works.
|
|
// ANDROID_MAX_ARENAS=XX
|
|
// The total number of arenas will be less than or equal to this number.
|
|
// The number of arenas will be calculated as 2 * the number of cpus
|
|
// but no larger than XX.
|
|
// ANDROID_TCACHE_NSLOTS_SMALL_MAX=XX
|
|
// The number of small slots held in the tcache. The higher this number
|
|
// is, the higher amount of PSS consumed. If this number is set too low
|
|
// then small allocations will take longer to complete.
|
|
// ANDROID_TCACHE_NSLOTS_LARGE=XX
|
|
// The number of large slots held in the tcache. The higher this number
|
|
// is, the higher amount of PSS consumed. If this number is set too low
|
|
// then large allocations will take longer to complete.
|
|
// ANDROID_LG_TCACHE_MAXCLASS_DEFAULT=XX
|
|
// 1 << XX is the maximum sized allocation that will be in the tcache.
|
|
// ANDROID_LG_CHUNK_DEFAULT=XX
|
|
// 1 << XX is the default chunk size used by the system. Decreasing this
|
|
// usually decreases the amount of PSS used, but can increase
|
|
// fragmentation.
|
|
|
|
// Default to a single arena for svelte configurations to minimize
|
|
// PSS consumed by jemalloc.
|
|
common_cflags += [
|
|
"-DANDROID_MAX_ARENAS=1",
|
|
"-DANDROID_LG_TCACHE_MAXCLASS_DEFAULT=16",
|
|
]
|
|
|
|
common_c_local_includes = [
|
|
"src",
|
|
"include",
|
|
]
|
|
|
|
common_product_variables = {
|
|
// Only enable the tcache on non-svelte configurations, to save PSS.
|
|
malloc_not_svelte: {
|
|
cflags: [
|
|
"-UANDROID_MAX_ARENAS",
|
|
"-DANDROID_MAX_ARENAS=2",
|
|
"-DJEMALLOC_TCACHE",
|
|
"-DANDROID_TCACHE_NSLOTS_SMALL_MAX=8",
|
|
"-DANDROID_TCACHE_NSLOTS_LARGE=16",
|
|
],
|
|
},
|
|
}
|
|
|
|
cc_defaults {
|
|
name: "jemalloc_defaults",
|
|
defaults: ["linux_bionic_supported"],
|
|
cflags: common_cflags,
|
|
|
|
product_variables: common_product_variables,
|
|
|
|
multilib: {
|
|
lib32: {
|
|
// Use a 512K chunk size on 32 bit systems.
|
|
// This keeps the total amount of virtual address space consumed
|
|
// by jemalloc lower.
|
|
cflags: [
|
|
"-DANDROID_LG_CHUNK_DEFAULT=19",
|
|
],
|
|
},
|
|
lib64: {
|
|
// Use a 2MB chunk size on 64 bit systems.
|
|
// This is the default currently used by 4.0.0
|
|
cflags: [
|
|
"-DANDROID_LG_CHUNK_DEFAULT=21",
|
|
],
|
|
},
|
|
},
|
|
|
|
local_include_dirs: common_c_local_includes,
|
|
stl: "none",
|
|
}
|
|
|
|
lib_src_files = [
|
|
"src/arena.c",
|
|
"src/atomic.c",
|
|
"src/base.c",
|
|
"src/bitmap.c",
|
|
"src/chunk.c",
|
|
"src/chunk_dss.c",
|
|
"src/chunk_mmap.c",
|
|
"src/ckh.c",
|
|
"src/ctl.c",
|
|
"src/extent.c",
|
|
"src/hash.c",
|
|
"src/huge.c",
|
|
"src/jemalloc.c",
|
|
"src/mb.c",
|
|
"src/mutex.c",
|
|
"src/nstime.c",
|
|
"src/pages.c",
|
|
"src/prng.c",
|
|
"src/prof.c",
|
|
"src/quarantine.c",
|
|
"src/rtree.c",
|
|
"src/spin.c",
|
|
"src/stats.c",
|
|
"src/tcache.c",
|
|
"src/ticker.c",
|
|
"src/tsd.c",
|
|
"src/util.c",
|
|
"src/witness.c",
|
|
]
|
|
|
|
//-----------------------------------------------------------------------
|
|
// jemalloc static library
|
|
//-----------------------------------------------------------------------
|
|
cc_library_static {
|
|
name: "libjemalloc",
|
|
|
|
defaults: ["jemalloc_defaults"],
|
|
|
|
cflags: ["-include bionic/libc/async_safe/include/async_safe/log.h"],
|
|
|
|
srcs: lib_src_files,
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
// jemalloc static jet library
|
|
//-----------------------------------------------------------------------
|
|
cc_library_static {
|
|
name: "libjemalloc_jet",
|
|
|
|
defaults: ["jemalloc_defaults"],
|
|
|
|
cflags: [
|
|
"-DJEMALLOC_JET",
|
|
"-include android/include/log.h",
|
|
],
|
|
|
|
srcs: lib_src_files,
|
|
|
|
}
|
|
|
|
jemalloc_testlib_srcs = [
|
|
"test/src/btalloc.c",
|
|
"test/src/btalloc_0.c",
|
|
"test/src/btalloc_1.c",
|
|
"test/src/math.c",
|
|
"test/src/mq.c",
|
|
"test/src/mtx.c",
|
|
"test/src/SFMT.c",
|
|
"test/src/test.c",
|
|
"test/src/thd.c",
|
|
"test/src/timer.c",
|
|
]
|
|
|
|
//-----------------------------------------------------------------------
|
|
// jemalloc unit test library
|
|
//-----------------------------------------------------------------------
|
|
cc_library_static {
|
|
name: "libjemalloc_unittest",
|
|
|
|
defaults: ["jemalloc_defaults"],
|
|
|
|
cflags: [
|
|
"-DJEMALLOC_UNIT_TEST",
|
|
"-include android/include/log.h",
|
|
],
|
|
|
|
local_include_dirs: [
|
|
"test/src",
|
|
"test/include",
|
|
],
|
|
|
|
srcs: jemalloc_testlib_srcs,
|
|
|
|
whole_static_libs: ["libjemalloc_jet"],
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
// jemalloc unit tests
|
|
//-----------------------------------------------------------------------
|
|
unit_tests = [
|
|
"test/unit/a0.c",
|
|
"test/unit/arena_reset.c",
|
|
"test/unit/atomic.c",
|
|
"test/unit/bitmap.c",
|
|
"test/unit/ckh.c",
|
|
"test/unit/decay.c",
|
|
"test/unit/fork.c",
|
|
"test/unit/hash.c",
|
|
"test/unit/junk.c",
|
|
"test/unit/junk_alloc.c",
|
|
"test/unit/junk_free.c",
|
|
"test/unit/lg_chunk.c",
|
|
"test/unit/mallctl.c",
|
|
"test/unit/math.c",
|
|
"test/unit/mq.c",
|
|
"test/unit/mtx.c",
|
|
"test/unit/nstime.c",
|
|
"test/unit/pack.c",
|
|
"test/unit/pages.c",
|
|
"test/unit/prng.c",
|
|
"test/unit/prof_accum.c",
|
|
"test/unit/prof_active.c",
|
|
"test/unit/prof_gdump.c",
|
|
"test/unit/prof_idump.c",
|
|
"test/unit/prof_reset.c",
|
|
"test/unit/prof_thread_name.c",
|
|
"test/unit/ql.c",
|
|
"test/unit/qr.c",
|
|
"test/unit/quarantine.c",
|
|
"test/unit/rb.c",
|
|
"test/unit/rtree.c",
|
|
"test/unit/run_quantize.c",
|
|
"test/unit/SFMT.c",
|
|
"test/unit/size_classes.c",
|
|
"test/unit/smoothstep.c",
|
|
"test/unit/stats.c",
|
|
"test/unit/ticker.c",
|
|
"test/unit/tsd.c",
|
|
"test/unit/util.c",
|
|
"test/unit/witness.c",
|
|
"test/unit/zero.c",
|
|
]
|
|
|
|
cc_test {
|
|
name: "jemalloc_unittests",
|
|
|
|
gtest: false,
|
|
|
|
product_variables: common_product_variables,
|
|
|
|
cflags: common_cflags + [
|
|
"-DJEMALLOC_UNIT_TEST",
|
|
"-include android/include/log.h",
|
|
],
|
|
|
|
local_include_dirs: common_c_local_includes + [
|
|
"test/src",
|
|
"test/include",
|
|
],
|
|
|
|
srcs: unit_tests,
|
|
|
|
static_libs: ["libjemalloc_unittest"],
|
|
|
|
shared_libs: ["liblog"],
|
|
|
|
test_per_src: true,
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
// jemalloc integration test library
|
|
//-----------------------------------------------------------------------
|
|
cc_library_static {
|
|
name: "libjemalloc_integrationtest",
|
|
|
|
defaults: ["jemalloc_defaults"],
|
|
|
|
cflags: [
|
|
"-DJEMALLOC_INTEGRATION_TEST",
|
|
"-include android/include/log.h",
|
|
],
|
|
|
|
local_include_dirs: [
|
|
"test/src",
|
|
"test/include",
|
|
],
|
|
|
|
srcs: jemalloc_testlib_srcs + lib_src_files,
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
// jemalloc integration tests
|
|
//-----------------------------------------------------------------------
|
|
integration_tests = [
|
|
"test/integration/aligned_alloc.c",
|
|
"test/integration/allocated.c",
|
|
"test/integration/chunk.c",
|
|
"test/integration/iterate.c",
|
|
"test/integration/MALLOCX_ARENA.c",
|
|
"test/integration/mallocx.c",
|
|
"test/integration/overflow.c",
|
|
"test/integration/posix_memalign.c",
|
|
"test/integration/rallocx.c",
|
|
"test/integration/sdallocx.c",
|
|
"test/integration/thread_arena.c",
|
|
"test/integration/thread_tcache_enabled.c",
|
|
"test/integration/xallocx.c",
|
|
]
|
|
|
|
cc_test {
|
|
|
|
name: "jemalloc_integrationtests",
|
|
|
|
gtest: false,
|
|
|
|
product_variables: common_product_variables,
|
|
|
|
cflags: common_cflags + [
|
|
"-DJEMALLOC_INTEGRATION_TEST",
|
|
"-include android/include/log.h",
|
|
],
|
|
|
|
local_include_dirs: common_c_local_includes + [
|
|
"test/src",
|
|
"test/include",
|
|
],
|
|
|
|
srcs: integration_tests,
|
|
|
|
static_libs: ["libjemalloc_integrationtest"],
|
|
|
|
shared_libs: ["liblog"],
|
|
|
|
test_per_src: true,
|
|
}
|