Creating an hb_face can be quite expensive, cache them.
This implementation is similar to the super simple caching strategy used
by libtxt. It uses a simple global LRU cache from SkFontID to hb_hbface
of size 100.
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289442
Change-Id: I971620f7aaaf2d7b6902da8681e29d6d458429ed
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290761
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Because a destructor was declared the move constructor and assignment
were not implicitly declared or defined. Default everything to make it
obvious that Run may be copied or moved.
Change-Id: I862b392b12a15b9d44c58da4f73ddace7d5a1308
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290538
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Clarify and simplify ownership of the ellipsis.
Change-Id: I3f4567d2a16b51ecc6406d872019c4665c49fe50
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290536
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
In TextLine::iterateThroughSingleRunByStyles there is a parameter named
textRange and a local variable also named textRange. This shadowing is a
bit confusing both when reading the code and when debugging, so rename
the local to runStyleTextRange to better describe what it is for.
Change-Id: Iea2f668b6e854140d749efa5c595de6d851118db
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290496
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
This reverts commit d19bb17782.
Reason for revert: windows build failure?
lld-link: error: undefined symbol: private: void __cdecl SkSemaphore::osSignal(int)
Original change's description:
> Cache hb_face.
>
> Creating an hb_face can be quite expensive, cache them.
>
> This implementation is similar to the super simple caching strategy used
> by libtxt. It uses a simple global LRU cache from SkFontID to hb_hbface
> of size 100.
>
> Change-Id: I364a4548699cece50073e829a065c0a303245873
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289442
> Commit-Queue: Ben Wagner <bungeman@google.com>
> Reviewed-by: Mike Reed <reed@google.com>
TBR=bungeman@google.com,reed@google.com
Change-Id: I31967a638fb497f28ca3d3f26ef3692dddff004d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290718
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Creating an hb_face can be quite expensive, cache them.
This implementation is similar to the super simple caching strategy used
by libtxt. It uses a simple global LRU cache from SkFontID to hb_hbface
of size 100.
Change-Id: I364a4548699cece50073e829a065c0a303245873
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289442
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Reed <reed@google.com>
This reverts commit 999257d870.
Reason for revert: Iter does not behave the same as RangeIter
Original change's description:
> Convert pathkit's usage of SkPath::Iter to SkPatPriv::RangeIter
>
> Change-Id: If940941a66c1fda508970a73d8433a2d2a292e1c
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/287894
> Reviewed-by: Kevin Lubick <kjlubick@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
TBR=kjlubick@google.com,csmartdalton@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: Id1028577631ab616a60e0be71e27b32d9a1255e1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290188
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Change-Id: I2d95c63de18125e6258709b48b03abd7904b7537
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278596
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Instead of using 'kGaps' as the default use 'kThrough' since that
is what is generally expected by default. The user can still set
the style to 'kGaps' if they wish.
Change-Id: Ibb04b8eb47393d645a49f98c7af976b5ed4f9c3c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289884
Commit-Queue: Julia Lavrova <jlavrova@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
I believe we had incorrectly been using the wrong emscripten-provided
helper to make our WebGL contexts. Thus, the parameter that was
specifying webGL 1 vs 2 was not getting properly passed in
(I believe because of a closure-induced problem in minification).
I validated this build on my local Mac+Safari test harness.
Bug: skia:10171
Change-Id: Ifd5e55a6b64407bf84168e118d8dda4738ef5487
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289885
Reviewed-by: Kevin Lubick <kjlubick@google.com>
getError is known to be problematic for performance on Chrome
because it is synchronous. Disabling this should improve
performance in several cases.
Change-Id: I0d4a68ddb9625f09d7427e3c5f36883352c4f995
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/289779
Reviewed-by: Brian Salomon <bsalomon@google.com>
Replace with a stateful LazyHandle implementation.
A secondaty objective is to preserve source-level API compat for
existing clients.
TBR=
Change-Id: I8e37b1e045a94d657996b7002e89cedb5b9d128f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/288816
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Adding in the mono rasterizer on freetype adds 12k of code size
(6k compressed), so we make it opt out and don't ship to npm with it.
Bug: skia:10192
Change-Id: I8352adbeaec288800ae1ca4709144860e9a1e84c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/288546
Reviewed-by: Ben Wagner <bungeman@google.com>
The main value of current AnimationBuilder::attachAssetRef is to provide
scoping semantics for ref cycle detection.
Refactor using a RAII helper (ScopedAssetRef), and avoid std::function
callbacks.
Change-Id: Idf5327465b8a06313cd9ea89be5f229ddc0aef7f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/288617
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
...since it's used for both image and video Lottie layers.
TBR=
Change-Id: I52e85d70d4adbda61dfa3b33acdf4eb17ddbf332
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/288616
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Add support for external precomp Skottie layers. This allows embedders
to seamlessly mix custom/Lottie content.
General flow:
* embedders register a PrecompInterceptor callback with
the animation builder
* at build time, Skottie invokes the callback for each pre-composed
layer
- the returned ExternalLayer implementation is used instead of the
Lottie layer payload
- (a nullptr value signals Skottie to use the usual Lottie payload)
* at render time, ExternalLayer::render() is called to defer content
rendering to the embedder
Also implement a sample PrecompInterceptor which attempts to substitute
precmp layers matching a given pattern with external Lottie animations:
precomp_name: "__foo.json" -> Animation("foo.json")
This new mechanism is a generalization of (and supersedes) the old
NestedAnimation hack - so we can remove that.
Change-Id: Id80fe11881c62b8717c2476117c7c03ad5300eef
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/288130
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Moving some code down from paragraph to line.
Change-Id: I9408951fe8d05a5956e4bbe4b50c9ef3f3dc1f9c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/285838
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
- Lots of skstd::foo is now std::foo since C++14.
- Get rid of SK_WHEN(cond,T); std::enable_if_t<cond,T> is pithy enough.
- Move SkBitmaskEnum.h contents into sknonstd.
Change-Id: Ie5dc459405b1ff55e5b3ac57e70df7edd7cf38c0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/286315
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Implement non-linear contrast using a cubic polynomial approximation,
as a SkRuntimeEffect.
The effect range is significantly more constrained than the legacy
version: https://www.desmos.com/calculator/ehem0vy3ft
Change-Id: I86bdbb9cc0d30065780f87705d2d4d39385609cb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/285840
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Implement a VideoAsset wrapper, used for Skottie video layers. This
requires a non-testlib build target for SkVideoDecoder, hence a
dedicated BUILD.gn.
Add software conversion fallback for SkVideoDecoder, using libswscale.
Change-Id: I80dd555a1241081e50ee4834b64ad3518948a0f1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/285378
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Bodymovin exports video layers similar to image layers, but assigns a
dedicated type id.
Since Skottie's ImageAsset interface already supports multi-frame
images, we can reuse the same mechanism for video.
Also, since we're adding sparse layer type handlers, we can now
fill all known Lottie layer enums and simplify the handling of camera
layers.
Change-Id: Ide6c6b3566d48f90f36f0143eaea7c62bbdedb2c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/285106
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Placeholders should not be taken in MinIntrinsicWidth.
Placeholders should allow Inf in some style values (as weird as it
sounds)
Bugs: skia:10138, skia:10159
Change-Id: I6ecc57b6ce778faf84b4d5752d24552b12c69fdb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/284731
Commit-Queue: Julia Lavrova <jlavrova@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>