| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 recommitSystemPages(addr, len); | 313 recommitSystemPages(addr, len); |
| 314 root->totalSizeOfCommittedPages += len; | 314 root->totalSizeOfCommittedPages += len; |
| 315 } | 315 } |
| 316 | 316 |
| 317 static ALWAYS_INLINE void* partitionAllocPartitionPages(PartitionRootBase* root,
int flags, uint16_t numPartitionPages) | 317 static ALWAYS_INLINE void* partitionAllocPartitionPages(PartitionRootBase* root,
int flags, uint16_t numPartitionPages) |
| 318 { | 318 { |
| 319 ASSERT(!(reinterpret_cast<uintptr_t>(root->nextPartitionPage) % kPartitionPa
geSize)); | 319 ASSERT(!(reinterpret_cast<uintptr_t>(root->nextPartitionPage) % kPartitionPa
geSize)); |
| 320 ASSERT(!(reinterpret_cast<uintptr_t>(root->nextPartitionPageEnd) % kPartitio
nPageSize)); | 320 ASSERT(!(reinterpret_cast<uintptr_t>(root->nextPartitionPageEnd) % kPartitio
nPageSize)); |
| 321 RELEASE_ASSERT(numPartitionPages <= kNumPartitionPagesPerSuperPage); | 321 RELEASE_ASSERT(numPartitionPages <= kNumPartitionPagesPerSuperPage); |
| 322 size_t totalSize = kPartitionPageSize * numPartitionPages; | 322 size_t totalSize = kPartitionPageSize * numPartitionPages; |
| 323 root->totalSizeOfCommittedPages += totalSize; | |
| 324 size_t numPartitionPagesLeft = (root->nextPartitionPageEnd - root->nextParti
tionPage) >> kPartitionPageShift; | 323 size_t numPartitionPagesLeft = (root->nextPartitionPageEnd - root->nextParti
tionPage) >> kPartitionPageShift; |
| 325 if (LIKELY(numPartitionPagesLeft >= numPartitionPages)) { | 324 if (LIKELY(numPartitionPagesLeft >= numPartitionPages)) { |
| 326 // In this case, we can still hand out pages from the current super page | 325 // In this case, we can still hand out pages from the current super page |
| 327 // allocation. | 326 // allocation. |
| 328 char* ret = root->nextPartitionPage; | 327 char* ret = root->nextPartitionPage; |
| 329 root->nextPartitionPage += totalSize; | 328 root->nextPartitionPage += totalSize; |
| 329 root->totalSizeOfCommittedPages += totalSize; |
| 330 return ret; | 330 return ret; |
| 331 } | 331 } |
| 332 | 332 |
| 333 // Need a new super page. | 333 // Need a new super page. |
| 334 root->totalSizeOfSuperPages += kSuperPageSize; | |
| 335 char* requestedAddress = root->nextSuperPage; | 334 char* requestedAddress = root->nextSuperPage; |
| 336 char* superPage = reinterpret_cast<char*>(allocPages(requestedAddress, kSupe
rPageSize, kSuperPageSize)); | 335 char* superPage = reinterpret_cast<char*>(allocPages(requestedAddress, kSupe
rPageSize, kSuperPageSize)); |
| 337 if (UNLIKELY(!superPage)) | 336 if (UNLIKELY(!superPage)) |
| 338 return 0; | 337 return 0; |
| 338 |
| 339 root->totalSizeOfSuperPages += kSuperPageSize; |
| 340 root->totalSizeOfCommittedPages += totalSize; |
| 341 |
| 339 root->nextSuperPage = superPage + kSuperPageSize; | 342 root->nextSuperPage = superPage + kSuperPageSize; |
| 340 char* ret = superPage + kPartitionPageSize; | 343 char* ret = superPage + kPartitionPageSize; |
| 341 root->nextPartitionPage = ret + totalSize; | 344 root->nextPartitionPage = ret + totalSize; |
| 342 root->nextPartitionPageEnd = root->nextSuperPage - kPartitionPageSize; | 345 root->nextPartitionPageEnd = root->nextSuperPage - kPartitionPageSize; |
| 343 // Make the first partition page in the super page a guard page, but leave a | 346 // Make the first partition page in the super page a guard page, but leave a |
| 344 // hole in the middle. | 347 // hole in the middle. |
| 345 // This is where we put page metadata and also a tiny amount of extent | 348 // This is where we put page metadata and also a tiny amount of extent |
| 346 // metadata. | 349 // metadata. |
| 347 setSystemPagesInaccessible(superPage, kSystemPageSize); | 350 setSystemPagesInaccessible(superPage, kSystemPageSize); |
| 348 setSystemPagesInaccessible(superPage + (kSystemPageSize * 2), kPartitionPage
Size - (kSystemPageSize * 2)); | 351 setSystemPagesInaccessible(superPage + (kSystemPageSize * 2), kPartitionPage
Size - (kSystemPageSize * 2)); |
| (...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 980 printf("total live: %zu bytes\n", totalLive); | 983 printf("total live: %zu bytes\n", totalLive); |
| 981 printf("total resident: %zu bytes\n", totalResident); | 984 printf("total resident: %zu bytes\n", totalResident); |
| 982 printf("total freeable: %zu bytes\n", totalFreeable); | 985 printf("total freeable: %zu bytes\n", totalFreeable); |
| 983 fflush(stdout); | 986 fflush(stdout); |
| 984 } | 987 } |
| 985 | 988 |
| 986 #endif // !NDEBUG | 989 #endif // !NDEBUG |
| 987 | 990 |
| 988 } // namespace WTF | 991 } // namespace WTF |
| 989 | 992 |
| OLD | NEW |