Backed out changeset dfa9c9bab741 (bug 1584375) for marionette crash @ rust_begin_unwind. On a CLOSED TREE

This commit is contained in:
Daniel Varga 2019-10-02 20:43:36 +03:00
parent bcc9154683
commit f1edb8b815
5 changed files with 21 additions and 11 deletions

View File

@ -90,8 +90,8 @@ DrawEventRecorderMemory::DrawEventRecorderMemory() {
}
DrawEventRecorderMemory::DrawEventRecorderMemory(
const SerializeResourcesFn& aFn)
: mSerializeCallback(aFn) {
const SerializeResourcesFn& aFn, IntPoint aOrigin)
: mSerializeCallback(aFn), mOrigin(aOrigin) {
mExternalFonts = !!mSerializeCallback;
WriteHeader(mOutputStream);
}
@ -132,6 +132,7 @@ bool DrawEventRecorderMemory::Finish() {
mIndex = MemStream();
// write out the offset of the Index to the end of the output stream
WriteElement(mOutputStream, indexOffset);
WriteElement(mOutputStream, mOrigin);
ClearResources();
return hasItems;
}

View File

@ -179,7 +179,8 @@ class DrawEventRecorderMemory : public DrawEventRecorderPrivate {
* Constructs a DrawEventRecorder that stores the recording in memory.
*/
DrawEventRecorderMemory();
explicit DrawEventRecorderMemory(const SerializeResourcesFn& aSerialize);
explicit DrawEventRecorderMemory(const SerializeResourcesFn& aSerialize,
IntPoint aOrigin = IntPoint());
void RecordEvent(const RecordedEvent& aEvent) override;
@ -216,6 +217,7 @@ class DrawEventRecorderMemory : public DrawEventRecorderPrivate {
private:
SerializeResourcesFn mSerializeCallback;
nsTHashtable<nsUint64HashKey> mDependentSurfaces;
IntPoint mOrigin;
void Flush() override;
};

View File

@ -661,7 +661,8 @@ struct DIGroup {
aStream.write((const char*)&font, sizeof(font));
}
fonts = std::move(aScaledFonts);
});
},
mVisibleRect.ToUnknownRect().TopLeft());
RefPtr<gfx::DrawTarget> dummyDt = gfx::Factory::CreateDrawTarget(
gfx::BackendType::SKIA, gfx::IntSize(1, 1), format);
@ -2262,7 +2263,8 @@ WebRenderCommandBuilder::GenerateFallbackData(
aStream.write((const char*)&font, sizeof(font));
}
fonts = std::move(aScaledFonts);
});
},
visibleRect.ToUnknownRect().TopLeft());
RefPtr<gfx::DrawTarget> dummyDt = gfx::Factory::CreateDrawTarget(
gfx::BackendType::SKIA, gfx::IntSize(1, 1), format);
RefPtr<gfx::DrawTarget> dt = gfx::Factory::CreateRecordingDrawTarget(
@ -2493,7 +2495,8 @@ Maybe<wr::ImageMask> WebRenderCommandBuilder::BuildWrMaskImage(
}
fonts = std::move(aScaledFonts);
});
},
IntPoint(0, 0));
RefPtr<DrawTarget> dummyDt = Factory::CreateDrawTarget(
BackendType::SKIA, IntSize(1, 1), SurfaceFormat::A8);

View File

@ -9,6 +9,7 @@
#include "mozilla/gfx/DrawEventRecorder.h"
#include "mozilla/gfx/InlineTranslator.h"
#include "mozilla/webrender/webrender_ffi.h"
#include "mozilla/gfx/Point.h"
namespace mozilla {
namespace layers {
@ -23,8 +24,8 @@ class WebRenderDrawEventRecorder final : public gfx::DrawEventRecorderMemory {
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(WebRenderDrawEventRecorder, final)
explicit WebRenderDrawEventRecorder(
const gfx::SerializeResourcesFn& aSerialize)
: DrawEventRecorderMemory(aSerialize) {}
const gfx::SerializeResourcesFn& aSerialize, gfx::IntPoint aOrigin)
: DrawEventRecorderMemory(aSerialize, aOrigin) {}
void StoreSourceSurfaceRecording(gfx::SourceSurface* aSurface,
const char* aReason) final;

View File

@ -172,6 +172,7 @@ struct BlobReader<'a> {
reader: BufReader<'a>,
/// Where the buffer head is.
begin: usize,
origin: IntPoint,
}
#[derive(PartialEq, Debug, Eq, Clone, Copy)]
@ -202,8 +203,9 @@ impl<'a> BlobReader<'a> {
let index_offset_pos = buf.len()-(mem::size_of::<usize>() + mem::size_of::<IntPoint>());
assert!(index_offset_pos < buf.len());
let index_offset = unsafe { convert_from_bytes::<usize>(&buf[index_offset_pos..]) };
let origin = unsafe { convert_from_bytes(&buf[(index_offset_pos + mem::size_of::<usize>())..]) };
BlobReader { reader: BufReader::new(&buf[index_offset..index_offset_pos]), begin: 0}
BlobReader { reader: BufReader::new(&buf[index_offset..index_offset_pos]), begin: 0, origin }
}
/// Reads the next display item's metadata.
@ -249,12 +251,13 @@ impl BlobWriter {
}
/// Completes the blob image, producing a single buffer containing it.
fn finish(mut self) -> Vec<u8> {
fn finish(mut self, origin: IntPoint) -> Vec<u8> {
// Append the index to the end of the buffer
// and then append the offset to the beginning of the index.
let index_begin = self.data.len();
self.data.extend_from_slice(&self.index);
self.data.extend_from_slice(convert_to_bytes(&index_begin));
self.data.extend_from_slice(convert_to_bytes(&origin));
self.data
}
}
@ -458,7 +461,7 @@ fn merge_blob_images(old_buf: &[u8], new_buf: &[u8], dirty_rect: Box2d, old_visi
//assert!(old_reader.cache.is_empty());
let result = result.finish();
let result = result.finish(new_reader.origin);
dump_index(&result);
result
}