Go to file
John Stiles e16eca95f5 Create a basic IRNode pooling system.
Allocations are redirected by overriding `operator new` and `operator
delete` on the IRNode class. This allows us to use our existing
`unique_ptr` and `make_unique` calls as-is. The Pool class is simple;
it holds a fixed number of nodes and recycles them as they are returned.

A fixed pool size of 2000 nodes was chosen. That is large enough to hold
the contents of `sksl_large` during compilation, but it can be
overflowed by very large shaders, or if multiple programs are converted
at the same time. Exhausting the pool is not a problem; if this happens,
additional nodes will be allocated via the system allocator as usual.
More elaborate schemes are possible but might not add a lot of value.

Thread safety is accomplished by placing the pool in a `thread_local`
static during a Program's creation and destruction; the pool is freed
when the program is destroyed. One important consequence of this
strategy is that a program must free every node that it allocated during
its creation, or else the node will be leaked. In debug, leaking a node
will be detected and causes a DEBUGFAIL. In release, the pool will be
freed despite having a live node in it, and if that node is later freed,
that pointer will be passed to the system `free` (which is likely to
cause a crash).

In this CL, iOS does not support pooling, since support for
`thread_local` was only added on iOS 9. This is fixed in the followup
CL, http://review.skia.org/328837, which uses pthread keys on iOS.

Nanobench shows ~15% improvement:
  (last week) http://screen/5CNBhTaZApcDA8h
      (today) http://screen/8ti5Rymvf6LUs8i

Change-Id: I559de73606ee1be54e5eae7f82129dc928a63e3c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/326876
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-10-21 14:41:02 +00:00
animations first cut at a checkbox 2009-10-21 19:41:10 +00:00
bazel bazel baby steps 2020-09-14 15:18:32 +00:00
bench Reland "[svg] Relocate out of experimental" 2020-10-16 02:32:41 +00:00
bin bin/try: automatically set 'git cl issue' when not found 2020-06-25 17:44:01 +00:00
build/fuchsia [fuchsia] Fix fidlc command. 2020-06-10 03:29:24 +00:00
build_overrides Port to ANGLE's GN files 2020-09-11 15:22:34 +00:00
client_utils/android Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
demos.skia.org [canvaskit] Remove Sk from nearly all function/type names. 2020-10-07 21:01:32 +00:00
dm Reland "[svg] Relocate out of experimental" 2020-10-16 02:32:41 +00:00
docker [canvaskit,pathkit] Update to emsdk 2.0 2020-08-20 14:55:50 +00:00
docs/examples Only expose isConvex on path publicly. 2020-08-28 16:56:29 +00:00
example Reland "Remove use of legacy display globals." 2020-10-05 19:13:58 +00:00
experimental [svg] Post-relocation cleanup 2020-10-18 19:29:38 +00:00
fuzz Reland "[svg] Relocate out of experimental" 2020-10-16 02:32:41 +00:00
gm Almost remove GrContext 2020-10-20 15:52:01 +00:00
gn Create a basic IRNode pooling system. 2020-10-21 14:41:02 +00:00
include update dox for drawPaint 2020-10-20 19:48:11 +00:00
infra [canvaskit] Fix gm test runner on non-tryjobs 2020-10-21 11:31:27 +00:00
modules [svg] Parse text attributes 2020-10-20 16:04:41 +00:00
platform_tools add new DemoActivity to showcase SkottieView xml loading and surface view backing 2020-10-20 15:33:11 +00:00
resources Parse out the orientation in the SubIFD of EXIF 2020-10-12 13:50:27 +00:00
samplecode Almost remove GrContext 2020-10-20 15:52:01 +00:00
site Update site favicon to new theme. 2020-10-12 15:23:48 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src Create a basic IRNode pooling system. 2020-10-21 14:41:02 +00:00
tests Always declare sk_FragColor in GLSL, even if unused 2020-10-20 21:13:31 +00:00
third_party retry³ absl 2020-10-07 01:36:15 +00:00
tools upstream cl/337571894 with tweaks 2020-10-20 16:22:01 +00:00
.bazelignore bazel baby steps 2020-09-14 15:18:32 +00:00
.clang-format Disable BinPackParameters in .clang-format 2020-03-27 14:32:40 +00:00
.clang-tidy Disable ClangTidy namespace comments for short blocks. 2020-08-24 14:01:22 +00:00
.gitignore bazel baby steps 2020-09-14 15:18:32 +00:00
.gn Basic standalone GN configs. 2016-07-21 12:25:45 -07:00
AUTHORS Fix GrCCPerFlushResources error caused by cache eviction 2020-10-14 17:24:41 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn Reland "[svg] Relocate out of experimental" 2020-10-16 02:32:41 +00:00
codereview.settings Make uploading to Gerrit the default for Skia 2016-11-09 19:07:56 +00:00
CONTRIBUTING Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
CQ_COMMITTERS Moved committer list to chrome-infra-auth and deleted it from the repo 2015-09-02 13:37:54 -07:00
DEPS Roll SwiftShader from df17a76102df to 84f5eeb6dd9b (3 revisions) 2020-10-21 04:56:01 +00:00
go.mod [infra] Sync to latest infra repo. 2020-10-20 13:56:41 +00:00
go.sum [infra] Sync to latest infra repo. 2020-10-20 13:56:41 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
OWNERS add OWNERS file 2017-12-01 19:50:19 +00:00
PRESUBMIT.py Generate SkSL golden output files from test inputs during the build. 2020-09-14 14:54:12 +00:00
public.bzl [svg] Post-relocation cleanup 2020-10-18 19:29:38 +00:00
README Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
README.chromium Update README.chromium. 2015-06-11 13:19:24 -07:00
RELEASE_NOTES.txt Remove legacy SkImageGenerator YUV planes interface 2020-10-20 13:44:11 +00:00
whitespace.txt Whitespace change to re-trigger Mac/iOS tests 2020-02-23 20:55:01 +00:00
WORKSPACE.bazel bazel baby steps 2020-09-14 15:18:32 +00:00

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

See full details, and build instructions, at https://skia.org.