1057 |
1057 |
1058 /////////////// Unit tests /////////////// |
1058 /////////////// Unit tests /////////////// |
1059 |
1059 |
1060 #ifndef PRODUCT |
1060 #ifndef PRODUCT |
1061 |
1061 |
1062 #define test_log(...) \ |
|
1063 do {\ |
|
1064 if (VerboseInternalVMTests) { \ |
|
1065 tty->print_cr(__VA_ARGS__); \ |
|
1066 tty->flush(); \ |
|
1067 }\ |
|
1068 } while (false) |
|
1069 |
|
1070 class TestReservedSpace : AllStatic { |
1062 class TestReservedSpace : AllStatic { |
1071 public: |
1063 public: |
1072 static void small_page_write(void* addr, size_t size) { |
1064 static void small_page_write(void* addr, size_t size) { |
1073 size_t page_size = os::vm_page_size(); |
1065 size_t page_size = os::vm_page_size(); |
1074 |
1066 |
1085 guarantee(os::release_memory(rs.base(), rs.size()), "Shouldn't fail"); |
1077 guarantee(os::release_memory(rs.base(), rs.size()), "Shouldn't fail"); |
1086 } |
1078 } |
1087 } |
1079 } |
1088 |
1080 |
1089 static void test_reserved_space1(size_t size, size_t alignment) { |
1081 static void test_reserved_space1(size_t size, size_t alignment) { |
1090 test_log("test_reserved_space1(%p)", (void*) (uintptr_t) size); |
|
1091 |
|
1092 assert(is_aligned(size, alignment), "Incorrect input parameters"); |
1082 assert(is_aligned(size, alignment), "Incorrect input parameters"); |
1093 |
1083 |
1094 ReservedSpace rs(size, // size |
1084 ReservedSpace rs(size, // size |
1095 alignment, // alignment |
1085 alignment, // alignment |
1096 UseLargePages, // large |
1086 UseLargePages, // large |
1097 (char *)NULL); // requested_address |
1087 (char *)NULL); // requested_address |
1098 |
1088 |
1099 test_log(" rs.special() == %d", rs.special()); |
|
1100 |
|
1101 assert(rs.base() != NULL, "Must be"); |
1089 assert(rs.base() != NULL, "Must be"); |
1102 assert(rs.size() == size, "Must be"); |
1090 assert(rs.size() == size, "Must be"); |
1103 |
1091 |
1104 assert(is_aligned(rs.base(), alignment), "aligned sizes should always give aligned addresses"); |
1092 assert(is_aligned(rs.base(), alignment), "aligned sizes should always give aligned addresses"); |
1105 assert(is_aligned(rs.size(), alignment), "aligned sizes should always give aligned addresses"); |
1093 assert(is_aligned(rs.size(), alignment), "aligned sizes should always give aligned addresses"); |
1110 |
1098 |
1111 release_memory_for_test(rs); |
1099 release_memory_for_test(rs); |
1112 } |
1100 } |
1113 |
1101 |
1114 static void test_reserved_space2(size_t size) { |
1102 static void test_reserved_space2(size_t size) { |
1115 test_log("test_reserved_space2(%p)", (void*)(uintptr_t)size); |
|
1116 |
|
1117 assert(is_aligned(size, os::vm_allocation_granularity()), "Must be at least AG aligned"); |
1103 assert(is_aligned(size, os::vm_allocation_granularity()), "Must be at least AG aligned"); |
1118 |
1104 |
1119 ReservedSpace rs(size); |
1105 ReservedSpace rs(size); |
1120 |
|
1121 test_log(" rs.special() == %d", rs.special()); |
|
1122 |
1106 |
1123 assert(rs.base() != NULL, "Must be"); |
1107 assert(rs.base() != NULL, "Must be"); |
1124 assert(rs.size() == size, "Must be"); |
1108 assert(rs.size() == size, "Must be"); |
1125 |
1109 |
1126 if (rs.special()) { |
1110 if (rs.special()) { |
1129 |
1113 |
1130 release_memory_for_test(rs); |
1114 release_memory_for_test(rs); |
1131 } |
1115 } |
1132 |
1116 |
1133 static void test_reserved_space3(size_t size, size_t alignment, bool maybe_large) { |
1117 static void test_reserved_space3(size_t size, size_t alignment, bool maybe_large) { |
1134 test_log("test_reserved_space3(%p, %p, %d)", |
|
1135 (void*)(uintptr_t)size, (void*)(uintptr_t)alignment, maybe_large); |
|
1136 |
|
1137 if (size < alignment) { |
1118 if (size < alignment) { |
1138 // Tests might set -XX:LargePageSizeInBytes=<small pages> and cause unexpected input arguments for this test. |
1119 // Tests might set -XX:LargePageSizeInBytes=<small pages> and cause unexpected input arguments for this test. |
1139 assert((size_t)os::vm_page_size() == os::large_page_size(), "Test needs further refinement"); |
1120 assert((size_t)os::vm_page_size() == os::large_page_size(), "Test needs further refinement"); |
1140 return; |
1121 return; |
1141 } |
1122 } |
1144 assert(is_aligned(size, alignment), "Must be at least aligned against alignment"); |
1125 assert(is_aligned(size, alignment), "Must be at least aligned against alignment"); |
1145 |
1126 |
1146 bool large = maybe_large && UseLargePages && size >= os::large_page_size(); |
1127 bool large = maybe_large && UseLargePages && size >= os::large_page_size(); |
1147 |
1128 |
1148 ReservedSpace rs(size, alignment, large, false); |
1129 ReservedSpace rs(size, alignment, large, false); |
1149 |
|
1150 test_log(" rs.special() == %d", rs.special()); |
|
1151 |
1130 |
1152 assert(rs.base() != NULL, "Must be"); |
1131 assert(rs.base() != NULL, "Must be"); |
1153 assert(rs.size() == size, "Must be"); |
1132 assert(rs.size() == size, "Must be"); |
1154 |
1133 |
1155 if (rs.special()) { |
1134 if (rs.special()) { |