Open Bug 1555510 Opened 10 months ago Updated 9 months ago

Assertion failure: [GFX1]: [Tiling:Client] Failed to allocate a TextureClient, at src/gfx/2d/Logging.h:748

Categories

(Core :: Graphics, defect, P3)

Unspecified
Android
defect

Tracking

()

Tracking Status
firefox69 --- fix-optional

People

(Reporter: tsmith, Unassigned)

References

(Blocks 1 open bug)

Details

(4 keywords)

Attachments

(2 files)

Attached file testcase.html

This test case is Android specific.

Reduced with m-c: 20190529-2bb77ed1fcc5

Assertion failure: [GFX1]: [Tiling:Client] Failed to allocate a TextureClient, at src/gfx/2d/Logging.h:748

Hit MOZ_CRASH(GFX: An assert from the graphics logger) at src/gfx/2d/Logging.h:749

eip = 0x7e3d04b3   esp = 0x85dee260   ebp = 0x85dee278   ebx = 0x851dcdc8
esi = 0x000002ed   edi = 0x82823101   eax = 0x8282315d   ecx = 0x8623a17c
edx = 0x0000007e   efl = 0x00210286
OS|Android|0.0.0 Linux 4.4.124+ #1 SMP PREEMPT Sun Nov 4 14:31:25 UTC 2018 i686
CPU|x86|GenuineIntel family 6 model 6 stepping 3|4
GPU|||
Crash|SIGSEGV|0x0|13
13|0|libxul.so|mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::WriteLog(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)|hg:hg.mozilla.org/mozilla-central:gfx/2d/Logging.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|749|0x1e
13|1|libxul.so|mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::Flush()|hg:hg.mozilla.org/mozilla-central:gfx/2d/Logging.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|287|0xf
13|2|libxul.so|mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::~Log()|hg:hg.mozilla.org/mozilla-central:gfx/2d/Logging.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|280|0x1f
13|3|libxul.so|mozilla::layers::CreateBackBufferTexture(mozilla::layers::TextureClient*, mozilla::layers::CompositableClient&, mozilla::layers::TextureClientAllocator*)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/TiledContentClient.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x14
13|4|libxul.so|mozilla::layers::TileClient::AcquireBackBuffer(mozilla::layers::CompositableClient&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, gfxContentType, mozilla::layers::SurfaceMode, mozilla::layers::TilePaintFlags)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/TiledContentClient.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|609|0xe
13|5|libxul.so|mozilla::layers::ClientMultiTiledLayerBuffer::ValidateTile(mozilla::layers::TileClient&, mozilla::gfx::IntPointTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits>&, mozilla::layers::TilePaintFlags)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/MultiTiledContentClient.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|339|0x2f
13|6|libxul.so|mozilla::layers::ClientMultiTiledLayerBuffer::Update(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::TilePaintFlags)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/MultiTiledContentClient.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|230|0x64
13|7|libxul.so|mozilla::layers::ClientMultiTiledLayerBuffer::PaintThebes(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void (*)(mozilla::layers::PaintedLayer*, gfxContext*, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::DrawRegionClip, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void*), void*, mozilla::layers::TilePaintFlags)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/MultiTiledContentClient.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|117|0x13
13|8|libxul.so|mozilla::layers::ClientMultiTiledLayerBuffer::ProgressiveUpdate(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits>&, mozilla::layers::BasicTiledLayerPaintData*, void (*)(mozilla::layers::PaintedLayer*, gfxContext*, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::DrawRegionClip, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void*), void*)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/MultiTiledContentClient.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|666|0x16
13|9|libxul.so|mozilla::layers::ClientTiledPaintedLayer::RenderLowPrecision(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void (*)(mozilla::layers::PaintedLayer*, gfxContext*, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::DrawRegionClip, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void*), void*)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientTiledPaintedLayer.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|428|0x33
13|10|libxul.so|mozilla::layers::ClientTiledPaintedLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientTiledPaintedLayer.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|625|0x21
13|11|libxul.so|non-virtual thunk to mozilla::layers::ClientTiledPaintedLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientTiledPaintedLayer.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|12|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|13|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|14|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|15|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|16|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|17|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|18|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|19|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|20|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|21|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|22|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|23|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|24|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|25|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|26|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|27|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|28|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|29|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|30|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|31|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|32|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|33|libxul.so|<name omitted>|hg:hg.mozilla.org/mozilla-central:js/xpconnect/public/xpc_map_end.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|45|0x8
13|34|libxul.so|mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|53|0xf
13|35|libxul.so|non-virtual thunk to mozilla::layers::ClientContainerLayer::RenderLayer()|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientContainerLayer.h:2bb77ed1fcc5ad06f91612d419160f54c09369db|0|0x21
13|36|libxul.so|mozilla::layers::ClientLayerManager::EndTransactionInternal(void (*)(mozilla::layers::PaintedLayer*, gfxContext*, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::DrawRegionClip, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void*), void*, mozilla::layers::LayerManager::EndTransactionFlags)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/ClientLayerManager.cpp:2bb77ed1fcc5ad06f91612d419160f54c09369db|318|0x8
13|37|libxul.so|mozilla::layers::ClientLayerManager::EndTransaction(void (*)(mozilla::layers::PaintedLayer*, gfxContext*, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::DrawRegionClip, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, void*), void*, mozilla::layers::LayerManager::EndTransactionFlags)|hg:hg.mozilla.org/mozilla-central:gfx/layers/client/
...
Flags: in-testsuite?

Given the "scale: 1 36 0.413", I'm guessing it asked for something too big and it refused to allocate the surface.

Flags: needinfo?(jnicol)
Priority: -- → P3

This doesn't reproduce for me, and nothing in the layer dump looks suspicious.

Tyson, is it possible to reproduce with layout.display-list.dump=true, or to use mozregression to see if there is a regression range?

Flags: needinfo?(jnicol) → needinfo?(twsmith)
Attached file log.txt

It also appears that layout.css.individual-transform.enabled=true is required to repro.

Flags: needinfo?(twsmith)

Thanks, yeah I can reproduce with that pref.

You can't actually see the layer in the log because we crash before the newest layer tree is dumped. But yes, as Andrew guessed the large scale means the bounds of the outline display item are gigantic, so the layer it creates is gigantic. We clip the layer to the critical display port when painting high-res tiles, but when painting low-res ones we attempt to paint the whole layer. This allocates far too many tiles and we run out of memory and crash.

I can also reproduce this on Linux if I enable tiles, presumably it affects OS X too.

I traced the size of the layer back to here: https://searchfox.org/mozilla-central/source/layout/painting/FrameLayerBuilder.cpp#4661 - itemBuildingRect is small, but once scaled by the scale we get the large size.

On Linux with tiles disabled the layer is large but not crazy. Is there some code to clip the paint region to the display port for ClientPaintedLayer which is missing for ClientTiledPaintedLayer? Should we be doing that in the tiling code somewhere? I seem to have forgotten how this is supposed to work pretty quickly!

Flags: needinfo?(matt.woodrow)

I would expect the building rect to only cover the area that is visible within the displayport. For values inside the transform, that would be a tiny rectangle, such that it scales up to roughly the displayport size.

The other possibility is that we have prerendering of the transform, but I can't see how we'd be triggering that.

Flags: needinfo?(matt.woodrow)
You need to log in before you can comment on or make changes to this bug.