jak-project/test/offline/config/config.cpp
Tyler Wilding 9c631e11fe
offline-test: Partition by DGO and colorize/condense output (#2045)
This solves two main problems:
- the looming threat of running out of memory since every thread would
consume duplicate (and probably not needed) resources
- though I will point out, jak 2's offline tests seem to hardly use any
memory even with 400+ files, duplicated across many threads. Where as
jak 1 does indeed use tons more memory. So I think there is something
going on besides just the source files
- condense the output so it's much easier to see what is happening / how
close the test is to completing.
- one annoying thing about the multiple thread change was errors were
typically buried far in the middle of the output, this fixes that
- refactors the offline test code in general to be a lot more modular

The pretty printing is not enabled by default, run with `-p` or
`--pretty-print` if you want to use it


https://user-images.githubusercontent.com/13153231/205513212-a65c20d4-ce36-44f6-826a-cd475505dbf9.mp4
2022-12-22 13:41:33 -05:00

37 lines
1.6 KiB
C++

#include "config.h"
#include "common/log/log.h"
#include "common/util/FileUtil.h"
#include "common/util/json_util.h"
OfflineTestConfig::OfflineTestConfig(const std::string_view& _game_name,
const std::string& _iso_data_path,
const u32 _num_threads,
const bool _dump_mode,
const bool _fail_on_cmp,
const bool _fail_on_compile,
const bool _pretty_print)
: game_name(_game_name),
iso_data_path(_iso_data_path),
num_threads(_num_threads),
dump_mode(_dump_mode),
fail_on_cmp(_fail_on_cmp),
fail_on_compile(_fail_on_compile),
pretty_print(_pretty_print) {
lg::info("Reading Configuration...");
auto json_file_path =
file_util::get_jak_project_dir() / "test" / "offline" / "config" / game_name / "config.jsonc";
if (!fs::exists(json_file_path)) {
lg::error("Couldn't load configuration, '{}' doesn't exist", json_file_path.string());
throw std::exception();
}
auto json = parse_commented_json(file_util::read_text_file(json_file_path.string()),
json_file_path.string());
dgos = json["dgos"].get<std::vector<std::string>>();
skip_compile_files = json["skip_compile_files"].get<std::unordered_set<std::string>>();
skip_compile_functions = json["skip_compile_functions"].get<std::unordered_set<std::string>>();
skip_compile_states =
json["skip_compile_states"]
.get<std::unordered_map<std::string, std::unordered_set<std::string>>>();
}