mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Update WR (transaction API change)
This commit is contained in:
parent
c2d3f2a40f
commit
823f3e2eb1
11 changed files with 56 additions and 87 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
@ -2179,7 +2179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "plane-split"
|
||||
version = "0.8.0"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"binary-space-partition 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3465,7 +3465,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.57.2"
|
||||
source = "git+https://github.com/servo/webrender#6931a25295d17d897a9f77798392bdde66132154"
|
||||
source = "git+https://github.com/servo/webrender#58de1dc2caa7bfee62f7ff45ca1a6d746c2d788c"
|
||||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3485,7 +3485,7 @@ dependencies = [
|
|||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plane-split 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ron 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3500,7 +3500,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webrender_api"
|
||||
version = "0.57.2"
|
||||
source = "git+https://github.com/servo/webrender#6931a25295d17d897a9f77798392bdde66132154"
|
||||
source = "git+https://github.com/servo/webrender#58de1dc2caa7bfee62f7ff45ca1a6d746c2d788c"
|
||||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3893,7 +3893,7 @@ dependencies = [
|
|||
"checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03"
|
||||
"checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2"
|
||||
"checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"
|
||||
"checksum plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "69c557e11e3a1533bc969fa596e5011e1d9f76dd61cd102ef942c9f8654b17a2"
|
||||
"checksum plane-split 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7079b8485b4f9d9560dee7a69ca8f6ca781f9f284ff9d2bf27255d440b03e4af"
|
||||
"checksum png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
|
||||
"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
||||
"checksum proc-macro2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "77997c53ae6edd6d187fec07ec41b207063b5ee6f33680e9fa86d405cdd313d4"
|
||||
|
|
|
@ -416,8 +416,7 @@ impl<'a> CanvasData<'a> {
|
|||
let size = self.drawtarget.get_size();
|
||||
|
||||
let descriptor = webrender_api::ImageDescriptor {
|
||||
width: size.width as u32,
|
||||
height: size.height as u32,
|
||||
size: webrender_api::DeviceUintSize::new(size.width as u32, size.height as u32),
|
||||
stride: None,
|
||||
format: webrender_api::ImageFormat::BGRA8,
|
||||
offset: 0,
|
||||
|
@ -426,31 +425,25 @@ impl<'a> CanvasData<'a> {
|
|||
};
|
||||
let data = webrender_api::ImageData::Raw(Arc::new(element.into()));
|
||||
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
|
||||
match self.image_key {
|
||||
Some(image_key) => {
|
||||
debug!("Updating image {:?}.", image_key);
|
||||
updates.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
txn.update_image(image_key, descriptor, data, None);
|
||||
}
|
||||
None => {
|
||||
self.image_key = Some(self.webrender_api.generate_image_key());
|
||||
debug!("New image {:?}.", self.image_key);
|
||||
updates.add_image(self.image_key.unwrap(),
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
txn.add_image(self.image_key.unwrap(), descriptor, data, None);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(image_key) = mem::replace(&mut self.very_old_image_key, self.old_image_key.take()) {
|
||||
updates.delete_image(image_key);
|
||||
txn.delete_image(image_key);
|
||||
}
|
||||
|
||||
self.webrender_api.update_resources(updates);
|
||||
self.webrender_api.update_resources(txn.resource_updates);
|
||||
|
||||
let data = CanvasImageData {
|
||||
image_key: self.image_key.unwrap(),
|
||||
|
@ -647,16 +640,16 @@ impl<'a> CanvasData<'a> {
|
|||
|
||||
impl<'a> Drop for CanvasData<'a> {
|
||||
fn drop(&mut self) {
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
|
||||
if let Some(image_key) = self.old_image_key.take() {
|
||||
updates.delete_image(image_key);
|
||||
txn.delete_image(image_key);
|
||||
}
|
||||
if let Some(image_key) = self.very_old_image_key.take() {
|
||||
updates.delete_image(image_key);
|
||||
txn.delete_image(image_key);
|
||||
}
|
||||
|
||||
self.webrender_api.update_resources(updates);
|
||||
self.webrender_api.update_resources(txn.resource_updates);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -268,13 +268,13 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
|
|||
fn remove_webgl_context(&mut self, context_id: WebGLContextId) {
|
||||
// Release webrender image keys.
|
||||
if let Some(info) = self.cached_context_info.remove(&context_id) {
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
|
||||
if let Some(image_key) = info.image_key {
|
||||
updates.delete_image(image_key);
|
||||
txn.delete_image(image_key);
|
||||
}
|
||||
|
||||
self.webrender_api.update_resources(updates)
|
||||
self.webrender_api.update_resources(txn.resource_updates)
|
||||
}
|
||||
|
||||
// Release GL context.
|
||||
|
@ -423,12 +423,9 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
|
|||
let data = Self::external_image_data(context_id);
|
||||
|
||||
let image_key = webrender_api.generate_image_key();
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.add_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
webrender_api.update_resources(updates);
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
txn.add_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
|
||||
image_key
|
||||
}
|
||||
|
@ -442,12 +439,9 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
|
|||
let descriptor = Self::image_descriptor(size, alpha);
|
||||
let data = Self::external_image_data(context_id);
|
||||
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
webrender_api.update_resources(updates);
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
txn.update_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
}
|
||||
|
||||
/// Creates a `webrender_api::ImageKey` that uses raw pixels.
|
||||
|
@ -459,12 +453,9 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
|
|||
let data = webrender_api::ImageData::new(data);
|
||||
|
||||
let image_key = webrender_api.generate_image_key();
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.add_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
webrender_api.update_resources(updates);
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
txn.add_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
|
||||
image_key
|
||||
}
|
||||
|
@ -478,19 +469,15 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
|
|||
let descriptor = Self::image_descriptor(size, alpha);
|
||||
let data = webrender_api::ImageData::new(data);
|
||||
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
webrender_api.update_resources(updates);
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
txn.update_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
}
|
||||
|
||||
/// Helper function to create a `webrender_api::ImageDescriptor`.
|
||||
fn image_descriptor(size: Size2D<i32>, alpha: bool) -> webrender_api::ImageDescriptor {
|
||||
webrender_api::ImageDescriptor {
|
||||
width: size.width as u32,
|
||||
height: size.height as u32,
|
||||
size: webrender_api::DeviceUintSize::new(size.width as u32, size.height as u32),
|
||||
stride: None,
|
||||
format: webrender_api::ImageFormat::BGRA8,
|
||||
offset: 0,
|
||||
|
|
|
@ -177,14 +177,14 @@ impl FontCache {
|
|||
.entry((font_key, size))
|
||||
.or_insert_with(|| {
|
||||
let key = webrender_api.generate_font_instance_key();
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.add_font_instance(key,
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
txn.add_font_instance(key,
|
||||
font_key,
|
||||
size,
|
||||
None,
|
||||
None,
|
||||
Vec::new());
|
||||
webrender_api.update_resources(updates);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
key
|
||||
});
|
||||
|
||||
|
@ -373,13 +373,13 @@ impl FontCache {
|
|||
|
||||
let font_key = *webrender_fonts.entry(template.identifier.clone()).or_insert_with(|| {
|
||||
let font_key = webrender_api.generate_font_key();
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
match (template.bytes_if_in_memory(), template.native_font()) {
|
||||
(Some(bytes), _) => updates.add_raw_font(font_key, bytes, 0),
|
||||
(None, Some(native_font)) => updates.add_native_font(font_key, native_font),
|
||||
(None, None) => updates.add_raw_font(font_key, template.bytes().clone(), 0),
|
||||
(Some(bytes), _) => txn.add_raw_font(font_key, bytes, 0),
|
||||
(None, Some(native_font)) => txn.add_native_font(font_key, native_font),
|
||||
(None, None) => txn.add_raw_font(font_key, template.bytes().clone(), 0),
|
||||
}
|
||||
webrender_api.update_resources(updates);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
font_key
|
||||
});
|
||||
|
||||
|
|
|
@ -73,8 +73,8 @@ use style_traits::cursor::CursorKind;
|
|||
use table_cell::CollapsedBordersForCell;
|
||||
use webrender_api::{self, BorderRadius, BorderSide, BoxShadowClipMode, ColorF, ExternalScrollId};
|
||||
use webrender_api::{FilterOp, GlyphInstance, ImageRendering, LayoutRect, LayoutSize};
|
||||
use webrender_api::{LayoutTransform, LayoutVector2D, LineStyle, NormalBorder, ScrollPolicy};
|
||||
use webrender_api::{ScrollSensitivity, StickyOffsetBounds};
|
||||
use webrender_api::{LayoutTransform, LayoutVector2D, LineStyle, NormalBorder, ScrollSensitivity};
|
||||
use webrender_api::StickyOffsetBounds;
|
||||
|
||||
fn establishes_containing_block_for_absolute(
|
||||
flags: StackingContextCollectionFlags,
|
||||
|
@ -760,7 +760,6 @@ pub trait FragmentDisplayListBuilding {
|
|||
&self,
|
||||
id: StackingContextId,
|
||||
base_flow: &BaseFlow,
|
||||
scroll_policy: ScrollPolicy,
|
||||
context_type: StackingContextType,
|
||||
established_reference_frame: Option<ClipScrollNodeIndex>,
|
||||
parent_clipping_and_scrolling: ClippingAndScrolling,
|
||||
|
@ -1887,7 +1886,6 @@ impl FragmentDisplayListBuilding for Fragment {
|
|||
&self,
|
||||
id: StackingContextId,
|
||||
base_flow: &BaseFlow,
|
||||
scroll_policy: ScrollPolicy,
|
||||
context_type: StackingContextType,
|
||||
established_reference_frame: Option<ClipScrollNodeIndex>,
|
||||
parent_clipping_and_scrolling: ClippingAndScrolling,
|
||||
|
@ -1931,7 +1929,6 @@ impl FragmentDisplayListBuilding for Fragment {
|
|||
self.transform_matrix(&border_box),
|
||||
self.style().get_used_transform_style().to_layout(),
|
||||
self.perspective_matrix(&border_box),
|
||||
scroll_policy,
|
||||
parent_clipping_and_scrolling,
|
||||
established_reference_frame,
|
||||
)
|
||||
|
@ -2713,7 +2710,6 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
|
|||
let new_context = self.fragment.create_stacking_context(
|
||||
self.base.stacking_context_id,
|
||||
&self.base,
|
||||
ScrollPolicy::Scrollable,
|
||||
stacking_context_type,
|
||||
None,
|
||||
parent_clipping_and_scrolling,
|
||||
|
@ -2747,7 +2743,6 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
|
|||
let stacking_context = self.fragment.create_stacking_context(
|
||||
self.base.stacking_context_id,
|
||||
&self.base,
|
||||
ScrollPolicy::Scrollable,
|
||||
StackingContextType::Real,
|
||||
established_reference_frame,
|
||||
parent_clipping_and_scrolling,
|
||||
|
@ -2885,7 +2880,6 @@ impl InlineFlowDisplayListBuilding for InlineFlow {
|
|||
let stacking_context = fragment.create_stacking_context(
|
||||
fragment.stacking_context_id,
|
||||
&self.base,
|
||||
ScrollPolicy::Scrollable,
|
||||
StackingContextType::Real,
|
||||
None,
|
||||
state.current_clipping_and_scrolling,
|
||||
|
|
|
@ -26,8 +26,8 @@ use webrender_api::{BorderRadius, BorderWidths, BoxShadowClipMode, ClipMode, Col
|
|||
use webrender_api::{ComplexClipRegion, ExtendMode, ExternalScrollId, FilterOp, FontInstanceKey};
|
||||
use webrender_api::{GlyphInstance, GradientStop, ImageKey, ImageRendering, LayoutPoint};
|
||||
use webrender_api::{LayoutRect, LayoutSize, LayoutTransform, LayoutVector2D, LineStyle};
|
||||
use webrender_api::{MixBlendMode, NinePatchBorder, NormalBorder, ScrollPolicy, ScrollSensitivity};
|
||||
use webrender_api::{Shadow, StickyOffsetBounds, TransformStyle};
|
||||
use webrender_api::{MixBlendMode, NinePatchBorder, NormalBorder, ScrollSensitivity, Shadow};
|
||||
use webrender_api::{StickyOffsetBounds, TransformStyle};
|
||||
|
||||
pub use style::dom::OpaqueNode;
|
||||
|
||||
|
@ -203,9 +203,6 @@ pub struct StackingContext {
|
|||
/// The perspective matrix to be applied to children.
|
||||
pub perspective: Option<LayoutTransform>,
|
||||
|
||||
/// The scroll policy of this layer.
|
||||
pub scroll_policy: ScrollPolicy,
|
||||
|
||||
/// The clip and scroll info for this StackingContext.
|
||||
pub parent_clipping_and_scrolling: ClippingAndScrolling,
|
||||
|
||||
|
@ -227,7 +224,6 @@ impl StackingContext {
|
|||
transform: Option<LayoutTransform>,
|
||||
transform_style: TransformStyle,
|
||||
perspective: Option<LayoutTransform>,
|
||||
scroll_policy: ScrollPolicy,
|
||||
parent_clipping_and_scrolling: ClippingAndScrolling,
|
||||
established_reference_frame: Option<ClipScrollNodeIndex>,
|
||||
) -> StackingContext {
|
||||
|
@ -242,7 +238,6 @@ impl StackingContext {
|
|||
transform,
|
||||
transform_style,
|
||||
perspective,
|
||||
scroll_policy,
|
||||
parent_clipping_and_scrolling,
|
||||
established_reference_frame,
|
||||
}
|
||||
|
@ -261,7 +256,6 @@ impl StackingContext {
|
|||
None,
|
||||
TransformStyle::Flat,
|
||||
None,
|
||||
ScrollPolicy::Scrollable,
|
||||
ClippingAndScrolling::simple(ClipScrollNodeIndex::root_scroll_node()),
|
||||
None,
|
||||
)
|
||||
|
|
|
@ -7,9 +7,8 @@
|
|||
// This might be achieved by sharing types between WR and Servo display lists, or
|
||||
// completely converting layout to directly generate WebRender display lists, for example.
|
||||
|
||||
use display_list::items::{BorderDetails, ClipScrollNode};
|
||||
use display_list::items::{ClipScrollNodeIndex, ClipScrollNodeType, DisplayItem};
|
||||
use display_list::items::{DisplayList, StackingContextType};
|
||||
use display_list::items::{BorderDetails, ClipScrollNode, ClipScrollNodeIndex, ClipScrollNodeType};
|
||||
use display_list::items::{DisplayItem, DisplayList, StackingContextType};
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use webrender_api::{self, ClipAndScrollInfo, ClipId, DisplayListBuilder, GlyphRasterSpace};
|
||||
|
||||
|
@ -213,7 +212,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
builder.pop_all_shadows();
|
||||
},
|
||||
DisplayItem::Iframe(ref item) => {
|
||||
builder.push_iframe(&self.prim_info(), item.iframe.to_webrender());
|
||||
builder.push_iframe(&self.prim_info(), item.iframe.to_webrender(), true);
|
||||
},
|
||||
DisplayItem::PushStackingContext(ref item) => {
|
||||
let stacking_context = &item.stacking_context;
|
||||
|
@ -222,7 +221,6 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
let reference_frame_clip_id = builder.push_stacking_context(
|
||||
&webrender_api::LayoutPrimitiveInfo::new(stacking_context.bounds),
|
||||
None,
|
||||
stacking_context.scroll_policy,
|
||||
stacking_context.transform.map(Into::into),
|
||||
stacking_context.transform_style,
|
||||
stacking_context.perspective,
|
||||
|
|
|
@ -807,8 +807,6 @@ malloc_size_of_is_0!(webrender_api::NormalBorder);
|
|||
#[cfg(feature = "webrender_api")]
|
||||
malloc_size_of_is_0!(webrender_api::RepeatMode);
|
||||
#[cfg(feature = "webrender_api")]
|
||||
malloc_size_of_is_0!(webrender_api::ScrollPolicy);
|
||||
#[cfg(feature = "webrender_api")]
|
||||
malloc_size_of_is_0!(webrender_api::ScrollSensitivity);
|
||||
#[cfg(feature = "webrender_api")]
|
||||
malloc_size_of_is_0!(webrender_api::StickyOffsetBounds);
|
||||
|
|
|
@ -71,8 +71,7 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut
|
|||
}
|
||||
};
|
||||
let descriptor = webrender_api::ImageDescriptor {
|
||||
width: image.width,
|
||||
height: image.height,
|
||||
size: webrender_api::DeviceUintSize::new(image.width, image.height),
|
||||
stride: None,
|
||||
format: webrender_api::ImageFormat::BGRA8,
|
||||
offset: 0,
|
||||
|
@ -81,9 +80,9 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut
|
|||
};
|
||||
let data = webrender_api::ImageData::new(bytes);
|
||||
let image_key = webrender_api.generate_image_key();
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.add_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(updates);
|
||||
let mut txn = webrender_api::Transaction::new();
|
||||
txn.add_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(txn.resource_updates);
|
||||
image.id = Some(image_key);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[mix-blend-mode-paragraph.html]
|
||||
type: reftest
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[mix-blend-mode-parent-with-text.html]
|
||||
type: reftest
|
||||
expected: FAIL
|
Loading…
Add table
Add a link
Reference in a new issue