skia2/gn
John Stiles 5b09e6a007 Reland "Create a basic IRNode pooling system."
This is a reland of e16eca95f5

Original change's description:
> 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>

Change-Id: I114971e8e7ac0fabaf26216ae8813eeeaad0d4a2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/329086
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-10-22 02:38:18 +00:00
..
toolchain GN: Add support for GN's framework variable in the toolchain 2020-08-03 15:41:37 +00:00
__init__.py Make gn directory importable in python 2017-03-20 17:40:30 +00:00
bench.gni benchmark for text vertex fill 2020-08-14 16:03:57 +00:00
BUILD.gn find cxxabi headers in Android ASAN builds 2020-10-06 16:17:41 +00:00
BUILDCONFIG.gn decouple werror and -isystem in third_party 2020-06-19 21:59:35 +00:00
call.py [minor] mark scripts as executable 2019-11-21 17:06:27 +00:00
checkdir.py fix print functions for python3 gn scripts 2020-03-06 17:42:39 +00:00
checkpath.py Python3 tweaks 2019-12-17 17:12:03 +00:00
codesign_ios.py [minor] mark scripts as executable 2019-11-21 17:06:27 +00:00
compile_ib_files.py Reland "Add launch screen to iOS apps" 2019-09-05 14:05:08 +00:00
compile_processors.py Remove "Recompiling..." output when building .fp files 2020-09-16 20:23:08 +00:00
compile_sksl_tests.py Add golden outputs for the Metal backend. 2020-09-25 17:46:43 +00:00
copy_git_directory.py GN tools: copy_git_directory.py better error message. 2019-11-19 17:04:18 +00:00
core.gni Remove legacy gpu blur util code 2020-10-10 12:52:04 +00:00
cp.py Work around python 2 shutil.copy2 date bug 2020-09-28 20:12:13 +00:00
create_sksl_fp.py SkSL include files are now stored in a binary format 2020-07-31 13:48:25 +00:00
dehydrate_sksl.py Reland "Untangle dependency cycle in sksl dehydration" 2020-08-10 15:47:43 +00:00
effects_imagefilters.gni Add new SkImageFilters factory API 2019-08-02 13:33:35 +00:00
effects.gni Convert GLHighContrastFilterEffect to an .fp file. 2020-07-10 20:54:33 +00:00
find_headers.py Python3 tweaks 2019-12-17 17:12:03 +00:00
find_msvc.py Add Preview to list of possible MSVC versions. 2020-04-30 19:54:33 +00:00
find_xcode_sysroot.py fix print functions for python3 gn scripts 2020-03-06 17:42:39 +00:00
flutter_defines.gni Enable new GrClipStack for flutter 2020-10-13 00:42:53 +00:00
fuchsia_defines.gni Enable new clip stack for Fuchsia 2020-10-12 20:41:03 +00:00
gen_plist_ios.py [minor] mark scripts as executable 2019-11-21 17:06:27 +00:00
gm.gni Apply correct matrix to correct points in GrDashOp 2020-08-12 13:18:16 +00:00
gn_meta_sln.py fix print functions for python3 gn scripts 2020-03-06 17:42:39 +00:00
gn_to_bp_utils.py Cleanup gn_to_bp_utils 2020-10-16 16:01:32 +00:00
gn_to_bp.py Reland "Reland "ICU: SkShaper (bidi iterator only)"" 2020-08-26 17:46:33 +00:00
gn_to_cmake.py Switch GN defs on Mac and iOS to use frameworks, take 3 2020-08-12 17:03:47 +00:00
gpu.gni Reland "Remove GrContext" 2020-10-20 17:20:51 +00:00
highest_version_dir.py fix print functions for python3 gn scripts 2020-03-06 17:42:39 +00:00
ios.gni harmonize rewrite-includes and gn-format checks 2020-04-03 17:00:54 +00:00
is_clang.py Fix is_clang python3 encoding errors 2020-06-26 18:41:00 +00:00
make_gm_gni.py GMs: re-sort gni, script to regenerate gni, file name convention 2019-05-02 20:08:37 +00:00
opts.gni add structure for normal SKX opts 2020-06-05 13:48:39 +00:00
pdf.gni Make skia_use_xps option work on Windows 2020-03-24 17:09:33 +00:00
push_to_android.py skia_android_serial = "auto" 2017-01-12 16:30:17 +00:00
rm.py Delete .a file before writing static library. 2020-06-11 17:19:23 +00:00
run_sksllex.py Reland "Fetch clang-format automatically when compiling .fp files." 2020-06-12 13:21:41 +00:00
samples.gni Update image filter debug samples to use new APIs 2020-10-14 20:45:41 +00:00
shared_sources.gni add structure for normal SKX opts 2020-06-05 13:48:39 +00:00
skia.gni Reland "[svg] Relocate out of experimental" 2020-10-16 02:32:41 +00:00
sksl_tests.gni Fix frexp support in Metal. 2020-10-20 15:31:31 +00:00
sksl.gni Reland "Create a basic IRNode pooling system." 2020-10-22 02:38:18 +00:00
tests.gni added SkSLNodeArrayWrapper 2020-10-20 20:21:11 +00:00
utils.gni Remove SkWhitelistTypefaces. 2020-06-30 14:54:53 +00:00
xps.gni harmonize rewrite-includes and gn-format checks 2020-04-03 17:00:54 +00:00