trying to make savegame collecting faster

This commit is contained in:
minjaesong
2023-09-21 00:01:50 +09:00
parent 5957f70ff8
commit 8508956ad6
5 changed files with 91 additions and 58 deletions

View File

@@ -1581,17 +1581,18 @@ public class App implements ApplicationListener {
public static void printdbg(Object obj, Object message) {
if (IS_DEVELOPMENT_BUILD) {
var timeNow = getTIME_T();
var ss = timeNow % 60;
var mm = (timeNow / 60) % 60;
var hh = (timeNow / 3600) % 24;
var timeNow = System.currentTimeMillis();
var ss = (timeNow / 1000) % 60;
var mm = (timeNow / 60000) % 60;
var hh = (timeNow / 3600000) % 24;
var ms = timeNow % 1000;
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
String prompt = csiG+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csi0,out);
String prompt = csiG+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csi0,out);
if (message == null) {
System.out.println(prompt+"null");
}
else {
String indentation = " ".repeat(out.length() + 11);
String indentation = " ".repeat(out.length() + 15);
String[] msgLines = message.toString().split("\\n");
for (int i = 0; i < msgLines.length; i++) {
System.out.println((i == 0 ? prompt : indentation) + msgLines[i]);
@@ -1602,12 +1603,13 @@ public class App implements ApplicationListener {
public static void printdbgerr(Object obj, Object message) {
if (IS_DEVELOPMENT_BUILD) {
var timeNow = getTIME_T();
var ss = timeNow % 60;
var mm = (timeNow / 60) % 60;
var hh = (timeNow / 3600) % 24;
var timeNow = System.currentTimeMillis();
var ss = (timeNow / 1000) % 60;
var mm = (timeNow / 60000) % 60;
var hh = (timeNow / 3600000) % 24;
var ms = timeNow % 1000;
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
String prompt = csiB+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csiR,out);
String prompt = csiB+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csiR,out);
if (message == null) {
System.out.println(prompt+"null"+csi0);
}
@@ -1622,12 +1624,13 @@ public class App implements ApplicationListener {
}
public static void printmsg(Object obj, Object message) {
var timeNow = getTIME_T();
var ss = timeNow % 60;
var mm = (timeNow / 60) % 60;
var hh = (timeNow / 3600) % 24;
var timeNow = System.currentTimeMillis();
var ss = (timeNow / 1000) % 60;
var mm = (timeNow / 60000) % 60;
var hh = (timeNow / 3600000) % 24;
var ms = timeNow % 1000;
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
String prompt = csiG+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csi0,out);
String prompt = csiG+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csi0,out);
if (message == null)
System.out.println(prompt+"null");
else
@@ -1635,12 +1638,13 @@ public class App implements ApplicationListener {
}
public static void printmsgerr(Object obj, Object message) {
var timeNow = getTIME_T();
var ss = timeNow % 60;
var mm = (timeNow / 60) % 60;
var hh = (timeNow / 3600) % 24;
var timeNow = System.currentTimeMillis();
var ss = (timeNow / 1000) % 60;
var mm = (timeNow / 60000) % 60;
var hh = (timeNow / 3600000) % 24;
var ms = timeNow % 1000;
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
String prompt = csiB+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csiR,out);
String prompt = csiB+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csiR,out);
if (message == null)
System.out.println(prompt+"null"+csi0);
else

View File

@@ -44,8 +44,13 @@ class SavegameCollection(files0: List<DiskSkimmer>) {
}
companion object {
fun collectFromBaseFilename(basedir: File, name: String): SavegameCollection {
val files = basedir.listFiles().filter { it.name.startsWith(name) }
fun collectFromBaseFilename(skimmers: List<DiskSkimmer>, name: String): SavegameCollection {
return SavegameCollection(skimmers)
}
fun collectFromBaseFilename(dir: File, name: String): SavegameCollection {
val files = dir.listFiles().filter { it.name.startsWith(name) }
.mapNotNull { try { DiskSkimmer(it, true) } catch (e: Throwable) { null } }
return SavegameCollection(files)
}

View File

@@ -189,7 +189,7 @@ object Terrarum : Disposable {
fun setCurrentIngameInstance(ingame: IngameInstance) {
this.ingame = ingame
printdbg(this, "Accepting new ingame instance '${ingame.javaClass.canonicalName}', called by:")
printdbg("ListSavegames", "Accepting new ingame instance '${ingame.javaClass.canonicalName}', called by:")
printStackTrace(this)
}
@@ -204,7 +204,7 @@ object Terrarum : Disposable {
/*fun resize(width: Int, height: Int) {
ingame?.resize(width, height)
printdbg(this, "newsize: ${Gdx.graphics.width}x${Gdx.graphics.height} | internal: ${width}x$height")
printdbg("ListSavegames", "newsize: ${Gdx.graphics.width}x${Gdx.graphics.height} | internal: ${width}x$height")
}*/
@@ -786,11 +786,10 @@ fun AppUpdateListOfSavegames() {
App.savegamePlayers.clear()
App.savegamePlayersName.clear()
println("Listing saved worlds...")
// create list of worlds
File(worldsDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
printdbg("ListSavegames", "Listing saved worlds...")
val worldsDirLs = File(worldsDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
try {
DiskSkimmer(file, true)
}
@@ -799,19 +798,30 @@ fun AppUpdateListOfSavegames() {
e.printStackTrace()
null
}
}.sortedByDescending { it.getLastModifiedTime() }.forEachIndexed { index, it ->
println("${index+1}.\t${it.diskFile.absolutePath}")
// it.rebuild()
}.sortedByDescending { it.getLastModifiedTime() }
val filteringResults = arrayListOf<List<DiskSkimmer>>()
worldsDirLs.forEach {
val li = arrayListOf(it)
listOf(".1",".2",".3",".a",".b",".c").forEach { suffix ->
val file = File(it.diskFile.absolutePath + suffix)
try {
val d = DiskSkimmer(file, true)
li.add(d)
}
catch (e: Throwable) {}
}
filteringResults.add(li)
}
filteringResults.forEachIndexed { index, list ->
val it = list.first()
printdbg("ListSavegames", " ${index+1}.\t${it.diskFile.absolutePath}")
// val jsonFile = it.getFile(SAVEGAMEINFO)!!
// var worldUUID: UUID? = null
// JsonFetcher.readFromJsonString(ByteArray64Reader(jsonFile.bytes, Common.CHARSET)).forEachSiblings { name, value ->
// if (name == "worldIndex") worldUUID = UUID.fromString(value.asString())
// }
val collection = SavegameCollection.collectFromBaseFilename(File(worldsDir), it.diskFile.name)
printdbg("ListSavegames", " collecting...")
val collection = SavegameCollection.collectFromBaseFilename(list, it.diskFile.name)
printdbg("ListSavegames", " get UUID...")
val worldUUID = collection.getUUID()
printdbg("ListSavegames", " registration...")
// if multiple valid savegames with same UUID exist, only the most recent one is retained
if (!App.savegameWorlds.contains(worldUUID)) {
App.savegameWorlds[worldUUID] = collection
@@ -821,32 +831,41 @@ fun AppUpdateListOfSavegames() {
}
println("Listing saved players...")
// create list of players
File(playersDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
printdbg("ListSavegames", "Listing saved players...")
val playersDirLs = File(playersDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
try {
DiskSkimmer(file, true)
}
catch (e: Throwable) {
System.err.println("Unable to load a player file ${file.absolutePath}")
System.err.println("Unable to load a world file ${file.absolutePath}")
e.printStackTrace()
null
}
}.sortedByDescending { it.getLastModifiedTime() }.forEachIndexed { index, it ->
println("${index+1}.\t${it.diskFile.absolutePath}")
// it.rebuild()
}.sortedByDescending { it.getLastModifiedTime() }
val filteringResults2 = arrayListOf<List<DiskSkimmer>>()
playersDirLs.forEach {
val li = arrayListOf(it)
listOf(".1",".2",".3",".a",".b",".c").forEach { suffix ->
val file = File(it.diskFile.absolutePath + suffix)
try {
val d = DiskSkimmer(file, true)
li.add(d)
}
catch (e: Throwable) {}
}
filteringResults2.add(li)
}
filteringResults2.forEachIndexed { index, list ->
val it = list.first()
printdbg("ListSavegames", " ${index+1}.\t${it.diskFile.absolutePath}")
// val jsonFile = it.getFile(SAVEGAMEINFO)!!
// var playerUUID: UUID? = null
// JsonFetcher.readFromJsonString(ByteArray64Reader(jsonFile.bytes, Common.CHARSET)).forEachSiblings { name, value ->
// if (name == "uuid") playerUUID = UUID.fromString(value.asString())
// }
val collection = SavegameCollection.collectFromBaseFilename(File(playersDir), it.diskFile.name)
printdbg("ListSavegames", " collecting...")
val collection = SavegameCollection.collectFromBaseFilename(list, it.diskFile.name)
printdbg("ListSavegames", " get UUID...")
val playerUUID = collection.getUUID()
printdbg("ListSavegames", " registration...")
// if multiple valid savegames with same UUID exist, only the most recent one is retained
if (!App.savegamePlayers.contains(playerUUID)) {
App.savegamePlayers[playerUUID] = collection

View File

@@ -45,6 +45,8 @@ fun main() {
// write pixels
for (gammaPair in 0..1) {
val gamma = if (gammaPair == 0) HALF_PI else 3* HALF_PI
for (albedo0 in 0 until Skybox.albedoCnt) {
val albedo = Skybox.albedos[albedo0]
println("Albedo=$albedo")
@@ -74,9 +76,9 @@ fun main() {
// println("$yp\t$theta")
val xyz = CIEXYZ(
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, HALF_PI, 0).toFloat(),
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, HALF_PI, 1).toFloat(),
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, HALF_PI, 2).toFloat()
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, gamma, 0).toFloat(),
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, gamma, 1).toFloat(),
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, gamma, 2).toFloat()
)
val xyz2 = xyz.scaleToFit(elevationDeg)
val rgb = xyz2.toRGB().toColor()

View File

@@ -520,7 +520,10 @@ class UIItemPlayerCells(
private val isImported: Boolean
init {
App.savegamePlayers[playerUUID]!!.loadable().getFile(SAVEGAMEINFO)?.bytes?.let {
val loadable = App.savegamePlayers[playerUUID]!!.loadable()
printdbg(this, "UUID: ${playerUUID}")
printdbg(this, "File: ${loadable.diskFile.absolutePath}")
loadable.getFile(SAVEGAMEINFO)?.bytes?.let {
var lastPlayTime0 = 0L
JsonFetcher.readFromJsonString(ByteArray64Reader(it, Common.CHARSET)).forEachSiblings { name, value ->
@@ -536,7 +539,7 @@ class UIItemPlayerCells(
.atZone(TimeZone.getDefault().toZoneId())
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
}
} ?: throw Error("SAVEGAMEINFO not found on Skimmer:${loadable.diskFile}")
val savegamePair = SavegameCollectionPair(App.savegamePlayers[playerUUID], App.savegameWorlds[worldUUID])
savegameStatus = savegamePair.status