#419: cover suspended raster resource ownership (#733)

This commit is contained in:
cyfung1031 2026-10-10 19:02:41 +09:00 committed by GitHub
parent c02fe8ca53
commit 916e0bc4d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 32 additions and 0 deletions

View File

@ -3848,6 +3848,38 @@ trailer << /Root 1 0 R >>
assert!(doc.dirty);
}
#[test]
fn suspending_a_view_releases_owned_raster_textures_and_queue_state() {
let ctx = egui::Context::default();
let mut view = view(2, PageLayout::Continuous);
let texture = |name| ctx.load_texture(name, egui::ColorImage::filled([1, 1], Color32::WHITE), TextureOptions::LINEAR);
let request = RenderRequest { page: 0, scale: 1.0, tag: 1, ..Default::default() };
view.pages.insert(0, PageTex { tag: request.tag, tex: texture("suspended-page") });
view.thumbs.insert(1, PageTex { tag: THUMB_TAG, tex: texture("suspended-thumbnail") });
view.tiles.insert((0, request.tag, 0, 0), texture("suspended-tile"));
view.grid_pages.insert(1, (1, texture("suspended-grid-page")));
view.print_pages.insert(1, (PRINT_TAG, texture("suspended-print-page")));
view.stale_thumbs.insert(1);
view.waiting_since.insert(0, 1.0);
view.last_queue = vec![request];
view.frame_queue = vec![request];
view.frame_visible.insert(0);
view.need_thumbnail(1, true);
let pool = RenderPool::new_inline(Arc::new(Vec::new()), Default::default());
view.suspend_rendering(&pool);
assert!(view.pages.is_empty(), "page handles are released");
assert!(view.thumbs.is_empty(), "thumbnail handles are released");
assert!(view.tiles.is_empty(), "tile handles are released");
assert!(view.grid_pages.is_empty(), "organize-grid handles are released");
assert!(view.print_pages.is_empty(), "print-preview handles are released");
assert!(view.stale_thumbs.is_empty(), "stale thumbnail bookkeeping is cleared");
assert!(view.waiting_since.is_empty(), "waiting bookkeeping is cleared");
assert!(view.last_queue.is_empty() && !view.render_pending(), "queued demand is retired");
assert!(view.frame_queue.is_empty() && view.frame_visible.is_empty() && view.thumb_demand.is_empty());
}
#[test]
fn virtualized_organizer_keeps_insert_gaps_at_document_positions() {
use egui_kittest::kittest::Queryable;