Globals_inc.h (2578B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 4 5 // Largest sub-page size class, or zero if there are none 6 GLOBAL(size_t, gMaxSubPageClass, 7 gPageSize / 2 >= kMinSubPageClass ? gPageSize / 2 : 0) 8 9 // Number of sub-page bins. 10 GLOBAL(uint8_t, gNumSubPageClasses, []() GLOBAL_CONSTEXPR -> uint8_t { 11 if GLOBAL_CONSTEXPR (gMaxSubPageClass != 0) { 12 return mozilla::FloorLog2(gMaxSubPageClass) - LOG2(kMinSubPageClass) + 1; 13 } 14 return 0; 15 }()) 16 17 GLOBAL(uint8_t, gPageSize2Pow, GLOBAL_LOG2(gPageSize)) 18 GLOBAL(uint8_t, gRealPageSize2Pow, GLOBAL_LOG2(gRealPageSize)) 19 GLOBAL(size_t, gPageSizeMask, gPageSize - 1) 20 GLOBAL(size_t, gRealPageSizeMask, gRealPageSize - 1) 21 22 // For system calls that allocate pages we use this to round-up to a real 23 // page boundary. 24 GLOBAL(size_t, gPagesPerRealPage, 25 gPageSize < gRealPageSize ? gRealPageSize / gPageSize : 1); 26 27 // Number of pages in a chunk. 28 GLOBAL(size_t, gChunkNumPages, kChunkSize >> gPageSize2Pow) 29 30 // Number of pages necessary for a chunk header plus a guard page. 31 GLOBAL(size_t, gChunkHeaderNumPages, 32 gPagesPerRealPage + 33 (std::max(PAGE_CEILING(sizeof(arena_chunk_t) + 34 sizeof(arena_chunk_map_t) * gChunkNumPages), 35 REAL_PAGE_CEILING(sizeof(arena_chunk_t) + 36 sizeof(arena_chunk_map_t) * 37 gChunkNumPages)) >> 38 gPageSize2Pow)); 39 40 // One chunk, minus the header, minus a guard page 41 GLOBAL(size_t, gMaxLargeClass, 42 kChunkSize - gRealPageSize - (gChunkHeaderNumPages << gPageSize2Pow)) 43 44 // Various checks that regard configuration. 45 GLOBAL_ASSERT(1ULL << gPageSize2Pow == gPageSize, 46 "Page size is not a power of two"); 47 GLOBAL_ASSERT(1ULL << gRealPageSize2Pow == gRealPageSize, 48 "Real page size is not a power of two"); 49 GLOBAL_ASSERT(kQuantum >= sizeof(void*)); 50 GLOBAL_ASSERT(kQuantum <= kQuantumWide); 51 GLOBAL_ASSERT(!kNumQuantumWideClasses || 52 kQuantumWide <= (kMinSubPageClass - kMaxQuantumClass)); 53 54 GLOBAL_ASSERT(kQuantumWide <= kMaxQuantumClass); 55 56 GLOBAL_ASSERT(gMaxSubPageClass >= kMinSubPageClass || gMaxSubPageClass == 0); 57 GLOBAL_ASSERT(gMaxLargeClass >= gMaxSubPageClass); 58 GLOBAL_ASSERT(kChunkSize >= gPageSize); 59 GLOBAL_ASSERT(kChunkSize >= gRealPageSize); 60 GLOBAL_ASSERT(gPagesPerRealPage < gChunkHeaderNumPages); 61 GLOBAL_ASSERT(kQuantum * 4 <= kChunkSize);