Backed out changeset 5c88b35cc6f5 (bug 1563770) for causing bug 1565231. a=backout

This commit is contained in:
Csoregi Natalia 2019-07-11 23:14:01 +03:00
Родитель e146f6712d
Коммит 20e91a0890
16 изменённых файлов: 62 добавлений и 132 удалений

Просмотреть файл

@ -107,7 +107,6 @@ struct OpAddImage {
struct OpAddBlobImage {
ImageDescriptor descriptor;
OffsetRange bytes;
ImageIntRect visibleRect;
uint16_t tiling;
BlobImageKey key;
};
@ -122,11 +121,10 @@ struct OpUpdateBlobImage {
ImageDescriptor descriptor;
OffsetRange bytes;
BlobImageKey key;
ImageIntRect visibleRect;
ImageIntRect dirtyRect;
};
struct OpSetBlobImageVisibleArea {
struct OpSetImageVisibleArea {
ImageIntRect area;
BlobImageKey key;
};
@ -179,7 +177,7 @@ union OpUpdateResource {
OpAddBlobImage;
OpUpdateImage;
OpUpdateBlobImage;
OpSetBlobImageVisibleArea;
OpSetImageVisibleArea;
OpDeleteImage;
OpDeleteBlobImage;
OpAddRawFont;

Просмотреть файл

@ -297,15 +297,13 @@ bool IpcResourceUpdateQueue::AddImage(ImageKey key,
bool IpcResourceUpdateQueue::AddBlobImage(BlobImageKey key,
const ImageDescriptor& aDescriptor,
Range<uint8_t> aBytes,
ImageIntRect aVisibleRect) {
Range<uint8_t> aBytes) {
MOZ_RELEASE_ASSERT(aDescriptor.width > 0 && aDescriptor.height > 0);
auto bytes = mWriter.Write(aBytes);
if (!bytes.length()) {
return false;
}
mUpdates.AppendElement(
layers::OpAddBlobImage(aDescriptor, bytes, aVisibleRect, 0, key));
mUpdates.AppendElement(layers::OpAddBlobImage(aDescriptor, bytes, 0, key));
return true;
}
@ -338,14 +336,13 @@ bool IpcResourceUpdateQueue::UpdateImageBuffer(
bool IpcResourceUpdateQueue::UpdateBlobImage(BlobImageKey aKey,
const ImageDescriptor& aDescriptor,
Range<uint8_t> aBytes,
ImageIntRect aVisibleRect,
ImageIntRect aDirtyRect) {
auto bytes = mWriter.Write(aBytes);
if (!bytes.length()) {
return false;
}
mUpdates.AppendElement(layers::OpUpdateBlobImage(aDescriptor, bytes, aKey,
aVisibleRect, aDirtyRect));
mUpdates.AppendElement(
layers::OpUpdateBlobImage(aDescriptor, bytes, aKey, aDirtyRect));
return true;
}
@ -358,7 +355,7 @@ void IpcResourceUpdateQueue::UpdateExternalImage(wr::ExternalImageId aExtId,
void IpcResourceUpdateQueue::SetBlobImageVisibleArea(
wr::BlobImageKey aKey, const ImageIntRect& aArea) {
mUpdates.AppendElement(layers::OpSetBlobImageVisibleArea(aArea, aKey));
mUpdates.AppendElement(layers::OpSetImageVisibleArea(aArea, aKey));
}
void IpcResourceUpdateQueue::DeleteImage(ImageKey aKey) {

Просмотреть файл

@ -137,7 +137,7 @@ class IpcResourceUpdateQueue {
Range<uint8_t> aBytes);
bool AddBlobImage(wr::BlobImageKey aKey, const ImageDescriptor& aDescriptor,
Range<uint8_t> aBytes, ImageIntRect aVisibleRect);
Range<uint8_t> aBytes);
void AddExternalImage(wr::ExternalImageId aExtId, wr::ImageKey aKey);
@ -151,8 +151,7 @@ class IpcResourceUpdateQueue {
bool UpdateBlobImage(wr::BlobImageKey aKey,
const ImageDescriptor& aDescriptor,
Range<uint8_t> aBytes, ImageIntRect aVisibleRect,
ImageIntRect aDirtyRect);
Range<uint8_t> aBytes, ImageIntRect aDirtyRect);
void UpdateExternalImage(ExternalImageId aExtID, ImageKey aKey,
ImageIntRect aDirtyRect);

Просмотреть файл

@ -428,8 +428,7 @@ bool WebRenderBridgeParent::UpdateResources(
if (!reader.Read(op.bytes(), bytes)) {
return false;
}
aUpdates.AddBlobImage(op.key(), op.descriptor(), bytes,
wr::ToDeviceIntRect(op.visibleRect()));
aUpdates.AddBlobImage(op.key(), op.descriptor(), bytes);
break;
}
case OpUpdateResource::TOpUpdateBlobImage: {
@ -439,14 +438,17 @@ bool WebRenderBridgeParent::UpdateResources(
return false;
}
aUpdates.UpdateBlobImage(op.key(), op.descriptor(), bytes,
wr::ToDeviceIntRect(op.visibleRect()),
wr::ToLayoutIntRect(op.dirtyRect()));
break;
}
case OpUpdateResource::TOpSetBlobImageVisibleArea: {
const auto& op = cmd.get_OpSetBlobImageVisibleArea();
aUpdates.SetBlobImageVisibleArea(op.key(),
wr::ToDeviceIntRect(op.area()));
case OpUpdateResource::TOpSetImageVisibleArea: {
const auto& op = cmd.get_OpSetImageVisibleArea();
wr::DeviceIntRect area;
area.origin.x = op.area().x;
area.origin.y = op.area().y;
area.size.width = op.area().width;
area.size.height = op.area().height;
aUpdates.SetImageVisibleArea(op.key(), area);
break;
}
case OpUpdateResource::TOpAddExternalImage: {

Просмотреть файл

@ -721,10 +721,7 @@ struct DIGroup {
GP("No previous key making new one %d\n", key._0.mHandle);
wr::ImageDescriptor descriptor(dtSize, 0, dt->GetFormat(), opacity);
MOZ_RELEASE_ASSERT(bytes.length() > sizeof(size_t));
if (!aResources.AddBlobImage(
key, descriptor, bytes,
ViewAs<ImagePixel>(mPaintRect,
PixelCastJustification::LayerIsImage))) {
if (!aResources.AddBlobImage(key, descriptor, bytes)) {
return;
}
mKey = Some(MakePair(aBuilder.GetRenderRoot(), key));
@ -737,10 +734,7 @@ struct DIGroup {
bottomRight.y <= dtSize.height);
GP("Update Blob %d %d %d %d\n", mInvalidRect.x, mInvalidRect.y,
mInvalidRect.width, mInvalidRect.height);
if (!aResources.UpdateBlobImage(
mKey.value().second(), descriptor, bytes,
ViewAs<ImagePixel>(mPaintRect,
PixelCastJustification::LayerIsImage),
if (!aResources.UpdateBlobImage(mKey.value().second(), descriptor, bytes,
ViewAs<ImagePixel>(mInvalidRect))) {
return;
}
@ -2312,10 +2306,7 @@ WebRenderCommandBuilder::GenerateFallbackData(
wr::BlobImageKey{mManager->WrBridge()->GetNextImageKey()};
wr::ImageDescriptor descriptor(dtSize.ToUnknownSize(), 0,
dt->GetFormat(), opacity);
if (!aResources.AddBlobImage(
key, descriptor, bytes,
ViewAs<ImagePixel>(visibleRect,
PixelCastJustification::LayerIsImage))) {
if (!aResources.AddBlobImage(key, descriptor, bytes)) {
return nullptr;
}
TakeExternalSurfaces(
@ -2330,11 +2321,11 @@ WebRenderCommandBuilder::GenerateFallbackData(
if (!fallbackData->GetBlobImageKey().isSome()) {
return nullptr;
}
}
aResources.SetBlobImageVisibleArea(
fallbackData->GetBlobImageKey().value(),
ViewAs<ImagePixel>(visibleRect,
PixelCastJustification::LayerIsImage));
}
} else {
WebRenderImageData* imageData = fallbackData->PaintIntoImage();
@ -2535,8 +2526,9 @@ Maybe<wr::ImageMask> WebRenderCommandBuilder::BuildWrMaskImage(
wr::BlobImageKey{mManager->WrBridge()->GetNextImageKey()};
wr::ImageDescriptor descriptor(size, 0, dt->GetFormat(),
wr::OpacityType::HasAlphaChannel);
if (!aResources.AddBlobImage(key, descriptor, bytes,
ImageIntRect(0, 0, size.width, size.height))) {
if (!aResources.AddBlobImage(key, descriptor,
bytes)) { // visible area: ImageIntRect(0, 0,
// size.width, size.height)
return Nothing();
}
maskData->ClearImageKey();

Просмотреть файл

@ -307,7 +307,6 @@ static RefPtr<ScaledFont> GetScaledFont(Translator* aTranslator,
static bool Moz2DRenderCallback(const Range<const uint8_t> aBlob,
gfx::IntSize aSize, gfx::SurfaceFormat aFormat,
const mozilla::wr::DeviceIntRect* aVisibleRect,
const uint16_t* aTileSize,
const mozilla::wr::TileOffset* aTileOffset,
const mozilla::wr::LayoutIntRect* aDirtyRect,
@ -474,15 +473,14 @@ extern "C" {
bool wr_moz2d_render_cb(const mozilla::wr::ByteSlice blob, int32_t width,
int32_t height, mozilla::wr::ImageFormat aFormat,
const mozilla::wr::DeviceIntRect* aVisibleRect,
const uint16_t* aTileSize,
const mozilla::wr::TileOffset* aTileOffset,
const mozilla::wr::LayoutIntRect* aDirtyRect,
mozilla::wr::MutByteSlice output) {
return mozilla::wr::Moz2DRenderCallback(
mozilla::wr::ByteSliceToRange(blob), mozilla::gfx::IntSize(width, height),
mozilla::wr::ImageFormatToSurfaceFormat(aFormat), aVisibleRect, aTileSize,
aTileOffset, aDirtyRect, mozilla::wr::MutByteSliceToRange(output));
mozilla::wr::ImageFormatToSurfaceFormat(aFormat), aTileSize, aTileOffset,
aDirtyRect, mozilla::wr::MutByteSliceToRange(output));
}
} // extern

Просмотреть файл

@ -622,10 +622,8 @@ void TransactionBuilder::AddImage(ImageKey key,
void TransactionBuilder::AddBlobImage(BlobImageKey key,
const ImageDescriptor& aDescriptor,
wr::Vec<uint8_t>& aBytes,
const wr::DeviceIntRect& aVisibleRect) {
wr_resource_updates_add_blob_image(mTxn, key, &aDescriptor, &aBytes.inner,
aVisibleRect);
wr::Vec<uint8_t>& aBytes) {
wr_resource_updates_add_blob_image(mTxn, key, &aDescriptor, &aBytes.inner);
}
void TransactionBuilder::AddExternalImage(ImageKey key,
@ -654,10 +652,9 @@ void TransactionBuilder::UpdateImageBuffer(ImageKey aKey,
void TransactionBuilder::UpdateBlobImage(BlobImageKey aKey,
const ImageDescriptor& aDescriptor,
wr::Vec<uint8_t>& aBytes,
const wr::DeviceIntRect& aVisibleRect,
const wr::LayoutIntRect& aDirtyRect) {
wr_resource_updates_update_blob_image(mTxn, aKey, &aDescriptor, &aBytes.inner,
aVisibleRect, aDirtyRect);
aDirtyRect);
}
void TransactionBuilder::UpdateExternalImage(ImageKey aKey,
@ -677,8 +674,8 @@ void TransactionBuilder::UpdateExternalImageWithDirtyRect(
mTxn, aKey, &aDescriptor, aExtID, &aImageType, aChannelIndex, aDirtyRect);
}
void TransactionBuilder::SetBlobImageVisibleArea(
BlobImageKey aKey, const wr::DeviceIntRect& aArea) {
void TransactionBuilder::SetImageVisibleArea(BlobImageKey aKey,
const wr::DeviceIntRect& aArea) {
wr_resource_updates_set_blob_image_visible_area(mTxn, aKey, &aArea);
}

Просмотреть файл

@ -125,8 +125,7 @@ class TransactionBuilder final {
wr::Vec<uint8_t>& aBytes);
void AddBlobImage(wr::BlobImageKey aKey, const ImageDescriptor& aDescriptor,
wr::Vec<uint8_t>& aBytes,
const wr::DeviceIntRect& aVisibleRect);
wr::Vec<uint8_t>& aBytes);
void AddExternalImageBuffer(ImageKey key, const ImageDescriptor& aDescriptor,
ExternalImageId aHandle);
@ -142,7 +141,6 @@ class TransactionBuilder final {
void UpdateBlobImage(wr::BlobImageKey aKey,
const ImageDescriptor& aDescriptor,
wr::Vec<uint8_t>& aBytes,
const wr::DeviceIntRect& aVisibleRect,
const wr::LayoutIntRect& aDirtyRect);
void UpdateExternalImage(ImageKey aKey, const ImageDescriptor& aDescriptor,
@ -157,8 +155,7 @@ class TransactionBuilder final {
const wr::DeviceIntRect& aDirtyRect,
uint8_t aChannelIndex = 0);
void SetBlobImageVisibleArea(BlobImageKey aKey,
const wr::DeviceIntRect& aArea);
void SetImageVisibleArea(BlobImageKey aKey, const wr::DeviceIntRect& aArea);
void DeleteImage(wr::ImageKey aKey);

Просмотреть файл

@ -1602,13 +1602,11 @@ pub extern "C" fn wr_resource_updates_add_blob_image(
image_key: BlobImageKey,
descriptor: &WrImageDescriptor,
bytes: &mut WrVecU8,
visible_rect: DeviceIntRect,
) {
txn.add_blob_image(
image_key,
descriptor.into(),
Arc::new(bytes.flush_into_vec()),
visible_rect,
if descriptor.format == ImageFormat::BGRA8 { Some(256) } else { None }
);
}
@ -1713,14 +1711,12 @@ pub extern "C" fn wr_resource_updates_update_blob_image(
image_key: BlobImageKey,
descriptor: &WrImageDescriptor,
bytes: &mut WrVecU8,
visible_rect: DeviceIntRect,
dirty_rect: LayoutIntRect,
) {
txn.update_blob_image(
image_key,
descriptor.into(),
Arc::new(bytes.flush_into_vec()),
visible_rect,
&DirtyRect::Partial(dirty_rect)
);
}
@ -3164,7 +3160,6 @@ extern "C" {
width: i32,
height: i32,
format: ImageFormat,
visible_rect: &DeviceIntRect,
tile_size: Option<&u16>,
tile_offset: Option<&TileOffset>,
dirty_rect: Option<&LayoutIntRect>,

Просмотреть файл

@ -7,7 +7,7 @@
//! registering fonts found in the blob (see `prepare_request`).
use webrender::api::*;
use webrender::api::units::{BlobDirtyRect, BlobToDeviceTranslation, DeviceIntRect};
use webrender::api::units::{BlobDirtyRect, BlobToDeviceTranslation};
use bindings::{ByteSlice, MutByteSlice, wr_moz2d_render_cb, ArcVecU8, gecko_profiler_start_marker, gecko_profiler_end_marker};
use rayon::ThreadPool;
use rayon::prelude::*;
@ -445,9 +445,6 @@ struct BlobFont {
struct BlobCommand {
/// The blob.
data: Arc<BlobImageData>,
/// What part of the blob should be rasterized (visible_rect's top-left corresponds to
/// (0,0) in the blob's rasterization)
visible_rect: DeviceIntRect,
/// The size of the tiles to use in rasterization, if tiling should be used.
tile_size: Option<TileSize>,
}
@ -457,7 +454,6 @@ struct BlobCommand {
descriptor: BlobImageDescriptor,
commands: Arc<BlobImageData>,
dirty_rect: BlobDirtyRect,
visible_rect: DeviceIntRect,
tile_size: Option<TileSize>,
}
@ -496,12 +492,10 @@ impl AsyncBlobImageRasterizer for Moz2dBlobRasterizer {
let command = &self.blob_commands[&params.request.key];
let blob = Arc::clone(&command.data);
assert!(params.descriptor.rect.size.width > 0 && params.descriptor.rect.size.height > 0);
Job {
request: params.request,
descriptor: params.descriptor,
commands: blob,
visible_rect: command.visible_rect,
dirty_rect: params.dirty_rect,
tile_size: command.tile_size,
}
@ -551,7 +545,6 @@ fn rasterize_blob(job: Job) -> (BlobImageRequest, BlobImageResult) {
descriptor.rect.size.width,
descriptor.rect.size.height,
descriptor.format,
&job.visible_rect,
job.tile_size.as_ref(),
job.request.tile.as_ref(),
dirty_rect.as_ref(),
@ -576,15 +569,15 @@ fn rasterize_blob(job: Job) -> (BlobImageRequest, BlobImageResult) {
}
impl BlobImageHandler for Moz2dBlobImageHandler {
fn add(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, visible_rect: &DeviceIntRect, tile_size: Option<TileSize>) {
fn add(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, tile_size: Option<TileSize>) {
{
let index = BlobReader::new(&data);
assert!(index.reader.has_more());
}
self.blob_commands.insert(key, BlobCommand { data: Arc::clone(&data), visible_rect: *visible_rect, tile_size });
self.blob_commands.insert(key, BlobCommand { data: Arc::clone(&data), tile_size });
}
fn update(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, visible_rect: &DeviceIntRect, dirty_rect: &BlobDirtyRect) {
fn update(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, dirty_rect: &BlobDirtyRect) {
match self.blob_commands.entry(key) {
hash_map::Entry::Occupied(mut e) => {
let command = e.get_mut();
@ -604,8 +597,6 @@ impl BlobImageHandler for Moz2dBlobImageHandler {
}
};
command.data = Arc::new(merge_blob_images(&command.data, &data, dirty_rect));
assert_eq!(command.visible_rect, *visible_rect);
command.visible_rect = *visible_rect;
}
_ => { panic!("missing image key"); }
}

Просмотреть файл

@ -19,7 +19,7 @@ use std::sync::Arc;
use webrender::api::{self, DisplayListBuilder, DocumentId, PipelineId, RenderApi, Transaction};
use webrender::api::{ColorF, CommonItemProperties, SpaceAndClipInfo};
use webrender::api::units::*;
use webrender::euclid::{size2, rect};
use webrender::euclid::size2;
// This example shows how to implement a very basic BlobImageHandler that can only render
// a checkerboard pattern.
@ -136,14 +136,12 @@ impl CheckerboardRenderer {
}
impl api::BlobImageHandler for CheckerboardRenderer {
fn add(&mut self, key: api::BlobImageKey, cmds: Arc<api::BlobImageData>,
_visible_rect: &DeviceIntRect, _: Option<api::TileSize>) {
fn add(&mut self, key: api::BlobImageKey, cmds: Arc<api::BlobImageData>, _: Option<api::TileSize>) {
self.image_cmds
.insert(key, Arc::new(deserialize_blob(&cmds[..]).unwrap()));
}
fn update(&mut self, key: api::BlobImageKey, cmds: Arc<api::BlobImageData>,
_visible_rect: &DeviceIntRect, _dirty_rect: &BlobDirtyRect) {
fn update(&mut self, key: api::BlobImageKey, cmds: Arc<api::BlobImageData>, _dirty_rect: &BlobDirtyRect) {
// Here, updating is just replacing the current version of the commands with
// the new one (no incremental updates).
self.image_cmds
@ -211,7 +209,6 @@ impl Example for App {
blob_img1,
api::ImageDescriptor::new(500, 500, api::ImageFormat::BGRA8, true, false),
serialize_blob(api::ColorU::new(50, 50, 150, 255)),
rect(0, 0, 500, 500),
Some(128),
);
@ -220,7 +217,6 @@ impl Example for App {
blob_img2,
api::ImageDescriptor::new(200, 200, api::ImageFormat::BGRA8, true, false),
serialize_blob(api::ColorU::new(50, 150, 50, 255)),
rect(0, 0, 200, 200),
None,
);

Просмотреть файл

@ -596,7 +596,6 @@ impl ResourceCache {
&img.dirty_rect
),
);
self.discard_tiles_outside_visible_area(img.key, &img.visible_rect);
}
ResourceUpdate::DeleteImage(img) => {
self.delete_image_template(img);
@ -631,7 +630,6 @@ impl ResourceCache {
&img.descriptor,
img.tiling,
Arc::clone(&img.data),
&img.visible_rect,
);
}
ResourceUpdate::UpdateBlobImage(ref img) => {
@ -640,7 +638,6 @@ impl ResourceCache {
&img.descriptor,
&img.dirty_rect,
Arc::clone(&img.data),
&img.visible_rect,
);
}
ResourceUpdate::SetBlobImageVisibleArea(ref key, ref area) => {
@ -923,14 +920,11 @@ impl ResourceCache {
descriptor: &ImageDescriptor,
mut tiling: Option<TileSize>,
data: Arc<BlobImageData>,
visible_rect: &DeviceIntRect,
) {
let max_texture_size = self.max_texture_size();
tiling = get_blob_tiling(tiling, descriptor, max_texture_size);
let viewport_tiles = tiling.map(|tile_size| compute_tile_range(&visible_rect, tile_size));
self.blob_image_handler.as_mut().unwrap().add(key, data, visible_rect, tiling);
self.blob_image_handler.as_mut().unwrap().add(key, data, tiling);
self.blob_image_templates.insert(
key,
@ -938,7 +932,7 @@ impl ResourceCache {
descriptor: *descriptor,
tiling,
dirty_rect: DirtyRect::All,
viewport_tiles,
viewport_tiles: None,
},
);
}
@ -950,9 +944,8 @@ impl ResourceCache {
descriptor: &ImageDescriptor,
dirty_rect: &BlobDirtyRect,
data: Arc<BlobImageData>,
visible_rect: &DeviceIntRect,
) {
self.blob_image_handler.as_mut().unwrap().update(key, data, visible_rect, dirty_rect);
self.blob_image_handler.as_mut().unwrap().update(key, data, dirty_rect);
let max_texture_size = self.max_texture_size();
@ -962,13 +955,11 @@ impl ResourceCache {
let tiling = get_blob_tiling(image.tiling, descriptor, max_texture_size);
let viewport_tiles = image.tiling.map(|tile_size| compute_tile_range(&visible_rect, tile_size));
*image = BlobImageTemplate {
descriptor: *descriptor,
tiling,
dirty_rect: dirty_rect.union(&image.dirty_rect),
viewport_tiles,
viewport_tiles: image.viewport_tiles,
};
}

Просмотреть файл

@ -347,7 +347,6 @@ impl Transaction {
key: BlobImageKey,
descriptor: ImageDescriptor,
data: Arc<BlobImageData>,
visible_rect: DeviceIntRect,
tiling: Option<TileSize>,
) {
self.resource_updates.push(
@ -355,7 +354,6 @@ impl Transaction {
key,
descriptor,
data,
visible_rect,
tiling,
})
);
@ -366,7 +364,6 @@ impl Transaction {
key: BlobImageKey,
descriptor: ImageDescriptor,
data: Arc<BlobImageData>,
visible_rect: DeviceIntRect,
dirty_rect: &BlobDirtyRect,
) {
self.resource_updates.push(
@ -374,7 +371,6 @@ impl Transaction {
key,
descriptor,
data,
visible_rect,
dirty_rect: *dirty_rect,
})
);
@ -527,7 +523,6 @@ pub struct AddBlobImage {
pub descriptor: ImageDescriptor,
//#[serde(with = "serde_image_data_raw")]
pub data: Arc<BlobImageData>,
pub visible_rect: DeviceIntRect,
pub tiling: Option<TileSize>,
}
@ -537,7 +532,6 @@ pub struct UpdateBlobImage {
pub descriptor: ImageDescriptor,
//#[serde(with = "serde_image_data_raw")]
pub data: Arc<BlobImageData>,
pub visible_rect: DeviceIntRect,
pub dirty_rect: BlobDirtyRect,
}

Просмотреть файл

@ -309,12 +309,10 @@ pub trait BlobImageHandler: Send {
);
/// Register a blob image.
fn add(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, visible_rect: &DeviceIntRect,
tiling: Option<TileSize>);
fn add(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, tiling: Option<TileSize>);
/// Update an already registered blob image.
fn update(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, visible_rect: &DeviceIntRect,
dirty_rect: &BlobDirtyRect);
fn update(&mut self, key: BlobImageKey, data: Arc<BlobImageData>, dirty_rect: &BlobDirtyRect);
/// Delete an already registered blob image.
fn delete(&mut self, key: BlobImageKey);

Просмотреть файл

@ -9,7 +9,6 @@ use std::sync::Arc;
use std::sync::Mutex;
use webrender::api::*;
use webrender::api::units::{BlobDirtyRect, BlobToDeviceTranslation, TileOffset};
use webrender::api::units::DeviceIntRect;
// Serialize/deserialize the blob.
@ -130,14 +129,12 @@ impl CheckerboardRenderer {
}
impl BlobImageHandler for CheckerboardRenderer {
fn add(&mut self, key: BlobImageKey, cmds: Arc<BlobImageData>,
_visible_rect: &DeviceIntRect, tile_size: Option<TileSize>) {
fn add(&mut self, key: BlobImageKey, cmds: Arc<BlobImageData>, tile_size: Option<TileSize>) {
self.image_cmds
.insert(key, (deserialize_blob(&cmds[..]).unwrap(), tile_size));
}
fn update(&mut self, key: BlobImageKey, cmds: Arc<BlobImageData>,
_visible_rect: &DeviceIntRect, _dirty_rect: &BlobDirtyRect) {
fn update(&mut self, key: BlobImageKey, cmds: Arc<BlobImageData>, _dirty_rect: &BlobDirtyRect) {
// Here, updating is just replacing the current version of the commands with
// the new one (no incremental updates).
self.image_cmds.get_mut(&key).unwrap().0 = deserialize_blob(&cmds[..]).unwrap();

Просмотреть файл

@ -213,7 +213,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(151, 56, ImageFormat::BGRA8, true, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 151, 56),
Some(128),
);
@ -270,7 +269,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(1510, 111256, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 15010, 111256),
Some(31),
);
@ -403,7 +401,6 @@ impl<'a> RawtestHarness<'a> {
false
),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, image_size.width as i32, image_size.height as i32),
Some(100),
);
@ -435,14 +432,14 @@ impl<'a> RawtestHarness<'a> {
false
),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
// Set a visible rectangle that is too small.
// This will force sync rasterization of the missing tiles during frame building.
DeviceIntRect {
origin: point2(200, 200),
size: size2(80, 80),
},
Some(100),
);
// Set a visible rectangle that is too small.
// This will force sync rasterization of the missing tiles during frame building.
txn.set_blob_image_visible_area(blob_img2, DeviceIntRect {
origin: point2(200, 200),
size: size2(80, 80),
});
builder.push_image(
&info,
@ -488,7 +485,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(1510, 1510, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 1510, 1510),
None,
);
@ -546,7 +542,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(1510, 1510, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 1510, 1510),
&rect(10, 10, 100, 100).into(),
);
@ -604,7 +599,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 500, 500),
None,
);
}
@ -695,7 +689,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 500, 500),
None,
);
blob_img2 = api.generate_blob_image_key();
@ -703,7 +696,6 @@ impl<'a> RawtestHarness<'a> {
blob_img2,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(80, 50, 150, 255)),
rect(0, 0, 500, 500),
None,
);
(blob_img, blob_img2)
@ -761,20 +753,19 @@ impl<'a> RawtestHarness<'a> {
self.submit_dl(&mut epoch, layout_size, builder, &txn.resource_updates);
let _pixels_first = self.render_and_get_pixels(window_rect);
// update and redraw both images
let mut txn = Transaction::new();
txn.update_blob_image(
blob_img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 500, 500),
&rect(100, 100, 100, 100).into(),
);
txn.update_blob_image(
blob_img2,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(59, 50, 150, 255)),
rect(0, 0, 500, 500),
&rect(100, 100, 100, 100).into(),
);
@ -783,13 +774,13 @@ impl<'a> RawtestHarness<'a> {
self.submit_dl(&mut epoch, layout_size, builder, &txn.resource_updates);
let _pixels_second = self.render_and_get_pixels(window_rect);
// only update the first image
let mut txn = Transaction::new();
txn.update_blob_image(
blob_img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 150, 150, 255)),
rect(0, 0, 500, 500),
&rect(200, 200, 100, 100).into(),
);
@ -825,7 +816,6 @@ impl<'a> RawtestHarness<'a> {
img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 500, 500),
None,
);
img
@ -857,7 +847,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 50, 150, 255)),
rect(0, 0, 500, 500),
&rect(100, 100, 100, 100).into(),
);
@ -884,7 +873,6 @@ impl<'a> RawtestHarness<'a> {
blob_img,
ImageDescriptor::new(500, 500, ImageFormat::BGRA8, false, false),
blob::serialize_blob(ColorU::new(50, 150, 150, 255)),
rect(0, 0, 500, 500),
&rect(200, 200, 100, 100).into(),
);