gfx::Color is currently misused in many places. The DrawTargets expect
the color space to be in device space, e.g. what we are actually going
to draw using. Everything sitting above generally deals with sRGB, as
specified in CSS. Sometimes we missed the conversion from sRGB to device
space when issuing draw calls, and similarly sometimes we converted the
color to device space twice.
This patch splits the type in two. sRGBColor and DeviceColor now
represent sRGB and device color spaces respectively. DrawTarget only
accepts DeviceColor, and one can get a DeviceColor from an sRGBColor via
the ToDeviceColor helper API. The reftests now pass with color
management enabled for everything (e.g. CSS) instead of just tagged
raster images.
There will be a follow up patch to enable color management everywhere by
default on all supported platforms.
Differential Revision: https://phabricator.services.mozilla.com/D64771
--HG--
extra : moz-landing-system : lando
~AzureState is expensive, especially in GlyphBufferAzure::Flush, which is a high
fan-in function.
MozReview-Commit-ID: 4JfjMje0Kgs
--HG--
extra : rebase_source : bbc2f06871d9bde9130ddb95d053d16a3f2a091d
This function is not a virtual function and always returns CAIRO_STATUS_SUCCESS
after the patch in bug 1054838 landed. There is no reason to keep it anymore.
MozReview-Commit-ID: EadrrFQyjfY
--HG--
extra : rebase_source : 3f6a284dc9fa396d5cfd3f64190562373801a0a2
The conversion is as follows:
- GraphicsFilter::FILTER_NEAREST == gfx::Filter::POINT
- GraphicsFilter::FILTER_GOOD == gfx::Filter::GOOD
- GraphicsFilter::FILTER_BEST == gfx::Filter::LINEAR
Also typedef GraphicsFilter to gfx::Filter; this will be removed in the next
patch.
These changes mean ToFilter() and ThebesFilter() are no longer needed.
At this point, the relationship between GraphicsExtend and gfx::ExtendMode is
as follows.
- EXTEND_REPEAT matches up with REPEAT.
- EXTEND_REFLECT matches up with REFLECT.
- EXTEND_PAD matches up with CLAMP.
- EXTEND_NONE has no matching value in gfx::ExtendMode.
The only use of EXTEND_NONE is with nsSVGGradientFrame::mExtend. That field
gets assigned EXTEND_NONE in the various constructors, and other values via
SetExtend(). And all uses of that field go immediately into ToExtend() calls,
which convert EXTEND_NONE to CLAMP. So it's safe to change this field to
gfx::ExtendMode and initialize it to CLAMP.
--HG--
extra : rebase_source : 8873174223e77b341e046093d25b320a33f0582b
This is easy because the only remaining uses occur in uncalled functions, which
can be removed.
--HG--
extra : rebase_source : 7c1ec2c175a8a73f1ce2375c3231891ecc6bfb22
This requires doing likewise for GetSolidColor(), PushSolidColor()
HasNonOpaqueColor().
This removes a ThebesRGBA() call in GetDeviceColor() and a ThebesColor() call in
GetSolidColor().
--HG--
extra : rebase_source : 3b66f378443f1ca05b49bc763b2adf42ac3ef845
Preferences are now initialized at startup, then updated with callbacks. The methods that access the cached values are not checking the preferences. This lets us better control which thread reads the prefs.
--HG--
rename : gfx/thebes/gfxPlatform.cpp => gfx/thebes/gfxColorManagement.cpp
rename : gfx/thebes/gfxPlatform.h => gfx/thebes/gfxColorManagement.h
This changes gfxPattern to use GraphicsExtend. All of the inputs and outputs
are GraphicsExtend so there's no point storing it in a type of ExtendMode. We
also intialize gfxPattern to EXTEND_NONE when constructing it for Azure.
--HG--
extra : rebase_source : 576a620b45d5222a5548dd79520537d52ed5659e
Currently SetMatrix will take the Inverse of the passed in matrix but GetMatrix
doesn't not invert it on the way out. This fixes that and adds a
GetInverseMatrix() so that we don't double invert it when we need the inverse.
--HG--
extra : rebase_source : 6bb2049ccee22c62b1825687ecd09ddd1aad8b2e
Our gfxPattern cache is currently way too specific, which causes lots of
unnecessary cache misses. The only thing that we actually need to key on is the
color stops.
This switches the cache to hold GradientStops instead of gfxPatterns. This
improves our cache hit rate and is simpler. It also avoids doing caching when
not using Azure, which currently has no benefit.
Average paint times results (in ms)
(on windows 7 x64, i7-3630qm, HD4000)
-------------------------------------
m-c
open: 3.5 close: 3.3
m-c cache-key
open: 2.6 close: 2.4
ux
open: 7.3 close: 5.2
ux cache-key
open: 6.9 close: 5.3