19 PStatCollector BufferResidencyTracker::_gmem_collector(
"Graphics memory");
24 BufferResidencyTracker::
25 BufferResidencyTracker(
const std::string &pgo_name,
const std::string &type_name) :
26 _pgo_collector(_gmem_collector, pgo_name),
27 _active_resident_collector(
PStatCollector(_pgo_collector,
"Active"), type_name),
28 _active_nonresident_collector(
PStatCollector(_pgo_collector,
"Thrashing"), type_name),
29 _inactive_resident_collector(
PStatCollector(_pgo_collector,
"Inactive"), type_name),
30 _inactive_nonresident_collector(
PStatCollector(_pgo_collector,
"Nonresident"), type_name),
38 BufferResidencyTracker::
39 ~BufferResidencyTracker() {
40 _inactive_nonresident_collector.set_level(0);
41 _active_nonresident_collector.set_level(0);
42 _inactive_resident_collector.set_level(0);
43 _active_resident_collector.set_level(0);
53 if (_active_frame != this_frame) {
54 _active_frame = this_frame;
58 move_inactive(_chains[S_inactive_nonresident],
59 _chains[S_active_nonresident]);
60 move_inactive(_chains[S_inactive_resident],
61 _chains[S_active_resident]);
71 _inactive_nonresident_collector.set_level(_chains[S_inactive_nonresident].get_total_size());
72 _active_nonresident_collector.set_level(_chains[S_active_nonresident].get_total_size());
73 _inactive_resident_collector.set_level(_chains[S_inactive_resident].get_total_size());
74 _active_resident_collector.set_level(_chains[S_active_resident].get_total_size());
83 _inactive_nonresident_collector.set_level(_chains[S_inactive_nonresident].get_total_size());
84 _active_nonresident_collector.set_level(_chains[S_active_nonresident].get_total_size());
85 _inactive_resident_collector.set_level(_chains[S_inactive_resident].get_total_size());
86 _active_resident_collector.set_level(_chains[S_active_resident].get_total_size());
92 void BufferResidencyTracker::
93 write(std::ostream &out,
int indent_level)
const {
94 if (_chains[S_inactive_nonresident].get_count() != 0) {
95 indent(out, indent_level) <<
"Inactive nonresident:\n";
96 _chains[S_inactive_nonresident].write(out, indent_level + 2);
99 if (_chains[S_active_nonresident].get_count() != 0) {
100 indent(out, indent_level) <<
"Active nonresident:\n";
101 _chains[S_active_nonresident].write(out, indent_level + 2);
104 if (_chains[S_inactive_resident].get_count() != 0) {
105 indent(out, indent_level) <<
"Inactive resident:\n";
106 _chains[S_inactive_resident].write(out, indent_level + 2);
109 if (_chains[S_active_resident].get_count() != 0) {
110 indent(out, indent_level) <<
"Active resident:\n";
111 _chains[S_active_resident].write(out, indent_level + 2);
118 void BufferResidencyTracker::
121 while (node !=
nullptr) {
122 nassertv((node->_residency_state & S_active) != 0);
123 node->_residency_state &= ~S_active;