mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-07 05:28:52 +00:00
85 lines
2.8 KiB
C++
85 lines
2.8 KiB
C++
/*
|
|
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
#ifdef _WINDOWS
|
|
|
|
#include "gc/z/zGlobals.hpp"
|
|
#include "gc/z/zList.inline.hpp"
|
|
#include "gc/z/zVirtualMemory.inline.hpp"
|
|
#include "gc/z/zVirtualMemoryManager.inline.hpp"
|
|
#include "runtime/os.hpp"
|
|
#include "zunittest.hpp"
|
|
|
|
using namespace testing;
|
|
|
|
class ZMapperTest : public ZTest {
|
|
private:
|
|
static constexpr size_t ReservationSize = 3 * ZGranuleSize;
|
|
|
|
ZAddressReserver _zaddress_reserver;
|
|
ZVirtualMemoryReserver* _reserver;
|
|
ZVirtualMemoryRegistry* _registry;
|
|
|
|
public:
|
|
virtual void SetUp() {
|
|
_zaddress_reserver.SetUp(ReservationSize);
|
|
_reserver = _zaddress_reserver.reserver();
|
|
_registry = _zaddress_reserver.registry();
|
|
|
|
if (_reserver->reserved() < ReservationSize || !_registry->is_contiguous()) {
|
|
GTEST_SKIP() << "Fixture failed to reserve adequate memory, reserved "
|
|
<< (_reserver->reserved() >> ZGranuleSizeShift) << " * ZGranuleSize";
|
|
}
|
|
}
|
|
|
|
virtual void TearDown() {
|
|
// Best-effort cleanup
|
|
_registry = nullptr;
|
|
_reserver = nullptr;
|
|
_zaddress_reserver.TearDown();
|
|
}
|
|
|
|
void test_unreserve() {
|
|
ZVirtualMemory bottom = _registry->remove_from_low(ZGranuleSize);
|
|
ZVirtualMemory middle = _registry->remove_from_low(ZGranuleSize);
|
|
ZVirtualMemory top = _registry->remove_from_low(ZGranuleSize);
|
|
|
|
ASSERT_EQ(bottom, ZVirtualMemory(bottom.start(), ZGranuleSize));
|
|
ASSERT_EQ(middle, ZVirtualMemory(bottom.start() + 1 * ZGranuleSize, ZGranuleSize));
|
|
ASSERT_EQ(top, ZVirtualMemory(bottom.start() + 2 * ZGranuleSize, ZGranuleSize));
|
|
|
|
// Unreserve the middle part
|
|
_reserver->unreserve(middle);
|
|
|
|
// Make sure that we still can unreserve the memory before and after
|
|
_reserver->unreserve(bottom);
|
|
_reserver->unreserve(top);
|
|
}
|
|
};
|
|
|
|
TEST_VM_F(ZMapperTest, test_unreserve) {
|
|
test_unreserve();
|
|
}
|
|
|
|
#endif // _WINDOWS
|