--- a/test/hotspot/gtest/metaspace/test_leftOverBins.cpp Mon Nov 25 16:35:14 2019 +0100
+++ b/test/hotspot/gtest/metaspace/test_leftOverBins.cpp Tue Nov 26 11:29:20 2019 +0100
@@ -29,36 +29,24 @@
#include "metaspaceTestsCommon.hpp"
-class LeftOverBinsTest {
-
- // A simple preallocated buffer used to "feed" the allocator.
- // Mimicks chunk retirement leftover blocks.
- class FeederBuffer {
-
- static const size_t buf_word_size = 512 * K;
- MetaWord* _buf;
- size_t _used;
-
- public:
+#define CHECK_LOM_CONTENT(lom, num_blocks_expected, word_size_expected) \
+{ \
+ if (word_size_expected > 0) { \
+ EXPECT_FALSE(lom.is_empty()); \
+ } else { \
+ EXPECT_TRUE(lom.is_empty()); \
+ } \
+ EXPECT_EQ(lom.total_word_size(), (size_t)word_size_expected); \
+ metaspace::block_stats_t s; \
+ memset(&s, 0xDD, sizeof(s)); \
+ lom.statistics(&s); \
+ EXPECT_EQ((size_t)word_size_expected, s.word_size); \
+ if (num_blocks_expected >= 0) { \
+ EXPECT_EQ(num_blocks_expected, s.num_blocks); \
+ } \
+}
- FeederBuffer() : _used(0) {
- _buf = NEW_C_HEAP_ARRAY(MetaWord, buf_word_size, mtInternal);
- }
-
- ~FeederBuffer() {
- FREE_C_HEAP_ARRAY(MetaWord, _buf);
- }
-
- MetaWord* get(size_t word_size) {
- if (_used > (buf_word_size - word_size)) {
- return NULL;
- }
- MetaWord* p = _buf + _used;
- _used += word_size;
- return p;
- }
-
- };
+class LeftOverBinsTest {
FeederBuffer _fb;
LeftOverManager _lom;
@@ -80,7 +68,6 @@
// Array of the same size as the pool max capacity; holds the allocated elements.
allocation_t* _allocations;
-
int _num_allocs;
int _num_deallocs;
int _num_feeds;
@@ -187,14 +174,16 @@
public:
LeftOverBinsTest(size_t avg_alloc_size) :
- _fb(), _lom(),
+ _fb(512 * K), _lom(),
_rgen_feeding(128, 4096),
_rgen_allocations(avg_alloc_size / 4, avg_alloc_size * 2, 0.01f, avg_alloc_size / 3, avg_alloc_size * 30),
_allocations(NULL),
_num_allocs(0), _num_deallocs(0), _num_feeds(0)
{
+ CHECK_LOM_CONTENT(_lom, 0, 0);
// some initial feeding
_lom.add_block(_fb.get(1024), 1024);
+ CHECK_LOM_CONTENT(_lom, 1, 1024);
}
@@ -222,21 +211,18 @@
LeftOverManager lom;
MetaWord tmp[1024];
metaspace::block_stats_t stats;
+ CHECK_LOM_CONTENT(lom, 0, 0);
lom.add_block(tmp, 1024);
DEBUG_ONLY(lom.verify();)
-
- lom.statistics(&stats);
- EXPECT_EQ(stats.num_blocks, 1);
- EXPECT_EQ(stats.word_size, (size_t)1024);
+ ASSERT_FALSE(lom.is_empty());
+ CHECK_LOM_CONTENT(lom, 1, 1024);
MetaWord* p = lom.get_block(1024);
EXPECT_EQ(p, tmp);
DEBUG_ONLY(lom.verify();)
+ CHECK_LOM_CONTENT(lom, 0, 0);
- lom.statistics(&stats);
- EXPECT_EQ(stats.num_blocks, 0);
- EXPECT_EQ(stats.word_size, (size_t)0);
}
TEST_VM(metaspace, leftoverbins_small) {