Lines Matching refs:Region

27 // Region actually starts at a random offset from its base.
34 // The 1st Region (for size class 0) holds the TransferBatches. This is a
71 RegionInfo *Region = getRegionInfo(I);
73 Region->RegionBeg =
82 Region->CanRelease = (ReleaseToOsInterval >= 0) &&
85 Region->RandState = getRandomU32(&Seed);
102 RegionInfo *Region = getRegionInfo(ClassId);
103 ScopedLock L(Region->Mutex);
104 TransferBatch *B = Region->FreeList.front();
106 Region->FreeList.pop_front();
108 B = populateFreeList(C, ClassId, Region);
113 Region->Stats.PoppedBlocks += B->getCount();
119 RegionInfo *Region = getRegionInfo(ClassId);
120 ScopedLock L(Region->Mutex);
121 Region->FreeList.push_front(B);
122 Region->Stats.PushedBlocks += B->getCount();
123 if (Region->CanRelease)
124 releaseToOSMaybe(Region, ClassId);
150 const RegionInfo *Region = getRegionInfo(I);
152 const uptr From = Region->RegionBeg;
153 const uptr To = From + Region->AllocatedUser;
165 RegionInfo *Region = getRegionInfo(I);
166 if (Region->MappedUser)
167 TotalMapped += Region->MappedUser;
168 PoppedBlocks += Region->Stats.PoppedBlocks;
169 PushedBlocks += Region->Stats.PushedBlocks;
185 RegionInfo *Region = getRegionInfo(I);
186 ScopedLock L(Region->Mutex);
187 TotalReleasedBytes += releaseToOSMaybe(Region, I, /*Force=*/true);
243 bool populateBatches(CacheT *C, RegionInfo *Region, uptr ClassId,
248 shuffle(PointersArray, Count, &Region->RandState);
252 Region->FreeList.push_back(B);
268 RegionInfo *Region) {
272 const uptr RegionBeg = Region->RegionBeg;
273 const uptr MappedUser = Region->MappedUser;
274 const uptr TotalUserBytes = Region->AllocatedUser + MaxCount * Size;
282 if (!Region->Exhausted) {
283 Region->Exhausted = true;
294 Region->Data = Data;
297 MAP_ALLOWNOMEM | MAP_RESIZABLE, &Region->Data)))
299 Region->MappedUser += UserMapSize;
305 static_cast<u32>((Region->MappedUser - Region->AllocatedUser) / Size));
313 const uptr P = RegionBeg + Region->AllocatedUser;
318 if (UNLIKELY(!populateBatches(C, Region, ClassId, &B, MaxCount,
325 if (UNLIKELY(!populateBatches(C, Region, ClassId, &B, MaxCount,
330 if (!Region->FreeList.empty()) {
331 Region->FreeList.push_back(B);
332 B = Region->FreeList.front();
333 Region->FreeList.pop_front();
338 Region->AllocatedUser += AllocatedUser;
339 Region->Exhausted = false;
340 if (Region->CanRelease)
341 Region->ReleaseInfo.LastReleaseAtNs = getMonotonicTime();
347 RegionInfo *Region = getRegionInfo(ClassId);
348 if (Region->MappedUser == 0)
350 const uptr InUse = Region->Stats.PoppedBlocks - Region->Stats.PushedBlocks;
351 const uptr TotalChunks = Region->AllocatedUser / getSizeByClassId(ClassId);
355 Region->Exhausted ? "F" : " ", ClassId,
356 getSizeByClassId(ClassId), Region->MappedUser >> 10,
357 Region->Stats.PoppedBlocks, Region->Stats.PushedBlocks, InUse,
358 TotalChunks, Rss >> 10, Region->ReleaseInfo.RangesReleased,
359 Region->ReleaseInfo.LastReleasedBytes >> 10, Region->RegionBeg,
363 NOINLINE uptr releaseToOSMaybe(RegionInfo *Region, uptr ClassId,
368 CHECK_GE(Region->Stats.PoppedBlocks, Region->Stats.PushedBlocks);
370 Region->AllocatedUser -
371 (Region->Stats.PoppedBlocks - Region->Stats.PushedBlocks) * BlockSize;
374 if ((Region->Stats.PushedBlocks -
375 Region->ReleaseInfo.PushedBlocksAtLastRelease) *
385 if (Region->ReleaseInfo.LastReleaseAtNs +
392 ReleaseRecorder Recorder(Region->RegionBeg, &Region->Data);
393 releaseFreeMemoryToOS(Region->FreeList, Region->RegionBeg,
394 roundUpTo(Region->AllocatedUser, PageSize) / PageSize,
398 Region->ReleaseInfo.PushedBlocksAtLastRelease =
399 Region->Stats.PushedBlocks;
400 Region->ReleaseInfo.RangesReleased += Recorder.getReleasedRangesCount();
401 Region->ReleaseInfo.LastReleasedBytes = Recorder.getReleasedBytes();
403 Region->ReleaseInfo.LastReleaseAtNs = getMonotonicTime();