13GameScene::GameScene() {
14 m_heap->setName(
"DefaultGameSceneHeap");
18 m_totalMemoryUsed = 0;
19 EGG::ExpHeap *heap = EGG::Heap::dynamicCastToExp(m_heap);
22 heap->calcGroupSize(&m_groupSizeRecord);
23 for (
u16 groupID = 0; groupID < m_groupSizeRecord.size(); ++groupID) {
24 m_totalMemoryUsed += m_groupSizeRecord.getGroupSize(groupID);
30GameScene::~GameScene() {
34 EGG::ExpHeap *heap = EGG::Heap::dynamicCastToExp(m_heap);
37 heap->calcGroupSize(&m_groupSizeRecord);
39 for (
u16 groupID = 0; groupID < m_groupSizeRecord.size(); ++groupID) {
40 sum += m_groupSizeRecord.getGroupSize(groupID);
43 if (sum > m_totalMemoryUsed) {
44 WARN(
"MEMORY LEAK DETECTED: %zu bytes", sum - m_totalMemoryUsed);
51void GameScene::calc() {
52 System::KPadDirector::Instance()->calc();
58void GameScene::enter() {
64void GameScene::exit() {
70void GameScene::reinit() {
72 if (m_nextSceneId < 0) {
76 m_sceneMgr->changeSiblingScene(m_nextSceneId);
81void GameScene::initCamera() {
82 Render::KartCamera::Instance()->init();
86void GameScene::calcCamera() {
87 Render::KartCamera::Instance()->calc();
97 : archive(archive), id(
id) {}
100void GameScene::initScene() {
102 System::KPadDirector::Instance()->reset();
110void GameScene::deinitScene() {
111 if (m_nextSceneId >= 0) {
116 System::KPadDirector::Instance()->clear();
120void GameScene::unmountResources() {
121 auto *resourceManager = System::ResourceManager::Instance();
123 Resource *resource = *iter;
124 resourceManager->unmount(resource->archive);
131void GameScene::checkMemory() {
132 EGG::ExpHeap *heap = EGG::Heap::dynamicCastToExp(m_heap);
135 heap->calcGroupSize(&m_groupSizeRecord);
136 size_t defaultSize = m_groupSizeRecord.getGroupSize(
static_cast<u16>(GroupID::None));
145 size_t initialAllocSize = blockHead->m_size;
146 ASSERT(defaultSize >= initialAllocSize);
148 defaultSize -= initialAllocSize;
149 if (defaultSize > 0) {
150 WARN(
"Default memory usage found! %zu bytes", defaultSize);
153 for (
u16 groupID = 1; groupID < m_groupSizeRecord.size(); ++groupID) {
154 size_t size = m_groupSizeRecord.getGroupSize(groupID);
159 DEBUG(
"Group ID %d: Allocated %zu bytes", groupID, size);
163void GameScene::getMemoryLeakTags() {
164 size_t count = getMemoryLeakTagCount();
170 for (
auto &tag : tags) {
174 EGG::Heap::dynamicCastToExp(m_heap)->dynamicCastHandleToExp()->visitAllocated(ViewTags,
177 DEBUG(
"TAGGED MEMORY BLOCKS:");
178 printf(
"[%d", tags[0]);
179 for (u32 i = 1; i < tags.
size(); ++i) {
180 printf(
", %d", tags[i]);
185size_t GameScene::getMemoryLeakTagCount() {
187 EGG::Heap::dynamicCastToExp(m_heap)->dynamicCastHandleToExp()->visitAllocated(IncreaseTagCount,
197 for (
auto &tag : *span) {
199 tag = blockHead->m_tag;
207 size_t &count = *
reinterpret_cast<size_t *
>(param);