ksys/gdt: Implement Manager increase functions

This commit is contained in:
Léo Lam
2020-11-11 12:04:58 +01:00
parent e0a8e69d8b
commit 27afd0aa6a
7 changed files with 1232 additions and 19 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7
View File
@@ -184,4 +184,11 @@ GDT_RESET_FLAG_(resetVec4f)
#undef GDT_SET_FLAG_
inline void increaseS32CommonFlag(s32 value, const sead::SafeString& name, s32 sub_idx,
bool debug) {
auto* mgr = Manager::instance();
if (mgr)
mgr->increaseS32CommonFlag(value, name, sub_idx, debug);
}
} // namespace ksys::gdt
+16 -1
View File
@@ -1,6 +1,7 @@
#include "KingSystem/GameData/gdtManager.h"
#include <devenv/seadEnvUtil.h>
#include <framework/seadFramework.h>
#include <mc/seadCoreInfo.h>
#include <thread/seadThreadUtil.h>
#include <time/seadTickTime.h>
#include "KingSystem/GameData/gdtSaveMgr.h"
@@ -70,7 +71,7 @@ void Manager::init(sead::Heap* heap, sead::Framework* framework) {
mGameDataHeap = util::DualHeap::create(0xf00000, "GameDataHeap", heap, nullptr, sizeof(void*),
sead::Heap::cHeapDirection_Forward, true);
mIncrementLogger = new (mGameDataHeap) IncrementLogger;
mIncreaseLogger = new (mGameDataHeap) IncreaseLogger;
SaveMgr::createInstance(mGameDataHeap);
SaveMgr::InitArg arg;
@@ -136,4 +137,18 @@ void Manager::addReinitCallback(sead::DelegateEvent<ReinitEvent*>::Slot&) {
// Stubbed in release builds.
}
void Manager::IncreaseLogger::addRecord(s32 value, const sead::SafeString& name, s32 sub_idx,
bool debug) {
const u32 name_hash = sead::HashCRC32::calcStringHash(name);
const auto core = sead::CoreInfo::getCurrentCoreId();
const u32 platform_core_id = sead::CoreInfo::getPlatformCoreId(core);
Record record;
record.debug = debug;
record.name_hash = name_hash;
record.sub_idx = sub_idx;
record.value = value;
ring_buffers[0][platform_core_id].pushBack(record);
}
} // namespace ksys::gdt
+18 -7
View File
@@ -459,6 +459,15 @@ public:
#undef GDT_RESET_
void increaseS32CommonFlag(s32 value, const sead::SafeString& name, s32 sub_idx, bool debug) {
if (!mIncreaseLogger)
return;
mIncreaseLogger->addRecord(value, name, sub_idx, debug);
if (debug)
onChangedByDebug();
}
void init(sead::Heap* heap, sead::Framework* framework);
void addReinitCallback(ReinitSignal::Slot& slot);
@@ -496,17 +505,19 @@ private:
sead::MethodTreeMgr* method_tree_mgr = nullptr;
};
struct IncrementLogger {
struct IncreaseLogger {
struct Record {
u8 _0 = 0;
u32 _4 = 0;
s32 _8 = -1;
u32 _c = 0;
bool debug = false;
u32 name_hash = 0;
s32 sub_idx = -1;
s32 value = 0;
};
KSYS_CHECK_SIZE_NX150(Record, 0x10);
void addRecord(s32 value, const sead::SafeString& name, s32 sub_idx, bool debug);
u64 _0 = 0;
sead::FixedRingBuffer<Record, 64> ring_buffers[6]{};
sead::SafeArray<sead::FixedRingBuffer<Record, 64>, 3> ring_buffers[2];
sead::SafeArray<Record, 0xc0> arrays[2]{};
};
@@ -561,7 +572,7 @@ private:
TriggerParamRef mParamBypassPerm{&mFlagBuffer1, &mFlagBuffer, false, false, false};
TriggerParamRef mParam{&mFlagBuffer1, &mFlagBuffer, true, false, false};
IncrementLogger* mIncrementLogger = nullptr;
IncreaseLogger* mIncreaseLogger = nullptr;
TriggerParam* mFlagBuffer1;
TriggerParam* mFlagBuffer;