зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1454042 - Allow missing pipeline information for cross-process iframes. r=sotaro
We should always have the pipeline information for in-process things like async images, but for cross-process iframes we might not have the information right away if the content process doesn't get around to sending it for a while. MozReview-Commit-ID: 18F5nqilXoV --HG-- extra : rebase_source : 610046cbaaefb38b8e11bda857fd64a00722df27
This commit is contained in:
Родитель
7b870caf1a
Коммит
8e7e2dbdb4
|
@ -214,7 +214,7 @@ WebRenderImageData::CreateAsyncImageWebRenderCommands(mozilla::wr::DisplayListBu
|
||||||
// where it will be done when we build the display list for the iframe.
|
// where it will be done when we build the display list for the iframe.
|
||||||
// That happens in AsyncImagePipelineManager.
|
// That happens in AsyncImagePipelineManager.
|
||||||
wr::LayoutRect r = wr::ToRoundedLayoutRect(aBounds);
|
wr::LayoutRect r = wr::ToRoundedLayoutRect(aBounds);
|
||||||
aBuilder.PushIFrame(r, aIsBackfaceVisible, mPipelineId.ref());
|
aBuilder.PushIFrame(r, aIsBackfaceVisible, mPipelineId.ref(), /*ignoreMissingPipelines*/ false);
|
||||||
|
|
||||||
WrBridge()->AddWebRenderParentCommand(OpUpdateAsyncImagePipeline(mPipelineId.value(),
|
WrBridge()->AddWebRenderParentCommand(OpUpdateAsyncImagePipeline(mPipelineId.value(),
|
||||||
aSCBounds,
|
aSCBounds,
|
||||||
|
|
|
@ -1083,9 +1083,10 @@ DisplayListBuilder::PushYCbCrInterleavedImage(const wr::LayoutRect& aBounds,
|
||||||
void
|
void
|
||||||
DisplayListBuilder::PushIFrame(const wr::LayoutRect& aBounds,
|
DisplayListBuilder::PushIFrame(const wr::LayoutRect& aBounds,
|
||||||
bool aIsBackfaceVisible,
|
bool aIsBackfaceVisible,
|
||||||
PipelineId aPipeline)
|
PipelineId aPipeline,
|
||||||
|
bool aIgnoreMissingPipeline)
|
||||||
{
|
{
|
||||||
wr_dp_push_iframe(mWrState, aBounds, aIsBackfaceVisible, aPipeline);
|
wr_dp_push_iframe(mWrState, aBounds, aIsBackfaceVisible, aPipeline, aIgnoreMissingPipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -392,7 +392,8 @@ public:
|
||||||
|
|
||||||
void PushIFrame(const wr::LayoutRect& aBounds,
|
void PushIFrame(const wr::LayoutRect& aBounds,
|
||||||
bool aIsBackfaceVisible,
|
bool aIsBackfaceVisible,
|
||||||
wr::PipelineId aPipeline);
|
wr::PipelineId aPipeline,
|
||||||
|
bool aIgnoreMissingPipeline);
|
||||||
|
|
||||||
// XXX WrBorderSides are passed with Range.
|
// XXX WrBorderSides are passed with Range.
|
||||||
// It is just to bypass compiler bug. See Bug 1357734.
|
// It is just to bypass compiler bug. See Bug 1357734.
|
||||||
|
|
|
@ -1862,13 +1862,14 @@ pub extern "C" fn wr_dp_pop_clip_and_scroll_info(state: &mut WrState) {
|
||||||
pub extern "C" fn wr_dp_push_iframe(state: &mut WrState,
|
pub extern "C" fn wr_dp_push_iframe(state: &mut WrState,
|
||||||
rect: LayoutRect,
|
rect: LayoutRect,
|
||||||
is_backface_visible: bool,
|
is_backface_visible: bool,
|
||||||
pipeline_id: WrPipelineId) {
|
pipeline_id: WrPipelineId,
|
||||||
|
ignore_missing_pipeline: bool) {
|
||||||
debug_assert!(unsafe { is_in_main_thread() });
|
debug_assert!(unsafe { is_in_main_thread() });
|
||||||
|
|
||||||
let mut prim_info = LayoutPrimitiveInfo::new(rect);
|
let mut prim_info = LayoutPrimitiveInfo::new(rect);
|
||||||
prim_info.is_backface_visible = is_backface_visible;
|
prim_info.is_backface_visible = is_backface_visible;
|
||||||
prim_info.tag = state.current_tag;
|
prim_info.tag = state.current_tag;
|
||||||
state.frame_builder.dl_builder.push_iframe(&prim_info, pipeline_id, true);
|
state.frame_builder.dl_builder.push_iframe(&prim_info, pipeline_id, ignore_missing_pipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
|
@ -1243,7 +1243,8 @@ WR_INLINE
|
||||||
void wr_dp_push_iframe(WrState *aState,
|
void wr_dp_push_iframe(WrState *aState,
|
||||||
LayoutRect aRect,
|
LayoutRect aRect,
|
||||||
bool aIsBackfaceVisible,
|
bool aIsBackfaceVisible,
|
||||||
WrPipelineId aPipelineId)
|
WrPipelineId aPipelineId,
|
||||||
|
bool aIgnoreMissingPipeline)
|
||||||
WR_FUNC;
|
WR_FUNC;
|
||||||
|
|
||||||
WR_INLINE
|
WR_INLINE
|
||||||
|
|
|
@ -173,7 +173,7 @@ public:
|
||||||
// That happens in WebRenderCompositableHolder.
|
// That happens in WebRenderCompositableHolder.
|
||||||
|
|
||||||
wr::LayoutRect r = wr::ToRoundedLayoutRect(bounds);
|
wr::LayoutRect r = wr::ToRoundedLayoutRect(bounds);
|
||||||
aBuilder.PushIFrame(r, !BackfaceIsHidden(), data->GetPipelineId().ref());
|
aBuilder.PushIFrame(r, !BackfaceIsHidden(), data->GetPipelineId().ref(), /*ignoreMissingPipelines*/ false);
|
||||||
|
|
||||||
gfx::Matrix4x4 scTransform;
|
gfx::Matrix4x4 scTransform;
|
||||||
gfxRect destGFXRect = mFrame->PresContext()->AppUnitsToGfxUnits(dest);
|
gfxRect destGFXRect = mFrame->PresContext()->AppUnitsToGfxUnits(dest);
|
||||||
|
|
|
@ -390,7 +390,8 @@ nsDisplayRemote::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuild
|
||||||
|
|
||||||
aBuilder.PushIFrame(mozilla::wr::ToRoundedLayoutRect(rect),
|
aBuilder.PushIFrame(mozilla::wr::ToRoundedLayoutRect(rect),
|
||||||
!BackfaceIsHidden(),
|
!BackfaceIsHidden(),
|
||||||
mozilla::wr::AsPipelineId(GetRemoteLayersId()));
|
mozilla::wr::AsPipelineId(GetRemoteLayersId()),
|
||||||
|
/*ignoreMissingPipelines*/ true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче