< prev index next >
test/hotspot/gtest/memory/test_virtualspace.cpp
Print this page
rev 52125 : 8171097: Convert TestReservedSpace_test to Gtest
Reviewed-by: duke
rev 52126 : 8177709: Convert TestVirtualSpace_test to GTest
Reviewed-by: duke
rev 52127 : [mq]: 8177709-2
rev 52128 : [mq]: 8171097-2
@@ -27,27 +27,32 @@
#include "oops/oop.hpp"
#include "utilities/align.hpp"
#include "unittest.hpp"
namespace {
+ class MemoryReleaser {
+ ReservedSpace* const _rs;
+ public:
+ MemoryReleaser(ReservedSpace* rs) : _rs(rs) { }
+ ~MemoryReleaser() {
+ if (_rs->special()) {
+ EXPECT_TRUE(os::release_memory_special(_rs->base(), _rs->size()));
+ } else {
+ EXPECT_TRUE(os::release_memory(_rs->base(), _rs->size()));
+ }
+ }
+ };
+
static void small_page_write(void* addr, size_t size) {
size_t page_size = os::vm_page_size();
char* end = (char*) addr + size;
for (char* p = (char*) addr; p < end; p += page_size) {
*p = 1;
}
}
- static void release_memory_for_test(ReservedSpace rs) {
- if (rs.special()) {
- ASSERT_TRUE(os::release_memory_special(rs.base(), rs.size()));
- } else {
- ASSERT_TRUE(os::release_memory(rs.base(), rs.size()));
- }
- }
-
// have to use these functions, as gtest's _PRED macros don't like is_aligned
// nor (is_aligned<size_t, size_t>)
static bool is_size_alignment(size_t size, size_t alignment) {
return is_aligned(size, alignment);
}
@@ -57,25 +62,25 @@
static void test_reserved_size(size_t size) {
ASSERT_PRED2(is_size_alignment, size, os::vm_allocation_granularity());
ReservedSpace rs(size);
+ MemoryReleaser releaser(&rs);
EXPECT_TRUE(rs.base() != NULL) << "rs.special: " << rs.special();
EXPECT_EQ(size, rs.size()) << "rs.special: " << rs.special();
if (rs.special()) {
small_page_write(rs.base(), size);
}
-
- release_memory_for_test(rs);
}
static void test_reserved_size_alignment(size_t size, size_t alignment) {
ASSERT_PRED2(is_size_alignment, size, alignment) << "Incorrect input parameters";
ReservedSpace rs(size, alignment, UseLargePages, (char *) NULL);
+ MemoryReleaser releaser(&rs);
ASSERT_TRUE(rs.base() != NULL) << "rs.special = " << rs.special();
ASSERT_EQ(size, rs.size()) << "rs.special = " << rs.special();
EXPECT_PRED2(is_ptr_alignment, rs.base(), alignment)
@@ -84,12 +89,10 @@
<< "aligned sizes should always give aligned addresses";
if (rs.special()) {
small_page_write(rs.base(), size);
}
-
- release_memory_for_test(rs);
}
static void test_reserved_size_alignment_page_type(size_t size, size_t alignment, bool maybe_large) {
if (size < alignment) {
// Tests might set -XX:LargePageSizeInBytes=<small pages> and cause unexpected input arguments for this test.
@@ -101,19 +104,18 @@
ASSERT_PRED2(is_size_alignment, size, alignment) << "Must be at least AG aligned";
bool large = maybe_large && UseLargePages && size >= os::large_page_size();
ReservedSpace rs(size, alignment, large, false);
+ MemoryReleaser releaser(&rs);
EXPECT_TRUE(rs.base() != NULL) << "rs.special: " << rs.special();
EXPECT_EQ(size, rs.size()) << "rs.special: " << rs.special();
if (rs.special()) {
small_page_write(rs.base(), size);
}
-
- release_memory_for_test(rs);
}
}
TEST_VM(ReservedSpace, size_alignment) {
size_t size = 2 * 1024 * 1024;
@@ -155,12 +157,18 @@
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(ag * 4, ag * 2, false));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(ag * 8, ag * 2, false));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(ag * 4, ag * 4, false));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(ag * 8, ag * 4, false));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(ag * 16, ag * 4, false));
+}
- if (UseLargePages) {
+TEST_VM(ReservedSpace, size_alignment_page_type_large_page) {
+ if (!UseLargePages) {
+ return;
+ }
+
+ size_t ag = os::vm_allocation_granularity();
size_t lp = os::large_page_size();
// Without large pages
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp, ag * 4, false));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp * 2, ag * 4, false));
@@ -180,11 +188,10 @@
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp * 2, lp , true));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp * 3, lp , true));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp * 2, lp * 2, true));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp * 4, lp * 2, true));
EXPECT_NO_FATAL_FAILURE(test_reserved_size_alignment_page_type(lp * 8, lp * 2, true));
- }
}
namespace {
enum TestLargePages {
Default,
< prev index next >