| 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 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 | 586 |
| 587 TestShutdown(); | 587 TestShutdown(); |
| 588 } | 588 } |
| 589 | 589 |
| 590 // Test that we can fetch the real allocated size after an allocation. | 590 // Test that we can fetch the real allocated size after an allocation. |
| 591 TEST(WTF_PartitionAlloc, GenericAllocGetSize) | 591 TEST(WTF_PartitionAlloc, GenericAllocGetSize) |
| 592 { | 592 { |
| 593 TestSetup(); | 593 TestSetup(); |
| 594 | 594 |
| 595 void* ptr; | 595 void* ptr; |
| 596 size_t requestedSize, actualSize; | 596 size_t requestedSize, actualSize, predictedSize; |
| 597 | 597 |
| 598 EXPECT_TRUE(partitionAllocSupportsGetSize()); | 598 EXPECT_TRUE(partitionAllocSupportsGetSize()); |
| 599 | 599 |
| 600 // Allocate something small. | 600 // Allocate something small. |
| 601 requestedSize = 511 - kExtraAllocSize; | 601 requestedSize = 511 - kExtraAllocSize; |
| 602 predictedSize = partitionAllocActualSize(genericAllocator.root(), requestedS
ize); |
| 602 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); | 603 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); |
| 603 EXPECT_TRUE(ptr); | 604 EXPECT_TRUE(ptr); |
| 604 actualSize = partitionAllocGetSize(ptr); | 605 actualSize = partitionAllocGetSize(ptr); |
| 606 EXPECT_EQ(predictedSize, actualSize); |
| 605 EXPECT_LT(requestedSize, actualSize); | 607 EXPECT_LT(requestedSize, actualSize); |
| 606 partitionFreeGeneric(genericAllocator.root(), ptr); | 608 partitionFreeGeneric(genericAllocator.root(), ptr); |
| 607 | 609 |
| 608 // Allocate a size that should be a perfect match for a bucket, because it | 610 // Allocate a size that should be a perfect match for a bucket, because it |
| 609 // is an exact power of 2. | 611 // is an exact power of 2. |
| 610 requestedSize = (256 * 1024) - kExtraAllocSize; | 612 requestedSize = (256 * 1024) - kExtraAllocSize; |
| 613 predictedSize = partitionAllocActualSize(genericAllocator.root(), requestedS
ize); |
| 611 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); | 614 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); |
| 612 EXPECT_TRUE(ptr); | 615 EXPECT_TRUE(ptr); |
| 613 actualSize = partitionAllocGetSize(ptr); | 616 actualSize = partitionAllocGetSize(ptr); |
| 617 EXPECT_EQ(predictedSize, actualSize); |
| 614 EXPECT_EQ(requestedSize, actualSize); | 618 EXPECT_EQ(requestedSize, actualSize); |
| 615 partitionFreeGeneric(genericAllocator.root(), ptr); | 619 partitionFreeGeneric(genericAllocator.root(), ptr); |
| 616 | 620 |
| 617 // Allocate a size that is a system page smaller than a bucket. GetSize() | 621 // Allocate a size that is a system page smaller than a bucket. GetSize() |
| 618 // should return a larger size than we asked for now. | 622 // should return a larger size than we asked for now. |
| 619 requestedSize = (256 * 1024) - WTF::kSystemPageSize - kExtraAllocSize; | 623 requestedSize = (256 * 1024) - WTF::kSystemPageSize - kExtraAllocSize; |
| 624 predictedSize = partitionAllocActualSize(genericAllocator.root(), requestedS
ize); |
| 620 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); | 625 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); |
| 621 EXPECT_TRUE(ptr); | 626 EXPECT_TRUE(ptr); |
| 622 actualSize = partitionAllocGetSize(ptr); | 627 actualSize = partitionAllocGetSize(ptr); |
| 628 EXPECT_EQ(predictedSize, actualSize); |
| 623 EXPECT_EQ(requestedSize + WTF::kSystemPageSize, actualSize); | 629 EXPECT_EQ(requestedSize + WTF::kSystemPageSize, actualSize); |
| 624 // Check that we can write at the end of the reported size too. | 630 // Check that we can write at the end of the reported size too. |
| 625 char* charPtr = reinterpret_cast<char*>(ptr); | 631 char* charPtr = reinterpret_cast<char*>(ptr); |
| 626 *(charPtr + (actualSize - 1)) = 'A'; | 632 *(charPtr + (actualSize - 1)) = 'A'; |
| 627 partitionFreeGeneric(genericAllocator.root(), ptr); | 633 partitionFreeGeneric(genericAllocator.root(), ptr); |
| 628 | 634 |
| 629 // Allocate something very large, and uneven. | 635 // Allocate something very large, and uneven. |
| 630 requestedSize = 512 * 1024 * 1024 - 1; | 636 requestedSize = 512 * 1024 * 1024 - 1; |
| 637 predictedSize = partitionAllocActualSize(genericAllocator.root(), requestedS
ize); |
| 631 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); | 638 ptr = partitionAllocGeneric(genericAllocator.root(), requestedSize); |
| 632 EXPECT_TRUE(ptr); | 639 EXPECT_TRUE(ptr); |
| 633 actualSize = partitionAllocGetSize(ptr); | 640 actualSize = partitionAllocGetSize(ptr); |
| 641 EXPECT_EQ(predictedSize, actualSize); |
| 634 EXPECT_LT(requestedSize, actualSize); | 642 EXPECT_LT(requestedSize, actualSize); |
| 635 partitionFreeGeneric(genericAllocator.root(), ptr); | 643 partitionFreeGeneric(genericAllocator.root(), ptr); |
| 636 | 644 |
| 645 // Too large allocation. |
| 646 requestedSize = INT_MAX; |
| 647 predictedSize = partitionAllocActualSize(genericAllocator.root(), requestedS
ize); |
| 648 EXPECT_EQ(requestedSize, predictedSize); |
| 649 |
| 637 TestShutdown(); | 650 TestShutdown(); |
| 638 } | 651 } |
| 639 | 652 |
| 640 // Test the realloc() contract. | 653 // Test the realloc() contract. |
| 641 TEST(WTF_PartitionAlloc, Realloc) | 654 TEST(WTF_PartitionAlloc, Realloc) |
| 642 { | 655 { |
| 643 TestSetup(); | 656 TestSetup(); |
| 644 | 657 |
| 645 // realloc(0, size) should be equivalent to malloc(). | 658 // realloc(0, size) should be equivalent to malloc(). |
| 646 void* ptr = partitionReallocGeneric(genericAllocator.root(), 0, kTestAllocSi
ze); | 659 void* ptr = partitionReallocGeneric(genericAllocator.root(), 0, kTestAllocSi
ze); |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1111 EXPECT_EQ(32u, WTF::countLeadingZerosSizet(0)); | 1124 EXPECT_EQ(32u, WTF::countLeadingZerosSizet(0)); |
| 1112 EXPECT_EQ(31u, WTF::countLeadingZerosSizet(1)); | 1125 EXPECT_EQ(31u, WTF::countLeadingZerosSizet(1)); |
| 1113 EXPECT_EQ(1u, WTF::countLeadingZerosSizet(1 << 30)); | 1126 EXPECT_EQ(1u, WTF::countLeadingZerosSizet(1 << 30)); |
| 1114 EXPECT_EQ(0u, WTF::countLeadingZerosSizet(1 << 31)); | 1127 EXPECT_EQ(0u, WTF::countLeadingZerosSizet(1 << 31)); |
| 1115 #endif | 1128 #endif |
| 1116 } | 1129 } |
| 1117 | 1130 |
| 1118 } // namespace | 1131 } // namespace |
| 1119 | 1132 |
| 1120 #endif // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR) | 1133 #endif // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR) |
| OLD | NEW |