Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calling generate_frame() after deleting images causes a panic() #684

Closed
jrmuizel opened this issue Jan 5, 2017 · 3 comments
Closed

Calling generate_frame() after deleting images causes a panic() #684

jrmuizel opened this issue Jan 5, 2017 · 3 comments

Comments

@jrmuizel
Copy link
Contributor

@jrmuizel jrmuizel commented Jan 5, 2017

The following patch to the sample program causes a panic. Is it reasonable to assume that we should be able to redraw the current frame after deleting images?

diff --git a/sample/src/main.rs b/sample/src/main.rs
index 32dec4d..df59ec0 100644
--- a/sample/src/main.rs
+++ b/sample/src/main.rs
@@ -114,19 +114,21 @@ fn main() {
                                   bounds,
                                   clip_region,
                                   0,
                                   &LayoutTransform::identity(),
                                   &LayoutTransform::identity(),
                                   webrender_traits::MixBlendMode::Normal,
                                   Vec::new());
 
+    let image;
     let sub_clip = {
+        image = api.add_image(2, 2, None, ImageFormat::A8, ImageData::new(vec![0,80, 180, 255]));
         let mask = webrender_traits::ImageMask {
-            image: api.add_image(2, 2, None, ImageFormat::A8, ImageData::new(vec![0,80, 180, 255])),
+            image: image,
             rect: LayoutRect::new(LayoutPoint::new(75.0, 75.0), LayoutSize::new(100.0, 100.0)),
             repeat: false,
         };
         let complex = webrender_traits::ComplexClipRegion::new(
             LayoutRect::new(LayoutPoint::new(50.0, 50.0), LayoutSize::new(100.0, 100.0)),
             webrender_traits::BorderRadius::uniform(20.0));
 
         builder.new_clip_region(&bounds, vec![complex], Some(mask))
@@ -233,16 +235,18 @@ fn main() {
     builder.pop_stacking_context();
 
     api.set_root_display_list(
         Some(root_background_color),
         epoch,
         LayoutSize::new(width as f32, height as f32),
         builder);
     api.set_root_pipeline(pipeline_id);
+    api.delete_image(image);
+    api.generate_frame();
 
     for event in window.wait_events() {
         renderer.update();
 
         renderer.render(DeviceUintSize::new(width, height));
 
         window.swap_buffers().ok();
 
@glennw
Copy link
Member

@glennw glennw commented Jan 5, 2017

I can imagine that it's probably not supported right now - since generate_frame() assumes that the exact same frame is going to be rendered. But it should be easy enough to support this limited use case - are you able to post a backtrace of the panic?

@kvark
Copy link
Member

@kvark kvark commented Jan 5, 2017

thread '<unnamed>' panicked at 'no entry found for key', ../src/libcore/option.rs:705
stack backtrace:
   1:     0x55a7faad8acf - std::sys::backtrace::tracing::imp::write::h6f1d53a70916b90d
   2:     0x55a7faadce3d - std::panicking::default_hook::{{closure}}::h137e876f7d3b5850
   3:     0x55a7faadbd3a - std::panicking::default_hook::h0ac3811ec7cee78c
   4:     0x55a7faadc338 - std::panicking::rust_panic_with_hook::hc303199e04562edf
   5:     0x55a7faadc1d2 - std::panicking::begin_panic::h6ed03353807cf54d
   6:     0x55a7faadc110 - std::panicking::begin_panic_fmt::hc321cece241bb2f5
   7:     0x55a7faadc091 - rust_begin_unwind
   8:     0x55a7fab15f9f - core::panicking::panic_fmt::h27224b181f9f037f
   9:     0x55a7fab16015 - core::option::expect_failed::h8606bc228cd3f504
  10:     0x55a7fa5dd1a3 - <core::option::Option<T>>::expect::ha5cfad9d6a8ced04
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libcore/option.rs:293
  11:     0x55a7fa52efb7 - <std::collections::hash::map::HashMap<K, V, S> as core::ops::Index<&'a Q>>::index::h3fcd97a9a34b94ba
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/collections/hash/map.rs:1238
  12:     0x55a7fa86b543 - webrender::resource_cache::ResourceCache::block_until_all_resources_added::h62a2c5a503e9bb9b
                        at /home/kvark/Code/wr/webrender/src/resource_cache.rs:549
  13:     0x55a7fa8880d7 - webrender::tiling::FrameBuilder::build::h8ebb8a7b63186742
                        at /home/kvark/Code/wr/webrender/src/tiling.rs:2941
  14:     0x55a7fa8a0e7d - webrender::frame::Frame::build_frame::{{closure}}::hde7fc8bab2fb2ac6
                        at /home/kvark/Code/wr/webrender/src/frame.rs:968
  15:     0x55a7fa5d0025 - <core::option::Option<T>>::map::h4d1b325e911c3139
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libcore/option.rs:383
  16:     0x55a7fa84f0d5 - webrender::frame::Frame::build_frame::h2669599ecca20fac
                        at /home/kvark/Code/wr/webrender/src/frame.rs:967
  17:     0x55a7fa84e3cb - webrender::frame::Frame::build::h2238d34777cbcffb
                        at /home/kvark/Code/wr/webrender/src/frame.rs:889
  18:     0x55a7fa8669c4 - webrender::render_backend::RenderBackend::render::hd2f26d217469dbad
                        at /home/kvark/Code/wr/webrender/src/render_backend.rs:430
  19:     0x55a7fa8abcc6 - webrender::render_backend::RenderBackend::run::{{closure}}::h6c8834f0c6518dd5
                        at /home/kvark/Code/wr/webrender/src/render_backend.rs:343
  20:     0x55a7fa85dae8 - webrender::profiler::TimeProfileCounter::profile::habdfeb81d371f64b
                        at /home/kvark/Code/wr/webrender/src/profiler.rs:150
  21:     0x55a7fa862fba - webrender::render_backend::RenderBackend::run::h6068095e998226a7
                        at /home/kvark/Code/wr/webrender/src/render_backend.rs:342
  22:     0x55a7fa8ab609 - webrender::renderer::Renderer::new::{{closure}}::h93bd4094dae55648
                        at /home/kvark/Code/wr/webrender/src/renderer.rs:610
  23:     0x55a7fa8319fa - <std::panic::AssertUnwindSafe<F> as core::ops::FnOnce<()>>::call_once::ha2c2ad7902e45efb
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panic.rs:255
  24:     0x55a7fa638ac8 - std::panicking::try::do_call::hc2ba5c0e02243f1b
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:356
  25:     0x55a7faae4906 - __rust_maybe_catch_panic
  26:     0x55a7fa638169 - std::panicking::try::h0c02fae6c828bf60
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:332
  27:     0x55a7fa636794 - std::panic::catch_unwind::hada026812a5bab79
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panic.rs:311
  28:     0x55a7fa8a9111 - std::thread::Builder::spawn::{{closure}}::h721269deea8026d6
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/thread/mod.rs:277
  29:     0x55a7fa6fdd59 - <F as alloc::boxed::FnBox<A>>::call_box::h73b9fff45386b349
                        at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:591
  30:     0x55a7faadab60 - std::sys::thread::Thread::new::thread_start::h759e10bc4abc7e72
  31:     0x7f6729d4f6c9 - start_thread
  32:     0x7f6729872f6e - clone
  33:                0x0 - <unknown>
@glennw
Copy link
Member

@glennw glennw commented Sep 4, 2017

I believe this is resolved now.

@glennw glennw closed this Sep 4, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants
You can’t perform that action at this time.