Open Bug 1524098 Opened 7 years ago Updated 1 year ago

Display list building with Intel GPUs/hybrid graphics

Categories

(Core :: Web Painting, defect, P3)

defect

Tracking

()

People

(Reporter: mikokm, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(2 files)

I did some benchmarking with a goal to better understand how the active graphics card and compositor backends change the display list build times. The ideal scenario here would be that the results are the same for all configurations, since the display list building should be CPU/RAM bound operation. However, I had previously observed that this is not the case on Linux, and wanted to verify this.

I ran benchmarks using Ryan's marionette script1 on my Thinkpad P50 (Xeon E3-1505M, 16GB, Quadro M2000M) and recorded the histograms for PAINT_BUILD_DISPLAYLIST_TIME. The benchmark scrolls Firefox twitter page up and down.

Linux (Ubuntu 18.04, hybrid graphics):

NVIDIA
Basic: sample_count = 3756 average = 2.800000 (default)
OGL: sample_count = 4980 average = 2.300000
WebRender: sample_count = 4859 average = 2.200000

Intel
Basic: sample_count = 3249 average = 4.400000 (default)
OGL: sample_count = 2875 average = 6.700000
WebRender: sample_count = 2937 average = 6.500000

This looks very bad. Using an Intel GPU on this machine under Linux increases the average display list build times by a factor of 2-3.

Windows 10 (hybrid graphics):
NVIDIA
Basic: sample_count = 3768 average = 2.400000
D3D: sample_count = 4231 average = 3.700000 (default)
WebRender: sample_count = 3955 average = 3.100000

Intel
Basic: sample_count = 3622 average = 2.600000 (default)
D3D: sample_count = 4177 average = 4.100000
WebRender: sample_count = 3870 average = 3.400000

The average display list build time increase on Windows seems to be lower, roughly 10%, which is within the benchmark error margin. The accuracy of these benchmarks could definitely be improved. Currently the pages are loaded directly from the internet, so the paint counts may differ. Using mitmproxy would make the page loading more deterministic.

For added confidence, I also ran dl-mutate benchmark2 with similar setups, and managed to reproduce some of the results on Windows.

Display list build times on Windows for 50k divs:
NVIDIA (integrated GPU disabled)
Basic: 8ms
D3D: 8ms (default)
WebRender: 8ms

Hybrid graphics, force Intel:
Basic: 9ms
D3D: 10ms (default)
WebRender: 10ms

Hybrid graphics, force NVIDIA:
Basic: 9ms
D3D: 13.5 ms (default)
WebRender: 10ms

Especially the last setup gave very weird results: it seems that in some cases we have child processes using different GPU (see pictures), which seems to kill our display list building performance.

Attached image taskmanager.png —
Attached image gpus.png —
Priority: -- → P3
Assignee: mikokm → nobody
Status: ASSIGNED → NEW
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: