| Commit message (Collapse) | Author | Age |
|
|
|
|
|
| |
BUG=skia:
Review URL: https://codereview.chromium.org/830083002
|
|
|
|
|
|
|
|
| |
intersect doesn't change the bounds when the two bounds do not intersect. This is definitely not the intended behavior.
With the SKPs captured on 12/23/14, Chrome began passing Skia drawPicture ops that did not intersect the current clip - which revealed this bug.
Review URL: https://codereview.chromium.org/817483004
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This CL fixes 5 bugs related to hoisting image filters:
For image filters the src layer (the one prior to filtering) often needs to be
smaller then the final layer. This requires the saveLayer's optional bounds
to be stored (in SkLayerInfo.h and SkRecordDraw.cpp) and then used in
compute_source_rect and carried around in GrCachedLayer.
The image filters can add an extra offset to the final draw operation.
This is now computed in GrLayerHoister::FilterLayer and carried around in
GrCachedLayer.
Filtered layers must use exact matches. This is now done in GrLayerCache::lock.
The filter cache requires a valid matrix so it can compute the correct offset.
This is now done in GrLayerHoister::FilterLayer.
Filtered layers need to be drawn with drawSprite while unfiltered (and therefore
hopefully atlased) layers can be drawn with drawBitmap. This is now done in
draw_replacement_bitmap.
Committed: https://skia.googlesource.com/skia/+/702eb9622102599d94ab6798e6227cf29f48c2d3
Review URL: https://codereview.chromium.org/803183003
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of https://codereview.chromium.org/803183003/)
Reason for revert:
Breaking DM
Original issue's description:
> Fix layer hoisting image filter corner cases
>
> This CL fixes 5 bugs related to hoisting image filters:
>
> For image filters the src layer (the one prior to filtering) often needs to be
> smaller then the final layer. This requires the saveLayer's optional bounds
> to be stored (in SkLayerInfo.h and SkRecordDraw.cpp) and then used in
> compute_source_rect and carried around in GrCachedLayer.
>
> The image filters can add an extra offset to the final draw operation.
> This is now computed in GrLayerHoister::FilterLayer and carried around in
> GrCachedLayer.
>
> Filtered layers must use exact matches. This is now done in GrLayerCache::lock.
>
> The filter cache requires a valid matrix so it can compute the correct offset.
> This is now done in GrLayerHoister::FilterLayer.
>
> Filtered layers need to be drawn with drawSprite while unfiltered (and therefore
> hopefully atlased) layers can be drawn with drawBitmap. This is now done in
> draw_replacement_bitmap.
>
> Committed: https://skia.googlesource.com/skia/+/702eb9622102599d94ab6798e6227cf29f48c2d3
TBR=bsalomon@google.com
NOTREECHECKS=true
NOTRY=true
Review URL: https://codereview.chromium.org/790643009
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This CL fixes 5 bugs related to hoisting image filters:
For image filters the src layer (the one prior to filtering) often needs to be
smaller then the final layer. This requires the saveLayer's optional bounds
to be stored (in SkLayerInfo.h and SkRecordDraw.cpp) and then used in
compute_source_rect and carried around in GrCachedLayer.
The image filters can add an extra offset to the final draw operation.
This is now computed in GrLayerHoister::FilterLayer and carried around in
GrCachedLayer.
Filtered layers must use exact matches. This is now done in GrLayerCache::lock.
The filter cache requires a valid matrix so it can compute the correct offset.
This is now done in GrLayerHoister::FilterLayer.
Filtered layers need to be drawn with drawSprite while unfiltered (and therefore
hopefully atlased) layers can be drawn with drawBitmap. This is now done in
draw_replacement_bitmap.
Review URL: https://codereview.chromium.org/803183003
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(patchset #1 id:1 of https://codereview.chromium.org/805983003/)
Reason for revert:
Test-Win7-ShuttleA-HD2000-x86-Debug-GDI
Original issue's description:
> Use SkPaint::getFontBounds() for text bounding boxes in pictures.
>
> Now that SkTextBlobs have landed, this is a perf no-op, but it at least lets us eliminate a bunch of questionable hacks.
>
> CQ_EXTRA_TRYBOTS=client.skia:Test-Win7-ShuttleA-HD2000-x86-Debug-Trybot,Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug-Trybot
>
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/02d2b9831579173e783569530ab7bae08de907e9
TBR=reed@google.com,mtklein@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/789793004
|
|
|
|
|
|
|
|
|
|
| |
Now that SkTextBlobs have landed, this is a perf no-op, but it at least lets us eliminate a bunch of questionable hacks.
CQ_EXTRA_TRYBOTS=client.skia:Test-Win7-ShuttleA-HD2000-x86-Debug-Trybot,Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug-Trybot
BUG=skia:
Review URL: https://codereview.chromium.org/805983003
|
|
|
|
|
|
|
|
| |
These calls are unused and going away. Waiting on crrev.com/796083002.
BUG=skia:
Review URL: https://codereview.chromium.org/794263002
|
|
|
|
|
|
|
|
|
|
|
| |
No runtime difference here, but it makes it impossible to forget to make
a shallow copy; you can't get at the full bitmap without it.
NOTREECHECKS=true
BUG=skia:
Review URL: https://codereview.chromium.org/799603002
|
|
|
|
|
|
| |
R=mtklein@google.com, reed@google.com, robertphillips@google.com
Review URL: https://codereview.chromium.org/789033002
|
|
|
|
|
|
|
|
|
| |
This reverts commit af641a1c10f176cb9617026d3cc93c117a85d13d.
BUG=skia:
TBR=
Review URL: https://codereview.chromium.org/783493002
|
|
|
|
|
|
| |
The conversion step from GrCachedLayer to ReplacementInfo isn't necessary.
Review URL: https://codereview.chromium.org/769533004
|
|
|
|
|
|
|
|
|
| |
This reverts commit 3729469d6a12266037b697c2192768545e097ab0.
BUG=skia:
TBR=
Review URL: https://codereview.chromium.org/778563002
|
|
|
|
|
|
|
|
| |
patch from issue 769703002 at patchset 1 (http://crrev.com/769703002#ps1)
BUG=skia:
Review URL: https://codereview.chromium.org/772533004
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This switches to a new way of doing this, enforcing the caching with the type
recorded rather than having to do it in SkRecorder. Should be more foolproof.
Updated SkPath and SkBitmap's equivalents too. ImmutableBitmap was close,
but using inheritance now makes the rest of the code less weird.
BUG=437511
I'm not sure whether or not this will _fix_ the SkMatrix aspect of that bug.
There may be other SkMatrices that we're racing on. It does cover the obvious
ones, though, and removing the SkTRacy<> wrapper will allow TSAN to show
us any other races.
It turned out to be easier to turn missing optional matrices into I early rather
than late. I figure this should be harmless. Recording and playback perf both
look neutral.
Review URL: https://codereview.chromium.org/773433003
|
|
|
|
|
|
|
|
|
|
| |
hoisting key
Adding the rendering canvas' CTM to the layer hoisting key (i.e., Add support for hoisting layers in pictures drawn with a matrix - https://codereview.chromium.org/748853002/) has increased the cache miss rate due to accumulated floating point error. This CL fixes part of the issue by using the chain of operation indices leading to each saveLayer as the key. The canvas' CTM must still form part of the key but should be less subject to accumulated error.
BUG=skia:2315
Review URL: https://codereview.chromium.org/753253002
|
|
|
|
|
|
|
|
| |
patch from issue 747033005 at patchset 80001 (http://crrev.com/747033005#ps80001)
BUG=skia:
Review URL: https://codereview.chromium.org/732653004
|
|
|
|
|
|
| |
BUG=skia:3144
Review URL: https://codereview.chromium.org/748063002
|
|
|
|
|
|
|
|
| |
Saves 4 bytes per clip op.
BUG=skia:
Review URL: https://codereview.chromium.org/741093002
|
|
|
|
|
|
|
|
|
|
|
|
| |
We fix this by rewriting empty queries to very tiny queries, which will certainly
hit ops that span the entire picture (like Clear) and hopefully not much more.
(This doesn't quite work in the full cull rect world if [0,0,ε,ε] doesn't
overlap the picture. Let's cross that bridge when we get there.)
BUG=432991
Review URL: https://codereview.chromium.org/732723004
|
|
|
|
|
|
|
|
| |
Whatever assertion was triggering in SkRTree.cpp seems to be gone now.
BUG=432991
Review URL: https://codereview.chromium.org/725373003
|
|
|
|
|
|
|
|
|
|
|
|
| |
Idea:
1. in its mutable recording state, keep a table of drawables on the side, and store an index in the record list.
2. In "immediate-mode" draw, just call the clients drawable directly (need access to our private list to turn the stored index into a proc)
3. when we "snap", we replace the list of drawables with a list of (sub) pictures, and then during playback of the snapped picture, we invoke a private drawable which just calls "drawPicture" on the index'd subpicture.
Review URL: https://codereview.chromium.org/727363003
|
|
|
|
|
|
|
|
|
|
| |
Chromium creates a picture to contain their picture pile in order to use MultiPictureDraw. They currently do not create a bounding box for that picture but I still need layer information for it. This change allows Chromium to continue without a BBH but still have layer information.
In the future, the brute force BBH might be suitable for their use case.
Please see gpu_raster_worker_pool.cc in (Add flag to beginRecording to request saveLayer information - https://codereview.chromium.org/721883002/) for where this is happening in Chromium.
Review URL: https://codereview.chromium.org/733963004
|
|
|
|
| |
Review URL: https://codereview.chromium.org/719133002
|
|
|
|
|
|
|
|
|
|
| |
Now that CollectLayers directly uses FillBounds we can:
skip the explicit intersection with the clipBounds after an adjustAndMap call
skip the storage and use of the clipBounds in SaveLayerInfo
Review URL: https://codereview.chromium.org/719793002
|
|
|
|
|
|
| |
Rather then exposing parts of FillBounds (as in Expose FillBounds to allow GrPictureUtils::CollectLayers to be layered on top of it - https://codereview.chromium.org/698643002/), this CL moves CollectLayers into SkRecordDraw.cpp to accomplish the layering.
Review URL: https://codereview.chromium.org/716913003
|
|
|
|
|
|
|
|
|
|
| |
The calls to visit() to execute the SkRecord::Draw::operator() code path
is not clear to read, so adding some comments to help other new-comers
follow this through to the SkCanvas calls.
R=mtklein@chromium.org
Review URL: https://codereview.chromium.org/695403003
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
complex paint
This CL shrinks the bound computed for saveLayers that possess both an explicit
bound and a complex paint (e.g., one that affects transparent black). In this
case the bound of the layer should be the clipped explicit bound rather then
the clip prior/after the saveLayer/restore block.
In the following the first bound is the currently computed bound
while the second is the new/desired one:
For a 100x100 picture
saveLayer (no bound, no paint) [ 0 0 100 100 ] [ 50 50 100 100 ]
setMatrix (translate 50, 50) [ 0 0 100 100 ] [ 50 50 100 100 ]
saveLayer (bound of 0, 0, 50, 50 - complex paint) [ 0 0 100 100 ] [ 50 50 100 100 ]
restore [ 0 0 100 100 ] [ 50 50 100 100 ]
restore [ 0 0 100 100 ] [ 50 50 100 100 ]
Review URL: https://codereview.chromium.org/696763002
|
|
|
|
|
|
| |
BUG=skia:3074
Review URL: https://codereview.chromium.org/678303004
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(patchset #5 id:80001 of https://codereview.chromium.org/680363003/)
Reason for revert:
Mac mini asserting
Original issue's description:
> Use SkTypeface::getBounds() in bounding-box calculations.
>
> This should produce tighter conservative bounding boxes for text than the
> approximation code it replaces.
>
> Recording performance is neutral on my desktop. Playback performance
> improves by up to 15% on text heavy pages, e.g.
>
> desk_pokemonwiki.skp_1 3.24ms -> 2.83ms 0.87x
> desk_baidu.skp_1 1.91ms -> 1.58ms 0.83x
>
> Committed: https://skia.googlesource.com/skia/+/bf8dc343df4fbdcb8af546eb68b640e011a33489
>
> CQ_EXTRA_TRYBOTS=client.skia:Test-Win7-ShuttleA-HD2000-x86-Debug-Trybot
>
> Committed: https://skia.googlesource.com/skia/+/c51add674dfb89b988a7fbc05f41838c203f9dcd
TBR=reed@google.com,mtklein@chromium.org
NOTREECHECKS=true
NOTRY=true
Review URL: https://codereview.chromium.org/690833002
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This should produce tighter conservative bounding boxes for text than the
approximation code it replaces.
Recording performance is neutral on my desktop. Playback performance
improves by up to 15% on text heavy pages, e.g.
desk_pokemonwiki.skp_1 3.24ms -> 2.83ms 0.87x
desk_baidu.skp_1 1.91ms -> 1.58ms 0.83x
Committed: https://skia.googlesource.com/skia/+/bf8dc343df4fbdcb8af546eb68b640e011a33489
CQ_EXTRA_TRYBOTS=client.skia:Test-Win7-ShuttleA-HD2000-x86-Debug-Trybot
Review URL: https://codereview.chromium.org/680363003
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(patchset #3 id:40001 of https://codereview.chromium.org/680363003/)
Reason for revert:
http://build.chromium.org/p/client.skia/builders/Test-Win7-ShuttleA-HD2000-x86-Debug/builds/97/steps/nanobench/logs/stdio
Original issue's description:
> Use SkTypeface::getBounds() in bounding-box calculations.
>
> This should produce tighter conservative bounding boxes for text than the
> approximation code it replaces.
>
> Recording performance is neutral on my desktop. Playback performance
> improves by up to 15% on text heavy pages, e.g.
>
> desk_pokemonwiki.skp_1 3.24ms -> 2.83ms 0.87x
> desk_baidu.skp_1 1.91ms -> 1.58ms 0.83x
>
> Committed: https://skia.googlesource.com/skia/+/bf8dc343df4fbdcb8af546eb68b640e011a33489
TBR=reed@google.com,mtklein@chromium.org
NOTREECHECKS=true
NOTRY=true
Review URL: https://codereview.chromium.org/685173002
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This should produce tighter conservative bounding boxes for text than the
approximation code it replaces.
Recording performance is neutral on my desktop. Playback performance
improves by up to 15% on text heavy pages, e.g.
desk_pokemonwiki.skp_1 3.24ms -> 2.83ms 0.87x
desk_baidu.skp_1 1.91ms -> 1.58ms 0.83x
Review URL: https://codereview.chromium.org/680363003
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- The expected case is now a single bulk-load insert() call instead of N;
- reserve() and flushDeferredInserts() can fold into insert() now;
- SkBBH subclasses may take ownership of the bounds
This appears to be a performance no-op on both my Mac and N5. I guess
even the simplest indirect branch predictor ("same as last time") can predict
the repeated virtual calls to SkBBH::insert() perfectly.
BUG=skia:
Review URL: https://codereview.chromium.org/670213002
|
|
|
|
|
|
|
|
|
| |
This is once again an issue related to logo fonts, so I don't
see any easy way to add a regression test for this.
BUG=424824
Review URL: https://codereview.chromium.org/665103002
|
|
|
|
|
|
| |
BUG=skia:2947
Review URL: https://codereview.chromium.org/610003002
|
|
|
|
|
|
|
|
|
| |
Compute blob bounds when the client doesn't pass explicit run rects to
the builder. This allows us to remove a couple of internal workarounds.
R=reed@google.com,mtklein@google.com,bungeman@google.com
Review URL: https://codereview.chromium.org/654873003
|
|
|
|
|
|
|
|
|
|
|
|
| |
I want to play around with how SkTileGrid stores its tiles. Having a
cap on the number of insert() calls can be pretty handy.
While I'm at it, I gave flush() a default empty impl. Like reserve(),
it's really an optional hook for subclasses.
BUG=skia:
Review URL: https://codereview.chromium.org/639933003
|
|
|
|
|
|
|
|
| |
This lets us skip a check inside SkTileGrid::insert().
BUG=skia:
Review URL: https://codereview.chromium.org/620093006
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now that the old backend's not using BBHs, we can specialize them for
SkRecord's needs. The only thing we really want to store is op index, which
should always be small enough to fit into an unsigned (unsigned also helps keep
it straight from other ints floating around).
This means we'll need half (32-bit) or a quarter (64-bit) the bytes in SkTileGrid,
because we don't have to store an extra int for ordering.
BUG=skia:2834
Review URL: https://codereview.chromium.org/617393004
|
|
|
|
|
|
|
|
|
|
|
|
| |
saveLayer's paint.
It makes no sense for the paint from a saveLayer to effect anything outside its saveLayer/restore block. But as currently written, we'll adjust the clip bounds just after a restore by that paint.
Turns out the test I wrote for the last CL (which caused this bug) actually had the bug baked into its expectations. I've updated them and added some notes to explain.
BUG=418417
Review URL: https://codereview.chromium.org/623563002
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this CL, SkRecord only adjusted the bounds of draw ops for SaveLayers' paints.
That worked fine, but as a final step we intersect the bounds of draw ops with the
bounds of the current clip, essentially undoing all that work.
I think the right fix here is to also adjust the bounds of the clip ops.
BUG=skia:2957, 415468
R=robertphillips@google.com
Review URL: https://codereview.chromium.org/595953002
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- ACT_AS_PTR can just expose const methods to get at the pointers.
(If the thing stored must stay const, we pass a const T.)
- DrawPatch works fine with Record# macros, so use Record5.
BUG=skia:
R=fmalita@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/585523003
|
|
|
|
|
|
|
|
|
|
| |
Care must be taken when setting up the initial CTM matrix for partial SkRecord playbacks b.c. all the setMatrix calls will concatenate with the initial matrix (which may be different then the CTM that is required to draw correctly).
R=mtklein@google.com, bsalomon@google.com
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/549143003
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is the root cause of a Chrome rendering bug when it tiles
layers with masks.
BUG=skia:1291,chromium:401593
R=reed@google.com, mtklein@google.com, junov@chromium.org
Author: dneto@chromium.org
Review URL: https://codereview.chromium.org/568073004
|
|
|
|
|
|
|
|
| |
R=reed@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/544233002
|
|
|
|
|
|
|
|
|
|
|
|
| |
Primarily this is for isDrawingToLayer(). drawData() and onNewSurface() are
for completeness.
BUG=409138
R=robertphillips@google.com, mtklein@google.com, reed@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/545613002
|
|
|
|
|
|
|
|
|
|
|
|
| |
We didn't catch this in our local tests because we tend to use default
kUTF8_TextEncoding with single-byte characters, which means N == byteLength.
BUG=409110
R=reed@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/531933002
|
|
|
|
|
|
|
|
|
| |
BUG=skia:
R=robertphillips@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/527423002
|
|
|
|
|
|
|
|
|
|
| |
This paves the way for removing the 'fTile' parameter from SkPictureShader (although that should be a different CL). If we like this we could also move to providing an entire cull SkRect.
R=reed@google.com, mtklein@google.com, fmalita@google.com, fmalita@chromium.org
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/513983002
|