Skip to content

Commit

Permalink
Hopefully this is it
Browse files Browse the repository at this point in the history
  • Loading branch information
jdksjolen committed Sep 18, 2024
1 parent 837c778 commit b216210
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 33 deletions.
17 changes: 8 additions & 9 deletions src/hotspot/share/nmt/vmatree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include "precompiled.hpp"
#include "nmt/vmatree.hpp"
#include "utilities/growableArray.hpp"
#include <cinttypes>

const VMATree::RegionData VMATree::empty_regiondata{NativeCallStackStorage::StackIndex{}, mtNone};

Expand Down Expand Up @@ -202,19 +201,19 @@ VMATree::SummaryDiff VMATree::register_mapping(position A, position B, StateType
#ifdef ASSERT
void VMATree::print_on(outputStream* out) {
visit_in_order([&](TreapNode* current) {
out->print(SIZE_FORMAT " (%s) - %s - ", current->key(), NMTUtil::flag_to_name(current->val().out.flag()),
out->print(SIZE_FORMAT " (%s) - %s - ", current->key(), NMTUtil::tag_to_name(current->val().out.mem_tag()),
statetype_to_string(current->val().out.type()));
});
out->cr();
}
#endif

VMATree::SummaryDiff VMATree::set_flag(position from, size size, MEMFLAGS flag) {
VMATree::SummaryDiff VMATree::set_tag(position from, size size, MemTag tag) {
VMATreap::Range range = _tree.find_enclosing_range(from);
assert(range.start != nullptr && range.end != nullptr,
"Setting a flag must be done within existing range");
StateType type = range.start->val().out.type();
RegionData new_data = RegionData(range.start->val().out.stack(), flag);
RegionData new_data = RegionData(range.start->val().out.stack(), tag);

position end = MIN2(from + size, range.end->key());
SummaryDiff diff = register_mapping(from, end, type, new_data);
Expand All @@ -231,7 +230,7 @@ VMATree::SummaryDiff VMATree::set_flag(position from, size size, MEMFLAGS flag)
}
end = MIN2(from + size, range.end->key());
StateType type = range.start->val().out.type();
RegionData new_data = RegionData(range.start->val().out.stack(), flag);
RegionData new_data = RegionData(range.start->val().out.stack(), tag);
SummaryDiff result = register_mapping(from, end, type, new_data);
diff.apply(result);
size = size - (end - from);
Expand All @@ -243,12 +242,12 @@ VMATree::SummaryDiff VMATree::set_flag(position from, size size, MEMFLAGS flag)

#ifdef ASSERT
void VMATree::SummaryDiff::print_on(outputStream* out) {
for (int i = 0; i < mt_number_of_types; i++) {
if (flag[i].reserve == 0 && flag[i].commit == 0) {
for (int i = 0; i < mt_number_of_tags; i++) {
if (tag[i].reserve == 0 && tag[i].commit == 0) {
continue;
}
out->print_cr("Flag %s R: " INT64_FORMAT " C: " INT64_FORMAT, NMTUtil::flag_to_enum_name((MEMFLAGS)i), flag[i].reserve,
flag[i].commit);
out->print_cr("Tag %s R: " INT64_FORMAT " C: " INT64_FORMAT, NMTUtil::tag_to_enum_name((MemTag)i), tag[i].reserve,
tag[i].commit);
}
}
#endif
8 changes: 4 additions & 4 deletions src/hotspot/share/nmt/vmatree.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,9 @@ class VMATree {
}

void apply(SummaryDiff& other) {
for (int i = 0; i < mt_number_of_types; i++) {
flag[i].reserve += other.flag[i].reserve;
flag[i].commit += other.flag[i].commit;
for (int i = 0; i < mt_number_of_tags; i++) {
tag[i].reserve += other.tag[i].reserve;
tag[i].commit += other.tag[i].commit;
}
}

Expand All @@ -187,7 +187,7 @@ class VMATree {
return register_mapping(from, from + sz, StateType::Reserved, metadata);
}

SummaryDiff set_flag(position from, size size, MEMFLAGS flag);
SummaryDiff set_tag(position from, size size, MemTag tag);

SummaryDiff commit_mapping(position from, size sz, const RegionData& metadata) {
return register_mapping(from, from + sz, StateType::Committed, metadata);
Expand Down
40 changes: 20 additions & 20 deletions test/hotspot/gtest/nmt/test_vmatree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ TEST_VM_F(NMTVMATreeTest, LowLevel) {
}

TEST_VM_F(NMTVMATreeTest, SetFlag) {
auto i = [](MEMFLAGS f) -> uint8_t { return (uint8_t)f; };
auto i = [](MemTag f) -> uint8_t { return (uint8_t)f; };

// The gc/cds case with only reserved data
{
Expand All @@ -279,22 +279,22 @@ TEST_VM_F(NMTVMATreeTest, SetFlag) {

VMATree::SummaryDiff result = tree.reserve_mapping(0, 500, rd);
diff.apply(result);
EXPECT_EQ(500, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.tag[i(mtNone)].reserve);

result = tree.reserve_mapping(500, 100, rd);
diff.apply(result);
EXPECT_EQ(600, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(600, diff.tag[i(mtNone)].reserve);

result = tree.set_flag(0, 500, mtGC);
result = tree.set_tag(0, 500, mtGC);
diff.apply(result);
EXPECT_EQ(100, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.flag[i(mtGC)].reserve);
EXPECT_EQ(100, diff.tag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.tag[i(mtGC)].reserve);

result = tree.set_flag(500, 100, mtClassShared);
result = tree.set_tag(500, 100, mtClassShared);
diff.apply(result);
EXPECT_EQ(0, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.flag[i(mtGC)].reserve);
EXPECT_EQ(100, diff.flag[i(mtClassShared)].reserve);
EXPECT_EQ(0, diff.tag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.tag[i(mtGC)].reserve);
EXPECT_EQ(100, diff.tag[i(mtClassShared)].reserve);
}

// Now let's add in some committed data
Expand All @@ -305,7 +305,7 @@ TEST_VM_F(NMTVMATreeTest, SetFlag) {

VMATree::SummaryDiff result = tree.reserve_mapping(0, 600, rd);
diff.apply(result);
EXPECT_EQ(600, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(600, diff.tag[i(mtNone)].reserve);

// The committed areas
result = tree.commit_mapping(100, 125, rd);
Expand All @@ -315,18 +315,18 @@ TEST_VM_F(NMTVMATreeTest, SetFlag) {
result = tree.commit_mapping(565, 10, rd);
diff.apply(result);

// OK, set flag
result = tree.set_flag(0, 500, mtGC);
// OK, set tag
result = tree.set_tag(0, 500, mtGC);
diff.apply(result);
EXPECT_EQ(100, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.flag[i(mtGC)].reserve);
EXPECT_EQ(125, diff.flag[i(mtGC)].commit);
EXPECT_EQ(100, diff.tag[i(mtNone)].reserve);
EXPECT_EQ(500, diff.tag[i(mtGC)].reserve);
EXPECT_EQ(125, diff.tag[i(mtGC)].commit);

result = tree.set_flag(500, 100, mtClassShared);
result = tree.set_tag(500, 100, mtClassShared);
diff.apply(result);
EXPECT_EQ(0, diff.flag[i(mtNone)].reserve);
EXPECT_EQ(100, diff.flag[i(mtClassShared)].reserve);
EXPECT_EQ(20, diff.flag[i(mtClassShared)].commit);
EXPECT_EQ(0, diff.tag[i(mtNone)].reserve);
EXPECT_EQ(100, diff.tag[i(mtClassShared)].reserve);
EXPECT_EQ(20, diff.tag[i(mtClassShared)].commit);
}
}

Expand Down

0 comments on commit b216210

Please sign in to comment.