XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

C# 文件后台准备

桌面打开 .cs / .js 文件时,先绘制完整源文件,继续允许编辑、保存及窗口操作。BrowserEditorPreparationService 在平台明确提供的独立 worker 中创建新的浏览器会话、Jint 引擎、官方 Monaco 模型及私有字体缓存,执行初始脚本和布局。准备期间桌面没有该会话的引用,不等待其引擎锁,也不读取它的 DOM。

worker 创建真实模型后,发布 BackgroundBrowserEditorSession 代理和不含 DOM 引用的绘制快照。原始引擎、DOM、事件循环与后续布局始终归 worker 独占;桌面绘制已发布的文本、颜色、几何和深拷贝 Canvas 像素。输入与窗口尺寸通过有界消息队列送入 worker,鼠标移动与时钟请求合并,按键和按钮保留顺序。没有清空、替换或禁用 Monaco 的持续定时任务来伪造就绪。

桌面检查窗口、源文本与 generation,再绑定代理。关闭窗口会取消后续发布;准备期间文本改变则重新排队最新源。保存通过队列中的模型读取屏障,等待此前输入完成后才在 UI 写入存储并发出成功标记;更晚输入不得被旧保存回执清除修改状态。worker 不可用、队列已满或初始化失败时保留源文件和基本编辑功能,状态栏明确报错,不在桌面线程重新执行同步 Monaco 初始化。

原生实现使用单核抢占调度中的普通 UI 线程与一个 worker,分别使用 8 MiB 栈;有限队列为 16 项。它不使用宿主线程或宿主浏览器。当前固定 Cosmos 运行时的异常分派原来使用全局状态,因此后台执行必须先通过本机线程、异常与 GC 自检。补丁只修改项目私有运行时副本;中断切换路径预分配状态后再复制,不能在该路径分配内存。

XFE_EDITOR_BACKGROUND|SourcePresented 只在真实源文件文字帧成功 Present 后输出,包含源指纹、实际绘制行数及耗时。它表示可编辑源文件首帧,不表示完整 Monaco 已经可用。Prepared 表示 worker 完成,Ready 表示 UI 绑定快照代理;引擎始终留在 worker。完整 Monaco 的实际模型、网站 C# 语法颜色、原生字形及保存操作仍须另外验收。

Tools/TestEditorResponsiveness.py 经 QMP 鼠标真正打开 ZCSharp.cs,在原始 2.29 MB Monaco 核心脚本 BEGIN 之后发送 Win+D,并要求桌面确认发生在该脚本 END 之前。它分别记录首个源文件帧、快捷键时延、Monaco 就绪及加载期间关闭取消,检查真实模型和屏幕像素;不会注入 JS、伪造 Monaco 或用宿主网页截图替代来宾输出。旧镜像的基线已复现约 2.22 秒的 Win+D 阻塞,原始失败记录保留于 build/CSharpBoot/Proof-1791984208907740300。

worker 的字体缓存不会直接供双方修改:另一个独立字体准备 canvas 在发布后交给 UI,只转移经过等价校验的缓存。UI 不进行该编辑器的 JavaScript 求值或 DOM 布局,仍负责真实像素绘制。GC 依然会停止整个单核系统,绘制本身也会消耗 UI 时间;宿主线程测试不能证明来宾实时性。原生自检、响应测试及实际时延报告才是启用与验收依据。它也没有实现 NVIDIA 初始化、GPU 光栅化或 CUDA,相关进度见 docs/NativeCudaPort.md 和 Tools/Gpu/Readme.md。

字体原始资源在首次创建画布时预载并共享只读字节;每个画布仍独立创建字体解析对象、度量与字形缓存。固定版本字体解析库的只读行为和深浅主题像素已单独核验。这避免再次打开编辑器时重复申请约 9.4 MiB 的连续中文字体数组。线程栈分配失败会先 GC 并重试一次,再明确停止;串口同时记录总空闲页与最大连续空闲页,不能把“总内存足够”当成“连续分配必定成功”。

固定内置资源目录也在启动时预热只读文本。网站目录的 59 项文本约含 883 万个 UTF-16 字符,Monaco/WebsiteCode 另有自己的有限目录;各页面共享解码后的字符串,页面、DOM、JS 引擎和导航预算仍各自独立。此处没有预先执行脚本,网络响应也不会进入永久缓存。它避免连续预览时重复申请约 6.8 MiB 的 Mermaid 字符串;二进制字体通过原字节 API 读取,不预热成乱码文本。初始化成本发生在启动阶段,不能从冷启动性能中排除。

短时响应测试不能替代持续运行验收。最终镜像的可见窗口后续交互中,后台编辑器处于活动状态时仍观察到 OOM:请求 77,264 字节,当时空闲 782 页、最大连续 16 页,来宾停止。记录见 build/CSharp/Interactive-1791994547700/NativeFailure.json。该故障尚未修复;缓存与线程修补不能据此宣称解决全部内存问题。