Compare commits

..

2 Commits

Author SHA1 Message Date
Samuele Lorefice
d986670268 Added queue for log messages and logger on a separate thread, added telemetry. 2025-02-27 23:44:51 +01:00
Samuele Lorefice
30cdc7a23d Changed code gen to use latest lang version 2025-02-27 23:44:10 +01:00
3 changed files with 66 additions and 8 deletions

View File

@@ -6,9 +6,11 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACollectionBase_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fa6227be3686afd1e7a497da15c9371b4dc2c39126852fbc263d51ab206739b_003FCollectionBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACSharpCodeGenerator_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F4aa9136c27fa69d6c91e9d8679c1a1d4b7aabee06e20d4405ee3d91ee05048f0_003FCSharpCodeGenerator_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACSharpCodeGenerator_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F4aa9136c27fa69d6c91e9d8679c1a1d4b7aabee06e20d4405ee3d91ee05048f0_003FCSharpCodeGenerator_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADefaultInterpolatedStringHandler_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fc1c946eaa6d8ddaaea1b63e936ca8ed2791d9316c5b025a41d445891e8a59ecd_003FDefaultInterpolatedStringHandler_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fb7208b3f72528d22781d25fde9a55271bdf2b5aade4f03b1324579a25493cd8_003FList_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARuntimeType_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F0beb96d31db641cf82014cb1a758a330b2dc00_003F5b_003F039af867_003FRuntimeType_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASortedDictionary_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Febdb3cec3b3875204585daa9fc42159a24cae33b2087ff4dc114d0e6a5a3e9_003FSortedDictionary_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AStringBuilder_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fc6a25ea096494870a1dd94f188bc2634db58c9faa8b319e415cadf49b913d1a_003FStringBuilder_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F2c8e7ca976f350cba9836d5565dac56b11e0b56656fa786460eb1395857a6fa_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F0beb96d31db641cf82014cb1a758a330b2dc00_003F3e_003F433607bb_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AType_002Ecs_002Fl_003AC_0021_003FUsers_003Fairon_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fe7dbd6fe331ff9a3c4b24dd470ec1f19a71b7c5acf258b81ae7f761cd2b319b_003FType_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

View File

@@ -5,7 +5,7 @@
<Nullable>disable</Nullable>
<RootNamespace>CodeGenerator</RootNamespace>
<OutputType>Exe</OutputType>
<LangVersion>9</LangVersion>
<LangVersion>default</LangVersion>
</PropertyGroup>
<ItemGroup>

View File

@@ -1,10 +1,13 @@
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using Kaitai;
using Microsoft.CSharp;
@@ -25,28 +28,81 @@ namespace CodeGenerator {
private static readonly string[] ListMarkerStr = {"list", "array"};
private static readonly string[] ListLenghtStr = {"num", "len", "size"};
private static ConcurrentQueue<Tuple<string, LogType>> _logQueue = new();
enum LogType {
Info,
Warning,
Error
}
private static void Log(string message) {
Sb.AppendLine(message);
Console.WriteLine(message);
private static void LogNow(string message, LogType type = LogType.Info) {
string msg = $"{DateTime.Now:yy-MM-dd HH:mm:ss}|{type.ToString()}|{message}";
lock (Sb){ Sb.AppendLine(msg); }
Console.WriteLine(msg);
}
private static void Log(string message, LogType type = LogType.Info) {
_logQueue.Enqueue(new (message, type));
}
public static void Main(string[] args) {
Log("Reading blend file");
ReadBlendFile();
LogNow("Setting up logger...");
Stopwatch sw = new();
sw.Start();
long start = 0;
bool loggerExit = false;
Thread logger = new(() => {
start = sw.ElapsedTicks;
LogNow($"Logger started! In {sw.ElapsedMilliseconds}ms");
// ReSharper disable once AccessToModifiedClosure LoopVariableIsNeverChangedInsideLoop
while (!loggerExit || !_logQueue.IsEmpty)
if (_logQueue.TryDequeue(out var msg))
LogNow(msg.Item1, msg.Item2);
LogNow("Logger exiting...");
});
logger.Start();
var initTime = sw.ElapsedTicks;
Log("Reading blend file");
sw.Restart();
ReadBlendFile();
var readTime = sw.ElapsedTicks;
Log("Generating C# code...");
Log("Pass 1: Generating types");
sw.Restart();
CodeNamespace ns = GenerateTypes(out var rootNs);
var genTime = sw.ElapsedTicks;
sw.Restart();
Log("Pass 2: Writing out code");
OutputCodeFiles(ns);
OutputCodeFiles(rootNs, false);
var writeTime = sw.ElapsedTicks;
sw.Stop();
Log("Finished generating C# code!");
File.AppendAllText("Log.txt", Sb.ToString());
Log($"""
Timings:
Initialization: {(decimal)initTime/ TimeSpan.TicksPerMillisecond,10:N4} ms
Logger Startup: {(decimal)start / TimeSpan.TicksPerMillisecond,10:N4} ms
Reading: {(decimal)readTime/ TimeSpan.TicksPerMillisecond,10:N4} ms
Generating: {(decimal)genTime/ TimeSpan.TicksPerMillisecond,10:N4} ms
Writing: {(decimal)writeTime/ TimeSpan.TicksPerMillisecond,10:N4} ms
----------------------------
Total: {(decimal)(initTime+readTime+genTime+writeTime) / TimeSpan.TicksPerMillisecond,10:N4} ms
""");
loggerExit = true;
while(logger.IsAlive) { }
Thread.Sleep(1000);
lock (Sb) {
File.AppendAllText("Log.txt", Sb.ToString());
}
}
private static void ReadBlendFile() {