Closed
Bug 207146
Opened 23 years ago
Closed 11 years ago
Use GDI+ on Win32 to speed up -moz-opacity
Categories
(Core Graveyard :: GFX: Win32, defect)
Tracking
(Not tracked)
RESOLVED
WONTFIX
People
(Reporter: kmcclusk, Unassigned)
Details
(Keywords: perf)
Attachments
(8 files, 2 obsolete files)
| Reporter | ||
Comment 1•23 years ago
|
||
This patch optionally implements -moz-opacity using GDI+ for images. (Which is
the hard part :) ).
It needs additional work to support opacity on other elements. This shouldn't
be too difficult since GDI+ supports alpha when defining colors used for
brushes.
| Reporter | ||
Comment 2•23 years ago
|
||
Comment on attachment 124221 [details] [diff] [review]
patch which uses GDI+ to render -moz-opacity for images
sorry!, Wrong patch!
Attachment #124221 -
Attachment is obsolete: true
| Reporter | ||
Comment 3•23 years ago
|
||
| Reporter | ||
Comment 4•23 years ago
|
||
| Reporter | ||
Comment 5•23 years ago
|
||
| Reporter | ||
Comment 6•23 years ago
|
||
| Reporter | ||
Comment 7•23 years ago
|
||
| Reporter | ||
Comment 8•23 years ago
|
||
| Reporter | ||
Comment 9•23 years ago
|
||
| Reporter | ||
Comment 10•23 years ago
|
||
| Reporter | ||
Updated•23 years ago
|
Attachment #124223 -
Attachment is obsolete: true
| Reporter | ||
Comment 11•23 years ago
|
||
speed test 1 - (pgn with alpha) + global opacity
------------------------------------------------
original 10264 (ms)
using AlphaBlend 4767 (ms)
using GDI+ 2764 (ms) 3.7X faster
speed test 2 - jpeg + global opacity
------------------------------------
original 8752 (ms)
using AlphaBlend 5148 (ms)
Using GDI+ 3475 (ms) 2.5X faster
speed test 3 - (gif)
--------------------
(I don't have recent numbers for this, but should be faster as well)
speed test 4 -(pgn with alpha) *without* global opacity
--------------------------------------------------------
original 18757 (ms)
AlphaBlend 4456 (ms)
using GDI+ 3195 (ms) 5.8X faster
summary: The patch which I attached can use use either the AlphaBlend call or
GDI+ for alpha compositing of images. When using GDI+ it gives approx
2.5X - 5.8X speed improvement over the original. Using Alpha blend gives a nice
speed improvement but there isn't an easy way to implement the full moz-opacity
for elements besides images. Using GDI+ on the otherhand will make it easy to
implement -moz-opacity on other elemnts since GDI+ supports alpha when defining
colors for brushes.
There are two aspects of the patch which speeds up -moz-opacity for images.
(1) Using GDI+ bitmaps to perform alpha compositing instead of using the
existing cross platform global -moz-opacity implementation in the viewmanager.
(Note: There seems to be significant memory overhead when using GDI+. (5-6Mb
overhead just for initializing GDI+)
(2) Creating the backbuffer as a DIB instead of DDB. This speeds up rendering
of png's regardless of whether GDI+ is used. (Note: This will increase memory
footprint since the DIB can not be kept in video card memory and it is cached to
avoid the overhead of re-creating the DIB on each NS_PAINT)
Comment 12•23 years ago
|
||
Is this going to affect the SVG branch, which has a generic system in place to
do opacity, and already uses GDI+ to do opacity on SVG elements?
Kevin, I don't think this approach is compatible with the group opacity model.
Comment 14•23 years ago
|
||
the other issue is that doing this ( SVG branch has the same issue) requires we
distribute a copy of the MS gdiplus.dll with mozilla , since it only comes with
WinXp by default
Kevin, we should talk about this, both about why you want to do this (what
exactly is the workload you're trying to optimize for here) and where is the
right place to do it.
The approach you're trying will work when the view with -moz-opacity consists of
exactly one image and no other visible stuff (no borders or backgrounds etc) but
it won't give the right results (as per CSS) in other cases.
Comment 16•23 years ago
|
||
I wanted to apply patch into local build, but i was unable to. nsImageWin.cpp is
completly different in patch and in cvs. Kevin, could You make a patch for
recent trunk?
| Reporter | ||
Comment 17•23 years ago
|
||
roc: The issue I was looking at was the slow resize performance of images in
mail and composer when the image is made large.
I see your point, the group opacity is incorrect with my approach since it will
be compositing each element as it is drawn, rather than compositing the elements
as a group.
| Reporter | ||
Updated•23 years ago
|
Priority: -- → P2
Target Milestone: --- → Future
Updated•22 years ago
|
Assignee: kmcclusk → win32
Component: GFX → GFX: Win32
Priority: P2 → --
Target Milestone: Future → ---
Comment 18•21 years ago
|
||
If GDI+ had been used before Microsoft patched the JPEG problem with it, would
Mozilla have been susceptible to this exploit? If so, I would be wary of adding
GDI+ to Mozilla, despite the performance gain. If not, go GDI+!
No, the exploit only affected JPEG decoding, which would not be used here.
Comment 20•21 years ago
|
||
And even if it did, we're already linked to millions of lines of Microsoft code
in Windows builds, purely by virtue of using the Win32 API. If you are worried
about holes in Microsoft code affecting Mozilla, don't use a Microsoft OS.
Comment 21•21 years ago
|
||
Obsoletes 124228 (incorrect mime-type and marked as patch when it is a
testcase), but of course I don't have appropriate permissions to do so :)
Updated•17 years ago
|
Product: Core → Core Graveyard
Comment 22•11 years ago
|
||
This bug has been buried in the graveyard and has not been updated in over 5 years. It is probably safe to assume that it will never be fixed, so resolving as WONTFIX.
[Mass-change filter: graveyard-wontfix-2014-09-24]
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → WONTFIX
You need to log in
before you can comment on or make changes to this bug.
Description
•