From 95443da63c36579499e20e8359b674bdfb8a5963 Mon Sep 17 00:00:00 2001 From: Linghong Date: Fri, 31 Jul 2026 05:48:29 +0000 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=AE=8C=E7=BE=8E=E5=83=8F?= =?UTF-8?q?=E7=B4=A0=E6=8C=81=E4=B9=85=E5=8C=96=E7=9A=84=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 改用按值移交的持久化入口避免复制整份输出图片 补齐禁止退回借用版持久化入口的回归断言 Co-Authored-By: Claude Opus 5 --- server-rs/crates/api-server/src/editor_project.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/server-rs/crates/api-server/src/editor_project.rs b/server-rs/crates/api-server/src/editor_project.rs index 1646aba75..a0c043d42 100644 --- a/server-rs/crates/api-server/src/editor_project.rs +++ b/server-rs/crates/api-server/src/editor_project.rs @@ -4579,11 +4579,14 @@ pub async fn snap_editor_image_to_pixel_art( })?; let task_id = build_prefixed_uuid_id("pixel-art-snap-"); - let persisted = persist_editor_generated_image( + // 中文注释:尺寸已经在上一步取完,snapped_image 之后不再使用,所以按值移交给 _owned + // 版本。借用版会在内部 `image.bytes.clone()` 复制一整份输出图片;完美像素是同步路径, + // 那份复制会和原图在同一时刻共存。 + let persisted = persist_editor_generated_image_owned( &state, owner_user_id.as_str(), task_id.as_str(), - &snapped_image, + snapped_image, "完美像素", None, EDITOR_PIXEL_ART_SNAP_ASSET_KIND, @@ -10693,7 +10696,7 @@ mod tests { source, "pub async fn snap_editor_image_to_pixel_art(", "async fn validate_editor_background_removal_source", - "persist_editor_generated_image(", + "persist_editor_generated_image_owned(", 1, ); assert_function_not_contains( @@ -10708,6 +10711,9 @@ mod tests { // 中文注释:下载必须走带 deadline 的包装。退回裸调用会让 OSS GET 重新 // 落在 30s 预算之外,请求可以持着最多 32 MiB 无限期排队等 CPU 许可。 "download_editor_persisted_image_object(&state", + // 中文注释:持久化必须走按值移交的 _owned 版本。借用版内部会 clone 一整份 + // 输出图片,在同步路径上和原图同时驻留内存。 + "persist_editor_generated_image(", ], ); }