Lines Matching refs:region

177     RegionInfo *region = GetRegionInfo(class_id);  in ReturnToAllocator()  local
181 Lock l(&region->mutex); in ReturnToAllocator()
182 uptr old_num_chunks = region->num_freed_chunks; in ReturnToAllocator()
186 if (UNLIKELY(!EnsureFreeArraySpace(region, region_beg, in ReturnToAllocator()
195 region->num_freed_chunks = new_num_freed_chunks; in ReturnToAllocator()
196 region->stats.n_freed += n_chunks; in ReturnToAllocator()
203 RegionInfo *region = GetRegionInfo(class_id); in GetFromAllocator() local
207 Lock l(&region->mutex); in GetFromAllocator()
212 if (region->rtoi.last_released_bytes > 0) { in GetFromAllocator()
213 MmapFixedOrDie(region_beg, region->mapped_user, in GetFromAllocator()
215 region->rtoi.n_freed_at_last_release = 0; in GetFromAllocator()
216 region->rtoi.last_released_bytes = 0; in GetFromAllocator()
219 if (UNLIKELY(region->num_freed_chunks < n_chunks)) { in GetFromAllocator()
220 if (UNLIKELY(!PopulateFreeArray(stat, class_id, region, in GetFromAllocator()
221 n_chunks - region->num_freed_chunks))) in GetFromAllocator()
223 CHECK_GE(region->num_freed_chunks, n_chunks); in GetFromAllocator()
225 region->num_freed_chunks -= n_chunks; in GetFromAllocator()
226 uptr base_idx = region->num_freed_chunks; in GetFromAllocator()
229 region->stats.n_allocated += n_chunks; in GetFromAllocator()
268 const RegionInfo *region = AddressSpaceView::Load(GetRegionInfo(class_id)); in GetBlockBegin() local
269 if (region->mapped_user >= next_beg) in GetBlockBegin()
312 RegionInfo *region = GetRegionInfo(class_id); in PrintStats() local
313 if (region->mapped_user == 0) return; in PrintStats()
314 uptr in_use = region->stats.n_allocated - region->stats.n_freed; in PrintStats()
315 uptr avail_chunks = region->allocated_user / ClassIdToSize(class_id); in PrintStats()
320 region->exhausted ? "F" : " ", class_id, ClassIdToSize(class_id), in PrintStats()
321 region->mapped_user >> 10, region->stats.n_allocated, in PrintStats()
322 region->stats.n_freed, in_use, region->num_freed_chunks, avail_chunks, in PrintStats()
323 rss >> 10, region->rtoi.num_releases, in PrintStats()
324 region->rtoi.last_released_bytes >> 10, in PrintStats()
339 RegionInfo *region = GetRegionInfo(class_id); in PrintStats() local
340 if (region->mapped_user != 0) { in PrintStats()
341 total_mapped += region->mapped_user; in PrintStats()
344 n_allocated += region->stats.n_allocated; in PrintStats()
345 n_freed += region->stats.n_freed; in PrintStats()
373 RegionInfo *region = GetRegionInfo(class_id); in ForEachChunk() local
377 AddressSpaceView::Load(region)->allocated_user; in ForEachChunk()
739 bool EnsureFreeArraySpace(RegionInfo *region, uptr region_beg, in EnsureFreeArraySpace() argument
742 if (region->mapped_free_array < needed_space) { in EnsureFreeArraySpace()
746 region->mapped_free_array; in EnsureFreeArraySpace()
747 uptr new_map_size = new_mapped_free_array - region->mapped_free_array; in EnsureFreeArraySpace()
751 region->mapped_free_array = new_mapped_free_array; in EnsureFreeArraySpace()
757 bool IsRegionExhausted(RegionInfo *region, uptr class_id, in IsRegionExhausted() argument
759 if (LIKELY(region->mapped_user + region->mapped_meta + in IsRegionExhausted()
762 if (!region->exhausted) { in IsRegionExhausted()
763 region->exhausted = true; in IsRegionExhausted()
772 RegionInfo *region, uptr requested_count) { in PopulateFreeArray() argument
778 region->allocated_user + requested_count * size; in PopulateFreeArray()
780 if (LIKELY(total_user_bytes > region->mapped_user)) { in PopulateFreeArray()
781 if (UNLIKELY(region->mapped_user == 0)) { in PopulateFreeArray()
784 region->rand_state = static_cast<u32>(region_beg >> 12); in PopulateFreeArray()
792 region->rtoi.last_release_at_ns = MonotonicNanoTime(); in PopulateFreeArray()
796 RoundUpTo(total_user_bytes - region->mapped_user, kUserMapSize); in PopulateFreeArray()
797 if (UNLIKELY(IsRegionExhausted(region, class_id, user_map_size))) in PopulateFreeArray()
799 if (UNLIKELY(!MapWithCallback(region_beg + region->mapped_user, in PopulateFreeArray()
804 region->mapped_user += user_map_size; in PopulateFreeArray()
807 (region->mapped_user - region->allocated_user) / size; in PopulateFreeArray()
812 region->allocated_meta + new_chunks_count * kMetadataSize; in PopulateFreeArray()
813 const uptr meta_map_size = (total_meta_bytes > region->mapped_meta) ? in PopulateFreeArray()
814 RoundUpTo(total_meta_bytes - region->mapped_meta, kMetaMapSize) : 0; in PopulateFreeArray()
817 if (UNLIKELY(IsRegionExhausted(region, class_id, meta_map_size))) in PopulateFreeArray()
820 GetMetadataEnd(region_beg) - region->mapped_meta - meta_map_size, in PopulateFreeArray()
823 region->mapped_meta += meta_map_size; in PopulateFreeArray()
829 const uptr total_freed_chunks = region->num_freed_chunks + new_chunks_count; in PopulateFreeArray()
830 if (UNLIKELY(!EnsureFreeArraySpace(region, region_beg, total_freed_chunks))) in PopulateFreeArray()
833 for (uptr i = 0, chunk = region->allocated_user; i < new_chunks_count; in PopulateFreeArray()
837 RandomShuffle(&free_array[region->num_freed_chunks], new_chunks_count, in PopulateFreeArray()
838 &region->rand_state); in PopulateFreeArray()
842 region->num_freed_chunks += new_chunks_count; in PopulateFreeArray()
843 region->allocated_user += new_chunks_count * size; in PopulateFreeArray()
844 CHECK_LE(region->allocated_user, region->mapped_user); in PopulateFreeArray()
845 region->allocated_meta += new_chunks_count * kMetadataSize; in PopulateFreeArray()
846 CHECK_LE(region->allocated_meta, region->mapped_meta); in PopulateFreeArray()
847 region->exhausted = false; in PopulateFreeArray()
863 RegionInfo *region = GetRegionInfo(class_id); in MaybeReleaseToOS() local
867 uptr n = region->num_freed_chunks; in MaybeReleaseToOS()
870 if ((region->stats.n_freed - in MaybeReleaseToOS()
871 region->rtoi.n_freed_at_last_release) * chunk_size < page_size) { in MaybeReleaseToOS()
880 if (region->rtoi.last_release_at_ns + interval_ms * 1000000ULL > in MaybeReleaseToOS()
888 RoundUpTo(region->allocated_user, page_size) / page_size, memory_mapper, in MaybeReleaseToOS()
893 region->rtoi.n_freed_at_last_release = region->stats.n_freed; in MaybeReleaseToOS()
894 region->rtoi.num_releases += ranges; in MaybeReleaseToOS()
895 region->rtoi.last_released_bytes = bytes; in MaybeReleaseToOS()
897 region->rtoi.last_release_at_ns = MonotonicNanoTime(); in MaybeReleaseToOS()