26 #ifndef SHARE_MEMORY_METASPACE_TESTHELPERS_HPP
27 #define SHARE_MEMORY_METASPACE_TESTHELPERS_HPP
28
29 #include "memory/allocation.hpp"
30 #include "memory/metaspace.hpp"
31 #include "memory/metaspace/commitLimiter.hpp"
32 #include "memory/metaspace/counters.hpp"
33 #include "memory/metaspace/metaspaceContext.hpp"
34 #include "memory/virtualspace.hpp"
35 #include "utilities/globalDefinitions.hpp"
36
37 // This is just convenience classes for metaspace-related tests
38 // (jtreg, via whitebox API, and gtests)
39
40 class ReservedSpace;
41 class Mutex;
42 class outputStream;
43
44 namespace metaspace {
45
46 class MetaspaceContext;
47 class MetaspaceArena;
48
49 // Wraps a MetaspaceTestArena with its own lock for testing purposes.
50 class MetaspaceTestArena : public CHeapObj<mtInternal> {
51
52 Mutex* const _lock;
53 MetaspaceArena* const _arena;
54
55 public:
56
57 const MetaspaceArena* arena() const {
58 return _arena;
59 }
60
61 MetaspaceTestArena(Mutex* lock, MetaspaceArena* arena);
62 ~MetaspaceTestArena();
63
64 MetaWord* allocate(size_t word_size);
65 void deallocate(MetaWord* p, size_t word_size);
66
67 };
68
69 // Wraps an instance of a MetaspaceContext together with some side objects for easy use in test beds (whitebox, gtests)
70 class MetaspaceTestContext : public CHeapObj<mtInternal> {
71
72 const char* const _name;
73 const size_t _reserve_limit;
74 const size_t _commit_limit;
75
76 MetaspaceContext* _context;
77 CommitLimiter _commit_limiter;
78 SizeAtomicCounter _used_words_counter;
79
80 // For non-expandable contexts we keep track of the space
81 // and delete it at destruction time.
82 ReservedSpace _rs;
83
84 public:
85
86 // Note: limit == 0 means unlimited
|
26 #ifndef SHARE_MEMORY_METASPACE_TESTHELPERS_HPP
27 #define SHARE_MEMORY_METASPACE_TESTHELPERS_HPP
28
29 #include "memory/allocation.hpp"
30 #include "memory/metaspace.hpp"
31 #include "memory/metaspace/commitLimiter.hpp"
32 #include "memory/metaspace/counters.hpp"
33 #include "memory/metaspace/metaspaceContext.hpp"
34 #include "memory/virtualspace.hpp"
35 #include "utilities/globalDefinitions.hpp"
36
37 // This is just convenience classes for metaspace-related tests
38 // (jtreg, via whitebox API, and gtests)
39
40 class ReservedSpace;
41 class Mutex;
42 class outputStream;
43
44 namespace metaspace {
45
46 struct ArenaStats;
47 class MetaspaceContext;
48 class MetaspaceArena;
49
50 // Wraps a MetaspaceTestArena with its own lock for testing purposes.
51 class MetaspaceTestArena : public CHeapObj<mtInternal> {
52
53 Mutex* const _lock;
54 MetaspaceArena* const _arena;
55
56 public:
57
58 const MetaspaceArena* arena() const {
59 return _arena;
60 }
61
62 MetaspaceTestArena(Mutex* lock, MetaspaceArena* arena);
63 ~MetaspaceTestArena();
64
65 MetaWord* allocate(size_t word_size);
66 MetaWord* allocate_for_klass(size_t word_size);
67 MetaWord* allocate_from_freeblocks_only(size_t word_size);
68 void deallocate(MetaWord* p, size_t word_size);
69 void add_to_statistics(ArenaStats* out) const;
70 };
71
72 // Wraps an instance of a MetaspaceContext together with some side objects for easy use in test beds (whitebox, gtests)
73 class MetaspaceTestContext : public CHeapObj<mtInternal> {
74
75 const char* const _name;
76 const size_t _reserve_limit;
77 const size_t _commit_limit;
78
79 MetaspaceContext* _context;
80 CommitLimiter _commit_limiter;
81 SizeAtomicCounter _used_words_counter;
82
83 // For non-expandable contexts we keep track of the space
84 // and delete it at destruction time.
85 ReservedSpace _rs;
86
87 public:
88
89 // Note: limit == 0 means unlimited
|