Saya memiliki cabang Servo yang mogok saat dijalankan di Android karena penggunaan kunci mem::replace sebenarnya tidak menyebabkan tujuan mengubah nilai. Ketika saya menambahkan println!("{:?}", self.pending_line)
sebelum dan sesudah mem::replace, di desktop nilainya diperbarui seperti yang diharapkan, tetapi di Android nilai aslinya tetap.
Ketika saya menggunakan salah satu dari berikut ini sebagai gantinya:
self.pending_line = Line::new(self.floats.writing_mode, &self.minimum_metrics);
atau
let mut new_line = Line::new(self.floats.writing_mode, &self.minimum_metrics);
mem::swap(&mut self.pending_line, &mut new_line);
kemudian self.pending
diperbarui seperti yang diharapkan dan Servo tidak mogok di Android.
Berikut ini juga berfungsi:
mem::replace(&mut self.pending_line,
Line::new(self.floats.writing_mode, &self.minimum_metrics));
mem::replace(&mut self.pending_line,
Line::new(self.floats.writing_mode, &self.minimum_metrics));
(ya, melakukan operasi yang sama dua kali)
Hmm, sepertinya tipe itu cukup besar (https://github.com/jdm/servo/blob/layoutstuff/components/layout/inline.rs#L221-L245) jadi akan mengenai jalur simd di swap (https ://github.com/rust-lang/rust/blob/master/src/libcore/ptr.rs#L194-L227) yang saat ini dinonaktifkan di beberapa platform lain, jadi saya ingin tahu apakah bug itu ada di suatu tempat ...
Triase: Tidak yakin apakah ini masih menjadi masalah.
Kode SIMD libcore yang diperbarui:
Komentar yang paling membantu
Berikut ini juga berfungsi:
(ya, melakukan operasi yang sama dua kali)