Merge branch 'master' into 2.28.5
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index f6a77a7..a0df3a4 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -32,13 +32,72 @@
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
with:
path: |
- ./flutter-sdk
+ ./tool/flutter-sdk
key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- - name: tool/bots.sh
+ - name: tool/ci/bots.sh
env:
BOT: main
- run: ./tool/bots.sh
+ run: ./tool/ci/bots.sh
+
+ dcm:
+ name: Dart Code Metrics
+ needs: flutter-prep
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Clone Flutter DevTools
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
+ with:
+ ref: "${{ github.event.pull_request.head.sha }}"
+ - name: Load Cached Flutter SDK
+ uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
+ with:
+ path: |
+ ./tool/flutter-sdk
+ key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
+ - name: Run tool/ci/bots.sh
+ run: ./tool/ci/bots.sh
+ - name: Install DCM
+ run: |
+ sudo apt-get update
+ wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg
+ echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
+ sudo apt-get update
+ sudo apt-get install dcm=1.11.0-1
+ sudo chmod +x /usr/bin/dcm
+ echo "$(dcm --version)"
+ - name: Setup Dart SDK
+ uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d
+ - name: Run DCM on root
+ run: |
+ dcm analyze packages/devtools_app packages/devtools_shared packages/devtools_test
+
+ test-packages:
+ name: ${{ matrix.package }} test
+ needs: flutter-prep
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ package:
+ - devtools_app_shared
+ - devtools_extensions
+ - devtools_shared
+ steps:
+ - name: git clone
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
+ - name: Load Cached Flutter SDK
+ uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
+ with:
+ path: |
+ ./tool/flutter-sdk
+ key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
+ - name: tool/ci/package_tests.sh
+ env:
+ PACKAGE: ${{ matrix.package }}
+ run: ./tool/ci/package_tests.sh
test:
name: ${{ matrix.bot }}
@@ -59,13 +118,13 @@
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
with:
path: |
- ./flutter-sdk
+ ./tool/flutter-sdk
key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- - name: tool/bots.sh
+ - name: tool/ci/bots.sh
env:
BOT: ${{ matrix.bot }}
PLATFORM: vm
- run: ./tool/bots.sh
+ run: ./tool/ci/bots.sh
macos-test:
needs: flutter-prep
@@ -86,14 +145,14 @@
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
with:
path: |
- ./flutter-sdk
+ ./tool/flutter-sdk
key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- - name: tool/bots.sh
+ - name: tool/ci/bots.sh
env:
BOT: ${{ matrix.bot }}
PLATFORM: vm
ONLY_GOLDEN: ${{ matrix.only_golden }}
- run: ./tool/bots.sh
+ run: ./tool/ci/bots.sh
- name: Upload Golden Failure Artifacts
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
@@ -156,15 +215,15 @@
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
with:
path: |
- ./flutter-sdk
+ ./tool/flutter-sdk
key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- - name: tool/bots.sh
+ - name: tool/ci/bots.sh
env:
BOT: ${{ matrix.bot }}
DEVICE: ${{ matrix.device }}
SHARD: ${{ matrix.shard }}
DEVTOOLS_PACKAGE: devtools_app
- run: ./tool/bots.sh
+ run: ./tool/ci/bots.sh
- name: Upload Golden Failure Artifacts
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
@@ -189,15 +248,52 @@
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
with:
path: |
- ./flutter-sdk
+ ./tool/flutter-sdk
key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- - name: tool/bots.sh
+ - name: tool/ci/bots.sh
env:
BOT: ${{ matrix.bot }}
DEVTOOLS_PACKAGE: devtools_extensions
- run: ./tool/bots.sh
+ run: ./tool/ci/bots.sh
-# TODO(https://github.com/flutter/devtools/issues/1715): add a windows compatible version of tool/bots.sh
+ benchmark-performance:
+ name: benchmark-performance
+ needs: flutter-prep
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: git clone
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
+ - name: Load Cached Flutter SDK
+ uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
+ with:
+ path: |
+ ./tool/flutter-sdk
+ key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
+ - name: tool/ci/benchmark_performance.sh
+ run: ./tool/ci/benchmark_performance.sh
+
+ benchmark-size:
+ name: benchmark-size
+ needs: flutter-prep
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: git clone
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
+ - name: Load Cached Flutter SDK
+ uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
+ with:
+ path: |
+ ./tool/flutter-sdk
+ key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
+ - name: tool/ci/benchmark_size.sh
+ run: ./tool/ci/benchmark_size.sh
+
+
+# TODO(https://github.com/flutter/devtools/issues/1715): add a windows compatible version of tool/ci/bots.sh
# and run it from this job.
# windows-test:
# name: windows ${{ matrix.bot }}
@@ -211,11 +307,11 @@
# - name: git clone
# uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
#
-# - name: tool/bots.sh
+# - name: tool/ci/bots.sh
# env:
# BOT: ${{ matrix.bot }}
# PLATFORM: vm
-# run: ./tool/bots.sh
+# run: ./tool/ci/bots.sh
# TODO(https://github.com/flutter/devtools/issues/1987): rewrite integration tests.
# integration:
@@ -230,10 +326,10 @@
# steps:
# - name: git clone
# uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
-# - name: tool/bots.sh
+# - name: tool/ci/bots.sh
# env:
# BOT: ${{ matrix.bot }}
-# run: ./tool/bots.sh
+# run: ./tool/ci/bots.sh
# TODO(https://github.com/flutter/devtools/issues/2437):
# PLATFORM=chrome is going away. We need to move these tests to run with
diff --git a/.github/workflows/daily-dev-bump.yaml b/.github/workflows/daily-dev-bump.yaml
index 78dd965..7da3763 100644
--- a/.github/workflows/daily-dev-bump.yaml
+++ b/.github/workflows/daily-dev-bump.yaml
@@ -28,7 +28,10 @@
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
+ flutter-prep:
+ uses: ./.github/workflows/flutter-prep.yaml
bump-version:
+ needs: flutter-prep
if: ${{ github.repository == 'flutter/devtools' }}
name: Bump Version
runs-on: ubuntu-latest
@@ -38,7 +41,13 @@
with:
ref: master
- - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1
+ - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d
+ - name: Load Cached Flutter SDK
+ uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
+ with:
+ path: |
+ ./tool/flutter-sdk
+ key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- name: setup git config
run: |
@@ -54,8 +63,8 @@
dart pub get
popd
- dart pub global activate --source path tool
- export PATH="$PATH":"$HOME/.pub-cache/bin"
+ # Ensure the devtools_tool command is available
+ export PATH="$PATH":`pwd`/tool/bin
ORIGINAL_VERSION=$(devtools_tool update-version current-version)
@@ -122,4 +131,3 @@
GH_TOKEN: ${{ secrets.DEVTOOLS_WORKFLOW_BOT_TOKEN }}
ORIGINAL_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
IS_DRAFT: ${{ inputs.draft == true }}
-
diff --git a/.github/workflows/dcm-label.yaml b/.github/workflows/dcm-label.yaml
deleted file mode 100644
index fc84ed6..0000000
--- a/.github/workflows/dcm-label.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-# A CI workflow to remind the contributor to add the 'run-dcm-workflow' label.
-
-name: DCM Label Reminder
-
-on:
- pull_request:
- types: [synchronize, opened, reopened, labeled, unlabeled]
- branches:
- - master
- paths:
- - "**/*.dart"
- - "!packages/devtools_app/lib/devtools.dart"
-
-jobs:
- dcm-label-reminder:
- if: ${{ !contains(github.event.*.labels.*.name, 'run-dcm-workflow') }}
- name: Prevent submission
- runs-on: ubuntu-latest
- steps:
- - name: Label reminder
- run: |
- echo "::error Please add the 'run-dcm-workflow' label to run DCM checks."
- exit 1
diff --git a/.github/workflows/dcm.yaml b/.github/workflows/dcm.yaml
deleted file mode 100644
index 99d7163..0000000
--- a/.github/workflows/dcm.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# A CI workflow to run the Dart Code Metrics analyzer (https://dcm.dev).
-
-# NOTE: DCM usage in DevTools is currently experimental!
-
-# The DCM_CI_KEY and DCM_EMAIL secrets are set in the admin settings page
-# of the flutter/devtools repo. They can be found at: go/dash-devexp-dcm-keys
-# These are associated with a trial license of DCM, and will need to be changed
-# if we decide to purchase an actual license. The trial license will expire on
-# April 11, 2024.
-
-# If you want to install and run DCM locally, please refer to CONTRIBUTING.md
-# for instructions.
-
-name: Dart Code Metrics
-
-on:
- pull_request_target:
- # labeled and unlabeled are required along with open to re-run
- # workflow when the run-dcm-workflow label is added or removed.
- types: [opened, labeled, unlabeled]
- branches:
- - master
- paths:
- - "**/*.dart"
- - "!packages/devtools_app/lib/devtools.dart"
-
-jobs:
- flutter-prep:
- uses: ./.github/workflows/flutter-prep.yaml
- with:
- os-name: ubuntu
- requires-label: "run-dcm-workflow"
- needs-checkout-merge: true
-
- dcm:
- if: contains(github.event.pull_request.labels.*.name, 'run-dcm-workflow')
- name: Dart Code Metrics
- needs: flutter-prep
- runs-on: ubuntu-latest
- steps:
- - name: Clone Flutter DevTools
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
- with:
- ref: "${{ github.event.pull_request.head.sha }}"
- - name: Load Cached Flutter SDK
- uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
- with:
- path: |
- ./flutter-sdk
- key: flutter-sdk-${{ runner.os }}-${{ needs.flutter-prep.outputs.latest_flutter_candidate }}
- - name: Run tool/bots.sh
- run: ./tool/bots.sh
- - name: Install DCM
- run: |
- sudo apt-get update
- wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg
- echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
- sudo apt-get update
- sudo apt-get install dcm
- sudo chmod +x /usr/bin/dcm
- - name: Setup Dart SDK
- uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1
- - name: Run DCM on root
- run: |
- dcm analyze --ci-key="${{ secrets.DCM_CI_KEY }}" --email="${{ secrets.DCM_EMAIL }}" packages/devtools_app packages/devtools_shared packages/devtools_test
diff --git a/.github/workflows/flutter-candidate-update.yaml b/.github/workflows/flutter-candidate-update.yaml
index 2dea27b..37de07e 100644
--- a/.github/workflows/flutter-candidate-update.yaml
+++ b/.github/workflows/flutter-candidate-update.yaml
@@ -3,7 +3,7 @@
workflow_dispatch: # Allows for manual triggering if needed
schedule:
# * is a special character in YAML so you have to quote this string
- - cron: "0 8 * * *" # Run every day at midnight Pacific Time
+ - cron: "0 8/12 * * *" # Run every day at midnight and noon Pacific Time
permissions:
contents: write
@@ -23,7 +23,7 @@
with:
ref: master
- - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1
+ - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d
- name: setup git config
run: |
diff --git a/.github/workflows/flutter-prep.yaml b/.github/workflows/flutter-prep.yaml
index f5e8bc7..6e7bcc3 100644
--- a/.github/workflows/flutter-prep.yaml
+++ b/.github/workflows/flutter-prep.yaml
@@ -10,12 +10,6 @@
os-name:
description: 'The OS to run against, either "macos" or "ubuntu". If neither is provided, will run against both.'
type: string
- needs-checkout-merge:
- description: "Whether the PR should be merged during the checkout step. Necessary for pull_request_target workflows."
- type: boolean
- requires-label:
- description: "Specifies the label required for the workflow to run. If not provided, the workflow will always run."
- type: string
outputs:
latest_flutter_candidate:
@@ -24,8 +18,6 @@
jobs:
reusable-flutter-prep:
- # Note: Do not delete the following check. This is needed for the DCM workflow.
- if: inputs.requires-label == '' || contains(github.event.pull_request.labels.*.name, inputs.requires-label)
name: ${{ matrix.os }} Flutter Prep
outputs:
latest_flutter_candidate: ${{ steps.flutter-candidate.outputs.FLUTTER_CANDIDATE }}
@@ -36,19 +28,7 @@
steps:
# TODO(https://github.com/flutter/devtools/issues/5729) Consider caching DevTools so that we
# don't check it out again is subsequent workflows.
-
- # Merge in the PR branch during checkout using the PR's sha. This is necessary for pull_request_target
- # workflows. See: https://github.com/actions/checkout/issues/518
- - name: Checkout PR branch for DevTools
- if: ${{ inputs.needs-checkout-merge == true }}
- id: checkout-pr-branch
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
- with:
- ref: "${{ github.event.pull_request.head.sha }}"
-
- # Otherwise use the default checkout action.
- name: Checkout DevTools (default)
- if: steps.checkout-pr-branch.outcome == 'skipped'
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac
- name: Get Latest Flutter Candidate
@@ -62,21 +42,21 @@
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84
with:
path: |
- ./flutter-sdk
+ ./tool/flutter-sdk
key: flutter-sdk-${{ runner.os }}-${{ steps.flutter-candidate.outputs.FLUTTER_CANDIDATE }}
- if: ${{ steps.cache-flutter.outputs.cache-hit != 'true' }}
name: Clone Flutter SDK if none cached
run: |
- git clone https://github.com/flutter/flutter.git ./flutter-sdk
- cd flutter-sdk
+ git clone https://github.com/flutter/flutter.git ./tool/flutter-sdk
+ cd tool/flutter-sdk
git checkout $LATEST_FLUTTER_CANDIDATE
env:
LATEST_FLUTTER_CANDIDATE: ${{ steps.flutter-candidate.outputs.FLUTTER_CANDIDATE }}
- name: Assert that the Latest Flutter Candidate is checked out
run: |
- cd flutter-sdk
+ cd tool/flutter-sdk
HEAD_SHA=$(git rev-parse HEAD)
LATEST_FLUTTER_CANDIDATE_SHA=$(git rev-list -1 "$LATEST_FLUTTER_CANDIDATE")
if [ "$HEAD_SHA" != "$LATEST_FLUTTER_CANDIDATE_SHA" ]; then
@@ -88,6 +68,6 @@
- name: Setup Flutter SDK
run: |
- ./flutter-sdk/bin/flutter config --disable-analytics
- ./flutter-sdk/bin/cache/dart-sdk/bin/dart --disable-analytics
- ./flutter-sdk/bin/flutter doctor
+ ./tool/flutter-sdk/bin/flutter config --disable-analytics
+ ./tool/flutter-sdk/bin/cache/dart-sdk/bin/dart --disable-analytics
+ ./tool/flutter-sdk/bin/flutter doctor
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index fd07f80..979d43f 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -28,7 +28,7 @@
persist-credentials: false
- name: "Run analysis"
- uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031
+ uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736
with:
results_file: results.sarif
results_format: sarif
diff --git a/BETA_TESTING.md b/BETA_TESTING.md
index 69c634d..d0270de 100644
--- a/BETA_TESTING.md
+++ b/BETA_TESTING.md
@@ -42,7 +42,7 @@
git reset --hard origin/master
bash tool/update_flutter_sdk.sh
-bash tool/upgrade.sh
+devtools_tool pub-get --only-main --upgrade
```
If some steps failed, remove the directory and redo to [Setup](#setup).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4ea0155..68e5a42 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,12 +1,24 @@
-# Contributing code
+# Contributing to DevTools

-We gladly accept contributions via GitHub pull requests!
-This page instructs how to contribute code changes to DevTools.
+_tl;dr: join [Discord](https://github.com/flutter/flutter/wiki/Chat), be
+[courteous](https://github.com/flutter/flutter/blob/master/CODE_OF_CONDUCT.md), follow the steps below
+to set up a development environment; if you stick around and contribute, you can
+[join the team](https://github.com/flutter/flutter/wiki/Contributor-access) and get commit access._
-> If you just want to test newest functionality, follow
-[beta testing guidance](https://github.com/flutter/devtools/blob/master/BETA_TESTING.md).
+> If you are here because you just want to test the bleeding-edge (unreleased) DevTools functionality,
+follow our [beta testing guidance](https://github.com/flutter/devtools/blob/master/BETA_TESTING.md).
+
+## Welcome
+
+We gladly accept contributions via GitHub pull requests! We encourage you to read the
+[Welcome](https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md#welcome) remarks in the Flutter
+framework's contributing guide, as all of that information applies to contributing to the `flutter/devtools`
+repo as well.
+
+We communicate primarily over GitHub and [Discord](https://github.com/flutter/flutter/wiki/Chat) on the
+[#hackers-devtools](https://discord.com/channels/608014603317936148/1106667330093723668) channel.
Before contributing code:
@@ -14,54 +26,216 @@
[Contributor License Agreement](https://cla.developers.google.com/clas).
You can do this online, and it only takes a minute.
-2. Understand [coding agreements](packages/README.md).
+2. Review the [DevTools style guide](STYLE.md), which uses a combination of Dart and Flutter best practices.
-## Workflow for making changes
+## Table of contents
+1. [Developing for DevTools](#developing-for-devtools)
+ - [Set up your DevTools environment](#set-up-your-devtools-environment)
+ - [Workflow for making changes](#workflow-for-making-changes)
+ - [Keeping your fork in sync](#keeping-your-fork-in-sync)
+2. [Running and debugging DevTools](#running-and-debugging-devtools)
+ - [Frontend only (most common)](#frontend-only-most-common)
+ - [Frontend + DevTools server](#frontend--devtools-server)
+ - [DevTools + VS Code integration](#devtools--vs-code-integration-ide-embedded-devtools-experience)
+3. [Testing for DevTools](#testing-for-devtools)
+4. [Appendix](#appendix)
-- Change flutter to the latest flutter candidate:
- `./tool/update_flutter_sdk.sh --local`
-- Create a branch from your cloned repo: `git checkout -b myBranch`
-- Refresh local code: `sh tool/refresh.sh`
-- Implement your changes
-- Commit work to your branch: `git commit -m “description”`
-- Push to your branch: `git push origin myBranch`
-- Navigate to the Pull Requests tab in the main [DevTools repo](https://github.com/flutter/devtools). You should see a popup to create a pull request from the branch in your cloned repo to DevTools master. Create a pull request.
+## Developing for DevTools
+
+### Set up your DevTools environment
+
+**Before setting up your DevTools environment**, please make sure you have
+[cloned the Flutter SDK from GitHub](https://docs.flutter.dev/get-started/install/macos#downloading-straight-from-github-instead-of-using-an-archive)
+and added the included `flutter` and `dart` executables to your `PATH` environment variable (see Flutter
+instructions for how to [update your PATH](https://docs.flutter.dev/get-started/install/macos#update-your-path)).
+
+Typing `which flutter` and `which dart` (or `where.exe flutter` and `where.exe dart` for Windows)
+into your terminal should print the path to the binaries from Flutter SDK you cloned from Github.
+
+1. [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) the DevTools repo to your
+own Github account, and then clone it using SSH. If you haven't already, you may need to
+[generate a new SSH key](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh)
+to connect to Github with SSH.
+2. Make sure to [configure Git to keep your fork in sync](https://docs.github.com/en/get-started/quickstart/fork-a-repo#configuring-git-to-sync-your-fork-with-the-upstream-repository)
+with the upstream DevTools repo.
+3. Ensure that you have access to the `devtools_tool` executable by:
+ - Running `flutter pub get` on the `tool` directory
+ - Adding the `tool/bin` folder to your `PATH` environment variable:
+ - **MacOS Users**
+ - add the following to your `~/.zshrc` file (or `~/.bashrc`, `~/.bash_profile` if you use Bash),
+ replacing `<DEVTOOLS_DIR>` with the local path to your DevTools repo:
+
+ ```
+ export PATH=$PATH:<DEVTOOLS_DIR>/tool/bin
+ ```
+ - **Windows Users**
+ - Open "Edit environment variables for your account" from Control Panel
+ - Locate the `Path` variable and click **Edit**
+ - Click the **New** button and paste in `<DEVTOOLS_DIR>/tool/bin`, replacing `<DEVTOOLS_DIR>`
+ with the local path to your DevTools repo.
+
+ Explore the commands and helpers that the `devtools_tool` provides by running `devtools_tool -h`.
+4. **Optional:** enable and activate DCM (Dart Code Metrics) - see the [DCM section below](#enable-and-activate-dcm-dart-code-metrics)
+
+#### Set up your IDE
+
+We recommend using VS Code for your DevTools development environment because this gives you
+access to some advanced development and configuration features. When you open DevTools in VS Code,
+open the `devtools/packages` directory in your VS Code workspace. This will give you access to a set
+of launch configurations for running and debugging DevTools:
+
+
+
+### Workflow for making changes
+
+1. Change your local Flutter SDK to the latest flutter candidate branch: `devtools_tool update-flutter-sdk --from-path`
+2. Create a branch from your cloned DevTools repo: `git checkout -b myBranch`
+3. Ensure your branch, dependencies, and generated code are up-to-date: `devtools_tool sync`
+4. Implement your changes, and commit to your branch: `git commit -m “description”`
+ - If your improvement is user-facing, document it in [NEXT_RELEASE_NOTES.md](packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md)
+ and include this edit as part of your PR.
+5. Push to your branch to GitHub: `git push origin myBranch`
+6. Navigate to the [Pull Requests](https://github.com/flutter/devtools/pulls) tab in the main
+[DevTools repo](https://github.com/flutter/devtools). You should see a popup to create a pull
+request from the branch in your cloned repo to the DevTools master branch. Create a pull request.
+ - **Running the Dart Code Metrics Github workflow:** any PRs that change Dart code require the
+ Dart Code Metrics workflow to be run before being submitted. To trigger the workflow, add the
+ label `run-dcm-workflow` to your PR. If you don't have permission to add the label, your
+ reviewer can add it for you.
+ - Any DCM errors will be caught by the workflow. Fix them and push up your changes. To trigger
+ the DCM workflow to run again, you will need to remove and then re-add the `run-dcm-workflow` label.
### Keeping your fork in-sync
-- Pull the code from the upstream DevTools and refresh local code: `sh tool/pull_and_refresh.sh`
+- If at any time you need to re-sync your branch, run:
+ ```
+ devtools_tool sync
+ ```
+ This will pull the latest code from the upstream DevTools, upgrade dependencies, and perform code generation.
-### Announcing your changes
+- If you want to upgrade dependencies and re-generate code (like mocks), but do not want to merge `upstream/master`, instead run
+ ```
+ devtools_tool generate-code --upgrade
+ ```
-If your improvement is user-facing, document it in
-[NEXT_RELEASE_NOTES.md](packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md).
+## Running and debugging DevTools
-## Development prep
+There are a few different environments that you may need to run DevTools in. After running DevTools
+in one of the environments below, connect to a test application to debug DevTools runtime tooling
+(the majority of DevTools tools). See the
+[Connect DevTools to a test application](#connect-devtools-to-a-test-application) section below.
-### Configure DevTools
+### Frontend only (most common)
-1. If you haven't already, follow the [instructions](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh) to generate a new SSH key and connect to Github with SSH
-2. Follow the [instructions](https://docs.github.com/en/get-started/quickstart/fork-a-repo) to fork the DevTools repo to your own Github account, and clone using SSH
-3. Make sure to [configure Git to keep your fork in sync](https://docs.github.com/en/get-started/quickstart/fork-a-repo#configuring-git-to-sync-your-fork-with-the-original-repository) with the main DevTools repo
-4. Finally, run `sh tool/refresh.sh` to pull the latest version from repo, generate missing code and upgrade dependencies.
+Most of the time, you will not need to run DevTools with the DevTools server to test your changes.
+You can run DevTools in debug mode as either a Flutter web or Flutter desktop app.
-### Connect to application
+> Note: though DevTools is shipped as a Flutter Web app, we recommend developing as a Flutter
+Desktop app whenever possible for a more efficient development workflow. Please see the
+[running on Flutter desktop](#running-devtools-on-flutter-desktop) section below for instructions.
-From a separate terminal, start running a flutter app to connect to DevTools:
-- `git clone https://github.com/flutter/gallery.git` (this is an existing application with many examples of Flutter widgets)
-- `cd gallery`
-- ensure your flutter channel is the one required by the [gallery documentation](https://github.com/flutter/gallery#running-flutter-gallery-on-flutters-master-channel)
-- ensure the iOS Simulator is open (or a physical device is connected)
-- `flutter run`
-- copy the "Observatory debugger and profiler" uri printed in the command output, to connect to the app from DevTools later
+- To run DevTools as a Flutter web app **from VS Code**, run with the **devtools (packages)** configuration and the "Chrome" device
+ - To run with experiments enabled, run from VS Code with the **devtools + experiments (packages)** configuration
+- To run DevTools as a Flutter web app **from the command line**, run `flutter run -d chrome`
+ - To run with experiments enabled, add the flag `--dart-define=enable_experiments=true`
-### **[Optional]** Enable and activate DCM (Dart Code Metrics)
+### Frontend + DevTools server
-**Note:** Enabling and activating DCM is optional. When you open a PR, the CI bots will show you any DCM warnings introduced by your change which should be fixed before submitting.
+To develop with a workflow that exercises the DevTools server <==> DevTools client connection,
+you will need to perform the following set up steps (first time only).
-**[Contributors who work at Google]** You can use the Google-purchased license key to activate DCM. See [go/dash-devexp-dcm-keys](http://goto.google.com/dash-devexp-dcm-keys).
+1. Clone the [Dart SDK](https://github.com/dart-lang/sdk) fron GitHub.
+2. The `LOCAL_DART_SDK` environment variable needs to point to this path: `export LOCAL_DART_SDK=/path/to/dart/sdk`
-**[All other contributors]** Please follow instructions at <https://dcm.dev/pricing/>. You can either use the free tier of DCM, or purchase a team license. Note that the free tier doesn't support all the rules of the paid tier, so you will also need to consult the output of the Dart Code Metrics workflow on Github when you open your PR.
+If you are also developing server side code (e.g. the `devtools_shared` package), you will need to add a
+dependency override to `sdk/pkg/dds/pubspec.yaml`.
+
+```yaml
+dependency_overrides:
+ devtools_shared:
+ path: relative/path/to/devtools/packages/devtools_shared
+```
+
+Then you can run DevTools with the server by running the following from the top-level `devtools` directory:
+```
+devtools_tool serve
+```
+
+### DevTools + VS Code integration (IDE-embedded DevTools experience)
+
+To test the integration with VS Code, you can set up the Dart VS Code extension to run DevTools
+and the server from your local source code. Follow the
+[Frontend + DevTools server](#frontend--devtools-server) setup instructions above, and make sure
+you have version v3.47 or newer of the Dart extension for VS Code.
+
+Open your VS Code settings (Run the **Preferences: Open User Settings (JSON)** command from the
+command palette (`F1`)) and add the following to your settings:
+
+```js
+"dart.customDevTools": {
+ "path": "/path/to/devtools",
+ "env": {
+ "LOCAL_DART_SDK": "/path/to/sdk"
+ // Path to the version that Flutter DevTools is pinned to.
+ "FLUTTER_ROOT": "/path/to/devtools/tool/flutter-sdk"
+ }
+},
+```
+
+This instructs VS Code to run the `devtools_tool serve` command instead of running `dart devtools`.
+You must set the `LOCAL_DART_SDK` and `FLUTTER_ROOT` env variables correctly for the script to work.
+
+Next, restart VS Code (or run the **Developer: Reload Window** command from the command palette (`F1`))
+and DevTools will be run from your local source code. After making any code changes to DevTools or the
+server, you will need to re-run the **Developer: Reload Window** command to rebuild and restart the server.
+
+## Testing for DevTools
+
+Please see [TESTING.md](TESTING.md) for guidance on running and writing tests.
+
+## Appendix
+
+### Connect DevTools to a test application
+
+For working on most DevTools tools, a connection to a running Dart or Flutter app is required. Run any Dart of Flutter app of your choice to
+connect it to DevTools. Consider running the [Flutter gallery](https://github.com/flutter/gallery#running) app, as it has plenty of interesting
+code to debug.
+1. Run your Dart or Flutter app
+ > Note: some DevTools features may be unavailable depending on the test app platform (Flutter native, Flutter web, Dart CLI, etc.) or run mode
+ (debug, profile) you choose.
+2. Copy the URI printed to the command line (you will use this uri to connect to DevTools)
+
+ ```
+ "A Dart VM Service on iPhone 14 Pro Max is available at: <copy-this-uri>"
+ ```
+3. Paste this URI into the connect dialog in DevTools and click "Connect"
+
+ 
+
+### Running DevTools on Flutter Desktop
+
+For a faster development cycle with hot reload, you can run DevTools on Flutter desktop. Some DevTools
+features only work on the web, like the embedded Perfetto trace viewer, DevTools extensions, or DevTools
+analytics, but the limitations on the desktop app are few.
+
+To run DevTools with the desktop embedder, you can run with either of the following from `devtools/packages/devtools_app`:
+
+- `flutter run -d macos`
+- `flutter run -d linux`
+
+If this fails, you may need to run `flutter create .` from `devtools/packages/devtools_app` to generate
+the updated files for your platform. If you want to run DevTools on Flutter desktop for Windows, you will
+need to generate the files for this platform using the same command, and then run using `flutter run -d windows`.
+
+### Enable and activate DCM (Dart Code Metrics)
+
+Enabling and activating DCM is optional. When you open a PR, the CI bots will show you any DCM warnings introduced
+by your change which should be fixed before submitting.
+
+- **Contributors who work at Google:** you can use the Google-purchased license key to activate DCM.
+See [go/dash-devexp-dcm-keys](http://goto.google.com/dash-devexp-dcm-keys).
+
+- **All other contributors:** please follow instructions at <https://dcm.dev/pricing/>. You can either use the free tier of DCM, or purchase a team license. Note that the free tier doesn't support all the rules of the paid tier, so you will also need to consult the output of the [Dart Code Metrics workflow on Github](#running-the-dart-code-metrics-github-workflow) when you open your PR.
To enable DCM:
@@ -70,186 +244,11 @@
3. Install the extension for your IDE. If you use VS Code, you can get it from [the marketplace](https://marketplace.visualstudio.com/items?itemName=dcmdev.dcm-vscode-extension). If you use IntelliJ IDEA or Android Studio, you can find the plugin [here](https://plugins.jetbrains.com/plugin/20856-dcm).
4. Reload the IDE.
-**Note:** DCM issues can be distinguished from the Dart analyzer issues by their name: DCM rule names contain `-`. Some of the issues can be fixed via CLI, to do so, run `dcm fix` for any directory. To apply `dcm fix` on a file save in the IDE, refer to [this guide](https://dcm.dev/docs/teams/ide-integrations/vscode/#extension-capabilities).
+>Note: DCM issues can be distinguished from the Dart analyzer issues by their name: DCM rule names contain `-`. Some of the issues can be fixed via CLI, to do so, run `dcm fix` for any directory. To apply `dcm fix` on a file save in the IDE, refer to [this guide](https://dcm.dev/docs/teams/ide-integrations/vscode/#extension-capabilities).
-## Development
+### third_party dependencies
-*NOTE:* Though DevTools is shipped as a Flutter Web app, we recommend developing as a Flutter Desktop app where possible for a more efficient development workflow. Please see the [Desktop Embedder] section below for instructions on running DevTools as a Flutter Desktop app.
-
-To pull fresh version, regenerate code and upgrade dependencies:
-
-- `sh tool/pull_and_refresh.sh`
-
-To regenerate mocks and upgrade dependencies (after switching branches, for example):
-
-- `sh tool/refresh.sh`
-
-To run DevTools as a Flutter web app, with all experiments enabled, from the packages/devtools_app directory:
-
-- `flutter run -d chrome --dart-define=enable_experiments=true`
-
-To test release performance:
-
-- `flutter run -d web-server --release --dart-define=FLUTTER_WEB_USE_SKIA=true`
-
-You can also use `-d headless-server`, which will start a headless server that serves the HTML
-files for the DevTools Flutter app.
-
-To connect to your running application, paste the earlier copied observatory URL into the section "Connect to a Running App" in DevTools.
-
-To enable all experiments by default when you are running with VS Code, add the following to your debugging configuration:
-
-```
-"args": [
- "--dart-define=enable_experiments=true"
-]
-```
-
-## Development (DevTools server + DevTools Flutter web app)
-
-To develop with a workflow that exercises the DevTools server <==> DevTools client connection,
-from the main devtools/ directory run:
-
-```
-export LOCAL_DART_SDK=/path/to/dart-sdk
-dart ./tool/build_e2e.dart
-```
-* Note: the LOCAL_DART_SDK needs to point to a local checkout of [dart-sdk](https://github.com/dart-lang/sdk/tree/main)
-* Note: if you are also developing server side code, e.g. the devtools_shared package, add a devtools_shared path override to `<path-to-dart-sdk>/pkg/dds/pubspec.yaml`.
-
-That will:
-- start the devtools server
-- start an instance of `flutter run -d web-server` from the `packages/devtools_app` directory
-- proxy all web traffic the devtools server doesn't handle directly to the `flutter run`
- development web server
-
-You can then open a browser at the regular DevTools server URL (typically http://127.0.0.1:9100).
-When you make changes on disk, you can hit `r` in your command-line to rebuild the app, and
-refresh in your browser to see the changes. Hit `q` in the command line to terminate both the
-`flutter run` instance and the devtools server instance.
-
-## Development (VS Code Integration)
-
-To test integration with VS Code, you can instruct the Dart extension to run DevTools and the server from local code. You will need to have the Dart SDK source set up (see [dart-lang/sdk/CONTRIBUTING.md](https://github.com/dart-lang/sdk/blob/main/CONTRIBUTING.md#getting-the-code)) and you will need version v3.47 or newer of the Dart extension for VS Code.
-
-Open your VS Code settings (Run the **Preferences: Open User Settings (JSON)** command from the command palette (`F1`)) and add the following to your settings:
-
-```js
-"dart.customDevTools": {
- "script": "/path/to/devtools/tool/build_e2e.dart",
- "cwd": "/path/to/devtools",
- "env": {
- "LOCAL_DART_SDK": "/path/to/dart-sdk/sdk"
- }
-},
-```
-
-This instructs VS Code to run the `tool/build_e2e.dart` script instead of running `dart devtools`. You must set the `cwd` and `LOCAL_DART_SDK` env variable correctly for the script to work.
-
-Next, restart VS Code (or run the **Developer: Reload Window** command from the command palette (`F1`)) and DevTools will be run from your local code. After making any code changes to DevTools or the server, you will need to re-run the **Developer: Reload Window** command to rebuild and restart the server.
-
-### Running with Flutter Desktop
-
-You can also run DevTools using the Flutter desktop embedder on linux or macos. Some DevTools features only work on the web, like the embedded Perfetto trace viewer or DevTools analytics, but the limitations on the desktop app are few.
-
-The advantage of developing with the desktop embedder is that you can use hot reload to speed up your development cycle.
-
-To run DevTools with the desktop embedder, you can run with either of the following from `devtools/packages/devtools_app`:
-
-- `flutter run -d macos`
-- `flutter run -d linux`
-
-If this fails, you may need to run `flutter create .` from `devtools/packages/devtools_app` to generate the updated files for your platform.
-
-## Developing with VS Code
-
-### DevTools Web
-
-If you're using VS Code to work on DevTools you can run DevTools from the editor
-using the VS Code tasks without having to run in a terminal window:
-
-- Open the root of the repository in VS Code
-- Press `F5`
-
-This will serve the application in the background and launch Google Chrome. Subsequent
-launches will just re-launch the browser since the task remains running in the background
-and rebuilding as necessary.
-
-## Automated Testing
-
-### Running tests
-
-Before running tests, make sure your Flutter SDK matches the version that will be used on
-the bots. To update your local flutter version, run:
-
-```
-./tool/update_flutter_sdk.sh --local
-
-```
-
-Now you can proceed with running DevTools tests:
-
-```
-cd packages/devtools_app
-flutter test -j1
-```
-
-The flag `-j1` tells Flutter to run tests with 1 concurrent test runner. If your test run does
-not include the directory `devtools_app/test/integration_tests`, then you do not need to include
-this flag.
-
-### Updating golden files
-
-**Note: golden images should only be generated on MacOS.**
-
-Golden image tests will fail for one of three reasons:
-
-1) The UI has been _intentionally_ modified.
-2) Something changed in the Flutter framework that would cause downstream changes for our tests.
-3) The UI has been _unintentionally_ modified, in which case we should not accept the changes.
-
-For valid golden image updates (1 and 2 above), the failing golden tests will need to be ran
-with the `--update-goldens` flag.
-
-Before updating the goldens, ensure your version of Flutter matches the version of Flutter that
-will be used on the bots. To update your local flutter version, run:
-
-```
-./tool/update_flutter_sdk.sh --local
-```
-
-Now you can proceed with updating the goldens:
-
-```
-flutter test <path/to/my/test> --update-goldens
-```
-
-To update goldens for all tests, run:
-```
-flutter test test/ --update-goldens
-```
-
-## Manual Testing
-
-To explore DevTools with all experimental features enabled:
-
-1. [Configure](https://docs.flutter.dev/get-started/install) Dart or Flutter.
-
-2. Start DevTools:
-```
-git clone git@github.com:flutter/devtools.git
-./devtools/tool/update_flutter_sdk.sh
-cd devtools/packages/devtools_app
-../../tool/flutter-sdk/bin/flutter run -d chrome --dart-define=enable_experiments=true
-```
-
-3. Paste URL of your application (for example [Gallery](#connect-to-application)) to the connection textbox.
-
-## third_party dependencies
-
-All content not authored by the Flutter team must go in the third_party
-directory. As an expedient to make the third_party code work well with our build scripts,
-code in third_party should be given a stub pubspec.yaml file so that you can
-reference the resources from the packages directory from
-`packages/devtools_app/web/index.html`
-
+All content not authored by the Flutter team (which includes both sponsored and open-source contributors)
+must go in the `third_party` directory. As an expedient to make the `third_party` code work well with our
+build scripts, code in `third_party` should be given a stub `pubspec.yaml` file so that you can reference
+the resources from the packages directory from `packages/devtools_app/web/index.html`
\ No newline at end of file
diff --git a/packages/README.md b/STYLE.md
similarity index 96%
rename from packages/README.md
rename to STYLE.md
index cf56b29..d793b6c 100644
--- a/packages/README.md
+++ b/STYLE.md
@@ -1,4 +1,4 @@
-# Coding agreements in DevTools
+# DevTools style guide
We fully follow [Effective Dart](https://dart.dev/guides/language/effective-dart)
and some items of
diff --git a/TESTING.md b/TESTING.md
new file mode 100644
index 0000000..c0759fe
--- /dev/null
+++ b/TESTING.md
@@ -0,0 +1,91 @@
+Testing for DevTools
+=======================
+
+DevTools is test covered by multiple types of tests, all of which are run on the CI for each DevTools PR / commit:
+
+1. Unit tests
+ - tests for business logic
+2. Widget tests
+ - tests for DevTools UI components using mock or fake data
+ - some widget tests may contain golden image testing
+3. Partial integration tests
+ - tests for DevTools UI and business logic with a real VM service connection to a test app
+4. Full integration tests
+ - Flutter web integration tests that run DevTools as a Flutter web app and connect it to a real test app
+ on multiple platforms (Flutter mobile, Flutter web, and Dart CLI)
+
+**The following instructions are for unit tests, widget tests, and partial integration tests** in DevTools. For instructions
+on running and writing full integration tests, please see [integration_test/README.md](integration_test/README.md).
+In general, we should first try to test cover new features and bug fixes with unit tests or widget tests
+before writing new integration tests, which are slower to run and are not as easy to debug or iterate upon.
+
+## Running DevTools tests
+
+Before running tests, make sure your Flutter SDK matches the version that will be used on
+the CI. To update your local flutter version, run:
+
+```
+./tool/update_flutter_sdk.sh --local
+```
+> Note: Running this command requires that you have followed the [set up instructions](CONTRIBUTING.md#set-up-your-devtools-environment)
+in the DevTools contributing guide regarding cloning the Flutter SDK from GitHub.
+
+Now you can proceed with running DevTools tests:
+
+```
+cd packages/devtools_app
+flutter test test/
+```
+
+### Updating golden image files
+
+> Note: golden images should only be generated on MacOS.
+
+Golden image tests will fail for one of three reasons:
+
+1. The UI has been _intentionally_ modified.
+2. Something changed in the Flutter framework that would cause downstream changes for our tests.
+3. The UI has been _unintentionally_ modified, in which case we should not accept the changes.
+
+For valid golden image updates (1 and 2 above), the failing golden images will need to be updated. This can
+be done in one of two ways:
+
+1. If the tests failed on the CI for a PR, we can download the generated golden images directly from GitHub.
+ > If you are developing on a non-MacOS machine, this is the only way you'll be able to update the golden images.
+ - Natvigate to the failed Actions run for your PR on GitHub. Example:
+
+ 
+
+ - Scroll to the bottom of the Summary view to see the errors from the `macos goldens` job, and the notice containing the golden update command:
+
+ 
+
+2. Update the goldens locally by running the failing test(s) with the `--update-goldens` flag.
+
+ - Before updating the goldens, ensure your version of Flutter matches the version of Flutter that is used
+ on the CI. To update your local flutter version, run:
+
+ ```
+ ./tool/update_flutter_sdk.sh --local
+ ```
+
+ - Then proceed with updating the goldens:
+
+ ```
+ flutter test <path/to/my/test> --update-goldens
+ ```
+
+ or to update goldens for all tests:
+ ```
+ flutter test test/ --update-goldens
+ ```
+
+## Writing DevTools tests
+
+When you add a new feature or fix a bug, please add a corresponding test for your change.
+
+- If there is an existing test file for the feature your code touches, you can add the test case
+there.
+- Otherwise, create a new test file with the `_test.dart` suffix, and place it in an appropriate
+location under the `test/` directory for the DevTools package you are working on.
+
diff --git a/_markdown_images/connect_dialog_example.png b/_markdown_images/connect_dialog_example.png
new file mode 100644
index 0000000..74cd28e
--- /dev/null
+++ b/_markdown_images/connect_dialog_example.png
Binary files differ
diff --git a/_markdown_images/failed_actions_run.png b/_markdown_images/failed_actions_run.png
new file mode 100644
index 0000000..60617a6
--- /dev/null
+++ b/_markdown_images/failed_actions_run.png
Binary files differ
diff --git a/_markdown_images/failed_goldens_notice.png b/_markdown_images/failed_goldens_notice.png
new file mode 100644
index 0000000..005feb9
--- /dev/null
+++ b/_markdown_images/failed_goldens_notice.png
Binary files differ
diff --git a/_markdown_images/vs_code_launch_configurations.png b/_markdown_images/vs_code_launch_configurations.png
new file mode 100644
index 0000000..92c50f1
--- /dev/null
+++ b/_markdown_images/vs_code_launch_configurations.png
Binary files differ
diff --git a/case_study/memory_leaks/memory_leak_app/pubspec.yaml b/case_study/memory_leaks/memory_leak_app/pubspec.yaml
index 1abffcf..7dbc3fd 100644
--- a/case_study/memory_leaks/memory_leak_app/pubspec.yaml
+++ b/case_study/memory_leaks/memory_leak_app/pubspec.yaml
@@ -11,7 +11,7 @@
dev_dependencies:
flutter_test:
sdk: flutter
- intl: '>=0.16.1 <0.18.0'
+ intl: ^0.18.0
http: ^0.13.5
# For information on the generic Dart part of this file, see the
diff --git a/flutter-candidate.txt b/flutter-candidate.txt
index 0c4e4e2..b9c121b 100644
--- a/flutter-candidate.txt
+++ b/flutter-candidate.txt
@@ -1 +1 @@
-3.15.0-9.0.pre
+3.18.0-17.0.pre
diff --git a/packages/analysis_options.yaml b/packages/analysis_options.yaml
index abe5a5d..07c7bbd 100644
--- a/packages/analysis_options.yaml
+++ b/packages/analysis_options.yaml
@@ -26,7 +26,6 @@
- always_declare_return_types
# - always_put_control_body_on_new_line
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
- - always_require_non_null_named_parameters
# - always_specify_types
- annotate_overrides
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
@@ -126,6 +125,7 @@
- unnecessary_const
- unnecessary_getters_setters
# - unnecessary_lambdas # https://github.com/dart-lang/linter/issues/498
+ - unnecessary_library_directive
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_in_if_null_operators
@@ -138,6 +138,7 @@
- use_rethrow_when_possible
# - use_setters_to_change_properties # not yet tested
# - use_string_buffers # https://github.com/dart-lang/linter/pull/664
+ - use_string_in_part_of_directives
# - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review
- valid_regexps
# - void_checks # not yet tested
diff --git a/packages/devtools_app/assets/dart_syntax.json b/packages/devtools_app/assets/dart_syntax.json
index eb3cc30..6f1a042 100644
--- a/packages/devtools_app/assets/dart_syntax.json
+++ b/packages/devtools_app/assets/dart_syntax.json
@@ -1,6 +1,6 @@
{
"name": "Dart",
- "version": "1.2.0",
+ "version": "1.2.5",
"fileTypes": [
"dart"
],
@@ -93,15 +93,7 @@
"end": "```"
},
{
- "match": "(`.*?`)",
- "captures": {
- "0": {
- "name": "variable.other.source.dart"
- }
- }
- },
- {
- "match": "(`.*?`)",
+ "match": "(`[^`]+?`)",
"captures": {
"0": {
"name": "variable.other.source.dart"
@@ -302,6 +294,9 @@
{
"name": "keyword.declaration.dart",
"match": "extends"
+ },
+ {
+ "include": "#comments"
}
]
},
@@ -333,7 +328,7 @@
},
{
"name": "keyword.declaration.dart",
- "match": "(?<!\\$)\\b(abstract|sealed|base|interface|class|enum|extends|extension|external|factory|implements|get(?!\\()|mixin|native|operator|set(?!\\()|typedef|with|covariant)\\b(?!\\$)"
+ "match": "(?<!\\$)\\b(abstract|sealed|base|interface|class|enum|extends|extension type|extension|external|factory|implements|get(?!\\()|mixin|native|operator|set(?!\\()|typedef|with|covariant)\\b(?!\\$)"
},
{
"name": "storage.modifier.dart",
@@ -396,6 +391,7 @@
"string-interp": {
"patterns": [
{
+ "name": "string.interpolated.expression.dart",
"match": "\\$([a-zA-Z0-9_]+)",
"captures": {
"1": {
@@ -409,8 +405,7 @@
"end": "\\}",
"patterns": [
{
- "include": "#constants-and-special-vars",
- "name": "variable.parameter.dart"
+ "include": "#constants-and-special-vars"
},
{
"include": "#strings"
diff --git a/packages/devtools_app/benchmark/README.md b/packages/devtools_app/benchmark/README.md
new file mode 100644
index 0000000..fbc94ef
--- /dev/null
+++ b/packages/devtools_app/benchmark/README.md
@@ -0,0 +1,83 @@
+# DevTools benchmark tests
+
+There are two types of benchmarks that we currently support: size and performance.
+1. `devtools_benchmarks_test.dart` - measures DevTools frame times.
+2. `web_bundle_size_test.dart` - measures DevTools release build size.
+
+The benchmark tests are run automatically on the CI.
+See the "benchmark-performance" and "benchmark-size" jobs.
+
+## Running benchmark tests locally
+
+> [!NOTE]
+> The performance and size benchmarks cannot be run concurrently
+> (e.g. by running `flutter test benchmark/`). See the [#caveats](#caveats)
+> section below.
+
+All of the commands below should be run from the `packages/devtools_app` directory.
+
+### Performance benchmarks
+
+To run the performance benchmark tests locally, run:
+```sh
+dart run benchmark/scripts/run_benchmarks.dart
+```
+
+Provide arguments to the `run_benchmarks.dart` script in order to:
+* compute the average of multiple benchmark runs
+* compute a delta against a prior benchmark run
+* save the benchmark results to a file
+* run the benchmarks in the browser
+* run the benchmarks with the `dart2wasm` compiler
+* run the benchmarks with the `skwasm` web renderer
+
+Run `dart run benchmark/scripts/run_benchmarks.dart -h` to see details.
+
+To run the test that verifies we can run benchmark tests, run:
+```sh
+flutter test benchmark/devtools_benchmarks_test.dart
+```
+
+### Size benchmarks
+
+To run the size benchmark test locally, run:
+```sh
+flutter test benchmark/web_bundle_size_test.dart
+```
+
+### Caveats
+
+The size benchmark must be ran by itself because it actually modifies the
+`devtools_app/build` folder to create and measure the release build web bundle size.
+If this test is ran while other tests are running, it can affect the measurements
+that the size benchmark test takes, and it can affect the DevTools build that
+the other running tests are using.
+
+## Adding a new benchmark test or test case
+
+The tests are defined by "automators", which live in the `benchmark/test_infra/automators`
+directory. To add a new test or test case, either modify an existing automator or add
+a new one for a new screen. Follow existing examples in that directory for guidance.
+
+## Comparing two benchmark test runs
+
+There are two ways to calculate the delta between two benchmark test runs:
+
+1. Compare two benchmarks from file:
+ * In order to compare two different benchmark runs, you first need to run the
+ benchmark tests and save the results to a file:
+ ```sh
+ dart run benchmark/scripts/run_benchmarks.dart --save-to-file=/Users/me/baseline.json
+ dart run benchmark/scripts/run_benchmarks.dart --save-to-file=/Users/me/test.json
+ ```
+ * Then, to compare the benchmarks and calculate deltas, run:
+ ```sh
+ dart run benchmark/scripts/compare_benchmarks.dart /Users/me/baseline_file.json /Users/me/test_file.json
+ ```
+
+2. Compare a new benchmark run with a benchmark from file:
+ * pass the baseline benchmark file path to the `--baseline` flag when running the
+ `run_benchmarks.dart` script:
+ ```sh
+ dart run benchmark/scripts/run_benchmarks.dart --baseline=/Users/me/baseline_file.json``
+ ```
diff --git a/packages/devtools_app/benchmark/devtools_benchmarks_test.dart b/packages/devtools_app/benchmark/devtools_benchmarks_test.dart
new file mode 100644
index 0000000..35d687a
--- /dev/null
+++ b/packages/devtools_app/benchmark/devtools_benchmarks_test.dart
@@ -0,0 +1,88 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Note: this test was modeled after the example test from Flutter Gallery:
+// https://github.com/flutter/gallery/blob/master/test_benchmarks/benchmarks_test.dart
+
+import 'dart:convert' show JsonEncoder;
+import 'dart:io';
+
+import 'package:test/test.dart';
+import 'package:web_benchmarks/server.dart';
+
+import 'test_infra/common.dart';
+import 'test_infra/project_root_directory.dart';
+
+final metricList = <String>[
+ 'preroll_frame',
+ 'apply_frame',
+ 'drawFrameDuration',
+];
+
+final valueList = <String>[
+ 'average',
+ 'outlierAverage',
+ 'outlierRatio',
+ 'noise',
+];
+
+/// Tests that the DevTools web benchmarks are run and reported correctly.
+void main() {
+ test(
+ 'Can run web benchmarks',
+ () async {
+ await _runBenchmarks();
+ },
+ timeout: const Timeout(Duration(minutes: 10)),
+ );
+
+ // TODO(kenz): add tests that verify performance meets some expected threshold
+}
+
+Future<void> _runBenchmarks({bool useWasm = false}) async {
+ stdout.writeln('Starting web benchmark tests ...');
+ final taskResult = await serveWebBenchmark(
+ benchmarkAppDirectory: projectRootDirectory(),
+ entryPoint: 'benchmark/test_infra/client.dart',
+ compilationOptions: CompilationOptions(useWasm: useWasm),
+ treeShakeIcons: false,
+ initialPage: benchmarkInitialPage,
+ );
+ stdout.writeln('Web benchmark tests finished.');
+
+ expect(
+ taskResult.scores.keys,
+ hasLength(DevToolsBenchmark.values.length),
+ );
+
+ for (final benchmarkName in DevToolsBenchmark.values.map((e) => e.id)) {
+ expect(
+ taskResult.scores[benchmarkName],
+ hasLength(metricList.length * valueList.length + 1),
+ );
+
+ for (final metricName in metricList) {
+ for (final valueName in valueList) {
+ expect(
+ taskResult.scores[benchmarkName]?.where(
+ (score) => score.metric == '$metricName.$valueName',
+ ),
+ hasLength(1),
+ );
+ }
+ }
+
+ expect(
+ taskResult.scores[benchmarkName]?.where(
+ (score) => score.metric == 'totalUiFrame.average',
+ ),
+ hasLength(1),
+ );
+ }
+
+ expect(
+ const JsonEncoder.withIndent(' ').convert(taskResult.toJson()),
+ isA<String>(),
+ );
+}
diff --git a/packages/devtools_app/benchmark/scripts/compare_benchmarks.dart b/packages/devtools_app/benchmark/scripts/compare_benchmarks.dart
new file mode 100644
index 0000000..515132a
--- /dev/null
+++ b/packages/devtools_app/benchmark/scripts/compare_benchmarks.dart
@@ -0,0 +1,64 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:web_benchmarks/analysis.dart';
+
+import 'utils.dart';
+
+/// Compares two sets of web benchmarks and calculates the delta between each
+/// matching metric.
+void main(List<String> args) {
+ if (args.length != 2) {
+ throw Exception(
+ 'Expected 2 arguments (<baseline-file>, <test-file>), but instead there '
+ 'were ${args.length}.',
+ );
+ }
+
+ final baselineSource = args[0];
+ final testSource = args[1];
+
+ stdout
+ ..writeln('Comparing the following benchmark results:')
+ ..writeln(' "$testSource" (test)')
+ ..writeln(' "$baselineSource" (baseline)');
+
+ final baselineFile = checkFileExists(baselineSource);
+ final testFile = checkFileExists(testSource);
+ if (baselineFile == null || testFile == null) {
+ if (baselineFile == null) {
+ throw Exception('Cannot find baseline file $baselineSource');
+ }
+ if (testFile == null) {
+ throw Exception('Cannot find test file $testSource');
+ }
+ }
+
+ final baselineResults =
+ BenchmarkResults.parse(jsonDecode(baselineFile.readAsStringSync()));
+ final testResults =
+ BenchmarkResults.parse(jsonDecode(testFile.readAsStringSync()));
+ compareBenchmarks(
+ baselineResults,
+ testResults,
+ baselineSource: baselineSource,
+ );
+}
+
+void compareBenchmarks(
+ BenchmarkResults baseline,
+ BenchmarkResults test, {
+ required String baselineSource,
+}) {
+ stdout.writeln('Starting baseline comparison...');
+ final delta = computeDelta(baseline, test);
+ stdout.writeln('Baseline comparison finished.');
+ stdout
+ ..writeln('==== Comparison with baseline $baselineSource ====')
+ ..writeln(const JsonEncoder.withIndent(' ').convert(delta.toJson()))
+ ..writeln('==== End of baseline comparison ====');
+}
diff --git a/packages/devtools_app/benchmark/scripts/run_benchmarks.dart b/packages/devtools_app/benchmark/scripts/run_benchmarks.dart
new file mode 100644
index 0000000..b32f544
--- /dev/null
+++ b/packages/devtools_app/benchmark/scripts/run_benchmarks.dart
@@ -0,0 +1,168 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:web_benchmarks/analysis.dart';
+import 'package:web_benchmarks/server.dart';
+
+import '../test_infra/common.dart';
+import '../test_infra/project_root_directory.dart';
+import 'compare_benchmarks.dart';
+import 'utils.dart';
+
+/// Runs the DevTools web benchmarks and reports the benchmark data.
+///
+/// To see available arguments, run this script with the `-h` flag.
+Future<void> main(List<String> args) async {
+ if (args.isNotEmpty && args.first == '-h') {
+ stdout.writeln(BenchmarkArgs._buildArgParser().usage);
+ return;
+ }
+
+ final benchmarkArgs = BenchmarkArgs(args);
+ final benchmarkResults = <BenchmarkResults>[];
+ for (var i = 0; i < benchmarkArgs.averageOf; i++) {
+ stdout.writeln('Starting web benchmark tests (run #$i) ...');
+ benchmarkResults.add(
+ await serveWebBenchmark(
+ benchmarkAppDirectory: projectRootDirectory(),
+ entryPoint: 'benchmark/test_infra/client.dart',
+ compilationOptions: CompilationOptions(
+ useWasm: benchmarkArgs.useWasm,
+ renderer: benchmarkArgs.useSkwasm
+ ? WebRenderer.skwasm
+ : WebRenderer.canvaskit,
+ ),
+ treeShakeIcons: false,
+ initialPage: benchmarkInitialPage,
+ headless: !benchmarkArgs.useBrowser,
+ ),
+ );
+ stdout.writeln('Web benchmark tests finished (run #$i).');
+ }
+
+ late final BenchmarkResults taskResult;
+ if (benchmarkArgs.averageOf == 1) {
+ taskResult = benchmarkResults.first;
+ } else {
+ stdout.writeln(
+ 'Taking the average of ${benchmarkResults.length} benchmark runs.',
+ );
+ taskResult = computeAverage(benchmarkResults);
+ }
+
+ final resultsAsMap = taskResult.toJson();
+ final resultsAsJsonString =
+ const JsonEncoder.withIndent(' ').convert(resultsAsMap);
+
+ if (benchmarkArgs.saveToFileLocation != null) {
+ final location = Uri.parse(benchmarkArgs.saveToFileLocation!);
+ File.fromUri(location)
+ ..createSync()
+ ..writeAsStringSync(resultsAsJsonString);
+ }
+
+ stdout
+ ..writeln('==== Results ====')
+ ..writeln(resultsAsJsonString)
+ ..writeln('==== End of results ====')
+ ..writeln();
+
+ final baselineSource = benchmarkArgs.baselineLocation;
+ if (baselineSource != null) {
+ final baselineFile = checkFileExists(baselineSource);
+ if (baselineFile != null) {
+ final baselineResults = BenchmarkResults.parse(
+ jsonDecode(baselineFile.readAsStringSync()),
+ );
+ final testResults = BenchmarkResults.parse(
+ jsonDecode(resultsAsJsonString),
+ );
+ compareBenchmarks(
+ baselineResults,
+ testResults,
+ baselineSource: baselineSource,
+ );
+ }
+ }
+}
+
+class BenchmarkArgs {
+ BenchmarkArgs(List<String> args) {
+ argParser = _buildArgParser();
+ argResults = argParser.parse(args);
+ }
+
+ late final ArgParser argParser;
+
+ late final ArgResults argResults;
+
+ bool get useBrowser => argResults[_browserFlag];
+
+ bool get useWasm => argResults[_wasmFlag];
+
+ bool get useSkwasm => argResults[_skwasmFlag];
+
+ int get averageOf => int.parse(argResults[_averageOfOption]);
+
+ String? get saveToFileLocation => argResults[_saveToFileOption];
+
+ String? get baselineLocation => argResults[_baselineOption];
+
+ static const _browserFlag = 'browser';
+
+ static const _wasmFlag = 'wasm';
+
+ static const _skwasmFlag = 'skwasm';
+
+ static const _saveToFileOption = 'save-to-file';
+
+ static const _baselineOption = 'baseline';
+
+ static const _averageOfOption = 'average-of';
+
+ /// Builds an arg parser for DevTools benchmarks.
+ static ArgParser _buildArgParser() {
+ return ArgParser()
+ ..addFlag(
+ _browserFlag,
+ negatable: false,
+ help: 'Runs the benchmark tests in browser mode (not headless mode).',
+ )
+ ..addFlag(
+ _wasmFlag,
+ negatable: false,
+ help: 'Runs the benchmark tests with dart2wasm',
+ )
+ ..addFlag(
+ _skwasmFlag,
+ negatable: false,
+ help:
+ 'Runs the benchmark tests with the skwasm renderer instead of canvaskit.',
+ )
+ ..addOption(
+ _saveToFileOption,
+ help: 'Saves the benchmark results to a JSON file at the given path.',
+ valueHelp: '/Users/me/Downloads/output.json',
+ )
+ ..addOption(
+ _baselineOption,
+ help: 'The baseline benchmark data to compare this test run to. The '
+ 'baseline file should be created by running this script with the '
+ '$_saveToFileOption in a separate test run.',
+ valueHelp: '/Users/me/Downloads/baseline.json',
+ )
+ ..addOption(
+ _averageOfOption,
+ defaultsTo: '1',
+ help: 'The number of times to run the benchmark. The returned results '
+ 'will be the average of all the benchmark runs when this value is '
+ 'greater than 1.',
+ valueHelp: '5',
+ );
+ }
+}
diff --git a/packages/devtools_app/benchmark/scripts/utils.dart b/packages/devtools_app/benchmark/scripts/utils.dart
new file mode 100644
index 0000000..a4cbc99
--- /dev/null
+++ b/packages/devtools_app/benchmark/scripts/utils.dart
@@ -0,0 +1,14 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:io';
+
+File? checkFileExists(String path) {
+ final testFile = File.fromUri(Uri.parse(path));
+ if (!testFile.existsSync()) {
+ stdout.writeln('Could not locate file at $path.');
+ return null;
+ }
+ return testFile;
+}
diff --git a/packages/devtools_app/benchmark/test_infra/automators/_cpu_profiler_automator.dart b/packages/devtools_app/benchmark/test_infra/automators/_cpu_profiler_automator.dart
new file mode 100644
index 0000000..7347e53
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/automators/_cpu_profiler_automator.dart
@@ -0,0 +1,56 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// ignore_for_file: invalid_use_of_visible_for_testing_member, valid use for benchmark tests.
+
+import 'package:devtools_app/src/screens/profiler/panes/bottom_up.dart';
+import 'package:devtools_app/src/screens/profiler/panes/call_tree.dart';
+import 'package:devtools_app/src/screens/profiler/panes/cpu_flame_chart.dart';
+import 'package:devtools_app/src/screens/profiler/panes/method_table/method_table.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/test_data.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+class CpuProfilerScreenAutomator {
+ const CpuProfilerScreenAutomator(this.controller);
+
+ final WidgetController controller;
+
+ Future<void> run() async {
+ logStatus('Loading offline CPU profiler data and interacting');
+ await loadSampleData(
+ controller,
+ cpuProfilerFileName,
+ // We use a long delay here because the CPU profile data takes a while to
+ // load in headless mode.
+ waitTimeForLoad: const Duration(seconds: 30),
+ );
+
+ // At this point we are on the 'Bottom Up' tab. Scroll to the end.
+ logStatus('On Bottom Up tab by default. Scrolling through table.');
+ await scrollToEnd<CpuBottomUpTable>(controller);
+
+ // Switch to all other CPU profiler tabs and scroll to the end.
+ logStatus('Switching to Call Tree tab.');
+ await controller.tap(find.widgetWithText(InkWell, 'Call Tree'));
+ await controller.pump(longPumpDuration);
+ logStatus('Scrolling through Call Tree table.');
+ await scrollToEnd<CpuCallTreeTable>(controller);
+
+ logStatus('Switching to Method Table tab.');
+ await controller.tap(find.widgetWithText(InkWell, 'Method Table'));
+ await controller.pump(longPumpDuration);
+ logStatus('Scrolling through Method Table.');
+ await scrollToEnd<MethodTable>(controller);
+
+ logStatus('Switching to CPU Flame Chart tab.');
+ await controller.tap(find.widgetWithText(InkWell, 'CPU Flame Chart'));
+ await controller.pump(longPumpDuration);
+ logStatus('Scrolling through CPU Flame Chart.');
+ await scrollToEnd<CpuProfileFlameChart>(controller);
+
+ logStatus('End loading offline CPU profiler data and interacting');
+ }
+}
diff --git a/packages/devtools_app/benchmark/test_infra/automators/_performance_automator.dart b/packages/devtools_app/benchmark/test_infra/automators/_performance_automator.dart
new file mode 100644
index 0000000..2ac0869
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/automators/_performance_automator.dart
@@ -0,0 +1,44 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// ignore_for_file: invalid_use_of_visible_for_testing_member, valid use for benchmark tests.
+
+import 'package:devtools_app/devtools_app.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/test_data.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+class PerformanceScreenAutomator {
+ const PerformanceScreenAutomator(this.controller);
+
+ final WidgetController controller;
+
+ Future<void> run() async {
+ logStatus('Loading offline performance data and interacting');
+ await loadSampleData(controller, performanceLargeFileName);
+
+ logStatus('Select frames with the Frame Analysis tab open');
+ final frames = find.byType(FlutterFramesChartItem);
+ for (var i = 0; i < 5; i++) {
+ await controller.tap(frames.at(i));
+ await controller.pump(shortPumpDuration);
+ }
+
+ logStatus('Open the Timeline Events tab');
+ await controller.tap(find.widgetWithText(InkWell, 'Timeline Events'));
+ await controller.pump(safePumpDuration);
+
+ logStatus('Select frames with the Timeline Events tab open');
+ for (var i = 5; i < 10; i++) {
+ await controller.tap(frames.at(i));
+ await controller.pump(shortPumpDuration);
+ }
+
+ logStatus('Scroll through the frames chart');
+ await scrollToEnd<FramesChart>(controller);
+
+ logStatus('End loading offline performance data and interacting');
+ }
+}
diff --git a/packages/devtools_app/benchmark/test_infra/automators/devtools_automator.dart b/packages/devtools_app/benchmark/test_infra/automators/devtools_automator.dart
new file mode 100644
index 0000000..1af23ed
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/automators/devtools_automator.dart
@@ -0,0 +1,114 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// ignore_for_file: invalid_use_of_visible_for_testing_member, valid use for benchmark tests.
+
+import 'dart:async';
+
+import 'package:devtools_app/devtools_app.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/test_data.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../common.dart';
+import '_cpu_profiler_automator.dart';
+import '_performance_automator.dart';
+
+/// A class that automates the DevTools web app.
+class DevToolsAutomater {
+ DevToolsAutomater({
+ required this.benchmark,
+ required this.stopWarmingUpCallback,
+ });
+
+ /// The current benchmark.
+ final DevToolsBenchmark benchmark;
+
+ /// A function to call when warm-up is finished.
+ ///
+ /// This function is intended to ask `Recorder` to mark the warm-up phase
+ /// as over.
+ final void Function() stopWarmingUpCallback;
+
+ /// Whether the automation has ended.
+ bool finished = false;
+
+ /// A widget controller for automation.
+ late LiveWidgetController controller;
+
+ /// The [DevToolsApp] widget with automation.
+ Widget createWidget() {
+ // There is no `catchError` here, because all errors are caught by
+ // the zone set up in `lib/web_benchmarks.dart` in `flutter/flutter`.
+ Future<void>.delayed(safePumpDuration, automateDevToolsGestures);
+ return DevToolsApp(
+ defaultScreens(sampleData: sampleData),
+ AnalyticsController(enabled: false, firstRun: false),
+ );
+ }
+
+ Future<void> automateDevToolsGestures() async {
+ await warmUp();
+
+ switch (benchmark) {
+ case DevToolsBenchmark.navigateThroughOfflineScreens:
+ await _handleNavigateThroughOfflineScreens();
+ case DevToolsBenchmark.offlineCpuProfilerScreen:
+ await CpuProfilerScreenAutomator(controller).run();
+ case DevToolsBenchmark.offlinePerformanceScreen:
+ await PerformanceScreenAutomator(controller).run();
+ }
+
+ // At the end of the test, mark as finished.
+ finished = true;
+ }
+
+ /// Warm up the animation.
+ Future<void> warmUp() async {
+ logStatus('Warming up.');
+
+ // Let animation stop.
+ await animationStops();
+
+ // Set controller.
+ controller = LiveWidgetController(WidgetsBinding.instance);
+
+ await controller.pumpAndSettle();
+
+ // TODO(kenz): investigate if we need to do something like the Flutter
+ // Gallery benchmark tests to warn up the Flutter engine.
+
+ // When warm-up finishes, inform the recorder.
+ stopWarmingUpCallback();
+
+ logStatus('Warm-up finished.');
+ }
+
+ Future<void> _handleNavigateThroughOfflineScreens() async {
+ logStatus('Navigate through offline DevTools tabs');
+ await navigateThroughDevToolsScreens(
+ controller,
+ runWithExpectations: false,
+ );
+ logStatus('End navigate through offline DevTools tabs');
+ }
+}
+
+const Duration _animationCheckingInterval = Duration(milliseconds: 50);
+
+Future<void> animationStops() async {
+ if (!WidgetsBinding.instance.hasScheduledFrame) return;
+
+ final stopped = Completer<void>();
+
+ Timer.periodic(_animationCheckingInterval, (timer) {
+ if (!WidgetsBinding.instance.hasScheduledFrame) {
+ stopped.complete();
+ timer.cancel();
+ }
+ });
+
+ await stopped.future;
+}
diff --git a/packages/devtools_app/benchmark/test_infra/client.dart b/packages/devtools_app/benchmark/test_infra/client.dart
new file mode 100644
index 0000000..bc19b14
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/client.dart
@@ -0,0 +1,31 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:web_benchmarks/client.dart';
+
+import 'common.dart';
+import 'devtools_recorder.dart';
+
+typedef RecorderFactory = Recorder Function();
+
+final Map<String, RecorderFactory> benchmarks = <String, RecorderFactory>{
+ DevToolsBenchmark.navigateThroughOfflineScreens.id: () => DevToolsRecorder(
+ benchmark: DevToolsBenchmark.navigateThroughOfflineScreens,
+ ),
+ DevToolsBenchmark.offlineCpuProfilerScreen.id: () => DevToolsRecorder(
+ benchmark: DevToolsBenchmark.offlineCpuProfilerScreen,
+ ),
+ DevToolsBenchmark.offlinePerformanceScreen.id: () => DevToolsRecorder(
+ benchmark: DevToolsBenchmark.offlinePerformanceScreen,
+ ),
+};
+
+/// Runs the client of the DevTools web benchmarks.
+///
+/// When the DevTools web benchmarks are run, the server builds an app with this
+/// file as the entry point (see `run_benchmarks.dart`). The app automates
+/// the DevTools web app, records some performance data, and reports them.
+Future<void> main() async {
+ await runBenchmarks(benchmarks, initialPage: benchmarkInitialPage);
+}
diff --git a/packages/devtools_app/benchmark/test_infra/common.dart b/packages/devtools_app/benchmark/test_infra/common.dart
new file mode 100644
index 0000000..c39bf2f
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/common.dart
@@ -0,0 +1,21 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/// The initial page to load upon opening the DevTools benchmark app or
+/// reloading it in Chrome.
+//
+// We use an empty initial page so that the benchmark server does not attempt
+// to load the default page 'index.html', which will show up as "page not
+// found" in DevTools.
+const String benchmarkInitialPage = '';
+
+const String devtoolsBenchmarkPrefix = 'devtools';
+
+enum DevToolsBenchmark {
+ navigateThroughOfflineScreens,
+ offlineCpuProfilerScreen,
+ offlinePerformanceScreen;
+
+ String get id => '${devtoolsBenchmarkPrefix}_$name';
+}
diff --git a/packages/devtools_app/benchmark/test_infra/devtools_recorder.dart b/packages/devtools_app/benchmark/test_infra/devtools_recorder.dart
new file mode 100644
index 0000000..2353fd7
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/devtools_recorder.dart
@@ -0,0 +1,53 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app/devtools_app.dart';
+import 'package:devtools_app/initialization.dart';
+import 'package:devtools_app_shared/utils.dart';
+import 'package:flutter/material.dart';
+import 'package:web_benchmarks/client.dart';
+
+import 'automators/devtools_automator.dart';
+import 'common.dart';
+
+/// A recorder that measures frame building durations for the DevTools.
+class DevToolsRecorder extends WidgetRecorder {
+ DevToolsRecorder({required this.benchmark})
+ : super(name: benchmark.id, useCustomWarmUp: true);
+
+ /// The name of the DevTools benchmark to be run.
+ ///
+ /// See `common.dart` for the list of the names of all benchmarks.
+ final DevToolsBenchmark benchmark;
+
+ DevToolsAutomater? _devToolsAutomator;
+ bool get _finished => _devToolsAutomator?.finished ?? false;
+
+ /// Whether we should continue recording.
+ @override
+ bool shouldContinue() => !_finished || profile.shouldContinue();
+
+ /// Creates the [DevToolsAutomater] widget.
+ @override
+ Widget createWidget() {
+ _devToolsAutomator = DevToolsAutomater(
+ benchmark: benchmark,
+ stopWarmingUpCallback: profile.stopWarmingUp,
+ );
+ return _devToolsAutomator!.createWidget();
+ }
+
+ @override
+ Future<Profile> run() async {
+ // Set the environment parameters global.
+ setGlobal(
+ DevToolsEnvironmentParameters,
+ ExternalDevToolsEnvironmentParameters(),
+ );
+
+ // ignore: invalid_use_of_visible_for_testing_member, valid use for benchmark tests.
+ await initializeDevTools();
+ return super.run();
+ }
+}
diff --git a/packages/devtools_app/benchmark/test_infra/project_root_directory.dart b/packages/devtools_app/benchmark/test_infra/project_root_directory.dart
new file mode 100644
index 0000000..968cd23
--- /dev/null
+++ b/packages/devtools_app/benchmark/test_infra/project_root_directory.dart
@@ -0,0 +1,31 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Note: this code was copied from Flutter gallery
+// https://github.com/flutter/gallery/blob/main/test_benchmarks/benchmarks/project_root_directory.dart
+
+import 'dart:io';
+import 'package:path/path.dart' as path;
+
+bool _hasPubspec(Directory directory) {
+ return directory.listSync().any(
+ (entity) =>
+ FileSystemEntity.isFileSync(entity.path) &&
+ path.basename(entity.path) == 'pubspec.yaml',
+ );
+}
+
+Directory projectRootDirectory() {
+ var current = Directory.current.absolute;
+
+ while (!_hasPubspec(current)) {
+ if (current.path == current.parent.path) {
+ throw Exception('Reached file system root when seeking project root.');
+ }
+
+ current = current.parent;
+ }
+
+ return current;
+}
diff --git a/packages/devtools_app/benchmark/web_bundle_size_test.dart b/packages/devtools_app/benchmark/web_bundle_size_test.dart
new file mode 100644
index 0000000..09ee10a
--- /dev/null
+++ b/packages/devtools_app/benchmark/web_bundle_size_test.dart
@@ -0,0 +1,94 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Note: this test was modeled after the example test from Flutter Gallery:
+// https://github.com/flutter/gallery/blob/master/test_benchmarks/web_bundle_size_test.dart
+
+import 'dart:io';
+
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+
+// Benchmark size in kB.
+const int bundleSizeBenchmark = 4800;
+const int gzipBundleSizeBenchmark = 1400;
+
+void main() {
+ group('Web Compile', () {
+ test(
+ 'bundle size',
+ () async {
+ final js = path.join(
+ Directory.current.path,
+ 'build',
+ 'web',
+ 'main.dart.js',
+ );
+
+ _logStatus('Building DevTools web app in release mode...');
+ // These build arguments match the arguments used in the
+ // tool/lib/commands/build_release.dart command, which is how we build
+ // DevTools for release.
+ await _runProcess('flutter', [
+ 'build',
+ 'web',
+ '--web-renderer',
+ 'canvaskit',
+ '--pwa-strategy=offline-first',
+ '--release',
+ '--no-tree-shake-icons',
+ ]);
+
+ _logStatus('Zipping bundle with gzip...');
+ await _runProcess('gzip', ['-k', '-f', js]);
+
+ final bundleSize = await _measureSize(js);
+ final gzipBundleSize = await _measureSize('$js.gz');
+ if (bundleSize > bundleSizeBenchmark) {
+ fail(
+ 'The size the compiled web build "$js" was $bundleSize kB. This is '
+ 'larger than the benchmark that was set at $bundleSizeBenchmark kB.'
+ '\n\n'
+ 'The build size should be as minimal as possible to reduce the web '
+ 'app\'s initial startup time. If this change is intentional, and'
+ ' expected, please increase the constant "bundleSizeBenchmark".',
+ );
+ } else if (gzipBundleSize > gzipBundleSizeBenchmark) {
+ fail(
+ 'The size the compiled and gzipped web build "$js" was'
+ ' $gzipBundleSize kB. This is larger than the benchmark that was '
+ 'set at $gzipBundleSizeBenchmark kB.\n\n'
+ 'The build size should be as minimal as possible to reduce the '
+ 'web app\'s initial startup time. If this change is intentional, '
+ 'and expected, please increase the constant '
+ '"gzipBundleSizeBenchmark".',
+ );
+ }
+ },
+ timeout: const Timeout(Duration(minutes: 5)),
+ );
+ });
+}
+
+Future<int> _measureSize(String file) async {
+ final result = await _runProcess('du', ['-k', file]);
+ return int.parse(
+ (result.stdout as String).split(RegExp(r'\s+')).first.trim(),
+ );
+}
+
+Future<ProcessResult> _runProcess(
+ String executable,
+ List<String> arguments,
+) async {
+ final result = await Process.run(executable, arguments);
+ stdout.write(result.stdout);
+ stderr.write(result.stderr);
+ return result;
+}
+
+void _logStatus(String log) {
+ // ignore: avoid_print, expected log output.
+ print(log);
+}
diff --git a/packages/devtools_app/devtools_options.yaml b/packages/devtools_app/devtools_options.yaml
new file mode 100644
index 0000000..5c27c3e
--- /dev/null
+++ b/packages/devtools_app/devtools_options.yaml
@@ -0,0 +1,2 @@
+extensions:
+ - provider: true
\ No newline at end of file
diff --git a/packages/devtools_app/integration_test/README.md b/packages/devtools_app/integration_test/README.md
index 23dfd94..bfc6e5c 100644
--- a/packages/devtools_app/integration_test/README.md
+++ b/packages/devtools_app/integration_test/README.md
@@ -24,11 +24,16 @@
### Updating ChromeDriver
-If you update your Chrome version, you may need to update your `chromedriver` executable as well. To do this,
-delete your existing `chromedriver` executable (you can find this by running `which chromedriver`). Then,
-download the proper `chromedriver` version from [here](https://chromedriver.chromium.org/downloads), unzip the
-folder and then copy the `chromedriver` executable to the same location that you just deleted the previous
-executable from.
+If you update your Chrome version (or it updates automatically), you may need to update your `chromedriver`
+executable as well. To do this, delete your existing `chromedriver` executable (you can find this by
+running `which chromedriver`). Then, download the proper `chromedriver` zip file from
+[here](https://googlechromelabs.github.io/chrome-for-testing/#stable) based on your platform, unzip the
+folder, and move the executable to the same location that you just deleted the previous executable from.
+
+If you are on Mac, you will likely need to run this command again on the new executable:
+```
+xattr -d com.apple.quarantine ~/path/to/chromedriver
+```
## Running a test
diff --git a/packages/devtools_app/integration_test/run_tests.dart b/packages/devtools_app/integration_test/run_tests.dart
index 71e03a6..997c3ad 100644
--- a/packages/devtools_app/integration_test/run_tests.dart
+++ b/packages/devtools_app/integration_test/run_tests.dart
@@ -17,6 +17,17 @@
const _testDirectory = 'integration_test/test';
const _offlineIndicator = 'integration_test/test/offline';
+/// The set of test that should be skipped for all devices.
+///
+/// This list should be empty most of the time, but may contain a broken test
+/// while a fix being worked on.
+///
+/// Format: `'my_example_test.dart'`.
+const _skipTests = <String>[
+ // https://github.com/flutter/devtools/issues/6592
+ 'eval_and_browse_test.dart',
+];
+
void main(List<String> args) async {
final testRunnerArgs = DevToolsAppTestRunnerArgs(
args,
@@ -38,6 +49,10 @@
DevToolsAppTestRunnerArgs testRunnerArgs,
) async {
final testTarget = testRunnerArgs.testTarget!;
+
+ final shouldSkip = _skipTests.any((t) => testTarget.endsWith(t));
+ if (shouldSkip) return;
+
if (!testRunnerArgs.testAppDevice.supportsTest(testTarget)) {
// Skip test, since it is not supported for device.
return;
diff --git a/packages/devtools_app/integration_test/test/live_connection/app_test.dart b/packages/devtools_app/integration_test/test/live_connection/app_test.dart
index 0a5fcc1..a9850eb 100644
--- a/packages/devtools_app/integration_test/test/live_connection/app_test.dart
+++ b/packages/devtools_app/integration_test/test/live_connection/app_test.dart
@@ -3,8 +3,8 @@
// found in the LICENSE file.
import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
-import 'package:flutter/material.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
@@ -33,41 +33,6 @@
await tester.pumpAndSettle(shortPumpDuration);
logStatus('verify that we can load each DevTools screen');
- final availableScreenIds = <String>[];
- for (final screen in devtoolsScreens!) {
- if (shouldShowScreen(screen.screen)) {
- availableScreenIds.add(screen.screen.screenId);
- }
- }
- final tabs = tester.widgetList<Tab>(
- find.descendant(
- of: find.byType(DevToolsAppBar),
- matching: find.byType(Tab),
- ),
- );
-
- var numTabs = tabs.length;
- if (numTabs < availableScreenIds.length) {
- final tabOverflowMenuFinder = find.descendant(
- of: find.byType(TabOverflowButton),
- matching: find.byType(MenuAnchor),
- );
- expect(tabOverflowMenuFinder, findsOneWidget);
- final menuChildren =
- tester.widget<MenuAnchor>(tabOverflowMenuFinder).menuChildren;
- numTabs += menuChildren.length;
- }
-
- expect(numTabs, availableScreenIds.length);
-
- final screens = (ScreenMetaData.values.toList()
- ..removeWhere((data) => !availableScreenIds.contains(data.id)));
- for (final screen in screens) {
- await switchToScreen(
- tester,
- tabIcon: screen.icon!,
- screenId: screen.id,
- );
- }
+ await navigateThroughDevToolsScreens(tester);
});
}
diff --git a/packages/devtools_app/integration_test/test/live_connection/debugger_panel_test.dart b/packages/devtools_app/integration_test/test/live_connection/debugger_panel_test.dart
index 2f7ec11..360a8b1 100644
--- a/packages/devtools_app/integration_test/test/live_connection/debugger_panel_test.dart
+++ b/packages/devtools_app/integration_test/test/live_connection/debugger_panel_test.dart
@@ -5,8 +5,8 @@
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/screens/debugger/call_stack.dart';
import 'package:devtools_app/src/screens/debugger/codeview.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
diff --git a/packages/devtools_app/integration_test/test/live_connection/devtools_extensions_test.dart b/packages/devtools_app/integration_test/test/live_connection/devtools_extensions_test.dart
index ed39ff0..83a374d 100644
--- a/packages/devtools_app/integration_test/test/live_connection/devtools_extensions_test.dart
+++ b/packages/devtools_app/integration_test/test/live_connection/devtools_extensions_test.dart
@@ -5,7 +5,6 @@
// Do not delete these arguments. They are parsed by test runner.
// test-argument:experimentsOn=true
-// import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/extensions/embedded/view.dart';
import 'package:devtools_app/src/extensions/extension_screen.dart';
@@ -14,7 +13,8 @@
import 'package:devtools_app/src/shared/development_helpers.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_shared/devtools_extensions.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
diff --git a/packages/devtools_app/integration_test/test/live_connection/eval_and_browse_test.dart b/packages/devtools_app/integration_test/test/live_connection/eval_and_browse_test.dart
index 1f7c44c..f4f2ca3 100644
--- a/packages/devtools_app/integration_test/test/live_connection/eval_and_browse_test.dart
+++ b/packages/devtools_app/integration_test/test/live_connection/eval_and_browse_test.dart
@@ -10,7 +10,8 @@
import 'package:devtools_app/src/screens/memory/panes/diff/widgets/snapshot_list.dart';
import 'package:devtools_app/src/screens/memory/shared/primitives/instance_context_menu.dart';
import 'package:devtools_app/src/shared/console/widgets/console_pane.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -101,21 +102,22 @@
await tester.tapAndPump(find.textContaining('one instance'));
await tester.tapAndPump(find.text('Any'), duration: longPumpDuration);
- Widget? next = await tester.tapAndPump(
+ Finder? next = await tester.tapAndPump(
find.textContaining('MyApp, retained size '),
next: find.text('references'),
);
next = await tester.tapAndPump(
- find.byWidget(next!),
+ next!,
next: find.textContaining('static ('),
);
next = await tester.tapAndPump(
- find.byWidget(next!),
+ next!,
+ description: 'text containing "static ("',
next: find.text('inbound'),
);
next = await tester.tapAndPump(
- find.byWidget(next!),
- next: find.text('Context'),
+ next!,
+ next: find.text('View'),
);
}
@@ -198,14 +200,16 @@
/// Taps and settles.
///
/// If [next] is provided, will repeat the tap untill [next] returns results.
- /// If [next] is not null returns [next].
- Future<Widget?> tapAndPump(
+ /// Returns [next].
+ Future<Finder?> tapAndPump(
Finder finder, {
Duration? duration,
Finder? next,
+ String? description,
}) async {
Future<void> action(int tryNumber) async {
- logStatus('attempt #$tryNumber, tapping \n[$finder]\n');
+ logStatus('\nattempt #$tryNumber, tapping');
+ logStatus(description ?? finder.toString());
tryNumber++;
await tester.tap(finder);
await tester.pump(duration);
@@ -220,7 +224,7 @@
for (var tryNumber = 1; tryNumber < 10; tryNumber++) {
try {
final items = tester.widgetList(next);
- if (items.isNotEmpty) return items.first;
+ if (items.isNotEmpty) return next;
await action(tryNumber);
} on StateError {
// tester.widgetList throws StateError if no widgets found.
diff --git a/packages/devtools_app/integration_test/test/live_connection/performance_screen_event_recording_test.dart b/packages/devtools_app/integration_test/test/live_connection/performance_screen_event_recording_test.dart
index 03217bd..85dcc1f 100644
--- a/packages/devtools_app/integration_test/test/live_connection/performance_screen_event_recording_test.dart
+++ b/packages/devtools_app/integration_test/test/live_connection/performance_screen_event_recording_test.dart
@@ -4,7 +4,8 @@
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/screens/performance/panes/timeline_events/timeline_events_view.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
diff --git a/packages/devtools_app/integration_test/test/live_connection/service_connection_test.dart b/packages/devtools_app/integration_test/test/live_connection/service_connection_test.dart
index e3342ea..f900701 100644
--- a/packages/devtools_app/integration_test/test/live_connection/service_connection_test.dart
+++ b/packages/devtools_app/integration_test/test/live_connection/service_connection_test.dart
@@ -11,7 +11,8 @@
import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
@@ -52,7 +53,7 @@
// Use a range instead of an exact number because service extension
// calls are not consistent. This will still catch any spurious calls
// that are unintentionally added at start up.
- const Range(40, 60).contains(vmServiceCallCount),
+ const Range(40, 70).contains(vmServiceCallCount),
isTrue,
reason: 'Unexpected number of vm service calls upon connection: '
'$vmServiceCallCount. If this is expected, please update this test '
@@ -67,14 +68,18 @@
// Filter out unawaited streamListen calls.
.where((call) => call != 'streamListen')
.toList()
- .sublist(0, 5),
+ .sublist(0, 6),
equals([
'getSupportedProtocols',
'getVersion',
'getFlagList',
+ 'getDartDevelopmentServiceVersion',
+ 'getDartDevelopmentServiceVersion',
'getVM',
- 'getIsolate',
]),
+ reason: 'Unexpected order of vm service calls upon connection. '
+ 'Here are the calls for this test run:\n '
+ '${serviceConnection.serviceManager.service!.vmServiceCalls.toString()}',
);
expect(
diff --git a/packages/devtools_app/integration_test/test/offline/perfetto_test.dart b/packages/devtools_app/integration_test/test/offline/perfetto_test.dart
index cce652b..693a37d 100644
--- a/packages/devtools_app/integration_test/test/offline/perfetto_test.dart
+++ b/packages/devtools_app/integration_test/test/offline/perfetto_test.dart
@@ -4,11 +4,16 @@
import 'package:devtools_app/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart';
import 'package:devtools_app/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart';
-import 'package:devtools_test/devtools_integration_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:devtools_test/integration_test.dart';
+import 'package:devtools_test/test_data.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
+// To run:
+// dart run integration_test/run_tests.dart --target=integration_test/test/offline/perfetto_test.dart
+
void main() {
final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();
diff --git a/packages/devtools_app/lib/devtools.dart b/packages/devtools_app/lib/devtools.dart
index 5127a18..855e881 100644
--- a/packages/devtools_app/lib/devtools.dart
+++ b/packages/devtools_app/lib/devtools.dart
@@ -9,4 +9,4 @@
// the constant declaration `const String version =`.
// If you change the declaration you must also modify the regex in
// tools/update_version.dart.
-const String version = '2.28.5';
+const String version = '2.31.0';
diff --git a/packages/devtools_app/lib/devtools_app.dart b/packages/devtools_app/lib/devtools_app.dart
index 2410307..9ee93ac 100644
--- a/packages/devtools_app/lib/devtools_app.dart
+++ b/packages/devtools_app/lib/devtools_app.dart
@@ -19,6 +19,8 @@
export 'src/screens/debugger/program_explorer_model.dart';
export 'src/screens/debugger/span_parser.dart';
export 'src/screens/debugger/syntax_highlighter.dart';
+export 'src/screens/deep_link_validation/deep_links_controller.dart';
+export 'src/screens/deep_link_validation/deep_links_screen.dart';
export 'src/screens/inspector/inspector_controller.dart';
export 'src/screens/inspector/inspector_screen.dart';
export 'src/screens/inspector/inspector_tree_controller.dart';
@@ -31,6 +33,7 @@
export 'src/screens/network/network_screen.dart';
export 'src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_controller.dart';
export 'src/screens/performance/panes/flutter_frames/flutter_frame_model.dart';
+export 'src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart';
export 'src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart';
export 'src/screens/performance/panes/frame_analysis/frame_analysis_model.dart';
export 'src/screens/performance/panes/raster_stats/raster_stats_controller.dart';
@@ -52,7 +55,6 @@
export 'src/screens/vm_developer/vm_developer_tools_screen.dart';
export 'src/screens/vm_developer/vm_service_private_extensions.dart';
export 'src/service/json_to_service_cache.dart';
-export 'src/service/resolved_uri_manager.dart';
export 'src/service/service_extensions.dart';
export 'src/service/service_manager.dart';
export 'src/service/service_registrations.dart';
diff --git a/packages/devtools_app/lib/initialization.dart b/packages/devtools_app/lib/initialization.dart
index 76212b0..6b8823a 100644
--- a/packages/devtools_app/lib/initialization.dart
+++ b/packages/devtools_app/lib/initialization.dart
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -35,32 +34,11 @@
List<DevToolsScreen>? screens,
}) {
setupErrorHandling(() async {
- screens ??= defaultScreens(sampleData: sampleData);
-
- initDevToolsLogging();
-
- // Before switching to URL path strategy, check if this URL is in the legacy
- // fragment format and redirect if necessary.
- if (_handleLegacyUrl()) return;
-
- usePathUrlStrategy();
-
- _maybeInitForIntegrationTestMode(
+ await initializeDevTools(
integrationTestMode: integrationTestMode,
- enableExperiments: shouldEnableExperiments,
+ shouldEnableExperiments: shouldEnableExperiments,
);
- // Initialize the framework before we do anything else, otherwise the
- // StorageController won't be initialized and preferences won't be loaded.
- await initializeFramework();
-
- setGlobal(IdeTheme, getIdeTheme());
-
- final preferences = PreferencesController();
- // Wait for preferences to load before rendering the app to avoid a flash of
- // content with the incorrect theme.
- await preferences.init();
-
// Load the Dart syntax highlighting grammar.
await SyntaxHighlighter.initialize();
@@ -69,15 +47,44 @@
ProviderScope(
observers: const [ErrorLoggerObserver()],
child: DevToolsApp(
- screens!,
+ screens ?? defaultScreens(sampleData: sampleData),
await analyticsController,
- sampleData: sampleData,
),
),
);
});
}
+@visibleForTesting
+Future<void> initializeDevTools({
+ bool integrationTestMode = false,
+ bool shouldEnableExperiments = false,
+}) async {
+ initDevToolsLogging();
+
+ // Before switching to URL path strategy, check if this URL is in the legacy
+ // fragment format and redirect if necessary.
+ if (_handleLegacyUrl()) return;
+
+ usePathUrlStrategy();
+
+ _maybeInitForIntegrationTestMode(
+ integrationTestMode: integrationTestMode,
+ enableExperiments: shouldEnableExperiments,
+ );
+
+ // Initialize the framework before we do anything else, otherwise the
+ // StorageController won't be initialized and preferences won't be loaded.
+ await initializeFramework();
+
+ await _initDTDConnection();
+
+ final preferences = PreferencesController();
+ // Wait for preferences to load before rendering the app to avoid a flash of
+ // content with the incorrect theme.
+ await preferences.init();
+}
+
/// Initializes some DevTools global fields for our Flutter integration tests.
///
/// Since we call [runDevTools] from Dart code, we cannot set environment
@@ -95,6 +102,14 @@
}
}
+Future<void> _initDTDConnection() async {
+ final queryParams = loadQueryParams();
+ final dtdUri = queryParams['dtdUri'];
+ if (dtdUri != null) {
+ await dtdManager.connect(Uri.parse(dtdUri));
+ }
+}
+
/// Checks if the request is for a legacy URL and if so, redirects to the new
/// equivalent.
///
diff --git a/packages/devtools_app/lib/main.dart b/packages/devtools_app/lib/main.dart
index 3cdea23..f196a3e 100644
--- a/packages/devtools_app/lib/main.dart
+++ b/packages/devtools_app/lib/main.dart
@@ -25,7 +25,7 @@
bool shouldEnableExperiments = false,
List<DevToolsJsonFile> sampleData = const [],
}) {
- // Set the extension points global.
+ // Set the environment parameters global.
setGlobal(
DevToolsEnvironmentParameters,
ExternalDevToolsEnvironmentParameters(),
diff --git a/packages/devtools_app/lib/src/app.dart b/packages/devtools_app/lib/src/app.dart
index e52b52e..bc22d96 100644
--- a/packages/devtools_app/lib/src/app.dart
+++ b/packages/devtools_app/lib/src/app.dart
@@ -70,12 +70,10 @@
this.originalScreens,
this.analyticsController, {
super.key,
- this.sampleData = const [],
});
final List<DevToolsScreen> originalScreens;
final AnalyticsController analyticsController;
- final List<DevToolsJsonFile> sampleData;
@override
State<DevToolsApp> createState() => DevToolsAppState();
@@ -204,13 +202,15 @@
Map<String, String?> args,
DevToolsNavigationState? state,
) {
- if (FrameworkCore.initializationInProgress) {
+ // `page` will initially be null while the router is set up, then we will
+ // be called again with an empty string for the root.
+ if (FrameworkCore.initializationInProgress || page == null) {
return const MaterialPage(child: CenteredCircularProgressIndicator());
}
// Provide the appropriate page route.
if (pages.containsKey(page)) {
- Widget widget = pages[page!]!(
+ Widget widget = pages[page]!(
context,
page,
args,
@@ -237,19 +237,9 @@
child: DevToolsScaffold.withChild(
key: const Key('not-found'),
embed: isEmbedded(args),
- child: Center(
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Text("'$page' not found."),
- const SizedBox(height: defaultSpacing),
- ElevatedButton(
- onPressed: () =>
- routerDelegate.navigateHome(clearScreenParam: true),
- child: const Text('Go to Home screen'),
- ),
- ],
- ),
+ child: PageNotFound(
+ page: page,
+ routerDelegate: routerDelegate,
),
),
);
@@ -316,7 +306,7 @@
// hot restart service is available for the connected app.
const HotRestartButton(),
],
- ...DevToolsScaffold.defaultActions(isEmbedded: embed),
+ ...DevToolsScaffold.defaultActions(),
],
),
);
@@ -367,6 +357,9 @@
}
Map<String, UrlParametersBuilder> get _standaloneScreens {
+ // TODO(dantup): Standalone screens do not use DevToolsScaffold which means
+ // they do not currently send an initial "currentPage" event to inform
+ // the server which page they are rendering.
return {
for (final type in StandaloneScreenType.values)
type.name: (_, __, args, ___) => type.screen,
@@ -445,7 +438,7 @@
///
/// [C] corresponds to the type of the screen's controller, which is created by
/// [createController] or provided by [controllerProvider].
-class DevToolsScreen<C> {
+class DevToolsScreen<C extends Object?> {
const DevToolsScreen(
this.screen, {
this.createController,
@@ -529,6 +522,36 @@
}
}
+class PageNotFound extends StatelessWidget {
+ const PageNotFound({
+ super.key,
+ required this.page,
+ required this.routerDelegate,
+ });
+
+ final String page;
+
+ final DevToolsRouterDelegate routerDelegate;
+
+ @override
+ Widget build(BuildContext context) {
+ return Center(
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Text("'$page' not found."),
+ const SizedBox(height: defaultSpacing),
+ ElevatedButton(
+ onPressed: () =>
+ routerDelegate.navigateHome(clearScreenParam: true),
+ child: const Text('Go to Home screen'),
+ ),
+ ],
+ ),
+ );
+ }
+}
+
/// Screens to initialize DevTools with.
///
/// If the screen depends on a provided controller, the provider should be
diff --git a/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart b/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart
index bcdc589..66e1638 100644
--- a/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart
+++ b/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart
@@ -2,19 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// ignore_for_file: avoid_web_libraries_in_flutter, as designed
import 'dart:async';
-import 'dart:html' as html;
import 'dart:ui_web' as ui_web;
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_extensions/api.dart';
import 'package:path/path.dart' as path;
+import 'package:web/helpers.dart';
-import '../../shared/config_specific/server/server.dart';
import '../../shared/development_helpers.dart';
import '../../shared/globals.dart';
import '../../shared/primitives/utils.dart';
+import '../../shared/server/server.dart';
import 'controller.dart';
/// Incrementer for the extension iFrame view that will live for the entire
@@ -44,8 +43,8 @@
}
final basePath = devtoolsAssetsBasePath(
- origin: html.window.location.origin,
- path: html.window.location.pathname ?? '',
+ origin: window.location.origin,
+ path: window.location.pathname,
);
final baseUri = path.join(
basePath,
@@ -62,9 +61,9 @@
return Uri.parse(baseUri).copyWith(queryParameters: queryParams).toString();
}
- html.IFrameElement get extensionIFrame => _extensionIFrame;
+ HTMLIFrameElement get extensionIFrame => _extensionIFrame;
- late final html.IFrameElement _extensionIFrame;
+ late final HTMLIFrameElement _extensionIFrame;
final extensionPostEventStream =
StreamController<DevToolsExtensionEvent>.broadcast();
@@ -79,7 +78,7 @@
);
_initialized = true;
- _extensionIFrame = html.IFrameElement()
+ _extensionIFrame = createIFrameElement()
// This url is safe because we built it ourselves and it does not include
// any user input.
// ignore: unsafe_html
diff --git a/packages/devtools_app/lib/src/extensions/embedded/_view_web.dart b/packages/devtools_app/lib/src/extensions/embedded/_view_web.dart
index ad60678..ce401d4 100644
--- a/packages/devtools_app/lib/src/extensions/embedded/_view_web.dart
+++ b/packages/devtools_app/lib/src/extensions/embedded/_view_web.dart
@@ -3,13 +3,14 @@
// found in the LICENSE file.
import 'dart:async';
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html' as html;
+import 'dart:js_interop';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_extensions/api.dart';
+import 'package:devtools_extensions/utils.dart';
import 'package:flutter/material.dart';
+import 'package:web/helpers.dart';
import '../../shared/banner_messages.dart';
import '../../shared/common_widgets.dart';
@@ -96,7 +97,7 @@
/// We need to store this in a variable so that the listener is properly
/// removed in [dispose]. Otherwise, we will end up in a state where we are
/// leaking listeners when an extension is disabled and re-enabled.
- html.EventListener? _handleMessageListener;
+ EventListener? _handleMessageListener;
void init() {
_iFrameReady = Completer<void>();
@@ -108,9 +109,9 @@
}),
);
- html.window.addEventListener(
+ window.addEventListener(
'message',
- _handleMessageListener = _handleMessage,
+ _handleMessageListener = _handleMessage.toJS,
);
autoDisposeStreamSubscription(
@@ -148,6 +149,12 @@
}
void _postMessage(DevToolsExtensionEvent event) async {
+ // In [integrationTestMode] we are loading a placeholder url
+ // (https://flutter.dev/) in the extension iFrame, so trying to post a
+ // message causes a cross-origin security error. Return early when
+ // [integrationTestMode] is true so that [_postMessage] calls are a no-op.
+ if (integrationTestMode) return;
+
await _iFrameReady.future;
final message = event.toJson();
assert(
@@ -156,22 +163,20 @@
' _iFrameReady future completed.',
);
embeddedExtensionController.extensionIFrame.contentWindow!.postMessage(
- message,
- embeddedExtensionController.extensionUrl,
+ message.jsify(),
+ embeddedExtensionController.extensionUrl.toJS,
);
}
- void _handleMessage(html.Event e) {
- if (e is html.MessageEvent) {
- final extensionEvent = DevToolsExtensionEvent.tryParse(e.data);
- if (extensionEvent != null) {
- onEventReceived(
- extensionEvent,
- onUnknownEvent: () => notificationService.push(
- 'Unknown event received from extension: ${e.data}',
- ),
- );
- }
+ void _handleMessage(Event e) {
+ final extensionEvent = tryParseExtensionEvent(e);
+ if (extensionEvent != null) {
+ onEventReceived(
+ extensionEvent,
+ onUnknownEvent: () => notificationService.push(
+ 'Unknown event received from extension: $extensionEvent}',
+ ),
+ );
}
}
@@ -205,7 +210,7 @@
@override
void dispose() {
- html.window.removeEventListener('message', _handleMessageListener);
+ window.removeEventListener('message', _handleMessageListener);
_handleMessageListener = null;
_pollForExtensionHandlerReady?.cancel();
super.dispose();
@@ -266,7 +271,7 @@
break;
case DevToolsExtensionEventType.vmServiceConnection:
final service = serviceConnection.serviceManager.service;
- updateVmServiceConnection(uri: service?.connectedUri.toString());
+ updateVmServiceConnection(uri: service?.wsUri);
break;
case DevToolsExtensionEventType.showNotification:
_handleShowNotification(event);
diff --git a/packages/devtools_app/lib/src/extensions/embedded/controller.dart b/packages/devtools_app/lib/src/extensions/embedded/controller.dart
index 25f15fa..d41d43e 100644
--- a/packages/devtools_app/lib/src/extensions/embedded/controller.dart
+++ b/packages/devtools_app/lib/src/extensions/embedded/controller.dart
@@ -6,7 +6,8 @@
import 'package:devtools_extensions/api.dart';
import 'package:devtools_shared/devtools_extensions.dart';
-import '_controller_desktop.dart' if (dart.library.html) '_controller_web.dart';
+import '_controller_desktop.dart'
+ if (dart.library.js_interop) '_controller_web.dart';
EmbeddedExtensionControllerImpl createEmbeddedExtensionController(
DevToolsExtensionConfig config,
diff --git a/packages/devtools_app/lib/src/extensions/embedded/view.dart b/packages/devtools_app/lib/src/extensions/embedded/view.dart
index 537c416..3efcc12 100644
--- a/packages/devtools_app/lib/src/extensions/embedded/view.dart
+++ b/packages/devtools_app/lib/src/extensions/embedded/view.dart
@@ -6,8 +6,7 @@
import '../../shared/analytics/analytics.dart' as ga;
import '../../shared/analytics/constants.dart' as gac;
-
-import '_view_desktop.dart' if (dart.library.html) '_view_web.dart';
+import '_view_desktop.dart' if (dart.library.js_interop) '_view_web.dart';
import 'controller.dart';
/// A widget that displays a DevTools extension in an embedded iFrame.
@@ -33,7 +32,7 @@
super.initState();
ga.impression(
gac.DevToolsExtensionEvents.extensionScreenName(
- widget.controller.extensionConfig.name,
+ widget.controller.extensionConfig,
),
gac.DevToolsExtensionEvents.embeddedExtension.name,
);
diff --git a/packages/devtools_app/lib/src/extensions/extension_screen.dart b/packages/devtools_app/lib/src/extensions/extension_screen.dart
index 20a4283..b0b01d0 100644
--- a/packages/devtools_app/lib/src/extensions/extension_screen.dart
+++ b/packages/devtools_app/lib/src/extensions/extension_screen.dart
@@ -11,7 +11,6 @@
import '../shared/analytics/constants.dart' as gac;
import '../shared/common_widgets.dart';
import '../shared/globals.dart';
-import '../shared/primitives/utils.dart';
import '../shared/screen.dart';
import 'embedded/controller.dart';
import 'embedded/view.dart';
@@ -22,7 +21,7 @@
: super.conditional(
// TODO(kenz): we may need to ensure this is a unique id.
id: '${extensionConfig.name}_ext',
- title: extensionConfig.screenTitle,
+ title: extensionConfig.name,
icon: extensionConfig.icon,
// TODO(kenz): support static DevTools extensions.
requiresConnection: true,
@@ -55,9 +54,7 @@
void _init() {
ga.screen(
- gac.DevToolsExtensionEvents.extensionScreenName(
- widget.extensionConfig.name,
- ),
+ gac.DevToolsExtensionEvents.extensionScreenName(widget.extensionConfig),
);
extensionController =
createEmbeddedExtensionController(widget.extensionConfig)..init();
@@ -137,6 +134,4 @@
materialIconCodePoint,
fontFamily: 'MaterialIcons',
);
-
- String get screenTitle => name.toSentenceCase();
}
diff --git a/packages/devtools_app/lib/src/extensions/extension_screen_controls.dart b/packages/devtools_app/lib/src/extensions/extension_screen_controls.dart
index 79adb3c..72fbdd5 100644
--- a/packages/devtools_app/lib/src/extensions/extension_screen_controls.dart
+++ b/packages/devtools_app/lib/src/extensions/extension_screen_controls.dart
@@ -52,7 +52,7 @@
url: extension.issueTrackerLink,
gaScreenName: gac.DevToolsExtensionEvents.extensionScreenId.name,
gaSelectedItemDescription:
- gac.DevToolsExtensionEvents.extensionFeedback(extensionName),
+ gac.DevToolsExtensionEvents.extensionFeedback(extension),
),
context: context,
),
@@ -95,7 +95,7 @@
ga.select(
gac.DevToolsExtensionEvents.extensionScreenId.name,
gac.DevToolsExtensionEvents.extensionForceReload(
- extension.displayName,
+ extension,
),
);
onForceReload();
@@ -172,9 +172,7 @@
onPressed: () {
ga.select(
gac.DevToolsExtensionEvents.extensionScreenId.name,
- gac.DevToolsExtensionEvents.extensionDisableManual(
- extension.displayName,
- ),
+ gac.DevToolsExtensionEvents.extensionDisableManual(extension),
);
unawaited(
extensionService.setExtensionEnabledState(
@@ -205,7 +203,6 @@
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
- final extensionName = extension.displayName;
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
@@ -245,7 +242,7 @@
label: 'Enable',
gaScreen: gac.DevToolsExtensionEvents.extensionScreenId.name,
gaSelection: gac.DevToolsExtensionEvents.extensionEnablePrompt(
- extensionName,
+ extension,
),
elevated: true,
onPressed: () {
@@ -262,7 +259,7 @@
label: 'No, hide this screen',
gaScreen: gac.DevToolsExtensionEvents.extensionScreenId.name,
gaSelection: gac.DevToolsExtensionEvents.extensionDisablePrompt(
- extensionName,
+ extension,
),
onPressed: () {
unawaited(
diff --git a/packages/devtools_app/lib/src/extensions/extension_service.dart b/packages/devtools_app/lib/src/extensions/extension_service.dart
index 33b7c72..1ef7323 100644
--- a/packages/devtools_app/lib/src/extensions/extension_service.dart
+++ b/packages/devtools_app/lib/src/extensions/extension_service.dart
@@ -6,8 +6,8 @@
import 'package:devtools_shared/devtools_extensions.dart';
import 'package:flutter/foundation.dart';
-import '../shared/config_specific/server/server.dart' as server;
import '../shared/globals.dart';
+import '../shared/server/server.dart' as server;
class ExtensionService extends DisposableController
with AutoDisposeControllerMixin {
diff --git a/packages/devtools_app/lib/src/extensions/extension_settings.dart b/packages/devtools_app/lib/src/extensions/extension_settings.dart
index 2498ea4..036ba04 100644
--- a/packages/devtools_app/lib/src/extensions/extension_settings.dart
+++ b/packages/devtools_app/lib/src/extensions/extension_settings.dart
@@ -142,9 +142,7 @@
onPressed: () {
ga.select(
gac.DevToolsExtensionEvents.extensionSettingsId.name,
- gac.DevToolsExtensionEvents.extensionEnableManual(
- extension.name.toLowerCase(),
- ),
+ gac.DevToolsExtensionEvents.extensionEnableManual(extension),
);
unawaited(
extensionService.setExtensionEnabledState(
@@ -161,9 +159,7 @@
onPressed: () {
ga.select(
gac.DevToolsExtensionEvents.extensionSettingsId.name,
- gac.DevToolsExtensionEvents.extensionDisableManual(
- extension.name.toLowerCase(),
- ),
+ gac.DevToolsExtensionEvents.extensionDisableManual(extension),
);
unawaited(
extensionService.setExtensionEnabledState(
diff --git a/packages/devtools_app/lib/src/framework/framework_core.dart b/packages/devtools_app/lib/src/framework/framework_core.dart
index f79b41d..999dbee 100644
--- a/packages/devtools_app/lib/src/framework/framework_core.dart
+++ b/packages/devtools_app/lib/src/framework/framework_core.dart
@@ -4,14 +4,17 @@
import 'dart:async';
+import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_shared.dart';
import 'package:devtools_shared/service.dart';
import 'package:logging/logging.dart';
+import 'package:vm_service/vm_service.dart';
import '../../devtools.dart' as devtools show version;
import '../extensions/extension_service.dart';
import '../screens/debugger/breakpoint_manager.dart';
+import '../service/dtd_manager.dart';
import '../service/service_manager.dart';
import '../service/vm_service_wrapper.dart';
import '../shared/banner_messages.dart';
@@ -21,7 +24,6 @@
import '../shared/notifications.dart';
import '../shared/offline_mode.dart';
import '../shared/primitives/message_bus.dart';
-import '../shared/primitives/utils.dart';
import '../shared/scripts/script_manager.dart';
import '../shared/survey.dart';
@@ -44,6 +46,8 @@
setGlobal(BreakpointManager, BreakpointManager());
setGlobal(EvalService, EvalService());
setGlobal(ExtensionService, ExtensionService());
+ setGlobal(IdeTheme, getIdeTheme());
+ setGlobal(DTDManager, DTDManager());
}
static void init() {
@@ -54,8 +58,7 @@
static bool initializationInProgress = false;
/// Returns true if we're able to connect to a device and false otherwise.
- static Future<bool> initVmService(
- String url, {
+ static Future<bool> initVmService({
required String serviceUriAsString,
ErrorReporter? errorReporter = _defaultErrorReporter,
bool logException = true,
@@ -66,8 +69,7 @@
return true;
}
- final normalizedUri = normalizeVmServiceUri(serviceUriAsString);
- final Uri? uri = normalizedUri ?? getServiceUriFromQueryString(url);
+ final uri = normalizeVmServiceUri(serviceUriAsString);
if (uri != null) {
initializationInProgress = true;
final finishedCompleter = Completer<void>();
@@ -76,16 +78,23 @@
final VmServiceWrapper service = await connect<VmServiceWrapper>(
uri: uri,
finishedCompleter: finishedCompleter,
- createService: ({
- // ignore: avoid-dynamic, code needs to match API from VmService.
+ serviceFactory: ({
+ // ignore: avoid-dynamic, mirrors types of [VmServiceFactory].
required Stream<dynamic> /*String|List<int>*/ inStream,
required void Function(String message) writeMessage,
- required Uri connectedUri,
+ Log? log,
+ DisposeHandler? disposeHandler,
+ Future? streamClosed,
+ String? wsUri,
+ bool trackFutures = false,
}) =>
- VmServiceWrapper.fromNewVmService(
+ VmServiceWrapper.defaultFactory(
inStream: inStream,
writeMessage: writeMessage,
- connectedUri: connectedUri,
+ log: log,
+ disposeHandler: disposeHandler,
+ streamClosed: streamClosed,
+ wsUri: wsUri,
trackFutures: integrationTestMode,
),
);
diff --git a/packages/devtools_app/lib/src/framework/home_screen.dart b/packages/devtools_app/lib/src/framework/home_screen.dart
index baa3de4..ba1fdc2 100644
--- a/packages/devtools_app/lib/src/framework/home_screen.dart
+++ b/packages/devtools_app/lib/src/framework/home_screen.dart
@@ -298,13 +298,11 @@
// intuitive that we don't want to just cancel the route change or
// notification if we are already on a different screen.
final routerDelegate = DevToolsRouterDelegate.of(context);
- final connected = await FrameworkCore.initVmService(
- '',
- serviceUriAsString: uri,
- );
+ final connected =
+ await FrameworkCore.initVmService(serviceUriAsString: uri);
if (connected) {
final connectedUri =
- serviceConnection.serviceManager.service!.connectedUri;
+ Uri.parse(serviceConnection.serviceManager.service!.wsUri!);
routerDelegate.updateArgsIfChanged({'uri': '$connectedUri'});
final shortUri = connectedUri.replace(path: '');
notificationService.push('Successfully connected to $shortUri.');
diff --git a/packages/devtools_app/lib/src/framework/initializer.dart b/packages/devtools_app/lib/src/framework/initializer.dart
index ccee5a5..f41d82d 100644
--- a/packages/devtools_app/lib/src/framework/initializer.dart
+++ b/packages/devtools_app/lib/src/framework/initializer.dart
@@ -130,7 +130,6 @@
}
final connected = await FrameworkCore.initVmService(
- '',
serviceUriAsString: widget.url!,
errorReporter: errorReporter,
logException: logException,
diff --git a/packages/devtools_app/lib/src/framework/notifications_view.dart b/packages/devtools_app/lib/src/framework/notifications_view.dart
index e2b99fb..447ce55 100644
--- a/packages/devtools_app/lib/src/framework/notifications_view.dart
+++ b/packages/devtools_app/lib/src/framework/notifications_view.dart
@@ -264,7 +264,6 @@
Flexible(
child: _NotificationMessage(
widget: widget,
- context: context,
),
),
_DismissAction(
@@ -276,7 +275,6 @@
)
: _NotificationMessage(
widget: widget,
- context: context,
),
const SizedBox(height: defaultSpacing),
_NotificationActions(widget: widget),
@@ -313,11 +311,9 @@
class _NotificationMessage extends StatelessWidget {
const _NotificationMessage({
required this.widget,
- required this.context,
});
final _Notification widget;
- final BuildContext context;
@override
Widget build(BuildContext context) {
diff --git a/packages/devtools_app/lib/src/framework/release_notes/release_notes.dart b/packages/devtools_app/lib/src/framework/release_notes/release_notes.dart
index 5f6a6c7..3c82497 100644
--- a/packages/devtools_app/lib/src/framework/release_notes/release_notes.dart
+++ b/packages/devtools_app/lib/src/framework/release_notes/release_notes.dart
@@ -10,7 +10,7 @@
import 'package:logging/logging.dart';
import '../../../devtools.dart' as devtools;
-import '../../shared/config_specific/server/server.dart' as server;
+import '../../shared/server/server.dart' as server;
import '../../shared/side_panel.dart';
final _log = Logger('release_notes');
diff --git a/packages/devtools_app/lib/src/framework/scaffold.dart b/packages/devtools_app/lib/src/framework/scaffold.dart
index 4249e0e..8c794c1 100644
--- a/packages/devtools_app/lib/src/framework/scaffold.dart
+++ b/packages/devtools_app/lib/src/framework/scaffold.dart
@@ -41,7 +41,7 @@
this.page,
List<Widget>? actions,
this.embed = false,
- }) : actions = actions ?? defaultActions(isEmbedded: embed),
+ }) : actions = actions ?? defaultActions(),
super(key: key);
DevToolsScaffold.withChild({
@@ -56,16 +56,11 @@
embed: embed,
);
- static List<Widget> defaultActions({
- required bool isEmbedded,
- Color? color,
- }) =>
- [
+ static List<Widget> defaultActions({Color? color}) => [
OpenSettingsAction(color: color),
if (FeatureFlags.devToolsExtensions)
ExtensionSettingsAction(color: color),
ReportFeedbackButton(color: color),
- if (!isEmbedded) ImportToolbarAction(color: color),
OpenAboutAction(color: color),
];
diff --git a/packages/devtools_app/lib/src/framework/settings_dialog.dart b/packages/devtools_app/lib/src/framework/settings_dialog.dart
index 0e850ef..65ef41b 100644
--- a/packages/devtools_app/lib/src/framework/settings_dialog.dart
+++ b/packages/devtools_app/lib/src/framework/settings_dialog.dart
@@ -12,9 +12,9 @@
import '../shared/analytics/constants.dart' as gac;
import '../shared/common_widgets.dart';
import '../shared/config_specific/copy_to_clipboard/copy_to_clipboard.dart';
-import '../shared/config_specific/server/server.dart';
import '../shared/globals.dart';
import '../shared/log_storage.dart';
+import '../shared/server/server.dart';
class OpenSettingsAction extends ScaffoldAction {
OpenSettingsAction({super.key, Color? color})
diff --git a/packages/devtools_app/lib/src/framework/status_line.dart b/packages/devtools_app/lib/src/framework/status_line.dart
index 0e42a3d..5e31f37 100644
--- a/packages/devtools_app/lib/src/framework/status_line.dart
+++ b/packages/devtools_app/lib/src/framework/status_line.dart
@@ -45,23 +45,27 @@
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
+ final color = isConnected ? theme.colorScheme.onPrimary : null;
final height = statusLineHeight + padding.top + padding.bottom;
return ValueListenableBuilder<bool>(
valueListenable: currentScreen.showIsolateSelector,
builder: (context, showIsolateSelector, _) {
- return Container(
- decoration: BoxDecoration(
- color: isConnected ? theme.colorScheme.primary : null,
- border: Border(
- top: Divider.createBorderSide(context, width: 1.0),
+ return DefaultTextStyle.merge(
+ style: TextStyle(color: color),
+ child: Container(
+ decoration: BoxDecoration(
+ color: isConnected ? theme.colorScheme.primary : null,
+ border: Border(
+ top: Divider.createBorderSide(context, width: 1.0),
+ ),
),
- ),
- padding: EdgeInsets.only(left: padding.left, right: padding.right),
- height: height,
- alignment: Alignment.centerLeft,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: _getStatusItems(context, showIsolateSelector),
+ padding: EdgeInsets.only(left: padding.left, right: padding.right),
+ height: height,
+ alignment: Alignment.centerLeft,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: _getStatusItems(context, showIsolateSelector),
+ ),
),
);
},
@@ -109,10 +113,7 @@
BulletSpacer(color: color),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
- children: DevToolsScaffold.defaultActions(
- color: color,
- isEmbedded: isEmbedded,
- ),
+ children: DevToolsScaffold.defaultActions(color: color),
),
],
];
diff --git a/packages/devtools_app/lib/src/screens/app_size/app_size_controller.dart b/packages/devtools_app/lib/src/screens/app_size/app_size_controller.dart
index 819de70..f619282 100644
--- a/packages/devtools_app/lib/src/screens/app_size/app_size_controller.dart
+++ b/packages/devtools_app/lib/src/screens/app_size/app_size_controller.dart
@@ -623,15 +623,18 @@
}
}
- /// Recursively generates a diff tree from [treeJson] that contains the difference
- /// between an old size analysis file and a new size analysis file.
+ /// Recursively generates a diff tree from [treeJson] that contains the
+ /// difference between an old size analysis file and a new size analysis file.
///
- /// Each node in the resulting tree represents a change in size for the given node.
+ /// Each node in the resulting tree represents a change in size for the given
+ /// node.
///
/// The tree can be filtered with different [DiffTreeType] values:
- /// * [DiffTreeType.increaseOnly]: returns a tree with nodes with positive [byteSize].
- /// * [DiffTreeType.decreaseOnly]: returns a tree with nodes with negative [byteSize].
- /// * [DiffTreeType.combined]: returns a tree with all nodes.
+ /// * [DiffTreeType.increaseOnly] - returns a tree with nodes with positive
+ /// [byteSize].
+ /// * [DiffTreeType.decreaseOnly] - returns a tree with nodes with negative
+ /// [byteSize].
+ /// * [DiffTreeType.combined] - returns a tree with all nodes.
TreemapNode? generateDiffTree(
Map<String, dynamic> treeJson,
DiffTreeType diffTreeType, {
@@ -647,7 +650,7 @@
);
} else {
// TODO(peterdjlee): Investigate why there are leaf nodes with size of null.
- final byteSize = treeJson['value'];
+ final byteSize = treeJson['value'] as int?;
if (byteSize == null) {
return null;
}
diff --git a/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart b/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart
index 2c3f52b..0665c9f 100644
--- a/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart
+++ b/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart
@@ -15,11 +15,11 @@
import '../../shared/charts/treemap.dart';
import '../../shared/common_widgets.dart';
import '../../shared/config_specific/drag_and_drop/drag_and_drop.dart';
-import '../../shared/config_specific/server/server.dart' as server;
import '../../shared/file_import.dart';
import '../../shared/globals.dart';
import '../../shared/primitives/utils.dart';
import '../../shared/screen.dart';
+import '../../shared/server/server.dart' as server;
import '../../shared/ui/tab.dart';
import '../../shared/utils.dart';
import 'app_size_controller.dart';
diff --git a/packages/devtools_app/lib/src/screens/debugger/codeview.dart b/packages/devtools_app/lib/src/screens/debugger/codeview.dart
index 8a917e8..36aa898 100644
--- a/packages/devtools_app/lib/src/screens/debugger/codeview.dart
+++ b/packages/devtools_app/lib/src/screens/debugger/codeview.dart
@@ -54,8 +54,6 @@
this.lineRange,
this.initialPosition,
this.onSelected,
- this.enableFileExplorer = true,
- this.enableSearch = true,
this.enableHistory = true,
}) : super(key: key);
@@ -78,8 +76,6 @@
// the script's source in its entirety, with lines outside of the range being
// rendered as if they have been greyed out.
final LineRange? lineRange;
- final bool enableFileExplorer;
- final bool enableSearch;
final bool enableHistory;
final void Function(ScriptRef scriptRef, int line)? onSelected;
@@ -1502,16 +1498,18 @@
if (packagePath != null) {
final isolateId = serviceConnection
.serviceManager.isolateManager.selectedIsolate.value!.id!;
- filePath = serviceConnection.resolvedUriManager.lookupFileUri(
+ filePath =
+ serviceConnection.serviceManager.resolvedUriManager.lookupFileUri(
isolateId,
packagePath,
);
if (filePath == null) {
- await serviceConnection.resolvedUriManager.fetchFileUris(
+ await serviceConnection.serviceManager.resolvedUriManager.fetchFileUris(
isolateId,
[packagePath],
);
- filePath = serviceConnection.resolvedUriManager.lookupFileUri(
+ filePath =
+ serviceConnection.serviceManager.resolvedUriManager.lookupFileUri(
isolateId,
packagePath,
);
diff --git a/packages/devtools_app/lib/src/screens/debugger/controls.dart b/packages/devtools_app/lib/src/screens/debugger/controls.dart
index fa699ae..a0f42bd 100644
--- a/packages/devtools_app/lib/src/screens/debugger/controls.dart
+++ b/packages/devtools_app/lib/src/screens/debugger/controls.dart
@@ -82,63 +82,51 @@
required bool resuming,
}) {
final isSystemIsolate = controller.isSystemIsolate;
- return RoundedOutlinedBorder(
- child: Row(
- children: [
- DebuggerButton(
- title: 'Pause',
- icon: Codicons.debugPause,
- autofocus: true,
- roundedLeftBorder: true,
- // Disable when paused or selected isolate is a system isolate.
- onPressed: (isPaused || isSystemIsolate)
- ? null
- : () => unawaited(controller.pause()),
- ),
- LeftBorder(
- child: DebuggerButton(
- title: 'Resume',
- icon: Codicons.debugContinue,
- roundedRightBorder: true,
- // Enable while paused + not resuming and selected isolate is not
- // a system isolate.
- onPressed: ((isPaused && !resuming) && !isSystemIsolate)
- ? () => unawaited(controller.resume())
- : null,
- ),
- ),
- ],
- ),
+ return RoundedButtonGroup(
+ items: [
+ ButtonGroupItemData(
+ tooltip: 'Pause',
+ icon: Codicons.debugPause,
+ autofocus: true,
+ // Disable when paused or selected isolate is a system isolate.
+ onPressed: (isPaused || isSystemIsolate)
+ ? null
+ : () => unawaited(controller.pause()),
+ ),
+ ButtonGroupItemData(
+ tooltip: 'Resume',
+ icon: Codicons.debugContinue,
+ // Enable while paused + not resuming and selected isolate is not
+ // a system isolate.
+ onPressed: ((isPaused && !resuming) && !isSystemIsolate)
+ ? () => unawaited(controller.resume())
+ : null,
+ ),
+ ],
);
}
Widget _stepButtons({required bool canStep}) {
- return RoundedOutlinedBorder(
- child: Row(
- children: [
- DebuggerButton(
- title: 'Step Over',
- icon: Codicons.debugStepOver,
- roundedLeftBorder: true,
- onPressed: canStep ? () => unawaited(controller.stepOver()) : null,
- ),
- LeftBorder(
- child: DebuggerButton(
- title: 'Step In',
- icon: Codicons.debugStepInto,
- onPressed: canStep ? () => unawaited(controller.stepIn()) : null,
- ),
- ),
- LeftBorder(
- child: DebuggerButton(
- title: 'Step Out',
- icon: Codicons.debugStepOut,
- roundedRightBorder: true,
- onPressed: canStep ? () => unawaited(controller.stepOut()) : null,
- ),
- ),
- ],
- ),
+ return RoundedButtonGroup(
+ items: [
+ ButtonGroupItemData(
+ label: 'Step Over',
+ icon: Codicons.debugStepOver,
+ onPressed: canStep ? () => unawaited(controller.stepOver()) : null,
+ ),
+ ButtonGroupItemData(
+ label: 'Step In',
+ icon: Codicons.debugStepInto,
+ onPressed: canStep ? () => unawaited(controller.stepIn()) : null,
+ ),
+ ButtonGroupItemData(
+ label: 'Step Out',
+ icon: Codicons.debugStepOut,
+ onPressed: canStep ? () => unawaited(controller.stepOut()) : null,
+ ),
+ ],
+ minScreenWidthForTextBeforeScaling:
+ DebuggingControls.minWidthBeforeScaling,
);
}
@@ -316,49 +304,3 @@
final String name;
final String description;
}
-
-@visibleForTesting
-class DebuggerButton extends StatelessWidget {
- const DebuggerButton({
- super.key,
- required this.title,
- required this.icon,
- required this.onPressed,
- this.autofocus = false,
- this.roundedLeftBorder = false,
- this.roundedRightBorder = false,
- });
-
- final String title;
- final IconData icon;
- final VoidCallback? onPressed;
- final bool autofocus;
- final bool roundedLeftBorder;
- final bool roundedRightBorder;
-
- @override
- Widget build(BuildContext context) {
- return DevToolsTooltip(
- message: title,
- child: OutlinedButton(
- autofocus: autofocus,
- style: OutlinedButton.styleFrom(
- side: BorderSide.none,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.horizontal(
- left: roundedLeftBorder ? defaultRadius : Radius.zero,
- right: roundedRightBorder ? defaultRadius : Radius.zero,
- ),
- ),
- ),
- onPressed: onPressed,
- child: MaterialIconLabel(
- label: title,
- iconData: icon,
- minScreenWidthForTextBeforeScaling:
- DebuggingControls.minWidthBeforeScaling,
- ),
- ),
- );
- }
-}
diff --git a/packages/devtools_app/lib/src/screens/debugger/debugger_model.dart b/packages/devtools_app/lib/src/screens/debugger/debugger_model.dart
index 9bcce88..fc8a61b 100644
--- a/packages/devtools_app/lib/src/screens/debugger/debugger_model.dart
+++ b/packages/devtools_app/lib/src/screens/debugger/debugger_model.dart
@@ -35,7 +35,7 @@
final SourcePosition? location;
@override
- bool operator ==(Object? other) {
+ bool operator ==(Object other) {
return other is ScriptLocation &&
other.scriptRef == scriptRef &&
other.location == location;
@@ -107,7 +107,7 @@
@override
int get hashCode => breakpoint.hashCode;
@override
- bool operator ==(Object? other) {
+ bool operator ==(Object other) {
return other is BreakpointAndSourcePosition &&
other.breakpoint == breakpoint;
}
diff --git a/packages/devtools_app/lib/src/screens/debugger/program_explorer_controller.dart b/packages/devtools_app/lib/src/screens/debugger/program_explorer_controller.dart
index 5bb3246..cdd8f12 100644
--- a/packages/devtools_app/lib/src/screens/debugger/program_explorer_controller.dart
+++ b/packages/devtools_app/lib/src/screens/debugger/program_explorer_controller.dart
@@ -119,7 +119,8 @@
ScriptRef? script,
List<VMServiceObjectNode> nodes,
) async {
- bool searchCondition(node) => node.script?.uri == script!.uri;
+ bool searchCondition(VMServiceObjectNode node) =>
+ node.script?.uri == script!.uri;
for (final node in nodes) {
final result = node.firstChildWithCondition(searchCondition);
if (result != null) {
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart
new file mode 100644
index 0000000..a04927d
--- /dev/null
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart
@@ -0,0 +1,511 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:math';
+
+import 'package:devtools_app_shared/ui.dart';
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+import '../../shared/common_widgets.dart';
+import '../../shared/primitives/utils.dart';
+import '../../shared/table/table.dart';
+import '../../shared/table/table_data.dart';
+import '../../shared/ui/colors.dart';
+import '../../shared/ui/tab.dart';
+import '../../shared/utils.dart';
+import 'deep_links_controller.dart';
+import 'deep_links_model.dart';
+import 'validation_details_view.dart';
+
+const _kNotificationCardSize = Size(475, 132);
+const _kSearchFieldFullWidth = 314.0;
+const _kSearchFieldSplitScreenWidth = 280.0;
+
+enum TableViewType {
+ domainView,
+ pathView,
+ singleUrlView,
+}
+
+/// A view that display all deep links for the app.
+class DeepLinkListView extends StatefulWidget {
+ const DeepLinkListView({super.key});
+
+ @override
+ State<DeepLinkListView> createState() => _DeepLinkListViewState();
+}
+
+class _DeepLinkListViewState extends State<DeepLinkListView>
+ with ProvidedControllerMixin<DeepLinksController, DeepLinkListView> {
+ List<String> get androidVariants =>
+ controller.selectedProject.value!.androidVariants;
+
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
+ initController();
+ callWhenControllerReady((_) {
+ int releaseVariantIndex = controller
+ .selectedProject.value!.androidVariants
+ .indexWhere((variant) => variant.toLowerCase().contains('release'));
+ // If not found, default to 0.
+ releaseVariantIndex = max(releaseVariantIndex, 0);
+ controller.selectedVariantIndex.value = releaseVariantIndex;
+ unawaited(controller.validateLinks());
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return DefaultTabController(
+ length: TableViewType.values.length,
+ child: const RoundedOutlinedBorder(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ _DeepLinkListViewTopPanel(),
+ Expanded(child: _DeepLinkListViewMainPanel()),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+class _DeepLinkListViewMainPanel extends StatelessWidget {
+ const _DeepLinkListViewMainPanel();
+
+ @override
+ Widget build(BuildContext context) {
+ final controller = Provider.of<DeepLinksController>(context);
+ // TODO(hangyujin): Use MultiValueListenableBuilder.
+ return ValueListenableBuilder<DisplayOptions>(
+ valueListenable: controller.displayOptionsNotifier,
+ builder: (context, displayOptions, _) =>
+ ValueListenableBuilder<List<LinkData>?>(
+ valueListenable: controller.allLinkDatasNotifier,
+ builder: (context, linkDatas, _) {
+ if (linkDatas == null) {
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const CenteredCircularProgressIndicator(),
+ const SizedBox(height: densePadding),
+ Text(
+ 'Validating deep links...',
+ style: Theme.of(context).subtleTextStyle,
+ ),
+ ],
+ );
+ }
+ if (displayOptions.showSplitScreen) {
+ return Row(
+ children: [
+ Expanded(
+ child: _AllDeepLinkDataTable(controller: controller),
+ ),
+ VerticalDivider(
+ width: 1.0,
+ color: Theme.of(context).focusColor,
+ ),
+ Expanded(
+ child: ValueListenableBuilder<LinkData?>(
+ valueListenable: controller.selectedLink,
+ builder: (context, selectedLink, _) => TabBarView(
+ children: [
+ ValidationDetailView(
+ linkData: selectedLink!,
+ controller: controller,
+ viewType: TableViewType.domainView,
+ ),
+ ValidationDetailView(
+ linkData: selectedLink,
+ controller: controller,
+ viewType: TableViewType.pathView,
+ ),
+ ValidationDetailView(
+ linkData: selectedLink,
+ controller: controller,
+ viewType: TableViewType.singleUrlView,
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ );
+ }
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ _NotificationCardSection(
+ domainErrorCount: displayOptions.domainErrorCount,
+ pathErrorCount: displayOptions.pathErrorCount,
+ controller: controller,
+ ),
+ Expanded(
+ child: _AllDeepLinkDataTable(controller: controller),
+ ),
+ ],
+ );
+ },
+ ),
+ );
+ }
+}
+
+class _DataTable extends StatelessWidget {
+ const _DataTable({
+ required this.linkDatas,
+ required this.viewType,
+ required this.controller,
+ });
+ final List<LinkData> linkDatas;
+ final TableViewType viewType;
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ final domain = DomainColumn(controller);
+ final path = PathColumn(controller);
+
+ return Padding(
+ padding: const EdgeInsets.only(top: denseSpacing),
+ child: FlatTable<LinkData>(
+ keyFactory: (node) => ValueKey(node.toString),
+ data: linkDatas,
+ dataKey: 'deep-links',
+ autoScrollContent: true,
+ headerColor: Theme.of(context).colorScheme.deeplinkTableHeaderColor,
+ fillWithEmptyRows: true,
+ columns: <ColumnData<LinkData>>[
+ ...(() {
+ switch (viewType) {
+ case TableViewType.domainView:
+ return [domain, NumberOfAssociatedPathColumn()];
+ case TableViewType.pathView:
+ return [path, NumberOfAssociatedDomainColumn()];
+ case TableViewType.singleUrlView:
+ return <ColumnData<LinkData>>[domain, path];
+ }
+ })(),
+ SchemeColumn(controller),
+ OSColumn(controller),
+ if (!controller.displayOptionsNotifier.value.showSplitScreen) ...[
+ StatusColumn(controller, viewType),
+ NavigationColumn(),
+ ],
+ ],
+ selectionNotifier: controller.selectedLink,
+ defaultSortColumn: (viewType == TableViewType.pathView ? path : domain)
+ as ColumnData<LinkData>,
+ defaultSortDirection: SortDirection.ascending,
+ onItemSelected: (linkdata) {
+ controller.selectLink(linkdata!);
+ controller.updateDisplayOptions(showSplitScreen: true);
+ },
+ enableHoverHandling: true,
+ ),
+ );
+ }
+}
+
+class _DeepLinkListViewTopPanel extends StatelessWidget {
+ const _DeepLinkListViewTopPanel();
+
+ @override
+ Widget build(BuildContext context) {
+ final controller = Provider.of<DeepLinksController>(context);
+ return AreaPaneHeader(
+ title: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ 'Validate and fix',
+ style: Theme.of(context).textTheme.bodyLarge,
+ ),
+ ValueListenableBuilder(
+ valueListenable: controller.selectedVariantIndex,
+ builder: (_, value, __) {
+ return _AndroidVariantDropdown(
+ androidVariants:
+ controller.selectedProject.value!.androidVariants,
+ index: value,
+ onVariantIndexSelected: (index) {
+ controller.selectedVariantIndex.value = index;
+ },
+ );
+ },
+ ),
+ ],
+ ),
+ );
+ }
+}
+
+class _AndroidVariantDropdown extends StatelessWidget {
+ const _AndroidVariantDropdown({
+ required this.androidVariants,
+ required this.index,
+ required this.onVariantIndexSelected,
+ });
+
+ final List<String> androidVariants;
+ final int index;
+ final ValueChanged<int> onVariantIndexSelected;
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ children: [
+ const Text('Android Variant:'),
+ RoundedDropDownButton<int>(
+ value: index,
+ items: [
+ for (int i = 0; i < androidVariants.length; i++)
+ DropdownMenuItem<int>(
+ value: i,
+ child: Text(androidVariants[i]),
+ ),
+ ],
+ onChanged: (int? index) {
+ onVariantIndexSelected(index!);
+ },
+ ),
+ ],
+ );
+ }
+}
+
+class _AllDeepLinkDataTable extends StatelessWidget {
+ const _AllDeepLinkDataTable({
+ required this.controller,
+ });
+
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ final textTheme = Theme.of(context).textTheme;
+ const gaPrefix = 'deepLinkTab';
+ return Column(
+ children: <Widget>[
+ OutlineDecoration(
+ showRight: false,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: defaultSpacing),
+ child: Text(
+ 'All deep links',
+ style: textTheme.bodyLarge,
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.all(denseSpacing),
+ child: SizedBox(
+ width: controller.displayOptions.showSplitScreen
+ ? _kSearchFieldSplitScreenWidth
+ : _kSearchFieldFullWidth,
+ child: DevToolsClearableTextField(
+ labelText: '',
+ hintText: 'Search a URL, domain or path',
+ prefixIcon: const Icon(Icons.search),
+ onChanged: (value) {
+ controller.searchContent = value;
+ },
+ controller: controller.textEditingController,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ TabBar(
+ tabs: [
+ DevToolsTab.create(
+ tabName: 'Domain view',
+ gaPrefix: gaPrefix,
+ ),
+ DevToolsTab.create(
+ tabName: 'Path view',
+ gaPrefix: gaPrefix,
+ ),
+ DevToolsTab.create(
+ tabName: 'Single URL view',
+ gaPrefix: gaPrefix,
+ ),
+ ],
+ tabAlignment: TabAlignment.start,
+ isScrollable: true,
+ ),
+ Expanded(
+ child: ValueListenableBuilder<List<LinkData>?>(
+ valueListenable: controller.displayLinkDatasNotifier,
+ builder: (context, linkDatas, _) => TabBarView(
+ children: [
+ _DataTable(
+ viewType: TableViewType.domainView,
+ linkDatas: controller.getLinkDatasByDomain,
+ controller: controller,
+ ),
+ _DataTable(
+ viewType: TableViewType.pathView,
+ linkDatas: controller.getLinkDatasByPath,
+ controller: controller,
+ ),
+ _DataTable(
+ viewType: TableViewType.singleUrlView,
+ linkDatas: linkDatas!,
+ controller: controller,
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ );
+ }
+}
+
+class _NotificationCardSection extends StatelessWidget {
+ const _NotificationCardSection({
+ required this.domainErrorCount,
+ required this.pathErrorCount,
+ required this.controller,
+ });
+
+ final int domainErrorCount;
+ final int pathErrorCount;
+
+ final DeepLinksController controller;
+ @override
+ Widget build(BuildContext context) {
+ if (domainErrorCount == 0 && domainErrorCount == 0) {
+ return const SizedBox.shrink();
+ }
+ return OutlineDecoration(
+ child: Padding(
+ padding: const EdgeInsets.all(defaultSpacing),
+ child: Row(
+ children: [
+ if (domainErrorCount > 0)
+ NotificationCard(
+ title: '$domainErrorCount domain not verified',
+ description:
+ 'This affects all deep links. Fix issues to make users go directly to your app.',
+ actionButton: TextButton(
+ onPressed: () {
+ // Switch to the domain view. Select the first link with domain error and show the split screen.
+ DefaultTabController.of(context).index = 0;
+ controller.selectLink(
+ controller.getLinkDatasByDomain
+ .where((element) => element.domainErrors.isNotEmpty)
+ .first,
+ );
+ controller.updateDisplayOptions(showSplitScreen: true);
+ },
+ child: const Padding(
+ padding:
+ EdgeInsets.symmetric(horizontal: intermediateSpacing),
+ child: Text('Fix domain'),
+ ),
+ ),
+ ),
+ if (domainErrorCount > 0 && pathErrorCount > 0)
+ const SizedBox(width: defaultSpacing),
+ if (pathErrorCount > 0)
+ NotificationCard(
+ title: '$pathErrorCount path not working',
+ description:
+ 'Fix these path to make sure users are directed to your app',
+ actionButton: TextButton(
+ onPressed: () {
+ // Switch to the path view. Select the first link with path error and show the split screen.
+ DefaultTabController.of(context).index = 1;
+ controller.selectLink(
+ controller.getLinkDatasByPath
+ .where((element) => element.pathError)
+ .first,
+ );
+ controller.updateDisplayOptions(showSplitScreen: true);
+ },
+ child: const Padding(
+ padding:
+ EdgeInsets.symmetric(horizontal: intermediateSpacing),
+ child: Text('Fix path'),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+@visibleForTesting
+class NotificationCard extends StatelessWidget {
+ const NotificationCard({
+ super.key,
+ required this.title,
+ required this.description,
+ required this.actionButton,
+ });
+
+ final String title;
+ final String description;
+ final Widget actionButton;
+
+ @override
+ Widget build(BuildContext context) {
+ final colorScheme = Theme.of(context).colorScheme;
+ final textTheme = Theme.of(context).textTheme;
+ return SizedBox.fromSize(
+ size: _kNotificationCardSize,
+ child: Card(
+ color: colorScheme.surface,
+ child: Padding(
+ padding: const EdgeInsets.fromLTRB(
+ defaultSpacing,
+ defaultSpacing,
+ densePadding,
+ denseSpacing,
+ ),
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Icon(Icons.error, color: colorScheme.error),
+ const SizedBox(width: denseSpacing),
+ Flexible(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ title,
+ style: textTheme.bodyMedium!
+ .copyWith(color: colorScheme.onSurface),
+ ),
+ Text(
+ description,
+ style: Theme.of(context).subtleTextStyle,
+ ),
+ Expanded(
+ child: Align(
+ alignment: Alignment.bottomRight,
+ child: actionButton,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
index 2cc26a4..5e73d4b 100644
--- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
@@ -2,4 +2,367 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-class DeepLinksController {}
+import 'dart:async';
+
+import 'package:devtools_app_shared/utils.dart';
+import 'package:devtools_shared/devtools_deeplink.dart';
+import 'package:flutter/widgets.dart';
+
+import '../../shared/analytics/analytics.dart' as ga;
+import '../../shared/analytics/constants.dart' as gac;
+import '../../shared/server/server.dart' as server;
+import 'deep_links_model.dart';
+import 'deep_links_services.dart';
+
+typedef _DomainAndPath = ({String domain, String path});
+
+enum FilterOption {
+ http('http://, https://'),
+ custom('Custom scheme'),
+ android('Android'),
+ ios('iOS'),
+ noIssue('No issues found'),
+ failedDomainCheck('Failed domain checks '),
+ failedPathCheck('Failed path checks');
+
+ const FilterOption(this.description);
+ final String description;
+}
+
+enum SortingOption {
+ aToZ('A-Z'),
+ zToA('Z-A'),
+ errorOnTop('Error on top');
+
+ const SortingOption(this.description);
+ final String description;
+}
+
+class DisplayOptions {
+ DisplayOptions({
+ this.domainErrorCount = 0,
+ this.pathErrorCount = 0,
+ this.showSplitScreen = false,
+ this.filters = const {
+ FilterOption.http,
+ FilterOption.custom,
+ FilterOption.android,
+ FilterOption.ios,
+ FilterOption.noIssue,
+ FilterOption.failedDomainCheck,
+ FilterOption.failedPathCheck,
+ },
+ this.searchContent = '',
+ // Default to show result with error first.
+ this.domainSortingOption = SortingOption.errorOnTop,
+ this.pathSortingOption = SortingOption.errorOnTop,
+ });
+
+ int domainErrorCount = 0;
+ int pathErrorCount = 0;
+ bool showSplitScreen = false;
+ String searchContent;
+ SortingOption? domainSortingOption;
+ SortingOption? pathSortingOption;
+
+ final Set<FilterOption> filters;
+
+ DisplayOptions updateFilter(FilterOption option, bool value) {
+ final newFilter = Set<FilterOption>.of(filters);
+
+ if (value) {
+ newFilter.add(option);
+ } else {
+ newFilter.remove(option);
+ }
+
+ return DisplayOptions(
+ domainErrorCount: domainErrorCount,
+ pathErrorCount: pathErrorCount,
+ showSplitScreen: showSplitScreen,
+ filters: newFilter,
+ searchContent: searchContent,
+ domainSortingOption: domainSortingOption,
+ pathSortingOption: pathSortingOption,
+ );
+ }
+
+ DisplayOptions copyWith({
+ int? domainErrorCount,
+ int? pathErrorCount,
+ bool? showSplitScreen,
+ String? searchContent,
+ SortingOption? domainSortingOption,
+ SortingOption? pathSortingOption,
+ }) {
+ return DisplayOptions(
+ domainErrorCount: domainErrorCount ?? this.domainErrorCount,
+ pathErrorCount: pathErrorCount ?? this.pathErrorCount,
+ showSplitScreen: showSplitScreen ?? this.showSplitScreen,
+ filters: filters,
+ searchContent: searchContent ?? '',
+ domainSortingOption: domainSortingOption ?? this.domainSortingOption,
+ pathSortingOption: pathSortingOption ?? this.pathSortingOption,
+ );
+ }
+}
+
+class DeepLinksController extends DisposableController {
+ DeepLinksController() {
+ selectedVariantIndex.addListener(_handleSelectedVariantIndexChanged);
+ }
+
+ @override
+ void dispose() {
+ super.dispose();
+ selectedVariantIndex.removeListener(_handleSelectedVariantIndexChanged);
+ }
+
+ DisplayOptions get displayOptions => displayOptionsNotifier.value;
+
+ List<LinkData> get getLinkDatasByPath {
+ final linkDatasByPath = <String, LinkData>{};
+ for (var linkData in allLinkDatasNotifier.value!) {
+ final previousRecord = linkDatasByPath[linkData.path];
+ linkDatasByPath[linkData.path] = LinkData(
+ domain: linkData.domain,
+ path: linkData.path,
+ os: [
+ if (previousRecord?.os.contains(PlatformOS.android) ??
+ false || linkData.os.contains(PlatformOS.android))
+ PlatformOS.android,
+ if (previousRecord?.os.contains(PlatformOS.ios) ??
+ false || linkData.os.contains(PlatformOS.ios))
+ PlatformOS.ios,
+ ],
+ associatedDomains: [
+ ...previousRecord?.associatedDomains ?? [],
+ linkData.domain,
+ ],
+ pathError: linkData.pathError,
+ );
+ }
+
+ return getFilterredLinks(linkDatasByPath.values.toList());
+ }
+
+ List<LinkData> get getLinkDatasByDomain {
+ final linkDatasByDomain = <String, LinkData>{};
+
+ for (var linkData in allLinkDatasNotifier.value!) {
+ final previousRecord = linkDatasByDomain[linkData.domain];
+ linkDatasByDomain[linkData.domain] = LinkData(
+ domain: linkData.domain,
+ path: linkData.path,
+ os: linkData.os,
+ associatedPath: [
+ ...previousRecord?.associatedPath ?? [],
+ linkData.path,
+ ],
+ domainErrors: linkData.domainErrors,
+ );
+ }
+ return getFilterredLinks(linkDatasByDomain.values.toList());
+ }
+
+ final Map<int, AppLinkSettings> _androidAppLinks = <int, AppLinkSettings>{};
+
+ late final selectedVariantIndex = ValueNotifier<int>(0);
+ void _handleSelectedVariantIndexChanged() {
+ unawaited(_loadAndroidAppLinks());
+ }
+
+ Future<void> _loadAndroidAppLinks() async {
+ if (!_androidAppLinks.containsKey(selectedVariantIndex.value)) {
+ final variant =
+ selectedProject.value!.androidVariants[selectedVariantIndex.value];
+ await ga.timeAsync(
+ gac.deeplink,
+ gac.AnalyzeFlutterProject.loadAppLinks.name,
+ asyncOperation: () async {
+ final result = await server.requestAndroidAppLinkSettings(
+ selectedProject.value!.path,
+ buildVariant: variant,
+ );
+ _androidAppLinks[selectedVariantIndex.value] = result;
+ },
+ );
+ }
+ await validateLinks();
+ }
+
+ List<LinkData> get _allLinkDatas {
+ final appLinks = _androidAppLinks[selectedVariantIndex.value]?.deeplinks;
+ if (appLinks == null) {
+ return const <LinkData>[];
+ }
+ final domainPathToScheme = <_DomainAndPath, Set<String>>{};
+ for (final appLink in appLinks) {
+ final schemes = domainPathToScheme.putIfAbsent(
+ (domain: appLink.host, path: appLink.path),
+ () => <String>{},
+ );
+ schemes.add(appLink.scheme);
+ }
+ return domainPathToScheme.entries
+ .map(
+ (entry) => LinkData(
+ domain: entry.key.domain,
+ path: entry.key.path,
+ os: [PlatformOS.android],
+ scheme: entry.value.toList(),
+ ),
+ )
+ .toList();
+ }
+
+ final selectedProject = ValueNotifier<FlutterProject?>(null);
+ final selectedLink = ValueNotifier<LinkData?>(null);
+
+ final allLinkDatasNotifier = ValueNotifier<List<LinkData>?>(null);
+ final displayLinkDatasNotifier = ValueNotifier<List<LinkData>?>(null);
+ final generatedAssetLinksForSelectedLink = ValueNotifier<String?>(null);
+
+ final displayOptionsNotifier =
+ ValueNotifier<DisplayOptions>(DisplayOptions());
+
+ /// The [TextEditingController] for the search text field.
+ final textEditingController = TextEditingController();
+ final deepLinksServices = DeepLinksServices();
+
+ Future<void> _generateAssetLinks() async {
+ final applicationId =
+ _androidAppLinks[selectedVariantIndex.value]?.applicationId ?? '';
+
+ generatedAssetLinksForSelectedLink.value =
+ await deepLinksServices.generateAssetLinks(
+ domain: selectedLink.value!.domain,
+ applicationId: applicationId,
+ );
+ }
+
+ Future<List<LinkData>> _validateAndroidDomain() async {
+ final List<LinkData> linkdatas = _allLinkDatas;
+ final domains = linkdatas
+ .where((linkdata) => linkdata.os.contains(PlatformOS.android))
+ .map((linkdata) => linkdata.domain)
+ .toSet()
+ .toList();
+
+ final applicationId =
+ _androidAppLinks[selectedVariantIndex.value]?.applicationId ?? '';
+
+ final domainErrors = await deepLinksServices.validateAndroidDomain(
+ domains: domains,
+ applicationId: applicationId,
+ );
+
+ return linkdatas.map((linkdata) {
+ if (domainErrors[linkdata.domain]?.isNotEmpty ?? false) {
+ return LinkData(
+ domain: linkdata.domain,
+ domainErrors: domainErrors[linkdata.domain]!,
+ path: linkdata.path,
+ pathError: linkdata.pathError,
+ os: linkdata.os,
+ scheme: linkdata.scheme,
+ associatedDomains: linkdata.associatedDomains,
+ associatedPath: linkdata.associatedPath,
+ );
+ }
+ return linkdata;
+ }).toList();
+ }
+
+ Future<void> validateLinks() async {
+ allLinkDatasNotifier.value = await _validateAndroidDomain();
+ displayLinkDatasNotifier.value =
+ getFilterredLinks(allLinkDatasNotifier.value!);
+
+ displayOptionsNotifier.value = displayOptionsNotifier.value.copyWith(
+ domainErrorCount: getLinkDatasByDomain
+ .where((element) => element.domainErrors.isNotEmpty)
+ .length,
+ pathErrorCount:
+ getLinkDatasByPath.where((element) => element.pathError).length,
+ );
+ }
+
+ void selectLink(LinkData linkdata) async {
+ selectedLink.value = linkdata;
+ if (linkdata.domainErrors.isNotEmpty) {
+ await _generateAssetLinks();
+ }
+ }
+
+ set searchContent(String content) {
+ displayOptionsNotifier.value =
+ displayOptionsNotifier.value.copyWith(searchContent: content);
+ displayLinkDatasNotifier.value =
+ getFilterredLinks(allLinkDatasNotifier.value!);
+ }
+
+ void updateDisplayOptions({
+ int? domainErrorCount,
+ int? pathErrorCount,
+ bool? showSplitScreen,
+ SortingOption? domainSortingOption,
+ SortingOption? pathSortingOption,
+ FilterOption? addedFilter,
+ FilterOption? removedFilter,
+ }) {
+ displayOptionsNotifier.value = displayOptionsNotifier.value.copyWith(
+ domainErrorCount: domainErrorCount,
+ pathErrorCount: pathErrorCount,
+ showSplitScreen: showSplitScreen,
+ domainSortingOption: domainSortingOption,
+ pathSortingOption: pathSortingOption,
+ );
+ if (addedFilter != null) {
+ displayOptionsNotifier.value =
+ displayOptionsNotifier.value.updateFilter(addedFilter, true);
+ }
+ if (removedFilter != null) {
+ displayOptionsNotifier.value =
+ displayOptionsNotifier.value.updateFilter(removedFilter, false);
+ }
+
+ displayLinkDatasNotifier.value =
+ getFilterredLinks(allLinkDatasNotifier.value!);
+ }
+
+ @visibleForTesting
+ List<LinkData> getFilterredLinks(List<LinkData> linkDatas) {
+ final String searchContent = displayOptions.searchContent;
+ linkDatas = linkDatas.where((linkData) {
+ if (searchContent.isNotEmpty &&
+ !linkData.matchesSearchToken(
+ RegExp(searchContent, caseSensitive: false),
+ )) {
+ return false;
+ }
+
+ if (!((linkData.os.contains(PlatformOS.android) &&
+ displayOptions.filters.contains(FilterOption.android)) ||
+ (linkData.os.contains(PlatformOS.ios) &&
+ displayOptions.filters.contains(FilterOption.ios)))) {
+ return false;
+ }
+
+ if (!((linkData.domainErrors.isNotEmpty &&
+ displayOptions.filters
+ .contains(FilterOption.failedDomainCheck)) ||
+ (linkData.pathError &&
+ displayOptions.filters.contains(FilterOption.failedPathCheck)) ||
+ (!linkData.domainErrors.isNotEmpty &&
+ !linkData.pathError &&
+ displayOptions.filters.contains(FilterOption.noIssue)))) {
+ return false;
+ }
+
+ return true;
+ }).toList();
+
+ return linkDatas;
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart
new file mode 100644
index 0000000..bffca5c
--- /dev/null
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart
@@ -0,0 +1,566 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app_shared/ui.dart';
+import 'package:flutter/material.dart';
+
+import '../../shared/primitives/utils.dart';
+import '../../shared/table/table.dart';
+import '../../shared/table/table_data.dart';
+import '../../shared/ui/colors.dart';
+import '../../shared/ui/search.dart';
+import 'deep_link_list_view.dart';
+import 'deep_links_controller.dart';
+
+const kDeeplinkTableCellDefaultWidth = 200.0;
+const kToolTipWidth = 344.0;
+
+enum PlatformOS {
+ android('Android'),
+ ios('iOS');
+
+ const PlatformOS(this.description);
+ final String description;
+}
+
+// TODO(hangyujin): Handle more domain error cases.
+enum DomainError {
+ existence('Domain doesn\'t exist'),
+ fingerprints('Fingerprints unavailable');
+
+ const DomainError(this.description);
+ final String description;
+}
+
+/// Contains all data relevant to a deep link.
+class LinkData with SearchableDataMixin {
+ LinkData({
+ required this.domain,
+ required this.path,
+ required this.os,
+ this.scheme = const <String>['http://', 'https://'],
+ this.domainErrors = const <DomainError>[],
+ this.pathError = false,
+ this.associatedPath = const <String>[],
+ this.associatedDomains = const <String>[],
+ });
+
+ final String path;
+ final String domain;
+ final List<PlatformOS> os;
+ final List<String> scheme;
+ final List<DomainError> domainErrors;
+ final bool pathError;
+
+ final List<String> associatedPath;
+ final List<String> associatedDomains;
+
+ @override
+ bool matchesSearchToken(RegExp regExpSearch) {
+ return domain.caseInsensitiveContains(regExpSearch) ||
+ path.caseInsensitiveContains(regExpSearch);
+ }
+
+ @override
+ String toString() => 'LinkData($domain $path)';
+}
+
+class _ErrorAwareText extends StatelessWidget {
+ const _ErrorAwareText({
+ required this.text,
+ required this.isError,
+ required this.controller,
+ required this.link,
+ });
+ final String text;
+ final bool isError;
+ final DeepLinksController controller;
+ final LinkData link;
+
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ children: [
+ if (isError)
+ DevToolsTooltip(
+ padding: const EdgeInsets.only(
+ top: defaultSpacing,
+ left: defaultSpacing,
+ right: defaultSpacing,
+ ),
+ preferBelow: true,
+ richMessage: WidgetSpan(
+ child: SizedBox(
+ width: kToolTipWidth,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ Text(
+ 'This m.shopping.com domain has ${link.domainErrors.length} issue to fix. '
+ 'Fixing this domain will fix ${link.associatedPath.length} associated deep links.',
+ style: TextStyle(
+ color: Theme.of(context).colorScheme.tooltipTextColor,
+ fontSize: defaultFontSize,
+ ),
+ ),
+ TextButton(
+ onPressed: () {
+ controller.updateDisplayOptions(showSplitScreen: true);
+ controller.selectLink(link);
+ },
+ child: Text(
+ 'Fix this domain',
+ style: TextStyle(
+ color: Theme.of(context).colorScheme.inversePrimary,
+ fontSize: defaultFontSize,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ child: Padding(
+ padding: const EdgeInsets.only(right: denseSpacing),
+ child: Icon(
+ Icons.error,
+ color: Theme.of(context).colorScheme.error,
+ size: defaultIconSize,
+ ),
+ ),
+ ),
+ const SizedBox(width: denseSpacing),
+ Flexible(
+ child: Text(
+ text,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ],
+ );
+ }
+}
+
+class DomainColumn extends ColumnData<LinkData>
+ implements ColumnRenderer<LinkData>, ColumnHeaderRenderer<LinkData> {
+ DomainColumn(this.controller) : super.wide('Domain');
+
+ DeepLinksController controller;
+
+ @override
+ Widget? buildHeader(
+ BuildContext context,
+ Widget Function() defaultHeaderRenderer,
+ ) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ const Text('Domain'),
+ PopupMenuButton<SortingOption>(
+ itemBuilder: (BuildContext context) =>
+ _buildPopupMenuSortingEntries(controller, isPath: false),
+ child: Icon(
+ Icons.arrow_drop_down,
+ size: actionsIconSize,
+ ),
+ ),
+ ],
+ );
+ }
+
+ @override
+ String getValue(LinkData dataObject) => dataObject.domain;
+
+ @override
+ Widget build(
+ BuildContext context,
+ LinkData dataObject, {
+ bool isRowSelected = false,
+ bool isRowHovered = false,
+ VoidCallback? onPressed,
+ }) {
+ return _ErrorAwareText(
+ isError: dataObject.domainErrors.isNotEmpty,
+ controller: controller,
+ text: dataObject.domain,
+ link: dataObject,
+ );
+ }
+
+ @override
+ int compare(LinkData a, LinkData b) => _compareLinkData(
+ a,
+ b,
+ sortingOption: controller.displayOptions.domainSortingOption,
+ compareDomain: true,
+ );
+}
+
+class PathColumn extends ColumnData<LinkData>
+ implements ColumnRenderer<LinkData>, ColumnHeaderRenderer<LinkData> {
+ PathColumn(this.controller) : super.wide('Path');
+
+ DeepLinksController controller;
+
+ @override
+ Widget? buildHeader(
+ BuildContext context,
+ Widget Function() defaultHeaderRenderer,
+ ) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ const Text('Path'),
+ PopupMenuButton<SortingOption>(
+ itemBuilder: (BuildContext context) =>
+ _buildPopupMenuSortingEntries(controller, isPath: true),
+ child: Icon(
+ Icons.arrow_drop_down,
+ size: actionsIconSize,
+ ),
+ ),
+ ],
+ );
+ }
+
+ @override
+ String getValue(LinkData dataObject) => dataObject.path;
+
+ @override
+ Widget build(
+ BuildContext context,
+ LinkData dataObject, {
+ bool isRowSelected = false,
+ bool isRowHovered = false,
+ VoidCallback? onPressed,
+ }) {
+ return _ErrorAwareText(
+ isError: dataObject.pathError,
+ controller: controller,
+ text: dataObject.path,
+ link: dataObject,
+ );
+ }
+
+ @override
+ int compare(LinkData a, LinkData b) => _compareLinkData(
+ a,
+ b,
+ sortingOption: controller.displayOptions.pathSortingOption,
+ compareDomain: false,
+ );
+}
+
+class NumberOfAssociatedPathColumn extends ColumnData<LinkData> {
+ NumberOfAssociatedPathColumn() : super.wide('Number of associated path');
+
+ @override
+ String getValue(LinkData dataObject) =>
+ dataObject.associatedPath.length.toString();
+}
+
+class NumberOfAssociatedDomainColumn extends ColumnData<LinkData> {
+ NumberOfAssociatedDomainColumn() : super.wide('Number of associated domain');
+
+ @override
+ String getValue(LinkData dataObject) =>
+ dataObject.associatedDomains.length.toString();
+}
+
+class SchemeColumn extends ColumnData<LinkData>
+ implements ColumnRenderer<LinkData>, ColumnHeaderRenderer<LinkData> {
+ SchemeColumn(this.controller) : super.wide('Scheme');
+
+ DeepLinksController controller;
+
+ @override
+ Widget? buildHeader(
+ BuildContext context,
+ Widget Function() defaultHeaderRenderer,
+ ) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ const Text('Scheme'),
+ PopupMenuButton<FilterOption>(
+ itemBuilder: (BuildContext context) {
+ return [
+ _buildPopupMenuFilterEntry(controller, FilterOption.http),
+ _buildPopupMenuFilterEntry(controller, FilterOption.custom),
+ ];
+ },
+ child: Icon(
+ Icons.arrow_drop_down,
+ size: actionsIconSize,
+ ),
+ ),
+ ],
+ );
+ }
+
+ @override
+ Widget build(
+ BuildContext context,
+ LinkData dataObject, {
+ bool isRowSelected = false,
+ bool isRowHovered = false,
+ VoidCallback? onPressed,
+ }) {
+ return Text(getValue(dataObject));
+ }
+
+ @override
+ String getValue(LinkData dataObject) => dataObject.scheme.join(', ');
+}
+
+class OSColumn extends ColumnData<LinkData>
+ implements ColumnRenderer<LinkData>, ColumnHeaderRenderer<LinkData> {
+ OSColumn(this.controller) : super.wide('OS');
+
+ DeepLinksController controller;
+
+ @override
+ Widget? buildHeader(
+ BuildContext context,
+ Widget Function() defaultHeaderRenderer,
+ ) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ const Text('OS'),
+ PopupMenuButton<FilterOption>(
+ itemBuilder: (BuildContext context) {
+ return [
+ _buildPopupMenuFilterEntry(controller, FilterOption.android),
+ _buildPopupMenuFilterEntry(controller, FilterOption.ios),
+ ];
+ },
+ child: Icon(
+ Icons.arrow_drop_down,
+ size: actionsIconSize,
+ ),
+ ),
+ ],
+ );
+ }
+
+ @override
+ Widget build(
+ BuildContext context,
+ LinkData dataObject, {
+ bool isRowSelected = false,
+ bool isRowHovered = false,
+ VoidCallback? onPressed,
+ }) {
+ return Text(getValue(dataObject));
+ }
+
+ @override
+ String getValue(LinkData dataObject) =>
+ dataObject.os.map((e) => e.description).toList().join(', ');
+}
+
+class StatusColumn extends ColumnData<LinkData>
+ implements ColumnRenderer<LinkData>, ColumnHeaderRenderer<LinkData> {
+ StatusColumn(this.controller, this.viewType) : super.wide('Status');
+
+ DeepLinksController controller;
+
+ TableViewType viewType;
+
+ @override
+ String getValue(LinkData dataObject) {
+ if (dataObject.domainErrors.isNotEmpty) {
+ return 'Failed domain checks';
+ } else if (dataObject.pathError) {
+ return 'Failed path checks';
+ } else {
+ return 'No issues found';
+ }
+ }
+
+ @override
+ Widget? buildHeader(
+ BuildContext context,
+ Widget Function() defaultHeaderRenderer,
+ ) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ const Text('Status'),
+ PopupMenuButton<FilterOption>(
+ itemBuilder: (BuildContext context) {
+ return [
+ if (viewType != TableViewType.domainView)
+ _buildPopupMenuFilterEntry(
+ controller,
+ FilterOption.failedPathCheck,
+ ),
+ if (viewType != TableViewType.pathView)
+ _buildPopupMenuFilterEntry(
+ controller,
+ FilterOption.failedDomainCheck,
+ ),
+ _buildPopupMenuFilterEntry(controller, FilterOption.noIssue),
+ ];
+ },
+ child: Icon(
+ Icons.arrow_drop_down,
+ size: actionsIconSize,
+ ),
+ ),
+ ],
+ );
+ }
+
+ @override
+ Widget build(
+ BuildContext context,
+ LinkData dataObject, {
+ bool isRowSelected = false,
+ bool isRowHovered = false,
+ VoidCallback? onPressed,
+ }) {
+ if (dataObject.domainErrors.isNotEmpty || dataObject.pathError) {
+ return Text(
+ getValue(dataObject),
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(color: Theme.of(context).colorScheme.error),
+ );
+ } else {
+ return Text(
+ 'No issues found',
+ style: TextStyle(color: Theme.of(context).colorScheme.green),
+ overflow: TextOverflow.ellipsis,
+ );
+ }
+ }
+}
+
+class NavigationColumn extends ColumnData<LinkData>
+ implements ColumnRenderer<LinkData> {
+ NavigationColumn()
+ : super(
+ '',
+ fixedWidthPx: scaleByFontFactor(40),
+ );
+
+ @override
+ String getValue(LinkData dataObject) => '';
+
+ @override
+ Widget build(
+ BuildContext context,
+ LinkData dataObject, {
+ bool isRowSelected = false,
+ bool isRowHovered = false,
+ VoidCallback? onPressed,
+ }) {
+ return isRowHovered
+ ? const Icon(Icons.arrow_forward)
+ : const SizedBox.shrink();
+ }
+}
+
+PopupMenuEntry<FilterOption> _buildPopupMenuFilterEntry(
+ DeepLinksController controller,
+ FilterOption filterOption,
+) {
+ return PopupMenuItem<FilterOption>(
+ value: filterOption,
+ child: Row(
+ children: [
+ ValueListenableBuilder<DisplayOptions>(
+ valueListenable: controller.displayOptionsNotifier,
+ builder: (context, option, _) => Checkbox(
+ value: option.filters.contains(filterOption),
+ onChanged: (bool? checked) => controller.updateDisplayOptions(
+ removedFilter: checked! ? null : filterOption,
+ addedFilter: checked ? filterOption : null,
+ ),
+ ),
+ ),
+ Text(filterOption.description),
+ ],
+ ),
+ );
+}
+
+List<PopupMenuEntry<SortingOption>> _buildPopupMenuSortingEntries(
+ DeepLinksController controller, {
+ required bool isPath,
+}) {
+ return [
+ _buildPopupMenuSortingEntry(
+ controller,
+ SortingOption.errorOnTop,
+ isPath: isPath,
+ ),
+ _buildPopupMenuSortingEntry(
+ controller,
+ SortingOption.aToZ,
+ isPath: isPath,
+ ),
+ _buildPopupMenuSortingEntry(
+ controller,
+ SortingOption.zToA,
+ isPath: isPath,
+ ),
+ ];
+}
+
+PopupMenuEntry<SortingOption> _buildPopupMenuSortingEntry(
+ DeepLinksController controller,
+ SortingOption sortingOption, {
+ required bool isPath,
+}) {
+ return PopupMenuItem<SortingOption>(
+ onTap: () {
+ controller.updateDisplayOptions(
+ pathSortingOption: isPath ? sortingOption : null,
+ domainSortingOption: isPath ? null : sortingOption,
+ );
+ },
+ value: sortingOption,
+ child: Text(sortingOption.description),
+ );
+}
+
+class FlutterProject {
+ FlutterProject({
+ required this.path,
+ required this.androidVariants,
+ });
+ final String path;
+ final List<String> androidVariants;
+}
+
+int _compareLinkData(
+ LinkData a,
+ LinkData b, {
+ SortingOption? sortingOption,
+ required bool compareDomain,
+}) {
+ if (sortingOption == null) return 0;
+
+ switch (sortingOption) {
+ case SortingOption.errorOnTop:
+ if (compareDomain) {
+ if (a.domainErrors.isNotEmpty) return -1;
+ if (b.domainErrors.isNotEmpty) return 1;
+ } else {
+ if (a.pathError) return -1;
+ if (b.pathError) return 1;
+ }
+ return 0;
+ case SortingOption.aToZ:
+ if (compareDomain) return a.domain.compareTo(b.domain);
+
+ return a.path.compareTo(b.path);
+ case SortingOption.zToA:
+ if (compareDomain) return b.domain.compareTo(a.domain);
+
+ return b.path.compareTo(a.path);
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart
index c1ad7b0..4e8fb23 100644
--- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart
@@ -4,7 +4,14 @@
import 'package:flutter/material.dart';
+import '../../shared/analytics/analytics.dart' as ga;
+import '../../shared/analytics/constants.dart' as gac;
import '../../shared/screen.dart';
+import '../../shared/utils.dart';
+import 'deep_link_list_view.dart';
+import 'deep_links_controller.dart';
+import 'deep_links_model.dart';
+import 'select_project_view.dart';
class DeepLinksScreen extends Screen {
DeepLinksScreen() : super.fromMetaData(ScreenMetaData.deepLinks);
@@ -17,8 +24,40 @@
@override
Widget build(BuildContext context) {
- return const Center(
- child: Text('TODO: build deep link validation tool'),
+ return const DeepLinkPage();
+ }
+}
+
+class DeepLinkPage extends StatefulWidget {
+ const DeepLinkPage({super.key});
+
+ @override
+ State<DeepLinkPage> createState() => _DeepLinkPageState();
+}
+
+class _DeepLinkPageState extends State<DeepLinkPage>
+ with ProvidedControllerMixin<DeepLinksController, DeepLinkPage> {
+ @override
+ void initState() {
+ super.initState();
+ ga.screen(gac.deeplink);
+ }
+
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
+ if (!initController()) return;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return ValueListenableBuilder(
+ valueListenable: controller.selectedProject,
+ builder: (_, FlutterProject? project, __) {
+ return project == null
+ ? const SelectProjectView()
+ : const DeepLinkListView();
+ },
);
}
}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
new file mode 100644
index 0000000..b388738
--- /dev/null
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
@@ -0,0 +1,102 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:http/http.dart' as http;
+
+import 'deep_links_model.dart';
+
+const String _apiKey = 'AIzaSyCf_2E9N2AUZR-YSnZTQ72YbCNhKIskIsw';
+const String _assetLinksGenerationURL =
+ 'https://deeplinkassistant-pa.googleapis.com/android/generation/v1/assetlinks:generate?key=$_apiKey';
+const String _androidDomainValidationURL =
+ 'https://deeplinkassistant-pa.googleapis.com/android/validation/v1/domains:batchValidate?key=$_apiKey';
+const postHeader = {'Content-Type': 'application/json'};
+const String _packageNameKey = 'package_name';
+const String _domainsKey = 'domains';
+const String _errorCodeKey = 'errorCode';
+const String _appLinkDomainsKey = 'app_link_domains';
+const String _validationResultKey = 'validationResult';
+const String _domainNameKey = 'domainName';
+const String _checkNameKey = 'checkName';
+const String _failedChecksKey = 'failedChecks';
+const String _generatedContentKey = 'generatedContent';
+const String _existenceCheckKey = 'EXISTENCE';
+const String _fingerPrintChecktKey = 'FINGERPRINT';
+
+class DeepLinksServices {
+ Future<Map<String, List<DomainError>>> validateAndroidDomain({
+ required List<String> domains,
+ required String applicationId,
+ }) async {
+ final response = await http.post(
+ Uri.parse(_androidDomainValidationURL),
+ headers: postHeader,
+ body: jsonEncode({
+ _packageNameKey: applicationId,
+ _appLinkDomainsKey: domains,
+ }),
+ );
+
+ final Map<String, dynamic> result =
+ json.decode(response.body) as Map<String, dynamic>;
+
+ final domainErrors = <String, List<DomainError>>{
+ for (var domain in domains) domain: <DomainError>[],
+ };
+
+ final validationResult = result[_validationResultKey] as List;
+ for (final Map<String, dynamic> domainResult in validationResult) {
+ final String domainName = domainResult[_domainNameKey];
+ final List? failedChecks = domainResult[_failedChecksKey];
+ if (failedChecks != null) {
+ for (final Map<String, dynamic> failedCheck in failedChecks) {
+ switch (failedCheck[_checkNameKey]) {
+ case _existenceCheckKey:
+ domainErrors[domainName]!.add(DomainError.existence);
+ case _fingerPrintChecktKey:
+ domainErrors[domainName]!.add(DomainError.fingerprints);
+ }
+ }
+ }
+ }
+ return domainErrors;
+ }
+
+ Future<String> generateAssetLinks({
+ required String applicationId,
+ required String domain,
+ }) async {
+ final response = await http.post(
+ Uri.parse(_assetLinksGenerationURL),
+ headers: postHeader,
+ body: jsonEncode(
+ {
+ _packageNameKey: applicationId,
+ _domainsKey: [domain],
+ // TODO(hangyujin): The fake fingerprints here is just for testing usage, should remove it later.
+ // TODO(hangyujin): Handle the error case when user doesn't have play console project set up.
+ 'supplemental_sha256_cert_fingerprints': [
+ '5A:33:EA:64:09:97:F2:F0:24:21:0F:B6:7A:A8:18:1C:18:A9:83:03:20:21:8F:9B:0B:98:BF:43:69:C2:AF:4A',
+ ],
+ },
+ ),
+ );
+ final Map<String, dynamic> result =
+ json.decode(response.body) as Map<String, dynamic>;
+
+ if (result[_errorCodeKey] != null) {
+ return 'Content generation failed.\n Reason: ${result[_errorCodeKey]}';
+ }
+ if (result[_domainsKey] != null) {
+ final String generatedContent = (((result[_domainsKey] as List).first)
+ as Map<String, dynamic>)[_generatedContentKey];
+
+ return generatedContent;
+ }
+ return '';
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/fake_data.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/fake_data.dart
new file mode 100644
index 0000000..325d181
--- /dev/null
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/fake_data.dart
@@ -0,0 +1,40 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'deep_links_model.dart';
+
+/// Fake data for demo usage. Will replece this file with real deep link data.
+const paths = <String>[
+ '/shoes/..*',
+ '/Clothes/..*',
+ '/Toys/..*',
+ '/Jewelry/..*',
+ '/Watches/..* ',
+ '/Glasses/..*',
+];
+
+final allLinkDatas = <LinkData>[
+ for (var path in paths)
+ LinkData(
+ os: [PlatformOS.android, PlatformOS.ios],
+ domain: 'm.shopping.com',
+ path: path,
+ domainErrors: [DomainError.existence],
+ pathError: path.contains('shoe'),
+ ),
+ for (var path in paths)
+ LinkData(
+ os: [PlatformOS.ios],
+ domain: 'm.french.shopping.com',
+ path: path,
+ pathError: path.contains('shoe'),
+ ),
+ for (var path in paths)
+ LinkData(
+ os: [PlatformOS.android],
+ domain: 'm.chinese.shopping.com',
+ path: path,
+ pathError: path.contains('shoe'),
+ ),
+];
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/select_project_view.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/select_project_view.dart
new file mode 100644
index 0000000..1b8d419
--- /dev/null
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/select_project_view.dart
@@ -0,0 +1,127 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app_shared/ui.dart';
+import 'package:flutter/material.dart';
+
+import '../../shared/analytics/analytics.dart' as ga;
+import '../../shared/analytics/constants.dart' as gac;
+import '../../shared/directory_picker.dart';
+import '../../shared/server/server.dart' as server;
+import '../../shared/utils.dart';
+import 'deep_links_controller.dart';
+import 'deep_links_model.dart';
+
+const _kLinearProgressIndicatorWidth = 280.0;
+
+/// A view for selecting a Flutter project.
+class SelectProjectView extends StatefulWidget {
+ const SelectProjectView({super.key});
+
+ @override
+ State<SelectProjectView> createState() => _SelectProjectViewState();
+}
+
+class _SelectProjectViewState extends State<SelectProjectView>
+ with ProvidedControllerMixin<DeepLinksController, SelectProjectView> {
+ bool _retrievingFlutterProject = false;
+
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
+ if (!initController()) return;
+ }
+
+ void _handleDirectoryPicked(String directory) async {
+ setState(() {
+ _retrievingFlutterProject = true;
+ });
+ ga.timeStart(gac.deeplink, gac.AnalyzeFlutterProject.loadVariants.name);
+ final List<String> androidVariants =
+ await server.requestAndroidBuildVariants(directory);
+ if (!mounted) {
+ ga.cancelTimingOperation(
+ gac.deeplink,
+ gac.AnalyzeFlutterProject.loadVariants.name,
+ );
+ return;
+ }
+ if (androidVariants.isEmpty) {
+ ga.cancelTimingOperation(
+ gac.deeplink,
+ gac.AnalyzeFlutterProject.loadVariants.name,
+ );
+ await showDialog(
+ context: context,
+ builder: (_) {
+ return const AlertDialog(
+ title: Text('You selected a non Flutter project'),
+ content: Text(
+ 'Seems you selected a non Flutter project. If it is not intended, please reselect a Flutter project.',
+ ),
+ actions: [
+ DialogCloseButton(),
+ ],
+ );
+ },
+ );
+ } else {
+ ga.timeEnd(gac.deeplink, gac.AnalyzeFlutterProject.loadVariants.name);
+ ga.select(
+ gac.deeplink,
+ gac.AnalyzeFlutterProject.flutterProjectSelected.name,
+ );
+ controller.selectedProject.value =
+ FlutterProject(path: directory, androidVariants: androidVariants);
+ }
+ setState(() {
+ _retrievingFlutterProject = false;
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ if (_retrievingFlutterProject) {
+ return Center(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'Project loading...',
+ style: theme.regularTextStyle,
+ ),
+ Container(
+ width: _kLinearProgressIndicatorWidth,
+ padding: const EdgeInsets.symmetric(vertical: densePadding),
+ child: const LinearProgressIndicator(),
+ ),
+ Text(
+ 'The first load will take longer than usual',
+ style: theme.subtleTextStyle,
+ ),
+ ],
+ ),
+ );
+ }
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Padding(
+ padding: const EdgeInsets.all(defaultSpacing),
+ child: Text(
+ 'Pick a local flutter project to check the status of all deep links.',
+ textAlign: TextAlign.center,
+ style: theme.textTheme.titleSmall,
+ ),
+ ),
+ DirectoryPicker(
+ onDirectoryPicked: _handleDirectoryPicked,
+ enabled: !_retrievingFlutterProject,
+ ),
+ ],
+ );
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/validation_details_view.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/validation_details_view.dart
new file mode 100644
index 0000000..0656718
--- /dev/null
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/validation_details_view.dart
@@ -0,0 +1,398 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app_shared/ui.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
+import '../../shared/common_widgets.dart';
+import '../../shared/table/table.dart';
+import '../../shared/ui/colors.dart';
+import 'deep_link_list_view.dart';
+import 'deep_links_controller.dart';
+import 'deep_links_model.dart';
+
+class ValidationDetailView extends StatelessWidget {
+ const ValidationDetailView({
+ super.key,
+ required this.linkData,
+ required this.viewType,
+ required this.controller,
+ });
+
+ final LinkData linkData;
+ final TableViewType viewType;
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ return ListView(
+ children: [
+ ValidationDetailHeader(viewType: viewType, controller: controller),
+ Padding(
+ padding: const EdgeInsets.symmetric(
+ horizontal: largeSpacing,
+ vertical: defaultSpacing,
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'This tool assistants helps you diagnose Universal Links, App Links,'
+ ' and Custom Schemes in your app. Web check are done for the web association'
+ ' file on your website. App checks are done for the intent filters in'
+ ' the manifest and info.plist file, routing issues, URL format, etc.',
+ style: Theme.of(context).subtleTextStyle,
+ ),
+ if (viewType == TableViewType.domainView ||
+ viewType == TableViewType.singleUrlView)
+ _DomainCheckTable(
+ controller: controller,
+ ),
+ if (viewType == TableViewType.pathView ||
+ viewType == TableViewType.singleUrlView)
+ _PathCheckTable(),
+ const SizedBox(height: largeSpacing),
+ Align(
+ alignment: Alignment.bottomRight,
+ child: FilledButton(
+ onPressed: () async => await controller.validateLinks(),
+ child: const Text('Recheck all'),
+ ),
+ ),
+ if (viewType == TableViewType.domainView)
+ _DomainAssociatedLinksPanel(controller: controller),
+ ],
+ ),
+ ),
+ ],
+ );
+ }
+}
+
+class ValidationDetailHeader extends StatelessWidget {
+ const ValidationDetailHeader({
+ super.key,
+ required this.viewType,
+ required this.controller,
+ });
+
+ final TableViewType viewType;
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ return OutlineDecoration(
+ showLeft: false,
+ child: Container(
+ height: actionWidgetSize,
+ padding: const EdgeInsets.symmetric(horizontal: defaultSpacing),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ viewType == TableViewType.domainView
+ ? 'Selected domain validation details'
+ : 'Selected Deep link validation details',
+ style: Theme.of(context).textTheme.titleSmall,
+ ),
+ IconButton(
+ onPressed: () =>
+ controller.updateDisplayOptions(showSplitScreen: false),
+ icon: const Icon(Icons.close),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+class _DomainCheckTable extends StatelessWidget {
+ const _DomainCheckTable({
+ required this.controller,
+ });
+
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ final linkData = controller.selectedLink.value!;
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ const SizedBox(height: intermediateSpacing),
+ Text('Domain check', style: Theme.of(context).textTheme.titleSmall),
+ const SizedBox(height: denseSpacing),
+ DataTable(
+ headingRowColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.deeplinkTableHeaderColor,
+ ),
+ dataRowColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.alternatingBackgroundColor2,
+ ),
+ columns: const [
+ DataColumn(label: Text('OS')),
+ DataColumn(label: Text('Issue type')),
+ DataColumn(label: Text('Status')),
+ ],
+ headingRowHeight: areaPaneHeaderHeight,
+ dataRowMinHeight: defaultRowHeight,
+ dataRowMaxHeight: defaultRowHeight,
+ rows: [
+ if (linkData.os.contains(PlatformOS.android))
+ DataRow(
+ cells: [
+ const DataCell(Text('Android')),
+ const DataCell(Text('Digital assets link file')),
+ DataCell(
+ linkData.domainErrors.isNotEmpty
+ ? Text(
+ 'Check failed',
+ style: TextStyle(
+ color: Theme.of(context).colorScheme.error,
+ ),
+ )
+ : Text(
+ 'No issues found',
+ style: TextStyle(
+ color: Theme.of(context).colorScheme.green,
+ ),
+ ),
+ ),
+ ],
+ ),
+ if (linkData.os.contains(PlatformOS.ios))
+ DataRow(
+ cells: [
+ const DataCell(Text('iOS')),
+ const DataCell(Text('Apple-App-Site-Association file')),
+ DataCell(
+ Text(
+ 'No issues found',
+ style:
+ TextStyle(color: Theme.of(context).colorScheme.green),
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ if (linkData.domainErrors.isNotEmpty)
+ _DomainFixPanel(controller: controller),
+ ],
+ );
+ }
+}
+
+class _DomainFixPanel extends StatelessWidget {
+ const _DomainFixPanel({
+ required this.controller,
+ });
+
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ final linkData = controller.selectedLink.value!;
+ return ColoredBox(
+ color: Theme.of(context)
+ .colorScheme
+ .alternatingBackgroundColor2
+ .withOpacity(0.5),
+ child: Padding(
+ padding: const EdgeInsets.all(intermediateSpacing),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ const Text('How to fix:'),
+ Text(
+ 'Add the new recommended Digital Asset Links JSON file to the failed website domain at the correct location.\n'
+ 'Update and publish recommend Digital Asset Links JSON file below to this location: ',
+ style: Theme.of(context).subtleTextStyle,
+ ),
+ Align(
+ alignment: Alignment.centerLeft,
+ child: Card(
+ shape: const RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(Radius.circular(4.0)),
+ ),
+ color: Theme.of(context).colorScheme.outline,
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: denseSpacing),
+ child: SelectionArea(
+ child: Text(
+ 'https://${linkData.domain}/.well-known/assetlinks.json',
+ style: Theme.of(context).regularTextStyle.copyWith(
+ color: Colors.black,
+ fontWeight: FontWeight.w500,
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ Card(
+ color: Theme.of(context).colorScheme.surface,
+ child: Padding(
+ padding: const EdgeInsets.all(denseSpacing),
+ child: ValueListenableBuilder(
+ valueListenable:
+ controller.generatedAssetLinksForSelectedLink,
+ builder: (_, String? generatedAssetLinks, __) =>
+ generatedAssetLinks != null
+ ? Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Flexible(
+ child: SelectionArea(
+ child: Text(generatedAssetLinks),
+ ),
+ ),
+ IconButton(
+ onPressed: () async =>
+ await Clipboard.setData(
+ ClipboardData(text: generatedAssetLinks),
+ ),
+ icon: const Icon(Icons.copy_rounded),
+ ),
+ ],
+ )
+ : const CenteredCircularProgressIndicator(),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+class _DomainAssociatedLinksPanel extends StatelessWidget {
+ const _DomainAssociatedLinksPanel({
+ required this.controller,
+ });
+
+ final DeepLinksController controller;
+
+ @override
+ Widget build(BuildContext context) {
+ final linkData = controller.selectedLink.value!;
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ Text(
+ 'Associated deep link URL',
+ style: Theme.of(context).textTheme.titleSmall,
+ ),
+ Card(
+ color: Theme.of(context).colorScheme.surface,
+ shape: const RoundedRectangleBorder(),
+ child: Padding(
+ padding: const EdgeInsets.all(denseSpacing),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: linkData.associatedPath
+ .map(
+ (path) => Padding(
+ padding: const EdgeInsets.symmetric(
+ vertical: denseRowSpacing,
+ ),
+ child: Row(
+ children: <Widget>[
+ if (linkData.domainErrors.isNotEmpty)
+ Icon(
+ Icons.error,
+ color: Theme.of(context).colorScheme.error,
+ size: defaultIconSize,
+ ),
+ const SizedBox(width: denseSpacing),
+ Text(path),
+ ],
+ ),
+ ),
+ )
+ .toList(),
+ ),
+ ),
+ ),
+ ],
+ );
+ }
+}
+
+class _PathCheckTable extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ final notAvailableCell = DataCell(
+ Text(
+ 'Not available',
+ style: TextStyle(
+ color: Theme.of(context).colorScheme.deeplinkUnavailableColor,
+ ),
+ ),
+ );
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ const SizedBox(height: intermediateSpacing),
+ Text(
+ 'Path check (coming soon)',
+ style: Theme.of(context).textTheme.titleSmall,
+ ),
+ Opacity(
+ opacity: 0.5,
+ child: DataTable(
+ headingRowHeight: areaPaneHeaderHeight,
+ dataRowMinHeight: defaultRowHeight,
+ dataRowMaxHeight: defaultRowHeight,
+ headingRowColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.deeplinkTableHeaderColor,
+ ),
+ dataRowColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.alternatingBackgroundColor2,
+ ),
+ columns: const [
+ DataColumn(label: Text('OS')),
+ DataColumn(label: Text('Issue type')),
+ DataColumn(label: Text('Status')),
+ ],
+ rows: [
+ DataRow(
+ cells: [
+ const DataCell(Text('Android')),
+ const DataCell(Text('Intent filter')),
+ notAvailableCell,
+ ],
+ ),
+ DataRow(
+ cells: [
+ const DataCell(Text('iOS')),
+ const DataCell(Text('Associated domain')),
+ notAvailableCell,
+ ],
+ ),
+ DataRow(
+ cells: [
+ const DataCell(Text('Android, iOS')),
+ const DataCell(Text('URL format')),
+ notAvailableCell,
+ ],
+ ),
+ DataRow(
+ cells: [
+ const DataCell(Text('Android, iOS')),
+ const DataCell(Text('Routing')),
+ notAvailableCell,
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ );
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart
index 248f51d..b6ac098 100644
--- a/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart
+++ b/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart
@@ -12,8 +12,7 @@
/// with some refactors to make the code more of a controller than a combination
/// of view and controller. View specific portions of InspectorPanel.java have
/// been moved to inspector.dart.
-
-library inspector_controller;
+library;
import 'dart:async';
@@ -59,10 +58,7 @@
_refreshRateLimiter = RateLimiter(refreshFramesPerSecond, refresh);
inspectorTree.config = InspectorTreeConfig(
- summaryTree: isSummaryTree,
- treeType: treeType,
onNodeAdded: _onNodeAdded,
- onHover: highlightShowNode,
onSelectionChange: selectionChanged,
onExpand: _onExpand,
onClientActiveChange: _onClientChange,
@@ -499,10 +495,6 @@
details?.setSubtreeRoot(subtreeRoot, subtreeSelection);
}
- InspectorInstanceRef? getSubtreeRootValue() {
- return subtreeRoot?.valueRef;
- }
-
void setSubtreeRoot(
RemoteDiagnosticsNode? node,
RemoteDiagnosticsNode? selection,
diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart
index 51cdd3d..24c2759 100644
--- a/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart
+++ b/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart
@@ -365,33 +365,28 @@
static FlexLayoutProperties _buildNode(RemoteDiagnosticsNode node) {
final Map<String, Object?> renderObjectJson = node.renderObject!.json;
- final properties = renderObjectJson['properties'] as List<Object?>;
+ final properties = (renderObjectJson['properties'] as List<Object?>)
+ .cast<Map<String, Object?>>();
- // ignore: prefer_for_elements_to_map_fromiterable, requires refactoring
- final data = Map<String, Object?>.fromIterable(
- properties,
- key: (property) => property['name'],
- value: (property) => property['description'],
- );
+ final data = {
+ for (final property in properties)
+ property['name']: property['description'] as String?,
+ };
return FlexLayoutProperties._fromNode(
node,
- direction: _directionUtils.enumEntry(data['direction'] as String?) ??
- Axis.vertical,
- mainAxisAlignment: _mainAxisAlignmentUtils
- .enumEntry(data['mainAxisAlignment'] as String?),
- mainAxisSize:
- _mainAxisSizeUtils.enumEntry(data['mainAxisSize'] as String?),
- crossAxisAlignment: _crossAxisAlignmentUtils
- .enumEntry(data['crossAxisAlignment'] as String?),
- textDirection:
- _textDirectionUtils.enumEntry(data['textDirection'] as String?) ??
- TextDirection.ltr,
- verticalDirection: _verticalDirectionUtils
- .enumEntry(data['verticalDirection'] as String?) ??
- VerticalDirection.down,
- textBaseline:
- _textBaselineUtils.enumEntry(data['textBaseline'] as String?),
+ direction: _directionUtils.enumEntry(data['direction']) ?? Axis.vertical,
+ mainAxisAlignment:
+ _mainAxisAlignmentUtils.enumEntry(data['mainAxisAlignment']),
+ mainAxisSize: _mainAxisSizeUtils.enumEntry(data['mainAxisSize']),
+ crossAxisAlignment:
+ _crossAxisAlignmentUtils.enumEntry(data['crossAxisAlignment']),
+ textDirection: _textDirectionUtils.enumEntry(data['textDirection']) ??
+ TextDirection.ltr,
+ verticalDirection:
+ _verticalDirectionUtils.enumEntry(data['verticalDirection']) ??
+ VerticalDirection.down,
+ textBaseline: _textBaselineUtils.enumEntry(data['textBaseline']),
);
}
diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart
index cf3ecfd..0e8f7dd 100644
--- a/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart
+++ b/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-library inspector_tree;
-
import 'dart:async';
import 'dart:collection';
import 'dart:math';
@@ -181,8 +179,6 @@
});
}
- RemoteDiagnosticsNode? subtreeRoot; // Optional.
-
InspectorTreeNode? get selection => _selection;
InspectorTreeNode? _selection;
@@ -964,8 +960,8 @@
/// Handle arrow keys for the InspectorTree. Ignore other key events so that
/// other widgets have a chance to respond to them.
- KeyEventResult _handleKeyEvent(FocusNode _, RawKeyEvent event) {
- if (event is! RawKeyDownEvent) return KeyEventResult.ignored;
+ KeyEventResult _handleKeyEvent(FocusNode _, KeyEvent event) {
+ if (!event.isKeyDownOrRepeat) return KeyEventResult.ignored;
final treeControllerLocal = treeController!;
@@ -1043,7 +1039,7 @@
child: GestureDetector(
onTap: _focusNode.requestFocus,
child: Focus(
- onKey: _handleKeyEvent,
+ onKeyEvent: _handleKeyEvent,
autofocus: widget.isSummaryTree,
focusNode: _focusNode,
child: OffsetScrollbar(
diff --git a/packages/devtools_app/lib/src/screens/logging/_kind_column.dart b/packages/devtools_app/lib/src/screens/logging/_kind_column.dart
index 631db87..7da0263 100644
--- a/packages/devtools_app/lib/src/screens/logging/_kind_column.dart
+++ b/packages/devtools_app/lib/src/screens/logging/_kind_column.dart
@@ -28,6 +28,7 @@
BuildContext context,
LogData item, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final String kind = item.kind;
diff --git a/packages/devtools_app/lib/src/screens/logging/_log_details.dart b/packages/devtools_app/lib/src/screens/logging/_log_details.dart
index 2cf11e9..9c818b9 100644
--- a/packages/devtools_app/lib/src/screens/logging/_log_details.dart
+++ b/packages/devtools_app/lib/src/screens/logging/_log_details.dart
@@ -85,12 +85,14 @@
title: _LogDetailsHeader(log: log),
child: Padding(
padding: const EdgeInsets.all(denseSpacing),
- child: SingleChildScrollView(
- controller: scrollController,
- child: SelectableText(
- log?.prettyPrinted() ?? '',
- textAlign: TextAlign.left,
- style: theme.fixedFontStyle,
+ child: Scrollbar(
+ child: SingleChildScrollView(
+ controller: scrollController,
+ child: SelectableText(
+ log?.prettyPrinted() ?? '',
+ textAlign: TextAlign.left,
+ style: theme.fixedFontStyle,
+ ),
),
),
),
diff --git a/packages/devtools_app/lib/src/screens/logging/_message_column.dart b/packages/devtools_app/lib/src/screens/logging/_message_column.dart
index 9680e14..4f4f1fa 100644
--- a/packages/devtools_app/lib/src/screens/logging/_message_column.dart
+++ b/packages/devtools_app/lib/src/screens/logging/_message_column.dart
@@ -49,6 +49,7 @@
BuildContext context,
LogData data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final textStyle = Theme.of(context).fixedFontStyle;
diff --git a/packages/devtools_app/lib/src/screens/logging/logging_controller.dart b/packages/devtools_app/lib/src/screens/logging/logging_controller.dart
index 63571ae..244f29a 100644
--- a/packages/devtools_app/lib/src/screens/logging/logging_controller.dart
+++ b/packages/devtools_app/lib/src/screens/logging/logging_controller.dart
@@ -16,7 +16,6 @@
import 'package:vm_service/vm_service.dart';
import '../../service/vm_service_wrapper.dart';
-import '../../shared/console/eval/inspector_tree.dart';
import '../../shared/diagnostics/diagnostics_node.dart';
import '../../shared/diagnostics/inspector_service.dart';
import '../../shared/globals.dart';
@@ -64,100 +63,6 @@
Future.value(fallback);
}
-class LoggingDetailsController {
- LoggingDetailsController({
- required this.onShowInspector,
- required this.onShowDetails,
- required this.createLoggingTree,
- });
-
- static const JsonEncoder jsonEncoder = JsonEncoder.withIndent(' ');
-
- late LogData data;
-
- /// Callback to execute to show the inspector.
- final VoidCallback onShowInspector;
-
- /// Callback to execute to show the data from the details tree in the view.
- final OnShowDetails onShowDetails;
-
- /// Callback to create an inspectorTree for the logging view of the correct
- /// type.
- final CreateLoggingTree createLoggingTree;
-
- InspectorTreeController? tree;
-
- void setData(LogData data) {
- this.data = data;
-
- tree = null;
-
- if (data.node != null) {
- tree = createLoggingTree(
- onSelectionChange: () {
- final InspectorTreeNode node = tree!.selection!;
- unawaited(tree!.maybePopulateChildren(node));
-
- // TODO(jacobr): node.diagnostic.isDiagnosticableValue isn't quite
- // right.
- final diagnosticLocal = node.diagnostic!;
- if (diagnosticLocal.isDiagnosticableValue) {
- // TODO(jacobr): warn if the selection can't be set as the node is
- // stale which is likely if this is an old log entry.
- onShowInspector();
- unawaited(diagnosticLocal.setSelectionInspector(false));
- }
- },
- );
-
- final InspectorTreeNode root = tree!.setupInspectorTreeNode(
- tree!.createNode(),
- data.node!,
- expandChildren: true,
- expandProperties: true,
- );
- // No sense in collapsing the root node.
- root.allowExpandCollapse = false;
- tree!.root = root;
- onShowDetails(tree: tree);
-
- return;
- }
-
- // See if we need to asynchronously compute the log entry details.
- if (data.needsComputing) {
- onShowDetails(text: '');
-
- unawaited(
- data.compute().then((_) {
- // If we're still displaying the same log entry, then update the UI with
- // the calculated value.
- if (this.data == data) {
- _updateUIFromData();
- }
- }),
- );
- } else {
- _updateUIFromData();
- }
- }
-
- void _updateUIFromData() {
- if (data.details?.startsWith('{') == true &&
- data.details?.endsWith('}') == true) {
- try {
- // If the string decodes properly, then format the json.
- final result = jsonDecode(data.details!);
- onShowDetails(text: jsonEncoder.convert(result));
- } catch (e) {
- onShowDetails(text: data.details);
- }
- } else {
- onShowDetails(text: data.details);
- }
- }
-}
-
class LoggingController extends DisposableController
with
SearchControllerMixin<LogData>,
@@ -259,14 +164,14 @@
final _StdoutEventHandler stdoutHandler =
_StdoutEventHandler(this, 'stdout');
autoDisposeStreamSubscription(
- service.onStdoutEventWithHistory.listen(stdoutHandler.handle),
+ service.onStdoutEventWithHistorySafe.listen(stdoutHandler.handle),
);
// Log stderr events.
final _StdoutEventHandler stderrHandler =
_StdoutEventHandler(this, 'stderr', isError: true);
autoDisposeStreamSubscription(
- service.onStderrEventWithHistory.listen(stderrHandler.handle),
+ service.onStderrEventWithHistorySafe.listen(stderrHandler.handle),
);
// Log GC events.
@@ -274,12 +179,12 @@
// Log `dart:developer` `log` events.
autoDisposeStreamSubscription(
- service.onLoggingEventWithHistory.listen(_handleDeveloperLogEvent),
+ service.onLoggingEventWithHistorySafe.listen(_handleDeveloperLogEvent),
);
// Log Flutter extension events.
autoDisposeStreamSubscription(
- service.onExtensionEventWithHistory.listen(_handleExtensionEvent),
+ service.onExtensionEventWithHistorySafe.listen(_handleExtensionEvent),
);
}
@@ -300,12 +205,12 @@
return;
}
- if (e.extensionKind == FrameInfo.eventName) {
- final FrameInfo frame = FrameInfo.from(e.extensionData!.data);
+ if (e.extensionKind == _FrameInfo.eventName) {
+ final _FrameInfo frame = _FrameInfo(e.extensionData!.data);
final String frameId = '#${frame.number}';
final String frameInfoText =
- '$frameId ${frame.elapsedMs!.toStringAsFixed(1).padLeft(4)}ms ';
+ '$frameId ${frame.elapsedMs.toStringAsFixed(1).padLeft(4)}ms ';
log(
LogData(
@@ -315,14 +220,14 @@
summary: frameInfoText,
),
);
- } else if (e.extensionKind == ImageSizesForFrame.eventName) {
- final images = ImageSizesForFrame.from(e.extensionData!.data);
+ } else if (e.extensionKind == _ImageSizesForFrame.eventName) {
+ final images = _ImageSizesForFrame.from(e.extensionData!.data);
for (final image in images) {
log(
LogData(
e.extensionKind!.toLowerCase(),
- jsonEncode(image.rawJson),
+ jsonEncode(image.json),
e.timestamp,
summary: image.summary,
),
@@ -400,7 +305,7 @@
void _handleGCEvent(Event e) {
final HeapSpace newSpace = HeapSpace.parse(e.json!['new'])!;
final HeapSpace oldSpace = HeapSpace.parse(e.json!['old'])!;
- final isolateRef = e.json!['isolate'];
+ final isolateRef = (e.json!['isolate'] as Map).cast<String, Object?>();
final int usedBytes = newSpace.used! + oldSpace.used!;
final int capacityBytes = newSpace.capacity! + oldSpace.capacity!;
@@ -409,7 +314,8 @@
final String summary = '${isolateRef['name']} • '
'${e.json!['reason']} collection in $time ms • '
- '${printMB(usedBytes, includeUnit: true)} used of ${printMB(capacityBytes, includeUnit: true)}';
+ '${printMB(usedBytes, includeUnit: true)} used of '
+ '${printMB(capacityBytes, includeUnit: true)}';
final event = <String, Object>{
'reason': e.json!['reason'],
@@ -425,21 +331,21 @@
void _handleDeveloperLogEvent(Event e) {
final VmServiceWrapper? service = serviceConnection.serviceManager.service;
- final logRecord = e.json!['logRecord'];
+ final logRecord = _LogRecord(e.json!['logRecord']);
String? loggerName =
- _valueAsString(InstanceRef.parse(logRecord['loggerName']));
+ _valueAsString(InstanceRef.parse(logRecord.loggerName));
if (loggerName == null || loggerName.isEmpty) {
loggerName = 'log';
}
- final int? level = logRecord['level'];
- final InstanceRef messageRef = InstanceRef.parse(logRecord['message'])!;
+ final level = logRecord.level;
+ final messageRef = InstanceRef.parse(logRecord.message)!;
String? summary = _valueAsString(messageRef);
if (messageRef.valueAsStringIsTruncated == true) {
summary = '${summary!}...';
}
- final InstanceRef? error = InstanceRef.parse(logRecord['error']);
- final InstanceRef? stackTrace = InstanceRef.parse(logRecord['stackTrace']);
+ final error = InstanceRef.parse(logRecord.error);
+ final stackTrace = InstanceRef.parse(logRecord.stackTrace);
final String? details = summary;
Future<String> Function()? detailsComputer;
@@ -680,6 +586,18 @@
}
}
+extension type _LogRecord(Map<String, dynamic> json) {
+ int? get level => json['level'];
+
+ Map<String, Object?> get loggerName => json['loggerName'];
+
+ Map<String, Object?> get message => json['message'];
+
+ Map<String, Object?> get error => json['error'];
+
+ Map<String, Object?> get stackTrace => json['stackTrace'];
+}
+
/// Receive and log stdout / stderr events from the VM.
///
/// This class buffers the events for up to 1ms. This is in order to combine a
@@ -822,22 +740,6 @@
}
}
- bool matchesFilter(String filter) {
- if (kind.toLowerCase().contains(filter)) {
- return true;
- }
-
- if (summary != null && summary!.toLowerCase().contains(filter)) {
- return true;
- }
-
- if (_details != null && _details!.toLowerCase().contains(filter)) {
- return true;
- }
-
- return false;
- }
-
@override
bool matchesSearchToken(RegExp regExpSearch) {
return (summary?.caseInsensitiveContains(regExpSearch) == true) ||
@@ -848,40 +750,17 @@
String toString() => 'LogData($kind, $timestamp)';
}
-class FrameInfo {
- FrameInfo(this.number, this.elapsedMs, this.startTimeMs);
-
+extension type _FrameInfo(Map<String, dynamic> _json) {
static const String eventName = 'Flutter.Frame';
- static const double kTargetMaxFrameTimeMs = 1000.0 / 60;
-
- static FrameInfo from(Map<String, dynamic> data) {
- return FrameInfo(
- data['number'],
- data['elapsed'] / 1000,
- data['startTime'] / 1000,
- );
- }
-
- final int? number;
- final num? elapsedMs;
- final num? startTimeMs;
-
- @override
- String toString() => 'frame $number ${elapsedMs!.toStringAsFixed(1)}ms';
+ int? get number => _json['number'];
+ num get elapsedMs => (_json['elapsed'] as num) / 1000;
}
-class ImageSizesForFrame {
- ImageSizesForFrame(
- this.source,
- this.displaySize,
- this.imageSize,
- this.rawJson,
- );
-
+extension type _ImageSizesForFrame(Map<String, dynamic> json) {
static const String eventName = 'Flutter.ImageSizesForFrame';
- static List<ImageSizesForFrame> from(Map<String, dynamic> data) {
+ static List<_ImageSizesForFrame> from(Map<String, dynamic> data) {
// "packages/flutter_gallery_assets/assets/icons/material/2.0x/material.png": {
// "source": "packages/flutter_gallery_assets/assets/icons/material/2.0x/material.png",
// "displaySize": {
@@ -896,40 +775,37 @@
// "decodedSizeInBytes": 87381
// }
- return data.values.map((entry) {
- return ImageSizesForFrame(
- entry['source'],
- entry['displaySize'],
- entry['imageSize'],
- entry,
- );
- }).toList();
+ return data.values.map((entry_) => _ImageSizesForFrame(entry_)).toList();
}
- final String? source;
- final Map<String, Object?>? displaySize;
- final Map<String, Object?>? imageSize;
- final Map<String, Object?>? rawJson;
+ String get source => json['source'];
+
+ _ImageSize get displaySize => _ImageSize(json['displaySize']);
+
+ _ImageSize get imageSize => _ImageSize(json['imageSize']);
+
+ int? get displaySizeInBytes => json['displaySizeInBytes'];
+
+ int? get decodedSizeInBytes => json['decodedSizeInBytes'];
String get summary {
- final file = path.basename(source!);
-
- final int? displaySizeInBytes = rawJson!['displaySizeInBytes'] as int?;
- final int? decodedSizeInBytes = rawJson!['decodedSizeInBytes'] as int?;
+ final file = path.basename(source);
final double expansion =
math.sqrt(decodedSizeInBytes ?? 0) / math.sqrt(displaySizeInBytes ?? 1);
return 'Image $file • displayed at '
- '${(displaySize!['width'] as double).round()}x${(displaySize!['height'] as double).round()}'
+ '${displaySize.width.round()}x${displaySize.height.round()}'
' • created at '
- '${(imageSize!['width'] as double).round()}x${(imageSize!['height'] as double).round()}'
+ '${imageSize.width.round()}x${imageSize.height.round()}'
' • ${expansion.toStringAsFixed(1)}x';
}
+}
- @override
- String toString() =>
- '$source ${displaySize!['width']}x${displaySize!['height']}';
+extension type _ImageSize(Map<String, dynamic> json) {
+ double get width => json['width'];
+
+ double get height => json['height'];
}
class NavigationInfo {
@@ -943,8 +819,7 @@
final Map<String, dynamic>? _route;
- String? get routeDescription =>
- _route == null ? null : _route!['description'];
+ String? get routeDescription => _route == null ? null : _route['description'];
}
class ServiceExtensionStateChangedInfo {
diff --git a/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_controller.dart b/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_controller.dart
index 3297390..4c26cf8 100644
--- a/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_controller.dart
+++ b/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_controller.dart
@@ -7,7 +7,6 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_shared.dart';
import 'package:flutter/foundation.dart';
-import 'package:leak_tracker/devtools_integration.dart';
import 'package:vm_service/vm_service.dart';
import '../../../../shared/globals.dart';
@@ -27,23 +26,28 @@
DiffPaneController? diffPaneController,
ProfilePaneController? profilePaneController,
) {
- diff = diffPaneController ?? DiffPaneController(SnapshotTaker());
+ memoryTimeline = MemoryTimeline();
+ diff =
+ diffPaneController ?? DiffPaneController(SnapshotTaker(memoryTimeline));
profile = profilePaneController ?? ProfilePaneController();
}
late DiffPaneController diff;
late ProfilePaneController profile;
+ late MemoryTimeline memoryTimeline;
TracingPaneController tracing = TracingPaneController();
void reset() {
diff.dispose();
- diff = DiffPaneController(SnapshotTaker());
+ diff = DiffPaneController(SnapshotTaker(memoryTimeline));
profile.dispose();
profile = ProfilePaneController();
tracing.dispose();
tracing = TracingPaneController();
+
+ memoryTimeline.reset();
}
void dispose() {
@@ -53,10 +57,11 @@
}
}
-/// This class contains the business logic for memory screen, for a connected application.
+/// This class contains the business logic for memory screen, for a connected
+/// application.
///
-/// This class must not have direct dependencies on dart:html. This allows tests
-/// of the complicated logic in this class to run on the VM.
+/// This class must not have direct dependencies on web-only libraries. This
+/// allows tests of the complicated logic in this class to run on the VM.
///
/// The controller should be recreated for every new connection.
class MemoryController extends DisposableController
@@ -65,8 +70,6 @@
DiffPaneController? diffPaneController,
ProfilePaneController? profilePaneController,
}) {
- memoryTimeline = MemoryTimeline();
-
controllers = MemoryFeatureControllers(
diffPaneController,
profilePaneController,
@@ -84,11 +87,6 @@
/// instead of the widget state.
int selectedFeatureTabIndex = 0;
- final _shouldShowLeaksTab = ValueNotifier<bool>(false);
- ValueListenable<bool> get shouldShowLeaksTab => _shouldShowLeaksTab;
-
- late MemoryTimeline memoryTimeline;
-
HeapSample? _selectedDartSample;
HeapSample? _selectedAndroidSample;
@@ -111,19 +109,11 @@
final _refreshCharts = ValueNotifier<int>(0);
- void refreshAllCharts() {
- _refreshCharts.value++;
- _updateAndroidChartVisibility();
- }
-
/// Default is to display default tick width based on width of chart of the collected
/// data in the chart.
final _displayIntervalNotifier =
ValueNotifier<ChartInterval>(ChartInterval.theDefault);
- ValueListenable<ChartInterval> get displayIntervalNotifier =>
- _displayIntervalNotifier;
-
set displayInterval(ChartInterval interval) {
_displayIntervalNotifier.value = interval;
}
@@ -166,16 +156,7 @@
// TODO(terry): Need an event on the controller for this too?
}
- void _refreshShouldShowLeaksTab() {
- _shouldShowLeaksTab.value = serviceConnection
- .serviceManager.serviceExtensionManager
- .hasServiceExtension(memoryLeakTrackingExtensionName)
- .value;
- }
-
void _handleConnectionStart() {
- _refreshShouldShowLeaksTab();
-
if (_memoryTracker == null) {
_memoryTracker = MemoryTracker(this);
_memoryTracker!.start();
@@ -198,14 +179,14 @@
// TODO(terry): Display events enabled in a settings page for now only these events.
switch (extensionEventKind) {
case 'Flutter.ImageSizesForFrame':
- memoryTimeline.addExtensionEvent(
+ controllers.memoryTimeline.addExtensionEvent(
event.timestamp,
event.extensionKind,
jsonData,
);
break;
case MemoryTimeline.devToolsExtensionEvent:
- memoryTimeline.addExtensionEvent(
+ controllers.memoryTimeline.addExtensionEvent(
event.timestamp,
MemoryTimeline.customDevToolsEvent,
jsonData,
diff --git a/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_protocol.dart b/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_protocol.dart
index 7f3237b..ce5bd73 100644
--- a/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_protocol.dart
+++ b/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_protocol.dart
@@ -200,7 +200,7 @@
// Removes any isolate that is a sentinel.
isolateHeaps.removeWhere((key, value) => keysToRemove.contains(key));
- final memoryTimeline = memoryController.memoryTimeline;
+ final memoryTimeline = memoryController.controllers.memoryTimeline;
int time = DateTime.now().millisecondsSinceEpoch;
if (memoryTimeline.data.isNotEmpty) {
diff --git a/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_tabs.dart b/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_tabs.dart
index 46ae9f8..269307c 100644
--- a/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_tabs.dart
+++ b/packages/devtools_app/lib/src/screens/memory/framework/connected/memory_tabs.dart
@@ -8,14 +8,12 @@
import '../../../../shared/common_widgets.dart';
import '../../../../shared/ui/tab.dart';
import '../../panes/diff/diff_pane.dart';
-import '../../panes/leaks/leaks_pane.dart';
import '../../panes/profile/profile_view.dart';
import '../../panes/tracing/tracing_view.dart';
import 'memory_controller.dart';
@visibleForTesting
class MemoryScreenKeys {
- static const leaksTab = Key('Leaks Tab');
static const dartHeapTableProfileTab = Key('Dart Heap Profile Tab');
static const dartHeapAllocationTracingTab =
Key('Dart Heap Allocation Tracing Tab');
@@ -34,17 +32,12 @@
@override
Widget build(BuildContext context) {
- return ValueListenableBuilder(
- valueListenable: controller.shouldShowLeaksTab,
- builder: (context, showLeaksTab, _) {
- return AnalyticsTabbedView(
- tabs: _generateTabRecords(),
- initialSelectedIndex: controller.selectedFeatureTabIndex,
- gaScreen: gac.memory,
- onTabChanged: (int index) {
- controller.selectedFeatureTabIndex = index;
- },
- );
+ return AnalyticsTabbedView(
+ tabs: _generateTabRecords(),
+ initialSelectedIndex: controller.selectedFeatureTabIndex,
+ gaScreen: gac.memory,
+ onTabChanged: (int index) {
+ controller.selectedFeatureTabIndex = index;
},
);
}
@@ -85,15 +78,6 @@
child: TracingPane(controller: controller.controllers.tracing),
),
),
- if (controller.shouldShowLeaksTab.value)
- (
- tab: DevToolsTab.create(
- key: MemoryScreenKeys.leaksTab,
- gaPrefix: _gaPrefix,
- tabName: 'Detect Leaks',
- ),
- tabView: const KeepAliveWrapper(child: LeaksPane()),
- ),
];
}
}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_control_pane.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_control_pane.dart
index 4e56674..58ddfa5 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_control_pane.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_control_pane.dart
@@ -54,7 +54,7 @@
void _clearTimeline() {
ga.select(gac.memory, gac.clear);
- controller.memoryTimeline.reset();
+ controller.controllers.memoryTimeline.reset();
// Remove history of all plotted data in all charts.
widget.chartController.resetAll();
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_pane.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_pane.dart
index b1ad691..f890e14 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_pane.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/chart_pane.dart
@@ -172,10 +172,11 @@
// showing and hiding the chart.
if (!showChart) return const SizedBox.shrink();
- return RawKeyboardListener(
+ return KeyboardListener(
focusNode: widget.keyFocusNode,
- onKey: (RawKeyEvent event) {
- if (event.isKeyPressed(LogicalKeyboardKey.escape)) {
+ onKeyEvent: (KeyEvent event) {
+ if (event.isKeyDownOrRepeat &&
+ event.logicalKey == LogicalKeyboardKey.escape) {
_hideHover();
}
},
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_android_chart.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_android_chart.dart
index b80f88f..be9e8fb 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_android_chart.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_android_chart.dart
@@ -33,9 +33,11 @@
// have been toggled to be displayed - yet.
if (traces.isNotEmpty) {
final chartDataLength = timestampsLength;
- final dataLength = _memoryController.memoryTimeline.data.length;
+ final dataLength =
+ _memoryController.controllers.memoryTimeline.data.length;
- final dataRange = _memoryController.memoryTimeline.data.getRange(
+ final dataRange =
+ _memoryController.controllers.memoryTimeline.data.getRange(
chartDataLength,
dataLength,
);
@@ -143,7 +145,7 @@
/// Controller attached to the chart.
AndroidChartController get _chartController => widget.chartController;
- MemoryTimeline get _memoryTimeline => controller.memoryTimeline;
+ MemoryTimeline get _memoryTimeline => controller.controllers.memoryTimeline;
@override
void initState() {
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_charts.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_charts.dart
index f542508..d4ac6f5 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_charts.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_charts.dart
@@ -178,7 +178,8 @@
void _getEventData(Map<String, Object> results) {
// Use the detailed extension events data stored in the memoryTimeline.
- final eventInfo = controller.memoryTimeline.data[index].memoryEventInfo;
+ final eventInfo =
+ controller.controllers.memoryTimeline.data[index].memoryEventInfo;
if (eventInfo.isEmpty) return;
@@ -221,7 +222,8 @@
}
void _getVMData(Map<String, Object> results) {
- final HeapSample heapSample = controller.memoryTimeline.data[index];
+ final HeapSample heapSample =
+ controller.controllers.memoryTimeline.data[index];
results[rssJsonName] = heapSample.rss;
results[capacityJsonName] = heapSample.capacity;
@@ -234,7 +236,7 @@
void _getAndroidData(Map<String, Object> results) {
final AdbMemoryInfo androidData =
- controller.memoryTimeline.data[index].adbMemoryInfo;
+ controller.controllers.memoryTimeline.data[index].adbMemoryInfo;
results[adbTotalJsonName] = androidData.total;
results[adbOtherJsonName] = androidData.other;
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_events_pane.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_events_pane.dart
index 025f8ae..42452f8 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_events_pane.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_events_pane.dart
@@ -54,9 +54,10 @@
@override
void setupData() {
final chartDataLength = timestampsLength;
- final dataLength = _memoryController.memoryTimeline.data.length;
+ final dataLength = _memoryController.controllers.memoryTimeline.data.length;
- final dataRange = _memoryController.memoryTimeline.data.getRange(
+ final dataRange =
+ _memoryController.controllers.memoryTimeline.data.getRange(
chartDataLength,
dataLength,
);
@@ -184,7 +185,7 @@
/// VM's GCs are displayed in a smaller glyph and closer to the heap graph.
static const visibleVmEvent = 0.4;
- MemoryTimeline get _memoryTimeline => controller.memoryTimeline;
+ MemoryTimeline get _memoryTimeline => controller.controllers.memoryTimeline;
@override
void initState() {
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_vm_chart.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_vm_chart.dart
index 59a6614..0b22dc1 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_vm_chart.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/memory_vm_chart.dart
@@ -26,9 +26,10 @@
@override
void setupData() {
final chartDataLength = timestampsLength;
- final dataLength = _memoryController.memoryTimeline.data.length;
+ final dataLength = _memoryController.controllers.memoryTimeline.data.length;
- final dataRange = _memoryController.memoryTimeline.data.getRange(
+ final dataRange =
+ _memoryController.controllers.memoryTimeline.data.getRange(
chartDataLength,
dataLength,
);
@@ -107,7 +108,7 @@
/// Controller attached to the chart.
VMChartController get _chartController => widget.chartController;
- MemoryTimeline get _memoryTimeline => controller.memoryTimeline;
+ MemoryTimeline get _memoryTimeline => controller.controllers.memoryTimeline;
@override
void initState() {
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/control/secondary_controls.dart b/packages/devtools_app/lib/src/screens/memory/panes/control/secondary_controls.dart
index f342a05..d458424 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/control/secondary_controls.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/control/secondary_controls.dart
@@ -57,7 +57,7 @@
}
Future<void> _gc() async {
- controller.memoryTimeline.addGCEvent();
+ controller.controllers.memoryTimeline.addGCEvent();
await controller.gc();
}
}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/diff_pane_controller.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/diff_pane_controller.dart
index e5fe57a..b972b9b 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/diff_pane_controller.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/diff_pane_controller.dart
@@ -41,10 +41,6 @@
/// informational item.
bool get hasSnapshots => core.snapshots.value.length > 1;
- // This value should never be reset. It is incremented for every snapshot that
- // is taken, and is used to assign a unique id to each [SnapshotListItem].
- int _snapshotId = 0;
-
Future<void> takeSnapshot() async {
_isTakingSnapshot.value = true;
ga.select(
@@ -53,7 +49,6 @@
);
final item = SnapshotInstanceItem(
- id: _snapshotId++,
displayNumber: _nextDisplayNumber(),
isolateName: selectedIsolateName ?? '<isolate-not-detected>',
);
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/item_controller.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/item_controller.dart
index eae709e..cd3ce39 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/item_controller.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/controller/item_controller.dart
@@ -33,13 +33,10 @@
SnapshotInstanceItem({
required this.displayNumber,
required this.isolateName,
- required this.id,
}) {
_isProcessing.value = true;
}
- final int id;
-
final String isolateName;
AdaptedHeap? heap;
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart
index 597a68e..c83103e 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart
@@ -56,6 +56,7 @@
BuildContext context,
DiffClassStats data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return HeapClassView(
@@ -140,6 +141,7 @@
BuildContext context,
DiffClassStats data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final objects = _instances(data);
@@ -163,7 +165,6 @@
heapCallback,
data.heapClass,
isSelected: isRowSelected,
- gaContext: gac.MemoryAreas.snapshotDiff,
liveItemsEnabled: dataPart != _DataPart.deleted,
);
}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart
index 4624be5..98d7a8a 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart
@@ -48,6 +48,7 @@
BuildContext context,
SingleClassStats data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return HeapClassView(
@@ -96,6 +97,7 @@
BuildContext context,
SingleClassStats data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return HeapInstanceTableCell(
@@ -103,7 +105,6 @@
classData.heap,
data.heapClass,
isSelected: isRowSelected,
- gaContext: gac.MemoryAreas.snapshotSingle,
);
}
}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart
index 2ec0832..f1dc1a4 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart
@@ -4,7 +4,6 @@
import 'package:flutter/material.dart';
-import '../../../../../shared/analytics/constants.dart';
import '../../../../../shared/memory/adapted_heap_data.dart';
import '../../../../../shared/memory/class_name.dart';
import '../../../shared/heap/heap.dart';
@@ -22,7 +21,6 @@
HeapClassName heapClass, {
super.key,
required bool isSelected,
- required this.gaContext,
this.liveItemsEnabled = true,
}) : _sampleObtainer = _shouldShowMenu(isSelected, objects)
? HeapClassSampler(heapClass, objects, heap())
@@ -34,7 +32,6 @@
final HeapClassSampler? _sampleObtainer;
- final MemoryAreas gaContext;
final int _count;
final bool liveItemsEnabled;
@@ -42,7 +39,6 @@
Widget build(BuildContext context) {
return InstanceViewWithContextMenu(
count: _count,
- gaContext: gaContext,
menuBuilder: () => _buildHeapInstancesMenu(
sampler: _sampleObtainer,
liveItemsEnabled: liveItemsEnabled,
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/snapshot_control_pane.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/snapshot_control_pane.dart
index 361eccf..ff40fa9 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/snapshot_control_pane.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/snapshot_control_pane.dart
@@ -38,7 +38,9 @@
controller: controller,
),
const SizedBox(width: defaultSpacing),
- ToCsvButton(
+ DownloadButton(
+ tooltip: 'Download data in CSV format',
+ label: 'CSV',
minScreenWidthForTextBeforeScaling:
memoryControlsMinVerboseWidth,
gaScreen: gac.memory,
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/controller.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/controller.dart
deleted file mode 100644
index 1f8f8c7..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/controller.dart
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-
-import 'package:flutter/material.dart';
-import 'package:leak_tracker/devtools_integration.dart';
-import 'package:vm_service/vm_service.dart';
-
-import '../../../../shared/config_specific/import_export/import_export.dart';
-import '../../../../shared/globals.dart';
-import '../../../../shared/primitives/utils.dart';
-import '../../shared/primitives/memory_utils.dart';
-import 'diagnostics/formatter.dart';
-import 'diagnostics/leak_analyzer.dart';
-import 'diagnostics/model.dart';
-import 'primitives/analysis_status.dart';
-import 'primitives/simple_items.dart';
-
-const yamlFilePrefix = 'memory_leaks';
-
-class LeaksPaneController {
- LeaksPaneController()
- : assert(
- supportedLeakTrackingProtocols
- .contains(appLeakTrackerProtocolVersion),
- ) {
- subscriptionWithHistory = serviceConnection
- .serviceManager.service!.onExtensionEventWithHistory
- .listen(_onAppMessageWithHistory);
- }
-
- final analysisStatus = AnalysisStatusController();
-
- final leakSummaryHistory = ValueNotifier<String>('');
- late String appProtocolVersion;
- final appStatus =
- ValueNotifier<AppStatus>(AppStatus.noCommunicationsReceived);
-
- LeakSummary? _lastLeakSummary;
-
- final _exportController = ExportController();
-
- late StreamSubscription subscriptionWithHistory;
-
- void dispose() {
- unawaited(subscriptionWithHistory.cancel());
- analysisStatus.dispose();
- }
-
- void _onAppMessageWithHistory(Event vmServiceEvent) {
- if (appStatus.value == AppStatus.unsupportedProtocolVersion) return;
-
- final message = EventFromApp.fromVmServiceEvent(vmServiceEvent)?.message;
- if (message == null) return;
-
- if (message is LeakTrackingStarted) {
- appStatus.value = AppStatus.leakTrackingStarted;
- appProtocolVersion = message.protocolVersion;
- return;
- }
-
- if (message is LeakSummary) {
- appStatus.value = AppStatus.leaksFound;
- if (message.matches(_lastLeakSummary)) return;
- _lastLeakSummary = message;
-
- _addToLeakSummaryHistory(
- '${formatDateTime(message.time)}: ${message.toMessage()}',
- );
-
- return;
- }
-
- throw StateError('Unsupported event type: ${message.runtimeType}');
- }
-
- Future<NotGCedAnalyzerTask> _createAnalysisTask(
- List<LeakReport> reports,
- ) async {
- final graph = (await snapshotMemoryInSelectedIsolate())!;
- return NotGCedAnalyzerTask.fromSnapshot(graph, reports, selectedIsolateId!);
- }
-
- Future<void> requestLeaksAndSaveToYaml() async {
- try {
- analysisStatus.status.value = AnalysisStatus.ongoing;
- await _setMessageWithDelay('Requested details from the application.');
-
- final leakDetails =
- await _invokeLeakExtension<RequestForLeakDetails, Leaks>(
- RequestForLeakDetails(),
- );
-
- _addToLeakSummaryHistory('Collected leaks.');
-
- final notGCed = leakDetails.byType[LeakType.notGCed] ?? [];
-
- NotGCedAnalyzerTask? task;
- NotGCedAnalyzed? notGCedAnalyzed;
-
- if (notGCed.isNotEmpty) {
- await _setMessageWithDelay('Taking heap snapshot...');
- task = await _createAnalysisTask(notGCed);
- await _setMessageWithDelay('Detecting retaining paths...');
- notGCedAnalyzed = await analyzeNotGCed(task);
- }
-
- await _setMessageWithDelay('Formatting...');
-
- final yaml = analyzedLeaksToYaml(
- gcedLate: leakDetails.gcedLate,
- notDisposed: leakDetails.notDisposed,
- notGCed: notGCedAnalyzed,
- );
-
- _saveResultAndSetAnalysisStatus(yaml);
- } catch (error) {
- analysisStatus.message.value = 'Error: $error';
- analysisStatus.status.value = AnalysisStatus.showingError;
- }
- }
-
- void _saveResultAndSetAnalysisStatus(String yaml) {
- final now = DateTime.now();
- final yamlFile = ExportController.generateFileName(
- time: now,
- prefix: yamlFilePrefix,
- type: ExportFileType.yaml,
- );
- _exportController.downloadFile(yaml, fileName: yamlFile);
-
- analysisStatus.status.value = AnalysisStatus.showingResult;
- }
-
- Future<void> _setMessageWithDelay(String message) async {
- analysisStatus.message.value = message;
- await delayToReleaseUiThread(micros: 5000);
- }
-
- Future<R> _invokeLeakExtension<M extends Object, R extends Object>(
- M message,
- ) async {
- final response =
- await serviceConnection.serviceManager.service!.callServiceExtension(
- memoryLeakTrackingExtensionName,
- isolateId: serviceConnection
- .serviceManager.isolateManager.mainIsolate.value!.id!,
- args: RequestToApp(message).toRequestParameters(),
- );
-
- return ResponseFromApp<R>.fromServiceResponse(response).message;
- }
-
- String appStatusMessage() {
- switch (appStatus.value) {
- case AppStatus.leakTrackingNotSupported:
- return 'The application does not support leak tracking.';
- case AppStatus.noCommunicationsReceived:
- return 'Waiting for leak tracking messages from the application...';
- case AppStatus.unsupportedProtocolVersion:
- return 'The application uses unsupported leak tracking protocol $appProtocolVersion. '
- 'Upgrade to a newer version of leak_tracker to switch to one of supported protocols: $supportedLeakTrackingProtocols.';
- case AppStatus.leakTrackingStarted:
- return 'Leak tracking started. No leaks communicated so far.';
- case AppStatus.leaksFound:
- throw StateError('There is no UI message for ${AppStatus.leaksFound}.');
- }
- }
-
- void _addToLeakSummaryHistory(String entry) {
- leakSummaryHistory.value = '$entry\n'
- '${leakSummaryHistory.value}';
- }
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/formatter.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/formatter.dart
deleted file mode 100644
index c6d8c54..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/formatter.dart
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:collection/collection.dart';
-import 'package:leak_tracker/devtools_integration.dart';
-
-import 'model.dart';
-
-const linkToGuidance = 'https://github.com/dart-lang/leak_tracker';
-
-String analyzedLeaksToYaml({
- required List<LeakReport>? gcedLate,
- required List<LeakReport>? notDisposed,
- required NotGCedAnalyzed? notGCed,
-}) {
- return '# For memory leaks troubleshooting tips see\n'
- '# $linkToGuidance\n\n'
- '${LeakReport.iterableToYaml('not-disposed', notDisposed)}'
- '${_notGCedToYaml(notGCed)}'
- '${LeakReport.iterableToYaml('gced-late', gcedLate)}';
-}
-
-String _notGCedToYaml(NotGCedAnalyzed? notGCed) {
- if (notGCed == null) return '';
- final result = StringBuffer();
-
- if (notGCed.leaksByCulprits.isNotEmpty) {
- result.write('''not-gced:
- total: ${notGCed.totalLeaks - notGCed.leaksWithoutRetainingPath.length}
- culprits: ${notGCed.leaksByCulprits.length}
- victims: ${notGCed.totalLeaks - notGCed.leaksWithoutRetainingPath.length - notGCed.leaksByCulprits.length}
- objects:
-''');
- result.write(
- notGCed.leaksByCulprits.keys
- // We want more victims at the top.
- .sorted(
- (a, b) => notGCed.leaksByCulprits[b]!.length
- .compareTo(notGCed.leaksByCulprits[a]!.length),
- )
- .map(
- (culprit) => _culpritToYaml(
- culprit,
- notGCed.leaksByCulprits[culprit]!,
- indent: ' ',
- ),
- )
- .join(),
- );
- }
-
- result.write(
- LeakReport.iterableToYaml(
- 'not-gced-without-path',
- notGCed.leaksWithoutRetainingPath,
- ),
- );
-
- return result.toString();
-}
-
-String _culpritToYaml(
- LeakReport culprit,
- List<LeakReport> victims, {
- String indent = '',
-}) {
- final culpritYaml = culprit.toYaml(indent);
- if (victims.isEmpty) return culpritYaml;
-
- return '$culpritYaml'
- '''$indent total-victims: ${victims.length}
-$indent victims:
-${victims.map((e) => e.toYaml('$indent ')).join()}''';
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/leak_analyzer.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/leak_analyzer.dart
deleted file mode 100644
index bb74fab..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/leak_analyzer.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/material.dart';
-import 'package:leak_tracker/devtools_integration.dart';
-
-import '../../../../../shared/memory/adapted_heap_data.dart';
-import '../../../shared/heap/spanning_tree.dart';
-import 'model.dart';
-
-/// Analyzes notGCed leaks and returns result of the analysis.
-// TODO(polina-c): add tests for this method.
-// https://github.com/flutter/devtools/issues/3951
-Future<NotGCedAnalyzed> analyzeNotGCed(NotGCedAnalyzerTask task) async {
- await analyzeHeapAndSetRetainingPaths(task.heap, task.reports);
-
- final leaksWithPath = task.reports.where((r) => r.retainingPath != null);
- final leaksWithoutPath = task.reports.where((r) => r.retainingPath == null);
- final leaksByCulprits = findCulprits(leaksWithPath);
-
- for (var report in leaksByCulprits.keys) {
- final objectIndex = task.heap.objectIndexByIdentityHashCode(report.code);
- if (objectIndex != null) {
- final path = task.heap.retainingPath(objectIndex);
- if (path != null) report.detailedPath = path.detailedPath();
- }
- }
-
- return NotGCedAnalyzed(
- leaksByCulprits: leaksByCulprits,
- leaksWithoutRetainingPath: leaksWithoutPath.toList(),
- totalLeaks: task.reports.length,
- );
-}
-
-/// Sets [retainingPath] to each [notGCedLeaks].
-Future<void> analyzeHeapAndSetRetainingPaths(
- AdaptedHeapData heap,
- List<LeakReport> notGCedLeaks,
-) async {
- if (!heap.allFieldsCalculated) await calculateHeap(heap);
-
- for (var l in notGCedLeaks) {
- l.retainingPath = _pathByIdentityHashCode(heap, l.code)?.shortPath();
- }
-}
-
-HeapPath? _pathByIdentityHashCode(AdaptedHeapData heap, int code) {
- final objectIndex = heap.objectIndexByIdentityHashCode(code);
- if (objectIndex == null) return null;
- return heap.retainingPath(objectIndex);
-}
-
-/// Out of list of notGCed objects, identifies ones that hold others from
-/// garbage collection (i.e. culprits).
-///
-/// Returns map, where the keys are the identified culprits and values are their
-/// victims.
-@visibleForTesting
-Map<LeakReport, List<LeakReport>> findCulprits(
- Iterable<LeakReport> notGCed,
-) {
- final leaksByPath = {for (var r in notGCed) r.retainingPath!: r};
-
- final result = <LeakReport, List<LeakReport>>{};
- String previousPath = '--- not a path ---';
- late LeakReport previousReport;
- for (var path in leaksByPath.keys.toList()..sort()) {
- final report = leaksByPath[path]!;
- final isVictim = path.startsWith(previousPath);
-
- if (isVictim) {
- result[previousReport]!.add(report);
- } else {
- previousPath = path;
- previousReport = report;
- result[report] = [];
- }
- }
- return result;
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/model.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/model.dart
deleted file mode 100644
index 3b1ec20..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/diagnostics/model.dart
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:leak_tracker/devtools_integration.dart';
-import 'package:vm_service/vm_service.dart';
-
-import '../../../../../shared/memory/adapted_heap_data.dart';
-
-/// Result of analysis of [notGCed] memory leaks.
-class NotGCedAnalyzed {
- NotGCedAnalyzed({
- required this.leaksByCulprits,
- required this.leaksWithoutRetainingPath,
- required this.totalLeaks,
- });
-
- /// Not GCed objects with retaining path to the root, by culprits.
- final Map<LeakReport, List<LeakReport>> leaksByCulprits;
-
- /// Not GCed objects without retaining path to the root.
- final List<LeakReport> leaksWithoutRetainingPath;
-
- final int totalLeaks;
-}
-
-/// Input for analyses of notGCed leaks.
-class NotGCedAnalyzerTask {
- NotGCedAnalyzerTask({
- required this.heap,
- required this.reports,
- });
-
- static Future<NotGCedAnalyzerTask> fromSnapshot(
- HeapSnapshotGraph graph,
- List<LeakReport> reports,
- String isolateId,
- ) async {
- return NotGCedAnalyzerTask(
- heap: await AdaptedHeapData.fromHeapSnapshot(graph, isolateId: isolateId),
- reports: reports,
- );
- }
-
- final AdaptedHeapData heap;
- final List<LeakReport> reports;
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/leaks_pane.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/leaks_pane.dart
deleted file mode 100644
index 9f2818d..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/leaks_pane.dart
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:devtools_app_shared/ui.dart';
-import 'package:flutter/material.dart';
-
-import 'controller.dart';
-import 'primitives/analysis_status.dart';
-import 'primitives/simple_items.dart';
-import 'widgets/simple_widgets.dart';
-
-// TODO(polina-c): review UX with UX specialists
-// https://github.com/flutter/devtools/issues/3951
-class LeaksPane extends StatefulWidget {
- const LeaksPane({Key? key}) : super(key: key);
-
- @override
- State<LeaksPane> createState() => _LeaksPaneState();
-}
-
-class _LeaksPaneState extends State<LeaksPane> {
- late LeaksPaneController _leaksController;
-
- @override
- void didChangeDependencies() {
- super.didChangeDependencies();
- _leaksController = LeaksPaneController();
- }
-
- @override
- void dispose() {
- _leaksController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.all(densePadding),
- child: ValueListenableBuilder<AppStatus>(
- valueListenable: _leaksController.appStatus,
- builder: (_, appStatus, __) {
- if (appStatus != AppStatus.leaksFound) {
- return Column(
- children: [
- const LeaksHelpLink(),
- Text(_leaksController.appStatusMessage()),
- ],
- );
- }
-
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- AnalysisStatusView(
- controller: _leaksController.analysisStatus,
- analysisStarter: Row(
- children: [
- AnalyzeButton(leaksController: _leaksController),
- const LeaksHelpLink(),
- ],
- ),
- ),
- const SizedBox(height: denseSpacing),
- Expanded(
- child: SingleChildScrollView(
- child: ValueListenableBuilder<String>(
- valueListenable: _leaksController.leakSummaryHistory,
- builder: (_, value, __) => Text(value),
- ),
- ),
- ),
- ],
- );
- },
- ),
- );
- }
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/README.md b/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/README.md
deleted file mode 100644
index f4b270a..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/README.md
+++ /dev/null
@@ -1 +0,0 @@
-This folder contains libraries that do not depend on other libraries in the folder `leaks`.
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/analysis_status.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/analysis_status.dart
deleted file mode 100644
index 20f559f..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/analysis_status.dart
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:devtools_app_shared/ui.dart';
-import 'package:flutter/material.dart';
-
-import '../../../../../shared/common_widgets.dart';
-import '../../../../../shared/primitives/utils.dart';
-
-enum AnalysisStatus {
- notStarted,
- ongoing,
-
- /// The process is complete and we want user to see the result.
- showingResult,
-
- /// The process is complete and we want user to acknowledge the error.
- showingError,
-}
-
-const Duration _showingResultDelay = Duration(seconds: 5);
-
-/// Describes status of the ongoing process.
-class AnalysisStatusController {
- AnalysisStatusController() {
- status.addListener(_statusChanged);
- }
-
- ValueNotifier<AnalysisStatus> status =
- ValueNotifier<AnalysisStatus>(AnalysisStatus.notStarted);
-
- ValueNotifier<String> message = ValueNotifier('');
-
- void reset() {
- status.value = AnalysisStatus.notStarted;
- message.value = '';
- }
-
- void _statusChanged() async {
- if (status.value == AnalysisStatus.showingResult) {
- await Future.delayed(_showingResultDelay);
- reset();
- }
- }
-
- void dispose() {
- status.dispose();
- message.dispose();
- }
-}
-
-/// Shows [analysisStarter] if the analysis is not started yet and the status
-/// of the process otherwise.
-///
-/// If process is completed successfully, keeps the status for
-/// [_showingResultDelay] and then shows [analysisStarter].
-/// If the process ended up with error, show the error and two buttons
-/// (Copy ans OK). After user clicks [OK], shows [analysisStarter].
-class AnalysisStatusView extends StatelessWidget {
- const AnalysisStatusView({
- Key? key,
- required this.controller,
- required this.analysisStarter,
- }) : super(key: key);
- final AnalysisStatusController controller;
- final Widget analysisStarter;
-
- @override
- Widget build(BuildContext context) {
- return MultiValueListenableBuilder(
- listenables: [
- controller.status,
- controller.message,
- ],
- builder: (_, values, __) {
- final status = values.first as AnalysisStatus;
- final message = values.second as String;
- if (status == AnalysisStatus.notStarted) {
- return analysisStarter;
- }
-
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.all(denseSpacing),
- child: Text(message),
- ),
- if (status == AnalysisStatus.showingError)
- Row(
- children: [
- CopyToClipboardControl(dataProvider: () => message),
- MaterialButton(
- child: const Text('OK'),
- onPressed: () => controller.reset(),
- ),
- ],
- ),
- ],
- );
- },
- );
- }
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/simple_items.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/simple_items.dart
deleted file mode 100644
index 1f22323..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/primitives/simple_items.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-enum AppStatus {
- leakTrackingNotSupported,
- noCommunicationsReceived,
- unsupportedProtocolVersion,
- leakTrackingStarted,
- leaksFound,
-}
-
-/// We may use https://pub.dev/packages/vendor to support previous versions of leak_tracker.
-const supportedLeakTrackingProtocols = <String>{'1'};
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/leaks/widgets/simple_widgets.dart b/packages/devtools_app/lib/src/screens/memory/panes/leaks/widgets/simple_widgets.dart
deleted file mode 100644
index 049fc80..0000000
--- a/packages/devtools_app/lib/src/screens/memory/panes/leaks/widgets/simple_widgets.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/material.dart';
-
-import '../../../../../shared/analytics/constants.dart' as gac;
-import '../../../../../shared/common_widgets.dart';
-import '../../../shared/primitives/simple_elements.dart';
-import '../controller.dart';
-import '../diagnostics/formatter.dart';
-
-class LeaksHelpLink extends StatelessWidget {
- const LeaksHelpLink({Key? key}) : super(key: key);
-
- static const _documentationTopic = 'leaks';
-
- @override
- Widget build(BuildContext context) {
- return HelpButtonWithDialog(
- gaScreen: gac.memory,
- gaSelection: gac.topicDocumentationButton(_documentationTopic),
- dialogTitle: 'Memory Leak Detection Help',
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- const Text('Use the memory leak detection tab to detect\n'
- 'and troubleshoot some types of memory leaks.'),
- MoreInfoLink(
- url: linkToGuidance,
- gaScreenName: gac.memory,
- gaSelectedItemDescription:
- gac.topicDocumentationLink(_documentationTopic),
- ),
- ],
- ),
- );
- }
-}
-
-class AnalyzeButton extends StatelessWidget {
- const AnalyzeButton({Key? key, required this.leaksController})
- : super(key: key);
-
- final LeaksPaneController leaksController;
-
- @override
- Widget build(BuildContext context) {
- return GaDevToolsButton(
- label: 'Analyze and Download',
- icon: Icons.file_download,
- tooltip: 'Analyze the leaks and download the result\n'
- 'to ${yamlFilePrefix}_<time>.yaml.',
- onPressed: () async => await leaksController.requestLeaksAndSaveToYaml(),
- gaScreen: gac.memory,
- gaSelection: gac.MemoryEvent.leaksAnalyze,
- minScreenWidthForTextBeforeScaling: memoryControlsMinVerboseWidth,
- );
- }
-}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart b/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart
index 124bfee..a5aaab3 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart
@@ -33,7 +33,6 @@
Widget build(BuildContext context) {
return InstanceViewWithContextMenu(
count: count,
- gaContext: gaContext,
menuBuilder: _shouldShowMenu ? _buildHeapInstancesMenu : null,
);
}
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart b/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart
index 4c51a2d..bd80542 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart
@@ -58,6 +58,7 @@
BuildContext context,
ProfileRecord data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
if (data.isTotal) return null;
@@ -137,6 +138,7 @@
BuildContext context,
ProfileRecord data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return ProfileInstanceTableCell(
@@ -643,11 +645,12 @@
return ValueListenableBuilder<AdaptedProfile?>(
valueListenable: allocationProfileController.currentAllocationProfile,
builder: (context, currentAllocationProfile, _) {
- return ToCsvButton(
+ return DownloadButton(
gaScreen: gac.memory,
gaSelection: gac.MemoryEvent.profileDownloadCsv,
minScreenWidthForTextBeforeScaling: memoryControlsMinVerboseWidth,
tooltip: 'Download allocation profile data in CSV format',
+ label: 'CSV',
onPressed: currentAllocationProfile == null
? null
: () => allocationProfileController
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart b/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart
index 483ce3f..64db6f2 100644
--- a/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart
+++ b/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart
@@ -41,6 +41,7 @@
BuildContext context,
TracedClass item, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return Checkbox(
@@ -85,6 +86,7 @@
BuildContext context,
TracedClass data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return HeapClassView(
diff --git a/packages/devtools_app/lib/src/screens/memory/shared/heap/model.dart b/packages/devtools_app/lib/src/screens/memory/shared/heap/model.dart
index 398de6a..dc92b9e 100644
--- a/packages/devtools_app/lib/src/screens/memory/shared/heap/model.dart
+++ b/packages/devtools_app/lib/src/screens/memory/shared/heap/model.dart
@@ -11,6 +11,7 @@
import '../../../../shared/memory/adapted_heap_data.dart';
import '../../../../shared/memory/class_name.dart';
import '../../../../shared/primitives/utils.dart';
+import '../primitives/memory_timeline.dart';
import '../primitives/memory_utils.dart';
/// Heap path represented by classes only, without object details.
@@ -106,25 +107,26 @@
/// This class is needed to make the snapshot taking operation mockable.
class SnapshotTaker {
+ SnapshotTaker(this._timeline);
+
+ final MemoryTimeline? _timeline;
+
Future<AdaptedHeapData?> take() async {
final snapshot = await snapshotMemoryInSelectedIsolate();
+ _timeline?.addSnapshotEvent();
if (snapshot == null) return null;
- final result =
- await _adaptSnapshotGaWrapper(snapshot, isolateId: selectedIsolateId!);
+ final result = await _adaptSnapshotGaWrapper(snapshot);
return result;
}
}
-Future<AdaptedHeapData> _adaptSnapshotGaWrapper(
- HeapSnapshotGraph graph, {
- required String isolateId,
-}) async {
+Future<AdaptedHeapData> _adaptSnapshotGaWrapper(HeapSnapshotGraph graph) async {
late final AdaptedHeapData result;
await ga.timeAsync(
gac.memory,
gac.MemoryTime.adaptSnapshot,
- asyncOperation: () async => result =
- await AdaptedHeapData.fromHeapSnapshot(graph, isolateId: isolateId),
+ asyncOperation: () async =>
+ result = await AdaptedHeapData.fromHeapSnapshot(graph),
screenMetricsProvider: () => MemoryScreenMetrics(
heapObjectsTotal: graph.objects.length,
),
diff --git a/packages/devtools_app/lib/src/screens/memory/shared/primitives/instance_context_menu.dart b/packages/devtools_app/lib/src/screens/memory/shared/primitives/instance_context_menu.dart
index fe449f7..1e690e9 100644
--- a/packages/devtools_app/lib/src/screens/memory/shared/primitives/instance_context_menu.dart
+++ b/packages/devtools_app/lib/src/screens/memory/shared/primitives/instance_context_menu.dart
@@ -4,7 +4,6 @@
import 'package:flutter/material.dart';
-import '../../../../shared/analytics/constants.dart';
import '../../../../shared/common_widgets.dart';
import '../../../../shared/primitives/utils.dart';
@@ -15,13 +14,11 @@
const InstanceViewWithContextMenu({
super.key,
required this.count,
- required this.gaContext,
required this.menuBuilder,
}) : assert(count >= 0);
final int count;
final MenuBuilder? menuBuilder;
- final MemoryAreas gaContext;
@override
Widget build(BuildContext context) {
diff --git a/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart b/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart
index 82b6ab3..02f17c3 100644
--- a/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart
+++ b/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart
@@ -5,13 +5,10 @@
import 'package:devtools_shared/devtools_shared.dart';
import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
-import 'package:logging/logging.dart';
import 'package:vm_service/vm_service.dart';
import '../../../../shared/primitives/utils.dart';
-final _log = Logger('memory_timeline');
-
enum ContinuesState {
none,
start,
@@ -21,36 +18,6 @@
/// All Raw data received from the VM and offline data loaded from a memory log file.
class MemoryTimeline {
- /// Version of timeline data (HeapSample) JSON payload.
- static const version = 1;
-
- /// Keys used in a map to store all the MPChart Entries we construct to be plotted.
- static const capacityValueKey = 'capacityValue';
- static const usedValueKey = 'usedValue';
- static const externalValueKey = 'externalValue';
- static const rssValueKey = 'rssValue';
- static const rasterLayerValueKey = 'rasterLayerValue';
- static const rasterPictureValueKey = 'rasterPictureValue';
-
- /// Keys used in a map to store all the MPEngineChart Entries we construct to be plotted,
- /// ADB memory info.
- static const javaHeapValueKey = 'javaHeapValue';
- static const nativeHeapValueKey = 'nativeHeapValue';
- static const codeValueKey = 'codeValue';
- static const stackValueKey = 'stackValue';
- static const graphicsValueKey = 'graphicsValue';
- static const otherValueKey = 'otherValue';
- static const systemValueKey = 'systemValue';
- static const totalValueKey = 'totalValue';
-
- static const gcUserEventKey = 'gcUserEvent';
- static const gcVmEventKey = 'gcVmEvent';
- static const snapshotEventKey = 'snapshotEvent';
- static const snapshotAutoEventKey = 'snapshotAutoEvent';
- static const monitorStartEventKey = 'monitorStartEvent';
- static const monitorContinuesEventKey = 'monitorContinuesEvent';
- static const monitorResetEventKey = 'monitorResetEvent';
-
static const delayMs = 500;
static const Duration updateDelay = Duration(milliseconds: delayMs);
@@ -137,52 +104,6 @@
);
}
- void addMonitorStartEvent() {
- final timestamp = DateTime.now().millisecondsSinceEpoch;
- postEventSample(
- EventSample.accumulatorStart(
- timestamp,
- events: extensionEvents,
- ),
- );
- }
-
- void addMonitorResetEvent() {
- final timestamp = DateTime.now().millisecondsSinceEpoch;
- // TODO(terry): Enable to make continuous events visible?
- // displayContinuousEvents();
-
- postEventSample(
- EventSample.accumulatorReset(
- timestamp,
- events: extensionEvents,
- ),
- );
- }
-
- void displayContinuousEvents() {
- for (var index = liveData.length - 1; index >= 0; index--) {
- final sample = liveData[index];
- if (sample.memoryEventInfo.isEventAllocationAccumulator) {
- final allocationAccumulator =
- sample.memoryEventInfo.allocationAccumulator!;
- if (allocationAccumulator.isReset || allocationAccumulator.isStart) {
- for (var flipIndex = index + 1;
- flipIndex < liveData.length;
- flipIndex++) {
- final continuousEvent = liveData[flipIndex];
- assert(
- continuousEvent
- .memoryEventInfo.allocationAccumulator!.isContinues,
- );
- continuousEvent
- .memoryEventInfo.allocationAccumulator!.continuesVisible = true;
- }
- }
- }
- }
- }
-
bool get anyEvents => peekEventTimestamp != -1;
/// Peek at next event to pull, if no event return -1 timestamp.
@@ -205,48 +126,11 @@
/// Whether the timeline has been manually paused via the Pause button.
bool manuallyPaused = false;
- /// Notifies that the timeline has been paused.
- final _pausedNotifier = ValueNotifier<bool>(false);
-
- ValueNotifier<bool> get pausedNotifier => _pausedNotifier;
-
- void pause({bool manual = false}) {
- manuallyPaused = manual;
- _pausedNotifier.value = true;
- }
-
- void resume() {
- manuallyPaused = false;
- _pausedNotifier.value = false;
- }
-
- /// Notifies any visible marker for a particular chart should be hidden.
- final _markerHiddenNotifier = ValueNotifier<bool>(false);
-
- ValueListenable<bool> get markerHiddenNotifier => _markerHiddenNotifier;
-
- void hideMarkers() {
- _markerHiddenNotifier.value = !_markerHiddenNotifier.value;
- }
-
void reset() {
liveData.clear();
startingIndex = 0;
}
- /// Y-coordinate of an Event entry to not display (the no event state).
- static const emptyEvent = -2.0; // Event (empty) to not visibly display.
-
- /// Event to display in the event pane (User initiated GC, snapshot,
- /// automatic snapshot, etc.)
- static const visibleEvent = 1.7;
-
- /// Monitor events Y axis.
- static const visibleMonitorEvent = 0.85;
-
- /// VM's GCs are displayed in a smaller glyph and closer to the heap graph.
- static const visibleVmEvent = 0.2;
-
/// Common utility function to handle loading of the data into the
/// chart for either offline or live Feed.
@@ -255,39 +139,6 @@
static String fineGrainTimestampFormat(int timestamp) =>
_milliFormat.format(DateTime.fromMillisecondsSinceEpoch(timestamp));
- void computeStartingIndex(int displayInterval) {
- // Compute a new starting index from length - N minutes.
- final timeLastSample = data.last.timestamp;
- var dataIndex = data.length - 1;
- for (; dataIndex > 0; dataIndex--) {
- final sample = data[dataIndex];
- final timestamp = sample.timestamp;
-
- if ((timeLastSample - timestamp) > displayInterval) break;
- }
-
- startingIndex = dataIndex;
-
- // Debugging data - to enable remove logical not operator.
- // ignore: dead_code
- if (!true) {
- final DateFormat mFormat = DateFormat('HH:mm:ss.SSS');
- final startDT = mFormat.format(
- DateTime.fromMillisecondsSinceEpoch(
- data[startingIndex].timestamp.toInt(),
- ),
- );
- final endDT = mFormat.format(
- DateTime.fromMillisecondsSinceEpoch(
- data[endingIndex].timestamp.toInt(),
- ),
- );
- _log.info(
- 'Recompute Time range Offline data start: $startDT, end: $endDT',
- );
- }
- }
-
void addSample(HeapSample sample) {
// Always record the heap sample in the raw set of data (liveFeed).
liveData.add(sample);
diff --git a/packages/devtools_app/lib/src/screens/network/network_controller.dart b/packages/devtools_app/lib/src/screens/network/network_controller.dart
index 7ac856e..026fcfc 100644
--- a/packages/devtools_app/lib/src/screens/network/network_controller.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_controller.dart
@@ -126,7 +126,6 @@
List<HttpProfileRequest>? httpRequests,
int timelineMicrosOffset, {
required CurrentNetworkRequests currentRequests,
- required List<DartIOHttpRequestData> invalidRequests,
}) {
currentRequests.updateWebSocketRequests(sockets, timelineMicrosOffset);
@@ -146,7 +145,6 @@
return NetworkRequests(
requests: currentRequests.requests,
- invalidHttpRequests: invalidRequests,
);
}
@@ -160,7 +158,6 @@
httpRequests,
_timelineMicrosOffset,
currentRequests: _currentNetworkRequests,
- invalidRequests: [],
);
_filterAndRefreshSearchMatches();
_updateSelection();
@@ -236,7 +233,8 @@
final service = serviceConnection.serviceManager.service!;
await service.forEachIsolate(
(isolate) async {
- final httpFuture = service.httpEnableTimelineLogging(isolate.id!);
+ final httpFuture =
+ service.httpEnableTimelineLoggingWrapper(isolate.id!);
// The above call won't complete immediately if the isolate is paused,
// so give up waiting after 500ms.
final state = await timeout(httpFuture, 500);
diff --git a/packages/devtools_app/lib/src/screens/network/network_model.dart b/packages/devtools_app/lib/src/screens/network/network_model.dart
index 588aafd..61bd8e6 100644
--- a/packages/devtools_app/lib/src/screens/network/network_model.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_model.dart
@@ -4,7 +4,6 @@
import 'package:vm_service/vm_service.dart';
-import '../../shared/http/http_request_data.dart';
import '../../shared/primitives/utils.dart';
import '../../shared/ui/search.dart';
@@ -62,7 +61,7 @@
String toString() => '$method $uri';
@override
- bool operator ==(Object? other) {
+ bool operator ==(Object other) {
return other is NetworkRequest &&
runtimeType == other.runtimeType &&
startTimestamp == other.startTimestamp &&
@@ -175,7 +174,7 @@
bool get inProgress => false;
@override
- bool operator ==(Object? other) => other is WebSocket && id == other.id;
+ bool operator ==(Object other) => other is WebSocket && id == other.id;
@override
int get hashCode => id.hashCode;
@@ -185,21 +184,10 @@
class NetworkRequests {
NetworkRequests({
this.requests = const [],
- this.invalidHttpRequests = const [],
});
/// A list of network requests.
///
/// Individual requests in this list can be either completed or in-progress.
List<NetworkRequest> requests;
-
- /// A list of invalid HTTP requests received.
- ///
- /// These are requests that have completed but do not contain all the required
- /// information to display normally in the UI.
- List<DartIOHttpRequestData> invalidHttpRequests;
-
- void clear() {
- requests.clear();
- }
}
diff --git a/packages/devtools_app/lib/src/screens/network/network_request_inspector_views.dart b/packages/devtools_app/lib/src/screens/network/network_request_inspector_views.dart
index d137d52..e5a7d74 100644
--- a/packages/devtools_app/lib/src/screens/network/network_request_inspector_views.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_request_inspector_views.dart
@@ -70,7 +70,11 @@
'General',
[
for (final entry in general.entries)
- _Row(entry: entry, constraints: constraints),
+ _Row(
+ entry: entry,
+ constraints: constraints,
+ isErrorValue: data.didFail && entry.key == 'statusCode',
+ ),
],
key: generalKey,
),
@@ -103,10 +107,12 @@
const _Row({
required this.entry,
required this.constraints,
+ this.isErrorValue = false,
});
final MapEntry<String, Object?> entry;
final BoxConstraints constraints;
+ final bool isErrorValue;
@override
Widget build(BuildContext context) {
@@ -122,6 +128,9 @@
),
Expanded(
child: SelectableText(
+ style: isErrorValue
+ ? TextStyle(color: Theme.of(context).colorScheme.error)
+ : null,
'${entry.value}',
minLines: 1,
),
@@ -152,9 +161,14 @@
);
}
- final isJson = requestContentType is List
- ? requestContentType.any((element) => element.contains('json'))
- : requestContentType.contains('json');
+ final isJson = switch (requestContentType) {
+ List() => requestContentType.any((e) => e.contains('json')),
+ String() => requestContentType.contains('json'),
+ _ => throw StateError(
+ "Expected 'content-type' to be a List or String, but got: "
+ '$requestContentType',
+ ),
+ };
Widget child;
child = isJson
@@ -654,7 +668,12 @@
_buildRow(
context: context,
title: 'Status',
- child: _valueText(data.status ?? '--'),
+ child: _valueText(
+ data.status ?? '--',
+ data.didFail
+ ? TextStyle(color: Theme.of(context).colorScheme.error)
+ : null,
+ ),
),
const SizedBox(height: defaultSpacing),
if (data.port != null) ...[
@@ -897,8 +916,9 @@
);
}
- Widget _valueText(String value) {
+ Widget _valueText(String value, [TextStyle? style]) {
return SelectableText(
+ style: style,
value,
minLines: 1,
);
diff --git a/packages/devtools_app/lib/src/screens/network/network_screen.dart b/packages/devtools_app/lib/src/screens/network/network_screen.dart
index d72610d..6296dde 100644
--- a/packages/devtools_app/lib/src/screens/network/network_screen.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_screen.dart
@@ -42,8 +42,7 @@
@override
Widget buildStatus(BuildContext context) {
final networkController = Provider.of<NetworkController>(context);
- final color = Theme.of(context).textTheme.bodyMedium!.color!;
-
+ final color = Theme.of(context).colorScheme.onPrimary;
return MultiValueListenableBuilder(
listenables: [
networkController.requests,
@@ -380,6 +379,7 @@
BuildContext context,
NetworkRequest data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final value = getDisplayValue(data);
@@ -461,6 +461,7 @@
BuildContext context,
NetworkRequest data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final options = _buildOptions(data);
@@ -503,6 +504,7 @@
BuildContext context,
NetworkRequest data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final theme = Theme.of(context);
diff --git a/packages/devtools_app/lib/src/screens/network/network_service.dart b/packages/devtools_app/lib/src/screens/network/network_service.dart
index a05de18..963a296 100644
--- a/packages/devtools_app/lib/src/screens/network/network_service.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_service.dart
@@ -57,7 +57,7 @@
final requests = <HttpProfileRequest>[];
await service.forEachIsolate((isolate) async {
- final request = await service.getHttpProfile(
+ final request = await service.getHttpProfileWrapper(
isolate.id!,
updatedSince: networkController.lastRefreshMicros,
);
@@ -70,7 +70,7 @@
final service = serviceConnection.serviceManager.service;
if (service == null) return;
await service.forEachIsolate((isolate) async {
- final future = service.clearHttpProfile(isolate.id!);
+ final future = service.clearHttpProfileWrapper(isolate.id!);
// The above call won't complete immediately if the isolate is paused, so
// give up waiting after 500ms. However, the call will complete eventually
// if the isolate is eventually resumed.
@@ -85,7 +85,7 @@
if (service == null) return [];
final sockets = <SocketStatistic>[];
await service.forEachIsolate((isolate) async {
- final socketProfile = await service.getSocketProfile(isolate.id!);
+ final socketProfile = await service.getSocketProfileWrapper(isolate.id!);
sockets.addAll(socketProfile.sockets);
});
@@ -108,9 +108,9 @@
await service.forEachIsolate((isolate) async {
final isolateId = isolate.id!;
final socketProfilingAvailable =
- await service.isSocketProfilingAvailable(isolateId);
+ await service.isSocketProfilingAvailableWrapper(isolateId);
if (socketProfilingAvailable) {
- final future = service.clearSocketProfile(isolateId);
+ final future = service.clearSocketProfileWrapper(isolateId);
// The above call won't complete immediately if the isolate is paused, so
// give up waiting after 500ms. However, the call will complete eventually
// if the isolate is eventually resumed.
@@ -128,9 +128,9 @@
await service.forEachIsolate((isolate) async {
final isolateId = isolate.id!;
final socketProfilingAvailable =
- await service.isSocketProfilingAvailable(isolateId);
+ await service.isSocketProfilingAvailableWrapper(isolateId);
if (socketProfilingAvailable) {
- final future = service.socketProfilingEnabled(isolateId, state);
+ final future = service.socketProfilingEnabledWrapper(isolateId, state);
// The above call won't complete immediately if the isolate is paused, so
// give up waiting after 500ms. However, the call will complete eventually
// if the isolate is eventually resumed.
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_controller.dart b/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_controller.dart
index 32481b1..be1c98a 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_controller.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_controller.dart
@@ -17,6 +17,7 @@
extensions.profileUserWidgetBuilds,
extensions.profileRenderObjectLayouts,
extensions.profileRenderObjectPaints,
+ extensions.profilePlatformChannels,
];
class EnhanceTracingController extends DisposableController
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_model.dart b/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_model.dart
index 6d7310a..3530302 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_model.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing_model.dart
@@ -18,8 +18,6 @@
final bool layouts;
final bool paints;
- bool get enhanced => builds || layouts || paints;
-
bool enhancedFor(FramePhaseType type) {
switch (type) {
case FramePhaseType.build:
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/controls/performance_controls.dart b/packages/devtools_app/lib/src/screens/performance/panes/controls/performance_controls.dart
index cbe34d1..617f975 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/controls/performance_controls.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/controls/performance_controls.dart
@@ -12,7 +12,9 @@
import '../../../../shared/analytics/analytics.dart' as ga;
import '../../../../shared/analytics/constants.dart' as gac;
import '../../../../shared/common_widgets.dart';
+import '../../../../shared/file_import.dart';
import '../../../../shared/globals.dart';
+import '../../../../shared/screen.dart';
import '../../panes/timeline_events/timeline_events_controller.dart';
import '../../performance_controller.dart';
import 'enhance_tracing/enhance_tracing.dart';
@@ -26,7 +28,7 @@
required this.onClear,
});
- static const minScreenWidthForTextBeforeScaling = 1020.0;
+ static const minScreenWidthForTextBeforeScaling = 1085.0;
final PerformanceController controller;
@@ -146,12 +148,9 @@
const MoreDebuggingOptionsButton(),
],
const SizedBox(width: denseSpacing),
- GaDevToolsButton.iconOnly(
- icon: Icons.file_download,
- gaScreen: gac.performance,
- gaSelection: gac.export,
- tooltip: 'Export data',
- onPressed: _exportPerformanceData,
+ OpenSaveButtonGroup(
+ screenId: ScreenMetaData.performance.id,
+ onSave: controller.exportData,
),
const SizedBox(width: denseSpacing),
SettingsOutlinedButton(
@@ -163,13 +162,6 @@
);
}
- void _exportPerformanceData() {
- ga.select(gac.performance, gac.export);
- controller.exportData();
- // TODO(kenz): investigate if we need to do any error handling here. Is the
- // download always successful?
- }
-
void _openSettingsDialog(BuildContext context) {
unawaited(
showDialog(
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart
index 220cea0..bb55f54 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart
@@ -128,13 +128,6 @@
event.frameId = id;
}
- TimelineEvent? findTimelineEvent(TimelineEvent event) {
- final frameTimelineEvent = timelineEventData.eventByType(event.type);
- return frameTimelineEvent?.firstChildWithCondition(
- (e) => e.name == event.name && e.time == event.time,
- );
- }
-
bool isJanky(double displayRefreshRate) {
return isUiJanky(displayRefreshRate) || isRasterJanky(displayRefreshRate);
}
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart
index f293f17..c801532 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart
@@ -33,12 +33,15 @@
this.framesController, {
super.key,
required this.offlineMode,
+ required this.impellerEnabled,
});
final FlutterFramesController framesController;
final bool offlineMode;
+ final bool impellerEnabled;
+
@override
Widget build(BuildContext context) {
return MultiValueListenableBuilder(
@@ -57,6 +60,7 @@
displayRefreshRate: displayRefreshRate,
isVisible: showChart,
offlineMode: offlineMode,
+ impellerEnabled: impellerEnabled,
);
},
);
@@ -70,6 +74,7 @@
required this.displayRefreshRate,
required this.isVisible,
required this.offlineMode,
+ required this.impellerEnabled,
});
final FlutterFramesController framesController;
@@ -82,6 +87,8 @@
final bool offlineMode;
+ final bool impellerEnabled;
+
static double get frameNumberSectionHeight => scaleByFontFactor(20.0);
static double get frameChartScrollbarOffset => defaultScrollBarOffset;
@@ -151,6 +158,7 @@
frames: widget.frames,
displayRefreshRate: widget.displayRefreshRate,
constraints: constraints,
+ impellerEnabled: widget.impellerEnabled,
);
},
),
@@ -165,6 +173,7 @@
frames: widget.frames,
displayRefreshRate: widget.displayRefreshRate,
offlineMode: widget.offlineMode,
+ impellerEnabled: widget.impellerEnabled,
),
),
],
@@ -181,6 +190,7 @@
required this.frames,
required this.displayRefreshRate,
required this.constraints,
+ required this.impellerEnabled,
});
final FlutterFramesController framesController;
@@ -191,6 +201,8 @@
final BoxConstraints constraints;
+ final bool impellerEnabled;
+
@override
State<FramesChart> createState() => _FramesChartState();
}
@@ -332,6 +344,14 @@
child: chart,
),
fpsLinePainter,
+ Positioned(
+ right: denseSpacing,
+ top: densePadding,
+ child: Text(
+ 'Engine: ${widget.impellerEnabled ? 'Impeller' : 'Skia'}',
+ style: themeData.subtleChartTextStyle,
+ ),
+ ),
],
);
}
@@ -345,6 +365,7 @@
required this.frames,
required this.displayRefreshRate,
required this.offlineMode,
+ required this.impellerEnabled,
});
static const _pauseTooltip = 'Pause Flutter frame recording';
@@ -359,6 +380,8 @@
final bool offlineMode;
+ final bool impellerEnabled;
+
@override
Widget build(BuildContext context) {
return Column(
@@ -387,10 +410,11 @@
const LegendEntry('Frame Time (UI)', mainUiColor),
const LegendEntry('Frame Time (Raster)', mainRasterColor),
const LegendEntry('Jank (slow frame)', uiJankColor),
- LegendEntry(
- 'Shader Compilation',
- shaderCompilationColor.background,
- ),
+ if (!impellerEnabled)
+ LegendEntry(
+ 'Shader Compilation',
+ shaderCompilationColor.background,
+ ),
],
),
AverageFPS(
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis.dart b/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis.dart
index 8d92741..0656687 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis.dart
@@ -35,7 +35,13 @@
final frameAnalysis = this.frameAnalysis;
if (frameAnalysis == null) {
return const Center(
- child: Text('No analysis data available for this frame.'),
+ child: Text(
+ 'No analysis data available for this frame. This means that the '
+ 'timeline events\nfor this frame occurred too long ago and DevTools '
+ 'could not access them.\n\nTo avoid this, open the DevTools Performance '
+ 'page earlier.',
+ textAlign: TextAlign.center,
+ ),
);
}
final rebuilds = rebuildCountModel.rebuildsForFrame(frameAnalysis.frame.id);
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/raster_stats/raster_stats.dart b/packages/devtools_app/lib/src/screens/performance/panes/raster_stats/raster_stats.dart
index b963d16..12d66f9 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/raster_stats/raster_stats.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/raster_stats/raster_stats.dart
@@ -297,9 +297,16 @@
);
final scaledSize = _scaledLayerSize(scaleFactor);
final scaledOffset = _scaledLayerOffset(scaleFactor);
+ final theme = Theme.of(context);
return Stack(
children: [
- Image.memory(snapshot.bytes),
+ CustomPaint(
+ painter: _CheckerBoardBackgroundPainter(
+ theme.colorScheme.background,
+ theme.colorScheme.outlineVariant,
+ ),
+ child: Image.memory(snapshot.bytes),
+ ),
Positioned(
left: scaledOffset.dx,
top: scaledOffset.dy,
@@ -428,3 +435,50 @@
);
}
}
+
+class _CheckerBoardBackgroundPainter extends CustomPainter {
+ _CheckerBoardBackgroundPainter(Color color1, Color color2)
+ : _color1 = color1,
+ _color2 = color2;
+
+ final Color _color1;
+ final Color _color2;
+ final _squareSize = 20.0;
+
+ @override
+ void paint(Canvas canvas, Size size) {
+ canvas.clipRect(Rect.fromLTWH(0, 0, size.width, size.height));
+ final backgroundPaint = Paint()
+ ..color = _color1
+ ..style = PaintingStyle.fill;
+ final checkerPaint = Paint()
+ ..color = _color2
+ ..style = PaintingStyle.fill;
+
+ canvas.drawRect(
+ Rect.fromLTWH(0, 0, size.width, size.height),
+ backgroundPaint,
+ );
+
+ bool flipper = true;
+
+ for (var x = 0.0; x < size.width; x += _squareSize) {
+ for (var y = 0.0; y < size.height; y += _squareSize * 2) {
+ double dy = y;
+ if (flipper) {
+ dy += _squareSize;
+ }
+ canvas.drawRect(
+ Rect.fromLTWH(x, dy, _squareSize, _squareSize),
+ checkerPaint,
+ );
+ }
+ flipper = !flipper;
+ }
+ }
+
+ @override
+ bool shouldRepaint(covariant CustomPainter oldDelegate) {
+ return false;
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/legacy/timeline_flame_chart.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/legacy/timeline_flame_chart.dart
index 3a5638a..66fd2b1 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/legacy/timeline_flame_chart.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/legacy/timeline_flame_chart.dart
@@ -381,7 +381,7 @@
notificationService.push(
'No timeline events available for the selected frame. Timeline '
'events occurred too long ago before DevTools could access them. '
- 'To avoid this, open the DevTools Performance page sooner.',
+ 'To avoid this, open the DevTools Performance page earlier.',
);
return;
}
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart
index 93a6593..07ae519 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart
@@ -3,11 +3,10 @@
// found in the LICENSE file.
import 'dart:async';
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html' as html;
import 'dart:ui_web' as ui_web;
import 'package:flutter/foundation.dart';
+import 'package:web/helpers.dart';
import '../../../../../shared/globals.dart';
import '../../../../../shared/primitives/trace_event.dart';
@@ -119,8 +118,8 @@
return _debugPerfettoUrl;
}
final basePath = devtoolsAssetsBasePath(
- origin: html.window.location.origin,
- path: html.window.location.pathname ?? '',
+ origin: window.location.origin,
+ path: window.location.pathname,
);
final indexFilePath = ui_web.assetManager
.getAssetUrl(devToolsExtensionPoints.perfettoIndexLocation);
@@ -128,9 +127,9 @@
return '$baseUrl$_embeddedModeQuery';
}
- html.IFrameElement get perfettoIFrame => _perfettoIFrame;
+ HTMLIFrameElement get perfettoIFrame => _perfettoIFrame;
- late final html.IFrameElement _perfettoIFrame;
+ late final HTMLIFrameElement _perfettoIFrame;
/// The set of trace events that should be shown in the Perfetto trace viewer.
///
@@ -165,7 +164,7 @@
);
_initialized = true;
- _perfettoIFrame = html.IFrameElement()
+ _perfettoIFrame = createIFrameElement()
// This url is safe because we built it ourselves and it does not include
// any user input.
// ignore: unsafe_html
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart
index a2496aa..5517750 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart
@@ -4,12 +4,13 @@
import 'dart:async';
import 'dart:convert';
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html' as html;
+import 'dart:js_interop';
import 'package:devtools_app_shared/utils.dart';
+import 'package:devtools_app_shared/web_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
+import 'package:web/helpers.dart';
import '../../../../../shared/analytics/analytics.dart' as ga;
import '../../../../../shared/analytics/constants.dart' as gac;
@@ -119,12 +120,12 @@
static const _pollUntilReadyTimeout = Duration(seconds: 10);
- /// The listener that is added to DevTools' [html.window] to receive messages
+ /// The listener that is added to DevTools' [window] to receive messages
/// from the Perfetto iFrame.
///
/// We need to store this in a variable so that the listener is properly
/// removed in [dispose].
- html.EventListener? _handleMessageListener;
+ EventListener? _handleMessageListener;
void init() {
_perfettoIFrameReady = Completer<void>();
@@ -137,9 +138,9 @@
}),
);
- html.window.addEventListener(
+ window.addEventListener(
'message',
- _handleMessageListener = _handleMessage,
+ _handleMessageListener = _handleMessage.toJS,
);
unawaited(_loadStyle(preferences.darkModeTheme.value));
@@ -182,7 +183,7 @@
notificationService.push(
'No timeline events available for the selected frame. Timeline '
'events occurred too long ago before DevTools could access them. '
- 'To avoid this, open the DevTools Performance page sooner.',
+ 'To avoid this, open the DevTools Performance page earlier.',
);
return;
}
@@ -244,8 +245,8 @@
' _perfettoIFrameReady future completed.',
);
perfettoController.perfettoIFrame.contentWindow!.postMessage(
- message,
- perfettoController.perfettoUrl,
+ message.jsify(),
+ perfettoController.perfettoUrl.toJS,
);
}
@@ -261,14 +262,15 @@
_postMessage(message);
}
- void _handleMessage(html.Event e) {
- if (e is html.MessageEvent) {
- if (e.data == EmbeddedPerfettoEvent.pong.event &&
+ void _handleMessage(Event e) {
+ if (e.isMessageEvent) {
+ final messageData = ((e as MessageEvent).data as JSString).toDart;
+ if (messageData == EmbeddedPerfettoEvent.pong.event &&
!_perfettoHandlerReady.isCompleted) {
_perfettoHandlerReady.complete();
}
- if (e.data == EmbeddedPerfettoEvent.devtoolsThemePong.event &&
+ if (messageData == EmbeddedPerfettoEvent.devtoolsThemePong.event &&
!_devtoolsThemeHandlerReady.isCompleted) {
_devtoolsThemeHandlerReady.complete();
}
@@ -315,7 +317,7 @@
@override
void dispose() {
- html.window.removeEventListener('message', _handleMessageListener);
+ window.removeEventListener('message', _handleMessageListener);
_handleMessageListener = null;
_pollForPerfettoHandlerReady?.cancel();
_pollForThemeHandlerReady?.cancel();
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto.dart
index ec1ccaf..c4e1580 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto.dart
@@ -6,7 +6,8 @@
import '../../../../../shared/analytics/constants.dart' as gac;
import '../../../../../shared/common_widgets.dart';
-import '_perfetto_desktop.dart' if (dart.library.html) '_perfetto_web.dart';
+import '_perfetto_desktop.dart'
+ if (dart.library.js_interop) '_perfetto_web.dart';
import 'perfetto_controller.dart';
class EmbeddedPerfetto extends StatelessWidget {
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto_controller.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto_controller.dart
index 87e174f..f65fb88 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto_controller.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/perfetto_controller.dart
@@ -9,7 +9,7 @@
import '../../../performance_controller.dart';
import '../timeline_events_controller.dart';
import '_perfetto_controller_desktop.dart'
- if (dart.library.html) '_perfetto_controller_web.dart';
+ if (dart.library.js_interop) '_perfetto_controller_web.dart';
import 'perfetto_event_processor.dart';
PerfettoControllerImpl createPerfettoController(
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart
index 7ccee6d..7216aa2 100644
--- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart
+++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
+import 'package:vm_service/vm_service.dart' as vm_service;
import '../../../../shared/analytics/analytics.dart' as ga;
import '../../../../shared/analytics/constants.dart' as gac;
@@ -170,7 +171,7 @@
_nextPollStartMicros = currentVmTime.timestamp! + 1;
final newThreadNameEvents = <ThreadNameEvent>[];
- for (final event in timeline.traceEvents ?? []) {
+ for (final event in timeline.traceEvents ?? <vm_service.TimelineEvent>[]) {
final traceEvent = TraceEvent(event.json!);
final eventWrapper = TraceEventWrapper(
traceEvent,
diff --git a/packages/devtools_app/lib/src/screens/performance/performance_controller.dart b/packages/devtools_app/lib/src/screens/performance/performance_controller.dart
index 9ba9246..cdd59de 100644
--- a/packages/devtools_app/lib/src/screens/performance/performance_controller.dart
+++ b/packages/devtools_app/lib/src/screens/performance/performance_controller.dart
@@ -100,7 +100,7 @@
PerformanceData? offlinePerformanceData;
bool get impellerEnabled => _impellerEnabled;
- late final bool _impellerEnabled;
+ bool _impellerEnabled = false;
final _initialized = Completer<void>();
@@ -135,7 +135,8 @@
// Listen for Flutter.Frame events with frame timing data.
// Listen for Flutter.RebuiltWidgets events.
autoDisposeStreamSubscription(
- serviceConnection.serviceManager.service!.onExtensionEventWithHistory
+ serviceConnection
+ .serviceManager.service!.onExtensionEventWithHistorySafe
.listen((event) {
if (event.extensionKind == 'Flutter.Frame') {
final frame = FlutterFrame.parse(event.extensionData!.data);
diff --git a/packages/devtools_app/lib/src/screens/performance/performance_model.dart b/packages/devtools_app/lib/src/screens/performance/performance_model.dart
index 83b68f8..f1fdd62 100644
--- a/packages/devtools_app/lib/src/screens/performance/performance_model.dart
+++ b/packages/devtools_app/lib/src/screens/performance/performance_model.dart
@@ -49,14 +49,10 @@
static const selectedEventKey = 'selectedEvent';
- static const timelineModeKey = 'timelineMode';
-
static const uiKey = 'UI';
static const rasterKey = 'Raster';
- static const gcKey = 'GC';
-
static const unknownKey = 'Unknown';
static const displayRefreshRateKey = 'displayRefreshRate';
@@ -126,10 +122,6 @@
_endTimestampMicros = math.max(_endTimestampMicros, event.maxEndMicros);
}
- bool hasCpuProfileData() {
- return cpuProfileData != null && cpuProfileData!.stackFrames.isNotEmpty;
- }
-
void clear() {
traceEvents.clear();
selectedEvent = null;
@@ -293,89 +285,40 @@
class OfflinePerformanceData extends PerformanceData {
OfflinePerformanceData._({
- required List<Map<String, dynamic>>? traceEvents,
- required List<FlutterFrame>? frames,
- FlutterFrame? selectedFrame,
- required int? selectedFrameId,
- required TimelineEvent? selectedEvent,
- required double? displayRefreshRate,
- required CpuProfileData? cpuProfileData,
- required RasterStats? rasterStats,
- required RebuildCountModel? rebuildCountModel,
- }) : _selectedFrameId = selectedFrameId,
- super(
- traceEvents: traceEvents,
- frames: frames,
- selectedFrame: selectedFrame,
- selectedEvent: selectedEvent,
- displayRefreshRate: displayRefreshRate,
- cpuProfileData: cpuProfileData,
- rasterStats: rasterStats,
- rebuildCountModel: rebuildCountModel,
- );
+ required super.traceEvents,
+ required super.frames,
+ required super.selectedFrame,
+ required this.selectedFrameId,
+ required super.selectedEvent,
+ required super.displayRefreshRate,
+ required super.cpuProfileData,
+ required super.rasterStats,
+ required super.rebuildCountModel,
+ });
- static OfflinePerformanceData parse(Map<String, dynamic> json) {
- final List<Map<String, dynamic>> traceEvents =
- (json[PerformanceData.traceEventsKey] ?? [])
- .cast<Map<String, dynamic>>();
+ static OfflinePerformanceData parse(Map<String, Object?> json_) {
+ final json = _PerformanceDataJson(json_);
- final Map<String, dynamic> cpuProfileJson =
- json[PerformanceData.cpuProfileKey] ?? <String, Object>{};
- final CpuProfileData? cpuProfileData =
- cpuProfileJson.isNotEmpty ? CpuProfileData.parse(cpuProfileJson) : null;
-
- final Map<String, dynamic> rasterStatsJson =
- json[PerformanceData.rasterStatsKey] ?? <String, Object>{};
- final RasterStats? rasterStats =
- rasterStatsJson.isNotEmpty ? RasterStats.parse(rasterStatsJson) : null;
-
- final int? selectedFrameId = json[PerformanceData.selectedFrameIdKey];
-
- final List<Map<String, dynamic>> framesJson =
- ((json[PerformanceData.flutterFramesKey] as List?)?.cast<Object>() ??
- [])
- .map((f) => f as Map<String, dynamic>)
- .toList();
- final frames = framesJson
- .map((Map<String, dynamic> f) => FlutterFrame.parse(f))
- .toList();
+ final selectedFrameId = json.selectedFrameId;
+ final frames = json.frames;
final selectedFrame =
frames.firstWhereOrNull((frame) => frame.id == selectedFrameId);
- final Map<String, dynamic> selectedEventJson =
- json[PerformanceData.selectedEventKey] ?? {};
- final OfflineTimelineEvent? selectedEvent = selectedEventJson.isNotEmpty
- ? OfflineTimelineEvent(
- (selectedEventJson[TimelineEvent.firstTraceKey] ?? {})
- .cast<String, Object>(),
- )
- : null;
-
- final displayRefreshRate =
- json[PerformanceData.displayRefreshRateKey] ?? defaultRefreshRate;
-
- final Map<String, dynamic> rebuildCountModelJson =
- json[PerformanceData.rebuildCountModelKey] ?? {};
- final rebuildCountModel = rebuildCountModelJson.isNotEmpty
- ? RebuildCountModel.parse(rebuildCountModelJson)
- : null;
-
return OfflinePerformanceData._(
- traceEvents: traceEvents,
+ traceEvents: json.traceEvents,
selectedFrame: selectedFrame,
selectedFrameId: selectedFrameId,
frames: frames,
- selectedEvent: selectedEvent,
- displayRefreshRate: displayRefreshRate.toDouble(),
- cpuProfileData: cpuProfileData,
- rasterStats: rasterStats,
- rebuildCountModel: rebuildCountModel,
+ selectedEvent: json.selectedEvent,
+ displayRefreshRate: json.displayRefreshRate,
+ cpuProfileData: json.cpuProfile,
+ rasterStats: json.rasterStats,
+ rebuildCountModel: json.rebuildCountModel,
);
}
@override
- int? get selectedFrameId => _selectedFrameId;
- final int? _selectedFrameId;
+ final int? selectedFrameId;
/// Creates a new instance of [OfflinePerformanceData] with references to the
/// same objects contained in this instance.
@@ -399,6 +342,56 @@
}
}
+extension type _PerformanceDataJson(Map<String, Object?> json) {
+ List<Map<String, Object?>> get traceEvents =>
+ (json[PerformanceData.traceEventsKey] as List? ?? [])
+ .cast<Map>()
+ .map((e) => e.cast<String, Object?>())
+ .toList();
+
+ CpuProfileData? get cpuProfile {
+ final raw =
+ (json[PerformanceData.cpuProfileKey] as Map?)?.cast<String, Object>();
+ return raw == null || raw.isEmpty ? null : CpuProfileData.parse(raw);
+ }
+
+ RasterStats? get rasterStats {
+ final raw =
+ (json[PerformanceData.rasterStatsKey] as Map?)?.cast<String, Object>();
+ return raw == null || raw.isEmpty ? null : RasterStats.parse(raw);
+ }
+
+ int? get selectedFrameId => json[PerformanceData.selectedFrameIdKey] as int?;
+
+ List<FlutterFrame> get frames =>
+ (json[PerformanceData.flutterFramesKey] as List? ?? [])
+ .cast<Map>()
+ .map((f) => f.cast<String, dynamic>())
+ .map((f) => FlutterFrame.parse(f))
+ .toList();
+
+ OfflineTimelineEvent? get selectedEvent {
+ final raw = (json[PerformanceData.selectedEventKey] as Map? ?? {})
+ .cast<String, dynamic>();
+
+ if (raw.isEmpty) return null;
+
+ return OfflineTimelineEvent(
+ (raw[TimelineEvent.firstTraceKey] as Map? ?? {}).cast<String, Object>(),
+ );
+ }
+
+ double get displayRefreshRate =>
+ (json[PerformanceData.displayRefreshRateKey] as num?)?.toDouble() ??
+ defaultRefreshRate;
+
+ RebuildCountModel? get rebuildCountModel {
+ final raw = (json[PerformanceData.rebuildCountModelKey] as Map? ?? {})
+ .cast<String, dynamic>();
+ return raw.isNotEmpty ? RebuildCountModel.parse(raw) : null;
+ }
+}
+
/// Wrapper class for [TimelineEvent] that only includes information we need for
/// importing and exporting snapshots.
///
@@ -418,13 +411,13 @@
),
) {
time.end = Duration(
- microseconds: firstTrace[TraceEvent.timestampKey] +
- firstTrace[TraceEvent.durationKey],
+ microseconds: (firstTrace[TraceEvent.timestampKey] as int) +
+ (firstTrace[TraceEvent.durationKey] as int),
);
+ final typeArg =
+ (firstTrace[TraceEvent.argsKey] as Map)[TraceEvent.typeKey].toString();
type = TimelineEventType.values.firstWhere(
- (t) =>
- t.toString() ==
- firstTrace[TraceEvent.argsKey][TraceEvent.typeKey].toString(),
+ (t) => t.toString() == typeArg,
orElse: () => TimelineEventType.other,
);
}
@@ -475,10 +468,6 @@
}
static const firstTraceKey = 'firstTrace';
- static const eventNameKey = 'name';
- static const eventTypeKey = 'type';
- static const eventStartTimeKey = 'startMicros';
- static const eventDurationKey = 'durationMicros';
/// Trace events associated with this [TimelineEvent].
///
@@ -708,10 +697,6 @@
}
}
- void formatFromRoot(StringBuffer buf, String indent) {
- root.format(buf, indent);
- }
-
void writeTraceToBuffer(StringBuffer buf) {
buf.writeln(beginTraceEventJson);
for (TimelineEvent child in children) {
@@ -723,13 +708,10 @@
}
Map<String, dynamic> get json {
- final modifiedTrace = Map.from(beginTraceEventJson);
- modifiedTrace[TraceEvent.argsKey]
- .addAll({TraceEvent.typeKey: type.toString()});
- if (!modifiedTrace.containsKey(TraceEvent.durationKey)) {
- modifiedTrace
- .addAll({TraceEvent.durationKey: time.duration.inMicroseconds});
- }
+ final modifiedTrace = {...beginTraceEventJson}
+ ..putIfAbsent(TraceEvent.durationKey, () => time.duration.inMicroseconds);
+ (modifiedTrace[TraceEvent.argsKey] as Map)[TraceEvent.typeKey] =
+ type.toString();
return {firstTraceKey: modifiedTrace};
}
diff --git a/packages/devtools_app/lib/src/screens/performance/performance_screen.dart b/packages/devtools_app/lib/src/screens/performance/performance_screen.dart
index d08cf83..10a12c9 100644
--- a/packages/devtools_app/lib/src/screens/performance/performance_screen.dart
+++ b/packages/devtools_app/lib/src/screens/performance/performance_screen.dart
@@ -9,11 +9,15 @@
import 'package:devtools_shared/devtools_shared.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
+import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../shared/analytics/analytics.dart' as ga;
+import '../../shared/analytics/constants.dart' as gac;
import '../../shared/banner_messages.dart';
import '../../shared/common_widgets.dart';
+import '../../shared/config_specific/import_export/import_export.dart';
+import '../../shared/file_import.dart';
import '../../shared/globals.dart';
import '../../shared/screen.dart';
import '../../shared/utils.dart';
@@ -35,6 +39,12 @@
@override
Widget build(BuildContext context) {
+ final connected = serviceConnection.serviceManager.hasConnection &&
+ serviceConnection.serviceManager.connectedAppInitialized;
+ if (!connected && !offlineController.offlineMode.value) {
+ return const DisconnectedPerformanceScreenBody();
+ }
+
if (serviceConnection.serviceManager.connectedApp?.isDartWebAppNow ??
false) {
return const WebPerformanceScreenBody();
@@ -116,6 +126,7 @@
FlutterFramesChart(
controller.flutterFramesController,
offlineMode: offlineMode,
+ impellerEnabled: controller.impellerEnabled,
),
const Expanded(child: TabbedPerformanceView()),
],
@@ -148,6 +159,28 @@
}
}
+class DisconnectedPerformanceScreenBody extends StatelessWidget {
+ const DisconnectedPerformanceScreenBody({super.key});
+
+ static const importInstructions =
+ 'Open a performance data file that was previously saved from DevTools.';
+
+ @override
+ Widget build(BuildContext context) {
+ return FileImportContainer(
+ instructions: importInstructions,
+ actionText: 'Load data',
+ gaScreen: gac.appSize,
+ gaSelectionImport: gac.PerformanceEvents.openDataFile.name,
+ gaSelectionAction: gac.PerformanceEvents.loadDataFromFile.name,
+ onAction: (jsonFile) {
+ Provider.of<ImportController>(context, listen: false)
+ .importData(jsonFile, expectedScreenId: PerformanceScreen.id);
+ },
+ );
+ }
+}
+
const timelineLink =
'https://api.flutter.dev/flutter/dart-developer/Timeline-class.html';
const timelineTaskLink =
diff --git a/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart b/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart
index 9c25f05..9e436e2 100644
--- a/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart
@@ -168,16 +168,17 @@
_cpuProfileRoot = CpuStackFrame.root(profileMetaData);
}
- factory CpuProfileData.parse(Map<String, dynamic> json) {
+ factory CpuProfileData.parse(Map<String, dynamic> json_) {
+ final json = _CpuProfileDataJson(json_);
final profileMetaData = CpuProfileMetaData(
- sampleCount: json[sampleCountKey] ?? 0,
- samplePeriod: json[samplePeriodKey] ?? 0,
- stackDepth: json[stackDepthKey] ?? 0,
- time: (json[timeOriginKey] != null && json[timeExtentKey] != null)
+ sampleCount: json.sampleCount ?? 0,
+ samplePeriod: json.samplePeriod ?? 0,
+ stackDepth: json.stackDepth ?? 0,
+ time: (json.timeOriginMicros != null && json.timeExtentMicros != null)
? (TimeRange()
- ..start = Duration(microseconds: json[timeOriginKey])
+ ..start = Duration(microseconds: json.timeOriginMicros!)
..end = Duration(
- microseconds: json[timeOriginKey] + json[timeExtentKey],
+ microseconds: json.timeOriginMicros! + json.timeExtentMicros!,
))
: null,
);
@@ -185,7 +186,7 @@
// Initialize all stack frames.
final stackFrames = <String, CpuStackFrame>{};
final Map<String, Object?> stackFramesJson =
- jsonDecode(jsonEncode(json[stackFramesKey] ?? <String, Object?>{}));
+ jsonDecode(jsonEncode(json.stackFrames ?? <String, Object?>{}));
for (final entry in stackFramesJson.entries) {
final stackFrameJson = entry.value as Map<String, Object?>;
final resolvedUrl = (stackFrameJson[resolvedUrlKey] as String?) ?? '';
@@ -211,12 +212,7 @@
}
// Initialize all CPU samples.
- final stackTraceEvents =
- (json[traceEventsKey] ?? []).cast<Map<String, dynamic>>();
- final samples = stackTraceEvents
- .map((trace) => CpuSampleEvent.parse(trace))
- .toList()
- .cast<CpuSampleEvent>();
+ final samples = json.traceEvents ?? [];
return CpuProfileData._(
stackFrames: stackFrames,
@@ -356,14 +352,6 @@
}
/// Generate a cpu profile from [originalData] where each sample contains the
- /// vmTag [tag].
- ///
- /// [originalData] does not need to be [processed] to run this operation.
- factory CpuProfileData.fromVMTag(CpuProfileData originalData, String tag) {
- return CpuProfileData._fromTag(originalData, tag, CpuProfilerTagType.vm);
- }
-
- /// Generate a cpu profile from [originalData] where each sample contains the
/// userTag [tag].
///
/// [originalData] does not need to be [processed] to run this operation.
@@ -558,12 +546,12 @@
// final output from this method.
const int kRootId = 0;
final traceObject = <String, Object?>{
- CpuProfileData.sampleCountKey: cpuSamples.sampleCount,
- CpuProfileData.samplePeriodKey: cpuSamples.samplePeriod,
- CpuProfileData.stackDepthKey: cpuSamples.maxStackDepth,
- CpuProfileData.timeOriginKey: cpuSamples.timeOriginMicros,
- CpuProfileData.timeExtentKey: cpuSamples.timeExtentMicros,
- CpuProfileData.stackFramesKey: cpuSamples.generateStackFramesJson(
+ CpuProfileData._sampleCountKey: cpuSamples.sampleCount,
+ CpuProfileData._samplePeriodKey: cpuSamples.samplePeriod,
+ CpuProfileData._stackDepthKey: cpuSamples.maxStackDepth,
+ CpuProfileData._timeOriginKey: cpuSamples.timeOriginMicros,
+ CpuProfileData._timeExtentKey: cpuSamples.timeExtentMicros,
+ CpuProfileData._stackFramesKey: cpuSamples.generateStackFramesJson(
isolateId: isolateId,
// We want to ensure that if [kRootId] ever changes, this change is
// propagated to [cpuSamples.generateStackFramesJson].
@@ -571,7 +559,7 @@
kRootId: kRootId,
buildCodeTree: buildCodeTree,
),
- CpuProfileData.traceEventsKey: [],
+ CpuProfileData._traceEventsKey: [],
};
// Build the trace events.
@@ -581,7 +569,7 @@
if (tree.frameId == kRootId) {
continue;
}
- (traceObject[CpuProfileData.traceEventsKey]! as List<Object?>).add({
+ (traceObject[CpuProfileData._traceEventsKey]! as List<Object?>).add({
'ph': 'P', // kind = sample event
'name': '', // Blank to keep about:tracing happy
'pid': cpuSamples.pid,
@@ -612,7 +600,7 @@
String isolateId,
Map<String, dynamic> traceObject,
) async {
- final stackFrames = traceObject[CpuProfileData.stackFramesKey]
+ final stackFrames = traceObject[CpuProfileData._stackFramesKey]
.values
.cast<Map<String, dynamic>>();
final stackFramesWaitingOnPackageUri = <Map<String, dynamic>>[];
@@ -621,7 +609,7 @@
final resolvedUrl =
stackFrameJson[CpuProfileData.resolvedUrlKey] as String?;
if (resolvedUrl != null && resolvedUrl.isNotEmpty) {
- final packageUri = serviceConnection.resolvedUriManager
+ final packageUri = serviceConnection.serviceManager.resolvedUriManager
.lookupPackageUri(isolateId, resolvedUrl);
if (packageUri != null) {
stackFrameJson[CpuProfileData.resolvedPackageUriKey] = packageUri;
@@ -632,14 +620,14 @@
}
}
- await serviceConnection.resolvedUriManager.fetchPackageUris(
+ await serviceConnection.serviceManager.resolvedUriManager.fetchPackageUris(
isolateId,
urisWithoutPackageUri.toList(),
);
for (var stackFrameJson in stackFramesWaitingOnPackageUri) {
final resolvedUri = stackFrameJson[CpuProfileData.resolvedUrlKey];
- final packageUri = serviceConnection.resolvedUriManager
+ final packageUri = serviceConnection.serviceManager.resolvedUriManager
.lookupPackageUri(isolateId, resolvedUri);
if (packageUri != null) {
stackFrameJson[CpuProfileData.resolvedPackageUriKey] = packageUri;
@@ -659,13 +647,13 @@
static const resolvedUrlKey = 'resolvedUrl';
static const resolvedPackageUriKey = 'packageUri';
static const sourceLineKey = 'sourceLine';
- static const stackFramesKey = 'stackFrames';
- static const traceEventsKey = 'traceEvents';
- static const sampleCountKey = 'sampleCount';
- static const stackDepthKey = 'stackDepth';
- static const samplePeriodKey = 'samplePeriod';
- static const timeOriginKey = 'timeOriginMicros';
- static const timeExtentKey = 'timeExtentMicros';
+ static const _stackFramesKey = 'stackFrames';
+ static const _traceEventsKey = 'traceEvents';
+ static const _sampleCountKey = 'sampleCount';
+ static const _stackDepthKey = 'stackDepth';
+ static const _samplePeriodKey = 'samplePeriod';
+ static const _timeOriginKey = 'timeOriginMicros';
+ static const _timeExtentKey = 'timeExtentMicros';
static const userTagKey = 'userTag';
static const vmTagKey = 'vmTag';
@@ -746,15 +734,15 @@
Map<String, Object?> get toJson => {
'type': '_CpuProfileTimeline',
- samplePeriodKey: profileMetaData.samplePeriod,
- sampleCountKey: profileMetaData.sampleCount,
- stackDepthKey: profileMetaData.stackDepth,
+ _samplePeriodKey: profileMetaData.samplePeriod,
+ _sampleCountKey: profileMetaData.sampleCount,
+ _stackDepthKey: profileMetaData.stackDepth,
if (profileMetaData.time?.start != null)
- timeOriginKey: profileMetaData.time!.start!.inMicroseconds,
+ _timeOriginKey: profileMetaData.time!.start!.inMicroseconds,
if (profileMetaData.time?.duration != null)
- timeExtentKey: profileMetaData.time!.duration.inMicroseconds,
- stackFramesKey: stackFramesJson,
- traceEventsKey: cpuSamples.map((sample) => sample.toJson).toList(),
+ _timeExtentKey: profileMetaData.time!.duration.inMicroseconds,
+ _stackFramesKey: stackFramesJson,
+ _traceEventsKey: cpuSamples.map((sample) => sample.toJson).toList(),
};
bool get isEmpty => profileMetaData.sampleCount == 0;
@@ -769,6 +757,23 @@
}
}
+extension type _CpuProfileDataJson(Map<String, dynamic> json) {
+ int? get timeOriginMicros => json[CpuProfileData._timeOriginKey];
+ int? get timeExtentMicros => json[CpuProfileData._timeExtentKey];
+ int? get sampleCount => json[CpuProfileData._sampleCountKey];
+ int? get samplePeriod => json[CpuProfileData._samplePeriodKey];
+ int? get stackDepth => json[CpuProfileData._stackDepthKey];
+ Map<String, Object?>? get stackFrames =>
+ (json[CpuProfileData._stackFramesKey] as Map?)?.cast<String, Object?>();
+ List<CpuSampleEvent>? get traceEvents =>
+ (json[CpuProfileData._traceEventsKey] as List?)
+ ?.cast<Map>()
+ .map((trace) => trace.cast<String, Object?>())
+ .map((trace) => CpuSampleEvent.parse(trace))
+ .toList()
+ .cast<CpuSampleEvent>();
+}
+
class CpuProfileMetaData extends ProfileMetaData {
CpuProfileMetaData({
required int sampleCount,
diff --git a/packages/devtools_app/lib/src/screens/profiler/cpu_profiler.dart b/packages/devtools_app/lib/src/screens/profiler/cpu_profiler.dart
index 4cd57ec..8b224a4 100644
--- a/packages/devtools_app/lib/src/screens/profiler/cpu_profiler.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/cpu_profiler.dart
@@ -168,7 +168,6 @@
const SizedBox(width: denseSpacing),
if (currentTab.key != ProfilerTab.cpuFlameChart.key &&
currentTab.key != ProfilerTab.methodTable.key) ...[
- const DisplayTreeGuidelinesToggle(),
const SizedBox(width: denseSpacing),
],
UserTagDropdown(widget.controller),
@@ -300,25 +299,13 @@
List<Widget> _buildProfilerViews() {
final bottomUp = KeepAliveWrapper(
- child: ValueListenableBuilder<bool>(
- valueListenable: preferences.cpuProfiler.displayTreeGuidelines,
- builder: (context, displayTreeGuidelines, _) {
- return CpuBottomUpTable(
- bottomUpRoots: widget.bottomUpRoots,
- displayTreeGuidelines: displayTreeGuidelines,
- );
- },
+ child: CpuBottomUpTable(
+ bottomUpRoots: widget.bottomUpRoots,
),
);
final callTree = KeepAliveWrapper(
- child: ValueListenableBuilder<bool>(
- valueListenable: preferences.cpuProfiler.displayTreeGuidelines,
- builder: (context, displayTreeGuidelines, _) {
- return CpuCallTreeTable(
- dataRoots: widget.callTreeRoots,
- displayTreeGuidelines: displayTreeGuidelines,
- );
- },
+ child: CpuCallTreeTable(
+ dataRoots: widget.callTreeRoots,
),
);
final methodTable = KeepAliveWrapper(
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart b/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart
index 0d4c439..52989b3 100644
--- a/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart
@@ -15,7 +15,6 @@
class CpuBottomUpTable extends StatelessWidget {
const CpuBottomUpTable({
required this.bottomUpRoots,
- required this.displayTreeGuidelines,
super.key,
});
@@ -53,8 +52,6 @@
final List<CpuStackFrame> bottomUpRoots;
- final bool displayTreeGuidelines;
-
static InlineSpan? _bottomUpTimeTooltipBuilder(
_TimeType type,
CpuStackFrame stackFrame,
@@ -110,7 +107,7 @@
Widget build(BuildContext context) {
return TreeTable<CpuStackFrame>(
keyFactory: (frame) => PageStorageKey<String>(frame.id),
- displayTreeGuidelines: displayTreeGuidelines,
+ displayTreeGuidelines: true,
dataRoots: bottomUpRoots,
dataKey: 'cpu-bottom-up',
columns: columns,
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart b/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart
index 26e8a29..28c3f37 100644
--- a/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart
@@ -14,7 +14,6 @@
class CpuCallTreeTable extends StatelessWidget {
const CpuCallTreeTable({
required this.dataRoots,
- required this.displayTreeGuidelines,
super.key,
});
@@ -40,8 +39,6 @@
final List<CpuStackFrame> dataRoots;
- final bool displayTreeGuidelines;
-
@override
Widget build(BuildContext context) {
return TreeTable<CpuStackFrame>(
@@ -51,7 +48,7 @@
columns: columns,
treeColumn: methodColumn,
defaultSortColumn: totalTimeColumn,
- displayTreeGuidelines: displayTreeGuidelines,
+ displayTreeGuidelines: true,
defaultSortDirection: SortDirection.descending,
);
}
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/controls/cpu_profiler_controls.dart b/packages/devtools_app/lib/src/screens/profiler/panes/controls/cpu_profiler_controls.dart
index 7c1f7cf..04845a7 100644
--- a/packages/devtools_app/lib/src/screens/profiler/panes/controls/cpu_profiler_controls.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/panes/controls/cpu_profiler_controls.dart
@@ -17,28 +17,6 @@
final profilerScreenSearchFieldKey =
GlobalKey(debugLabel: 'ProfilerScreenSearchFieldKey');
-class DisplayTreeGuidelinesToggle extends StatelessWidget {
- const DisplayTreeGuidelinesToggle({super.key});
-
- @override
- Widget build(BuildContext context) {
- return ValueListenableBuilder<bool>(
- valueListenable: preferences.cpuProfiler.displayTreeGuidelines,
- builder: (context, displayTreeGuidelines, _) {
- return DevToolsToggleButton(
- onPressed: () {
- preferences.cpuProfiler.displayTreeGuidelines.value =
- !displayTreeGuidelines;
- },
- isSelected: displayTreeGuidelines,
- message: 'Display guidelines',
- icon: Icons.stacked_bar_chart,
- );
- },
- );
- }
-}
-
class CpuProfileFilterDialog extends StatelessWidget {
const CpuProfileFilterDialog({required this.controller, Key? key})
: super(key: key);
@@ -56,14 +34,11 @@
'.toString -uri:flutter'
''';
- double get _filterDialogWidth => scaleByFontFactor(400.0);
-
final CpuProfilerController controller;
@override
Widget build(BuildContext context) {
return FilterDialog<CpuStackFrame>(
- dialogWidth: _filterDialogWidth,
controller: controller,
queryInstructions: filterQueryInstructions,
);
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart b/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart
index ead2e93..7ef3f0c 100644
--- a/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart
@@ -7,7 +7,9 @@
import '../../../../shared/analytics/constants.dart' as gac;
import '../../../../shared/common_widgets.dart';
+import '../../../../shared/file_import.dart';
import '../../../../shared/globals.dart';
+import '../../../../shared/screen.dart';
import '../../../../shared/ui/vm_flag_widgets.dart';
import '../../profiler_screen_controller.dart';
@@ -107,9 +109,7 @@
required this.profilerBusy,
});
- static const _secondaryControlsMinScreenWidthForText = 1170.0;
-
- static const _profilingControlsMinScreenWidthForText = 875.0;
+ static const _profilingControlsMinScreenWidthForText = 930.0;
final ProfilerScreenController controller;
@@ -155,15 +155,13 @@
controller.cpuProfilerController.profilePeriodFlag!,
),
const SizedBox(width: denseSpacing),
- ExportButton(
- gaScreen: gac.cpuProfiler,
- onPressed: !profilerBusy &&
+ OpenSaveButtonGroup(
+ screenId: ScreenMetaData.cpuProfiler.id,
+ onSave: !profilerBusy &&
controller.cpuProfileData != null &&
controller.cpuProfileData?.isEmpty == false
? _exportPerformance
: null,
- minScreenWidthForTextBeforeScaling:
- _secondaryControlsMinScreenWidthForText,
),
],
);
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart b/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart
index ebe6b5d..b679dd0 100644
--- a/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart
@@ -65,13 +65,13 @@
BuildContext context,
CpuStackFrame data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return MethodAndSourceDisplay(
methodName: data.name,
packageUri: data.packageUri,
sourceLine: data.sourceLine,
- isSelected: isRowSelected,
);
}
}
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart b/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart
index 92f7206..b1cc82e 100644
--- a/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart
@@ -28,7 +28,7 @@
axis: Axis.horizontal,
initialFractions: const [0.5, 0.5],
children: [
- _MethodTable(methodTableController, methods),
+ MethodTable(methodTableController, methods),
_MethodGraph(methodTableController),
],
);
@@ -40,8 +40,9 @@
// TODO(kenz): ensure that this table automatically scrolls to the selected
// node from [MethodTableController].
/// A table of methods and their timing information for a CPU profile.
-class _MethodTable extends StatelessWidget {
- const _MethodTable(this._methodTableController, this._methods);
+@visibleForTesting
+class MethodTable extends StatelessWidget {
+ const MethodTable(this._methodTableController, this._methods, {super.key});
static final methodColumn = _MethodColumn();
static final selfTimeColumn = _SelfTimeColumn();
@@ -150,7 +151,6 @@
methodName: selectedNode.name,
packageUri: selectedNode.packageUri,
sourceLine: selectedNode.sourceLine,
- isSelected: false,
displayInRow: false,
),
),
@@ -262,13 +262,13 @@
BuildContext context,
MethodTableGraphNode data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return MethodAndSourceDisplay(
methodName: data.name,
packageUri: data.packageUri,
sourceLine: data.sourceLine,
- isSelected: isRowSelected,
);
}
}
diff --git a/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart b/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart
index efc147b..5146b33 100644
--- a/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart
+++ b/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart
@@ -6,11 +6,15 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
import 'package:vm_service/vm_service.dart' hide Stack;
import '../../shared/analytics/analytics.dart' as ga;
+import '../../shared/analytics/constants.dart' as gac;
import '../../shared/banner_messages.dart';
import '../../shared/common_widgets.dart';
+import '../../shared/config_specific/import_export/import_export.dart';
+import '../../shared/file_import.dart';
import '../../shared/globals.dart';
import '../../shared/primitives/listenable.dart';
import '../../shared/screen.dart';
@@ -35,7 +39,15 @@
const FixedValueListenable<bool>(true);
@override
- Widget build(BuildContext context) => const ProfilerScreenBody();
+ Widget build(BuildContext context) {
+ final connected = serviceConnection.serviceManager.hasConnection &&
+ serviceConnection.serviceManager.connectedAppInitialized;
+ if (!connected && !offlineController.offlineMode.value) {
+ return const DisconnectedCpuProfilerScreenBody();
+ }
+
+ return const ProfilerScreenBody();
+ }
}
class ProfilerScreenBody extends StatefulWidget {
@@ -164,3 +176,25 @@
);
}
}
+
+class DisconnectedCpuProfilerScreenBody extends StatelessWidget {
+ const DisconnectedCpuProfilerScreenBody({super.key});
+
+ static const importInstructions =
+ 'Open a CPU profile that was previously saved from DevTools';
+
+ @override
+ Widget build(BuildContext context) {
+ return FileImportContainer(
+ instructions: importInstructions,
+ actionText: 'Load data',
+ gaScreen: gac.appSize,
+ gaSelectionImport: gac.CpuProfilerEvents.openDataFile.name,
+ gaSelectionAction: gac.CpuProfilerEvents.loadDataFromFile.name,
+ onAction: (jsonFile) {
+ Provider.of<ImportController>(context, listen: false)
+ .importData(jsonFile, expectedScreenId: ProfilerScreen.id);
+ },
+ );
+ }
+}
diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart
index cd4f2aa..2f7cfa4 100644
--- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart
+++ b/packages/devtools_app/lib/src/screens/provider/instance_viewer/eval.dart
@@ -3,8 +3,7 @@
// found in the LICENSE file.
/// A few utilities related to evaluating dart code
-
-library eval;
+library;
import 'dart:async';
diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart
index 5457df0..1e5ee80 100644
--- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart
+++ b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_viewer.dart
@@ -572,8 +572,8 @@
return Focus(
focusNode: focusNode,
- onKey: (node, key) {
- if (key.data.physicalKey == PhysicalKeyboardKey.escape) {
+ onKeyEvent: (node, key) {
+ if (key.physicalKey == PhysicalKeyboardKey.escape) {
focusNode.unfocus();
return KeyEventResult.handled;
}
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/isolate_statistics/isolate_statistics_view.dart b/packages/devtools_app/lib/src/screens/vm_developer/isolate_statistics/isolate_statistics_view.dart
index e042934..64cd814 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/isolate_statistics/isolate_statistics_view.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/isolate_statistics/isolate_statistics_view.dart
@@ -24,7 +24,6 @@
class IsolateStatisticsView extends VMDeveloperView {
const IsolateStatisticsView()
: super(
- id,
title: 'Isolates',
icon: Icons.bar_chart,
);
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view.dart
index 3e1fa21..54f1c92 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view.dart
@@ -25,7 +25,6 @@
class ObjectInspectorView extends VMDeveloperView {
ObjectInspectorView()
: super(
- id,
title: 'Objects',
icon: Icons.data_object_outlined,
);
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view_controller.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view_controller.dart
index 1a9d238..cd5fa64 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view_controller.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_inspector_view_controller.dart
@@ -46,8 +46,6 @@
final objectHistory = ObjectHistory();
- Isolate? isolate;
-
ValueListenable<bool> get refreshing => _refreshing;
final _refreshing = ValueNotifier<bool>(false);
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart
index e1725bf..184f817 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart
@@ -45,6 +45,7 @@
// ignore: avoid-dynamic, requires refactor.
data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return VmServiceObjectLink(
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart
index 411e283..e0e79ec 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart
@@ -69,6 +69,7 @@
BuildContext context,
InliningEntry data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
return Row(
@@ -177,6 +178,7 @@
BuildContext context,
Instruction data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
final theme = Theme.of(context);
@@ -277,6 +279,7 @@
BuildContext context,
Instruction data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
if (data.object == null) return Container();
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart
index d3df78e..a2ec4cc 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart
@@ -55,6 +55,7 @@
BuildContext context,
ObjectPoolEntry data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
}) {
if (data.value is int) return Text(data.value.toString());
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_common_widgets.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_common_widgets.dart
index 3082399..a0d0b20 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_common_widgets.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_common_widgets.dart
@@ -1000,8 +1000,8 @@
// although showing a "No Source Available" message is another
// option.
final owner = obj.owner;
- if (location.line == null && obj.owner is ClassRef) {
- location = owner!.location;
+ if (location.line == null && owner is ClassRef) {
+ location = owner.location;
}
} else if (obj is FieldRef) {
location = obj.location!;
@@ -1046,9 +1046,7 @@
codeViewController: widget.codeViewController,
scriptRef: widget.script,
parsedScript: currentParsedScript,
- enableFileExplorer: false,
enableHistory: false,
- enableSearch: false,
lineRange: lineRange,
onSelected: breakpointManager.toggleBreakpoint,
),
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart
index 7230b95..c080fb7 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart
@@ -15,14 +15,11 @@
import 'vm_statistics/vm_statistics_view.dart';
abstract class VMDeveloperView {
- const VMDeveloperView(
- this.screenId, {
+ const VMDeveloperView({
required this.title,
required this.icon,
});
- final String screenId;
-
/// The user-facing name of the page.
final String title;
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart
index 77f8e5b..d7c835d 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart
@@ -985,11 +985,6 @@
ProfileReport._fromJson(script, json!);
}
-class ProfileReportMetaData {
- const ProfileReportMetaData._({required this.sampleCount});
- final int sampleCount;
-}
-
/// Profiling information for a given line in a [Script].
class ProfileReportEntry {
const ProfileReportEntry({
@@ -1010,27 +1005,27 @@
/// Profiling information for a range of token positions in a [Script].
class ProfileReportRange {
- ProfileReportRange._fromJson(Script script, Map<String, dynamic> json)
- : metadata = ProfileReportMetaData._(
- sampleCount: json[_kProfileKey][_kMetadataKey][_kSampleCountKey],
- ),
- inclusiveTicks = json[_kProfileKey][_kInclusiveTicksKey].cast<int>(),
- exclusiveTicks = json[_kProfileKey][_kExclusiveTicksKey].cast<int>(),
- lines = json[_kProfileKey][_kPositionsKey]
- .map<int>(
- // It's possible to get a synthetic token position which will
- // either be a negative value or a String (e.g., 'ParallelMove'
- // or 'NoSource'). We'll just use -1 as a placeholder since we
- // won't display anything for these tokens anyway.
- (e) => e is int
- ? script.getLineNumberFromTokenPos(e) ?? _kNoSourcePosition
- : _kNoSourcePosition,
- )
- .toList() {
+ ProfileReportRange._fromJson(Script script, _ProfileReportRangeJson json) {
+ final inclusiveTicks = json.inclusiveTicks;
+ final exclusiveTicks = json.exclusiveTicks;
+ final lines = json.positions
+ .map<int>(
+ // It's possible to get a synthetic token position which will either
+ // be a negative value or a String (e.g., 'ParallelMove' or
+ // 'NoSource'). We'll just use -1 as a placeholder since we won't
+ // display anything for these tokens anyway.
+ (e) => e is int
+ ? script.getLineNumberFromTokenPos(e) ?? _kNoSourcePosition
+ : _kNoSourcePosition,
+ )
+ .toList();
for (int i = 0; i < lines.length; ++i) {
final line = lines[i];
+ // In a `Map<int, ProfileReportEntry>`, we're mapping an `int` to a
+ // `ProfileReportEntry`. No bug.
+ // ignore: avoid-collection-methods-with-unrelated-types
entries[line] = ProfileReportEntry(
- sampleCount: metadata.sampleCount,
+ sampleCount: json.sampleCount,
line: line,
inclusive: inclusiveTicks[i],
exclusive: exclusiveTicks[i],
@@ -1038,19 +1033,30 @@
}
}
+ static const _kNoSourcePosition = -1;
+
+ final entries = <int, ProfileReportEntry>{};
+}
+
+/// An extension type for the unstructured data in the 'ranges' data of the
+/// profiling information used in [ProfileReport].
+extension type _ProfileReportRangeJson(Map<String, dynamic> json) {
+ Map<String, Object?> get _profile => json[_kProfileKey];
+ Map<String, Object?> get metadata =>
+ (_profile[_kMetadataKey] as Map).cast<String, Object?>();
+ int get sampleCount => metadata[_kSampleCountKey] as int;
+ List<int> get inclusiveTicks =>
+ (_profile[_kInclusiveTicksKey] as List).cast<int>();
+ List<int> get exclusiveTicks =>
+ (_profile[_kExclusiveTicksKey] as List).cast<int>();
+ List<Object?> get positions => _profile[_kPositionsKey] as List;
+
static const _kProfileKey = 'profile';
static const _kMetadataKey = 'metadata';
static const _kSampleCountKey = 'sampleCount';
static const _kInclusiveTicksKey = 'inclusiveTicks';
static const _kExclusiveTicksKey = 'exclusiveTicks';
static const _kPositionsKey = 'positions';
- static const _kNoSourcePosition = -1;
-
- final ProfileReportMetaData metadata;
- final entries = <int, ProfileReportEntry>{};
- List<int> inclusiveTicks;
- List<int> exclusiveTicks;
- List<int> lines;
}
/// A representation of the `_Profile` [SourceReport], which contains profiling
@@ -1061,7 +1067,10 @@
.cast<Map<String, dynamic>>()
.where((e) => e.containsKey('profile'))
.map<ProfileReportRange>(
- (e) => ProfileReportRange._fromJson(script, e),
+ (e) => ProfileReportRange._fromJson(
+ script,
+ _ProfileReportRangeJson(e),
+ ),
)
.toList();
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart
index 37dfec5..adf9328 100644
--- a/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart
+++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart
@@ -19,7 +19,6 @@
class VMStatisticsView extends VMDeveloperView {
const VMStatisticsView()
: super(
- id,
title: 'VM',
icon: Icons.devices,
);
diff --git a/packages/devtools_app/lib/src/service/dtd_manager.dart b/packages/devtools_app/lib/src/service/dtd_manager.dart
new file mode 100644
index 0000000..08d139e
--- /dev/null
+++ b/packages/devtools_app/lib/src/service/dtd_manager.dart
@@ -0,0 +1,47 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:dtd/dtd.dart';
+import 'package:flutter/foundation.dart';
+
+import '../framework/app_error_handling.dart';
+import '../shared/globals.dart';
+
+/// Manages a connection to the Dart Tooling Daemon.
+class DTDManager {
+ ValueListenable<DTDConnection?> get connection => _connection;
+ final ValueNotifier<DTDConnection?> _connection =
+ ValueNotifier<DTDConnection?>(null);
+
+ /// Sets the Dart Tooling Daemon connection to point to [uri].
+ ///
+ /// Before connecting to [uri], if a current connection exists, then
+ /// [disconnect] is called to close it.
+ Future<void> connect(Uri uri) async {
+ await disconnect();
+
+ try {
+ _connection.value = await DartToolingDaemon.connect(uri);
+ } catch (e, st) {
+ notificationService.pushError(
+ 'Failed to connect to the Dart Tooling Daemon',
+ isReportable: false,
+ );
+ reportError(
+ e,
+ errorType: 'Dart Tooling Daemon connection failed.',
+ stack: st,
+ );
+ }
+ }
+
+ /// Closes and unsets the Dart Tooling Daemon connection, if one is set.
+ Future<void> disconnect() async {
+ if (_connection.value != null) {
+ await _connection.value!.close();
+ }
+
+ _connection.value = null;
+ }
+}
diff --git a/packages/devtools_app/lib/src/service/service_extension_widgets.dart b/packages/devtools_app/lib/src/service/service_extension_widgets.dart
index e95c032..d1f7de9 100644
--- a/packages/devtools_app/lib/src/service/service_extension_widgets.dart
+++ b/packages/devtools_app/lib/src/service/service_extension_widgets.dart
@@ -3,6 +3,7 @@
// found in the LICENSE file.
import 'dart:async';
+import 'dart:math' as math;
import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/ui.dart';
@@ -59,7 +60,10 @@
}
class _ServiceExtensionButtonGroupState
- extends State<ServiceExtensionButtonGroup> with AutoDisposeMixin {
+ extends State<ServiceExtensionButtonGroup>
+ with
+ AutoDisposeMixin<ServiceExtensionButtonGroup>,
+ MainIsolateChangeMixin<ServiceExtensionButtonGroup> {
late List<ExtensionState> _extensionStates;
@override
@@ -71,6 +75,9 @@
_initExtensionState();
}
+ @override
+ void _onMainIsolateChanged() => _initExtensionState();
+
void _initExtensionState() {
_extensionStates = [for (var e in widget.extensions) ExtensionState(e)];
@@ -82,12 +89,12 @@
final state = serviceConnection.serviceManager.serviceExtensionManager
.getServiceExtensionState(extensionName);
extension.isSelected = state.value.enabled;
-
addAutoDisposeListener(state, () {
setState(() {
extension.isSelected = state.value.enabled;
});
});
+
// Track whether the extension is actually exposed by the VM.
final listenable = serviceConnection
.serviceManager.serviceExtensionManager
@@ -418,25 +425,31 @@
}
class _ServiceExtensionToggleState extends State<_ServiceExtensionToggle>
- with ServiceExtensionMixin, AutoDisposeMixin {
+ with
+ ServiceExtensionMixin,
+ AutoDisposeMixin<_ServiceExtensionToggle>,
+ MainIsolateChangeMixin<_ServiceExtensionToggle> {
bool value = false;
@override
void initState() {
super.initState();
+ _initExtensionState();
+ }
+
+ @override
+ void _onMainIsolateChanged() => _initExtensionState();
+
+ void _initExtensionState() {
final state = serviceConnection.serviceManager.serviceExtensionManager
.getServiceExtensionState(widget.service.extension);
-
value = state.value.enabled;
- addAutoDisposeListener(
- state,
- () {
- setState(() {
- value = state.value.enabled;
- });
- },
- );
+ addAutoDisposeListener(state, () {
+ setState(() {
+ value = state.value.enabled;
+ });
+ });
}
@override
@@ -511,7 +524,10 @@
}
class _ServiceExtensionCheckboxState extends State<ServiceExtensionCheckbox>
- with ServiceExtensionMixin, AutoDisposeMixin {
+ with
+ ServiceExtensionMixin,
+ AutoDisposeMixin<ServiceExtensionCheckbox>,
+ MainIsolateChangeMixin<ServiceExtensionCheckbox> {
/// Whether this checkbox value is set to true.
///
/// This notifier listens to extension state changes from the service manager
@@ -524,7 +540,13 @@
@override
void initState() {
super.initState();
+ _initExtensionState();
+ }
+ @override
+ void _onMainIsolateChanged() => _initExtensionState();
+
+ void _initExtensionState() {
if (serviceConnection.serviceManager.serviceExtensionManager
.isServiceExtensionAvailable(widget.serviceExtension.extension)) {
final state = serviceConnection.serviceManager.serviceExtensionManager
@@ -665,7 +687,10 @@
}
class _ServiceExtensionCheckboxGroupButtonState
- extends State<ServiceExtensionCheckboxGroupButton> with AutoDisposeMixin {
+ extends State<ServiceExtensionCheckboxGroupButton>
+ with
+ AutoDisposeMixin<ServiceExtensionCheckboxGroupButton>,
+ MainIsolateChangeMixin<ServiceExtensionCheckboxGroupButton> {
static const _hoverYOffset = 10.0;
/// Whether this button should have the enabled state, which makes the
@@ -682,6 +707,13 @@
@override
void initState() {
super.initState();
+ _initExtensionState();
+ }
+
+ @override
+ void _onMainIsolateChanged() => _initExtensionState();
+
+ void _initExtensionState() {
_extensionStates = List.filled(widget.extensions.length, false);
for (int i = 0; i < widget.extensions.length; i++) {
final extension = widget.extensions[i];
@@ -698,6 +730,7 @@
_enabled.value = _isEnabled();
if (widget.forceShowOverlayController != null) {
+ cancelStreamSubscriptions();
autoDisposeStreamSubscription(
widget.forceShowOverlayController!.stream.listen(
(_) => _insertOverlay(context),
@@ -747,7 +780,11 @@
/// The overlay will appear directly below the button, and will be dismissed
/// if there is a click outside of the list of toggles.
void _insertOverlay(BuildContext context) {
- final offset = _calculateOverlayPosition(widget.overlayWidth, context);
+ final width = math.min(
+ widget.overlayWidth,
+ MediaQuery.of(context).size.width - 2 * denseSpacing,
+ );
+ final offset = _calculateOverlayPosition(width, context);
_overlay?.remove();
Overlay.of(context).insert(
_overlay = OverlayEntry(
@@ -767,7 +804,7 @@
child: _ServiceExtensionCheckboxGroupOverlay(
description: widget.overlayDescription,
extensions: widget.extensions,
- width: widget.overlayWidth,
+ width: width,
customExtensionUi: widget.customExtensionUi,
),
),
@@ -785,7 +822,7 @@
Overlay.of(context).context.findRenderObject() as RenderBox;
final box = context.findRenderObject() as RenderBox;
- final maxX = overlayBox.size.width - width;
+ final maxX = overlayBox.size.width - width - denseSpacing;
final maxY = overlayBox.size.height;
final offset = box.localToGlobal(
@@ -794,7 +831,7 @@
);
return Offset(
- offset.dx.clamp(0.0, maxX),
+ offset.dx.clamp(denseSpacing, maxX),
offset.dy.clamp(0.0, maxY),
);
}
@@ -1062,6 +1099,28 @@
}
}
+mixin MainIsolateChangeMixin<T extends StatefulWidget>
+ on State<T>, AutoDisposeMixin<T> {
+ static const _mainIsolateListenerId = 'mainIsolateListener';
+
+ @override
+ void initState() {
+ super.initState();
+ addAutoDisposeListener(
+ serviceConnection.serviceManager.isolateManager.mainIsolate,
+ () {
+ setState(() {
+ cancelListeners(excludeIds: [_mainIsolateListenerId]);
+ _onMainIsolateChanged();
+ });
+ },
+ _mainIsolateListenerId,
+ );
+ }
+
+ void _onMainIsolateChanged();
+}
+
// TODO(jacobr): port these classes to Flutter.
/*
/// Dropdown selector that calls a service extension.
diff --git a/packages/devtools_app/lib/src/service/service_extensions.dart b/packages/devtools_app/lib/src/service/service_extensions.dart
index 54b9f79..4de83c7 100644
--- a/packages/devtools_app/lib/src/service/service_extensions.dart
+++ b/packages/devtools_app/lib/src/service/service_extensions.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-library service_extensions;
-
import 'package:devtools_app_shared/service_extensions.dart' as extensions;
import 'package:flutter/material.dart';
@@ -38,7 +36,7 @@
/// A subclass of [extensions.ToggleableServiceExtension] that includes metadata
/// for displaying and interacting with a toggleable service extension in the
/// DevTools UI.
-class ToggleableServiceExtensionDescription<T> extends extensions
+class ToggleableServiceExtensionDescription<T extends Object> extends extensions
.ToggleableServiceExtension implements ServiceExtensionInterface {
ToggleableServiceExtensionDescription._({
required super.extension,
@@ -272,7 +270,7 @@
final profileWidgetBuilds = ToggleableServiceExtensionDescription<bool>.from(
extensions.profileWidgetBuilds,
- title: 'Track Widget Builds',
+ title: 'Track widget builds',
iconAsset: 'icons/trackwidget-white.png',
gaScreenName: gac.performance,
gaItem: gac.PerformanceEvents.trackRebuilds.name,
@@ -286,7 +284,7 @@
final profileUserWidgetBuilds =
ToggleableServiceExtensionDescription<bool>.from(
extensions.profileUserWidgetBuilds,
- title: 'Track User-Created Widget Builds',
+ title: 'Track user-created widget builds',
iconAsset: 'icons/trackwidget-white.png',
gaScreenName: gac.performance,
gaItem: gac.PerformanceEvents.trackUserCreatedWidgetBuilds.name,
@@ -298,7 +296,7 @@
final profileRenderObjectPaints =
ToggleableServiceExtensionDescription<bool>.from(
extensions.profileRenderObjectPaints,
- title: 'Track Paints',
+ title: 'Track paints',
iconData: Icons.format_paint,
gaScreenName: gac.performance,
gaItem: gac.PerformanceEvents.trackPaints.name,
@@ -312,7 +310,7 @@
final profileRenderObjectLayouts =
ToggleableServiceExtensionDescription<bool>.from(
extensions.profileRenderObjectLayouts,
- title: 'Track Layouts',
+ title: 'Track layouts',
iconData: Icons.auto_awesome_mosaic,
gaScreenName: gac.performance,
gaItem: gac.PerformanceEvents.trackLayouts.name,
@@ -496,3 +494,20 @@
gaScreenName: gac.inspector,
gaItem: gac.trackRebuildWidgets,
);
+
+final profilePlatformChannels =
+ ToggleableServiceExtensionDescription<bool>.from(
+ extensions.profilePlatformChannels,
+ title: 'Track platform channels',
+ iconAsset: 'icons/trackwidget-white.png',
+ gaScreenName: gac.performance,
+ gaItem: gac.PerformanceEvents.profilePlatformChannels.name,
+ description:
+ 'Adds an event to the timeline for platform channel messages (useful for '
+ 'apps with plugins). Also periodically prints platform channel '
+ 'statistics to console.',
+ tooltip: '',
+ documentationUrl:
+ 'https://docs.flutter.dev/platform-integration/platform-channels',
+ gaDocsItem: gac.PerformanceDocs.platformChannelsDocs.name,
+);
diff --git a/packages/devtools_app/lib/src/service/service_manager.dart b/packages/devtools_app/lib/src/service/service_manager.dart
index e4da821..4f01aab 100644
--- a/packages/devtools_app/lib/src/service/service_manager.dart
+++ b/packages/devtools_app/lib/src/service/service_manager.dart
@@ -19,7 +19,6 @@
import '../shared/globals.dart';
import '../shared/title.dart';
import '../shared/utils.dart';
-import 'resolved_uri_manager.dart';
import 'service_registrations.dart' as registrations;
import 'timeline_streams.dart';
import 'vm_flags.dart';
@@ -75,8 +74,6 @@
final consoleService = ConsoleService();
- final resolvedUriManager = ResolvedUriManager();
-
InspectorServiceBase? get inspectorService => _inspectorService;
InspectorServiceBase? _inspectorService;
@@ -92,7 +89,6 @@
Future<void> _beforeOpenVmService(VmServiceWrapper? service) async {
consoleService.vmServiceOpened(service!);
- resolvedUriManager.vmServiceOpened();
await vmFlagManager.vmServiceOpened(service);
timelineStreamManager.vmServiceOpened(
service,
@@ -149,7 +145,6 @@
generateDevToolsTitle();
vmFlagManager.vmServiceClosed();
timelineStreamManager.vmServiceClosed();
- resolvedUriManager.vmServiceClosed();
consoleService.handleVmServiceClosed();
_inspectorService?.onIsolateStopped();
_inspectorService?.dispose();
@@ -185,8 +180,9 @@
if (rootLib == null) return null;
final selectedIsolateRefId = mainIsolateRef.id!;
- await resolvedUriManager.fetchFileUris(selectedIsolateRefId, [rootLib]);
- return resolvedUriManager.lookupFileUri(
+ await serviceManager.resolvedUriManager
+ .fetchFileUris(selectedIsolateRefId, [rootLib]);
+ return serviceManager.resolvedUriManager.lookupFileUri(
selectedIsolateRefId,
rootLib,
);
diff --git a/packages/devtools_app/lib/src/service/timeline_streams.dart b/packages/devtools_app/lib/src/service/timeline_streams.dart
index 79b4fca..d5e8469 100644
--- a/packages/devtools_app/lib/src/service/timeline_streams.dart
+++ b/packages/devtools_app/lib/src/service/timeline_streams.dart
@@ -70,10 +70,6 @@
return _streams.values.where(condition).toList();
}
- ValueListenable<bool>? timelineStreamListenable(String name) {
- return _streams.containsKey(name) ? _streams[name]!.recorded : null;
- }
-
/// Initializes stream values from the vm service as a source of truth.
Future<void> _initStreams() async {
final timelineFlags = await service!.getVMTimelineFlags();
diff --git a/packages/devtools_app/lib/src/service/vm_service_logger.dart b/packages/devtools_app/lib/src/service/vm_service_logger.dart
index c84aedf..e160aff 100644
--- a/packages/devtools_app/lib/src/service/vm_service_logger.dart
+++ b/packages/devtools_app/lib/src/service/vm_service_logger.dart
@@ -45,10 +45,11 @@
String? details = m['method'];
if (details == null) {
- if (m['result'] != null) {
- details = m['result']['type'];
+ final Map<String, dynamic>? result = m['result'];
+ if (result != null) {
+ details = result['type'];
} else {
- final Map? error = m['error'];
+ final Map<String, dynamic>? error = m['error'];
details = error == null ? '' : '$error';
}
} else if (details == 'streamNotify') {
@@ -63,8 +64,9 @@
final Map p = m['params'];
streamId = p['streamId'];
- if (p['event'] != null) {
- kind = p['event']['extensionKind'] ?? p['event']['kind'];
+ final Map? event = m['event'];
+ if (event != null) {
+ kind = event['extensionKind'] ?? event['kind'];
}
}
diff --git a/packages/devtools_app/lib/src/service/vm_service_wrapper.dart b/packages/devtools_app/lib/src/service/vm_service_wrapper.dart
index 8a02a14..06bae06 100644
--- a/packages/devtools_app/lib/src/service/vm_service_wrapper.dart
+++ b/packages/devtools_app/lib/src/service/vm_service_wrapper.dart
@@ -4,7 +4,6 @@
// Code needs to match API from VmService.
// ignore_for_file: avoid-dynamic
-library vm_service_wrapper;
import 'dart:async';
import 'dart:convert';
@@ -26,27 +25,37 @@
final _log = Logger('vm_service_wrapper');
-class VmServiceWrapper implements VmService {
+class VmServiceWrapper extends VmService {
VmServiceWrapper(
- this._vmService,
- this.connectedUri, {
- this.trackFutures = false,
- }) {
+ super.inStream,
+ super.writeMessage, {
+ super.log,
+ super.disposeHandler,
+ super.streamClosed,
+ super.wsUri,
+ bool trackFutures = false,
+ }) : _trackFutures = trackFutures {
unawaited(_initSupportedProtocols());
}
- VmServiceWrapper.fromNewVmService({
+ static VmServiceWrapper defaultFactory({
required Stream<dynamic> /*String|List<int>*/ inStream,
required void Function(String message) writeMessage,
- required this.connectedUri,
- this.trackFutures = false,
+ Log? log,
+ DisposeHandler? disposeHandler,
+ Future? streamClosed,
+ String? wsUri,
+ bool trackFutures = false,
}) {
- _vmService = VmService(
+ return VmServiceWrapper(
inStream,
writeMessage,
- wsUri: connectedUri.toString(),
+ log: log,
+ disposeHandler: disposeHandler,
+ streamClosed: streamClosed,
+ wsUri: wsUri,
+ trackFutures: trackFutures,
);
- unawaited(_initSupportedProtocols());
}
// TODO(https://github.com/dart-lang/sdk/issues/49072): in the long term, do
@@ -67,22 +76,20 @@
bool _ddsSupported = false;
- late final VmService _vmService;
+ final bool _trackFutures;
- final Uri connectedUri;
-
- final bool trackFutures;
final Map<String, Future<Success>> _activeStreams = {};
final Set<TrackedFuture<Object>> activeFutures = {};
+
+ Future<void> get allFuturesCompleted => _allFuturesCompleter.future;
+
Completer<bool> _allFuturesCompleter = Completer<bool>()
// Mark the future as completed by default so if we don't track any
// futures but someone tries to wait on [allFuturesCompleted] they don't
// hang. The first tracked future will replace this with a new completer.
..complete(true);
- Future<void> get allFuturesCompleted => _allFuturesCompleter.future;
-
// A local cache of "fake" service objects. Used to convert JSON objects to
// VM service response formats to be used with APIs that require them.
final fakeServiceCache = JsonToServiceCache();
@@ -102,149 +109,20 @@
}
@override
- Future<Breakpoint> addBreakpoint(
- String isolateId,
- String scriptId,
- int line, {
- int? column,
- }) {
- return trackFuture(
- 'addBreakpoint',
- _vmService.addBreakpoint(isolateId, scriptId, line, column: column),
- );
- }
-
- @override
- Future<Breakpoint> addBreakpointAtEntry(String isolateId, String functionId) {
- return trackFuture(
- 'addBreakpointAtEntry',
- _vmService.addBreakpointAtEntry(isolateId, functionId),
- );
- }
-
- @override
- Future<Breakpoint> addBreakpointWithScriptUri(
- String isolateId,
- String scriptUri,
- int line, {
- int? column,
- }) {
- return trackFuture(
- 'addBreakpointWithScriptUri',
- _vmService.addBreakpointWithScriptUri(
- isolateId,
- scriptUri,
- line,
- column: column,
- ),
- );
- }
-
- @override
- Future<Response> callMethod(
- String method, {
- String? isolateId,
- Map<String, dynamic>? args,
- }) {
- return trackFuture(
- 'callMethod $method',
- _vmService.callMethod(method, isolateId: isolateId, args: args),
- );
- }
-
- @override
- Future<Response> callServiceExtension(
- String method, {
- String? isolateId,
- Map<String, dynamic>? args,
- }) {
- return trackFuture(
- 'callServiceExtension $method',
- _vmService.callServiceExtension(
- method,
- isolateId: isolateId,
- args: args,
- ),
- );
- }
-
- @override
- Future<Success> clearCpuSamples(String isolateId) async {
- return trackFuture(
- 'clearCpuSamples',
- _vmService.clearCpuSamples(isolateId),
- );
- }
-
- @override
- Future<Success> clearVMTimeline() async {
- return trackFuture('clearVMTimeline', _vmService.clearVMTimeline());
- }
-
- @override
- Future get onDone => _vmService.onDone;
-
- @override
- Future<void> dispose() => _vmService.dispose();
-
- @override
- Future<Response> evaluate(
- String isolateId,
- String targetId,
- String expression, {
- Map<String, String>? scope,
- bool? disableBreakpoints,
- }) {
- return trackFuture(
- 'evaluate $expression',
- _vmService.evaluate(
- isolateId,
- targetId,
- expression,
- scope: scope,
- disableBreakpoints: disableBreakpoints,
- ),
- );
- }
-
- @override
- Future<Response> evaluateInFrame(
- String isolateId,
- int frameIndex,
- String expression, {
- Map<String, String>? scope,
- bool? disableBreakpoints,
- }) {
- return trackFuture(
- 'evaluateInFrame $expression',
- _vmService.evaluateInFrame(
- isolateId,
- frameIndex,
- expression,
- scope: scope,
- disableBreakpoints: disableBreakpoints,
- ),
- );
- }
-
- @override
Future<AllocationProfile> getAllocationProfile(
String isolateId, {
bool? reset,
bool? gc,
- }) async {
- return trackFuture(
- 'getAllocationProfile',
- _vmService.callMethod(
- // TODO(bkonyi): add _new and _old to public response.
- '_getAllocationProfile',
- isolateId: isolateId,
- args: <String, dynamic>{
- if (reset != null && reset) 'reset': reset,
- if (gc != null && gc) 'gc': gc,
- },
- ).then((r) => r as AllocationProfile),
- );
+ }) {
+ return callMethod(
+ // TODO(bkonyi): add _new and _old to public response.
+ '_getAllocationProfile',
+ isolateId: isolateId,
+ args: <String, dynamic>{
+ if (reset != null && reset) 'reset': reset,
+ if (gc != null && gc) 'gc': gc,
+ },
+ ).then((r) => r as AllocationProfile);
}
@override
@@ -252,86 +130,20 @@
String isolateId,
int timeOriginMicros,
int timeExtentMicros,
- ) async {
- return trackFuture(
+ ) {
+ return callMethod(
'getCpuSamples',
- _vmService.callMethod(
- 'getCpuSamples',
- isolateId: isolateId,
- args: {
- 'timeOriginMicros': timeOriginMicros,
- 'timeExtentMicros': timeExtentMicros,
- // Requests the code profile in addition to the function profile when
- // running with VM developer mode enabled. This data isn't accessible
- // in non-VM developer mode, so not requesting the code profile will
- // save on space and network usage.
- '_code': preferences.vmDeveloperModeEnabled.value,
- },
- ).then((e) => e as CpuSamples),
- );
- }
-
- @override
- Future<FlagList> getFlagList() =>
- trackFuture('getFlagList', _vmService.getFlagList());
-
- @override
- Future<InstanceSet> getInstances(
- String isolateId,
- String objectId,
- int limit, {
- bool? includeSubclasses,
- bool? includeImplementers,
- }) async {
- return trackFuture(
- 'getInstances',
- _vmService.getInstances(
- isolateId,
- objectId,
- limit,
- includeSubclasses: includeSubclasses,
- includeImplementers: includeImplementers,
- ),
- );
- }
-
- @override
- Future<InstanceRef> getInstancesAsList(
- String isolateId,
- String objectId, {
- bool? includeSubclasses,
- bool? includeImplementers,
- }) async {
- return trackFuture(
- 'getInstancesAsList',
- _vmService.getInstancesAsList(
- isolateId,
- objectId,
- includeSubclasses: includeSubclasses,
- includeImplementers: includeImplementers,
- ),
- );
- }
-
- @override
- Future<Isolate> getIsolate(String isolateId) {
- return trackFuture('getIsolate', _vmService.getIsolate(isolateId));
- }
-
- @override
- Future<IsolateGroup> getIsolateGroup(String isolateGroupId) {
- return trackFuture(
- 'getIsolateGroup',
- _vmService.getIsolateGroup(isolateGroupId),
- );
- }
-
- @override
- Future<MemoryUsage> getIsolateGroupMemoryUsage(String isolateGroupId) {
- return trackFuture(
- 'getIsolateGroupMemoryUsage',
- _vmService.getIsolateGroupMemoryUsage(isolateGroupId),
- );
+ isolateId: isolateId,
+ args: {
+ 'timeOriginMicros': timeOriginMicros,
+ 'timeExtentMicros': timeExtentMicros,
+ // Requests the code profile in addition to the function profile when
+ // running with VM developer mode enabled. This data isn't accessible
+ // in non-VM developer mode, so not requesting the code profile will
+ // save on space and network usage.
+ '_code': preferences.vmDeveloperModeEnabled.value,
+ },
+ ).then((e) => e as CpuSamples);
}
@override
@@ -349,291 +161,22 @@
if (cachedObj != null) {
return Future.value(cachedObj);
}
- return trackFuture(
- 'getObject',
- _vmService.getObject(
- isolateId,
- objectId,
- offset: offset,
- count: count,
- ),
- );
- }
-
- @override
- Future<ScriptList> getScripts(String isolateId) {
- return trackFuture('getScripts', _vmService.getScripts(isolateId));
- }
-
- @override
- Future<ClassList> getClassList(String isolateId) {
- return trackFuture('getClassList', _vmService.getClassList(isolateId));
- }
-
- @override
- Future<SourceReport> getSourceReport(
- String isolateId,
- List<String> reports, {
- String? scriptId,
- int? tokenPos,
- int? endTokenPos,
- bool? forceCompile,
- bool? reportLines,
- List<String>? libraryFilters,
- }) async {
- return trackFuture(
- 'getSourceReport',
- _vmService.getSourceReport(
- isolateId,
- reports,
- scriptId: scriptId,
- tokenPos: tokenPos,
- endTokenPos: endTokenPos,
- forceCompile: forceCompile,
- reportLines: reportLines,
- libraryFilters: libraryFilters,
- ),
- );
- }
-
- @override
- Future<Stack> getStack(String isolateId, {int? limit}) async {
- return trackFuture(
- 'getStack',
- _vmService.getStack(isolateId, limit: limit),
- );
- }
-
- @override
- Future<VM> getVM() => trackFuture('getVM', _vmService.getVM());
-
- @override
- Future<Timeline> getVMTimeline({
- int? timeOriginMicros,
- int? timeExtentMicros,
- }) async {
- return trackFuture(
- 'getVMTimeline',
- _vmService.getVMTimeline(
- timeOriginMicros: timeOriginMicros,
- timeExtentMicros: timeExtentMicros,
- ),
- );
- }
-
- @override
- Future<TimelineFlags> getVMTimelineFlags() {
- return trackFuture('getVMTimelineFlags', _vmService.getVMTimelineFlags());
- }
-
- @override
- Future<Timestamp> getVMTimelineMicros() async {
- return trackFuture(
- 'getVMTimelineMicros',
- _vmService.getVMTimelineMicros(),
- );
- }
-
- @override
- Future<Version> getVersion() async {
- return trackFuture('getVersion', _vmService.getVersion());
- }
-
- @override
- Future<MemoryUsage> getMemoryUsage(String isolateId) =>
- trackFuture('getMemoryUsage', _vmService.getMemoryUsage(isolateId));
-
- @override
- Future<Response> invoke(
- String isolateId,
- String targetId,
- String selector,
- List<String> argumentIds, {
- bool? disableBreakpoints,
- }) {
- return trackFuture(
- 'invoke $selector',
- _vmService.invoke(
- isolateId,
- targetId,
- selector,
- argumentIds,
- disableBreakpoints: disableBreakpoints,
- ),
- );
- }
-
- @override
- Future<Success> requestHeapSnapshot(String isolateId) {
- return trackFuture(
- 'requestHeapSnapshot',
- _vmService.requestHeapSnapshot(isolateId),
+ return super.getObject(
+ isolateId,
+ objectId,
+ offset: offset,
+ count: count,
);
}
Future<HeapSnapshotGraph> getHeapSnapshotGraph(IsolateRef isolateRef) async {
- return await HeapSnapshotGraph.getSnapshot(_vmService, isolateRef);
- }
-
- @override
- Future<Success> kill(String isolateId) {
- return trackFuture('kill', _vmService.kill(isolateId));
- }
-
- @override
- Stream<Event> get onDebugEvent => _vmService.onDebugEvent;
-
- @override
- Stream<Event> get onProfilerEvent => _vmService.onProfilerEvent;
-
- @override
- Stream<Event> onEvent(String streamName) => _vmService.onEvent(streamName);
-
- @override
- Stream<Event> get onExtensionEvent => _vmService.onExtensionEvent;
-
- @override
- Stream<Event> get onGCEvent => _vmService.onGCEvent;
-
- @override
- Stream<Event> get onIsolateEvent => _vmService.onIsolateEvent;
-
- @override
- Stream<Event> get onLoggingEvent => _vmService.onLoggingEvent;
-
- @override
- Stream<Event> get onTimelineEvent => _vmService.onTimelineEvent;
-
- @override
- Stream<String> get onReceive => _vmService.onReceive;
-
- @override
- Stream<String> get onSend => _vmService.onSend;
-
- @override
- Stream<Event> get onServiceEvent => _vmService.onServiceEvent;
-
- @override
- Stream<Event> get onStderrEvent => _vmService.onStderrEvent;
-
- @override
- Stream<Event> get onStdoutEvent => _vmService.onStdoutEvent;
-
- @override
- Stream<Event> get onVMEvent => _vmService.onVMEvent;
-
- @override
- Stream<Event> get onHeapSnapshotEvent => _vmService.onHeapSnapshotEvent;
-
- @override
- Future<Success> pause(String isolateId) {
- return trackFuture('pause', _vmService.pause(isolateId));
- }
-
- @override
- Future<Success> registerService(String service, String alias) async {
- return trackFuture(
- 'registerService $service',
- _vmService.registerService(service, alias),
- );
- }
-
- @override
- void registerServiceCallback(String service, ServiceCallback cb) {
- return _vmService.registerServiceCallback(service, cb);
- }
-
- @override
- Future<ReloadReport> reloadSources(
- String isolateId, {
- bool? force,
- bool? pause,
- String? rootLibUri,
- String? packagesUri,
- }) {
- return trackFuture(
- 'reloadSources',
- _vmService.reloadSources(
- isolateId,
- force: force,
- pause: pause,
- rootLibUri: rootLibUri,
- packagesUri: packagesUri,
- ),
- );
- }
-
- @override
- Future<Success> removeBreakpoint(String isolateId, String breakpointId) {
- return trackFuture(
- 'removeBreakpoint',
- _vmService.removeBreakpoint(isolateId, breakpointId),
- );
- }
-
- @override
- Future<Success> resume(String isolateId, {String? step, int? frameIndex}) {
- return trackFuture(
- 'resume',
- _vmService.resume(isolateId, step: step, frameIndex: frameIndex),
- );
- }
-
- @override
- Future<Success> setIsolatePauseMode(
- String isolateId, {
- /*ExceptionPauseMode*/ String? exceptionPauseMode,
- bool? shouldPauseOnExit,
- }) {
- return trackFuture(
- 'setIsolatePauseMode',
- _vmService.setIsolatePauseMode(
- isolateId,
- exceptionPauseMode: exceptionPauseMode,
- shouldPauseOnExit: shouldPauseOnExit,
- ),
- );
- }
-
- @override
- Future<Response> setFlag(String name, String value) {
- return trackFuture('setFlag', _vmService.setFlag(name, value));
- }
-
- @override
- Future<Success> setLibraryDebuggable(
- String isolateId,
- String libraryId,
- bool isDebuggable,
- ) {
- return trackFuture(
- 'setLibraryDebuggable',
- _vmService.setLibraryDebuggable(isolateId, libraryId, isDebuggable),
- );
- }
-
- @override
- Future<Success> setName(String isolateId, String name) {
- return trackFuture('setName', _vmService.setName(isolateId, name));
- }
-
- @override
- Future<Success> setVMName(String name) {
- return trackFuture('setVMName', _vmService.setVMName(name));
- }
-
- @override
- Future<Success> setVMTimelineFlags(List<String> recordedStreams) async {
- return trackFuture(
- 'setVMTimelineFlags',
- _vmService.setVMTimelineFlags(recordedStreams),
- );
+ return await HeapSnapshotGraph.getSnapshot(this, isolateRef);
}
@override
Future<Success> streamCancel(String streamId) {
_activeStreams.remove(streamId);
- return trackFuture('streamCancel', _vmService.streamCancel(streamId));
+ return super.streamCancel(streamId);
}
// We tweaked this method so that we do not try to listen to the same stream
@@ -642,155 +185,39 @@
@override
Future<Success> streamListen(String streamId) {
if (!_activeStreams.containsKey(streamId)) {
- final Future<Success> future =
- trackFuture('streamListen', _vmService.streamListen(streamId));
- _activeStreams[streamId] = future;
- return future;
+ return _activeStreams[streamId] = super.streamListen(streamId);
} else {
return _activeStreams[streamId]!.then((value) => value);
}
}
- @override
- Future<InboundReferences> getInboundReferences(
- String isolateId,
- String targetId,
- int limit,
- ) async {
- return trackFuture(
- 'getInboundReferences',
- _vmService.getInboundReferences(isolateId, targetId, limit),
- );
- }
-
- @override
- Future<RetainingPath> getRetainingPath(
- String isolateId,
- String targetId,
- int limit,
- ) =>
- trackFuture(
- 'getRetainingPath',
- _vmService.getRetainingPath(isolateId, targetId, limit),
- );
-
- @override
- Future<CpuSamples> getAllocationTraces(
- String isolateId, {
- int? timeOriginMicros,
- int? timeExtentMicros,
- String? classId,
- }) {
- return trackFuture(
- 'getAllocationTraces',
- _vmService.getAllocationTraces(
- isolateId,
- timeOriginMicros: timeOriginMicros,
- timeExtentMicros: timeExtentMicros,
- classId: classId,
- ),
- );
- }
-
- @override
- Future<Success> setTraceClassAllocation(
- String isolateId,
- String classId,
- bool enable,
- ) async {
- return trackFuture(
- 'setTraceClassAllocation',
- _vmService.setTraceClassAllocation(isolateId, classId, enable),
- );
- }
-
- @override
- Future<ProcessMemoryUsage> getProcessMemoryUsage() {
- return trackFuture(
- 'getProcessMemoryUsage',
- _vmService.getProcessMemoryUsage(),
- );
- }
-
- @override
- Future<Breakpoint> setBreakpointState(
- String isolateId,
- String breakpointId,
- bool enable,
- ) {
- return trackFuture(
- 'setBreakpointState',
- _vmService.setBreakpointState(
- isolateId,
- breakpointId,
- enable,
- ),
- );
- }
-
- @override
- Future<ProtocolList> getSupportedProtocols() async {
- return trackFuture(
- 'getSupportedProtocols',
- _vmService.getSupportedProtocols(),
- );
- }
-
- @override
- Future<PortList> getPorts(String isolateId) async {
- return trackFuture(
- 'getPorts',
- _vmService.getPorts(isolateId),
- );
- }
-
- @override
- Future<UriList> lookupPackageUris(String isolateId, List<String> uris) async {
- return trackFuture(
- 'lookupPackageUris',
- _vmService.lookupPackageUris(isolateId, uris),
- );
- }
-
- @override
- Future<UriList> lookupResolvedPackageUris(
- String isolateId,
- List<String> uris, {
- bool? local,
- }) async {
- return trackFuture(
- 'lookupResolvedPackageUris',
- _vmService.lookupResolvedPackageUris(isolateId, uris, local: local),
- );
- }
-
// Mark: Overrides for [DdsExtension]. It would help with logical grouping to
// make these extension methods, but that makes testing more difficult due to
// mocking limitations for extension methods.
- Stream<Event> get onExtensionEventWithHistory {
+ Stream<Event> get onExtensionEventWithHistorySafe {
return _maybeReturnStreamWithHistory(
- _vmService.onExtensionEventWithHistory,
+ onExtensionEventWithHistory,
fallbackStream: onExtensionEvent,
);
}
- Stream<Event> get onLoggingEventWithHistory {
+ Stream<Event> get onLoggingEventWithHistorySafe {
return _maybeReturnStreamWithHistory(
- _vmService.onLoggingEventWithHistory,
+ onLoggingEventWithHistory,
fallbackStream: onLoggingEvent,
);
}
- Stream<Event> get onStderrEventWithHistory {
+ Stream<Event> get onStderrEventWithHistorySafe {
return _maybeReturnStreamWithHistory(
- _vmService.onStderrEventWithHistory,
+ onStderrEventWithHistory,
fallbackStream: onStderrEvent,
);
}
- Stream<Event> get onStdoutEventWithHistory {
+ Stream<Event> get onStdoutEventWithHistorySafe {
return _maybeReturnStreamWithHistory(
- _vmService.onStdoutEventWithHistory,
+ onStdoutEventWithHistory,
fallbackStream: onStdoutEvent,
);
}
@@ -805,117 +232,59 @@
}
return fallbackStream;
}
- // Mark: end overrides for the [DdsExtension].
- // Mark: Overrides for [DartIOExtension]. It would help with logical grouping
- // to make these extension methods, but that makes testing more difficult due
- // to mocking limitations for extension methods.
- Future<Version> getDartIOVersion(String isolateId) =>
- trackFuture('_getDartIOVersion', _vmService.getDartIOVersion(isolateId));
+ // Begin Dart IO extension method wrappers. We wrap these methods so that we
+ // can override them in tests.
- Future<SocketProfilingState> socketProfilingEnabled(
+ Future<bool> isSocketProfilingAvailableWrapper(String isolateId) {
+ return isSocketProfilingAvailable(isolateId);
+ }
+
+ Future<SocketProfilingState> socketProfilingEnabledWrapper(
String isolateId, [
bool? enabled,
- ]) async {
- assert(await isSocketProfilingAvailable(isolateId));
- return trackFuture(
- 'socketProfilingEnabled',
- _vmService.socketProfilingEnabled(isolateId, enabled),
- );
+ ]) {
+ return socketProfilingEnabled(isolateId, enabled);
}
- Future<Success> clearSocketProfile(String isolateId) async {
- assert(await isSocketProfilingAvailable(isolateId));
- return trackFuture(
- 'clearSocketProfile',
- _vmService.clearSocketProfile(isolateId),
- );
+ Future<Success> clearSocketProfileWrapper(String isolateId) {
+ return clearSocketProfile(isolateId);
}
- Future<SocketProfile> getSocketProfile(String isolateId) async {
- assert(await isSocketProfilingAvailable(isolateId));
- return trackFuture(
- 'getSocketProfile',
- _vmService.getSocketProfile(isolateId),
- );
+ Future<SocketProfile> getSocketProfileWrapper(String isolateId) {
+ return getSocketProfile(isolateId);
}
- Future<HttpTimelineLoggingState> httpEnableTimelineLogging(
- String isolateId, [
- bool? enabled,
- ]) async {
- assert(await isHttpTimelineLoggingAvailable(isolateId));
- return trackFuture(
- 'httpEnableTimelineLogging',
- _vmService.httpEnableTimelineLogging(isolateId, enabled),
- );
- }
-
- /// The `getHttpProfile` RPC is used to retrieve HTTP profiling information
- /// for requests made via `dart:io`'s `HttpClient`.
- ///
- /// The returned [HttpProfile] will only include requests issued after
- /// [httpTimelineLogging] has been enabled or after the last
- /// [clearHttpProfile] invocation.
- Future<HttpProfile> getHttpProfile(
- String isolateId, {
- int? updatedSince,
- }) async {
- assert(await isHttpProfilingAvailable(isolateId));
- return trackFuture(
- 'getHttpProfile',
- _vmService.getHttpProfile(
- isolateId,
- updatedSince: updatedSince,
- ),
- );
- }
-
- Future<HttpProfileRequest> getHttpProfileRequest(
+ Future<HttpProfileRequest> getHttpProfileRequestWrapper(
String isolateId,
String id,
- ) async {
- assert(await isHttpProfilingAvailable(isolateId));
- return trackFuture(
- 'getHttpProfileRequest',
- _vmService.getHttpProfileRequest(isolateId, id),
- );
+ ) {
+ return getHttpProfileRequest(isolateId, id);
}
- /// The `clearHttpProfile` RPC is used to clear previously recorded HTTP
- /// requests from the HTTP profiler state. Requests still in-flight after
- /// clearing the profiler state will be ignored by the profiler.
- Future<Success> clearHttpProfile(String isolateId) async {
- assert(await isHttpProfilingAvailable(isolateId));
- return trackFuture(
- 'clearHttpProfile',
- _vmService.clearHttpProfile(isolateId),
- );
+ Future<HttpProfile> getHttpProfileWrapper(
+ String isolateId, {
+ int? updatedSince,
+ }) {
+ return getHttpProfile(isolateId, updatedSince: updatedSince);
}
- // TODO(kenz): move this method to
- // https://github.com/dart-lang/sdk/blob/master/pkg/vm_service/lib/src/dart_io_extensions.dart
- Future<bool> isSocketProfilingAvailable(String isolateId) async {
- final Isolate isolate = await getIsolate(isolateId);
- return (isolate.extensionRPCs ?? [])
- .contains('ext.dart.io.getSocketProfile');
+ Future<Success> clearHttpProfileWrapper(String isolateId) {
+ return clearHttpProfile(isolateId);
}
- // TODO(kenz): move this method to
- // https://github.com/dart-lang/sdk/blob/master/pkg/vm_service/lib/src/dart_io_extensions.dart
- Future<bool> isHttpTimelineLoggingAvailable(String isolateId) async {
- final Isolate isolate = await getIsolate(isolateId);
- final rpcs = isolate.extensionRPCs ?? [];
- return rpcs.contains('ext.dart.io.httpEnableTimelineLogging');
+ Future<bool> isHttpTimelineLoggingAvailableWrapper(String isolateId) {
+ return isHttpTimelineLoggingAvailable(isolateId);
}
- // TODO(bkonyi): move this method to
- // https://github.com/dart-lang/sdk/blob/master/pkg/vm_service/lib/src/dart_io_extensions.dart
- Future<bool> isHttpProfilingAvailable(String isolateId) async {
- final Isolate isolate = await getIsolate(isolateId);
- return (isolate.extensionRPCs ?? []).contains('ext.dart.io.getHttpProfile');
+ Future<HttpTimelineLoggingState> httpEnableTimelineLoggingWrapper(
+ String isolateId, [
+ bool? enabled,
+ ]) {
+ return httpEnableTimelineLogging(isolateId, enabled);
}
- // Mark: end overrides for the [DartIOExtension].
+
+ // End Dart IO extension method wrappers.
/// Testing only method to indicate that we don't really need to await all
/// currently pending futures.
@@ -924,6 +293,7 @@
/// futures are safe to ignore. Currently the theory is this method should be
/// used after a hot restart to avoid bugs where we have zombie futures lying
/// around causing tests to flake.
+ @visibleForTesting
void doNotWaitForPendingFuturesBeforeExit() {
_allFuturesCompleter = Completer<bool>();
_allFuturesCompleter.complete(true);
@@ -956,24 +326,24 @@
final logId = ++_logIdCounter;
try {
- _log.fine('[$logId]-trackFuture($name,...): Started');
+ _log.fine('[$logId]-wrapFuture($name,...): Started');
final result = await future;
- _log.fine('[$logId]-trackFuture($name,...): Succeeded');
+ _log.fine('[$logId]-wrapFuture($name,...): Succeeded');
return result;
} catch (error) {
_log.severe(
- '[$logId]-trackFuture($name,...): Failed',
+ '[$logId]-wrapFuture($name,...): Failed',
error,
);
rethrow;
}
}
- @visibleForTesting
- Future<T> trackFuture<T>(String name, Future<T> future) {
+ @override
+ Future<T> wrapFuture<T>(String name, Future<T> future) {
final localFuture = _maybeLogWrappedFuture<T>(name, future);
- if (!trackFutures) {
+ if (!_trackFutures) {
return localFuture;
}
vmServiceCallCount++;
@@ -1014,13 +384,10 @@
if (!enablePrivateRpcs) {
throw StateError('Attempted to invoke private RPC');
}
- final result = await trackFuture(
- method,
- callMethod(
- '_$method',
- isolateId: isolateId,
- args: args,
- ),
+ final result = await callMethod(
+ '_$method',
+ isolateId: isolateId,
+ args: args,
);
return parser(result.json);
}
@@ -1102,15 +469,12 @@
return null;
}
- final response = await trackFuture(
- 'dap.$command',
- _vmService.sendDapRequest(
- jsonEncode(
- dap.Request(
- command: command,
- seq: _dapSeq++,
- arguments: args,
- ),
+ final response = await sendDapRequest(
+ jsonEncode(
+ dap.Request(
+ command: command,
+ seq: _dapSeq++,
+ arguments: args,
),
),
);
@@ -1125,13 +489,6 @@
return response.dapResponse.body;
}
-
- /// Prevent DevTools from blocking Dart SDK rolls if changes in
- /// package:vm_service are unimplemented in DevTools.
- @override
- dynamic noSuchMethod(Invocation invocation) {
- return super.noSuchMethod(invocation);
- }
}
class TrackedFuture<T> {
diff --git a/packages/devtools_app/lib/src/shared/analytics/_analytics_controller_web.dart b/packages/devtools_app/lib/src/shared/analytics/_analytics_controller_web.dart
index bb06f20..592d8a2 100644
--- a/packages/devtools_app/lib/src/shared/analytics/_analytics_controller_web.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/_analytics_controller_web.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import '../config_specific/server/server.dart' as server;
+import '../server/server.dart' as server;
import 'analytics.dart' as ga;
import 'analytics_controller.dart';
diff --git a/packages/devtools_app/lib/src/shared/analytics/_analytics_stub.dart b/packages/devtools_app/lib/src/shared/analytics/_analytics_stub.dart
index 8906b46..5cc1b5d 100644
--- a/packages/devtools_app/lib/src/shared/analytics/_analytics_stub.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/_analytics_stub.dart
@@ -5,7 +5,6 @@
// Avoid unused parameters does not play well with conditional imports.
// ignore_for_file: avoid-unused-parameters
// ignore_for_file: avoid-redundant-async
-library _analytics_stub;
import 'dart:async';
diff --git a/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart b/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart
index 63d1c92..992e35d 100644
--- a/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart
@@ -2,22 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-@JS()
-library gtags;
-
// ignore_for_file: non_constant_identifier_names
+@JS()
+library;
+
import 'dart:async';
-// ignore: avoid_web_libraries_in_flutter, by design
-import 'dart:html';
import 'package:devtools_app_shared/ui.dart';
import 'package:js/js.dart';
import 'package:logging/logging.dart';
+import 'package:web/helpers.dart';
import '../../../devtools.dart' as devtools show version;
-import '../config_specific/server/server.dart' as server;
import '../globals.dart';
+import '../server/server.dart' as server;
import '../utils.dart';
import 'analytics_common.dart';
import 'constants.dart' as gac;
@@ -800,7 +799,7 @@
/// devtoolsChrome.
void computeDevToolsCustomGTagsData() {
// Platform
- final String platform = window.navigator.platform!;
+ final String platform = window.navigator.platform;
platform.replaceAll(' ', '_');
devtoolsPlatformType = platform;
diff --git a/packages/devtools_app/lib/src/shared/analytics/analytics.dart b/packages/devtools_app/lib/src/shared/analytics/analytics.dart
index 2f0615e..bf08ab4 100644
--- a/packages/devtools_app/lib/src/shared/analytics/analytics.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/analytics.dart
@@ -2,4 +2,5 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-export '_analytics_stub.dart' if (dart.library.html) '_analytics_web.dart';
+export '_analytics_stub.dart'
+ if (dart.library.js_interop) '_analytics_web.dart';
diff --git a/packages/devtools_app/lib/src/shared/analytics/analytics_common.dart b/packages/devtools_app/lib/src/shared/analytics/analytics_common.dart
index df5645c..bdabb36 100644
--- a/packages/devtools_app/lib/src/shared/analytics/analytics_common.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/analytics_common.dart
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Code in this file should be able to be imported by both dart:html and
-// dart:io dependent libraries.
+// Code in this file should be able to be imported by both web and dart:io
+// dependent libraries.
/// Base class for all screen metrics classes.
///
diff --git a/packages/devtools_app/lib/src/shared/analytics/analytics_controller.dart b/packages/devtools_app/lib/src/shared/analytics/analytics_controller.dart
index 230b5bc..b526829 100644
--- a/packages/devtools_app/lib/src/shared/analytics/analytics_controller.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/analytics_controller.dart
@@ -7,7 +7,7 @@
import 'package:flutter/foundation.dart';
import '_analytics_controller_stub.dart'
- if (dart.library.html) '_analytics_controller_web.dart';
+ if (dart.library.js_interop) '_analytics_controller_web.dart';
Future<AnalyticsController> get analyticsController async =>
await devToolsAnalyticsController;
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants.dart
index df77f43..641b686 100644
--- a/packages/devtools_app/lib/src/shared/analytics/constants.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/constants.dart
@@ -2,9 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'package:devtools_shared/devtools_extensions.dart';
+
import '../screen.dart';
part 'constants/_cpu_profiler_constants.dart';
+part 'constants/_deep_links_constants.dart';
part 'constants/_extension_constants.dart';
part 'constants/_memory_constants.dart';
part 'constants/_performance_constants.dart';
@@ -33,6 +36,7 @@
final vmTools = ScreenMetaData.vmTools.id;
const console = 'console';
final simple = ScreenMetaData.simple.id;
+final deeplink = ScreenMetaData.deepLinks.id;
// GA events not associated with a any screen e.g., hotReload, hotRestart, etc
const devToolsMain = 'main';
@@ -130,7 +134,8 @@
const clear = 'clear';
const record = 'record';
const stop = 'stop';
-const export = 'export';
+const openFile = 'openFile';
+const saveFile = 'saveFile';
const expandAll = 'expandAll';
const collapseAll = 'collapseAll';
const profileModeDocs = 'profileModeDocs';
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants/_cpu_profiler_constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants/_cpu_profiler_constants.dart
index 4784183..01ffbff 100644
--- a/packages/devtools_app/lib/src/shared/analytics/constants/_cpu_profiler_constants.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/constants/_cpu_profiler_constants.dart
@@ -11,6 +11,8 @@
cpuProfileFlameChartHelp,
cpuProfileProcessingTime,
cpuProfileDisplayTreeGuidelines,
+ openDataFile,
+ loadDataFromFile;
}
enum CpuProfilerDocs {
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants/_deep_links_constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants/_deep_links_constants.dart
new file mode 100644
index 0000000..0d2f5ac
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/analytics/constants/_deep_links_constants.dart
@@ -0,0 +1,11 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+part of '../constants.dart';
+
+enum AnalyzeFlutterProject {
+ flutterProjectSelected,
+ loadVariants,
+ loadAppLinks,
+}
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants/_extension_constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants/_extension_constants.dart
index fbd9b43..a84aaed 100644
--- a/packages/devtools_app/lib/src/shared/analytics/constants/_extension_constants.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/constants/_extension_constants.dart
@@ -21,34 +21,36 @@
embeddedExtension;
/// Event sent via [ga.screen] when an extension screen is opened.
- static String extensionScreenName(String name) => 'extension-$name';
+ static String extensionScreenName(DevToolsExtensionConfig ext) =>
+ 'extension-${ext.analyticsSafeName}';
/// Event sent when a user clicks the "Report an issue" link on an extension
/// screen.
- static String extensionFeedback(String name) => 'extensionFeedback-$name';
+ static String extensionFeedback(DevToolsExtensionConfig ext) =>
+ 'extensionFeedback-${ext.analyticsSafeName}';
/// Event sent when an extension is enabled because a user manually enabled
/// it from the extensions settings menu.
- static String extensionEnableManual(String name) =>
- 'extensionEnable-manual-$name';
+ static String extensionEnableManual(DevToolsExtensionConfig ext) =>
+ 'extensionEnable-manual-${ext.analyticsSafeName}';
/// Event sent when an extension is enabled because a user answered the
/// enablement prompt with "Enable".
- static String extensionEnablePrompt(String name) =>
- 'extensionEnable-prompt-$name';
+ static String extensionEnablePrompt(DevToolsExtensionConfig ext) =>
+ 'extensionEnable-prompt-${ext.analyticsSafeName}';
/// Event sent when an extension is disabled because a user manually disabled
/// it from the [DisableExtensionDialog] or the main extensions settings menu.
- static String extensionDisableManual(String name) =>
- 'extensionDisable-manual-$name';
+ static String extensionDisableManual(DevToolsExtensionConfig ext) =>
+ 'extensionDisable-manual-${ext.analyticsSafeName}';
/// Event sent when an extension is disabled because a user answered the
/// enablement prompt with "No, hide this sceen".
- static String extensionDisablePrompt(String name) =>
- 'extensionDisable-prompt-$name';
+ static String extensionDisablePrompt(DevToolsExtensionConfig ext) =>
+ 'extensionDisable-prompt-${ext.analyticsSafeName}';
/// Event sent when an extension is force reloaded from the extension screen
/// context menu.
- static String extensionForceReload(String name) =>
- 'extensionForceReload-$name';
+ static String extensionForceReload(DevToolsExtensionConfig ext) =>
+ 'extensionForceReload-${ext.analyticsSafeName}';
}
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants/_performance_constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants/_performance_constants.dart
index d9370b0..1a5790e 100644
--- a/packages/devtools_app/lib/src/shared/analytics/constants/_performance_constants.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/constants/_performance_constants.dart
@@ -15,6 +15,7 @@
trackUserCreatedWidgetBuilds,
trackPaints,
trackLayouts,
+ profilePlatformChannels,
enhanceTracingButtonSmall,
disableClipLayers,
disableOpacityLayers,
@@ -28,7 +29,9 @@
perfettoScrollToTimeRange,
perfettoShowHelp,
performanceSettings,
- traceCategories;
+ traceCategories,
+ openDataFile,
+ loadDataFromFile;
const PerformanceEvents([this.nameOverride]);
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants/_vs_code_sidebar_constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants/_vs_code_sidebar_constants.dart
index 171c4cd..34e705e 100644
--- a/packages/devtools_app/lib/src/shared/analytics/constants/_vs_code_sidebar_constants.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/constants/_vs_code_sidebar_constants.dart
@@ -10,10 +10,19 @@
/// Analytics event that is sent when a device selection occurs from the list
/// of available devices in the sidebar.
- changeSelectedDevice;
+ changeSelectedDevice,
+
+ /// Analytics event that is sent when DevTools is opened in the browser
+ /// without a specific page.
+ openDevToolsExternally;
static String get id => VsCodeFlutterSidebar.vsCodeFlutterSidebar.name;
+ /// Analytics event for when a request to enable a new platform type is sent
+ /// to VS Code.
+ static String enablePlatformType(String platformType) =>
+ 'enablePlatformType-$platformType';
+
/// Analytics event that is sent when a DevTools screen is opened from the
/// actions toolbar for a debug session.
static String openDevToolsScreen(String screen) =>
diff --git a/packages/devtools_app/lib/src/shared/analytics/gtags.dart b/packages/devtools_app/lib/src/shared/analytics/gtags.dart
index 0c70133..2b0ac76 100644
--- a/packages/devtools_app/lib/src/shared/analytics/gtags.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/gtags.dart
@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-@JS()
-library gtags;
-
// ignore_for_file: non_constant_identifier_names
+@JS()
+library;
+
import 'package:flutter/foundation.dart';
import 'package:js/js.dart';
diff --git a/packages/devtools_app/lib/src/shared/charts/flame_chart.dart b/packages/devtools_app/lib/src/shared/charts/flame_chart.dart
index 5041061..0f871aa 100644
--- a/packages/devtools_app/lib/src/shared/charts/flame_chart.dart
+++ b/packages/devtools_app/lib/src/shared/charts/flame_chart.dart
@@ -21,6 +21,7 @@
import '../ui/colors.dart';
import '../ui/search.dart';
import '../ui/utils.dart';
+import '../utils.dart';
const double rowPadding = 2.0;
// Flame chart rows contain text so are not readable if they do not scale with
@@ -287,7 +288,7 @@
child: Focus(
autofocus: true,
focusNode: focusNode,
- onKey: (node, event) => _handleKeyEvent(event),
+ onKeyEvent: (node, event) => _handleKeyEvent(event),
// Scrollbar needs to wrap [LayoutBuilder] so that the scroll bar is
// rendered on top of the custom painters defined in [buildCustomPaints]
child: Scrollbar(
@@ -452,48 +453,47 @@
);
}
- KeyEventResult _handleKeyEvent(RawKeyEvent event) {
+ KeyEventResult _handleKeyEvent(KeyEvent event) {
+ if (!event.isKeyDownOrRepeat) return KeyEventResult.ignored;
// Only handle down events so logic is not duplicated on key up.
- if (event is RawKeyDownEvent) {
- // TODO(kenz): zoom in/out faster if key is held. It actually zooms slower
- // if the key is held currently.
+ // TODO(kenz): zoom in/out faster if key is held. It actually zooms slower
+ // if the key is held currently.
- // Handle zooming / navigation from WASD keys. Use physical keys to match
- // other keyboard mappings like Dvorak, for which these keys would
- // translate to ,AOE keys. See
- // https://api.flutter.dev/flutter/services/RawKeyEvent/physicalKey.html.
- final eventKey = event.physicalKey;
- if (eventKey == PhysicalKeyboardKey.keyW) {
- unawaited(
- zoomTo(
- math.min(
- maxZoomLevel,
- currentZoom + keyboardZoomInUnit,
- ),
+ // Handle zooming / navigation from WASD keys. Use physical keys to match
+ // other keyboard mappings like Dvorak, for which these keys would
+ // translate to ,AOE keys. See
+ // https://api.flutter.dev/flutter/services/KeyEvent/physicalKey.html.
+ final eventKey = event.physicalKey;
+ if (eventKey == PhysicalKeyboardKey.keyW) {
+ unawaited(
+ zoomTo(
+ math.min(
+ maxZoomLevel,
+ currentZoom + keyboardZoomInUnit,
),
- );
- return KeyEventResult.handled;
- } else if (eventKey == PhysicalKeyboardKey.keyS) {
- unawaited(
- zoomTo(
- math.max(
- FlameChart.minZoomLevel,
- currentZoom - keyboardZoomOutUnit,
- ),
+ ),
+ );
+ return KeyEventResult.handled;
+ } else if (eventKey == PhysicalKeyboardKey.keyS) {
+ unawaited(
+ zoomTo(
+ math.max(
+ FlameChart.minZoomLevel,
+ currentZoom - keyboardZoomOutUnit,
),
- );
- return KeyEventResult.handled;
- } else if (eventKey == PhysicalKeyboardKey.keyA) {
- // `unawaited` does not work for FutureOr
- // ignore: discarded_futures
- scrollToX(horizontalControllerGroup.offset - keyboardScrollUnit);
- return KeyEventResult.handled;
- } else if (eventKey == PhysicalKeyboardKey.keyD) {
- // `unawaited` does not work for FutureOr
- // ignore: discarded_futures
- scrollToX(horizontalControllerGroup.offset + keyboardScrollUnit);
- return KeyEventResult.handled;
- }
+ ),
+ );
+ return KeyEventResult.handled;
+ } else if (eventKey == PhysicalKeyboardKey.keyA) {
+ // `unawaited` does not work for FutureOr
+ // ignore: discarded_futures
+ scrollToX(horizontalControllerGroup.offset - keyboardScrollUnit);
+ return KeyEventResult.handled;
+ } else if (eventKey == PhysicalKeyboardKey.keyD) {
+ // `unawaited` does not work for FutureOr
+ // ignore: discarded_futures
+ scrollToX(horizontalControllerGroup.offset + keyboardScrollUnit);
+ return KeyEventResult.handled;
}
return KeyEventResult.ignored;
}
@@ -1443,8 +1443,7 @@
bool shouldRepaint(CustomPainter oldDelegate) => this != oldDelegate;
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
if (other is! TimelineGridPainter) return false;
return zoom == other.zoom &&
constraints == other.constraints &&
diff --git a/packages/devtools_app/lib/src/shared/common_widgets.dart b/packages/devtools_app/lib/src/shared/common_widgets.dart
index f95b70c..9419613 100644
--- a/packages/devtools_app/lib/src/shared/common_widgets.dart
+++ b/packages/devtools_app/lib/src/shared/common_widgets.dart
@@ -705,25 +705,6 @@
Size get preferredSize => Size.zero;
}
-/// Button to export data.
-///
-/// * `minScreenWidthForTextBeforeScaling`: The minimum width the button can be before the text is
-/// omitted.
-/// * `onPressed`: The callback to be called upon pressing the button.
-class ExportButton extends GaDevToolsButton {
- ExportButton({
- required super.gaScreen,
- super.key,
- super.onPressed,
- super.minScreenWidthForTextBeforeScaling,
- super.tooltip = 'Export data',
- }) : super(
- icon: Icons.file_download,
- label: 'Export',
- gaSelection: gac.export,
- );
-}
-
/// Button to open related information / documentation.
///
/// [tooltip] specifies the hover text for the button.
@@ -848,6 +829,7 @@
required this.labelText,
TextEditingController? controller,
this.hintText,
+ this.prefixIcon,
this.onChanged,
this.autofocus = false,
}) : controller = controller ?? TextEditingController(),
@@ -855,6 +837,7 @@
final TextEditingController controller;
final String? hintText;
+ final Widget? prefixIcon;
final String labelText;
final Function(String)? onChanged;
final bool autofocus;
@@ -874,6 +857,7 @@
border: const OutlineInputBorder(),
labelText: labelText,
hintText: hintText,
+ prefixIcon: prefixIcon,
suffixIcon: IconButton(
tooltip: 'Clear',
icon: const Icon(Icons.clear),
@@ -1697,34 +1681,8 @@
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
-
- Widget textContent = RichText(
- overflow: TextOverflow.visible,
- text: TextSpan(
- text: title,
- style: enabled ? theme.regularTextStyle : theme.subtleTextStyle,
- ),
- );
-
- if (description != null) {
- textContent = Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- textContent,
- Expanded(
- child: RichText(
- maxLines: 2,
- overflow: TextOverflow.ellipsis,
- text: TextSpan(
- text: ' • $description',
- style: theme.subtleTextStyle,
- ),
- ),
- ),
- ],
- );
- }
- final content = Row(
+ Widget checkboxAndTitle = Row(
+ mainAxisSize: MainAxisSize.min,
children: [
NotifierCheckbox(
notifier: notifier,
@@ -1743,17 +1701,57 @@
checkboxKey: checkboxKey,
),
Flexible(
- child: textContent,
+ child: RichText(
+ overflow: TextOverflow.visible,
+ maxLines: 2,
+ text: TextSpan(
+ text: title,
+ style: enabled ? theme.regularTextStyle : theme.subtleTextStyle,
+ ),
+ ),
),
],
);
- if (tooltip != null && tooltip!.isNotEmpty) {
- return DevToolsTooltip(
- message: tooltip,
- child: content,
- );
+ if (description == null) {
+ checkboxAndTitle = Expanded(child: checkboxAndTitle);
}
- return content;
+ return maybeWrapWithTooltip(
+ tooltip: tooltip,
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ checkboxAndTitle,
+ if (description != null) ...[
+ Expanded(
+ child: Padding(
+ padding: const EdgeInsets.only(top: denseSpacing),
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ RichText(
+ text: TextSpan(
+ text: ' • ',
+ style: theme.subtleTextStyle,
+ ),
+ ),
+ Flexible(
+ child: RichText(
+ maxLines: 4,
+ overflow: TextOverflow.ellipsis,
+ text: TextSpan(
+ text: description,
+ style: theme.subtleTextStyle,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ],
+ ),
+ );
}
}
@@ -2081,11 +2079,12 @@
}
}
-class ToCsvButton extends StatelessWidget {
- const ToCsvButton({
+class DownloadButton extends StatelessWidget {
+ const DownloadButton({
Key? key,
this.onPressed,
- this.tooltip = 'Download data in CSV format',
+ this.tooltip = 'Download data',
+ this.label = 'Download',
required this.minScreenWidthForTextBeforeScaling,
required this.gaScreen,
required this.gaSelection,
@@ -2093,6 +2092,7 @@
final VoidCallback? onPressed;
final String? tooltip;
+ final String label;
final double minScreenWidthForTextBeforeScaling;
final String gaScreen;
final String gaSelection;
@@ -2100,7 +2100,7 @@
@override
Widget build(BuildContext context) {
return GaDevToolsButton(
- label: 'CSV',
+ label: label,
icon: Icons.file_download,
tooltip: tooltip,
gaScreen: gaScreen,
diff --git a/packages/devtools_app/lib/src/shared/config_specific/analysis_options.yaml b/packages/devtools_app/lib/src/shared/config_specific/analysis_options.yaml
deleted file mode 100644
index 73fe077..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/analysis_options.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-include: ../../../../analysis_options.yaml
-
-linter:
- rules:
- # For some reasons this doesn't work: https://github.com/dart-lang/linter/issues/4308
- avoid_web_libraries_in_flutter: false
diff --git a/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_stub.dart
deleted file mode 100644
index d3e3960..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_stub.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'drag_and_drop.dart';
-
-// ignore: avoid-unused-parameters, method is used from a conditional import
-DragAndDropManager createDragAndDropManager(int viewId) {
- throw Exception(
- 'Attempting to create DragAndDrop for unrecognized platform.',
- );
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_web.dart b/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_web.dart
index be251f5..7b816e5 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_web.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/_drag_and_drop_web.dart
@@ -4,8 +4,7 @@
import 'dart:async';
import 'dart:convert';
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
+import 'package:web/helpers.dart';
import '../../globals.dart';
import '../../primitives/utils.dart';
@@ -40,11 +39,11 @@
}
void _onDragOver(MouseEvent event) {
- dragOver(event.offset.x as double, event.offset.y as double);
+ dragOver(event.offsetX as double, event.offsetY as double);
// This is necessary to allow us to drop.
event.preventDefault();
- event.dataTransfer.dropEffect = 'move';
+ (event as DragEvent).dataTransfer!.dropEffect = 'move';
}
void _onDragLeave(MouseEvent _) {
@@ -61,28 +60,31 @@
// handler, return early.
if (activeState?.widget.handleDrop == null) return;
- final List<File> files = event.dataTransfer.files!;
+ final FileList files = (event as DragEvent).dataTransfer!.files;
if (files.length > 1) {
notificationService.push('You cannot import more than one file.');
return;
}
- final droppedFile = files.first;
- if (droppedFile.type != 'application/json') {
+ final droppedFile = files.item(0);
+ if (droppedFile?.type != 'application/json') {
notificationService.push(
- '${droppedFile.type} is not a supported file type. Please import '
+ '${droppedFile?.type} is not a supported file type. Please import '
'a .json file that was exported from Dart DevTools.',
);
return;
}
final FileReader reader = FileReader();
- reader.onLoad.listen((_) {
+ (reader as Element).onLoad.listen((event) {
try {
final Object json = jsonDecode(reader.result as String);
final devToolsJsonFile = DevToolsJsonFile(
- name: droppedFile.name,
- lastModifiedTime: droppedFile.lastModifiedDate,
+ name: droppedFile!.name,
+ lastModifiedTime: DateTime.fromMillisecondsSinceEpoch(
+ droppedFile.lastModified,
+ isUtc: true,
+ ),
data: json,
);
activeState!.widget.handleDrop!(devToolsJsonFile);
@@ -97,7 +99,7 @@
});
try {
- reader.readAsText(droppedFile);
+ reader.readAsText(droppedFile!);
} catch (e) {
notificationService.push('Could not import file: $e');
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/drag_and_drop.dart b/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/drag_and_drop.dart
index 3548bd1..25eb106 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/drag_and_drop.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/drag_and_drop/drag_and_drop.dart
@@ -6,9 +6,8 @@
import 'package:flutter/rendering.dart';
import '../../primitives/utils.dart';
-import '_drag_and_drop_stub.dart'
- if (dart.library.html) '_drag_and_drop_web.dart'
- if (dart.library.io) '_drag_and_drop_desktop.dart';
+import '_drag_and_drop_desktop.dart'
+ if (dart.library.js_interop) '_drag_and_drop_web.dart';
abstract class DragAndDropManager {
factory DragAndDropManager(int viewId) => createDragAndDropManager(viewId);
diff --git a/packages/devtools_app/lib/src/shared/config_specific/file/_file_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/file/_file_stub.dart
deleted file mode 100644
index 749f8dd..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/file/_file_stub.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'file.dart';
-
-FileIO createFileSystem() {
- throw Exception('Attempting to create FileSystem for unrecognized platform.');
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/file/file.dart b/packages/devtools_app/lib/src/shared/config_specific/file/file.dart
index 61178ad..777ac05 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/file/file.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/file/file.dart
@@ -2,9 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import '_file_stub.dart'
- if (dart.library.html) '_file_web.dart'
- if (dart.library.io) '_file_desktop.dart';
+import '_file_desktop.dart' if (dart.library.js_interop) '_file_web.dart';
abstract class FileIO {
factory FileIO() {
diff --git a/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_stub.dart
deleted file mode 100644
index f85df93..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_stub.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/// Return the url the application is launched from.
-Future<String> initializePlatform() {
- throw UnimplementedError(
- 'Attempting to initialize framework for unrecognized platform',
- );
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_web.dart b/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_web.dart
index 9899ed4..632b2ec 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_web.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/_framework_initialize_web.dart
@@ -2,22 +2,27 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html' hide Storage;
+import 'dart:js_interop';
import 'package:devtools_app_shared/utils.dart';
+import 'package:devtools_app_shared/web_utils.dart';
+import 'package:web/helpers.dart' hide Storage;
import '../../../service/service_manager.dart';
import '../../globals.dart';
import '../../primitives/storage.dart';
-import '../../server_api_client.dart';
+import '../../server/server_api_client.dart';
/// Return the url the application is launched from.
Future<String> initializePlatform() async {
// Clear out the unneeded HTML from index.html.
- for (var element in document.body!.querySelectorAll('.legacy-dart')) {
- element.remove();
- }
+ document.body!.querySelectorAll('.legacy-dart').forEach(
+ (Node element) {
+ if (element.parentNode != null) {
+ element.parentNode!.removeChild(element);
+ }
+ }.toJS,
+ );
// Here, we try and initialize the connection between the DevTools web app and
// its local server. DevTools can be launched without the server however, so
@@ -77,7 +82,10 @@
'repeat': event.repeat,
'shiftKey': event.shiftKey,
};
- window.parent?.postMessage({'command': 'keydown', 'data': data}, '*');
+ window.parent?.postMessage(
+ {'command': 'keydown', 'data': data}.jsify(),
+ '*'.toJS,
+ );
}
class ServerConnectionStorage implements Storage {
@@ -86,12 +94,12 @@
final DevToolsServerConnection connection;
@override
- Future<String> getValue(String key) async {
+ Future<String> getValue(String key) {
return connection.getPreferenceValue(key);
}
@override
- Future setValue(String key, String value) async {
+ Future<void> setValue(String key, String value) async {
await connection.setPreferenceValue(key, value);
}
}
@@ -103,7 +111,7 @@
}
@override
- Future setValue(String key, String value) async {
+ Future<void> setValue(String key, String value) async {
window.localStorage[key] = value;
}
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/framework_initialize.dart b/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/framework_initialize.dart
index 9b17bcc..c315afb 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/framework_initialize.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/framework_initialize/framework_initialize.dart
@@ -3,9 +3,8 @@
// found in the LICENSE file.
import '../../../framework/framework_core.dart';
-import '_framework_initialize_stub.dart'
- if (dart.library.html) '_framework_initialize_web.dart'
- if (dart.library.io) '_framework_initialize_desktop.dart';
+import '_framework_initialize_desktop.dart'
+ if (dart.library.js_interop) '_framework_initialize_web.dart';
Future<void> initializeFramework() async {
FrameworkCore.initGlobals();
diff --git a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_desktop.dart b/packages/devtools_app/lib/src/shared/config_specific/host_platform/_host_platform_desktop.dart
similarity index 100%
rename from packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_desktop.dart
rename to packages/devtools_app/lib/src/shared/config_specific/host_platform/_host_platform_desktop.dart
diff --git a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_web.dart b/packages/devtools_app/lib/src/shared/config_specific/host_platform/_host_platform_web.dart
similarity index 84%
rename from packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_web.dart
rename to packages/devtools_app/lib/src/shared/config_specific/host_platform/_host_platform_web.dart
index e812706..607b718 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_web.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/host_platform/_host_platform_web.dart
@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
+import 'package:web/helpers.dart';
class HostPlatform {
HostPlatform._() {
diff --git a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform.dart b/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform.dart
index 57c6246..4180848 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform.dart
@@ -2,6 +2,5 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-export 'host_platform_stub.dart'
- if (dart.library.html) 'host_platform_web.dart'
- if (dart.library.io) 'host_platform_desktop.dart';
+export '_host_platform_desktop.dart'
+ if (dart.library.js_interop) '_host_platform_web.dart';
diff --git a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_stub.dart
deleted file mode 100644
index 827c678..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/host_platform/host_platform_stub.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-class HostPlatform {
- static final HostPlatform instance = HostPlatform();
-
- bool get isMacOS => throw UnimplementedError();
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_stub.dart
deleted file mode 100644
index a3d8e4d..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_stub.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'import_export.dart';
-
-ExportController createExportController() {
- throw Exception(
- 'Attempting to create ExportController for unrecognized platform.',
- );
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_web.dart b/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_web.dart
index 3296ac8..5abfde4 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_web.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/import_export/_export_web.dart
@@ -2,8 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
+import 'dart:js_interop';
+
+import 'package:web/helpers.dart' hide NodeGlue;
import 'import_export.dart';
@@ -19,11 +20,14 @@
required String content,
required String fileName,
}) {
- final element = document.createElement('a');
- element.setAttribute('href', Url.createObjectUrl(Blob([content])));
+ final element = document.createElement('a') as HTMLAnchorElement;
+ element.setAttribute(
+ 'href',
+ URL.createObjectURL(Blob([content.toJS].toJS) as JSObject),
+ );
element.setAttribute('download', fileName);
element.style.display = 'none';
- document.body!.append(element);
+ (document.body as HTMLBodyElement).append(element as JSAny);
element.click();
element.remove();
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/import_export/import_export.dart b/packages/devtools_app/lib/src/shared/config_specific/import_export/import_export.dart
index 4addf55..283e9b9 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/import_export/import_export.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/import_export/import_export.dart
@@ -2,26 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'dart:async';
import 'dart:convert';
import 'package:devtools_app_shared/service.dart';
-import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
-import 'package:provider/provider.dart';
import '../../../../devtools.dart';
-import '../../analytics/analytics.dart' as ga;
-import '../../analytics/constants.dart' as gac;
-import '../../common_widgets.dart';
-import '../../file_import.dart';
import '../../globals.dart';
import '../../primitives/simple_items.dart';
import '../../primitives/utils.dart';
import '../../screen.dart';
-import '_export_stub.dart'
- if (dart.library.html) '_export_web.dart'
- if (dart.library.io) '_export_desktop.dart';
+import '_export_desktop.dart' if (dart.library.js_interop) '_export_web.dart';
const nonDevToolsFileMessage = 'The imported file is not a Dart DevTools file.'
' At this time, DevTools only supports importing files that were originally'
@@ -42,7 +33,6 @@
activeScreenId,
}
-// TODO(kenz): we should support a file picker import for desktop.
class ImportController {
ImportController(
this._pushSnapshotScreenForImport,
@@ -55,7 +45,7 @@
DateTime? previousImportTime;
// TODO(kenz): improve error handling here or in snapshot_screen.dart.
- void importData(DevToolsJsonFile jsonFile) {
+ void importData(DevToolsJsonFile jsonFile, {String? expectedScreenId}) {
final json = jsonFile.data;
// Do not allow two different imports within 500 ms of each other. This is a
@@ -81,6 +71,14 @@
// TODO(kenz): support imports for more than one screen at a time.
final activeScreenId =
devToolsSnapshot[DevToolsExportKeys.activeScreenId.name];
+ if (expectedScreenId != null && activeScreenId != expectedScreenId) {
+ notificationService.push(
+ 'Expected a data file for screen \'$expectedScreenId\' but received one'
+ ' for screen \'$activeScreenId\'. Please open a file for screen \'$expectedScreenId\'.',
+ );
+ return;
+ }
+
final connectedApp =
(devToolsSnapshot[DevToolsExportKeys.connectedApp.name] ??
<String, Object>{})
@@ -185,29 +183,3 @@
return jsonEncode(data);
}
}
-
-class ImportToolbarAction extends ScaffoldAction {
- ImportToolbarAction({super.key, Color? color})
- : super(
- icon: Icons.upload_rounded,
- tooltip: 'Load data for viewing in DevTools.',
- color: color,
- onPressed: (context) => unawaited(_importFile(context)),
- );
-
- static Future<void> _importFile(BuildContext context) async {
- ga.select(
- gac.devToolsMain,
- gac.importFile,
- );
- final DevToolsJsonFile? importedFile = await importFileFromPicker(
- acceptedTypes: ['json'],
- );
-
- if (importedFile != null) {
- // ignore: use_build_context_synchronously, by design
- Provider.of<ImportController>(context, listen: false)
- .importData(importedFile);
- }
- }
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_stub.dart
deleted file mode 100644
index 8b2e855..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_stub.dart
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-void launchUrlVSCode(String _) {
- // Do nothing
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_web.dart b/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_web.dart
index 49deb3f..d18fb01 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_web.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/launch_url/_launch_url_web.dart
@@ -2,15 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
+import 'dart:js_interop';
+
+import 'package:web/helpers.dart';
void launchUrlVSCode(String url) {
window.parent?.postMessage(
{
'command': 'launchUrl',
'data': {'url': url},
- },
- '*',
+ }.jsify(),
+ '*'.toJS,
);
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/launch_url/launch_url.dart b/packages/devtools_app/lib/src/shared/config_specific/launch_url/launch_url.dart
index cf3b5de..8bf4195 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/launch_url/launch_url.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/launch_url/launch_url.dart
@@ -5,9 +5,8 @@
import 'package:url_launcher/url_launcher.dart' as url_launcher;
import '../../globals.dart';
-import '_launch_url_stub.dart'
- if (dart.library.html) '_launch_url_web.dart'
- if (dart.library.io) '_launch_url_desktop.dart';
+import '_launch_url_desktop.dart'
+ if (dart.library.js_interop) '_launch_url_web.dart';
Future<void> launchUrl(String url) async {
final parsedUrl = Uri.tryParse(url);
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_default.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/_allowed_error_default.dart
similarity index 82%
rename from packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_default.dart
rename to packages/devtools_app/lib/src/shared/config_specific/logger/_allowed_error_default.dart
index 2fdb6ad..8c81594 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_default.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/logger/_allowed_error_default.dart
@@ -16,6 +16,9 @@
_log.shout('[${error.runtimeType}] ${errorLines.first}');
_log.shout(errorLines.skip(1).join('\n'));
}
+ // TODO(srawlins): This is an illegal return value (`null`) for all `T`.
+ // This function must return an actual `T`.
+ // ignore: null_argument_to_non_null_type
return Future<T>.value();
});
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_default.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/_allowed_error_web.dart
similarity index 60%
copy from packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_default.dart
copy to packages/devtools_app/lib/src/shared/config_specific/logger/_allowed_error_web.dart
index 2fdb6ad..27587f9 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_default.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/logger/_allowed_error_web.dart
@@ -2,9 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:logging/logging.dart';
+import 'dart:js_interop';
-final _log = Logger('allowed_error_default');
+import 'package:web/helpers.dart';
/// Catch and print errors from the given future. These errors are part of
/// normal operation for an app, and don't need to be reported to analytics
@@ -13,9 +13,13 @@
return future.catchError((Object error) {
if (logError) {
final errorLines = error.toString().split('\n');
- _log.shout('[${error.runtimeType}] ${errorLines.first}');
- _log.shout(errorLines.skip(1).join('\n'));
+ console.groupCollapsed('[${error.runtimeType}] ${errorLines.first}'.toJS);
+ console.log(errorLines.skip(1).join('\n').toJS);
+ console.groupEnd();
}
+ // TODO(srawlins): This is an illegal return value (`null`) for all `T`.
+ // This function must return an actual `T`.
+ // ignore: null_argument_to_non_null_type
return Future<T>.value();
});
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/logger_io.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/_logger_io.dart
similarity index 100%
rename from packages/devtools_app/lib/src/shared/config_specific/logger/logger_io.dart
rename to packages/devtools_app/lib/src/shared/config_specific/logger/_logger_io.dart
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/logger_default.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/_logger_web.dart
similarity index 67%
rename from packages/devtools_app/lib/src/shared/config_specific/logger/logger_default.dart
rename to packages/devtools_app/lib/src/shared/config_specific/logger/_logger_web.dart
index c02ff06..4e26fa8 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/logger_default.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/logger/_logger_web.dart
@@ -2,19 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// ignore_for_file: avoid_print
+import 'dart:js_interop';
+
+import 'package:web/helpers.dart';
import 'logger.dart';
void printToConsole(Object message, [LogLevel level = LogLevel.debug]) {
+ final jsMessage = message.jsify();
switch (level) {
case LogLevel.debug:
- print(message);
+ console.log(jsMessage);
break;
case LogLevel.warning:
- print('[WARNING]: $message');
+ console.warn(jsMessage);
break;
case LogLevel.error:
- print('[ERROR]: $message');
+ console.error(jsMessage);
}
}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error.dart
index d19e2ac..4595f5e 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error.dart
@@ -2,5 +2,5 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-export 'allowed_error_default.dart'
- if (dart.library.html) 'allowed_error_html.dart';
+export '_allowed_error_default.dart'
+ if (dart.library.js_interop) '_allowed_error_web.dart';
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_html.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_html.dart
deleted file mode 100644
index 050dab4..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/allowed_error_html.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
-
-/// Catch and print errors from the given future. These errors are part of
-/// normal operation for an app, and don't need to be reported to analytics
-/// (i.e., they're not DevTools crashes).
-Future<T> allowedError<T>(Future<T> future, {bool logError = true}) {
- return future.catchError((Object error) {
- if (logError) {
- final errorLines = error.toString().split('\n');
- window.console
- .groupCollapsed('[${error.runtimeType}] ${errorLines.first}');
- window.console.log(errorLines.skip(1).join('\n'));
- window.console.groupEnd();
- }
- return Future<T>.value();
- });
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/logger.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/logger.dart
index c2b5b0e..5af1b87 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/logger.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/logger/logger.dart
@@ -2,9 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-export 'logger_default.dart'
- if (dart.library.html) 'logger_html.dart'
- if (dart.library.io) 'logger_io.dart';
+export '_logger_io.dart' if (dart.library.js_interop) '_logger_web.dart';
enum LogLevel {
debug,
diff --git a/packages/devtools_app/lib/src/shared/config_specific/logger/logger_html.dart b/packages/devtools_app/lib/src/shared/config_specific/logger/logger_html.dart
deleted file mode 100644
index cb8ebe5..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/logger/logger_html.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
-
-import 'logger.dart';
-
-void printToConsole(Object message, [LogLevel level = LogLevel.debug]) {
- switch (level) {
- case LogLevel.debug:
- window.console.log(message);
- break;
- case LogLevel.warning:
- window.console.warn(message);
- break;
- case LogLevel.error:
- window.console.error(message);
- }
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_desktop.dart b/packages/devtools_app/lib/src/shared/config_specific/notifications/_notifications_desktop.dart
similarity index 100%
rename from packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_desktop.dart
rename to packages/devtools_app/lib/src/shared/config_specific/notifications/_notifications_desktop.dart
diff --git a/packages/devtools_app/lib/src/shared/config_specific/notifications/_notifications_web.dart b/packages/devtools_app/lib/src/shared/config_specific/notifications/_notifications_web.dart
new file mode 100644
index 0000000..b0617d2
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/config_specific/notifications/_notifications_web.dart
@@ -0,0 +1,27 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+import 'dart:js_interop';
+
+import 'package:web/helpers.dart' as web_helpers;
+import 'package:web/web.dart';
+
+class Notification {
+ Notification(String title, {String body = ''}) {
+ _impl = web_helpers.Notification(
+ title,
+ NotificationOptions(body: body),
+ );
+ }
+
+ late final web_helpers.Notification _impl;
+
+ static Future<String> requestPermission() async =>
+ ((await web_helpers.Notification.requestPermission().toDart) as JSString)
+ .toDart;
+
+ void close() {
+ _impl.close();
+ }
+}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications.dart b/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications.dart
index c81b484..6c533fa 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications.dart
@@ -2,6 +2,5 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-export 'notifications_stub.dart'
- if (dart.library.html) 'notifications_web.dart'
- if (dart.library.io) 'notifications_desktop.dart';
+export '_notifications_desktop.dart'
+ if (dart.library.js_interop) '_notifications_web.dart';
diff --git a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_stub.dart
deleted file mode 100644
index 9af62a0..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_stub.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-class Notification {
- Notification(String title, {String? body}) {
- throw Exception('unsupported platform');
- }
-
- static Future<String> requestPermission() {
- throw Exception('unsupported platform');
- }
-
- void close() {
- throw Exception('unsupported platform');
- }
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_web.dart b/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_web.dart
deleted file mode 100644
index f05e8ce..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/notifications/notifications_web.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html' as html;
-
-class Notification {
- Notification(String title, {String? body}) {
- _impl = html.Notification(title, body: body);
- }
-
- late final html.Notification _impl;
-
- static Future<String> requestPermission() {
- return html.Notification.requestPermission();
- }
-
- void close() {
- _impl.close();
- }
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/post_message/_post_message_stub.dart
similarity index 100%
rename from packages/devtools_app/lib/src/shared/config_specific/post_message/post_message_stub.dart
rename to packages/devtools_app/lib/src/shared/config_specific/post_message/_post_message_stub.dart
diff --git a/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message_web.dart b/packages/devtools_app/lib/src/shared/config_specific/post_message/_post_message_web.dart
similarity index 66%
rename from packages/devtools_app/lib/src/shared/config_specific/post_message/post_message_web.dart
rename to packages/devtools_app/lib/src/shared/config_specific/post_message/_post_message_web.dart
index 7630660..cd73bc9 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message_web.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/post_message/_post_message_web.dart
@@ -2,18 +2,20 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-import 'dart:html' as html;
+import 'dart:js_interop';
+
+import 'package:web/helpers.dart';
import 'post_message.dart';
Stream<PostMessageEvent> get onPostMessage {
- return html.window.onMessage.map(
+ return window.onMessage.map(
(message) => PostMessageEvent(
origin: message.origin,
- data: message.data,
+ data: message.data.dartify(),
),
);
}
void postMessage(Object? message, String targetOrigin) =>
- html.window.parent?.postMessage(message, targetOrigin);
+ window.parent?.postMessage(message.jsify(), targetOrigin.toJS);
diff --git a/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message.dart b/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message.dart
index 09463d7..a13c74d 100644
--- a/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message.dart
+++ b/packages/devtools_app/lib/src/shared/config_specific/post_message/post_message.dart
@@ -2,7 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-export 'post_message_stub.dart' if (dart.library.html) 'post_message_web.dart';
+export '_post_message_stub.dart'
+ if (dart.library.js_interop) '_post_message_web.dart';
class PostMessageEvent {
PostMessageEvent({
diff --git a/packages/devtools_app/lib/src/shared/config_specific/server/_server_stub.dart b/packages/devtools_app/lib/src/shared/config_specific/server/_server_stub.dart
deleted file mode 100644
index e21ae29..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/server/_server_stub.dart
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-// Avoid unused parameters does not understand conditional imports.
-// ignore_for_file: avoid-unused-parameters
-import 'dart:async';
-
-import 'package:devtools_shared/devtools_deeplink.dart';
-import 'package:devtools_shared/devtools_extensions.dart';
-
-import '../../development_helpers.dart';
-import '../../primitives/utils.dart';
-
-const unsupportedMessage =
- 'Unsupported RPC: The DevTools Server is not available on Desktop';
-
-bool get isDevToolsServerAvailable => false;
-
-// This is used in g3.
-Future<Object?> request(String url) async {
- throw Exception(unsupportedMessage);
-}
-
-Future<bool> isFirstRun() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<bool> isAnalyticsEnabled() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<bool> setAnalyticsEnabled([bool value = true]) async {
- throw Exception(unsupportedMessage);
-}
-
-Future<String> flutterGAClientID() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<bool> setActiveSurvey(String value) async {
- throw Exception(unsupportedMessage);
-}
-
-Future<bool> surveyActionTaken() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<void> setSurveyActionTaken() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<int> surveyShownCount() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<int> incrementSurveyShownCount() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<String> getLastShownReleaseNotesVersion() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<String> setLastShownReleaseNotesVersion(String version) async {
- throw Exception(unsupportedMessage);
-}
-
-// currently unused
-Future<void> resetDevToolsFile() async {
- throw Exception(unsupportedMessage);
-}
-
-Future<DevToolsJsonFile?> requestBaseAppSizeFile(String path) async {
- throw Exception(unsupportedMessage);
-}
-
-Future<DevToolsJsonFile?> requestTestAppSizeFile(String path) async {
- throw Exception(unsupportedMessage);
-}
-
-Future<List<DevToolsExtensionConfig>> refreshAvailableExtensions(
- String rootPath,
-) async {
- return debugHandleRefreshAvailableExtensions(rootPath);
-}
-
-Future<ExtensionEnabledState> extensionEnabledState({
- required String rootPath,
- required String extensionName,
- bool? enable,
-}) async {
- return debugHandleExtensionEnabledState(
- rootPath: rootPath,
- extensionName: extensionName,
- enable: enable,
- );
-}
-
-Future<List<String>> requestAndroidBuildVariants(String path) async =>
- const <String>[];
-
-Future<AppLinkSettings> requestAndroidAppLinkSettings(
- String path, {
- required String buildVariant,
-}) async =>
- AppLinkSettings.empty;
-
-Future<XcodeBuildOptions> requestIosBuildOptions(String path) async =>
- XcodeBuildOptions.empty;
-
-Future<UniversalLinkSettings> requestIosUniversalLinkSettings(
- String path, {
- required String configuration,
- required String target,
-}) async =>
- UniversalLinkSettings.empty;
-
-void logWarning() {
- throw Exception(unsupportedMessage);
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/server/_server_web.dart b/packages/devtools_app/lib/src/shared/config_specific/server/_server_web.dart
deleted file mode 100644
index 13fda0c..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/server/_server_web.dart
+++ /dev/null
@@ -1,502 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-import 'dart:async';
-import 'dart:convert';
-// TODO(jacobr): this should use package:http instead of dart:html.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
-
-import 'package:collection/collection.dart';
-import 'package:devtools_shared/devtools_deeplink.dart';
-import 'package:devtools_shared/devtools_extensions.dart';
-import 'package:devtools_shared/devtools_shared.dart';
-import 'package:logging/logging.dart';
-
-import '../../development_helpers.dart';
-import '../../primitives/utils.dart';
-
-final _log = Logger('_server_web');
-
-// Code to check if DevTools server is available, will only be true in release
-// mode, debug mode will be set to false.
-bool get isDevToolsServerAvailable => !isDebugBuild();
-
-/// Helper to catch any server request which could fail.
-///
-/// Returns HttpRequest or null (if server failure).
-Future<HttpRequest?> request(String url) async {
- HttpRequest? response;
-
- try {
- response = await HttpRequest.request(url, method: 'POST');
- } catch (_) {}
-
- return response;
-}
-
-/// Request DevTools property value 'firstRun' (GA dialog) stored in the file
-/// '~/flutter-devtools/.devtools'.
-Future<bool> isFirstRun() async {
- bool firstRun = false;
-
- if (isDevToolsServerAvailable) {
- final resp = await request(apiGetDevToolsFirstRun);
- if (resp?.status == HttpStatus.ok) {
- firstRun = json.decode(resp!.responseText!);
- } else {
- logWarning(resp, apiGetDevToolsFirstRun);
- }
- }
-
- return firstRun;
-}
-
-/// Request DevTools property value 'enabled' (GA enabled) stored in the file
-/// '~/.flutter-devtools/.devtools'.
-Future<bool> isAnalyticsEnabled() async {
- bool enabled = false;
- if (isDevToolsServerAvailable) {
- final resp = await request(apiGetDevToolsEnabled);
- if (resp?.status == HttpStatus.ok) {
- enabled = json.decode(resp!.responseText!);
- } else {
- logWarning(resp, apiGetDevToolsEnabled);
- }
- }
- return enabled;
-}
-
-/// Set the DevTools property 'enabled' (GA enabled) stored in the file
-/// '~/.flutter-devtools/.devtools'.
-///
-/// Returns whether the set call was successful.
-Future<bool> setAnalyticsEnabled([bool value = true]) async {
- if (isDevToolsServerAvailable) {
- final resp = await request(
- '$apiSetDevToolsEnabled'
- '?$devToolsEnabledPropertyName=$value',
- );
- if (resp?.status == HttpStatus.ok) {
- assert(json.decode(resp!.responseText!) == value);
- return true;
- } else {
- logWarning(resp, apiSetDevToolsEnabled, resp?.responseText);
- }
- }
- return false;
-}
-
-// TODO(terry): Move to an API scheme similar to the VM service extension where
-// '/api/devToolsEnabled' returns the value (identical VM service) and
-// '/api/devToolsEnabled?value=true' sets the value.
-
-/// Request Flutter tool stored property value enabled (GA enabled) stored in
-/// the file '~\.flutter'.
-///
-/// Return bool.
-/// Return value of false implies either GA is disabled or the Flutter Tool has
-/// never been run (null returned from the server).
-Future<bool> _isFlutterGAEnabled() async {
- bool enabled = false;
-
- if (isDevToolsServerAvailable) {
- final resp = await request(apiGetFlutterGAEnabled);
- if (resp?.status == HttpStatus.ok) {
- // A return value of 'null' implies Flutter tool has never been run so
- // return false for Flutter GA enabled.
- final responseValue = json.decode(resp!.responseText!);
- enabled = responseValue ?? false;
- } else {
- logWarning(resp, apiGetFlutterGAEnabled);
- }
- }
-
- return enabled;
-}
-
-/// Request Flutter tool stored property value clientID (GA enabled) stored in
-/// the file '~\.flutter'.
-///
-/// Return as a String, empty string implies Flutter Tool has never been run.
-Future<String> flutterGAClientID() async {
- // Default empty string, Flutter tool never run.
- String clientId = '';
-
- if (isDevToolsServerAvailable) {
- // Test if Flutter is enabled (or if Flutter Tool ever ran) if not enabled
- // is false, we don't want to be the first to create a ~/.flutter file.
- if (await _isFlutterGAEnabled()) {
- final resp = await request(apiGetFlutterGAClientId);
- if (resp?.status == HttpStatus.ok) {
- clientId = json.decode(resp!.responseText!);
- if (clientId.isEmpty) {
- // Requested value of 'null' (Flutter tool never ran). Server request
- // apiGetFlutterGAClientId should not happen because the
- // isFlutterGAEnabled test should have been false.
- _log.warning('$apiGetFlutterGAClientId is empty');
- }
- } else {
- logWarning(resp, apiGetFlutterGAClientId);
- }
- }
- }
-
- return clientId;
-}
-
-/// Set DevTools parameter value for the active survey (e.g. 'Q1-2020').
-///
-/// The value is stored in the file '~/.flutter-devtools/.devtools'.
-///
-/// This method must be called before calling other survey related methods
-/// ([isSurveyActionTaken], [setSurveyActionTaken], [surveyShownCount],
-/// [incrementSurveyShownCount]). If the active survey is not set, warnings are
-/// logged.
-Future<bool> setActiveSurvey(String value) async {
- if (isDevToolsServerAvailable) {
- final resp = await request(
- '$apiSetActiveSurvey'
- '?$activeSurveyName=$value',
- );
- if (resp?.status == HttpStatus.ok && json.decode(resp!.responseText!)) {
- return true;
- } else {
- logWarning(resp, apiSetActiveSurvey);
- }
- }
- return false;
-}
-
-/// Request DevTools property value 'surveyActionTaken' for the active survey.
-///
-/// The value is stored in the file '~/.flutter-devtools/.devtools'.
-///
-/// Requires [setActiveSurvey] to have been called prior to calling this method.
-Future<bool> surveyActionTaken() async {
- bool surveyActionTaken = false;
-
- if (isDevToolsServerAvailable) {
- final resp = await request(apiGetSurveyActionTaken);
- if (resp?.status == HttpStatus.ok) {
- surveyActionTaken = json.decode(resp!.responseText!);
- } else {
- logWarning(resp, apiGetSurveyActionTaken);
- }
- }
-
- return surveyActionTaken;
-}
-
-/// Set DevTools property value 'surveyActionTaken' for the active survey.
-///
-/// The value is stored in the file '~/.flutter-devtools/.devtools'.
-///
-/// Requires [setActiveSurvey] to have been called prior to calling this method.
-Future<void> setSurveyActionTaken() async {
- if (isDevToolsServerAvailable) {
- final resp = await request(
- '$apiSetSurveyActionTaken'
- '?$surveyActionTakenPropertyName=true',
- );
- if (resp?.status != HttpStatus.ok || !json.decode(resp!.responseText!)) {
- logWarning(resp, apiSetSurveyActionTaken, resp?.responseText);
- }
- }
-}
-
-/// Request DevTools property value 'surveyShownCount' for the active survey.
-///
-/// The value is stored in the file '~/.flutter-devtools/.devtools'.
-///
-/// Requires [setActiveSurvey] to have been called prior to calling this method.
-Future<int> surveyShownCount() async {
- int surveyShownCount = 0;
-
- if (isDevToolsServerAvailable) {
- final resp = await request(apiGetSurveyShownCount);
- if (resp?.status == HttpStatus.ok) {
- surveyShownCount = json.decode(resp!.responseText!);
- } else {
- logWarning(resp, apiGetSurveyShownCount);
- }
- }
-
- return surveyShownCount;
-}
-
-/// Increment DevTools property value 'surveyShownCount' for the active survey.
-///
-/// The value is stored in the file '~/.flutter-devtools/.devtools'.
-///
-/// Requires [setActiveSurvey] to have been called prior to calling this method.
-Future<int> incrementSurveyShownCount() async {
- // Any failure will still return 0.
- int surveyShownCount = 0;
-
- if (isDevToolsServerAvailable) {
- final resp = await request(apiIncrementSurveyShownCount);
- if (resp?.status == HttpStatus.ok) {
- surveyShownCount = json.decode(resp!.responseText!);
- } else {
- logWarning(resp, apiIncrementSurveyShownCount);
- }
- }
- return surveyShownCount;
-}
-
-/// Requests the DevTools version for which we last showed release notes.
-///
-/// This value is stored in the file '~/.flutter-devtools/.devtools'.
-Future<String> getLastShownReleaseNotesVersion() async {
- String version = '';
- if (isDevToolsServerAvailable) {
- final resp = await request(apiGetLastReleaseNotesVersion);
- if (resp?.status == HttpStatus.ok) {
- version = json.decode(resp!.responseText!);
- } else {
- logWarning(resp, apiGetLastReleaseNotesVersion);
- }
- }
- return version;
-}
-
-/// Sets the DevTools version for which we last showed release notes.
-///
-/// This value is stored in the file '~/.flutter-devtools/.devtools'.
-Future<void> setLastShownReleaseNotesVersion(String version) async {
- if (isDevToolsServerAvailable) {
- final resp = await request(
- '$apiSetLastReleaseNotesVersion'
- '?$lastReleaseNotesVersionPropertyName=$version',
- );
- if (resp == null ||
- resp.status != HttpStatus.ok ||
- !json.decode(resp.responseText!)) {
- logWarning(resp, apiSetLastReleaseNotesVersion, resp?.responseText);
- }
- }
-}
-
-// currently unused
-/// Requests all .devtools properties to be reset to their default values in the
-/// file '~/.flutter-devtools/.devtools'.
-Future<void> resetDevToolsFile() async {
- if (isDevToolsServerAvailable) {
- final resp = await request(apiResetDevTools);
- if (resp?.status == HttpStatus.ok) {
- assert(json.decode(resp!.responseText!));
- } else {
- logWarning(resp, apiResetDevTools);
- }
- }
-}
-
-Future<DevToolsJsonFile?> requestBaseAppSizeFile(String path) {
- return requestFile(
- api: apiGetBaseAppSizeFile,
- fileKey: baseAppSizeFilePropertyName,
- filePath: path,
- );
-}
-
-Future<DevToolsJsonFile?> requestTestAppSizeFile(String path) {
- return requestFile(
- api: apiGetTestAppSizeFile,
- fileKey: testAppSizeFilePropertyName,
- filePath: path,
- );
-}
-
-Future<DevToolsJsonFile?> requestFile({
- required String api,
- required String fileKey,
- required String filePath,
-}) async {
- if (isDevToolsServerAvailable) {
- final url = Uri(path: api, queryParameters: {fileKey: filePath});
- final resp = await request(url.toString());
- if (resp?.status == HttpStatus.ok) {
- return _devToolsJsonFileFromResponse(resp!, filePath);
- } else {
- logWarning(resp, api);
- }
- }
- return null;
-}
-
-DevToolsJsonFile _devToolsJsonFileFromResponse(
- HttpRequest resp,
- String filePath,
-) {
- final data = json.decode(resp.response);
- final lastModified = data['lastModifiedTime'];
- final lastModifiedTime =
- lastModified != null ? DateTime.parse(lastModified) : DateTime.now();
- return DevToolsJsonFile(
- name: filePath,
- lastModifiedTime: lastModifiedTime,
- data: data,
- );
-}
-
-/// Makes a request to the server to refresh the list of available extensions,
-/// serve their assets on the server, and return the list of available
-/// extensions here.
-Future<List<DevToolsExtensionConfig>> refreshAvailableExtensions(
- String rootPath,
-) async {
- if (isDevToolsServerAvailable) {
- final uri = Uri(
- path: ExtensionsApi.apiServeAvailableExtensions,
- queryParameters: {ExtensionsApi.extensionRootPathPropertyName: rootPath},
- );
- final resp = await request(uri.toString());
- if (resp?.status == HttpStatus.ok) {
- final parsedResult = json.decode(resp!.responseText!);
- final extensionsAsJson =
- (parsedResult[ExtensionsApi.extensionsResultPropertyName]!
- as List<Object?>)
- .whereNotNull()
- .cast<Map<String, Object?>>();
- return extensionsAsJson
- .map((p) => DevToolsExtensionConfig.parse(p))
- .toList();
- } else {
- logWarning(resp, ExtensionsApi.apiServeAvailableExtensions);
- return [];
- }
- } else if (debugDevToolsExtensions) {
- return debugHandleRefreshAvailableExtensions(rootPath);
- }
- return [];
-}
-
-/// Makes a request to the server to look up the enabled state for a
-/// DevTools extension, and optionally to set the enabled state (when [enable]
-/// is non-null).
-///
-/// If [enable] is specified, the server will first set the enabled state
-/// to the value set forth by [enable] and then return the value that is saved
-/// to disk.
-Future<ExtensionEnabledState> extensionEnabledState({
- required String rootPath,
- required String extensionName,
- bool? enable,
-}) async {
- if (isDevToolsServerAvailable) {
- final uri = Uri(
- path: ExtensionsApi.apiExtensionEnabledState,
- queryParameters: {
- ExtensionsApi.extensionRootPathPropertyName: rootPath,
- ExtensionsApi.extensionNamePropertyName: extensionName,
- if (enable != null)
- ExtensionsApi.enabledStatePropertyName: enable.toString(),
- },
- );
- final resp = await request(uri.toString());
- if (resp?.status == HttpStatus.ok) {
- final parsedResult = json.decode(resp!.responseText!);
- return ExtensionEnabledState.from(parsedResult);
- } else {
- logWarning(resp, ExtensionsApi.apiExtensionEnabledState);
- }
- } else if (debugDevToolsExtensions) {
- return debugHandleExtensionEnabledState(
- rootPath: rootPath,
- extensionName: extensionName,
- enable: enable,
- );
- }
- return ExtensionEnabledState.error;
-}
-
-Future<List<String>> requestAndroidBuildVariants(String path) async {
- if (isDevToolsServerAvailable) {
- final uri = Uri(
- path: DeeplinkApi.androidBuildVariants,
- queryParameters: {
- DeeplinkApi.deeplinkRootPathPropertyName: path,
- },
- );
- final resp = await request(uri.toString());
- if (resp?.status == HttpStatus.ok) {
- return json.decode(resp!.responseText!);
- } else {
- logWarning(resp, DeeplinkApi.androidBuildVariants);
- }
- }
- return const <String>[];
-}
-
-Future<AppLinkSettings> requestAndroidAppLinkSettings(
- String path, {
- required String buildVariant,
-}) async {
- if (isDevToolsServerAvailable) {
- final uri = Uri(
- path: DeeplinkApi.androidAppLinkSettings,
- queryParameters: {
- DeeplinkApi.deeplinkRootPathPropertyName: path,
- DeeplinkApi.androidBuildVariantPropertyName: buildVariant,
- },
- );
- final resp = await request(uri.toString());
- if (resp?.status == HttpStatus.ok) {
- return AppLinkSettings.fromJson(resp!.responseText!);
- } else {
- logWarning(resp, DeeplinkApi.androidAppLinkSettings);
- }
- }
- return AppLinkSettings.empty;
-}
-
-Future<XcodeBuildOptions> requestIosBuildOptions(String path) async {
- if (isDevToolsServerAvailable) {
- final uri = Uri(
- path: DeeplinkApi.iosBuildOptions,
- queryParameters: {
- DeeplinkApi.deeplinkRootPathPropertyName: path,
- },
- );
- final resp = await request(uri.toString());
- if (resp?.status == HttpStatus.ok) {
- return XcodeBuildOptions.fromJson(resp!.responseText!);
- } else {
- logWarning(resp, DeeplinkApi.iosBuildOptions);
- }
- }
- return XcodeBuildOptions.empty;
-}
-
-Future<UniversalLinkSettings> requestIosUniversalLinkSettings(
- String path, {
- required String configuration,
- required String target,
-}) async {
- if (isDevToolsServerAvailable) {
- final uri = Uri(
- path: DeeplinkApi.iosUniversalLinkSettings,
- queryParameters: {
- DeeplinkApi.deeplinkRootPathPropertyName: path,
- DeeplinkApi.xcodeConfigurationPropertyName: configuration,
- DeeplinkApi.xcodeTargetPropertyName: target,
- },
- );
- final resp = await request(uri.toString());
- if (resp?.status == HttpStatus.ok) {
- return UniversalLinkSettings.fromJson(resp!.responseText!);
- } else {
- logWarning(resp, DeeplinkApi.iosUniversalLinkSettings);
- }
- }
- return UniversalLinkSettings.empty;
-}
-
-void logWarning(HttpRequest? response, String apiType, [String? respText]) {
- _log.warning(
- 'HttpRequest $apiType failed status = ${response?.status}'
- '${respText != null ? ', responseText = $respText' : ''}',
- );
-}
diff --git a/packages/devtools_app/lib/src/shared/config_specific/server/server.dart b/packages/devtools_app/lib/src/shared/config_specific/server/server.dart
deleted file mode 100644
index 774dee0..0000000
--- a/packages/devtools_app/lib/src/shared/config_specific/server/server.dart
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found
-// in the LICENSE file.
-
-export '_server_stub.dart' if (dart.library.html) '_server_web.dart';
diff --git a/packages/devtools_app/lib/src/shared/console/console_service.dart b/packages/devtools_app/lib/src/shared/console/console_service.dart
index f2149e5..bd021bf 100644
--- a/packages/devtools_app/lib/src/shared/console/console_service.dart
+++ b/packages/devtools_app/lib/src/shared/console/console_service.dart
@@ -258,15 +258,16 @@
if (!_serviceInitialized &&
serviceConnection.serviceManager.isServiceAvailable) {
autoDisposeStreamSubscription(
- serviceConnection.serviceManager.service!.onStdoutEventWithHistory
+ serviceConnection.serviceManager.service!.onStdoutEventWithHistorySafe
.listen(_handleStdoutEvent),
);
autoDisposeStreamSubscription(
- serviceConnection.serviceManager.service!.onStderrEventWithHistory
+ serviceConnection.serviceManager.service!.onStderrEventWithHistorySafe
.listen(_handleStderrEvent),
);
autoDisposeStreamSubscription(
- serviceConnection.serviceManager.service!.onExtensionEventWithHistory
+ serviceConnection
+ .serviceManager.service!.onExtensionEventWithHistorySafe
.listen(_handleExtensionEvent),
);
_serviceInitialized = true;
diff --git a/packages/devtools_app/lib/src/shared/console/eval/inspector_tree.dart b/packages/devtools_app/lib/src/shared/console/eval/inspector_tree.dart
index 1481936..b7b7436 100644
--- a/packages/devtools_app/lib/src/shared/console/eval/inspector_tree.dart
+++ b/packages/devtools_app/lib/src/shared/console/eval/inspector_tree.dart
@@ -2,15 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-/// Inspector specific tree rendering support designed to be extendable to work
-/// either directly with dart:html or with Hummingbird.
+/// Inspector specific tree rendering support.
///
-/// This library must not have direct dependencies on dart:html.
+/// This library must not have direct dependencies on web-only libraries.
///
-/// This allows tests of the complicated logic in this class to run on the VM
-/// and will help simplify porting this code to work with Hummingbird.
-
-library inspector_tree;
+/// This allows tests of the complicated logic in this class to run on the VM.
+library;
import 'package:devtools_app_shared/ui.dart';
import 'package:flutter/foundation.dart';
@@ -18,7 +15,6 @@
import '../../diagnostics/diagnostics_node.dart';
import '../../ui/search.dart';
import '../../utils.dart';
-import '../primitives/simple_items.dart';
/// Split text into two groups, word characters at the start of a string and all
/// other characters.
@@ -98,8 +94,6 @@
Iterable<InspectorTreeNode> get children => _children;
- bool get isCreatedByLocalProject => _diagnostic!.isCreatedByLocalProject;
-
bool get isProperty {
final diagnosticLocal = diagnostic;
return diagnosticLocal == null || diagnosticLocal.isProperty;
@@ -167,8 +161,6 @@
int get subtreeSize => childrenCount + 1;
- bool get isLeaf => _children.isEmpty;
-
// TODO(jacobr): move getRowIndex to the InspectorTree class.
int getRowIndex(InspectorTreeNode node) {
int index = 0;
@@ -294,35 +286,19 @@
class InspectorTreeConfig {
InspectorTreeConfig({
- required this.summaryTree,
- required this.treeType,
this.onNodeAdded,
this.onClientActiveChange,
this.onSelectionChange,
this.onExpand,
- this.onHover,
});
- final bool summaryTree;
- final FlutterTreeType treeType;
final NodeAddedCallback? onNodeAdded;
final VoidCallback? onSelectionChange;
final void Function(bool added)? onClientActiveChange;
final TreeEventCallback? onExpand;
- final TreeEventCallback? onHover;
}
enum SearchTargetType {
widget,
// TODO(https://github.com/flutter/devtools/issues/3489) implement other search scopes: details, all etc
}
-
-extension SearchTargetTypeExtension on SearchTargetType {
- String get name {
- switch (this) {
- case SearchTargetType.widget:
- default:
- return 'Widget';
- }
- }
-}
diff --git a/packages/devtools_app/lib/src/shared/console/primitives/simple_items.dart b/packages/devtools_app/lib/src/shared/console/primitives/simple_items.dart
index 55ff0d5..76e96ff 100644
--- a/packages/devtools_app/lib/src/shared/console/primitives/simple_items.dart
+++ b/packages/devtools_app/lib/src/shared/console/primitives/simple_items.dart
@@ -4,9 +4,5 @@
// TODO(jacobr): add render, semantics, and layer trees.
enum FlutterTreeType {
- widget('Widget');
-
- const FlutterTreeType(this.title);
-
- final String title;
+ widget,
}
diff --git a/packages/devtools_app/lib/src/shared/console/widgets/evaluate.dart b/packages/devtools_app/lib/src/shared/console/widgets/evaluate.dart
index 1b31b9d..bfd8e2e 100644
--- a/packages/devtools_app/lib/src/shared/console/widgets/evaluate.dart
+++ b/packages/devtools_app/lib/src/shared/console/widgets/evaluate.dart
@@ -4,7 +4,6 @@
import 'dart:async';
import 'dart:math';
-import 'dart:ui';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
@@ -17,6 +16,7 @@
import '../../globals.dart';
import '../../ui/search.dart';
import '../../ui/utils.dart';
+import '../../utils.dart';
import '../eval/auto_complete.dart';
import '../eval/eval_service.dart';
import '../primitives/assignment.dart';
@@ -174,7 +174,7 @@
if (matches.length == 1 && matches.first == parts.activeWord) {
// It is not useful to show a single autocomplete that is exactly what
- // the already typed.
+ // they already typed.
_autoCompleteController
..clearSearchAutoComplete()
..clearCurrentSuggestion();
@@ -205,14 +205,15 @@
const SizedBox(width: 8.0),
Expanded(
child: Focus(
- onKey: (_, RawKeyEvent event) {
- if (event.isKeyPressed(LogicalKeyboardKey.arrowUp)) {
+ onKeyEvent: (_, event) {
+ if (!event.isKeyDownOrRepeat) return KeyEventResult.ignored;
+ if (event.logicalKey == LogicalKeyboardKey.arrowUp) {
_historyNavUp();
return KeyEventResult.handled;
- } else if (event.isKeyPressed(LogicalKeyboardKey.arrowDown)) {
+ } else if (event.logicalKey == LogicalKeyboardKey.arrowDown) {
_historyNavDown();
return KeyEventResult.handled;
- } else if (event.isKeyPressed(LogicalKeyboardKey.enter)) {
+ } else if (event.logicalKey == LogicalKeyboardKey.enter) {
_handleExpressionEval(context);
return KeyEventResult.handled;
}
diff --git a/packages/devtools_app/lib/src/shared/development_helpers.dart b/packages/devtools_app/lib/src/shared/development_helpers.dart
index 5be8c71..1d23d5a 100644
--- a/packages/devtools_app/lib/src/shared/development_helpers.dart
+++ b/packages/devtools_app/lib/src/shared/development_helpers.dart
@@ -6,6 +6,7 @@
import 'package:meta/meta.dart';
import 'globals.dart';
+import 'survey.dart';
/// Enable this flag to debug analytics when DevTools is run in debug or profile
/// mode, otherwise analytics will only be sent in release builds.
@@ -62,6 +63,7 @@
DevToolsExtensionConfig.issueTrackerKey: 'www.google.com',
DevToolsExtensionConfig.versionKey: '1.0.0',
DevToolsExtensionConfig.pathKey: '/path/to/foo',
+ DevToolsExtensionConfig.isPubliclyHostedKey: 'false',
}),
DevToolsExtensionConfig.parse({
DevToolsExtensionConfig.nameKey: 'bar',
@@ -69,6 +71,7 @@
DevToolsExtensionConfig.versionKey: '2.0.0',
DevToolsExtensionConfig.materialIconCodePointKey: 0xe638,
DevToolsExtensionConfig.pathKey: '/path/to/bar',
+ DevToolsExtensionConfig.isPubliclyHostedKey: 'false',
}),
DevToolsExtensionConfig.parse({
DevToolsExtensionConfig.nameKey: 'provider',
@@ -77,5 +80,31 @@
DevToolsExtensionConfig.versionKey: '3.0.0',
DevToolsExtensionConfig.materialIconCodePointKey: 0xe50a,
DevToolsExtensionConfig.pathKey: '/path/to/provider',
+ DevToolsExtensionConfig.isPubliclyHostedKey: 'false',
}),
];
+
+/// Enable this flag to debug the DevTools survey logic.
+///
+/// When this flag is true, [debugSurveyMetadata] will be used instead of what
+/// we normally fetch from
+/// 'docs.flutter.dev/f/dart-devtools-survey-metadata.json'.
+bool debugSurvey = false;
+
+/// The survey metadata that will be used instead of the live data from
+/// 'docs.flutter.dev/f/dart-devtools-survey-metadata.json' when [debugSurvey]
+/// is true;
+final debugSurveyMetadata = DevToolsSurvey.parse(
+ {
+ '_comments': [
+ 'uniqueId must be updated with each new survey so DevTools knows to re-prompt users.',
+ 'title should not exceed 45 characters.',
+ 'startDate and endDate should follow ISO 8601 standard with a timezone offset.',
+ ],
+ 'uniqueId': '2023-Q4',
+ 'title': 'Help improve DevTools! Take our 2023 Q4 survey.',
+ 'url': 'https://google.qualtrics.com/jfe/form/SV_2l4XcyscF8mQtDM',
+ 'startDate': '2023-09-20T09:00:00-07:00',
+ 'endDate': '2023-10-20T09:00:00-07:00',
+ },
+);
diff --git a/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart b/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart
index 1c328b0..754fed8 100644
--- a/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart
+++ b/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart
@@ -121,18 +121,6 @@
bool get hoverEvalModeEnabledByDefault;
- Future<Object> forceRefresh() {
- final futures = <Future<void>>[];
- for (InspectorServiceClient client in clients) {
- try {
- futures.add(client.onForceRefresh());
- } catch (e) {
- log(e.toString());
- }
- }
- return Future.wait(futures);
- }
-
Future<bool> invokeBoolServiceMethodNoArgs(String methodName) async {
return useDaemonApi
? await invokeServiceMethodDaemonNoGroupArgs(methodName) == true
@@ -213,7 +201,6 @@
);
}
- ValueListenable<List<String>> get rootDirectories => _rootDirectories;
final ValueNotifier<List<String>> _rootDirectories = ValueNotifier([]);
@visibleForTesting
@@ -566,40 +553,6 @@
return disposeComplete;
}
- Future<T?> nullIfDisposed<T>(Future<T> Function() supplier) async {
- if (disposed) {
- return null;
- }
- return await supplier();
- }
-
- T? nullValueIfDisposed<T>(T Function() supplier) {
- if (disposed) {
- return null;
- }
-
- return supplier();
- }
-
- void skipIfDisposed(void Function() runnable) {
- if (disposed) {
- return;
- }
-
- runnable();
- }
-
- Future<RemoteDiagnosticsNode?> invokeServiceMethodReturningNode(
- String methodName,
- ) async {
- if (disposed) return null;
- return useDaemonApi
- ? parseDiagnosticsNodeDaemon(invokeServiceMethodDaemon(methodName))
- : parseDiagnosticsNodeObservatory(
- invokeServiceMethodObservatory(methodName),
- );
- }
-
Future<RemoteDiagnosticsNode?> invokeServiceMethodReturningNodeInspectorRef(
String methodName,
InspectorInstanceRef? ref,
@@ -628,18 +581,6 @@
);
}
- Future<void> invokeVoidServiceMethodInspectorRef(
- String methodName,
- InspectorInstanceRef ref,
- ) async {
- if (disposed) return;
- if (useDaemonApi) {
- await invokeServiceMethodDaemonInspectorRef(methodName, ref);
- } else {
- await invokeServiceMethodObservatoryInspectorRef(methodName, ref);
- }
- }
-
Future<Object?> invokeServiceMethodDaemonArg(
String methodName,
String? arg,
@@ -669,25 +610,6 @@
);
}
- /// Call a service method passing in an observatory instance reference.
- ///
- /// This call is useful when receiving an 'inspect' event from the
- /// observatory and future use cases such as inspecting a Widget from a
- /// log window.
- ///
- /// This method will always need to use the observatory service as the input
- /// parameter is an Observatory InstanceRef..
- Future<InstanceRef?> invokeServiceMethodOnRefObservatory(
- String methodName,
- InstanceRef arg,
- ) {
- return inspectorLibrary.eval(
- "${inspectorService.clientInspectorName}.instance.$methodName(arg1, '$groupName')",
- isAlive: this,
- scope: {'arg1': arg.id!},
- );
- }
-
Future<void> invokeVoidServiceMethod(String methodName, String arg1) async {
if (disposed) return;
if (useDaemonApi) {
@@ -707,14 +629,6 @@
);
}
- /// Invokes a static method on the inspector service passing in the specified
- /// arguments.
- ///
- /// Intent is we could refactor how the API is invoked by only changing this call.
- Future<InstanceRef?> invokeServiceMethodObservatory(String methodName) {
- return invokeServiceMethodObservatory1(methodName, groupName);
- }
-
Future<InstanceRef?> invokeServiceMethodObservatory1(
String methodName,
String arg1,
@@ -867,16 +781,6 @@
);
}
- Future<InspectorInstanceRef?> fromInstanceRef(InstanceRef instanceRef) async {
- final inspectorIdRef = await inspectorLibrary.eval(
- "${inspectorService.clientInspectorName}.instance.toId(obj, '$groupName')",
- scope: {'obj': instanceRef.id!},
- isAlive: this,
- );
- if (inspectorIdRef is! InstanceRef) return null;
- return InspectorInstanceRef(inspectorIdRef.valueAsString);
- }
-
Future<Instance?> getInstance(FutureOr<InstanceRef?> instanceRef) async {
if (disposed) {
return null;
@@ -962,17 +866,6 @@
return properties;
}
- Future<SourcePosition?> getPropertyLocation(
- InstanceRef instanceRef,
- String name,
- ) async {
- final Instance? instance = await getInstance(instanceRef);
- if (instance == null || disposed) {
- return null;
- }
- return getPropertyLocationHelper(instance.classRef!, name);
- }
-
Future<SourcePosition?> getPropertyLocationHelper(
ClassRef classRef,
String name,
@@ -1126,20 +1019,6 @@
);
}
- Future<RemoteDiagnosticsNode?> getRootWidgetFullTree() {
- return invokeServiceMethodReturningNode(
- WidgetInspectorServiceExtensions.getRootWidget.name,
- );
- }
-
- Future<RemoteDiagnosticsNode?> getSummaryTreeWithoutIds() {
- return parseDiagnosticsNodeDaemon(
- invokeServiceMethodDaemon(
- WidgetInspectorServiceExtensions.getRootWidgetSummaryTree.name,
- ),
- );
- }
-
// TODO these ones could be not needed.
/* TODO(jacobr): this probably isn't needed.
Future<List<DiagnosticsPathNode>> getParentChain(DiagnosticsNode target) async {
@@ -1406,11 +1285,6 @@
return _pendingNext!.future;
}
- ObjectGroup? get current {
- _current ??= inspectorService.createObjectGroup(debugName);
- return _current;
- }
-
ObjectGroup get next {
_next ??= inspectorService.createObjectGroup(debugName);
return _next!;
diff --git a/packages/devtools_app/lib/src/shared/diagnostics/primitives/source_location.dart b/packages/devtools_app/lib/src/shared/diagnostics/primitives/source_location.dart
index a79bd98..7fb7cb9 100644
--- a/packages/devtools_app/lib/src/shared/diagnostics/primitives/source_location.dart
+++ b/packages/devtools_app/lib/src/shared/diagnostics/primitives/source_location.dart
@@ -9,7 +9,6 @@
class _JsonFields {
static const String file = 'file';
static const String line = 'line';
- static const String name = 'name';
static const String column = 'column';
}
@@ -35,29 +34,13 @@
int getLine() => JsonUtils.getIntMember(json, _JsonFields.line);
- String? getName() => JsonUtils.getStringMember(json, _JsonFields.name);
-
int getColumn() => JsonUtils.getIntMember(json, _JsonFields.column);
-
- SourcePosition? getXSourcePosition() {
- final file = getFile();
- if (file == null) {
- return null;
- }
- final int line = getLine();
- final int column = getColumn();
- if (line < 0 || column < 0) {
- return null;
- }
- return SourcePosition(file: file, line: line - 1, column: column - 1);
- }
}
class SourcePosition {
const SourcePosition({
required this.line,
required this.column,
- this.file,
this.tokenPos,
});
@@ -69,14 +52,12 @@
);
}
- final String? file;
final int? line;
final int? column;
final int? tokenPos;
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
return other is SourcePosition &&
other.line == line &&
other.column == column &&
diff --git a/packages/devtools_app/lib/src/shared/diagnostics/tree_builder.dart b/packages/devtools_app/lib/src/shared/diagnostics/tree_builder.dart
index bc15778..a6093dc 100644
--- a/packages/devtools_app/lib/src/shared/diagnostics/tree_builder.dart
+++ b/packages/devtools_app/lib/src/shared/diagnostics/tree_builder.dart
@@ -325,7 +325,10 @@
}
}
-Future<void> _addInspectorItems(variable, IsolateRef? isolateRef) async {
+Future<void> _addInspectorItems(
+ DartObjectNode variable,
+ IsolateRef? isolateRef,
+) async {
final inspectorService = serviceConnection.inspectorService;
if (inspectorService != null) {
final tasks = <Future>[];
diff --git a/packages/devtools_app/lib/src/shared/diagnostics/variable_factory.dart b/packages/devtools_app/lib/src/shared/diagnostics/variable_factory.dart
index e8b3391..de8fcf2 100644
--- a/packages/devtools_app/lib/src/shared/diagnostics/variable_factory.dart
+++ b/packages/devtools_app/lib/src/shared/diagnostics/variable_factory.dart
@@ -334,7 +334,7 @@
IsolateRef? isolateRef,
) {
final variables = <DartObjectNode>[];
- final associations = instance.associations ?? [];
+ final associations = instance.associations ?? <MapAssociation>[];
// If the key type for the provided associations is not primitive, we want to
// allow for users to drill down into the key object's properties. If we're
diff --git a/packages/devtools_app/lib/src/shared/directory_picker.dart b/packages/devtools_app/lib/src/shared/directory_picker.dart
new file mode 100644
index 0000000..1f84aa1
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/directory_picker.dart
@@ -0,0 +1,67 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app_shared/ui.dart';
+import 'package:flutter/material.dart';
+
+class DirectoryPicker extends StatefulWidget {
+ const DirectoryPicker({
+ required this.onDirectoryPicked,
+ this.enabled = true,
+ super.key,
+ });
+
+ final bool enabled;
+
+ final ValueChanged<String> onDirectoryPicked;
+
+ @override
+ State<DirectoryPicker> createState() => _DirectoryPickerState();
+}
+
+class _DirectoryPickerState extends State<DirectoryPicker> {
+ final TextEditingController controller = TextEditingController();
+
+ @override
+ void dispose() {
+ controller.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ final rowHeight = defaultButtonHeight;
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Spacer(),
+ Flexible(
+ flex: 4,
+ fit: FlexFit.tight,
+ child: RoundedOutlinedBorder(
+ child: Container(
+ height: rowHeight,
+ padding: const EdgeInsets.symmetric(horizontal: defaultSpacing),
+ child: TextField(
+ controller: controller,
+ enabled: widget.enabled,
+ onSubmitted: (String path) {
+ widget.onDirectoryPicked(path.trim());
+ },
+ decoration: const InputDecoration(
+ hintText: 'Enter path to a Flutter project here',
+ ),
+ style: TextStyle(
+ color: Theme.of(context).textTheme.displayLarge!.color,
+ ),
+ textAlign: TextAlign.left,
+ ),
+ ),
+ ),
+ ),
+ const Spacer(),
+ ],
+ );
+ }
+}
diff --git a/packages/devtools_app/lib/src/shared/error_badge_manager.dart b/packages/devtools_app/lib/src/shared/error_badge_manager.dart
index 1f77c18..237a6e8 100644
--- a/packages/devtools_app/lib/src/shared/error_badge_manager.dart
+++ b/packages/devtools_app/lib/src/shared/error_badge_manager.dart
@@ -48,12 +48,12 @@
// Log Flutter extension events.
autoDisposeStreamSubscription(
- service.onExtensionEventWithHistory.listen(_handleExtensionEvent),
+ service.onExtensionEventWithHistorySafe.listen(_handleExtensionEvent),
);
// Log stderr events.
autoDisposeStreamSubscription(
- service.onStderrEventWithHistory.listen(_handleStdErr),
+ service.onStderrEventWithHistorySafe.listen(_handleStdErr),
);
}
@@ -190,8 +190,6 @@
InspectableWidgetError(String errorMessage, String id, {bool read = false})
: super(errorMessage, id, read: read);
- String get inspectorRef => id;
-
@override
InspectableWidgetError asRead() =>
InspectableWidgetError(errorMessage, id, read: true);
diff --git a/packages/devtools_app/lib/src/shared/feature_flags.dart b/packages/devtools_app/lib/src/shared/feature_flags.dart
index c4ebf54..09402cc 100644
--- a/packages/devtools_app/lib/src/shared/feature_flags.dart
+++ b/packages/devtools_app/lib/src/shared/feature_flags.dart
@@ -62,7 +62,7 @@
/// DevTools screen and the standalone tool for IDE embedding.
///
/// https://github.com/flutter/devtools/issues/6013
- static bool deepLinkValidation = enableExperiments;
+ static bool deepLinkValidation = true;
/// Flag to enable DevTools extensions.
///
diff --git a/packages/devtools_app/lib/src/shared/file_import.dart b/packages/devtools_app/lib/src/shared/file_import.dart
index 2ae18dd..88dadf8 100644
--- a/packages/devtools_app/lib/src/shared/file_import.dart
+++ b/packages/devtools_app/lib/src/shared/file_import.dart
@@ -7,18 +7,70 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:file_selector/file_selector.dart';
import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+import 'analytics/analytics.dart' as ga;
+import 'analytics/constants.dart' as gac;
import 'common_widgets.dart';
import 'config_specific/drag_and_drop/drag_and_drop.dart';
+import 'config_specific/import_export/import_export.dart';
import 'globals.dart';
import 'primitives/utils.dart';
+class OpenSaveButtonGroup extends StatelessWidget {
+ const OpenSaveButtonGroup({
+ super.key,
+ required this.screenId,
+ required this.onSave,
+ });
+
+ final String screenId;
+
+ final VoidCallback? onSave;
+
+ @override
+ Widget build(BuildContext context) {
+ return RoundedButtonGroup(
+ items: [
+ ButtonGroupItemData(
+ icon: Icons.file_upload,
+ tooltip: 'Open a file that was previously saved from DevTools',
+ onPressed: () async {
+ ga.select(screenId, gac.openFile);
+ final importedFile =
+ await importFileFromPicker(acceptedTypes: const ['json']);
+ if (importedFile != null) {
+ // ignore: use_build_context_synchronously, intentional use.
+ Provider.of<ImportController>(context, listen: false)
+ .importData(importedFile, expectedScreenId: screenId);
+ } else {
+ notificationService.push(
+ 'Something went wrong. Could not open selected file.',
+ );
+ }
+ },
+ ),
+ ButtonGroupItemData(
+ icon: Icons.file_download,
+ tooltip: 'Save this screen\'s data for offline viewing',
+ onPressed: onSave != null
+ ? () {
+ ga.select(screenId, gac.saveFile);
+ onSave!.call();
+ }
+ : null,
+ ),
+ ],
+ );
+ }
+}
+
class FileImportContainer extends StatefulWidget {
const FileImportContainer({
- required this.title,
required this.instructions,
required this.gaScreen,
required this.gaSelectionImport,
+ this.title,
this.gaSelectionAction,
this.actionText,
this.onAction,
@@ -28,7 +80,7 @@
super.key,
});
- final String title;
+ final String? title;
final String instructions;
@@ -59,13 +111,16 @@
@override
Widget build(BuildContext context) {
+ final title = widget.title;
return Column(
children: [
- Text(
- widget.title,
- style: TextStyle(fontSize: scaleByFontFactor(18.0)),
- ),
- const SizedBox(height: defaultSpacing),
+ if (title != null) ...[
+ Text(
+ title,
+ style: TextStyle(fontSize: scaleByFontFactor(18.0)),
+ ),
+ const SizedBox(height: defaultSpacing),
+ ],
Expanded(
// TODO(kenz): improve drag over highlight.
child: DragAndDrop(
@@ -165,7 +220,6 @@
gaScreen: widget.gaScreen,
gaSelection: widget.gaSelectionAction!,
label: widget.actionText!,
- icon: Icons.highlight,
elevated: true,
onPressed: importedFile != null
? () => widget.onAction!(importedFile!)
@@ -248,7 +302,7 @@
return GaDevToolsButton(
onPressed: onPressed,
icon: Icons.file_upload,
- label: 'Import File',
+ label: 'Open file',
gaScreen: gaScreen,
gaSelection: gaSelection,
elevated: elevatedButton,
diff --git a/packages/devtools_app/lib/src/shared/framework_controller.dart b/packages/devtools_app/lib/src/shared/framework_controller.dart
index 9eb5b08..f066c77 100644
--- a/packages/devtools_app/lib/src/shared/framework_controller.dart
+++ b/packages/devtools_app/lib/src/shared/framework_controller.dart
@@ -18,7 +18,7 @@
StreamController.broadcast();
final StreamController<ConnectVmEvent> _connectVmController =
StreamController.broadcast();
- final StreamController<Uri> _connectedController =
+ final StreamController<String> _connectedController =
StreamController.broadcast();
final StreamController _disconnectedController = StreamController.broadcast();
final StreamController<PageChangeEvent> _pageChangeController =
@@ -49,7 +49,7 @@
///
/// The returned URI value is the VM service protocol URI of the device
/// connection.
- Stream<Uri> get onConnected => _connectedController.stream;
+ Stream<String> get onConnected => _connectedController.stream;
/// Notifies when the current page changes.
Stream<PageChangeEvent> get onPageChange => _pageChangeController.stream;
@@ -67,8 +67,9 @@
final connectionState =
serviceConnection.serviceManager.connectedState.value;
if (connectionState.connected) {
- _connectedController
- .add(serviceConnection.serviceManager.service!.connectedUri);
+ _connectedController.add(
+ serviceConnection.serviceManager.service!.wsUri!,
+ );
} else {
_disconnectedController.add(null);
}
diff --git a/packages/devtools_app/lib/src/shared/globals.dart b/packages/devtools_app/lib/src/shared/globals.dart
index d272f42..62c40c2 100644
--- a/packages/devtools_app/lib/src/shared/globals.dart
+++ b/packages/devtools_app/lib/src/shared/globals.dart
@@ -6,6 +6,7 @@
import '../extensions/extension_service.dart';
import '../screens/debugger/breakpoint_manager.dart';
+import '../service/dtd_manager.dart';
import '../service/service_manager.dart';
import '../shared/banner_messages.dart';
import '../shared/notifications.dart';
@@ -38,6 +39,8 @@
SurveyService get surveyService => globals[SurveyService] as SurveyService;
+DTDManager get dtdManager => globals[DTDManager] as DTDManager;
+
PreferencesController get preferences =>
globals[PreferencesController] as PreferencesController;
diff --git a/packages/devtools_app/lib/src/shared/http/_http_cookies.dart b/packages/devtools_app/lib/src/shared/http/_http_cookies.dart
index 464efea..5cccf0b 100644
--- a/packages/devtools_app/lib/src/shared/http/_http_cookies.dart
+++ b/packages/devtools_app/lib/src/shared/http/_http_cookies.dart
@@ -20,7 +20,7 @@
// ignore_for_file: unused_element
// ignore_for_file: unused_local_variable
-part of http;
+part of 'http.dart';
class Cookie {
String? _name;
diff --git a/packages/devtools_app/lib/src/shared/http/_http_date.dart b/packages/devtools_app/lib/src/shared/http/_http_date.dart
index 13fe5cc..f1053ad 100644
--- a/packages/devtools_app/lib/src/shared/http/_http_date.dart
+++ b/packages/devtools_app/lib/src/shared/http/_http_date.dart
@@ -17,7 +17,7 @@
// ignore_for_file: unused_local_variable
// ignore_for_file: avoid-throw-in-catch-block
-part of http;
+part of 'http.dart';
// TODO(jacobr): cleanup this class with only static members.
// ignore: avoid_classes_with_only_static_members
@@ -89,7 +89,7 @@
return int.parse(s.substring(0, index));
}
- var tokens = [];
+ var tokens = <String>[];
while (!isEnd()) {
while (!isEnd() && isDelimiter(date[position])) {
position++;
diff --git a/packages/devtools_app/lib/src/shared/http/_http_exception.dart b/packages/devtools_app/lib/src/shared/http/_http_exception.dart
index 6a0465a..9dcb029 100644
--- a/packages/devtools_app/lib/src/shared/http/_http_exception.dart
+++ b/packages/devtools_app/lib/src/shared/http/_http_exception.dart
@@ -4,7 +4,7 @@
// This code was pulled from dart:io.
-part of http;
+part of 'http.dart';
class HttpException {
const HttpException(this.message, {this.uri});
diff --git a/packages/devtools_app/lib/src/shared/http/http.dart b/packages/devtools_app/lib/src/shared/http/http.dart
index 7ecd920..b8c287d 100644
--- a/packages/devtools_app/lib/src/shared/http/http.dart
+++ b/packages/devtools_app/lib/src/shared/http/http.dart
@@ -3,8 +3,7 @@
// found in the LICENSE file.
/// This library contains code pulled from dart:io that is not platform specific.
-
-library http;
+library;
part '_http_cookies.dart';
part '_http_date.dart';
diff --git a/packages/devtools_app/lib/src/shared/http/http_request_data.dart b/packages/devtools_app/lib/src/shared/http/http_request_data.dart
index b627f64..e424bad 100644
--- a/packages/devtools_app/lib/src/shared/http/http_request_data.dart
+++ b/packages/devtools_app/lib/src/shared/http/http_request_data.dart
@@ -53,8 +53,6 @@
HttpProfileRequestRef _request;
- bool isOutStanding = false;
-
final ValueNotifier<int> _updateCount = ValueNotifier<int>(0);
/// A notifier that changes when the request data, or it's response body
@@ -66,8 +64,8 @@
try {
if (isFetchingFullData) return; // We are already fetching
isFetchingFullData = true;
- final updated =
- await serviceConnection.serviceManager.service!.getHttpProfileRequest(
+ final updated = await serviceConnection.serviceManager.service!
+ .getHttpProfileRequestWrapper(
_request.isolateId,
_request.id.toString(),
);
@@ -323,8 +321,7 @@
}
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
return other is DartIOHttpRequestData && id == other.id && super == other;
}
diff --git a/packages/devtools_app/lib/src/shared/http/http_service.dart b/packages/devtools_app/lib/src/shared/http/http_service.dart
index 98fe17b..a6f207b 100644
--- a/packages/devtools_app/lib/src/shared/http/http_service.dart
+++ b/packages/devtools_app/lib/src/shared/http/http_service.dart
@@ -16,10 +16,10 @@
await serviceConnection.serviceManager.service!
.forEachIsolate((isolate) async {
final httpLoggingAvailable = await serviceConnection.serviceManager.service!
- .isHttpTimelineLoggingAvailable(isolate.id!);
+ .isHttpTimelineLoggingAvailableWrapper(isolate.id!);
if (httpLoggingAvailable) {
- final future =
- serviceConnection.serviceManager.service!.httpEnableTimelineLogging(
+ final future = serviceConnection.serviceManager.service!
+ .httpEnableTimelineLoggingWrapper(
isolate.id!,
state,
);
diff --git a/packages/devtools_app/lib/src/shared/memory/adapted_heap_data.dart b/packages/devtools_app/lib/src/shared/memory/adapted_heap_data.dart
index 807cc43..39280e7 100644
--- a/packages/devtools_app/lib/src/shared/memory/adapted_heap_data.dart
+++ b/packages/devtools_app/lib/src/shared/memory/adapted_heap_data.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'dart:io';
-
import 'package:flutter/foundation.dart';
import 'package:vm_service/vm_service.dart';
@@ -51,7 +49,6 @@
class AdaptedHeapData {
AdaptedHeapData(
this.objects, {
- required this.isolateId,
this.rootIndex = _defaultRootIndex,
DateTime? created,
}) : assert(objects.isNotEmpty),
@@ -62,9 +59,8 @@
static final _uiReleaser = UiReleaser();
static Future<AdaptedHeapData> fromHeapSnapshot(
- HeapSnapshotGraph graph, {
- required String isolateId,
- }) async {
+ HeapSnapshotGraph graph,
+ ) async {
final objects = <AdaptedHeapObject>[];
for (final i in Iterable.generate(graph.objects.length)) {
if (_uiReleaser.step()) await _uiReleaser.releaseUi();
@@ -73,19 +69,7 @@
objects.add(object);
}
- return AdaptedHeapData(objects, isolateId: isolateId);
- }
-
- @visibleForTesting
- static Future<AdaptedHeapData> fromFile(
- String fileName, {
- String isolateId = '',
- }) async {
- final file = File(fileName);
- final bytes = await file.readAsBytes();
- final data = bytes.buffer.asByteData();
- final graph = HeapSnapshotGraph.fromChunks([data]);
- return AdaptedHeapData.fromHeapSnapshot(graph, isolateId: isolateId);
+ return AdaptedHeapData(objects);
}
/// Default value for rootIndex is taken from the doc:
@@ -98,8 +82,6 @@
final List<AdaptedHeapObject> objects;
- final String isolateId;
-
/// Total size of all objects in the heap.
///
/// Should be set externally.
diff --git a/packages/devtools_app/lib/src/shared/notifications.dart b/packages/devtools_app/lib/src/shared/notifications.dart
index 3177871..35e9bb4 100644
--- a/packages/devtools_app/lib/src/shared/notifications.dart
+++ b/packages/devtools_app/lib/src/shared/notifications.dart
@@ -141,10 +141,6 @@
void markComplete(NotificationMessage message) {
activeMessages.removeWhere((element) => element == message);
}
-
- void dispose() {
- newTasks.dispose();
- }
}
class NotificationAction extends StatelessWidget {
diff --git a/packages/devtools_app/lib/src/shared/offline_mode.dart b/packages/devtools_app/lib/src/shared/offline_mode.dart
index d85e520..74f4e71 100644
--- a/packages/devtools_app/lib/src/shared/offline_mode.dart
+++ b/packages/devtools_app/lib/src/shared/offline_mode.dart
@@ -13,8 +13,6 @@
import 'routing.dart';
class OfflineModeController {
- bool get isOffline => _offlineMode.value;
-
ValueListenable<bool> get offlineMode => _offlineMode;
final _offlineMode = ValueNotifier<bool>(false);
diff --git a/packages/devtools_app/lib/src/shared/preferences.dart b/packages/devtools_app/lib/src/shared/preferences.dart
index 1cd671b..7ecd303 100644
--- a/packages/devtools_app/lib/src/shared/preferences.dart
+++ b/packages/devtools_app/lib/src/shared/preferences.dart
@@ -43,9 +43,6 @@
PerformancePreferencesController get performance => _performance;
final _performance = PerformancePreferencesController();
- CpuProfilerPreferencesController get cpuProfiler => _cpuProfiler;
- final _cpuProfiler = CpuProfilerPreferencesController();
-
ExtensionsPreferencesController get devToolsExtensions => _extensions;
final _extensions = ExtensionsPreferencesController();
@@ -77,7 +74,6 @@
await inspector.init();
await memory.init();
await performance.init();
- await cpuProfiler.init();
await devToolsExtensions.init();
setGlobal(PreferencesController, this);
@@ -108,7 +104,6 @@
inspector.dispose();
memory.dispose();
performance.dispose();
- cpuProfiler.dispose();
devToolsExtensions.dispose();
super.dispose();
}
@@ -539,33 +534,6 @@
}
}
-class CpuProfilerPreferencesController extends DisposableController
- with AutoDisposeControllerMixin {
- final displayTreeGuidelines = ValueNotifier<bool>(false);
-
- static final _displayTreeGuidelinesId = '${gac.cpuProfiler}.'
- '${gac.CpuProfilerEvents.cpuProfileDisplayTreeGuidelines.name}';
-
- Future<void> init() async {
- addAutoDisposeListener(
- displayTreeGuidelines,
- () {
- storage.setValue(
- _displayTreeGuidelinesId,
- displayTreeGuidelines.value.toString(),
- );
- ga.select(
- gac.cpuProfiler,
- gac.CpuProfilerEvents.cpuProfileDisplayTreeGuidelines.name,
- value: displayTreeGuidelines.value ? 1 : 0,
- );
- },
- );
- displayTreeGuidelines.value =
- await storage.getValue(_displayTreeGuidelinesId) == 'true';
- }
-}
-
class PerformancePreferencesController extends DisposableController
with AutoDisposeControllerMixin {
final showFlutterFramesChart = ValueNotifier<bool>(true);
diff --git a/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart b/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart
index 68fd6ff..81fa042 100644
--- a/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart
+++ b/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart
@@ -266,29 +266,6 @@
return widget?.scrollable;
}
- /// Provides a heuristic to determine if expensive frame-bound tasks should be
- /// deferred for the [context] at a specific point in time.
- ///
- /// Calling this method does _not_ create a dependency on any other widget.
- /// This also means that the value returned is only good for the point in time
- /// when it is called, and callers will not get updated if the value changes.
- ///
- /// The heuristic used is determined by the [physics] of this [Scrollable]
- /// via [ScrollPhysics.recommendDeferredScrolling]. That method is called with
- /// the current [activity]'s [ScrollActivity.velocity].
- ///
- /// If there is no [Scrollable] in the widget tree above the [context], this
- /// method returns false.
- static bool recommendDeferredLoadingForContext(BuildContext context) {
- final _ScrollableScope? widget = context
- .getElementForInheritedWidgetOfExactType<_ScrollableScope>()
- ?.widget as _ScrollableScope?;
- if (widget == null) {
- return false;
- }
- return widget.position.recommendDeferredLoading(context);
- }
-
/// Scrolls the scrollables that enclose the given context so as to make the
/// given context visible.
static Future<void> ensureVisible(
@@ -834,10 +811,7 @@
return;
}
- _innerNode ??= SemanticsNode(showOnScreen: showOnScreen);
- _innerNode!
- ..isMergedIntoParent = node.isPartOfNodeMerging
- ..rect = Offset.zero & node.rect.size;
+ (_innerNode ??= SemanticsNode(showOnScreen: showOnScreen)).rect = node.rect;
int? firstVisibleIndex;
final List<SemanticsNode> excluded = <SemanticsNode>[_innerNode!];
diff --git a/packages/devtools_app/lib/src/shared/primitives/storage.dart b/packages/devtools_app/lib/src/shared/primitives/storage.dart
index 9c4fe42..9b68f6b 100644
--- a/packages/devtools_app/lib/src/shared/primitives/storage.dart
+++ b/packages/devtools_app/lib/src/shared/primitives/storage.dart
@@ -11,5 +11,5 @@
Future<String?> getValue(String key);
/// Set a value for the given key.
- Future setValue(String key, String value);
+ Future<void> setValue(String key, String value);
}
diff --git a/packages/devtools_app/lib/src/shared/primitives/trace_event.dart b/packages/devtools_app/lib/src/shared/primitives/trace_event.dart
index 499e538..876e37c 100644
--- a/packages/devtools_app/lib/src/shared/primitives/trace_event.dart
+++ b/packages/devtools_app/lib/src/shared/primitives/trace_event.dart
@@ -35,8 +35,6 @@
static const durationBeginPhase = 'B';
static const durationEndPhase = 'E';
static const durationCompletePhase = 'X';
- static const flowStartPhase = 's';
- static const flowEndPhase = 'f';
static const metadataEventPhase = 'M';
static const gcCategory = 'GC';
@@ -107,10 +105,6 @@
set type(TimelineEventType t) => _type = t;
- bool get isUiEvent => type == TimelineEventType.ui;
-
- bool get isRasterEvent => type == TimelineEventType.raster;
-
TraceEvent copy({
String? name,
String? category,
@@ -151,8 +145,6 @@
Map<String, dynamic> get json => event.json;
- bool processed = false;
-
bool get isShaderEvent => event.args!['devtoolsTag'] == 'shaders';
@override
@@ -199,8 +191,7 @@
final int? threadId;
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
return other is ThreadNameEvent &&
name == other.name &&
threadId == other.threadId;
diff --git a/packages/devtools_app/lib/src/shared/primitives/trees.dart b/packages/devtools_app/lib/src/shared/primitives/trees.dart
index 2fea15b..c97631f 100644
--- a/packages/devtools_app/lib/src/shared/primitives/trees.dart
+++ b/packages/devtools_app/lib/src/shared/primitives/trees.dart
@@ -158,10 +158,6 @@
);
}
- void removeLastChild() {
- children.removeLast();
- }
-
bool subtreeHasNodeWithCondition(bool Function(T node) condition) {
final T? childWithCondition = firstChildWithCondition(condition);
return childWithCondition != null;
diff --git a/packages/devtools_app/lib/src/shared/primitives/utils.dart b/packages/devtools_app/lib/src/shared/primitives/utils.dart
index 4cf18ce..b5a04e5 100644
--- a/packages/devtools_app/lib/src/shared/primitives/utils.dart
+++ b/packages/devtools_app/lib/src/shared/primitives/utils.dart
@@ -33,8 +33,6 @@
// 2^52 is the max int for dart2js.
final int maxJsInt = pow(2, 52) as int;
-String escape(String? text) => text == null ? '' : htmlEscape.convert(text);
-
final NumberFormat nf = NumberFormat.decimalPattern();
String percent(double d, {int fractionDigits = 2}) =>
@@ -435,19 +433,6 @@
static int getIntMember(Map<String, Object?> json, String memberName) {
return json[memberName] as int? ?? -1;
}
-
- static List<String> getValues(Map<String, Object> json, String member) {
- final values = json[member] as List<Object?>?;
- if (values == null || values.isEmpty) {
- return const [];
- }
-
- return values.cast();
- }
-
- static bool hasJsonData(String? data) {
- return data != null && data.isNotEmpty && data != 'null';
- }
}
/// Add pretty print for a JSON payload.
@@ -620,8 +605,7 @@
}
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
if (other is! TimeRange) return false;
return start == other.start && end == other.end;
}
@@ -634,17 +618,6 @@
return DateFormat('H:mm:ss.S').format(time);
}
-bool isDebugBuild() {
- bool debugBuild = false;
- assert(
- (() {
- debugBuild = true;
- return true;
- })(),
- );
- return debugBuild;
-}
-
/// Divides [numerator] by [denominator], not returning infinite, NaN, or null
/// quotients.
///
@@ -775,8 +748,7 @@
String toString() => 'Range($begin, $end)';
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
if (other is! Range) return false;
return begin == other.begin && end == other.end;
}
@@ -805,8 +777,7 @@
String toString() => 'LineRange($begin, $end)';
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
if (other is! LineRange) return false;
return begin == other.begin && end == other.end;
}
@@ -1129,20 +1100,6 @@
];
}
- Iterable<T> whereFromIndex(
- bool Function(T element) test, {
- int startIndex = 0,
- }) {
- final whereList = <T>[];
- for (int i = startIndex; i < length; i++) {
- final element = this[i];
- if (test(element)) {
- whereList.add(element);
- }
- }
- return whereList;
- }
-
bool containsWhere(bool Function(T element) test) {
for (var e in this) {
if (test(e)) {
@@ -1197,49 +1154,6 @@
return uri.queryParameters;
}
-/// Gets a VM Service URI from a query string.
-///
-/// We read from the 'uri' value if it exists; otherwise we create a uri from
-/// the from 'port' and 'token' values.
-Uri? getServiceUriFromQueryString(String? location) {
- if (location == null) {
- return null;
- }
-
- final queryParams = Uri.parse(location).queryParameters;
-
- // First try to use uri.
- if (queryParams['uri'] != null) {
- final uri = Uri.tryParse(queryParams['uri']!);
-
- // Lots of things are considered valid URIs (including empty strings
- // and single letters) since they can be relative, so we need to do some
- // extra checks.
- if (uri != null &&
- uri.isAbsolute &&
- (uri.isScheme('ws') ||
- uri.isScheme('wss') ||
- uri.isScheme('http') ||
- uri.isScheme('https') ||
- uri.isScheme('sse') ||
- uri.isScheme('sses'))) {
- return uri;
- }
- }
-
- // Otherwise try 'port', 'token', and 'host'.
- final port = int.tryParse(queryParams['port'] ?? '');
- final token = queryParams['token'];
- final host = queryParams['host'] ?? 'localhost';
- if (port != null) {
- return token == null
- ? Uri.parse('ws://$host:$port/ws')
- : Uri.parse('ws://$host:$port/$token/ws');
- }
-
- return null;
-}
-
double safePositiveDouble(double value) {
if (value.isNaN) return 0.0;
return max(value, 0.0);
diff --git a/packages/devtools_app/lib/src/shared/profiler_utils.dart b/packages/devtools_app/lib/src/shared/profiler_utils.dart
index 1abfcc6..6f858ce 100644
--- a/packages/devtools_app/lib/src/shared/profiler_utils.dart
+++ b/packages/devtools_app/lib/src/shared/profiler_utils.dart
@@ -252,7 +252,6 @@
required this.methodName,
required this.packageUri,
required this.sourceLine,
- required this.isSelected,
this.displayInRow = true,
super.key,
});
@@ -265,8 +264,6 @@
final int? sourceLine;
- final bool isSelected;
-
final bool displayInRow;
@override
@@ -280,7 +277,8 @@
final sourceDisplay = '($packageUriWithSourceLine)';
final script = scriptManager.scriptRefForUri(packageUri);
- final showSourceAsLink = script != null;
+ final showSourceAsLink =
+ script != null && !offlineController.offlineMode.value;
if (showSourceAsLink) {
sourceTextSpans.add(
VmServiceObjectLink(
diff --git a/packages/devtools_app/lib/src/shared/routing.dart b/packages/devtools_app/lib/src/shared/routing.dart
index df04cfe..ed6fa4a 100644
--- a/packages/devtools_app/lib/src/shared/routing.dart
+++ b/packages/devtools_app/lib/src/shared/routing.dart
@@ -64,7 +64,7 @@
} else if (_forceVmServiceUri == null) {
// Otherwise, connect to the vm service from the query parameter before
// loading the route (but do not do this in a testing environment).
- await FrameworkCore.initVmService('', serviceUriAsString: uriFromParams);
+ await FrameworkCore.initVmService(serviceUriAsString: uriFromParams);
}
// routeInformation.path comes from the address bar and (when not empty) is
@@ -333,9 +333,6 @@
...state,
};
- factory DevToolsNavigationState.fromJson(Map<String, dynamic> json) =>
- DevToolsNavigationState._(json.cast<String, String?>());
-
DevToolsNavigationState._(this._state) : kind = _state[_kKind]!;
static const _kKind = '_kind';
diff --git a/packages/devtools_app/lib/src/shared/screen.dart b/packages/devtools_app/lib/src/shared/screen.dart
index 3e662c8..08abcba 100644
--- a/packages/devtools_app/lib/src/shared/screen.dart
+++ b/packages/devtools_app/lib/src/shared/screen.dart
@@ -37,6 +37,7 @@
title: 'Performance',
icon: Octicons.pulse,
worksOffline: true,
+ requiresConnection: false,
tutorialVideoTimestamp: '?t=261',
),
cpuProfiler(
@@ -45,6 +46,7 @@
icon: Octicons.dashboard,
requiresDartVm: true,
worksOffline: true,
+ requiresConnection: false,
tutorialVideoTimestamp: '?t=340',
),
memory(
@@ -297,8 +299,6 @@
/// should return `null`.
String? get docPageId => null;
- int get badgeCount => 0;
-
double approximateTabWidth(
TextTheme textTheme, {
bool includeTabBarSpacing = true,
diff --git a/packages/devtools_app/lib/src/shared/server/_analytics_api.dart b/packages/devtools_app/lib/src/shared/server/_analytics_api.dart
new file mode 100644
index 0000000..4c594e2
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/_analytics_api.dart
@@ -0,0 +1,115 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+part of 'server.dart';
+
+/// Request DevTools property value 'firstRun' (GA dialog) stored in the file
+/// '~/flutter-devtools/.devtools'.
+Future<bool> isFirstRun() async {
+ bool firstRun = false;
+
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiGetDevToolsFirstRun);
+ if (resp?.statusCode == 200) {
+ firstRun = json.decode(resp!.body);
+ } else {
+ logWarning(resp, apiGetDevToolsFirstRun);
+ }
+ }
+
+ return firstRun;
+}
+
+/// Request DevTools property value 'enabled' (GA enabled) stored in the file
+/// '~/.flutter-devtools/.devtools'.
+Future<bool> isAnalyticsEnabled() async {
+ bool enabled = false;
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiGetDevToolsEnabled);
+ if (resp?.statusOk ?? false) {
+ enabled = json.decode(resp!.body);
+ } else {
+ logWarning(resp, apiGetDevToolsEnabled);
+ }
+ }
+ return enabled;
+}
+
+/// Set the DevTools property 'enabled' (GA enabled) stored in the file
+/// '~/.flutter-devtools/.devtools'.
+///
+/// Returns whether the set call was successful.
+Future<bool> setAnalyticsEnabled([bool value = true]) async {
+ if (isDevToolsServerAvailable) {
+ final resp = await request(
+ '$apiSetDevToolsEnabled'
+ '?$devToolsEnabledPropertyName=$value',
+ );
+ if (resp?.statusOk ?? false) {
+ assert(json.decode(resp!.body) == value);
+ return true;
+ } else {
+ logWarning(resp, apiSetDevToolsEnabled, resp?.body);
+ }
+ }
+ return false;
+}
+
+// TODO(terry): Move to an API scheme similar to the VM service extension where
+// '/api/devToolsEnabled' returns the value (identical VM service) and
+// '/api/devToolsEnabled?value=true' sets the value.
+
+/// Request Flutter tool stored property value enabled (GA enabled) stored in
+/// the file '~\.flutter'.
+///
+/// Return bool.
+/// Return value of false implies either GA is disabled or the Flutter Tool has
+/// never been run (null returned from the server).
+Future<bool> _isFlutterGAEnabled() async {
+ bool enabled = false;
+
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiGetFlutterGAEnabled);
+ if (resp?.statusOk ?? false) {
+ // A return value of 'null' implies Flutter tool has never been run so
+ // return false for Flutter GA enabled.
+ final responseValue = json.decode(resp!.body);
+ enabled = responseValue ?? false;
+ } else {
+ logWarning(resp, apiGetFlutterGAEnabled);
+ }
+ }
+
+ return enabled;
+}
+
+/// Request Flutter tool stored property value clientID (GA enabled) stored in
+/// the file '~\.flutter'.
+///
+/// Return as a String, empty string implies Flutter Tool has never been run.
+Future<String> flutterGAClientID() async {
+ // Default empty string, Flutter tool never run.
+ String clientId = '';
+
+ if (isDevToolsServerAvailable) {
+ // Test if Flutter is enabled (or if Flutter Tool ever ran) if not enabled
+ // is false, we don't want to be the first to create a ~/.flutter file.
+ if (await _isFlutterGAEnabled()) {
+ final resp = await request(apiGetFlutterGAClientId);
+ if (resp?.statusOk ?? false) {
+ clientId = json.decode(resp!.body);
+ if (clientId.isEmpty) {
+ // Requested value of 'null' (Flutter tool never ran). Server request
+ // apiGetFlutterGAClientId should not happen because the
+ // isFlutterGAEnabled test should have been false.
+ _log.warning('$apiGetFlutterGAClientId is empty');
+ }
+ } else {
+ logWarning(resp, apiGetFlutterGAClientId);
+ }
+ }
+ }
+
+ return clientId;
+}
diff --git a/packages/devtools_app/lib/src/shared/server/_app_size_api.dart b/packages/devtools_app/lib/src/shared/server/_app_size_api.dart
new file mode 100644
index 0000000..6ec55ac
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/_app_size_api.dart
@@ -0,0 +1,21 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+part of 'server.dart';
+
+Future<DevToolsJsonFile?> requestBaseAppSizeFile(String path) {
+ return requestFile(
+ api: apiGetBaseAppSizeFile,
+ fileKey: baseAppSizeFilePropertyName,
+ filePath: path,
+ );
+}
+
+Future<DevToolsJsonFile?> requestTestAppSizeFile(String path) {
+ return requestFile(
+ api: apiGetTestAppSizeFile,
+ fileKey: testAppSizeFilePropertyName,
+ filePath: path,
+ );
+}
diff --git a/packages/devtools_app/lib/src/shared/server/_deep_links_api.dart b/packages/devtools_app/lib/src/shared/server/_deep_links_api.dart
new file mode 100644
index 0000000..9a333e1
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/_deep_links_api.dart
@@ -0,0 +1,87 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+part of 'server.dart';
+
+Future<List<String>> requestAndroidBuildVariants(String path) async {
+ if (isDevToolsServerAvailable) {
+ final uri = Uri(
+ path: DeeplinkApi.androidBuildVariants,
+ queryParameters: {
+ DeeplinkApi.deeplinkRootPathPropertyName: path,
+ },
+ );
+ final resp = await request(uri.toString());
+ if (resp?.statusOk ?? false) {
+ return json.decode(resp!.body);
+ } else {
+ logWarning(resp, DeeplinkApi.androidBuildVariants);
+ }
+ }
+ return const <String>[];
+}
+
+Future<AppLinkSettings> requestAndroidAppLinkSettings(
+ String path, {
+ required String buildVariant,
+}) async {
+ if (isDevToolsServerAvailable) {
+ final uri = Uri(
+ path: DeeplinkApi.androidAppLinkSettings,
+ queryParameters: {
+ DeeplinkApi.deeplinkRootPathPropertyName: path,
+ DeeplinkApi.androidBuildVariantPropertyName: buildVariant,
+ },
+ );
+ final resp = await request(uri.toString());
+ if (resp?.statusOk ?? false) {
+ return AppLinkSettings.fromJson(resp!.body);
+ } else {
+ logWarning(resp, DeeplinkApi.androidAppLinkSettings);
+ }
+ }
+ return AppLinkSettings.empty;
+}
+
+Future<XcodeBuildOptions> requestIosBuildOptions(String path) async {
+ if (isDevToolsServerAvailable) {
+ final uri = Uri(
+ path: DeeplinkApi.iosBuildOptions,
+ queryParameters: {
+ DeeplinkApi.deeplinkRootPathPropertyName: path,
+ },
+ );
+ final resp = await request(uri.toString());
+ if (resp?.statusOk ?? false) {
+ return XcodeBuildOptions.fromJson(resp!.body);
+ } else {
+ logWarning(resp, DeeplinkApi.iosBuildOptions);
+ }
+ }
+ return XcodeBuildOptions.empty;
+}
+
+Future<UniversalLinkSettings> requestIosUniversalLinkSettings(
+ String path, {
+ required String configuration,
+ required String target,
+}) async {
+ if (isDevToolsServerAvailable) {
+ final uri = Uri(
+ path: DeeplinkApi.iosUniversalLinkSettings,
+ queryParameters: {
+ DeeplinkApi.deeplinkRootPathPropertyName: path,
+ DeeplinkApi.xcodeConfigurationPropertyName: configuration,
+ DeeplinkApi.xcodeTargetPropertyName: target,
+ },
+ );
+ final resp = await request(uri.toString());
+ if (resp?.statusOk ?? false) {
+ return UniversalLinkSettings.fromJson(resp!.body);
+ } else {
+ logWarning(resp, DeeplinkApi.iosUniversalLinkSettings);
+ }
+ }
+ return UniversalLinkSettings.empty;
+}
diff --git a/packages/devtools_app/lib/src/shared/server/_extensions_api.dart b/packages/devtools_app/lib/src/shared/server/_extensions_api.dart
new file mode 100644
index 0000000..60b5ade
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/_extensions_api.dart
@@ -0,0 +1,83 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+part of 'server.dart';
+
+/// Makes a request to the server to refresh the list of available extensions,
+/// serve their assets on the server, and return the list of available
+/// extensions here.
+Future<List<DevToolsExtensionConfig>> refreshAvailableExtensions(
+ String rootPath,
+) async {
+ if (isDevToolsServerAvailable) {
+ final uri = Uri(
+ path: ExtensionsApi.apiServeAvailableExtensions,
+ queryParameters: {ExtensionsApi.extensionRootPathPropertyName: rootPath},
+ );
+ final resp = await request(uri.toString());
+ if (resp?.statusOk ?? false) {
+ final parsedResult = json.decode(resp!.body);
+ final extensionsAsJson =
+ (parsedResult[ExtensionsApi.extensionsResultPropertyName]!
+ as List<Object?>)
+ .whereNotNull()
+ .cast<Map<String, Object?>>();
+
+ final warningMessage =
+ parsedResult[ExtensionsApi.extensionsResultWarningPropertyName];
+ if (warningMessage != null) {
+ _log.warning(warningMessage);
+ }
+
+ return extensionsAsJson
+ .map((p) => DevToolsExtensionConfig.parse(p))
+ .toList();
+ } else {
+ logWarning(resp, ExtensionsApi.apiServeAvailableExtensions);
+ return [];
+ }
+ } else if (debugDevToolsExtensions) {
+ return debugHandleRefreshAvailableExtensions(rootPath);
+ }
+ return [];
+}
+
+/// Makes a request to the server to look up the enabled state for a
+/// DevTools extension, and optionally to set the enabled state (when [enable]
+/// is non-null).
+///
+/// If [enable] is specified, the server will first set the enabled state
+/// to the value set forth by [enable] and then return the value that is saved
+/// to disk.
+Future<ExtensionEnabledState> extensionEnabledState({
+ required String rootPath,
+ required String extensionName,
+ bool? enable,
+}) async {
+ if (isDevToolsServerAvailable) {
+ final uri = Uri(
+ path: ExtensionsApi.apiExtensionEnabledState,
+ queryParameters: {
+ ExtensionsApi.extensionRootPathPropertyName: rootPath,
+ ExtensionsApi.extensionNamePropertyName: extensionName,
+ if (enable != null)
+ ExtensionsApi.enabledStatePropertyName: enable.toString(),
+ },
+ );
+ final resp = await request(uri.toString());
+ if (resp?.statusOk ?? false) {
+ final parsedResult = json.decode(resp!.body);
+ return ExtensionEnabledState.from(parsedResult);
+ } else {
+ logWarning(resp, ExtensionsApi.apiExtensionEnabledState);
+ }
+ } else if (debugDevToolsExtensions) {
+ return debugHandleExtensionEnabledState(
+ rootPath: rootPath,
+ extensionName: extensionName,
+ enable: enable,
+ );
+ }
+ return ExtensionEnabledState.error;
+}
diff --git a/packages/devtools_app/lib/src/shared/server/_release_notes_api.dart b/packages/devtools_app/lib/src/shared/server/_release_notes_api.dart
new file mode 100644
index 0000000..edd7793
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/_release_notes_api.dart
@@ -0,0 +1,36 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+part of 'server.dart';
+
+/// Requests the DevTools version for which we last showed release notes.
+///
+/// This value is stored in the file '~/.flutter-devtools/.devtools'.
+Future<String> getLastShownReleaseNotesVersion() async {
+ String version = '';
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiGetLastReleaseNotesVersion);
+ if (resp?.statusOk ?? false) {
+ version = json.decode(resp!.body);
+ } else {
+ logWarning(resp, apiGetLastReleaseNotesVersion);
+ }
+ }
+ return version;
+}
+
+/// Sets the DevTools version for which we last showed release notes.
+///
+/// This value is stored in the file '~/.flutter-devtools/.devtools'.
+Future<void> setLastShownReleaseNotesVersion(String version) async {
+ if (isDevToolsServerAvailable) {
+ final resp = await request(
+ '$apiSetLastReleaseNotesVersion'
+ '?$lastReleaseNotesVersionPropertyName=$version',
+ );
+ if (resp == null || !resp.statusOk || !json.decode(resp.body)) {
+ logWarning(resp, apiSetLastReleaseNotesVersion, resp?.body);
+ }
+ }
+}
diff --git a/packages/devtools_app/lib/src/shared/server/_survey_api.dart b/packages/devtools_app/lib/src/shared/server/_survey_api.dart
new file mode 100644
index 0000000..a944348
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/_survey_api.dart
@@ -0,0 +1,105 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+part of 'server.dart';
+
+/// Set DevTools parameter value for the active survey (e.g. 'Q1-2020').
+///
+/// The value is stored in the file '~/.flutter-devtools/.devtools'.
+///
+/// This method must be called before calling other survey related methods
+/// ([isSurveyActionTaken], [setSurveyActionTaken], [surveyShownCount],
+/// [incrementSurveyShownCount]). If the active survey is not set, warnings are
+/// logged.
+Future<bool> setActiveSurvey(String value) async {
+ if (isDevToolsServerAvailable) {
+ final resp = await request(
+ '$apiSetActiveSurvey'
+ '?$activeSurveyName=$value',
+ );
+ if ((resp?.statusOk ?? false) && json.decode(resp!.body)) {
+ return true;
+ } else {
+ logWarning(resp, apiSetActiveSurvey);
+ }
+ }
+ return false;
+}
+
+/// Request DevTools property value 'surveyActionTaken' for the active survey.
+///
+/// The value is stored in the file '~/.flutter-devtools/.devtools'.
+///
+/// Requires [setActiveSurvey] to have been called prior to calling this method.
+Future<bool> surveyActionTaken() async {
+ bool surveyActionTaken = false;
+
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiGetSurveyActionTaken);
+ if (resp?.statusOk ?? false) {
+ surveyActionTaken = json.decode(resp!.body);
+ } else {
+ logWarning(resp, apiGetSurveyActionTaken);
+ }
+ }
+
+ return surveyActionTaken;
+}
+
+/// Set DevTools property value 'surveyActionTaken' for the active survey.
+///
+/// The value is stored in the file '~/.flutter-devtools/.devtools'.
+///
+/// Requires [setActiveSurvey] to have been called prior to calling this method.
+Future<void> setSurveyActionTaken() async {
+ if (isDevToolsServerAvailable) {
+ final resp = await request(
+ '$apiSetSurveyActionTaken'
+ '?$surveyActionTakenPropertyName=true',
+ );
+ if (resp == null || !resp.statusOk || !json.decode(resp.body)) {
+ logWarning(resp, apiSetSurveyActionTaken, resp?.body);
+ }
+ }
+}
+
+/// Request DevTools property value 'surveyShownCount' for the active survey.
+///
+/// The value is stored in the file '~/.flutter-devtools/.devtools'.
+///
+/// Requires [setActiveSurvey] to have been called prior to calling this method.
+Future<int> surveyShownCount() async {
+ int surveyShownCount = 0;
+
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiGetSurveyShownCount);
+ if (resp?.statusOk ?? false) {
+ surveyShownCount = json.decode(resp!.body);
+ } else {
+ logWarning(resp, apiGetSurveyShownCount);
+ }
+ }
+
+ return surveyShownCount;
+}
+
+/// Increment DevTools property value 'surveyShownCount' for the active survey.
+///
+/// The value is stored in the file '~/.flutter-devtools/.devtools'.
+///
+/// Requires [setActiveSurvey] to have been called prior to calling this method.
+Future<int> incrementSurveyShownCount() async {
+ // Any failure will still return 0.
+ int surveyShownCount = 0;
+
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiIncrementSurveyShownCount);
+ if (resp?.statusOk ?? false) {
+ surveyShownCount = json.decode(resp!.body);
+ } else {
+ logWarning(resp, apiIncrementSurveyShownCount);
+ }
+ }
+ return surveyShownCount;
+}
diff --git a/packages/devtools_app/lib/src/shared/server/server.dart b/packages/devtools_app/lib/src/shared/server/server.dart
new file mode 100644
index 0000000..eac093c
--- /dev/null
+++ b/packages/devtools_app/lib/src/shared/server/server.dart
@@ -0,0 +1,101 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:collection/collection.dart';
+import 'package:devtools_shared/devtools_deeplink.dart';
+import 'package:devtools_shared/devtools_extensions.dart';
+import 'package:devtools_shared/devtools_shared.dart';
+import 'package:flutter/foundation.dart';
+import 'package:http/http.dart';
+import 'package:logging/logging.dart';
+
+import '../development_helpers.dart';
+import '../primitives/utils.dart';
+
+part '_analytics_api.dart';
+part '_app_size_api.dart';
+part '_deep_links_api.dart';
+part '_extensions_api.dart';
+part '_release_notes_api.dart';
+part '_survey_api.dart';
+
+final _log = Logger('_server_web');
+
+// The DevTools server is only available in release mode right now.
+// TODO(kenz): design a way to run the DevTools server and DevTools app together
+// in debug mode.
+bool get isDevToolsServerAvailable => kReleaseMode;
+
+/// Helper to catch any server request which could fail.
+///
+/// Returns HttpRequest or null (if server failure).
+Future<Response?> request(String url) async {
+ Response? response;
+
+ try {
+ response = await post(Uri.parse(url));
+ } catch (_) {}
+
+ return response;
+}
+
+// currently unused
+/// Requests all .devtools properties to be reset to their default values in the
+/// file '~/.flutter-devtools/.devtools'.
+Future<void> resetDevToolsFile() async {
+ if (isDevToolsServerAvailable) {
+ final resp = await request(apiResetDevTools);
+ if (resp?.statusOk ?? false) {
+ assert(json.decode(resp!.body));
+ } else {
+ logWarning(resp, apiResetDevTools);
+ }
+ }
+}
+
+Future<DevToolsJsonFile?> requestFile({
+ required String api,
+ required String fileKey,
+ required String filePath,
+}) async {
+ if (isDevToolsServerAvailable) {
+ final url = Uri(path: api, queryParameters: {fileKey: filePath});
+ final resp = await request(url.toString());
+ if (resp?.statusOk ?? false) {
+ return _devToolsJsonFileFromResponse(resp!, filePath);
+ } else {
+ logWarning(resp, api);
+ }
+ }
+ return null;
+}
+
+DevToolsJsonFile _devToolsJsonFileFromResponse(
+ Response resp,
+ String filePath,
+) {
+ final data = json.decode(resp.body);
+ final lastModified = data['lastModifiedTime'];
+ final lastModifiedTime =
+ lastModified != null ? DateTime.parse(lastModified) : DateTime.now();
+ return DevToolsJsonFile(
+ name: filePath,
+ lastModifiedTime: lastModifiedTime,
+ data: data,
+ );
+}
+
+void logWarning(Response? response, String apiType, [String? respText]) {
+ _log.warning(
+ 'HttpRequest $apiType failed status = ${response?.statusCode}'
+ '${respText != null ? ', responseText = $respText' : ''}',
+ );
+}
+
+extension ResponseExtension on Response {
+ bool get statusOk => statusCode == 200;
+}
diff --git a/packages/devtools_app/lib/src/shared/server_api_client.dart b/packages/devtools_app/lib/src/shared/server/server_api_client.dart
similarity index 96%
rename from packages/devtools_app/lib/src/shared/server_api_client.dart
rename to packages/devtools_app/lib/src/shared/server/server_api_client.dart
index bc369b7..3a34585 100644
--- a/packages/devtools_app/lib/src/shared/server_api_client.dart
+++ b/packages/devtools_app/lib/src/shared/server/server_api_client.dart
@@ -10,9 +10,9 @@
import 'package:http/http.dart' as http;
import 'package:logging/logging.dart';
-import 'config_specific/notifications/notifications.dart';
-import 'framework_controller.dart';
-import 'globals.dart';
+import '../config_specific/notifications/notifications.dart';
+import '../framework_controller.dart';
+import '../globals.dart';
final _log = Logger('lib/src/shared/server_api_client');
@@ -181,8 +181,8 @@
completer?.complete(result);
}
- void _notifyConnected(Uri vmServiceUri) {
- unawaited(_callMethod('connected', {'uri': vmServiceUri.toString()}));
+ void _notifyConnected(String vmServiceUri) {
+ unawaited(_callMethod('connected', {'uri': vmServiceUri}));
}
void _notifyCurrentPage(PageChangeEvent page) {
diff --git a/packages/devtools_app/lib/src/shared/survey.dart b/packages/devtools_app/lib/src/shared/survey.dart
index 19990fe..71a2e2f 100644
--- a/packages/devtools_app/lib/src/shared/survey.dart
+++ b/packages/devtools_app/lib/src/shared/survey.dart
@@ -14,9 +14,10 @@
import '../shared/notifications.dart';
import 'analytics/analytics.dart' as ga;
import 'config_specific/launch_url/launch_url.dart';
-import 'config_specific/server/server.dart' as server;
+import 'development_helpers.dart';
import 'globals.dart';
import 'primitives/utils.dart';
+import 'server/server.dart' as server;
final _log = Logger('survey');
@@ -118,6 +119,9 @@
@visibleForTesting
Future<DevToolsSurvey?> fetchSurveyContent() async {
try {
+ if (debugSurvey) {
+ return debugSurveyMetadata;
+ }
final response = await get(_metadataUrl);
if (response.statusCode == 200) {
final Map<String, dynamic> contents = json.decode(response.body);
diff --git a/packages/devtools_app/lib/src/shared/table/table.dart b/packages/devtools_app/lib/src/shared/table/table.dart
index b1ba673..27ed3bc 100644
--- a/packages/devtools_app/lib/src/shared/table/table.dart
+++ b/packages/devtools_app/lib/src/shared/table/table.dart
@@ -18,6 +18,7 @@
import '../primitives/utils.dart';
import '../ui/search.dart';
import '../ui/utils.dart';
+import '../utils.dart';
import 'column_widths.dart';
import 'table_controller.dart';
import 'table_data.dart';
@@ -34,10 +35,11 @@
required int index,
required List<double> columnWidths,
required bool isPinned,
+ required bool enableHoverHandling,
});
typedef TableKeyEventHandler = KeyEventResult Function(
- RawKeyEvent event,
+ KeyEvent event,
ScrollController scrollController,
BoxConstraints constraints,
);
@@ -55,7 +57,7 @@
///
/// This table will automatically refresh search matches on the
/// [searchController] after sort operations that are triggered from the table.
-class SearchableFlatTable<T extends SearchableDataMixin> extends FlatTable {
+class SearchableFlatTable<T extends SearchableDataMixin> extends FlatTable<T> {
SearchableFlatTable({
super.key,
required SearchControllerMixin<T> searchController,
@@ -113,6 +115,9 @@
this.includeColumnGroupHeaders = true,
this.tallHeaders = false,
this.sizeColumnsToFit = true,
+ this.headerColor,
+ this.fillWithEmptyRows = false,
+ this.enableHoverHandling = false,
ValueNotifier<T?>? selectionNotifier,
}) : selectionNotifier = selectionNotifier ?? ValueNotifier<T?>(null),
super(key: key);
@@ -151,6 +156,17 @@
/// support multiline text.
final bool tallHeaders;
+ /// The background color of the header.
+ ///
+ /// If null, defaults to `Theme.of(context).canvasColor`.
+ final Color? headerColor;
+
+ /// Whether to fill the table with empty rows.
+ final bool fillWithEmptyRows;
+
+ /// Whether to enable hover handling.
+ final bool enableHoverHandling;
+
/// Data set to show as rows in this table.
final List<T> data;
@@ -319,6 +335,9 @@
rowItemExtent: defaultRowHeight,
preserveVerticalScrollPosition: widget.preserveVerticalScrollPosition,
tallHeaders: widget.tallHeaders,
+ headerColor: widget.headerColor,
+ fillWithEmptyRows: widget.fillWithEmptyRows,
+ enableHoverHandling: widget.enableHoverHandling,
);
if (widget.sizeColumnsToFit || tableController.columnWidths == null) {
return LayoutBuilder(
@@ -338,9 +357,23 @@
required int index,
required List<double> columnWidths,
required bool isPinned,
+ required bool enableHoverHandling,
}) {
final pinnedData = tableController.pinnedData;
final data = isPinned ? pinnedData : tableController.tableData.value.data;
+ if (index >= data.length) {
+ return TableRow<T>.filler(
+ linkedScrollControllerGroup: linkedScrollControllerGroup,
+ columns: tableController.columns,
+ columnGroups: tableController.columnGroups,
+ columnWidths: columnWidths,
+ backgroundColor: alternatingColorForIndex(
+ index,
+ Theme.of(context).colorScheme,
+ ),
+ );
+ }
+
final node = data[index];
return ValueListenableBuilder<T?>(
valueListenable: widget.selectionNotifier,
@@ -365,6 +398,7 @@
isSelected: node != null && node == selected,
searchMatchesNotifier: widget.searchMatchesNotifier,
activeSearchMatchNotifier: widget.activeSearchMatchNotifier,
+ enableHoverHandling: enableHoverHandling,
);
},
);
@@ -424,6 +458,7 @@
this.preserveVerticalScrollPosition = false,
this.displayTreeGuidelines = false,
this.tallHeaders = false,
+ this.headerColor,
ValueNotifier<Selection<T?>>? selectionNotifier,
}) : selectionNotifier = selectionNotifier ??
ValueNotifier<Selection<T?>>(Selection.empty()),
@@ -498,6 +533,11 @@
/// support multiline text.
final bool tallHeaders;
+ /// The background color of the header.
+ ///
+ /// If null, defaults to `Theme.of(context).canvasColor`.
+ final Color? headerColor;
+
@override
TreeTableState<T> createState() => TreeTableState<T>();
}
@@ -658,6 +698,7 @@
selectionNotifier: widget.selectionNotifier,
preserveVerticalScrollPosition: widget.preserveVerticalScrollPosition,
tallHeaders: widget.tallHeaders,
+ headerColor: widget.headerColor,
);
}
@@ -667,6 +708,7 @@
required int index,
required List<double> columnWidths,
required bool isPinned,
+ required bool enableHoverHandling,
}) {
Widget rowForNode(T node) {
final selection = widget.selectionNotifier.value;
@@ -695,11 +737,11 @@
}
KeyEventResult _handleKeyEvent(
- RawKeyEvent event,
+ KeyEvent event,
ScrollController scrollController,
BoxConstraints constraints,
) {
- if (event is! RawKeyDownEvent) return KeyEventResult.ignored;
+ if (!event.isKeyDownOrRepeat) return KeyEventResult.ignored;
// Exit early if we aren't handling the key
if (![
@@ -837,6 +879,9 @@
this.activeSearchMatchNotifier,
this.rowItemExtent,
this.tallHeaders = false,
+ this.headerColor,
+ this.fillWithEmptyRows = false,
+ this.enableHoverHandling = false,
}) : super(key: key);
final TableControllerBase<T> tableController;
@@ -850,6 +895,9 @@
final ValueListenable<T?>? activeSearchMatchNotifier;
final bool preserveVerticalScrollPosition;
final bool tallHeaders;
+ final Color? headerColor;
+ final bool fillWithEmptyRows;
+ final bool enableHoverHandling;
@override
_TableState<T> createState() => _TableState<T>();
@@ -992,6 +1040,33 @@
return tableWidth;
}
+ double _pinnedDataHeight(BoxConstraints tableConstraints) => min(
+ widget.rowItemExtent! * pinnedData.length,
+ tableConstraints.maxHeight / 2,
+ );
+
+ int _dataRowCount(
+ BoxConstraints tableConstraints,
+ bool showColumnGroupHeader,
+ ) {
+ if (!widget.fillWithEmptyRows) {
+ return _data.length;
+ }
+
+ var maxHeight = tableConstraints.maxHeight;
+ final columnHeadersCount = showColumnGroupHeader ? 2 : 1;
+ maxHeight -= columnHeadersCount *
+ (areaPaneHeaderHeight +
+ (widget.tallHeaders ? scaleByFontFactor(densePadding) : 0.0));
+
+ if (pinnedData.isNotEmpty) {
+ maxHeight -=
+ _pinnedDataHeight(tableConstraints) + ThickDivider.thickDividerHeight;
+ }
+
+ return max(_data.length, maxHeight ~/ widget.rowItemExtent!);
+ }
+
Widget _buildItem(BuildContext context, int index, {bool isPinned = false}) {
return widget.rowBuilder(
context: context,
@@ -999,6 +1074,7 @@
index: index,
columnWidths: widget.columnWidths,
isPinned: isPinned,
+ enableHoverHandling: widget.enableHoverHandling,
);
}
@@ -1016,6 +1092,9 @@
final columnGroups = widget.tableController.columnGroups;
final includeColumnGroupHeaders =
widget.tableController.includeColumnGroupHeaders;
+ final showColumnGroupHeader = columnGroups != null &&
+ columnGroups.isNotEmpty &&
+ includeColumnGroupHeaders;
final tableUiState = widget.tableController.tableUiState;
final sortColumn =
widget.tableController.columns[tableUiState.sortColumnIndex];
@@ -1026,20 +1105,34 @@
// TODO(kenz): add horizontal scrollbar.
return LayoutBuilder(
builder: (context, constraints) {
- return SizedBox(
- width: max(
- constraints.widthConstraints().maxWidth,
- tableWidth,
- ),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.stretch,
- children: [
- if (columnGroups != null &&
- columnGroups.isNotEmpty &&
- includeColumnGroupHeaders)
- TableRow<T>.tableColumnGroupHeader(
+ return SelectionArea(
+ child: SizedBox(
+ width: max(
+ constraints.widthConstraints().maxWidth,
+ tableWidth,
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ if (showColumnGroupHeader)
+ TableRow<T>.tableColumnGroupHeader(
+ linkedScrollControllerGroup:
+ _linkedHorizontalScrollControllerGroup,
+ columnGroups: columnGroups,
+ columnWidths: widget.columnWidths,
+ sortColumn: sortColumn,
+ sortDirection: tableUiState.sortDirection,
+ secondarySortColumn:
+ widget.tableController.secondarySortColumn,
+ onSortChanged: widget.tableController.sortDataAndNotify,
+ tall: widget.tallHeaders,
+ backgroundColor: widget.headerColor,
+ ),
+ TableRow<T>.tableColumnHeader(
+ key: const Key('Table header'),
linkedScrollControllerGroup:
_linkedHorizontalScrollControllerGroup,
+ columns: widget.tableController.columns,
columnGroups: columnGroups,
columnWidths: widget.columnWidths,
sortColumn: sortColumn,
@@ -1048,71 +1141,58 @@
widget.tableController.secondarySortColumn,
onSortChanged: widget.tableController.sortDataAndNotify,
tall: widget.tallHeaders,
+ backgroundColor: widget.headerColor,
),
- TableRow<T>.tableColumnHeader(
- key: const Key('Table header'),
- linkedScrollControllerGroup:
- _linkedHorizontalScrollControllerGroup,
- columns: widget.tableController.columns,
- columnGroups: columnGroups,
- columnWidths: widget.columnWidths,
- sortColumn: sortColumn,
- sortDirection: tableUiState.sortDirection,
- secondarySortColumn: widget.tableController.secondarySortColumn,
- onSortChanged: widget.tableController.sortDataAndNotify,
- tall: widget.tallHeaders,
- ),
- if (pinnedData.isNotEmpty) ...[
- SizedBox(
- height: min(
- widget.rowItemExtent! * pinnedData.length,
- constraints.maxHeight / 2,
+ if (pinnedData.isNotEmpty) ...[
+ SizedBox(
+ height: _pinnedDataHeight(constraints),
+ child: Scrollbar(
+ thumbVisibility: true,
+ controller: pinnedScrollController,
+ child: ListView.builder(
+ controller: pinnedScrollController,
+ itemCount: pinnedData.length,
+ itemExtent: widget.rowItemExtent,
+ itemBuilder: (context, index) => _buildItem(
+ context,
+ index,
+ isPinned: true,
+ ),
+ ),
+ ),
),
+ const ThickDivider(),
+ ],
+ Expanded(
child: Scrollbar(
thumbVisibility: true,
- controller: pinnedScrollController,
- child: ListView.builder(
- controller: pinnedScrollController,
- itemCount: pinnedData.length,
- itemExtent: widget.rowItemExtent,
- itemBuilder: (context, index) => _buildItem(
- context,
- index,
- isPinned: true,
+ controller: scrollController,
+ child: GestureDetector(
+ behavior: HitTestBehavior.translucent,
+ onTapDown: (a) => widget.focusNode?.requestFocus(),
+ child: Focus(
+ autofocus: true,
+ onKeyEvent: (_, event) => widget.handleKeyEvent != null
+ ? widget.handleKeyEvent!(
+ event,
+ scrollController,
+ constraints,
+ )
+ : KeyEventResult.ignored,
+ focusNode: widget.focusNode,
+ child: ListView.builder(
+ controller: scrollController,
+ itemCount:
+ _dataRowCount(constraints, showColumnGroupHeader),
+ itemExtent: widget.rowItemExtent,
+ itemBuilder: _buildItem,
+ ),
),
),
),
),
- const ThickDivider(),
],
- Expanded(
- child: Scrollbar(
- thumbVisibility: true,
- controller: scrollController,
- child: GestureDetector(
- behavior: HitTestBehavior.translucent,
- onTapDown: (a) => widget.focusNode?.requestFocus(),
- child: Focus(
- autofocus: true,
- onKey: (_, event) => widget.handleKeyEvent != null
- ? widget.handleKeyEvent!(
- event,
- scrollController,
- constraints,
- )
- : KeyEventResult.ignored,
- focusNode: widget.focusNode,
- child: ListView.builder(
- controller: scrollController,
- itemCount: _data.length,
- itemExtent: widget.rowItemExtent,
- itemBuilder: _buildItem,
- ),
- ),
- ),
- ),
- ),
- ],
+ ),
),
);
},
@@ -1127,10 +1207,13 @@
///
/// This method can return `null` to indicate that the default rendering
/// should be used instead.
+ /// `isRowHovered` is only used when `enableHoverHandling` is `true` on the table
+ /// that this column belongs to.
Widget? build(
BuildContext context,
T data, {
bool isRowSelected = false,
+ bool isRowHovered = false,
VoidCallback? onPressed,
});
}
@@ -1170,6 +1253,7 @@
this.isExpandable = false,
this.isSelected = false,
this.isShown = true,
+ this.enableHoverHandling = false,
this.displayTreeGuidelines = false,
this.searchMatchesNotifier,
this.activeSearchMatchNotifier,
@@ -1181,6 +1265,33 @@
tall = false,
super(key: key);
+ /// Constructs a [TableRow] that is empty.
+ const TableRow.filler({
+ Key? key,
+ required this.linkedScrollControllerGroup,
+ required this.columns,
+ required this.columnWidths,
+ this.columnGroups,
+ this.backgroundColor,
+ }) : node = null,
+ isExpanded = false,
+ isExpandable = false,
+ isSelected = false,
+ onPressed = null,
+ expandableColumn = null,
+ isShown = true,
+ sortColumn = null,
+ sortDirection = null,
+ secondarySortColumn = null,
+ onSortChanged = null,
+ searchMatchesNotifier = null,
+ activeSearchMatchNotifier = null,
+ tall = false,
+ enableHoverHandling = false,
+ displayTreeGuidelines = false,
+ _rowType = _TableRowType.filler,
+ super(key: key);
+
/// Constructs a [TableRow] that presents the column titles instead
/// of any [node].
const TableRow.tableColumnHeader({
@@ -1195,16 +1306,17 @@
this.secondarySortColumn,
this.onPressed,
this.tall = false,
+ this.backgroundColor,
}) : node = null,
isExpanded = false,
isExpandable = false,
isSelected = false,
expandableColumn = null,
isShown = true,
- backgroundColor = null,
searchMatchesNotifier = null,
activeSearchMatchNotifier = null,
displayTreeGuidelines = false,
+ enableHoverHandling = false,
_rowType = _TableRowType.columnHeader,
super(key: key);
@@ -1221,6 +1333,7 @@
this.secondarySortColumn,
this.onPressed,
this.tall = false,
+ this.backgroundColor,
}) : node = null,
isExpanded = false,
isExpandable = false,
@@ -1228,10 +1341,10 @@
expandableColumn = null,
columns = const [],
isShown = true,
- backgroundColor = null,
searchMatchesNotifier = null,
activeSearchMatchNotifier = null,
displayTreeGuidelines = false,
+ enableHoverHandling = false,
_rowType = _TableRowType.columnGroupHeader,
super(key: key);
@@ -1253,6 +1366,8 @@
final bool tall;
+ final bool enableHoverHandling;
+
/// Which column, if any, should show expansion affordances
/// and nested rows.
final ColumnData<T>? expandableColumn;
@@ -1317,6 +1432,8 @@
bool isActiveSearchMatch = false;
+ bool isHovering = false;
+
@override
void initState() {
super.initState();
@@ -1451,7 +1568,9 @@
Widget? content;
final theme = Theme.of(context);
final node = widget.node;
- if (widget._rowType == _TableRowType.columnHeader) {
+ if (widget._rowType == _TableRowType.filler) {
+ content = const SizedBox.shrink();
+ } else if (widget._rowType == _TableRowType.columnHeader) {
Widget defaultHeaderRenderer() => _ColumnHeader(
column: column,
isSortColumn: column == widget.sortColumn,
@@ -1479,13 +1598,14 @@
context,
node,
isRowSelected: widget.isSelected,
+ isRowHovered: isHovering,
onPressed: onPressed,
);
}
// If ColumnRenderer.build returns null, fall back to the default
// rendering.
- content ??= RichText(
- text: TextSpan(
+ content ??= Text.rich(
+ TextSpan(
text: column.getDisplayValue(node),
children: [
if (column.getCaption(node) != null)
@@ -1622,7 +1742,7 @@
}
}
- final rowContent = Padding(
+ Widget rowContent = Padding(
padding: const EdgeInsets.symmetric(horizontal: defaultSpacing),
child: ListView.builder(
scrollDirection: Axis.horizontal,
@@ -1648,6 +1768,15 @@
},
),
);
+
+ if (widget.enableHoverHandling) {
+ rowContent = MouseRegion(
+ onEnter: (_) => setState(() => isHovering = true),
+ onExit: (_) => setState(() => isHovering = false),
+ child: rowContent,
+ );
+ }
+
if (widget._rowType == _TableRowType.columnHeader) {
return OutlineDecoration.onlyBottom(child: rowContent);
}
@@ -1874,6 +2003,7 @@
data,
columnHeader,
columnGroupHeader,
+ filler,
}
enum _TableRowPartDisplayType {
diff --git a/packages/devtools_app/lib/src/shared/table/table_data.dart b/packages/devtools_app/lib/src/shared/table/table_data.dart
index 877e295..bd10358 100644
--- a/packages/devtools_app/lib/src/shared/table/table_data.dart
+++ b/packages/devtools_app/lib/src/shared/table/table_data.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'dart:async';
-
import 'package:devtools_app_shared/ui.dart';
import 'package:flutter/material.dart';
@@ -111,16 +109,6 @@
static double get treeToggleWidth => scaleByFontFactor(14.0);
- final StreamController<T> nodeExpandedController =
- StreamController<T>.broadcast();
-
- Stream<T> get onNodeExpanded => nodeExpandedController.stream;
-
- final StreamController<T> nodeCollapsedController =
- StreamController<T>.broadcast();
-
- Stream<T> get onNodeCollapsed => nodeCollapsedController.stream;
-
@override
double getNodeIndentPx(T dataObject) {
return dataObject.level * treeToggleWidth;
diff --git a/packages/devtools_app/lib/src/shared/ui/colors.dart b/packages/devtools_app/lib/src/shared/ui/colors.dart
index 7faef30..473aecc 100644
--- a/packages/devtools_app/lib/src/shared/ui/colors.dart
+++ b/packages/devtools_app/lib/src/shared/ui/colors.dart
@@ -145,6 +145,9 @@
isLight ? Colors.grey[50]! : const Color(0xFF1B1B1F);
Color get grey => const Color.fromARGB(255, 128, 128, 128);
+ Color get green => const Color.fromARGB(255, 156, 233, 195);
Color get overlayShadowColor => const Color.fromRGBO(0, 0, 0, 0.5);
+ Color get deeplinkUnavailableColor => const Color(0xFFFE7C04);
+ Color get deeplinkTableHeaderColor => Colors.black;
}
diff --git a/packages/devtools_app/lib/src/shared/ui/filter.dart b/packages/devtools_app/lib/src/shared/ui/filter.dart
index 3b52c51..7c4a26a 100644
--- a/packages/devtools_app/lib/src/shared/ui/filter.dart
+++ b/packages/devtools_app/lib/src/shared/ui/filter.dart
@@ -128,13 +128,11 @@
required this.controller,
this.includeQueryFilter = true,
this.queryInstructions,
- double? dialogWidth,
}) : assert(
!includeQueryFilter ||
(queryInstructions != null &&
controller._queryFilterArgs.isNotEmpty),
),
- dialogWidth = dialogWidth ?? defaultDialogWidth,
toggleFilterValuesAtOpen = List.generate(
controller.activeFilter.value.toggleFilters.length,
(index) =>
@@ -147,8 +145,6 @@
final bool includeQueryFilter;
- final double dialogWidth;
-
final List<bool> toggleFilterValuesAtOpen;
@override
@@ -377,8 +373,6 @@
bool isNegative;
- bool get isNotEmpty => values.isNotEmpty;
-
String get display => values.isNotEmpty
? '${isNegative ? negativePrefix : ''}${keys.first}:${values.join(valueSeparator)}'
: '';
diff --git a/packages/devtools_app/lib/src/shared/ui/hover.dart b/packages/devtools_app/lib/src/shared/ui/hover.dart
index 03198ea..92e40d9 100644
--- a/packages/devtools_app/lib/src/shared/ui/hover.dart
+++ b/packages/devtools_app/lib/src/shared/ui/hover.dart
@@ -431,6 +431,7 @@
// ignore: use_build_context_synchronously, requires investigation
return _setHoverCardFromData(
data,
+ // ignore: use_build_context_synchronously, requires investigation
context: context,
event: event,
);
@@ -440,6 +441,7 @@
// while we wait for it.
// ignore: use_build_context_synchronously, requires investigation
spinnerHoverCard = HoverCard.fromHoverEvent(
+ // ignore: use_build_context_synchronously, requires investigation
context: context,
contents: const CenteredCircularProgressIndicator(),
width: HoverCardTooltip.defaultHoverWidth,
@@ -468,6 +470,7 @@
// ignore: use_build_context_synchronously, requires investigation
return _setHoverCardFromData(
hoverCardData,
+ // ignore: use_build_context_synchronously, requires investigation
context: context,
event: event,
);
diff --git a/packages/devtools_app/lib/src/shared/ui/icons.dart b/packages/devtools_app/lib/src/shared/ui/icons.dart
index 50f7e37..b3e052a 100644
--- a/packages/devtools_app/lib/src/shared/ui/icons.dart
+++ b/packages/devtools_app/lib/src/shared/ui/icons.dart
@@ -9,8 +9,7 @@
/// to handle the actual platform specific icon rendering.
/// The benefit of this approach is that icons can be const objects and tests
/// of code that uses icons can run on the Dart VM.
-
-library icons;
+library;
import 'package:devtools_app_shared/ui.dart';
import 'package:flutter/material.dart';
diff --git a/packages/devtools_app/lib/src/shared/ui/search.dart b/packages/devtools_app/lib/src/shared/ui/search.dart
index 557e299..9b6a241 100644
--- a/packages/devtools_app/lib/src/shared/ui/search.dart
+++ b/packages/devtools_app/lib/src/shared/ui/search.dart
@@ -579,20 +579,20 @@
/// [FocusNode] for the keyboard listener responsible for handling auto
/// complete search.
- FocusNode get rawKeyboardFocusNode => _rawKeyboardFocusNode!;
- FocusNode? _rawKeyboardFocusNode;
+ FocusNode get autocompleteFocusNode => _autocompleteFocusNode!;
+ FocusNode? _autocompleteFocusNode;
@override
void initSearch() {
super.initSearch();
- _rawKeyboardFocusNode?.dispose();
- _rawKeyboardFocusNode = FocusNode(debugLabel: 'search-raw-keyboard');
+ _autocompleteFocusNode?.dispose();
+ _autocompleteFocusNode = FocusNode(debugLabel: 'search-keyboard');
}
@override
void disposeSearch() {
- _rawKeyboardFocusNode?.dispose();
- _rawKeyboardFocusNode = null;
+ _autocompleteFocusNode?.dispose();
+ _autocompleteFocusNode = null;
super.disposeSearch();
}
@@ -762,14 +762,6 @@
);
}
- void selectFromSearchField(String selection) {
- searchTextFieldController.clear();
- search = selection;
- clearSearchField(force: true);
- selectTheSearch = true;
- closeAutoCompleteOverlay();
- }
-
void clearSearchField({bool force = false}) {
if (force || search.isNotEmpty) {
resetSearch();
@@ -802,12 +794,6 @@
bool directionDown,
);
-/// Callback for clearing the search field.
-typedef ClearSearchField = Function(
- AutoCompleteSearchControllerMixin controller, {
- bool force,
-});
-
/// Provided by clients to specify where the autocomplete overlay should be
/// positioned relative to the input text.
typedef OverlayXPositionBuilder = double Function(
@@ -1055,6 +1041,7 @@
onChanged: (value) {
onChanged?.call(value);
controller.search = value;
+ controller.searchFieldFocusNode.requestFocus();
},
onEditingComplete: () {
controller.searchFieldFocusNode.requestFocus();
@@ -1175,7 +1162,7 @@
final bool clearFieldOnEscapeWhenOverlayHidden;
/// Handler called when either [controller.searchFieldFocusNode] or
- /// [controller.rawKeyboardFocusNode] has lost focus.
+ /// [controller.autocompleteFocusNode] has lost focus.
final VoidCallback? onFocusLost;
@override
@@ -1185,24 +1172,6 @@
class _AutoCompleteSearchFieldState extends State<AutoCompleteSearchField>
with AutoDisposeMixin {
- /// Platform independent (Mac or Linux).
- int get arrowDown =>
- LogicalKeyboardKey.arrowDown.keyId & LogicalKeyboardKey.valueMask;
-
- int get arrowUp =>
- LogicalKeyboardKey.arrowUp.keyId & LogicalKeyboardKey.valueMask;
-
- int get enter =>
- LogicalKeyboardKey.enter.keyId & LogicalKeyboardKey.valueMask;
-
- int get escape =>
- LogicalKeyboardKey.escape.keyId & LogicalKeyboardKey.valueMask;
-
- int get tab => LogicalKeyboardKey.tab.keyId & LogicalKeyboardKey.valueMask;
-
- int get arrowRight =>
- LogicalKeyboardKey.arrowRight.keyId & LogicalKeyboardKey.valueMask;
-
HighlightAutoComplete get _highlightDropdown =>
widget.onHighlightDropdown != null
? widget.onHighlightDropdown as HighlightAutoComplete
@@ -1217,16 +1186,16 @@
_handleLostFocus,
);
addAutoDisposeListener(
- widget.controller.rawKeyboardFocusNode,
+ widget.controller.autocompleteFocusNode,
_handleLostFocus,
);
- widget.controller.rawKeyboardFocusNode.onKey = _handleKeyStrokes;
+ widget.controller.autocompleteFocusNode.onKeyEvent = _handleKeyStrokes;
}
@override
Widget build(BuildContext context) {
- return RawKeyboardListener(
- focusNode: widget.controller.rawKeyboardFocusNode,
+ return Focus.withExternalFocusNode(
+ focusNode: widget.controller.autocompleteFocusNode,
child: CompositedTransformTarget(
link: widget.controller.autoCompleteLayerLink,
child: StatelessSearchField(
@@ -1253,7 +1222,7 @@
void _handleLostFocus() {
if (widget.controller.searchFieldFocusNode.hasPrimaryFocus ||
- widget.controller.rawKeyboardFocusNode.hasPrimaryFocus) {
+ widget.controller.autocompleteFocusNode.hasPrimaryFocus) {
return;
}
@@ -1264,78 +1233,78 @@
}
}
- KeyEventResult _handleKeyStrokes(FocusNode _, RawKeyEvent event) {
- if (event is RawKeyDownEvent) {
- final key = event.data.logicalKey.keyId & LogicalKeyboardKey.valueMask;
+ KeyEventResult _handleKeyStrokes(FocusNode _, KeyEvent event) {
+ if (!event.isKeyDownOrRepeat) return KeyEventResult.ignored;
+ final key = event.logicalKey;
- if (key == escape) {
- // TODO(kenz): Enable this once we find a way around the navigation
- // this causes. This triggers a "back" navigation.
- // ESCAPE key pressed clear search TextField.c
- if (widget.controller.autoCompleteOverlay != null) {
- widget.controller.closeAutoCompleteOverlay();
- } else if (widget.clearFieldOnEscapeWhenOverlayHidden) {
- // If pop-up closed ESCAPE will clean the TextField.
- widget.controller.clearSearchField(force: true);
+ if (key == LogicalKeyboardKey.escape) {
+ // TODO(kenz): Enable this once we find a way around the navigation
+ // this causes. This triggers a "back" navigation.
+ // ESCAPE key pressed clear search TextField.
+ if (widget.controller.autoCompleteOverlay != null) {
+ widget.controller.closeAutoCompleteOverlay();
+ } else if (widget.clearFieldOnEscapeWhenOverlayHidden) {
+ // If pop-up closed ESCAPE will clean the TextField.
+ widget.controller.clearSearchField(force: true);
+ }
+ return _determineKeyEventResult(key);
+ } else if (widget.controller.autoCompleteOverlay != null) {
+ if (key == LogicalKeyboardKey.enter ||
+ key == LogicalKeyboardKey.tab ||
+ (key == LogicalKeyboardKey.arrowRight &&
+ widget.controller.searchTextFieldController.isAtEnd)) {
+ // Enter / Tab pressed OR right arrow pressed while text field is at the end.
+ String? foundExact;
+
+ // What the user has typed in so far.
+ final searchToMatch = widget.controller.search.toLowerCase();
+ // Find exact match in autocomplete list - use that as our search value.
+ for (final autoEntry in widget.controller.searchAutoComplete.value) {
+ if (searchToMatch == autoEntry.text.toLowerCase()) {
+ foundExact = autoEntry.text;
+ break;
+ }
}
- return _determineKeyEventResult(key);
- } else if (widget.controller.autoCompleteOverlay != null) {
- if (key == enter ||
- key == tab ||
- (key == arrowRight &&
- widget.controller.searchTextFieldController.isAtEnd)) {
- // Enter / Tab pressed OR right arrow pressed while text field is at the end
- String? foundExact;
+ // Nothing found, pick item selected in dropdown.
+ final autoCompleteList = widget.controller.searchAutoComplete.value;
+ if (foundExact == null ||
+ autoCompleteList[widget.controller.currentHoveredIndex.value]
+ .text !=
+ foundExact) {
+ if (autoCompleteList.isNotEmpty) {
+ foundExact =
+ autoCompleteList[widget.controller.currentHoveredIndex.value]
+ .text;
+ }
+ }
- // What the user has typed in so far.
- final searchToMatch = widget.controller.search.toLowerCase();
- // Find exact match in autocomplete list - use that as our search value.
- for (final autoEntry in widget.controller.searchAutoComplete.value) {
- if (searchToMatch == autoEntry.text.toLowerCase()) {
- foundExact = autoEntry.text;
- break;
- }
- }
- // Nothing found, pick item selected in dropdown.
- final autoCompleteList = widget.controller.searchAutoComplete.value;
- if (foundExact == null ||
- autoCompleteList[widget.controller.currentHoveredIndex.value]
- .text !=
- foundExact) {
- if (autoCompleteList.isNotEmpty) {
- foundExact =
- autoCompleteList[widget.controller.currentHoveredIndex.value]
- .text;
- }
- }
-
- if (foundExact != null) {
- widget.controller
- ..selectTheSearch = true
- ..search = foundExact;
- widget.onSelection(foundExact);
- return _determineKeyEventResult(key);
- }
- } else if (key == arrowDown || key == arrowUp) {
- _highlightDropdown(widget.controller, key == arrowDown);
+ if (foundExact != null) {
+ widget.controller
+ ..selectTheSearch = true
+ ..search = foundExact;
+ widget.onSelection(foundExact);
return _determineKeyEventResult(key);
}
- }
-
- // We don't support tabs in the search input. Swallow to prevent a
- // change of focus.
- if (key == tab) {
- _determineKeyEventResult(key);
+ } else if (key == LogicalKeyboardKey.arrowDown ||
+ key == LogicalKeyboardKey.arrowUp) {
+ _highlightDropdown(
+ widget.controller,
+ key == LogicalKeyboardKey.arrowDown,
+ );
+ return _determineKeyEventResult(key);
}
}
+ // We don't support tabs in the search input. Swallow to prevent a
+ // change of focus.
+ if (key == LogicalKeyboardKey.tab) {
+ _determineKeyEventResult(key);
+ }
return KeyEventResult.ignored;
}
- KeyEventResult _determineKeyEventResult(int keyEventId) {
- final shouldIgnoreKeyEvent = widget.keyEventsToIgnore
- .any((key) => key.keyId & LogicalKeyboardKey.valueMask == keyEventId);
- return shouldIgnoreKeyEvent
+ KeyEventResult _determineKeyEventResult(LogicalKeyboardKey keyToIgnore) {
+ return widget.keyEventsToIgnore.contains(keyToIgnore)
? KeyEventResult.ignored
: KeyEventResult.handled;
}
diff --git a/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart b/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart
index 124730a..d9f352e 100644
--- a/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart
+++ b/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart
@@ -90,7 +90,10 @@
return (
item: DropdownMenuItem<String>(
value: samplingRate.value,
- child: Text(samplingRate.display),
+ child: DevToolsTooltip(
+ message: 'One sample every ${samplingRate.value} microseconds.',
+ child: Text(samplingRate.display),
+ ),
),
gaId: samplingRate.displayShort,
);
diff --git a/packages/devtools_app/lib/src/shared/utils.dart b/packages/devtools_app/lib/src/shared/utils.dart
index 853b864..456d85d 100644
--- a/packages/devtools_app/lib/src/shared/utils.dart
+++ b/packages/devtools_app/lib/src/shared/utils.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
@@ -76,8 +77,7 @@
ConnectionDescription? vmServiceConnection;
if (includeVmServiceConnection &&
serviceConnection.serviceManager.service != null) {
- final description =
- serviceConnection.serviceManager.service!.connectedUri.toString();
+ final description = serviceConnection.serviceManager.service!.wsUri!;
vmServiceConnection = ConnectionDescription(
title: 'VM Service Connection',
description: description,
@@ -227,3 +227,9 @@
}
return pathParts;
}
+
+/// An extension on [KeyEvent] to make it simpler to determine if it is a key
+/// down event.
+extension IsKeyType on KeyEvent {
+ bool get isKeyDownOrRepeat => this is KeyDownEvent || this is KeyRepeatEvent;
+}
diff --git a/packages/devtools_app/lib/src/standalone_ui/api/impl/dart_tooling_api.dart b/packages/devtools_app/lib/src/standalone_ui/api/impl/dart_tooling_api.dart
index f1e3490..b54e951 100644
--- a/packages/devtools_app/lib/src/standalone_ui/api/impl/dart_tooling_api.dart
+++ b/packages/devtools_app/lib/src/standalone_ui/api/impl/dart_tooling_api.dart
@@ -43,12 +43,20 @@
}
final postMessageController = StreamController();
postMessageController.stream.listen((message) {
- _log.info('==> $message');
+ // TODO(dantup): Using fine here doesn't work even though the
+ // `setDevToolsLoggingLevel` call above seems like it should show finest
+ // logs. For now, use info (which always logs) with a condition here
+ // and below.
+ if (_enablePostMessageVerboseLogging) {
+ _log.info('==> $message');
+ }
postMessage(message, '*');
});
final channel = StreamChannel(
onPostMessage.map((event) {
- _log.info('<== ${jsonEncode(event.data)}');
+ if (_enablePostMessageVerboseLogging) {
+ _log.info('<== ${jsonEncode(event.data)}');
+ }
return event.data;
}),
postMessageController,
diff --git a/packages/devtools_app/lib/src/standalone_ui/api/impl/vs_code_api.dart b/packages/devtools_app/lib/src/standalone_ui/api/impl/vs_code_api.dart
index 6d67d2c..4256036 100644
--- a/packages/devtools_app/lib/src/standalone_ui/api/impl/vs_code_api.dart
+++ b/packages/devtools_app/lib/src/standalone_ui/api/impl/vs_code_api.dart
@@ -60,12 +60,25 @@
}
@override
- Future<void> openDevToolsPage(String debugSessionId, String page) {
+ Future<bool> enablePlatformType(String platformType) {
+ return sendRequest(
+ VsCodeApi.jsonEnablePlatformTypeMethod,
+ {VsCodeApi.jsonPlatformTypeParameter: platformType},
+ );
+ }
+
+ @override
+ Future<void> openDevToolsPage(
+ String debugSessionId, {
+ String? page,
+ bool? forceExternal,
+ }) {
return sendRequest(
VsCodeApi.jsonOpenDevToolsPageMethod,
{
VsCodeApi.jsonDebugSessionIdParameter: debugSessionId,
- VsCodeApi.jsonOpenPageParameter: page,
+ VsCodeApi.jsonPageParameter: page,
+ VsCodeApi.jsonForceExternalParameter: forceExternal,
},
);
}
@@ -159,6 +172,7 @@
required this.flutterMode,
required this.flutterDeviceId,
required this.debuggerType,
+ required this.projectRootPath,
});
VsCodeDebugSessionImpl.fromJson(Map<String, Object?> json)
@@ -172,6 +186,8 @@
json[VsCodeDebugSession.jsonFlutterDeviceIdField] as String?,
debuggerType:
json[VsCodeDebugSession.jsonDebuggerTypeField] as String?,
+ projectRootPath:
+ json[VsCodeDebugSession.jsonProjectRootPathField] as String?,
);
@override
@@ -192,6 +208,9 @@
@override
final String? debuggerType;
+ @override
+ final String? projectRootPath;
+
Map<String, Object?> toJson() => {
VsCodeDebugSession.jsonIdField: id,
VsCodeDebugSession.jsonNameField: name,
@@ -199,6 +218,7 @@
VsCodeDebugSession.jsonFlutterModeField: flutterMode,
VsCodeDebugSession.jsonFlutterDeviceIdField: flutterDeviceId,
VsCodeDebugSession.jsonDebuggerTypeField: debuggerType,
+ VsCodeDebugSession.jsonProjectRootPathField: projectRootPath,
};
}
@@ -206,6 +226,7 @@
VsCodeDevicesEventImpl({
required this.selectedDeviceId,
required this.devices,
+ required this.unsupportedDevices,
});
VsCodeDevicesEventImpl.fromJson(Map<String, Object?> json)
@@ -216,6 +237,11 @@
.map((item) => Map<String, Object?>.from(item))
.map((map) => VsCodeDeviceImpl.fromJson(map))
.toList(),
+ unsupportedDevices:
+ (json[VsCodeDevicesEvent.jsonUnsupportedDevicesField] as List?)
+ ?.map((item) => Map<String, Object?>.from(item))
+ .map((map) => VsCodeDeviceImpl.fromJson(map))
+ .toList(),
);
@override
@@ -224,9 +250,13 @@
@override
final List<VsCodeDevice> devices;
+ @override
+ final List<VsCodeDevice>? unsupportedDevices;
+
Map<String, Object?> toJson() => {
VsCodeDevicesEvent.jsonSelectedDeviceIdField: selectedDeviceId,
VsCodeDevicesEvent.jsonDevicesField: devices,
+ VsCodeDevicesEvent.jsonUnsupportedDevicesField: unsupportedDevices,
};
}
@@ -269,6 +299,10 @@
_raw?[VsCodeCapabilities.openDevToolsPageField] == true;
@override
+ bool get openDevToolsExternally =>
+ _raw?[VsCodeCapabilities.openDevToolsExternallyField] == true;
+
+ @override
bool get hotReload => _raw?[VsCodeCapabilities.hotReloadField] == true;
@override
diff --git a/packages/devtools_app/lib/src/standalone_ui/api/vs_code_api.dart b/packages/devtools_app/lib/src/standalone_ui/api/vs_code_api.dart
index b184cff..8d29d99 100644
--- a/packages/devtools_app/lib/src/standalone_ui/api/vs_code_api.dart
+++ b/packages/devtools_app/lib/src/standalone_ui/api/vs_code_api.dart
@@ -47,12 +47,26 @@
/// Calling this API will update the device for the whole VS Code extension.
Future<bool> selectDevice(String id);
+ /// Enables the selected platform type.
+ ///
+ /// Calling this method may cause a UI prompt in the editor to ask the user to
+ /// confirm they'd like to run `flutter create` to create the required files
+ /// for the project to support this platform type.
+ ///
+ /// This method has no capability because it is only (and always) valid to
+ /// call if some `unsupportedDevices` were provided in a device event.
+ Future<bool> enablePlatformType(String platformType);
+
/// Opens a specific DevTools [page] for the debug session with ID
/// [debugSessionId].
///
/// Depending on user settings, this may open embedded (the default) or in an
/// external browser window.
- Future<void> openDevToolsPage(String debugSessionId, String page);
+ Future<void> openDevToolsPage(
+ String debugSessionId, {
+ String? page,
+ bool? forceExternal,
+ });
/// Sends a Hot Reload request to the debug session with ID [debugSessionId].
Future<void> hotReload(String debugSessionId);
@@ -69,6 +83,7 @@
static const jsonOpenDevToolsPageMethod = 'openDevToolsPage';
static const jsonHotReloadMethod = 'hotReload';
static const jsonHotRestartMethod = 'hotRestart';
+ static const jsonEnablePlatformTypeMethod = 'enablePlatformType';
static const jsonDevicesChangedEvent = 'devicesChanged';
static const jsonDebugSessionsChangedEvent = 'debugSessionsChanged';
@@ -76,8 +91,10 @@
static const jsonCommandParameter = 'command';
static const jsonArgumentsParameter = 'arguments';
static const jsonIdParameter = 'id';
- static const jsonOpenPageParameter = 'page';
+ static const jsonPageParameter = 'page';
+ static const jsonForceExternalParameter = 'forceExternal';
static const jsonDebugSessionIdParameter = 'debugSessionId';
+ static const jsonPlatformTypeParameter = 'platformType';
}
/// This class defines a device exposed by the Dart/Flutter extensions in VS
@@ -139,12 +156,23 @@
/// - WebTest (webdev test)
String? get debuggerType;
+ /// The full path to the root of this project (the folder that contains the
+ /// `pubspec.yaml`).
+ ///
+ /// This path might not always be available, for example:
+ ///
+ /// - When the version of Dart-Code is from before this field was added
+ /// - When a debug session was an attach and we didn't know the source
+ /// - When the program being run is a lose file without any pubspec
+ String? get projectRootPath;
+
static const jsonIdField = 'id';
static const jsonNameField = 'name';
static const jsonVmServiceUriField = 'vmServiceUri';
static const jsonFlutterModeField = 'flutterMode';
static const jsonFlutterDeviceIdField = 'flutterDeviceId';
static const jsonDebuggerTypeField = 'debuggerType';
+ static const jsonProjectRootPathField = 'projectRootPath';
}
/// This class defines a device event sent by the Dart/Flutter extensions in VS
@@ -163,8 +191,19 @@
/// A list of the devices that are available to select.
List<VsCodeDevice> get devices;
+ /// A list of the devices that are unavailable to select because the platform
+ /// is not enabled.
+ ///
+ /// A devices platform type can be enabled by calling the `enablePlatformType`
+ /// method.
+ ///
+ /// This field is nullable because it was not in the initial sidebar API so
+ /// older versions of VS Code might not provide it.
+ List<VsCodeDevice>? get unsupportedDevices;
+
static const jsonSelectedDeviceIdField = 'selectedDeviceId';
static const jsonDevicesField = 'devices';
+ static const jsonUnsupportedDevicesField = 'unsupportedDevices';
}
/// This class defines a debug session event sent by the Dart/Flutter extensions
@@ -199,6 +238,11 @@
/// DevTools page.
bool get openDevToolsPage;
+ /// Whether the `openDevToolsPage` method can be called without a `page`
+ /// argument and with a 'forceExternal` flag to open DevTools in a browser
+ /// regardless of user settings.
+ bool get openDevToolsExternally;
+
/// Whether the `hotReload` method is available call to hot reload a specific
/// debug session.
bool get hotReload;
@@ -210,6 +254,7 @@
static const jsonExecuteCommandField = 'executeCommand';
static const jsonSelectDeviceField = 'selectDevice';
static const openDevToolsPageField = 'openDevToolsPage';
+ static const openDevToolsExternallyField = 'openDevToolsExternally';
static const hotReloadField = 'hotReload';
static const hotRestartField = 'hotRestart';
}
diff --git a/packages/devtools_app/lib/src/standalone_ui/vs_code/debug_sessions.dart b/packages/devtools_app/lib/src/standalone_ui/vs_code/debug_sessions.dart
index 3b0656a..fab477d 100644
--- a/packages/devtools_app/lib/src/standalone_ui/vs_code/debug_sessions.dart
+++ b/packages/devtools_app/lib/src/standalone_ui/vs_code/debug_sessions.dart
@@ -107,6 +107,7 @@
isProfile: isProfile,
isRelease: isRelease,
isWeb: isWeb,
+ supportsOpenExternal: api.capabilities.openDevToolsExternally,
),
],
);
@@ -122,6 +123,7 @@
required this.isProfile,
required this.isRelease,
required this.isWeb,
+ required this.supportsOpenExternal,
});
final VsCodeApi api;
@@ -131,6 +133,7 @@
final bool isProfile;
final bool isRelease;
final bool isWeb;
+ final bool supportsOpenExternal;
@override
Widget build(BuildContext context) {
@@ -139,7 +142,7 @@
? TextDirection.rtl
: TextDirection.ltr;
- Widget devToolsButton(ScreenMetaData screen) {
+ Widget devToolsScreenButton(ScreenMetaData screen) {
final title = screen.title ?? screen.id;
String? disabledReason;
if (isRelease) {
@@ -152,33 +155,21 @@
disabledReason = 'Not available when running on the web';
}
- // Because we flipped the direction so the menu is aligned to the end, we
- // should revert the text direction back to normal for the label.
- Widget text = Directionality(
+ return DevToolsMenuItem(
+ title,
+ icon: screen.icon,
+ screenId: screen.id,
+ disabledReason: disabledReason,
+ onPressed: () {
+ ga.select(
+ gac.VsCodeFlutterSidebar.id,
+ gac.VsCodeFlutterSidebar.openDevToolsScreen(screen.id),
+ );
+ unawaited(
+ api.openDevToolsPage(session.id, page: screen.id),
+ );
+ },
textDirection: normalDirection,
- child: Text(title),
- );
-
- if (disabledReason != null) {
- text = Tooltip(
- preferBelow: false,
- message: disabledReason,
- child: text,
- );
- }
-
- return MenuItemButton(
- leadingIcon: Icon(screen.icon, size: actionsIconSize),
- onPressed: disabledReason != null
- ? null
- : () {
- ga.select(
- gac.VsCodeFlutterSidebar.id,
- gac.VsCodeFlutterSidebar.openDevToolsScreen(screen.id),
- );
- unawaited(api.openDevToolsPage(session.id, screen.id));
- },
- child: text,
);
}
@@ -190,10 +181,27 @@
style: const MenuStyle(
alignment: AlignmentDirectional.bottomStart,
),
- menuChildren: ScreenMetaData.values
- .where(_shouldIncludeScreen)
- .map(devToolsButton)
- .toList(),
+ menuChildren: [
+ ...ScreenMetaData.values
+ .where(_shouldIncludeScreen)
+ .map(devToolsScreenButton),
+ if (supportsOpenExternal)
+ DevToolsMenuItem(
+ 'Open in Browser',
+ icon: Icons.open_in_browser,
+ forceExternal: true,
+ textDirection: normalDirection,
+ onPressed: () {
+ ga.select(
+ gac.VsCodeFlutterSidebar.id,
+ gac.VsCodeFlutterSidebar.openDevToolsExternally.name,
+ );
+ unawaited(
+ api.openDevToolsPage(session.id, forceExternal: true),
+ );
+ },
+ ),
+ ],
builder: (context, controller, child) => IconButton(
onPressed: () {
if (controller.isOpen) {
@@ -228,3 +236,47 @@
};
}
}
+
+class DevToolsMenuItem extends StatelessWidget {
+ const DevToolsMenuItem(
+ this.title, {
+ super.key,
+ this.icon,
+ this.screenId,
+ this.disabledReason,
+ this.forceExternal = false,
+ required this.onPressed,
+ required this.textDirection,
+ });
+
+ final String title;
+ final IconData? icon;
+ final String? screenId;
+ final String? disabledReason;
+ final bool forceExternal;
+ final TextDirection textDirection;
+ final VoidCallback onPressed;
+
+ @override
+ Widget build(BuildContext context) {
+ final textDirection = this.textDirection;
+ Widget text = Directionality(
+ textDirection: textDirection,
+ child: Text(title),
+ );
+
+ if (disabledReason != null) {
+ text = Tooltip(
+ preferBelow: false,
+ message: disabledReason,
+ child: text,
+ );
+ }
+
+ return MenuItemButton(
+ leadingIcon: Icon(icon, size: actionsIconSize),
+ onPressed: disabledReason != null ? null : onPressed,
+ child: text,
+ );
+ }
+}
diff --git a/packages/devtools_app/lib/src/standalone_ui/vs_code/devices.dart b/packages/devtools_app/lib/src/standalone_ui/vs_code/devices.dart
index 39ec5bf..700f73a 100644
--- a/packages/devtools_app/lib/src/standalone_ui/vs_code/devices.dart
+++ b/packages/devtools_app/lib/src/standalone_ui/vs_code/devices.dart
@@ -12,15 +12,21 @@
import '../api/vs_code_api.dart';
class Devices extends StatelessWidget {
- const Devices(
- this.api,
- this.devices, {
+ Devices(
+ this.api, {
+ required this.devices,
+ required this.unsupportedDevices,
required this.selectedDeviceId,
super.key,
- });
+ }) : unsupportedDevicePlatformTypes = unsupportedDevices
+ .map((device) => device.platformType)
+ .nonNulls
+ .toSet();
final VsCodeApi api;
final List<VsCodeDevice> devices;
+ final List<VsCodeDevice> unsupportedDevices;
+ final Set<String> unsupportedDevicePlatformTypes;
final String? selectedDeviceId;
@override
@@ -45,6 +51,11 @@
device,
isSelected: device.id == selectedDeviceId,
),
+ for (final platformType in unsupportedDevicePlatformTypes)
+ _createPlatformTypeEnablerRow(
+ theme,
+ platformType,
+ ),
],
),
],
@@ -93,6 +104,36 @@
],
);
}
+
+ TableRow _createPlatformTypeEnablerRow(ThemeData theme, String platformType) {
+ final foregroundColor = theme.colorScheme.secondary;
+
+ return TableRow(
+ children: [
+ SizedBox(
+ width: double.infinity,
+ child: TextButton(
+ style: TextButton.styleFrom(
+ alignment: Alignment.centerLeft,
+ shape: const ContinuousRectangleBorder(),
+ textStyle: theme.regularTextStyle,
+ ),
+ child: Text(
+ 'Enable $platformType for this project',
+ style: theme.regularTextStyle.copyWith(color: foregroundColor),
+ ),
+ onPressed: () {
+ ga.select(
+ gac.VsCodeFlutterSidebar.id,
+ gac.VsCodeFlutterSidebar.enablePlatformType(platformType),
+ );
+ unawaited(api.enablePlatformType(platformType));
+ },
+ ),
+ ),
+ ],
+ );
+ }
}
extension on VsCodeDevice {
diff --git a/packages/devtools_app/lib/src/standalone_ui/vs_code/flutter_panel.dart b/packages/devtools_app/lib/src/standalone_ui/vs_code/flutter_panel.dart
index 4782cd0..7d480a4 100644
--- a/packages/devtools_app/lib/src/standalone_ui/vs_code/flutter_panel.dart
+++ b/packages/devtools_app/lib/src/standalone_ui/vs_code/flutter_panel.dart
@@ -88,6 +88,8 @@
stream: widget.api.devicesChanged,
builder: (context, devicesSnapshot) {
final devices = devicesSnapshot.data?.devices ?? const [];
+ final unsupportedDevices =
+ devicesSnapshot.data?.unsupportedDevices ?? const [];
final deviceMap = {for (final device in devices) device.id: device};
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -108,7 +110,8 @@
if (widget.api.capabilities.selectDevice)
Devices(
widget.api,
- devices,
+ devices: devices,
+ unsupportedDevices: unsupportedDevices,
selectedDeviceId: devicesSnapshot.data?.selectedDeviceId,
),
],
diff --git a/packages/devtools_app/pubspec.yaml b/packages/devtools_app/pubspec.yaml
index 1a4fa13..74ab38d 100644
--- a/packages/devtools_app/pubspec.yaml
+++ b/packages/devtools_app/pubspec.yaml
@@ -4,13 +4,13 @@
# Note: this version should only be updated by running tools/update_version.dart
# that updates all versions of devtools packages (devtools_app, devtools_test).
-version: 2.28.5
+version: 2.31.0
repository: https://github.com/flutter/devtools/tree/master/packages/devtools_app
environment:
- sdk: ">=3.0.0 <4.0.0"
- flutter: ">=3.0.0"
+ sdk: ">=3.3.0-91.0.dev <4.0.0"
+ flutter: ">=3.17.0-0.0.pre"
dependencies:
ansi_up: ^1.0.0
@@ -18,23 +18,18 @@
# Pin ansicolor to version before pre-NNBD version 1.1.0, should be ^1.0.5
# See https://github.com/flutter/devtools/issues/2530
ansicolor: ^2.0.0
- # TODO: https://github.com/flutter/devtools/issues/4728 - remove constraint when archive is fixed
- archive: <3.3.3
async: ^2.0.0
clock: ^1.1.1
codicon: ^1.0.0
collection: ^1.15.0
dap: ^1.1.0
dds_service_extensions: ^1.6.0
- devtools_app_shared: ^0.0.5
- devtools_extensions: ^0.0.8
- devtools_shared: ^4.0.1
- file: ^6.0.0
- file_selector: ^0.8.0
- file_selector_linux: ^0.0.2
- file_selector_macos: ^0.0.2
- file_selector_web: ^0.8.1
- file_selector_windows: ^0.0.2
+ devtools_app_shared: ^0.0.7
+ devtools_extensions: ^0.0.10
+ devtools_shared: ^6.0.1
+ dtd: ^0.0.3
+ file: ">=6.0.0 <8.0.0"
+ file_selector: ^1.0.0
flutter:
sdk: flutter
flutter_markdown: ^0.6.8
@@ -42,12 +37,11 @@
flutter_riverpod: 2.0.0-dev.9
flutter_web_plugins:
sdk: flutter
- http: ^0.13.4
- image: ^3.0.2
- intl: ">=0.16.1 <0.18.0"
+ http: ^1.1.0
+ image: ^4.1.3
+ intl: ^0.18.0
js: ^0.6.1+1
json_rpc_2: ^3.0.2
- leak_tracker: 2.0.1
logging: ^1.1.1
meta: ^1.9.1
mime: ^1.0.0
@@ -64,28 +58,30 @@
string_scanner: ^1.1.0
url_launcher: ^6.1.0
url_launcher_web: ^2.0.6
- vm_service: ^11.10.0
+ vm_service: ^13.0.0
# TODO https://github.com/dart-lang/sdk/issues/52853 - unpin this version
vm_snapshot_analysis: 0.7.2
- web: ^0.2.1-beta
+ web: ^0.4.0
web_socket_channel: ^2.1.0
# widget_icons: ^0.0.1
dev_dependencies:
args: ^2.4.2
build_runner: ^2.3.3
- devtools_test: 2.28.5
+ devtools_test: 2.31.0
fake_async: ^1.3.1
flutter_driver:
sdk: flutter
- flutter_lints: ^2.0.0
+ flutter_lints: ^2.0.3
flutter_test:
sdk: flutter
integration_test:
sdk: flutter
mockito: ^5.4.1
- webkit_inspection_protocol: ">=0.5.0 <2.0.0"
stager: ^1.0.1
+ test: ^1.21.1
+ web_benchmarks: ^1.1.0
+ webkit_inspection_protocol: ">=0.5.0 <2.0.0"
flutter:
uses-material-design: true
@@ -114,8 +110,8 @@
- packages/perfetto_ui_compiled/dist/devtools/devtools_light.css
- packages/perfetto_ui_compiled/dist/devtools/devtools_shared.css
- packages/perfetto_ui_compiled/dist/devtools/devtools_theme_handler.js
- # The version number for all the Perfetto asset paths below is updated by running the
- # ./tool/update_perfetto.sh script.
+ # The version number for all the Perfetto asset paths below is updated by running
+ # `devtools_tool update-perfetto`.
- packages/perfetto_ui_compiled/dist/v33.0-1838a06af/engine_bundle.js
- packages/perfetto_ui_compiled/dist/v33.0-1838a06af/frontend_bundle.js
- packages/perfetto_ui_compiled/dist/v33.0-1838a06af/manifest.json
diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
index cfd2c3f..bf8401e 100644
--- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
+++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
@@ -1,29 +1,35 @@
This is draft for future release notes, that are going to land on
[the Flutter website](https://docs.flutter.dev/tools/devtools/release-notes).
-# DevTools 2.28.5 release notes
+# DevTools 2.31.0 release notes
-The 2.28.5 release of the Dart and Flutter DevTools
+The 2.31.0 release of the Dart and Flutter DevTools
includes the following changes among other general improvements.
To learn more about DevTools, check out the
[DevTools overview](https://docs.flutter.dev/tools/devtools/overview).
## General updates
-TODO: Remove this section if there are not any general updates.
+* Added a new feature for deep link validation, supporting deep link web checks on Android. - [#6935](https://github.com/flutter/devtools/pull/6935)
+* Added the basic plumbing to allow connections to a Dart Tooling Daemon. - [#7009](https://github.com/flutter/devtools/pull/7009)
+* Made table text selectable [#6919](https://github.com/flutter/devtools/pull/6919)
## Inspector updates
+* When done typing in the search field, the next selection is now automatically selected - [#6677](https://github.com/flutter/devtools/pull/6677)
+* Added link to package directory documentation, from the inspect settings dialog - [6825](https://github.com/flutter/devtools/pull/6825)
+* Fix bug where widgets owned by the Flutter framework were showing up in the widget tree view -
+[6857](https://github.com/flutter/devtools/pull/6857)
* Only cache pub root directories added by the user - [6897](https://github.com/flutter/devtools/pull/6897)
* Remove Flutter pub root if it was accidently cached - [6911](https://github.com/flutter/devtools/pull/6911)
## Performance updates
-TODO: Remove this section if there are not any general updates.
+* Changed raster layer preview background to a checkerboard. - [#6827](https://github.com/flutter/devtools/pull/6827)
## CPU profiler updates
-TODO: Remove this section if there are not any general updates.
+* Added hover cards to CPU profiler sampling rate selections. - [#7010](https://github.com/flutter/devtools/pull/7010)
## Memory updates
@@ -31,7 +37,9 @@
## Debugger updates
-TODO: Remove this section if there are not any general updates.
+* Highlight `extension type` as a declaration keyword,
+ highlight the `$` in identifier interpolation as part of the interpolation,
+ and properly highlight comments within type arguments. - [6837](https://github.com/flutter/devtools/pull/6837)
## Network profiler updates
@@ -39,7 +47,7 @@
## Logging updates
-TODO: Remove this section if there are not any general updates.
+* Added scrollbar to details pane. - [#6917](https://github.com/flutter/devtools/pull/6917)
## App size tool updates
@@ -47,7 +55,7 @@
## VS Code Sidebar updates
-TODO: Remove this section if there are not any general updates.
+* Fixed an issue that prevented the VS code sidebar from loading in recent beta/master builds. - [#6984](https://github.com/flutter/devtools/pull/6984)
## DevTools Extension updates
@@ -56,4 +64,4 @@
## Full commit history
To find a complete list of changes in this release, check out the
-[DevTools git log](https://github.com/flutter/devtools/tree/v2.28.5).
+[DevTools git log](https://github.com/flutter/devtools/tree/v2.31.0).
diff --git a/packages/devtools_app/release_notes/README.md b/packages/devtools_app/release_notes/README.md
index 327e4cc..1089543 100644
--- a/packages/devtools_app/release_notes/README.md
+++ b/packages/devtools_app/release_notes/README.md
@@ -28,6 +28,8 @@
the running release notes for the current version.
- See an example [PR](https://github.com/flutter/website/pull/6791) for
an example of how to add those to the Flutter website.
+ - Make sure to update all image links with the `site_url`
+ - e.g. `{{site.url}}/tools/devtools/release-notes/images-<VERSION>/<IMAGE_FILE>`
- NOTE: When adding images, be cognizant that the images will be
rendered in a relatively small window in DevTools,
and they should be sized accordingly.
diff --git a/packages/devtools_app/release_notes/helpers/release_notes_template.md b/packages/devtools_app/release_notes/helpers/release_notes_template.md
index 5e60d94..ac76fb5 100644
--- a/packages/devtools_app/release_notes/helpers/release_notes_template.md
+++ b/packages/devtools_app/release_notes/helpers/release_notes_template.md
@@ -44,6 +44,14 @@
TODO: Remove this section if there are not any general updates.
+## VS Code Sidebar updates
+
+TODO: Remove this section if there are not any general updates.
+
+## DevTools Extension updates
+
+TODO: Remove this section if there are not any general updates.
+
## Full commit history
To find a complete list of changes in this release, check out the
diff --git a/packages/devtools_app/release_notes/images/open_file_performance_screen.png b/packages/devtools_app/release_notes/images/open_file_performance_screen.png
deleted file mode 100644
index 0f687cf..0000000
--- a/packages/devtools_app/release_notes/images/open_file_performance_screen.png
+++ /dev/null
Binary files differ
diff --git a/packages/devtools_app/release_notes/images/watch_tutorial_link.png b/packages/devtools_app/release_notes/images/watch_tutorial_link.png
deleted file mode 100644
index f0ef457..0000000
--- a/packages/devtools_app/release_notes/images/watch_tutorial_link.png
+++ /dev/null
Binary files differ
diff --git a/packages/devtools_app/test/app_size/app_size_screen_test.dart b/packages/devtools_app/test/app_size/app_size_screen_test.dart
index 855defc..60a4aab 100644
--- a/packages/devtools_app/test/app_size/app_size_screen_test.dart
+++ b/packages/devtools_app/test/app_size/app_size_screen_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_test_utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -248,7 +249,7 @@
expect(find.byType(AnalysisView), findsOneWidget);
expect(
find.text(
- 'Dart AOT snapshot: lib/src/app_size/stub_data/new_v8.dart - 7/28/2020 1:29 PM',
+ 'Dart AOT snapshot: lib/src/app_size/stub_data/new_v8.dart - 7/28/2020 1:29 PM',
),
findsOneWidget,
);
@@ -359,9 +360,10 @@
expect(find.text('No File Selected'), findsNothing);
expect(find.byType(DiffView), findsOneWidget);
+
expect(
find.text(
- 'Diffing Dart AOT snapshots: lib/src/app_size/stub_data/old_v8.dart - 7/28/2020 1:29 PM (OLD) vs (NEW) lib/src/app_size/stub_data/new_v8.dart - 7/28/2020 1:29 PM',
+ 'Diffing Dart AOT snapshots: lib/src/app_size/stub_data/old_v8.dart - 7/28/2020 1:29 PM (OLD) vs (NEW) lib/src/app_size/stub_data/new_v8.dart - 7/28/2020 1:29 PM',
),
findsOneWidget,
);
@@ -575,7 +577,7 @@
expect(deferredMenuItemFinder, findsOneWidget);
// Select the main unit.
- await tester.tap(find.text('Main').hitTestable());
+ await tester.tap(find.richText('Main').hitTestable());
await tester.pumpAndSettle();
// Verify the main unit is shown for entire app.
@@ -749,6 +751,6 @@
Finder _findMenuItemWithText<T>(String text) {
return find.descendant(
of: find.byType(DropdownMenuItem<T>),
- matching: find.text(text).first,
+ matching: find.richText(text).hitTestable(),
);
}
diff --git a/packages/devtools_app/test/app_size/code_size_attribution_test.dart b/packages/devtools_app/test/app_size/code_size_attribution_test.dart
index 23bd160..4cef396 100644
--- a/packages/devtools_app/test/app_size/code_size_attribution_test.dart
+++ b/packages/devtools_app/test/app_size/code_size_attribution_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vm_snapshot_analysis/precompiler_trace.dart';
diff --git a/packages/devtools_app/test/cpu_profiler/cpu_profile_model_test.dart b/packages/devtools_app/test/cpu_profiler/cpu_profile_model_test.dart
index 2697b93..6dc4c5b 100644
--- a/packages/devtools_app/test/cpu_profiler/cpu_profile_model_test.dart
+++ b/packages/devtools_app/test/cpu_profiler/cpu_profile_model_test.dart
@@ -28,17 +28,20 @@
);
});
- test('empty frame regression test', () {
- final cpuProfileEmptyData =
- CpuProfileData.parse(cpuProfileResponseEmptyJson);
- expect(
- cpuProfileEmptyData.profileMetaData.time!.end!.inMilliseconds,
- 47377796,
- );
- final filtered =
- CpuProfileData.filterFrom(cpuProfileEmptyData, (_) => true);
- expect(filtered.profileMetaData.time!.end!.inMilliseconds, 0);
- });
+ test(
+ 'empty frame regression test',
+ () {
+ final cpuProfileEmptyData =
+ CpuProfileData.parse(cpuProfileResponseEmptyJson);
+ expect(
+ cpuProfileEmptyData.profileMetaData.time!.end!.inMilliseconds,
+ 47377796,
+ );
+ final filtered =
+ CpuProfileData.filterFrom(cpuProfileEmptyData, (_) => true);
+ expect(filtered.profileMetaData.time!.end!.inMilliseconds, 0);
+ },
+ );
test('init from parse', () {
expect(
@@ -112,30 +115,39 @@
expect(cpuProfileData.toJson, equals(goldenCpuProfileDataJson));
});
- test('converts golden samples to golden cpu profile data', () async {
- final generatedCpuProfileData =
- await CpuProfileData.generateFromCpuSamples(
- isolateId: goldenSamplesIsolate,
- cpuSamples: CpuSamples.parse(goldenCpuSamplesJson)!,
- );
+ test(
+ 'converts golden samples to golden cpu profile data',
+ () async {
+ final generatedCpuProfileData =
+ await CpuProfileData.generateFromCpuSamples(
+ isolateId: goldenSamplesIsolate,
+ cpuSamples: CpuSamples.parse(goldenCpuSamplesJson)!,
+ );
- expect(generatedCpuProfileData.toJson, equals(goldenCpuProfileDataJson));
- });
+ expect(
+ generatedCpuProfileData.toJson,
+ equals(goldenCpuProfileDataJson),
+ );
+ },
+ );
- test('to json defaults packageUri to resolvedUrl', () {
- const id = '140357727781376-12';
- final profileData = Map<String, dynamic>.from(goldenCpuProfileDataJson);
- profileData['stackFrames'] = Map<String, Map<String, String?>>.from(
- {id: goldenCpuProfileStackFrames[id]},
- );
- profileData['stackFrames'][id]
- .remove(CpuProfileData.resolvedPackageUriKey);
+ test(
+ 'to json defaults packageUri to resolvedUrl',
+ () {
+ const id = '140357727781376-12';
- final parsedProfileData = CpuProfileData.parse(profileData);
+ final profileData = Map.of(goldenCpuProfileDataJson);
+ final stackFrame = goldenCpuProfileStackFrames[id] as Map;
+ final stackFrameData = {id: stackFrame};
+ profileData['stackFrames'] = stackFrameData;
+ stackFrameData[id]!.remove(CpuProfileData.resolvedPackageUriKey);
- final jsonPackageUri = parsedProfileData.stackFrames[id]!.packageUri;
- expect(jsonPackageUri, goldenCpuProfileStackFrames[id]!['resolvedUrl']);
- });
+ final parsedProfileData = CpuProfileData.parse(profileData);
+
+ final jsonPackageUri = parsedProfileData.stackFrames[id]!.packageUri;
+ expect(jsonPackageUri, stackFrame['resolvedUrl']);
+ },
+ );
test('generateFromCpuSamples handles duplicate resolvedUrls', () async {
const resolvedUrl = 'the/resolved/Url';
diff --git a/packages/devtools_app/test/cpu_profiler/cpu_profiler_controller_test.dart b/packages/devtools_app/test/cpu_profiler/cpu_profiler_controller_test.dart
index b87fd6e..0a45424 100644
--- a/packages/devtools_app/test/cpu_profiler/cpu_profiler_controller_test.dart
+++ b/packages/devtools_app/test/cpu_profiler/cpu_profiler_controller_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_test_utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:vm_service/vm_service.dart';
diff --git a/packages/devtools_app/test/cpu_profiler/cpu_profiler_test.dart b/packages/devtools_app/test/cpu_profiler/cpu_profiler_test.dart
index 44eaeec..1f23fc0 100644
--- a/packages/devtools_app/test/cpu_profiler/cpu_profiler_test.dart
+++ b/packages/devtools_app/test/cpu_profiler/cpu_profiler_test.dart
@@ -17,12 +17,12 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:vm_service/vm_service.dart';
-import '../test_infra/matchers/matchers.dart';
import '../test_infra/test_data/cpu_profiler/cpu_profile.dart';
import '../test_infra/utils/test_utils.dart';
@@ -92,7 +92,6 @@
expect(find.byType(CpuMethodTable), findsNothing);
expect(find.byType(CpuProfileFlameChart), findsNothing);
expect(find.byType(CpuProfileStats), findsOneWidget);
- expect(find.byType(DisplayTreeGuidelinesToggle), findsOneWidget);
expect(find.byType(UserTagDropdown), findsOneWidget);
expect(find.byType(ExpandAllButton), findsOneWidget);
expect(find.byType(CollapseAllButton), findsOneWidget);
@@ -125,7 +124,6 @@
expect(find.byKey(CpuProfiler.dataProcessingKey), findsNothing);
expect(find.byType(CpuBottomUpTable), findsOneWidget);
expect(find.byType(CpuProfileStats), findsOneWidget);
- expect(find.byType(DisplayTreeGuidelinesToggle), findsOneWidget);
expect(find.byType(UserTagDropdown), findsOneWidget);
expect(find.byType(ExpandAllButton), findsOneWidget);
expect(find.byType(CollapseAllButton), findsOneWidget);
@@ -305,7 +303,6 @@
expect(find.byType(CpuMethodTable), findsNothing);
expect(find.byType(CpuProfileFlameChart), findsNothing);
expect(find.byType(DevToolsFilterButton), findsOneWidget);
- expect(find.byType(DisplayTreeGuidelinesToggle), findsOneWidget);
expect(find.byType(UserTagDropdown), findsOneWidget);
expect(find.byType(ExpandAllButton), findsOneWidget);
expect(find.byType(CollapseAllButton), findsOneWidget);
@@ -327,7 +324,6 @@
expect(find.byType(CpuMethodTable), findsNothing);
expect(find.byType(CpuProfileFlameChart), findsNothing);
expect(find.byType(DevToolsFilterButton), findsOneWidget);
- expect(find.byType(DisplayTreeGuidelinesToggle), findsOneWidget);
expect(find.byType(UserTagDropdown), findsOneWidget);
expect(find.byType(ExpandAllButton), findsOneWidget);
expect(find.byType(CollapseAllButton), findsOneWidget);
@@ -349,7 +345,6 @@
expect(find.byType(CpuMethodTable), findsOneWidget);
expect(find.byType(CpuProfileFlameChart), findsNothing);
expect(find.byType(DevToolsFilterButton), findsOneWidget);
- expect(find.byType(DisplayTreeGuidelinesToggle), findsNothing);
expect(find.byType(UserTagDropdown), findsOneWidget);
expect(find.byType(ExpandAllButton), findsNothing);
expect(find.byType(CollapseAllButton), findsNothing);
@@ -371,7 +366,6 @@
expect(find.byType(CpuMethodTable), findsNothing);
expect(find.byType(CpuProfileFlameChart), findsOneWidget);
expect(find.byType(DevToolsFilterButton), findsOneWidget);
- expect(find.byType(DisplayTreeGuidelinesToggle), findsNothing);
expect(find.byType(UserTagDropdown), findsOneWidget);
expect(find.byType(ExpandAllButton), findsNothing);
expect(find.byType(CollapseAllButton), findsNothing);
@@ -422,89 +416,6 @@
},
);
- testWidgetsWithWindowSize(
- 'can enable and disable guidelines',
- windowSize,
- (WidgetTester tester) async {
- cpuProfiler = CpuProfiler(
- data: cpuProfileData,
- controller: controller,
- );
- await tester.pumpWidget(wrap(cpuProfiler));
- await tester.tap(find.text('Call Tree'));
- await tester.pumpAndSettle();
-
- expect(cpuProfileData.cpuProfileRoot.isExpanded, isFalse);
- await tester.tap(find.byType(ExpandAllButton));
- await tester.pumpAndSettle();
-
- expect(cpuProfiler.callTreeRoots.first.isExpanded, isTrue);
- expect(preferences.cpuProfiler.displayTreeGuidelines.value, false);
- await expectLater(
- find.byType(CpuProfiler),
- matchesDevToolsGolden(
- '../test_infra/goldens/cpu_profiler/call_tree_no_guidelines.png',
- ),
- );
- await tester.tap(find.byType(DisplayTreeGuidelinesToggle));
- await tester.pumpAndSettle();
-
- expect(preferences.cpuProfiler.displayTreeGuidelines.value, true);
- await expectLater(
- find.byType(CpuProfiler),
- matchesDevToolsGolden(
- '../test_infra/goldens/cpu_profiler/call_tree_guidelines.png',
- ),
- );
- await tester.tap(find.byType(DisplayTreeGuidelinesToggle));
- await tester.pumpAndSettle();
-
- expect(preferences.cpuProfiler.displayTreeGuidelines.value, false);
- await expectLater(
- find.byType(CpuProfiler),
- matchesDevToolsGolden(
- '../test_infra/goldens/cpu_profiler/call_tree_no_guidelines.png',
- ),
- );
-
- await tester.tap(find.text('Bottom Up'));
- await tester.pumpAndSettle();
- await tester.tap(find.byType(ExpandAllButton));
- for (final root in cpuProfiler.bottomUpRoots) {
- expect(root.isExpanded, isTrue);
- }
- await tester.pumpAndSettle();
-
- expect(preferences.cpuProfiler.displayTreeGuidelines.value, false);
- await expectLater(
- find.byType(CpuProfiler),
- matchesDevToolsGolden(
- '../test_infra/goldens/cpu_profiler/bottom_up_no_guidelines.png',
- ),
- );
- await tester.tap(find.byType(DisplayTreeGuidelinesToggle));
- await tester.pumpAndSettle();
-
- expect(preferences.cpuProfiler.displayTreeGuidelines.value, true);
- await expectLater(
- find.byType(CpuProfiler),
- matchesDevToolsGolden(
- '../test_infra/goldens/cpu_profiler/bottom_up_guidelines.png',
- ),
- );
- await tester.tap(find.byType(DisplayTreeGuidelinesToggle));
- await tester.pumpAndSettle();
-
- expect(preferences.cpuProfiler.displayTreeGuidelines.value, false);
- await expectLater(
- find.byType(CpuProfiler),
- matchesDevToolsGolden(
- '../test_infra/goldens/cpu_profiler/bottom_up_no_guidelines.png',
- ),
- );
- },
- );
-
group('UserTag filters', () {
late ProfilerScreenController controller;
diff --git a/packages/devtools_app/test/cpu_profiler/method_table/method_table_test.dart b/packages/devtools_app/test/cpu_profiler/method_table/method_table_test.dart
index 6a385c2..bb9b056 100644
--- a/packages/devtools_app/test/cpu_profiler/method_table/method_table_test.dart
+++ b/packages/devtools_app/test/cpu_profiler/method_table/method_table_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -30,6 +31,7 @@
createMockServiceConnectionWithDefaults(),
);
setGlobal(IdeTheme, IdeTheme());
+ setGlobal(OfflineModeController, OfflineModeController());
final mockScriptManager = MockScriptManager();
when(mockScriptManager.sortedScripts).thenReturn(
ValueNotifier<List<ScriptRef>>([]),
diff --git a/packages/devtools_app/test/cpu_profiler/profiler_screen_test.dart b/packages/devtools_app/test/cpu_profiler/profiler_screen_test.dart
index 120df12..b5c0cd8 100644
--- a/packages/devtools_app/test/cpu_profiler/profiler_screen_test.dart
+++ b/packages/devtools_app/test/cpu_profiler/profiler_screen_test.dart
@@ -7,8 +7,10 @@
import 'package:devtools_app/src/screens/profiler/panes/controls/cpu_profiler_controls.dart';
import 'package:devtools_app/src/screens/profiler/profiler_status.dart';
import 'package:devtools_app/src/service/vm_flags.dart' as vm_flags;
+import 'package:devtools_app/src/shared/file_import.dart';
import 'package:devtools_app/src/shared/ui/vm_flag_widgets.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -38,6 +40,7 @@
expect(find.text('Profile app start up'), findsOneWidget);
}
expect(find.byType(CpuSamplingRateDropdown), findsOneWidget);
+ expect(find.byType(OpenSaveButtonGroup), findsOneWidget);
expect(
find.byType(ProfileRecordingInstructions),
findsOneWidget,
@@ -144,6 +147,7 @@
expect(find.byType(StopRecordingButton), findsNothing);
expect(find.byType(ClearButton), findsNothing);
expect(find.byType(CpuSamplingRateDropdown), findsNothing);
+ expect(find.byType(OpenSaveButtonGroup), findsNothing);
await tester.runAsync(() async {
await tester.tap(find.text('Enable profiler'));
diff --git a/packages/devtools_app/test/debugger/debugger_codeview_statistics_test.dart b/packages/devtools_app/test/debugger/debugger_codeview_statistics_test.dart
index 2db696e..084e191 100644
--- a/packages/devtools_app/test/debugger/debugger_codeview_statistics_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_codeview_statistics_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_codeview_test.dart b/packages/devtools_app/test/debugger/debugger_codeview_test.dart
index f743a15..3b54f17 100644
--- a/packages/devtools_app/test/debugger/debugger_codeview_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_codeview_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -170,7 +171,7 @@
),
);
// Prefetch File Uris
- await serviceConnection.resolvedUriManager.fetchFileUris(
+ await serviceConnection.serviceManager.resolvedUriManager.fetchFileUris(
serviceConnection
.serviceManager.isolateManager.selectedIsolate.value!.id!,
[mockScriptRef.uri!],
diff --git a/packages/devtools_app/test/debugger/debugger_console_test.dart b/packages/devtools_app/test/debugger/debugger_console_test.dart
index abbaf89..262a96f 100644
--- a/packages/devtools_app/test/debugger/debugger_console_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_console_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_evaluation_test.dart b/packages/devtools_app/test/debugger/debugger_evaluation_test.dart
index 87e5d15..125d987 100644
--- a/packages/devtools_app/test/debugger/debugger_evaluation_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_evaluation_test.dart
@@ -8,7 +8,7 @@
import 'package:devtools_app/src/shared/console/eval/auto_complete.dart';
import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import '../test_infra/flutter_test_driver.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_floating_test.dart b/packages/devtools_app/test/debugger/debugger_floating_test.dart
index 8c3801c..ceb06ea 100644
--- a/packages/devtools_app/test/debugger/debugger_floating_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_floating_test.dart
@@ -6,6 +6,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_screen_breakpoints_test.dart b/packages/devtools_app/test/debugger/debugger_screen_breakpoints_test.dart
index ab39e21..c849a02 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_breakpoints_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_breakpoints_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_screen_call_stack_test.dart b/packages/devtools_app/test/debugger/debugger_screen_call_stack_test.dart
index 3aa1458..22ee58d 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_call_stack_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_call_stack_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_screen_dap_variables_test.dart b/packages/devtools_app/test/debugger/debugger_screen_dap_variables_test.dart
index 65686da..275e9aa 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_dap_variables_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_dap_variables_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_screen_explorer_visibility_test.dart b/packages/devtools_app/test/debugger/debugger_screen_explorer_visibility_test.dart
index 85f7747..c407322 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_explorer_visibility_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_explorer_visibility_test.dart
@@ -6,6 +6,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_screen_paused_test.dart b/packages/devtools_app/test/debugger/debugger_screen_paused_test.dart
index 993d17d..39c231c 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_paused_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_paused_test.dart
@@ -2,19 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'package:codicon/codicon.dart';
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/screens/debugger/codeview.dart';
-import 'package:devtools_app/src/screens/debugger/controls.dart';
import 'package:devtools_app/src/screens/debugger/debugger_model.dart';
import 'package:devtools_app/src/shared/diagnostics/primitives/source_location.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:vm_service/vm_service.dart';
+import '../test_infra/utils/debugger_utils.dart';
import '../test_infra/utils/test_utils.dart';
void main() {
@@ -88,20 +90,20 @@
await tester.pump();
expect(
- findDebuggerButtonWithTitle('Pause'),
+ findDebuggerButtonWithIcon(Codicons.debugPause),
findsOneWidget,
);
- final pause = getWidgetFromFinder<DebuggerButton>(
- findDebuggerButtonWithTitle('Pause'),
+ final pause = getWidgetFromFinder<OutlinedButton>(
+ findDebuggerButtonWithIcon(Codicons.debugPause),
);
expect(pause.onPressed, isNull);
expect(
- findDebuggerButtonWithTitle('Resume'),
+ findDebuggerButtonWithIcon(Codicons.debugContinue),
findsOneWidget,
);
- final resume = getWidgetFromFinder<DebuggerButton>(
- findDebuggerButtonWithTitle('Resume'),
+ final resume = getWidgetFromFinder<OutlinedButton>(
+ findDebuggerButtonWithIcon(Codicons.debugContinue),
);
expect(resume.onPressed, isNotNull);
},
@@ -183,10 +185,6 @@
position: const SourcePosition(line: _stackFrame2Line, column: 1),
);
-Finder findDebuggerButtonWithTitle(String title) => find.byWidgetPredicate(
- (Widget widget) => widget is DebuggerButton && widget.title == title,
- );
-
Finder findStackFrameWithText(String text) => find.byWidgetPredicate(
(Widget widget) =>
widget is RichText && widget.text.toPlainText().contains(text),
diff --git a/packages/devtools_app/test/debugger/debugger_screen_test.dart b/packages/devtools_app/test/debugger/debugger_screen_test.dart
index 1cdeee7..aaddc39 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_test.dart
@@ -2,20 +2,23 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'package:codicon/codicon.dart';
import 'package:collection/collection.dart';
import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_app/src/screens/debugger/controls.dart';
import 'package:devtools_app/src/screens/debugger/debugger_model.dart';
import 'package:devtools_app/src/shared/console/widgets/console_pane.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:vm_service/vm_service.dart';
import '../test_infra/test_data/debugger/vm_service_object_tree.dart';
+import '../test_infra/utils/debugger_utils.dart';
+import '../test_infra/utils/test_utils.dart';
import '../test_infra/utils/tree_utils.dart';
void main() {
@@ -114,15 +117,6 @@
},
);
- WidgetPredicate createDebuggerButtonPredicate(String title) {
- return (Widget widget) {
- if (widget is DebuggerButton && widget.title == title) {
- return true;
- }
- return false;
- };
- }
-
testWidgetsWithWindowSize(
'debugger controls running',
windowSize,
@@ -135,21 +129,21 @@
);
expect(
- find.byWidgetPredicate(createDebuggerButtonPredicate('Pause')),
+ findDebuggerButtonWithIcon(Codicons.debugPause),
findsOneWidget,
);
- final pause = _getWidgetFromFinder(
- find.byWidgetPredicate(createDebuggerButtonPredicate('Pause')),
- ) as DebuggerButton;
+ final pause = getWidgetFromFinder<OutlinedButton>(
+ findDebuggerButtonWithIcon(Codicons.debugPause),
+ );
expect(pause.onPressed, isNotNull);
expect(
- find.byWidgetPredicate(createDebuggerButtonPredicate('Resume')),
+ findDebuggerButtonWithIcon(Codicons.debugContinue),
findsOneWidget,
);
- final resume = _getWidgetFromFinder(
- find.byWidgetPredicate(createDebuggerButtonPredicate('Resume')),
- ) as DebuggerButton;
+ final resume = getWidgetFromFinder<OutlinedButton>(
+ findDebuggerButtonWithIcon(Codicons.debugContinue),
+ );
expect(resume.onPressed, isNull);
},
);
@@ -252,7 +246,3 @@
},
);
}
-
-Widget _getWidgetFromFinder(Finder finder) {
- return finder.first.evaluate().first.widget;
-}
diff --git a/packages/devtools_app/test/debugger/debugger_screen_variables_test.dart b/packages/devtools_app/test/debugger/debugger_screen_variables_test.dart
index 12b9cbc..f1b178b 100644
--- a/packages/devtools_app/test/debugger/debugger_screen_variables_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_screen_variables_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/debugger_scripts_test.dart b/packages/devtools_app/test/debugger/debugger_scripts_test.dart
index caf3b58..845517c 100644
--- a/packages/devtools_app/test/debugger/debugger_scripts_test.dart
+++ b/packages/devtools_app/test/debugger/debugger_scripts_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/eval_field_test.dart b/packages/devtools_app/test/debugger/eval_field_test.dart
index 0e5e460..ba71218 100644
--- a/packages/devtools_app/test/debugger/eval_field_test.dart
+++ b/packages/devtools_app/test/debugger/eval_field_test.dart
@@ -103,6 +103,9 @@
await tester.enterText(objects.textField, 'someValue.');
await tester.pumpAndSettle();
await tester.sendKeyEvent(LogicalKeyboardKey.arrowDown);
+
+ expect(objects.searchTextEditingController.suggestionText, 'bar');
+
await tester.sendKeyEvent(LogicalKeyboardKey.arrowUp);
expect(objects.searchTextEditingController.text, 'someValue.');
diff --git a/packages/devtools_app/test/debugger/file_search_test.dart b/packages/devtools_app/test/debugger/file_search_test.dart
index 9d4236b..d4e055c 100644
--- a/packages/devtools_app/test/debugger/file_search_test.dart
+++ b/packages/devtools_app/test/debugger/file_search_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/program_explorer_test.dart b/packages/devtools_app/test/debugger/program_explorer_test.dart
index a69d32a..ad22a61 100644
--- a/packages/devtools_app/test/debugger/program_explorer_test.dart
+++ b/packages/devtools_app/test/debugger/program_explorer_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/debugger/variables_test.dart b/packages/devtools_app/test/debugger/variables_test.dart
index cf979bf..716c709 100644
--- a/packages/devtools_app/test/debugger/variables_test.dart
+++ b/packages/devtools_app/test/debugger/variables_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
diff --git a/packages/devtools_app/test/deep_link_vlidation/deep_links_screen_test.dart b/packages/devtools_app/test/deep_link_vlidation/deep_links_screen_test.dart
new file mode 100644
index 0000000..aa60755
--- /dev/null
+++ b/packages/devtools_app/test/deep_link_vlidation/deep_links_screen_test.dart
@@ -0,0 +1,496 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app/devtools_app.dart';
+import 'package:devtools_app/src/screens/deep_link_validation/deep_link_list_view.dart';
+import 'package:devtools_app/src/screens/deep_link_validation/deep_links_model.dart';
+import 'package:devtools_app/src/screens/deep_link_validation/validation_details_view.dart';
+import 'package:devtools_app/src/shared/directory_picker.dart';
+import 'package:devtools_app_shared/ui.dart';
+import 'package:devtools_app_shared/utils.dart';
+import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+final linkDatas = [
+ LinkData(
+ domain: 'www.domain1.com',
+ path: '/',
+ os: [PlatformOS.android],
+ ),
+ LinkData(
+ domain: 'www.domain2.com',
+ path: '/',
+ os: [PlatformOS.ios],
+ ),
+ LinkData(
+ domain: 'www.google.com',
+ path: '/',
+ os: [PlatformOS.android, PlatformOS.ios],
+ ),
+ LinkData(
+ domain: 'www.google.com',
+ path: '/home',
+ os: [PlatformOS.android, PlatformOS.ios],
+ ),
+];
+
+final domainErrorlinkData = LinkData(
+ domain: 'www.google.com',
+ path: '/',
+ os: [PlatformOS.android, PlatformOS.ios],
+ domainErrors: [DomainError.existence],
+);
+
+void main() {
+ setUp(() {
+ setGlobal(ServiceConnectionManager, FakeServiceConnectionManager());
+ setGlobal(
+ DevToolsEnvironmentParameters,
+ ExternalDevToolsEnvironmentParameters(),
+ );
+ setGlobal(PreferencesController, PreferencesController());
+ setGlobal(IdeTheme, IdeTheme());
+ setGlobal(NotificationService, NotificationService());
+ });
+
+ late DeepLinksScreen screen;
+ late DeepLinksController deepLinksController;
+
+ const windowSize = Size(2560.0, 1338.0);
+
+ Future<void> pumpDeepLinkScreen(
+ WidgetTester tester, {
+ required DeepLinksController controller,
+ }) async {
+ await tester.pumpWidget(
+ wrapWithControllers(
+ const DeepLinkPage(),
+ deepLink: controller,
+ ),
+ );
+ deferredLoadingSupportEnabled = true;
+ await tester.pump(const Duration(seconds: 1));
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ }
+
+ group('DeepLinkScreen', () {
+ setUp(() {
+ screen = DeepLinksScreen();
+ deepLinksController = DeepLinksTestController();
+ });
+
+ testWidgets('builds its tab', (WidgetTester tester) async {
+ await tester.pumpWidget(
+ wrapWithControllers(
+ Builder(builder: screen.buildTab),
+ deepLink: deepLinksController,
+ ),
+ );
+ expect(find.text('Deep Links'), findsOneWidget);
+ });
+
+ testWidgetsWithWindowSize(
+ 'builds initial content',
+ windowSize,
+ (WidgetTester tester) async {
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ expect(find.byType(DirectoryPicker), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'builds deeplink list page with no links',
+ windowSize,
+ (WidgetTester tester) async {
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ expect(find.byType(DeepLinkListView), findsOneWidget);
+ expect(find.byType(CenteredCircularProgressIndicator), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'builds deeplink list page with links',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ deepLinksController.allLinkDatasNotifier.value = linkDatas;
+
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ expect(find.byType(DeepLinkListView), findsOneWidget);
+ expect(find.byType(ValidationDetailView), findsNothing);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'builds deeplink list page with split screen',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ deepLinksController.allLinkDatasNotifier.value = linkDatas;
+
+ deepLinksController.displayOptionsNotifier.value =
+ DisplayOptions(showSplitScreen: true);
+ deepLinksController.selectedLink.value = linkDatas.first;
+
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ expect(find.byType(DeepLinkListView), findsOneWidget);
+ expect(find.byType(ValidationDetailView), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'shows notification cards when there are errors',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ deepLinksController.allLinkDatasNotifier.value = [domainErrorlinkData];
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ expect(find.byType(DeepLinkListView), findsOneWidget);
+ expect(find.byType(NotificationCard), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'taps the action button in notification cards to go to the split screen',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ deepLinksController.allLinkDatasNotifier.value = [domainErrorlinkData];
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ await tester.tap(find.text('Fix domain'));
+ await tester.pumpAndSettle();
+
+ expect(find.byType(DeepLinkPage), findsOneWidget);
+ expect(find.byType(DeepLinkListView), findsOneWidget);
+ expect(find.byType(NotificationCard), findsNothing);
+ expect(find.byType(ValidationDetailView), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'search links',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ deepLinksController.allLinkDatasNotifier.value = linkDatas;
+
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.text('www.domain1.com'), findsOneWidget);
+ expect(find.text('www.domain2.com'), findsOneWidget);
+ expect(find.text('www.google.com'), findsOneWidget);
+
+ deepLinksController.searchContent = 'goo';
+
+ await tester.pumpAndSettle();
+
+ expect(find.text('www.domain1.com'), findsNothing);
+ expect(find.text('www.domain2.com'), findsNothing);
+ expect(find.text('www.google.com'), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'filter links with os',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ final linkDatas = [
+ LinkData(
+ domain: 'www.domain1.com',
+ path: '/',
+ os: [PlatformOS.android],
+ ),
+ LinkData(
+ domain: 'www.domain2.com',
+ path: '/',
+ os: [PlatformOS.ios],
+ ),
+ LinkData(
+ domain: 'www.google.com',
+ path: '/',
+ os: [PlatformOS.android, PlatformOS.ios],
+ ),
+ ];
+
+ deepLinksController.allLinkDatasNotifier.value = linkDatas;
+
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.text('www.domain1.com'), findsOneWidget);
+ expect(find.text('www.domain2.com'), findsOneWidget);
+ expect(find.text('www.google.com'), findsOneWidget);
+
+ // Only show Android links.
+ deepLinksController.displayOptionsNotifier.value = DisplayOptions(
+ filters: {
+ FilterOption.http,
+ FilterOption.custom,
+ FilterOption.android,
+ FilterOption.noIssue,
+ FilterOption.failedDomainCheck,
+ FilterOption.failedPathCheck,
+ },
+ );
+
+ await tester.pumpAndSettle();
+
+ expect(find.text('www.domain1.com'), findsOneWidget);
+ expect(find.text('www.domain2.com'), findsNothing);
+ expect(find.text('www.google.com'), findsOneWidget);
+
+ // Only show iOS links.
+ deepLinksController.displayOptionsNotifier.value = DisplayOptions(
+ filters: {
+ FilterOption.http,
+ FilterOption.custom,
+ FilterOption.ios,
+ FilterOption.noIssue,
+ FilterOption.failedDomainCheck,
+ FilterOption.failedPathCheck,
+ },
+ );
+
+ await tester.pumpAndSettle();
+
+ expect(find.text('www.domain1.com'), findsNothing);
+ expect(find.text('www.domain2.com'), findsOneWidget);
+ expect(find.text('www.google.com'), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'filter links with validation result',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+
+ final linkDatas = [
+ LinkData(
+ domain: 'www.domain1.com',
+ path: '/',
+ os: [PlatformOS.android],
+ domainErrors: [DomainError.existence],
+ ),
+ LinkData(
+ domain: 'www.domain2.com',
+ path: '/path',
+ os: [PlatformOS.ios],
+ pathError: true,
+ ),
+ LinkData(
+ domain: 'www.google.com',
+ path: '/',
+ os: [PlatformOS.android, PlatformOS.ios],
+ ),
+ ];
+
+ deepLinksController.allLinkDatasNotifier.value = linkDatas;
+
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.text('www.domain1.com'), findsOneWidget);
+ expect(find.text('www.domain2.com'), findsOneWidget);
+ expect(find.text('www.google.com'), findsOneWidget);
+
+ // Only show links with domain error.
+ deepLinksController.updateDisplayOptions(
+ removedFilter: FilterOption.noIssue,
+ );
+
+ await tester.pumpAndSettle();
+
+ expect(find.text('www.domain1.com'), findsOneWidget);
+ expect(find.text('www.domain2.com'), findsNothing);
+ expect(find.text('www.google.com'), findsNothing);
+
+ // Only show links with no issue.
+ deepLinksController.updateDisplayOptions(
+ removedFilter: FilterOption.failedDomainCheck,
+ );
+ deepLinksController.updateDisplayOptions(
+ addedFilter: FilterOption.noIssue,
+ );
+
+ await tester.pumpAndSettle();
+
+ expect(find.text('www.domain1.com'), findsNothing);
+ expect(find.text('www.domain2.com'), findsOneWidget);
+ expect(find.text('www.google.com'), findsOneWidget);
+ },
+ );
+
+ testWidgetsWithWindowSize(
+ 'sort links',
+ windowSize,
+ (WidgetTester tester) async {
+ final deepLinksController = DeepLinksTestController();
+ final linkDatas = [
+ LinkData(
+ domain: 'www.domain1.com',
+ path: '/',
+ os: [PlatformOS.android],
+ ),
+ LinkData(
+ domain: 'www.domain2.com',
+ path: '/path',
+ os: [PlatformOS.ios],
+ domainErrors: [DomainError.existence],
+ ),
+ LinkData(
+ domain: 'www.google.com',
+ path: '/',
+ os: [PlatformOS.android, PlatformOS.ios],
+ ),
+ ];
+
+ deepLinksController.selectedProject.value =
+ FlutterProject(path: '/abc', androidVariants: ['debug', 'release']);
+ deepLinksController.allLinkDatasNotifier.value = linkDatas;
+
+ await pumpDeepLinkScreen(
+ tester,
+ controller: deepLinksController,
+ );
+
+ expect(find.text('www.domain1.com'), findsOneWidget);
+ expect(find.text('www.domain2.com'), findsOneWidget);
+ expect(find.text('www.google.com'), findsOneWidget);
+
+ // Sort with a-z.
+ deepLinksController.updateDisplayOptions(
+ domainSortingOption: SortingOption.aToZ,
+ );
+ await tester.pumpAndSettle();
+
+ var widgetACenter = tester.getCenter(find.text('www.domain1.com'));
+ var widgetBCenter = tester.getCenter(find.text('www.domain2.com'));
+ var widgetCCenter = tester.getCenter(find.text('www.google.com'));
+
+ expect(widgetACenter.dy < widgetBCenter.dy, true);
+ expect(widgetBCenter.dy < widgetCCenter.dy, true);
+
+ // Sort with z-a.
+ deepLinksController.updateDisplayOptions(
+ domainSortingOption: SortingOption.zToA,
+ );
+ await tester.pumpAndSettle();
+
+ widgetACenter = tester.getCenter(find.text('www.domain1.com'));
+ widgetBCenter = tester.getCenter(find.text('www.domain2.com'));
+ widgetCCenter = tester.getCenter(find.text('www.google.com'));
+
+ expect(widgetCCenter.dy < widgetBCenter.dy, true);
+ expect(widgetBCenter.dy < widgetACenter.dy, true);
+
+ // Sort with error on top.
+ deepLinksController.updateDisplayOptions(
+ domainSortingOption: SortingOption.errorOnTop,
+ );
+ await tester.pumpAndSettle();
+
+ widgetACenter = tester.getCenter(find.text('www.domain1.com'));
+ widgetBCenter = tester.getCenter(find.text('www.domain2.com'));
+ widgetCCenter = tester.getCenter(find.text('www.google.com'));
+
+ expect(widgetBCenter.dy < widgetACenter.dy, true);
+ expect(widgetBCenter.dy < widgetCCenter.dy, true);
+ },
+ );
+ });
+}
+
+class DeepLinksTestController extends DeepLinksController {
+ @override
+ Future<void> validateLinks() async {
+ if (allLinkDatasNotifier.value == null) return;
+ displayLinkDatasNotifier.value =
+ getFilterredLinks(allLinkDatasNotifier.value!);
+
+ displayOptionsNotifier.value = displayOptionsNotifier.value.copyWith(
+ domainErrorCount: getLinkDatasByDomain
+ .where((element) => element.domainErrors.isNotEmpty)
+ .length,
+ pathErrorCount:
+ getLinkDatasByPath.where((element) => element.pathError).length,
+ );
+ }
+
+ @override
+ void selectLink(LinkData linkdata) async {
+ selectedLink.value = linkdata;
+ if (linkdata.domainErrors.isNotEmpty) {
+ generatedAssetLinksForSelectedLink.value = 'fake generated content';
+ }
+ }
+}
diff --git a/packages/devtools_app/test/extensions/extension_analytics_test.dart b/packages/devtools_app/test/extensions/extension_analytics_test.dart
new file mode 100644
index 0000000..c7c37c8
--- /dev/null
+++ b/packages/devtools_app/test/extensions/extension_analytics_test.dart
@@ -0,0 +1,90 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app/src/shared/analytics/constants.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../test_infra/test_data/extensions.dart';
+
+void main() {
+ group('DevTools extension analytics', () {
+ test(
+ 'uses extension name for public package',
+ () {
+ final public = providerExtension;
+ expect(public.isPubliclyHosted, true);
+ expect(public.name, 'provider');
+ expect(public.analyticsSafeName, 'provider');
+ expect(
+ DevToolsExtensionEvents.extensionScreenName(public),
+ 'extension-provider',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionFeedback(public),
+ 'extensionFeedback-provider',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionEnableManual(public),
+ 'extensionEnable-manual-provider',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionEnablePrompt(public),
+ 'extensionEnable-prompt-provider',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionDisableManual(public),
+ 'extensionDisable-manual-provider',
+ );
+
+ expect(
+ DevToolsExtensionEvents.extensionDisablePrompt(public),
+ 'extensionDisable-prompt-provider',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionForceReload(public),
+ 'extensionForceReload-provider',
+ );
+ },
+ );
+
+ test(
+ 'does not use extension name for private package',
+ () {
+ final private = fooExtension;
+ expect(private.isPubliclyHosted, false);
+ expect(private.name, 'foo');
+ expect(private.analyticsSafeName, 'private');
+ expect(
+ DevToolsExtensionEvents.extensionScreenName(private),
+ 'extension-private',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionFeedback(private),
+ 'extensionFeedback-private',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionEnableManual(private),
+ 'extensionEnable-manual-private',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionEnablePrompt(private),
+ 'extensionEnable-prompt-private',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionDisableManual(private),
+ 'extensionDisable-manual-private',
+ );
+
+ expect(
+ DevToolsExtensionEvents.extensionDisablePrompt(private),
+ 'extensionDisable-prompt-private',
+ );
+ expect(
+ DevToolsExtensionEvents.extensionForceReload(private),
+ 'extensionForceReload-private',
+ );
+ },
+ );
+ });
+}
diff --git a/packages/devtools_app/test/extensions/extension_screen_test.dart b/packages/devtools_app/test/extensions/extension_screen_test.dart
index 7bfed31..b188ff8 100644
--- a/packages/devtools_app/test/extensions/extension_screen_test.dart
+++ b/packages/devtools_app/test/extensions/extension_screen_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_extensions.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -38,15 +39,15 @@
testWidgets('builds its tab', (WidgetTester tester) async {
await tester.pumpWidget(wrap(Builder(builder: fooScreen.buildTab)));
- expect(find.text('Foo'), findsOneWidget);
+ expect(find.text('foo'), findsOneWidget);
expect(find.byIcon(fooExtension.icon), findsOneWidget);
await tester.pumpWidget(wrap(Builder(builder: barScreen.buildTab)));
- expect(find.text('Bar'), findsOneWidget);
+ expect(find.text('bar'), findsOneWidget);
expect(find.byIcon(barExtension.icon), findsOneWidget);
await tester.pumpWidget(wrap(Builder(builder: providerScreen.buildTab)));
- expect(find.text('Provider'), findsOneWidget);
+ expect(find.text('provider'), findsOneWidget);
expect(find.byIcon(providerExtension.icon), findsOneWidget);
});
diff --git a/packages/devtools_app/test/extensions/extension_settings_test.dart b/packages/devtools_app/test/extensions/extension_settings_test.dart
index babfd73..9289039 100644
--- a/packages/devtools_app/test/extensions/extension_settings_test.dart
+++ b/packages/devtools_app/test/extensions/extension_settings_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_extensions.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/inspector/diagnostics_test.dart b/packages/devtools_app/test/inspector/diagnostics_test.dart
index b66f594..7f04c26 100644
--- a/packages/devtools_app/test/inspector/diagnostics_test.dart
+++ b/packages/devtools_app/test/inspector/diagnostics_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/inspector/inspector_error_navigator_test.dart b/packages/devtools_app/test/inspector/inspector_error_navigator_test.dart
index 6c366ea..420f0d5 100644
--- a/packages/devtools_app/test/inspector/inspector_error_navigator_test.dart
+++ b/packages/devtools_app/test/inspector/inspector_error_navigator_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/inspector/inspector_integration_test.dart b/packages/devtools_app/test/inspector/inspector_integration_test.dart
index bfea308..7666981 100644
--- a/packages/devtools_app/test/inspector/inspector_integration_test.dart
+++ b/packages/devtools_app/test/inspector/inspector_integration_test.dart
@@ -3,7 +3,7 @@
// found in the LICENSE file.
import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/inspector/inspector_screen_test.dart b/packages/devtools_app/test/inspector/inspector_screen_test.dart
index dc5c070..286c07c 100644
--- a/packages/devtools_app/test/inspector/inspector_screen_test.dart
+++ b/packages/devtools_app/test/inspector/inspector_screen_test.dart
@@ -14,6 +14,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart' hide Fake;
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/inspector/inspector_service_test.dart b/packages/devtools_app/test/inspector/inspector_service_test.dart
index 7faccfd..dc9fba0 100644
--- a/packages/devtools_app/test/inspector/inspector_service_test.dart
+++ b/packages/devtools_app/test/inspector/inspector_service_test.dart
@@ -10,7 +10,7 @@
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import '../test_infra/flutter_test_driver.dart' show FlutterRunConfiguration;
@@ -361,7 +361,8 @@
});
});
- test('widget tree', () async {
+ // TODO(bartekpacia): Fix this test, https://github.com/flutter/devtools/issues/6902
+ test('widget tree', skip: true, () async {
await env.setupEnvironment();
final group = inspectorService!.createObjectGroup('test-group');
final RemoteDiagnosticsNode root =
diff --git a/packages/devtools_app/test/inspector/inspector_tree_test.dart b/packages/devtools_app/test/inspector/inspector_tree_test.dart
index 8500eb4..5f54b10 100644
--- a/packages/devtools_app/test/inspector/inspector_tree_test.dart
+++ b/packages/devtools_app/test/inspector/inspector_tree_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart' hide Fake;
import 'package:mockito/mockito.dart';
@@ -74,8 +75,6 @@
(WidgetTester tester) async {
final treeController = InspectorTreeController()
..config = InspectorTreeConfig(
- summaryTree: false,
- treeType: FlutterTreeType.widget,
onNodeAdded: (_, __) {},
onClientActiveChange: (_) {},
);
diff --git a/packages/devtools_app/test/inspector/layout_explorer/flex/flex_test.dart b/packages/devtools_app/test/inspector/layout_explorer/flex/flex_test.dart
index 55b48a0..461a1f7 100644
--- a/packages/devtools_app/test/inspector/layout_explorer/flex/flex_test.dart
+++ b/packages/devtools_app/test/inspector/layout_explorer/flex/flex_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app/src/shared/console/eval/inspector_tree.dart';
import 'package:devtools_app/src/shared/diagnostics/diagnostics_node.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/inspector/utils/inspector_tree.dart b/packages/devtools_app/test/inspector/utils/inspector_tree.dart
index 5870c50..c637f58 100644
--- a/packages/devtools_app/test/inspector/utils/inspector_tree.dart
+++ b/packages/devtools_app/test/inspector/utils/inspector_tree.dart
@@ -3,7 +3,7 @@
// found in the LICENSE file.
import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -14,8 +14,6 @@
) {
final controller = InspectorTreeController()
..config = InspectorTreeConfig(
- summaryTree: false,
- treeType: FlutterTreeType.widget,
onNodeAdded: (_, __) {},
onClientActiveChange: (_) {},
);
diff --git a/packages/devtools_app/test/legacy_integration_tests/debugger.dart b/packages/devtools_app/test/legacy_integration_tests/debugger.dart
index eb5cb40..6b2c02e 100644
--- a/packages/devtools_app/test/legacy_integration_tests/debugger.dart
+++ b/packages/devtools_app/test/legacy_integration_tests/debugger.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-library debugger;
-
import 'package:devtools_shared/devtools_test_utils.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/logging/logging_controller_test.dart b/packages/devtools_app/test/logging/logging_controller_test.dart
index c48dc2b..68f84ca 100644
--- a/packages/devtools_app/test/logging/logging_controller_test.dart
+++ b/packages/devtools_app/test/logging/logging_controller_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app/src/shared/primitives/message_bus.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
diff --git a/packages/devtools_app/test/logging/logging_screen_data_test.dart b/packages/devtools_app/test/logging/logging_screen_data_test.dart
index e0c2a70..684252f 100644
--- a/packages/devtools_app/test/logging/logging_screen_data_test.dart
+++ b/packages/devtools_app/test/logging/logging_screen_data_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/logging/logging_screen_test.dart b/packages/devtools_app/test/logging/logging_screen_test.dart
index 0df3f90..ab4203a 100644
--- a/packages/devtools_app/test/logging/logging_screen_test.dart
+++ b/packages/devtools_app/test/logging/logging_screen_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/memory/chart/chart_test.dart b/packages/devtools_app/test/memory/chart/chart_test.dart
index 3e10033..ede78bb 100644
--- a/packages/devtools_app/test/memory/chart/chart_test.dart
+++ b/packages/devtools_app/test/memory/chart/chart_test.dart
@@ -12,6 +12,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_shared.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -29,7 +30,7 @@
group(
'Chart Timeseries',
() {
- late MemoryJson memoryJson;
+ late MemoryJson<HeapSample> memoryJson;
bool memoryJasonInitialized = false;
void loadData() {
@@ -574,7 +575,7 @@
} else if (event.isEventAllocationAccumulator) {
final monitorType = event.allocationAccumulator;
final rawData = Data(datum.timestamp, visibleMonitorEvent);
- if (monitorType.isEmpty) continue;
+ if (monitorType!.isEmpty) continue;
if (monitorType.isStart) {
addDataToTrace(controller, monitorTraceIndex, rawData);
} else if (monitorType.isReset) {
diff --git a/packages/devtools_app/test/memory/control/settings_dialog_test.dart b/packages/devtools_app/test/memory/control/settings_dialog_test.dart
index 3b6b9a9..0cba584 100644
--- a/packages/devtools_app/test/memory/control/settings_dialog_test.dart
+++ b/packages/devtools_app/test/memory/control/settings_dialog_test.dart
@@ -7,7 +7,7 @@
import 'package:devtools_app/src/shared/common_widgets.dart';
import 'package:devtools_app/src/shared/globals.dart';
import 'package:devtools_app_shared/src/ui/dialogs.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/memory/diff/controller/heap_diff_test.dart b/packages/devtools_app/test/memory/diff/controller/heap_diff_test.dart
index f2c49f4..6c1fe50 100644
--- a/packages/devtools_app/test/memory/diff/controller/heap_diff_test.dart
+++ b/packages/devtools_app/test/memory/diff/controller/heap_diff_test.dart
@@ -89,7 +89,6 @@
final heap = AdaptedHeapData(
objects,
rootIndex: 0,
- isolateId: '',
);
await calculateHeap(heap);
@@ -125,6 +124,5 @@
),
],
rootIndex: 0,
- isolateId: '',
),
);
diff --git a/packages/devtools_app/test/memory/diff/widgets/class_filter_test.dart b/packages/devtools_app/test/memory/diff/widgets/class_filter_test.dart
index 45baa45..b7a4498 100644
--- a/packages/devtools_app/test/memory/diff/widgets/class_filter_test.dart
+++ b/packages/devtools_app/test/memory/diff/widgets/class_filter_test.dart
@@ -6,7 +6,7 @@
import 'package:devtools_app/src/screens/memory/panes/diff/diff_pane.dart';
import 'package:devtools_app/src/screens/memory/shared/heap/class_filter.dart';
import 'package:devtools_app/src/screens/memory/shared/widgets/class_filter.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/memory/diff/widgets/diff_pane_test.dart b/packages/devtools_app/test/memory/diff/widgets/diff_pane_test.dart
index a95cfee..29cca07 100644
--- a/packages/devtools_app/test/memory/diff/widgets/diff_pane_test.dart
+++ b/packages/devtools_app/test/memory/diff/widgets/diff_pane_test.dart
@@ -6,7 +6,7 @@
import 'package:devtools_app/src/screens/memory/framework/connected/memory_tabs.dart';
import 'package:devtools_app/src/screens/memory/panes/diff/diff_pane.dart';
import 'package:devtools_app/src/screens/memory/panes/diff/widgets/snapshot_list.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -59,7 +59,7 @@
);
// Record three snapshots.
- for (var i in Iterable.generate(3)) {
+ for (var i in Iterable<int>.generate(3)) {
await tester.tap(find.byIcon(Icons.fiber_manual_record).first);
await tester.pumpAndSettle();
expect(find.text('selected-isolate-${i + 1}'), findsOneWidget);
diff --git a/packages/devtools_app/test/memory/memory_screen_test.dart b/packages/devtools_app/test/memory/memory_screen_test.dart
index 682c803..b8900f9 100644
--- a/packages/devtools_app/test/memory/memory_screen_test.dart
+++ b/packages/devtools_app/test/memory/memory_screen_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_shared.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -104,8 +105,14 @@
expect(find.byType(MemoryVMChart), findsOneWidget);
- expect(controller.memoryTimeline.liveData.isEmpty, isTrue);
- expect(controller.memoryTimeline.offlineData.isEmpty, isTrue);
+ expect(
+ controller.controllers.memoryTimeline.liveData.isEmpty,
+ isTrue,
+ );
+ expect(
+ controller.controllers.memoryTimeline.offlineData.isEmpty,
+ isTrue,
+ );
},
);
});
diff --git a/packages/devtools_app/test/memory/memory_service_test.dart b/packages/devtools_app/test/memory/memory_service_test.dart
index 0da5a8d..01fedd8 100644
--- a/packages/devtools_app/test/memory/memory_service_test.dart
+++ b/packages/devtools_app/test/memory/memory_service_test.dart
@@ -50,7 +50,7 @@
// VM Service connection has stopped - unexpected.
fail('VM Service connection stoped unexpectantly.');
} else {
- validateHeapInfo(memoryController.memoryTimeline);
+ validateHeapInfo(memoryController.controllers.memoryTimeline);
}
});
diff --git a/packages/devtools_app/test/memory/profile/allocation_profile_table_view_test.dart b/packages/devtools_app/test/memory/profile/allocation_profile_table_view_test.dart
index 2a0089d..0072be9 100644
--- a/packages/devtools_app/test/memory/profile/allocation_profile_table_view_test.dart
+++ b/packages/devtools_app/test/memory/profile/allocation_profile_table_view_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app/src/shared/primitives/utils.dart';
import 'package:devtools_app/src/shared/table/table.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/memory/shared/heap/heap_analyzer_test.dart b/packages/devtools_app/test/memory/shared/heap/heap_analyzer_test.dart
index b5f32f6..eb843fa 100644
--- a/packages/devtools_app/test/memory/shared/heap/heap_analyzer_test.dart
+++ b/packages/devtools_app/test/memory/shared/heap/heap_analyzer_test.dart
@@ -256,7 +256,7 @@
}
AdaptedHeapData _heapData(List<AdaptedHeapObject> objects) {
- return AdaptedHeapData(objects, isolateId: '', rootIndex: 0);
+ return AdaptedHeapData(objects, rootIndex: 0);
}
/// For convenience of testing each heap object has code equal to the
diff --git a/packages/devtools_app/test/memory/shared/heap/heap_test.dart b/packages/devtools_app/test/memory/shared/heap/heap_test.dart
index acb4e4b..fb13f76 100644
--- a/packages/devtools_app/test/memory/shared/heap/heap_test.dart
+++ b/packages/devtools_app/test/memory/shared/heap/heap_test.dart
@@ -39,7 +39,6 @@
_createOneByteObject(3, [], _classA),
],
rootIndex: 0,
- isolateId: '',
),
expectedClassARetainedSize: 3,
),
@@ -53,7 +52,6 @@
_createOneByteObject(3, [], _classA),
],
rootIndex: 0,
- isolateId: '',
),
expectedClassARetainedSize: 3,
),
@@ -67,7 +65,6 @@
_createOneByteObject(3, [1, 2], _classA),
],
rootIndex: 0,
- isolateId: '',
),
expectedClassARetainedSize: 3,
),
@@ -82,7 +79,6 @@
_createOneByteObject(4, [], _classB),
],
rootIndex: 0,
- isolateId: '',
),
expectedClassARetainedSize: 4,
),
diff --git a/packages/devtools_app/test/memory/tracing/tracing_view_test.dart b/packages/devtools_app/test/memory/tracing/tracing_view_test.dart
index f90ab06..ce57d9d 100644
--- a/packages/devtools_app/test/memory/tracing/tracing_view_test.dart
+++ b/packages/devtools_app/test/memory/tracing/tracing_view_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app/src/screens/memory/panes/tracing/tracing_tree.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/network/network_controller_test.dart b/packages/devtools_app/test/network/network_controller_test.dart
index 3ee820d..c543f5a 100644
--- a/packages/devtools_app/test/network/network_controller_test.dart
+++ b/packages/devtools_app/test/network/network_controller_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app/src/shared/http/http_request_data.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vm_service/vm_service.dart';
diff --git a/packages/devtools_app/test/network/network_profiler_test.dart b/packages/devtools_app/test/network/network_profiler_test.dart
index 8fd31b0..efb6b09 100644
--- a/packages/devtools_app/test/network/network_profiler_test.dart
+++ b/packages/devtools_app/test/network/network_profiler_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vm_service/vm_service.dart';
diff --git a/packages/devtools_app/test/network/network_request_inspector_test.dart b/packages/devtools_app/test/network/network_request_inspector_test.dart
index 2150d41..f3d7a0e 100644
--- a/packages/devtools_app/test/network/network_request_inspector_test.dart
+++ b/packages/devtools_app/test/network/network_request_inspector_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vm_service/vm_service.dart';
diff --git a/packages/devtools_app/test/network/network_screen_test.dart b/packages/devtools_app/test/network/network_screen_test.dart
index cd60bdd..88f64e3 100644
--- a/packages/devtools_app/test/network/network_screen_test.dart
+++ b/packages/devtools_app/test/network/network_screen_test.dart
@@ -6,6 +6,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/network/network_table_test.dart b/packages/devtools_app/test/network/network_table_test.dart
index c0c02d4..6c6e88d 100644
--- a/packages/devtools_app/test/network/network_table_test.dart
+++ b/packages/devtools_app/test/network/network_table_test.dart
@@ -44,7 +44,6 @@
httpProfile.requests,
0,
currentRequests: currentRequests,
- invalidRequests: [],
);
requests = networkRequests.requests;
});
diff --git a/packages/devtools_app/test/performance/controls/enhance_tracing_test.dart b/packages/devtools_app/test/performance/controls/enhance_tracing_test.dart
index afe9963..fb46f6a 100644
--- a/packages/devtools_app/test/performance/controls/enhance_tracing_test.dart
+++ b/packages/devtools_app/test/performance/controls/enhance_tracing_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/performance/controls/performance_controls_test.dart b/packages/devtools_app/test/performance/controls/performance_controls_test.dart
index f7fa2b5..2ef5514 100644
--- a/packages/devtools_app/test/performance/controls/performance_controls_test.dart
+++ b/packages/devtools_app/test/performance/controls/performance_controls_test.dart
@@ -4,9 +4,11 @@
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/screens/performance/panes/controls/performance_controls.dart';
+import 'package:devtools_app/src/shared/file_import.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -76,7 +78,7 @@
expect(find.text('Performance Overlay'), findsOneWidget);
expect(find.text('Enhance Tracing'), findsOneWidget);
expect(find.text('More debugging options'), findsOneWidget);
- expect(find.byIcon(Icons.file_download), findsOneWidget);
+ expect(find.byType(OpenSaveButtonGroup), findsOneWidget);
expect(find.byIcon(Icons.settings_outlined), findsOneWidget);
},
);
@@ -99,7 +101,7 @@
expect(find.text('Performance Overlay'), findsNothing);
expect(find.text('Enhance Tracing'), findsNothing);
expect(find.text('More debugging options'), findsNothing);
- expect(find.byIcon(Icons.file_download), findsOneWidget);
+ expect(find.byType(OpenSaveButtonGroup), findsOneWidget);
expect(find.byIcon(Icons.settings_outlined), findsOneWidget);
},
);
@@ -118,7 +120,7 @@
expect(find.text('Performance Overlay'), findsNothing);
expect(find.text('Enhance Tracing'), findsNothing);
expect(find.text('More debugging options'), findsNothing);
- expect(find.byIcon(Icons.file_download), findsNothing);
+ expect(find.byType(OpenSaveButtonGroup), findsNothing);
expect(find.byIcon(Icons.settings_outlined), findsNothing);
offlineController.exitOfflineMode();
},
diff --git a/packages/devtools_app/test/performance/flutter_frames/flutter_frames_chart_test.dart b/packages/devtools_app/test/performance/flutter_frames/flutter_frames_chart_test.dart
index a47b835..ba9e4e8 100644
--- a/packages/devtools_app/test/performance/flutter_frames/flutter_frames_chart_test.dart
+++ b/packages/devtools_app/test/performance/flutter_frames/flutter_frames_chart_test.dart
@@ -4,11 +4,11 @@
@TestOn('vm')
import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_app/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart';
import 'package:devtools_app/src/shared/ui/colors.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -20,12 +20,14 @@
Future<void> pumpChart(
WidgetTester tester, {
bool offlineMode = false,
+ bool impellerEnabled = false,
}) async {
await tester.pumpWidget(
wrap(
FlutterFramesChart(
framesController,
offlineMode: offlineMode,
+ impellerEnabled: impellerEnabled,
),
),
);
@@ -70,6 +72,7 @@
expect(find.byType(Legend), findsOneWidget);
expect(find.byType(AverageFPS), findsOneWidget);
expect(find.byType(FlutterFramesChartItem), findsNothing);
+ expect(find.textContaining('Engine: Skia'), findsOneWidget);
});
testWidgets(
@@ -86,6 +89,7 @@
expect(find.byType(Legend), findsNothing);
expect(find.byType(AverageFPS), findsNothing);
expect(find.byType(FlutterFramesChartItem), findsNothing);
+ expect(find.textContaining('Engine:'), findsNothing);
},
);
@@ -100,6 +104,7 @@
expect(find.byType(Legend), findsOneWidget);
expect(find.byType(AverageFPS), findsOneWidget);
expect(find.byType(FlutterFramesChartItem), findsNWidgets(2));
+ expect(find.textContaining('Engine: Skia'), findsOneWidget);
});
testWidgets('builds in offline mode', (WidgetTester tester) async {
@@ -110,6 +115,18 @@
expect(find.byType(PauseResumeButtonGroup), findsNothing);
expect(find.byType(Legend), findsOneWidget);
expect(find.byType(AverageFPS), findsOneWidget);
+ expect(find.textContaining('Engine: Skia'), findsOneWidget);
+ });
+
+ testWidgets('builds with impeller enabled', (WidgetTester tester) async {
+ framesController.clearData();
+ await pumpChart(tester, impellerEnabled: true);
+ expect(find.byType(FramesChart), findsOneWidget);
+ expect(find.byType(FramesChartControls), findsOneWidget);
+ expect(find.byType(PauseResumeButtonGroup), findsOneWidget);
+ expect(find.byType(Legend), findsOneWidget);
+ expect(find.byType(AverageFPS), findsOneWidget);
+ expect(find.textContaining('Engine: Impeller'), findsOneWidget);
});
group('starting scroll position', () {
diff --git a/packages/devtools_app/test/performance/frame_analysis/frame_analysis_test.dart b/packages/devtools_app/test/performance/frame_analysis/frame_analysis_test.dart
index 4905189..96638f3 100644
--- a/packages/devtools_app/test/performance/frame_analysis/frame_analysis_test.dart
+++ b/packages/devtools_app/test/performance/frame_analysis/frame_analysis_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -69,7 +70,7 @@
await pumpAnalysisView(tester, null);
expect(
- find.text('No analysis data available for this frame.'),
+ find.textContaining('No analysis data available for this frame.'),
findsOneWidget,
);
expect(find.byType(FrameHints), findsNothing);
@@ -84,7 +85,7 @@
await pumpAnalysisView(tester, frameAnalysis);
expect(
- find.text('No analysis data available for this frame.'),
+ find.textContaining('No analysis data available for this frame.'),
findsNothing,
);
expect(find.byType(FrameHints), findsOneWidget);
diff --git a/packages/devtools_app/test/performance/frame_analysis/frame_hints_test.dart b/packages/devtools_app/test/performance/frame_analysis/frame_hints_test.dart
index 4f43c0c..1638135 100644
--- a/packages/devtools_app/test/performance/frame_analysis/frame_hints_test.dart
+++ b/packages/devtools_app/test/performance/frame_analysis/frame_hints_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -145,8 +146,8 @@
expect(
find.richTextContaining(
- 'Build was the longest UI phase in this frame. Since "Track Widget '
- 'Builds" was enabled while this frame was drawn, you should be able'
+ 'Build was the longest UI phase in this frame. Since "Track widget '
+ 'builds" was enabled while this frame was drawn, you should be able'
' to see timeline events for each widget built.',
),
findsOneWidget,
@@ -167,7 +168,7 @@
expect(
find.richTextContaining(
'Build was the longest UI phase in this frame. Consider enabling '
- '"Track Widget Builds" from the ',
+ '"Track widget builds" from the ',
),
findsOneWidget,
);
@@ -196,7 +197,7 @@
expect(
find.richTextContaining(
'Layout was the longest UI phase in this frame. Since "Track '
- 'Layouts" was enabled while this frame was drawn, you should be '
+ 'layouts" was enabled while this frame was drawn, you should be '
'able to see timeline events for each render object laid out.',
),
findsOneWidget,
@@ -218,7 +219,7 @@
expect(
find.richTextContaining(
'Layout was the longest UI phase in this frame. Consider enabling '
- '"Track Layouts" from the ',
+ '"Track layouts" from the ',
),
findsOneWidget,
);
@@ -247,7 +248,7 @@
expect(
find.richTextContaining(
'Paint was the longest UI phase in this frame. Since "Track '
- 'Paints" was enabled while this frame was drawn, you should be '
+ 'paints" was enabled while this frame was drawn, you should be '
'able to see timeline events for each render object painted.',
),
findsOneWidget,
@@ -269,7 +270,7 @@
expect(
find.richTextContaining(
'Paint was the longest UI phase in this frame. Consider enabling '
- '"Track Paints" from the ',
+ '"Track paints" from the ',
),
findsOneWidget,
);
diff --git a/packages/devtools_app/test/performance/performance_model_test.dart b/packages/devtools_app/test/performance/performance_model_test.dart
index e892a35..8fdf5af 100644
--- a/packages/devtools_app/test/performance/performance_model_test.dart
+++ b/packages/devtools_app/test/performance/performance_model_test.dart
@@ -215,10 +215,9 @@
expect(offlineData.selectedFrameId, equals(1));
expect(offlineData.selectedEvent, isA<OfflineTimelineEvent>());
- final expectedFirstTraceJson =
- Map<String, dynamic>.from(vsyncEvent.beginTraceEventJson);
- expectedFirstTraceJson[TraceEvent.argsKey]
- .addAll({TraceEvent.typeKey: TimelineEventType.ui});
+ final expectedFirstTraceJson = Map.of(vsyncEvent.beginTraceEventJson);
+ (expectedFirstTraceJson[TraceEvent.argsKey] as Map)
+ .addAll(<String, dynamic>{TraceEvent.typeKey: TimelineEventType.ui});
expectedFirstTraceJson.addAll(
{TraceEvent.durationKey: vsyncEvent.time.duration.inMicroseconds},
);
diff --git a/packages/devtools_app/test/performance/performance_screen_test.dart b/packages/devtools_app/test/performance/performance_screen_test.dart
index 730f3d5..e4ea064 100644
--- a/packages/devtools_app/test/performance/performance_screen_test.dart
+++ b/packages/devtools_app/test/performance/performance_screen_test.dart
@@ -7,7 +7,6 @@
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/screens/performance/panes/controls/performance_controls.dart';
-import 'package:devtools_app/src/screens/performance/panes/flutter_frames/flutter_frames_chart.dart';
import 'package:devtools_app/src/screens/performance/panes/timeline_events/legacy/event_details.dart';
import 'package:devtools_app/src/screens/performance/panes/timeline_events/legacy/timeline_flame_chart.dart';
import 'package:devtools_app/src/screens/performance/tabbed_performance_view.dart';
@@ -17,6 +16,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_test_utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -341,12 +341,16 @@
findsOneWidget,
);
expect(
- find.richTextContaining('Track Widget Builds'),
+ find.richTextContaining('Track widget builds'),
findsOneWidget,
);
- expect(find.richTextContaining('Track Layouts'), findsOneWidget);
- expect(find.richTextContaining('Track Paints'), findsOneWidget);
- expect(find.byType(MoreInfoLink), findsNWidgets(3));
+ expect(find.richTextContaining('Track layouts'), findsOneWidget);
+ expect(find.richTextContaining('Track paints'), findsOneWidget);
+ expect(
+ find.richTextContaining('Track platform channels'),
+ findsOneWidget,
+ );
+ expect(find.byType(MoreInfoLink), findsNWidgets(4));
});
},
);
diff --git a/packages/devtools_app/test/performance/raster_stats/raster_stats_test.dart b/packages/devtools_app/test/performance/raster_stats/raster_stats_test.dart
index 19138c1..9c63920 100644
--- a/packages/devtools_app/test/performance/raster_stats/raster_stats_test.dart
+++ b/packages/devtools_app/test/performance/raster_stats/raster_stats_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:vm_service/vm_service.dart';
diff --git a/packages/devtools_app/test/performance/tabbed_performance_view_test.dart b/packages/devtools_app/test/performance/tabbed_performance_view_test.dart
index eb99aea..e47992e 100644
--- a/packages/devtools_app/test/performance/tabbed_performance_view_test.dart
+++ b/packages/devtools_app/test/performance/tabbed_performance_view_test.dart
@@ -13,6 +13,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/performance/timeline_events/legacy/event_details_test.dart b/packages/devtools_app/test/performance/timeline_events/legacy/event_details_test.dart
index b8809c0..dd6823d 100644
--- a/packages/devtools_app/test/performance/timeline_events/legacy/event_details_test.dart
+++ b/packages/devtools_app/test/performance/timeline_events/legacy/event_details_test.dart
@@ -6,7 +6,7 @@
import 'package:devtools_app/src/screens/performance/panes/timeline_events/legacy/event_details.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/performance/timeline_events/legacy/legacy_events_controller_test.dart b/packages/devtools_app/test/performance/timeline_events/legacy/legacy_events_controller_test.dart
index 67932a3..9d66962 100644
--- a/packages/devtools_app/test/performance/timeline_events/legacy/legacy_events_controller_test.dart
+++ b/packages/devtools_app/test/performance/timeline_events/legacy/legacy_events_controller_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:vm_service/vm_service.dart' hide TimelineEvent;
diff --git a/packages/devtools_app/test/performance/timeline_events/legacy/timeline_flame_chart_test.dart b/packages/devtools_app/test/performance/timeline_events/legacy/timeline_flame_chart_test.dart
index 44a13a7..54bfb0b 100644
--- a/packages/devtools_app/test/performance/timeline_events/legacy/timeline_flame_chart_test.dart
+++ b/packages/devtools_app/test/performance/timeline_events/legacy/timeline_flame_chart_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/primitives/utils_test.dart b/packages/devtools_app/test/primitives/utils_test.dart
index 9f65648..8c64b5e 100644
--- a/packages/devtools_app/test/primitives/utils_test.dart
+++ b/packages/devtools_app/test/primitives/utils_test.dart
@@ -8,7 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_test_utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -677,26 +677,6 @@
);
});
- test('getServiceUriFromQueryString', () {
- expect(
- getServiceUriFromQueryString(
- 'http://localhost:123/?uri=http://localhost:456',
- ).toString(),
- equals('http://localhost:456'),
- );
- expect(
- getServiceUriFromQueryString('http://localhost:123/?port=789')
- .toString(),
- equals('ws://localhost:789/ws'),
- );
- expect(
- getServiceUriFromQueryString(
- 'http://localhost:123/?port=789&token=kjy78',
- ).toString(),
- equals('ws://localhost:789/kjy78/ws'),
- );
- });
-
group('safeDivide', () {
test('divides a finite result correctly', () {
expect(safeDivide(2.0, 1.0), 2.0);
@@ -1479,7 +1459,7 @@
final double? from;
@override
- bool operator ==(Object? other) {
+ bool operator ==(Object other) {
if (other.runtimeType != runtimeType) {
return false;
}
diff --git a/packages/devtools_app/test/provider/provider_screen_integration_test.dart b/packages/devtools_app/test/provider/provider_screen_integration_test.dart
deleted file mode 100644
index f3215f5..0000000
--- a/packages/devtools_app/test/provider/provider_screen_integration_test.dart
+++ /dev/null
@@ -1,926 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(https://github.com/flutter/devtools/issues/6215): remove this test.
-
-@TestOn('vm')
-import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_app/src/screens/provider/instance_viewer/instance_details.dart';
-import 'package:devtools_app/src/screens/provider/instance_viewer/instance_providers.dart';
-import 'package:devtools_app/src/screens/provider/provider_nodes.dart';
-import 'package:devtools_app_shared/service.dart';
-import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:vm_service/vm_service.dart' hide SentinelException;
-
-import '../test_infra/flutter_test_driver.dart' show FlutterRunConfiguration;
-import '../test_infra/flutter_test_driver.dart';
-import '../test_infra/flutter_test_environment.dart';
-import '../test_infra/flutter_test_storage.dart';
-
-void main() {
- final FlutterTestEnvironment env = FlutterTestEnvironment(
- const FlutterRunConfiguration(withDebugger: true),
- testAppDirectory: 'test/test_infra/fixtures/provider_app',
- );
-
- late EvalOnDartLibrary evalOnDartLibrary;
- late Disposable isAlive;
-
- setUp(() async {
- setGlobal(Storage, FlutterTestStorage());
- setGlobal(EvalService, MockEvalService());
-
- await env.setupEnvironment(
- config: const FlutterRunConfiguration(withDebugger: true),
- );
- await serviceConnection.serviceManager.service!.allFuturesCompleted;
-
- isAlive = Disposable();
- evalOnDartLibrary = EvalOnDartLibrary(
- 'package:provider_app/main.dart',
- env.service,
- serviceManager: serviceConnection.serviceManager,
- );
- });
-
- tearDown(() async {
- isAlive.dispose();
- evalOnDartLibrary.dispose();
- await env.tearDownEnvironment(force: true);
- });
-
- test(
- 'refreshes everything on hot-reload',
- () async {
- final container = ProviderContainer();
- addTearDown(container.dispose);
-
- final providersSub = container.listen(
- sortedProviderNodesProvider.future,
- (prev, next) {},
- );
- final countSub = container.listen(
- instanceProvider(
- const InstancePath.fromProviderId('0').pathForChild(
- const PathToProperty.objectProperty(
- name: '_count',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'Counter',
- ),
- ),
- ).future,
- (prev, next) {},
- );
-
- await evalOnDartLibrary.asyncEval(
- 'await tester.tap(find.byKey(Key("add"))).then((_) => tester.pump())',
- isAlive: isAlive,
- );
- await evalOnDartLibrary.asyncEval(
- 'await tester.tap(find.byKey(Key("increment"))).then((_) => tester.pump())',
- isAlive: isAlive,
- );
-
- expect(
- await providersSub.read(),
- [
- isA<ProviderNode>().having(
- (e) => e.type,
- 'type',
- 'ChangeNotifierProvider<Counter>',
- ),
- isA<ProviderNode>().having((e) => e.type, 'type', 'Provider<int>'),
- ],
- );
- expect(
- await countSub.read(),
- isA<NumInstance>().having((e) => e.displayString, 'displayString', '1'),
- );
-
- await env.flutter!.hotRestart();
-
- final evalOnDartLibrary2 = EvalOnDartLibrary(
- 'package:provider_app/main.dart',
- env.service,
- serviceManager: serviceConnection.serviceManager,
- );
- addTearDown(evalOnDartLibrary2.dispose);
-
- expect(await providersSub.read(), [
- isA<ProviderNode>()
- .having((e) => e.type, 'type', 'ChangeNotifierProvider<Counter>'),
- ]);
- expect(
- await countSub.read(),
- isA<NumInstance>().having((e) => e.displayString, 'displayString', '0'),
- );
- // TODO(rrousselGit) unskip test once hot-restart works properly (https://github.com/flutter/devtools/issues/3007)
- },
- timeout: const Timeout.factor(12),
- skip: true,
- );
-
- group(
- 'Provider controllers',
- () {
- test(
- 'can mutate private properties from mixins',
- () async {
- final container = ProviderContainer();
- addTearDown(container.dispose);
-
- final sub = container.listen(
- instanceProvider(
- const InstancePath.fromProviderId('0').pathForChild(
- const PathToProperty.objectProperty(
- name: '_privateMixinProperty',
- ownerUri: 'package:provider_app/mixin.dart',
- ownerName: 'Mixin',
- ),
- ),
- ).future,
- (prev, next) {},
- );
-
- var instance = await sub.read();
-
- expect(
- instance,
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '0'),
- );
-
- await instance.setter!('42');
-
- // read the instance again since it should have changed
- instance = await sub.read();
-
- expect(
- instance,
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '42'),
- );
- },
- timeout: const Timeout.factor(8),
- );
-
- test(
- 'sortedProviderNodesProvider',
- () async {
- final container = ProviderContainer();
- addTearDown(container.dispose);
-
- final sub = container.listen(
- sortedProviderNodesProvider.future,
- (prev, next) {},
- );
-
- await evalOnDartLibrary.asyncEval(
- 'await tester.tap(find.byKey(Key("add"))).then((_) => tester.pump())',
- isAlive: isAlive,
- );
-
- await expectLater(
- sub.read(),
- completion([
- isA<ProviderNode>().having((e) => e.id, 'id', '0').having(
- (e) => e.type,
- 'type',
- 'ChangeNotifierProvider<Counter>',
- ),
- isA<ProviderNode>()
- .having((e) => e.id, 'id', '1')
- .having((e) => e.type, 'type', 'Provider<int>'),
- ]),
- );
- },
- timeout: const Timeout.factor(12),
- );
-
- group('rawInstanceProvider', () {
- test(
- 'deeply parse complex objects',
- () async {
- final container = ProviderContainer();
- addTearDown(container.dispose);
-
- final counterFuture = container
- .listen(
- instanceProvider(const InstancePath.fromProviderId('0'))
- .future,
- (prev, next) {},
- )
- .read();
-
- const complexPath = InstancePath.fromProviderId(
- '0',
- pathToProperty: [
- PathToProperty.objectProperty(
- name: 'complex',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'Counter',
- ),
- ],
- );
-
- final complexFuture = await container
- .listen(
- instanceProvider(complexPath).future,
- (prev, next) {},
- )
- .read();
-
- final complexPropertiesFuture =
- Future.wait<MapEntry<String, Object>>([
- for (final field in (complexFuture as ObjectInstance).fields)
- container
- .listen(
- instanceProvider(
- complexPath.pathForChild(
- PathToProperty.objectProperty(
- name: field.name,
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'ComplexObject',
- ),
- ),
- ).future,
- (prev, next) {},
- )
- .read()
- .then(
- (value) => MapEntry(field.name, value),
- onError: (Object err) => MapEntry(field.name, err),
- ),
- ]);
-
- final mapPath = complexPath.pathForChild(
- const PathToProperty.objectProperty(
- name: 'map',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'ComplexObject',
- ),
- );
-
- final mapKeys = await container
- .listen(
- instanceProvider(mapPath).future,
- (prev, next) {},
- )
- .read()
- .then((value) => value as MapInstance);
-
- final mapItems = Future.wait([
- for (final key in mapKeys.keys)
- container
- .listen(
- instanceProvider(
- mapPath.pathForChild(
- PathToProperty.mapKey(ref: key.instanceRefId),
- ),
- ).future,
- (prev, next) {},
- )
- .read(),
- ]);
-
- final listPath = complexPath.pathForChild(
- const PathToProperty.objectProperty(
- name: 'list',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'ComplexObject',
- ),
- );
-
- final listItems = Future.wait([
- for (var i = 0; i < 6; i++)
- container
- .listen(
- instanceProvider(
- listPath.pathForChild(PathToProperty.listIndex(i)),
- ).future,
- (prev, next) {},
- )
- .read(),
- ]);
-
- // Counter.complex.list[4].value
- final list4valueFuture = container
- .listen(
- instanceProvider(
- listPath
- .pathForChild(const PathToProperty.listIndex(4))
- .pathForChild(
- const PathToProperty.objectProperty(
- name: 'value',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: '_SubObject',
- ),
- ),
- ).future,
- (prev, next) {},
- )
- .read();
-
- // Counter.complex.plainInstance.value
- final plainInstanceValueFuture = container
- .listen(
- instanceProvider(
- complexPath
- .pathForChild(
- const PathToProperty.objectProperty(
- name: 'plainInstance',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'ComplexObject',
- ),
- )
- .pathForChild(
- const PathToProperty.objectProperty(
- name: 'value',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: '_SubObject',
- ),
- ),
- ).future,
- (prev, next) {},
- )
- .read();
-
- await expectLater(
- counterFuture,
- completion(
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', 'Counter')
- .having(
- (e) => e.fields,
- 'fields',
- containsAllInOrder([
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'complex')
- .having((e) => e.ownerName, 'ownerName', 'Counter')
- .having((e) => e.isFinal, 'isFinal', true)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.ownerName, 'ownerName', 'Counter')
- .having((e) => e.name, 'name', '_count')
- .having(
- (e) => e.ownerUri,
- 'ownerUri',
- 'package:provider_app/main.dart',
- )
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', true)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having(
- (e) => e.ownerName,
- 'ownerName',
- 'ChangeNotifier',
- )
- .having((e) => e.name, 'name', '_listeners')
- .having(
- (e) => e.ownerUri,
- 'ownerUri',
- 'package:flutter/src/foundation/change_notifier.dart',
- )
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', true)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- true,
- ),
- isA<ObjectField>()
- .having((e) => e.ownerName, 'ownerName', 'Mixin')
- .having(
- (e) => e.name,
- 'name',
- '_privateMixinProperty',
- )
- .having(
- (e) => e.ownerUri,
- 'ownerUri',
- 'package:provider_app/mixin.dart',
- )
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', true)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- ]),
- ),
- ),
- );
-
- await expectLater(
- complexFuture,
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', 'ComplexObject')
- .having((e) => e.fields, 'fields', [
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'boolean')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'enumeration')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'finalVar')
- .having((e) => e.isFinal, 'isFinal', true)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'float')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'integer')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'lateWithInitializer')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'list')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'map')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'nill')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'plainInstance')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'string')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'uninitializedLate')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- isA<ObjectField>()
- .having((e) => e.name, 'name', '_getterAndSetter')
- .having((e) => e.isFinal, 'isFinal', false)
- .having((e) => e.isPrivate, 'isPrivate', true)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- ]),
- );
-
- final complexProperties =
- Map.fromEntries(await complexPropertiesFuture);
-
- expect(
- complexProperties['boolean'],
- isA<BoolInstance>()
- .having((e) => e.displayString, 'displayString', 'false')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['enumeration'],
- isA<EnumInstance>()
- .having((e) => e.type, 'displayString', 'Enum')
- .having((e) => e.value, 'displayString', 'a')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['finalVar'],
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '42')
- .having((e) => e.setter, 'setter', isNull),
- );
-
- expect(
- complexProperties['float'],
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '0.42')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['integer'],
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '0')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['lateWithInitializer'],
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '21')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['list'],
- isA<ListInstance>()
- .having((e) => e.hash, 'hash', isA<int>())
- .having((e) => e.length, 'length', 6)
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['map'],
- isA<MapInstance>()
- .having((e) => e.hash, 'hash', isA<int>())
- .having((e) => e.keys.length, 'keys.length', 8)
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['nill'],
- isA<NullInstance>(),
- );
-
- expect(
- complexProperties['plainInstance'],
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', '_SubObject')
- .having((e) => e.fields, 'fields', [
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'value')
- .having((e) => e.isFinal, 'isFinal', true)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- ]).having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['string'],
- isA<StringInstance>()
- .having(
- (e) => e.displayString,
- 'displayString',
- 'hello world',
- )
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['_getterAndSetter'],
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '0')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- expect(
- complexProperties['uninitializedLate'],
- isA<SentinelException>().having(
- (e) => e.sentinel.kind,
- 'sentinel.kind',
- SentinelKind.kNotInitialized,
- ),
- );
-
- await expectLater(
- listItems,
- completion([
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '42'),
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'string'),
- isA<ListInstance>().having((e) => e.length, 'length', 0),
- isA<MapInstance>().having((e) => e.keys, 'value', isEmpty),
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', '_SubObject')
- .having((e) => e.fields, 'fields', [
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'value')
- .having((e) => e.isFinal, 'isFinal', true)
- .having((e) => e.isPrivate, 'isPrivate', false)
- .having(
- (e) => e.isDefinedByDependency,
- 'isDefinedByDependency',
- false,
- ),
- ]),
- isA<NullInstance>(),
- ]),
- );
-
- await expectLater(
- list4valueFuture,
- completion(
- isA<StringInstance>().having(
- (e) => e.displayString,
- 'displayString',
- 'complex-value',
- ),
- ),
- );
-
- await expectLater(
- plainInstanceValueFuture,
- completion(
- isA<StringInstance>().having(
- (e) => e.displayString,
- 'displayString',
- 'hello world',
- ),
- ),
- );
-
- await expectLater(mapKeys.keys, [
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'list')
- .having((e) => e.setter, 'setter', null),
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'string')
- .having((e) => e.setter, 'setter', null),
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '42')
- .having((e) => e.setter, 'setter', null),
- isA<BoolInstance>()
- .having((e) => e.displayString, 'displayString', 'true')
- .having((e) => e.setter, 'setter', null),
- isA<NullInstance>().having((e) => e.setter, 'setter', null),
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', '_SubObject')
- .having((e) => e.setter, 'setter', null)
- .having((e) => e.fields, 'fields', [
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'value')
- .having((e) => e.isFinal, 'isFinal', true),
- ]),
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', 'Object')
- .having((e) => e.setter, 'setter', null),
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'nested_map')
- .having((e) => e.setter, 'setter', null),
- ]);
-
- await expectLater(
- mapItems,
- completion([
- isA<ListInstance>()
- .having((e) => e.length, 'length', 1)
- .having((e) => e.setter, 'setter', isNotNull),
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'string')
- .having((e) => e.setter, 'setter', isNotNull),
- isA<StringInstance>()
- .having(
- (e) => e.displayString,
- 'displayString',
- 'number_key',
- )
- .having((e) => e.setter, 'setter', isNotNull),
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'bool_key')
- .having((e) => e.setter, 'setter', isNotNull),
- isA<NullInstance>()
- .having((e) => e.setter, 'setter', isNotNull),
- isA<ObjectInstance>()
- .having((e) => e.type, 'type', '_SubObject')
- .having((e) => e.setter, 'setter', isNotNull)
- .having((e) => e.fields, 'fields', [
- isA<ObjectField>()
- .having((e) => e.name, 'name', 'value')
- .having((e) => e.isFinal, 'isFinal', true),
- ]),
- isA<StringInstance>()
- .having(
- (e) => e.displayString,
- 'displayString',
- 'non-constant key',
- )
- .having((e) => e.setter, 'setter', isNotNull),
- isA<MapInstance>()
- .having((e) => e.setter, 'setter', isNotNull)
- .having((e) => e.keys, 'keys', [
- isA<StringInstance>()
- .having((e) => e.displayString, 'displayString', 'key')
- .having((e) => e.setter, 'setter', null),
- ]),
- ]),
- );
- },
- timeout: const Timeout.factor(12),
- );
-
- test(
- 'listens to updates from the application side',
- () async {
- final container = ProviderContainer();
- addTearDown(container.dispose);
-
- final countSub = container.listen(
- instanceProvider(
- const InstancePath.fromProviderId(
- '0',
- pathToProperty: [
- PathToProperty.objectProperty(
- name: '_count',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'Counter',
- ),
- ],
- ),
- ).future,
- (prev, next) {},
- );
-
- await expectLater(
- countSub.read(),
- completion(
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '0'),
- ),
- );
-
- await evalOnDartLibrary.asyncEval(
- 'await tester.tap(find.byKey(Key("increment"))).then((_) => tester.pump())',
- isAlive: isAlive,
- );
-
- await expectLater(
- countSub.read(),
- completion(
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '1'),
- ),
- );
- },
- timeout: const Timeout.factor(12),
- //TODO(rrousselGit): https://github.com/flutter/devtools/issues/6021
- skip: true,
- );
- });
- },
- );
-
- const countPath = InstancePath.fromProviderId(
- '0',
- pathToProperty: [
- PathToProperty.objectProperty(
- name: '_count',
- ownerUri: 'package:provider_app/main.dart',
- ownerName: 'Counter',
- ),
- ],
- );
-
- testWidgets(
- 'supports edits',
- (tester) async {
- final container = ProviderContainer();
- addTearDown(container.dispose);
-
- // TODO(rrousselGit) alter the test so that it does not print in the console
- // (eval logs the errors in the console)
- await tester.runAsync(() async {
- await expectLater(
- evalOnDartLibrary.safeEval(
- "find.text('0').evaluate().first",
- isAlive: isAlive,
- ),
- completes,
- );
- await expectLater(
- evalOnDartLibrary.safeEval(
- "find.text('42').evaluate().first",
- isAlive: isAlive,
- ),
- throwsA(anything),
- );
-
- // wait for the list of providers to be obtained
- await container
- .listen(sortedProviderNodesProvider.future, (prev, next) {})
- .read();
-
- final countSub = container.listen(
- instanceProvider(countPath).future,
- (prev, next) {},
- );
-
- final instance = await countSub.read();
-
- expect(
- instance,
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '0')
- .having((e) => e.setter, 'setter', isNotNull),
- );
-
- await instance.setter!('42');
-
- await expectLater(
- countSub.read(),
- completion(
- isA<NumInstance>()
- .having((e) => e.displayString, 'displayString', '42'),
- ),
- );
-
- // verify that the UI updated
- await expectLater(
- evalOnDartLibrary.safeEval(
- "find.text('0').evaluate().first",
- isAlive: isAlive,
- ),
- throwsA(anything),
- );
- await expectLater(
- evalOnDartLibrary.safeEval(
- "find.text('42').evaluate().first",
- isAlive: isAlive,
- ),
- completes,
- );
- });
- },
- timeout: const Timeout.factor(12),
- );
-}
diff --git a/packages/devtools_app/test/provider/provider_screen_test.dart b/packages/devtools_app/test/provider/provider_screen_test.dart
deleted file mode 100644
index e1e0bd0..0000000
--- a/packages/devtools_app/test/provider/provider_screen_test.dart
+++ /dev/null
@@ -1,419 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(https://github.com/flutter/devtools/issues/6215): remove this test.
-
-@TestOn('vm')
-import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_app/src/screens/provider/instance_viewer/instance_details.dart';
-import 'package:devtools_app/src/screens/provider/instance_viewer/instance_providers.dart';
-import 'package:devtools_app/src/screens/provider/provider_list.dart';
-import 'package:devtools_app/src/screens/provider/provider_nodes.dart';
-import 'package:devtools_app_shared/ui.dart';
-import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:flutter_test/flutter_test.dart';
-
-import '../test_infra/matchers/matchers.dart';
-
-void main() {
- // Set a wide enough screen width that we do not run into overflow.
- const windowSize = Size(2225.0, 1000.0);
-
- late Widget providerScreen;
-
- setUpAll(() async => await loadFonts());
-
- setUp(() {
- setGlobal(IdeTheme, getIdeTheme());
- setGlobal(
- DevToolsEnvironmentParameters,
- ExternalDevToolsEnvironmentParameters(),
- );
- setGlobal(PreferencesController, PreferencesController());
- setGlobal(ServiceConnectionManager, FakeServiceConnectionManager());
- setGlobal(NotificationService, NotificationService());
- setGlobal(BannerMessagesController, BannerMessagesController());
- });
-
- setUp(() {
- providerScreen = Container(
- color: Colors.grey,
- child: Directionality(
- textDirection: TextDirection.ltr,
- child: wrap(
- BannerMessages(
- screen: ProviderScreen(),
- ),
- ),
- ),
- );
- });
-
- group('ProviderScreen', () {
- testWidgetsWithWindowSize(
- 'shows ProviderUnknownErrorBanner if the devtool failed to fetch the list of providers',
- windowSize,
- (tester) async {
- await tester.pumpWidget(
- ProviderScope(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.loading(),
- ),
- ],
- child: providerScreen,
- ),
- );
-
- await tester.pumpWidget(
- ProviderScope(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- AsyncValue.error(StateError('')),
- ),
- ],
- child: providerScreen,
- ),
- );
-
- // wait for the Banner to appear as it is mounted asynchronously
- await tester.pump();
-
- await expectLater(
- find.byType(ProviderScreenBody),
- matchesDevToolsGolden(
- '../test_infra/goldens/provider_screen/list_error_banner.png',
- ),
- );
- },
- );
- });
-
- group('selectedProviderIdProvider', () {
- test('selects the first provider available', () async {
- final container = ProviderContainer(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.loading(),
- ),
- ],
- );
- addTearDown(container.dispose);
-
- final sub = container.listen<String?>(
- selectedProviderIdProvider,
- (prev, next) {},
- );
-
- expect(sub.read(), isNull);
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ProviderNode(id: '1', type: 'Provider<B>'),
- ]),
- ),
- ]);
-
- await container.pump();
-
- expect(sub.read(), '0');
- });
-
- test('selects the first provider available after an error', () async {
- final container = ProviderContainer(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- AsyncValue.error(Error()),
- ),
- ],
- );
- addTearDown(container.dispose);
-
- final sub = container.listen<String?>(
- selectedProviderIdProvider,
- (prev, next) {},
- );
-
- // wait for the error to be handled
- await container.pump();
-
- expect(sub.read(), isNull);
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ProviderNode(id: '1', type: 'Provider<B>'),
- ]),
- ),
- ]);
-
- // wait for the ids update to be handled
- await container.pump();
-
- expect(sub.read(), '0');
- });
-
- test(
- 'When the currently selected provider is removed, selects the next first provider',
- () {
- final container = ProviderContainer(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ]),
- ),
- ],
- );
- addTearDown(container.dispose);
-
- final sub = container.listen<String?>(
- selectedProviderIdProvider,
- (prev, next) {},
- );
-
- expect(sub.read(), '0');
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '1', type: 'Provider<B>'),
- ]),
- ),
- ]);
-
- expect(sub.read(), '1');
- },
- );
-
- test('Once a provider is selected, further updates are no-op', () async {
- final container = ProviderContainer(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ]),
- ),
- ],
- );
- addTearDown(container.dispose);
-
- final sub = container.listen<String?>(
- selectedProviderIdProvider,
- (prev, next) {},
- );
-
- await container.pump();
-
- expect(sub.read(), '0');
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- // '0' is no-longer the first provider on purpose
- const AsyncValue.data([
- ProviderNode(id: '1', type: 'Provider<B>'),
- ProviderNode(id: '0', type: 'Provider<A>'),
- ]),
- ),
- ]);
-
- await container.pump();
-
- expect(sub.read(), '0');
- });
-
- test(
- 'when the list of providers becomes empty, the current provider is unselected '
- ', then, the first provider will be selected when the list becomes non-empty again.',
- () async {
- final container = ProviderContainer(
- overrides: [
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ]),
- ),
- ],
- );
- addTearDown(container.dispose);
-
- final sub = container.listen<String?>(
- selectedProviderIdProvider,
- (prev, next) {},
- );
-
- await container.pump();
-
- expect(sub.read(), '0');
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([]),
- ),
- ]);
-
- await container.pump();
-
- expect(sub.read(), isNull);
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '1', type: 'Provider<B>'),
- ]),
- ),
- ]);
-
- await container.pump();
-
- expect(sub.read(), '1');
- },
- );
- });
-
- group('ProviderList', () {
- List<Override> getOverrides() {
- return [
- instanceProvider(const InstancePath.fromProviderId('0'))
- .overrideWithValue(
- AsyncValue.data(
- InstanceDetails.string(
- 'Value0',
- instanceRefId: 'string/0',
- setter: null,
- ),
- ),
- ),
- ];
- }
-
- testWidgetsWithWindowSize(
- 'selects the first provider the first time a provider is received',
- windowSize,
- (tester) async {
- final container = ProviderContainer(
- overrides: [
- sortedProviderNodesProvider
- .overrideWithValue(const AsyncValue.loading()),
- ...getOverrides(),
- ],
- );
-
- await tester.pumpWidget(
- UncontrolledProviderScope(
- container: container,
- child: providerScreen,
- ),
- );
-
- expect(container.read(selectedProviderIdProvider), isNull);
- expect(find.byType(ProviderNodeItem), findsNothing);
-
- await expectLater(
- find.byType(ProviderScreenBody),
- matchesDevToolsGolden(
- '../test_infra/goldens/provider_screen/no_selected_provider.png',
- ),
- );
-
- container.updateOverrides([
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ProviderNode(id: '1', type: 'Provider<B>'),
- ]),
- ),
- ...getOverrides(),
- ]);
-
- await tester.pump();
-
- expect(container.read(selectedProviderIdProvider), '0');
- expect(find.byType(ProviderNodeItem), findsNWidgets(2));
- expect(
- find.descendant(
- of: find.byKey(const Key('provider-0')),
- matching: find.text('Provider<A>()'),
- ),
- findsOneWidget,
- );
- expect(
- find.descendant(
- of: find.byKey(const Key('provider-1')),
- matching: find.text('Provider<B>()'),
- ),
- findsOneWidget,
- );
-
- await expectLater(
- find.byType(ProviderScreenBody),
- matchesDevToolsGolden(
- '../test_infra/goldens/provider_screen/selected_provider.png',
- ),
- );
- },
- );
-
- testWidgetsWithWindowSize(
- 'shows ProviderUnknownErrorBanner if the devtool failed to fetch the selected provider',
- windowSize,
- (tester) async {
- final overrides = [
- sortedProviderNodesProvider.overrideWithValue(
- const AsyncValue.data([
- ProviderNode(id: '0', type: 'Provider<A>'),
- ProviderNode(id: '1', type: 'Provider<B>'),
- ]),
- ),
- ...getOverrides(),
- ];
-
- await tester.pumpWidget(
- ProviderScope(
- overrides: [
- ...overrides,
- instanceProvider(const InstancePath.fromProviderId('0'))
- .overrideWithValue(const AsyncValue.loading()),
- ],
- child: providerScreen,
- ),
- );
-
- await tester.pumpWidget(
- ProviderScope(
- overrides: [
- ...overrides,
- instanceProvider(const InstancePath.fromProviderId('0'))
- .overrideWithValue(AsyncValue.error(Error())),
- ],
- child: providerScreen,
- ),
- );
-
- // await for the modal to be mounted as it is rendered asynchronously
- await tester.pump();
-
- expect(
- find.byKey(
- Key('ProviderUnknownErrorBanner - ${ProviderScreen.id}'),
- ),
- findsOneWidget,
- );
-
- await expectLater(
- find.byType(ProviderScreenBody),
- matchesDevToolsGolden(
- '../test_infra/goldens/provider_screen/selected_provider_error_banner.png',
- ),
- );
- },
- );
- });
-}
diff --git a/packages/devtools_app/test/shared/about_dialog_test.dart b/packages/devtools_app/test/shared/about_dialog_test.dart
index 34dea5d..90d708e 100644
--- a/packages/devtools_app/test/shared/about_dialog_test.dart
+++ b/packages/devtools_app/test/shared/about_dialog_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/analytics_prompt_test.dart b/packages/devtools_app/test/shared/analytics_prompt_test.dart
index b4d2f76..bf90d5a 100644
--- a/packages/devtools_app/test/shared/analytics_prompt_test.dart
+++ b/packages/devtools_app/test/shared/analytics_prompt_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:provider/provider.dart';
diff --git a/packages/devtools_app/test/shared/ansi_up_test.dart b/packages/devtools_app/test/shared/ansi_up_test.dart
index 395d646..38e68a7 100644
--- a/packages/devtools_app/test/shared/ansi_up_test.dart
+++ b/packages/devtools_app/test/shared/ansi_up_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app/src/shared/console/widgets/console_pane.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/banner_messages_test.dart b/packages/devtools_app/test/shared/banner_messages_test.dart
index be700f1..a6f70ac 100644
--- a/packages/devtools_app/test/shared/banner_messages_test.dart
+++ b/packages/devtools_app/test/shared/banner_messages_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/shared/common_widgets_test.dart b/packages/devtools_app/test/shared/common_widgets_test.dart
index e8ae955..208398f 100644
--- a/packages/devtools_app/test/shared/common_widgets_test.dart
+++ b/packages/devtools_app/test/shared/common_widgets_test.dart
@@ -6,6 +6,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/shared/connection_info_test.dart b/packages/devtools_app/test/shared/connection_info_test.dart
index 49f2f9f..f273519 100644
--- a/packages/devtools_app/test/shared/connection_info_test.dart
+++ b/packages/devtools_app/test/shared/connection_info_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/development_helpers_test.dart b/packages/devtools_app/test/shared/development_helpers_test.dart
index 70d27c4..02e68fd 100644
--- a/packages/devtools_app/test/shared/development_helpers_test.dart
+++ b/packages/devtools_app/test/shared/development_helpers_test.dart
@@ -9,5 +9,6 @@
test('debug flags are false', () {
expect(debugAnalytics, isFalse);
expect(debugDevToolsExtensions, isFalse);
+ expect(debugSurvey, isFalse);
});
}
diff --git a/packages/devtools_app/test/shared/editable_list_test.dart b/packages/devtools_app/test/shared/editable_list_test.dart
index 4ff5c43..4d13ee4 100644
--- a/packages/devtools_app/test/shared/editable_list_test.dart
+++ b/packages/devtools_app/test/shared/editable_list_test.dart
@@ -6,7 +6,7 @@
import 'package:devtools_app/src/shared/editable_list.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/shared/eval_integration_test.dart b/packages/devtools_app/test/shared/eval_integration_test.dart
index 1bb3e3f..fe80515 100644
--- a/packages/devtools_app/test/shared/eval_integration_test.dart
+++ b/packages/devtools_app/test/shared/eval_integration_test.dart
@@ -4,6 +4,7 @@
import 'package:devtools_app/src/shared/globals.dart';
import 'package:devtools_app_shared/service.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter_test/flutter_test.dart';
import '../test_infra/flutter_test_driver.dart';
@@ -92,6 +93,9 @@
expect(instance.valueAsString, '42');
},
timeout: const Timeout.factor(2),
+ // TODO(https://github.com/flutter/devtools/issues/6998): if this flake
+ // is addressed, we can unskip this for the Flutter customer tests.
+ tags: skipForCustomerTestsTag,
);
test(
diff --git a/packages/devtools_app/test/shared/home_screen_test.dart b/packages/devtools_app/test/shared/home_screen_test.dart
index 52e6af2..0fd42d6 100644
--- a/packages/devtools_app/test/shared/home_screen_test.dart
+++ b/packages/devtools_app/test/shared/home_screen_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/initializer_test.dart b/packages/devtools_app/test/shared/initializer_test.dart
index 17f39b8..a5e806c 100644
--- a/packages/devtools_app/test/shared/initializer_test.dart
+++ b/packages/devtools_app/test/shared/initializer_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/instance_viewer_test.dart b/packages/devtools_app/test/shared/instance_viewer_test.dart
index 1f47712..88fe5fb 100644
--- a/packages/devtools_app/test/shared/instance_viewer_test.dart
+++ b/packages/devtools_app/test/shared/instance_viewer_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
diff --git a/packages/devtools_app/test/shared/json_to_service_cache_test.dart b/packages/devtools_app/test/shared/json_to_service_cache_test.dart
index 250f63e..68888a0 100644
--- a/packages/devtools_app/test/shared/json_to_service_cache_test.dart
+++ b/packages/devtools_app/test/shared/json_to_service_cache_test.dart
@@ -41,39 +41,47 @@
expect(associations.length, 4);
// 'id': 1
- expect(associations[0].key.kind, InstanceKind.kString);
- expect(associations[0].key.valueAsString, 'id');
- ensureIsInCache(associations[0].key);
- expect(associations[0].value.kind, InstanceKind.kInt);
- expect(associations[0].value.valueAsString, '1');
- ensureIsInCache(associations[0].value);
+ final idKey = associations[0].key as Instance;
+ expect(idKey.kind, InstanceKind.kString);
+ expect(idKey.valueAsString, 'id');
+ ensureIsInCache(idKey);
+ final idValue = associations[0].value as Instance;
+ expect(idValue.kind, InstanceKind.kInt);
+ expect(idValue.valueAsString, '1');
+ ensureIsInCache(idValue);
// 'map': { ... }
- expect(associations[1].key.kind, InstanceKind.kString);
- expect(associations[1].key.valueAsString, 'map');
- ensureIsInCache(associations[1].key);
- expect(associations[1].value.kind, InstanceKind.kMap);
- ensureIsInCache(associations[1].value);
+ final mapKey = associations[1].key as Instance;
+ expect(mapKey.kind, InstanceKind.kString);
+ expect(mapKey.valueAsString, 'map');
+ ensureIsInCache(mapKey);
+ final mapValue = associations[1].value as Instance;
+ expect(mapValue.kind, InstanceKind.kMap);
+ ensureIsInCache(mapValue);
{
- final contents = associations[1].value.associations!;
- expect(contents.length, 1);
- expect(contents[0].key.kind, InstanceKind.kString);
- expect(contents[0].key.valueAsString, 'foo');
- ensureIsInCache(contents[0].key);
- expect(contents[0].value.kind, InstanceKind.kString);
- expect(contents[0].value.valueAsString, 'bar');
- ensureIsInCache(contents[0].value);
+ final contents = mapValue.associations!;
+ expect(contents, hasLength(1));
+ final foo = contents[0].key as Instance;
+ expect(foo.kind, InstanceKind.kString);
+ expect(foo.valueAsString, 'foo');
+ ensureIsInCache(foo);
+ final bar = contents[0].value as Instance;
+ expect(bar.kind, InstanceKind.kString);
+ expect(bar.valueAsString, 'bar');
+ ensureIsInCache(bar);
}
// 'list': [ ... ]
- expect(associations[2].key.kind, InstanceKind.kString);
- expect(associations[2].key.valueAsString, 'list');
- ensureIsInCache(associations[2].key);
- expect(associations[2].value.kind, InstanceKind.kList);
- ensureIsInCache(associations[2].value);
+ final listKey = associations[2].key as Instance;
+ expect(listKey.kind, InstanceKind.kString);
+ expect(listKey.valueAsString, 'list');
+ ensureIsInCache(listKey);
+ final listValue = associations[2].value as Instance;
+ expect(listValue.kind, InstanceKind.kList);
+ ensureIsInCache(listValue);
{
- final contents = associations[2].value.elements!;
- expect(contents.length, 4);
+ final contents = listValue.elements!.cast<Instance>();
+ expect(contents, hasLength(4));
expect(contents[0].kind, InstanceKind.kInt);
expect(contents[0].valueAsString, '1');
ensureIsInCache(contents[0]);
@@ -102,21 +110,29 @@
final cache = JsonToServiceCache();
final root = cache.insertJsonObject(data);
- final list = root.associations![0].value;
+ final list = root.associations![0].value as Instance;
expect(list.kind, InstanceKind.kList);
final sublist = cache.getObject(objectId: list.id!, offset: 2, count: 5)!;
expect(sublist.count, 5);
for (int i = 0; i < sublist.count!; ++i) {
- expect(sublist.elements![i].valueAsString, (i + 2).toString());
+ final element = sublist.elements![i] as Instance;
+ expect(element.valueAsString, (i + 2).toString());
}
- final map = root.associations![1].value;
+ final map = root.associations![1].value as Instance;
expect(map.kind, InstanceKind.kMap);
final submap = cache.getObject(objectId: map.id!, offset: 2, count: 5)!;
expect(submap.count, 5);
for (int i = 0; i < submap.count!; ++i) {
- expect(submap.associations![i].key.valueAsString, (i + 2).toString());
- expect(submap.associations![i].value.valueAsString, (i + 2).toString());
+ final association = submap.associations![i];
+ expect(
+ (association.key as Instance).valueAsString,
+ (i + 2).toString(),
+ );
+ expect(
+ (association.value as Instance).valueAsString,
+ (i + 2).toString(),
+ );
}
});
});
diff --git a/packages/devtools_app/test/shared/preferences_controller_test.dart b/packages/devtools_app/test/shared/preferences_controller_test.dart
index 0235212..7c9e168 100644
--- a/packages/devtools_app/test/shared/preferences_controller_test.dart
+++ b/packages/devtools_app/test/shared/preferences_controller_test.dart
@@ -28,7 +28,6 @@
test('has subcontrollers initialized', () {
expect(controller.memory, isNotNull);
expect(controller.inspector, isNotNull);
- expect(controller.cpuProfiler, isNotNull);
});
test('has value', () {
@@ -415,57 +414,6 @@
});
});
- group('$CpuProfilerPreferencesController', () {
- late CpuProfilerPreferencesController controller;
- late FlutterTestStorage storage;
-
- setUp(() async {
- setGlobal(Storage, storage = FlutterTestStorage());
- controller = CpuProfilerPreferencesController();
- await controller.init();
- });
-
- test('has expected default values', () {
- expect(controller.displayTreeGuidelines.value, isFalse);
- });
-
- test('stores values and reads them on init', () async {
- storage.values.clear();
-
- // Remember original values.
- final displayTreeGuidelines = controller.displayTreeGuidelines.value;
-
- // Flip the values in controller.
- controller.displayTreeGuidelines.value = !displayTreeGuidelines;
-
- // Check the values are stored.
- expect(storage.values, hasLength(1));
-
- // Reload the values from storage.
- await controller.init();
-
- // Check they did not change back to default.
- expect(
- controller.displayTreeGuidelines.value,
- !displayTreeGuidelines,
- );
-
- // Flip the values in storage.
- for (var key in storage.values.keys) {
- storage.values[key] = (!(storage.values[key] == 'true')).toString();
- }
-
- // Reload the values from storage.
- await controller.init();
-
- // Check they flipped values are loaded.
- expect(
- controller.displayTreeGuidelines.value,
- displayTreeGuidelines,
- );
- });
- });
-
group('$PerformancePreferencesController', () {
late PerformancePreferencesController controller;
late FlutterTestStorage storage;
diff --git a/packages/devtools_app/test/shared/resolved_uri_manager_test.dart b/packages/devtools_app/test/shared/resolved_uri_manager_test.dart
index 64d3032..3a0b162 100644
--- a/packages/devtools_app/test/shared/resolved_uri_manager_test.dart
+++ b/packages/devtools_app/test/shared/resolved_uri_manager_test.dart
@@ -4,8 +4,7 @@
import 'dart:async';
-import 'package:devtools_app/devtools_app.dart';
-import 'package:devtools_app_shared/utils.dart';
+import 'package:devtools_app_shared/service.dart';
import 'package:devtools_test/devtools_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -13,13 +12,7 @@
void main() {
late ResolvedUriManager resolvedUriManager;
- final service = createMockVmServiceWrapperWithDefaults();
-
- setGlobal(
- ServiceConnectionManager,
- FakeServiceConnectionManager(service: service),
- );
- resolvedUriManager = ResolvedUriManager();
+ late MockVmServiceWrapper service;
const String isolateId = 'anIsolateId';
const uri1 = 'this/is/a/uri1';
@@ -27,14 +20,14 @@
const packageUri1 = 'uri/am/i1';
const packageUri2 = 'uri/am/i2';
+ setUp(() {
+ service = createMockVmServiceWrapperWithDefaults();
+ resolvedUriManager = ResolvedUriManager();
+ });
+
group('lifecycle', () {
setUp(() {
- when(
- unawaited(
- serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId, [uri1]),
- ),
- ).thenAnswer(
+ when(unawaited(service.lookupPackageUris(isolateId, [uri1]))).thenAnswer(
(realInvocation) => Future.value(UriList(uris: [packageUri1])),
);
});
@@ -50,7 +43,7 @@
});
test('does nothing after vmServiceClosed', () async {
- resolvedUriManager.vmServiceOpened();
+ resolvedUriManager.vmServiceOpened(service);
resolvedUriManager.vmServiceClosed();
await resolvedUriManager.fetchPackageUris(isolateId, [uri1]);
@@ -65,7 +58,7 @@
group('file to package mappings', () {
setUp(() {
- resolvedUriManager.vmServiceOpened();
+ resolvedUriManager.vmServiceOpened(service);
});
test('lookupPackageUri when uri is unknown', () {
@@ -75,10 +68,7 @@
});
test('lookupPackageUris', () async {
- when(
- serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId, [uri1, uri2]),
- ).thenAnswer(
+ when(service.lookupPackageUris(isolateId, [uri1, uri2])).thenAnswer(
(realInvocation) =>
Future.value(UriList(uris: [packageUri1, packageUri2])),
);
@@ -96,16 +86,10 @@
});
test('remembers already fetched uris', () async {
- when(
- serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId, [uri1]),
- ).thenAnswer(
+ when(service.lookupPackageUris(isolateId, [uri1])).thenAnswer(
(realInvocation) => Future.value(UriList(uris: [packageUri1])),
);
- when(
- serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId, [uri2]),
- ).thenAnswer(
+ when(service.lookupPackageUris(isolateId, [uri2])).thenAnswer(
(realInvocation) => Future.value(UriList(uris: [packageUri2])),
);
@@ -130,16 +114,10 @@
const String isolateId2 = 'anIsolateId2';
const String packageUriFromDifferentIsolate =
'this/is/a/third/packageUri3';
- when(
- serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId, [uri1]),
- ).thenAnswer(
+ when(service.lookupPackageUris(isolateId, [uri1])).thenAnswer(
(realInvocation) => Future.value(UriList(uris: [packageUri1])),
);
- when(
- serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId2, [uri1]),
- ).thenAnswer(
+ when(service.lookupPackageUris(isolateId2, [uri1])).thenAnswer(
(realInvocation) =>
Future.value(UriList(uris: [packageUriFromDifferentIsolate])),
);
@@ -158,12 +136,7 @@
});
test('preserves the reverse package to file mapping', () async {
- when(
- serviceConnection.serviceManager.service!.lookupPackageUris(
- isolateId,
- [uri1],
- ),
- ).thenAnswer(
+ when(service.lookupPackageUris(isolateId, [uri1])).thenAnswer(
(realInvocation) => Future.value(UriList(uris: [packageUri1])),
);
@@ -182,7 +155,7 @@
group('package to file mappings', () {
setUp(() {
- resolvedUriManager.vmServiceOpened();
+ resolvedUriManager.vmServiceOpened(service);
});
test('lookupFileUri when package is unknown', () {
@@ -193,10 +166,8 @@
test('lookupFileUri', () async {
when(
- serviceConnection.serviceManager.service!.lookupResolvedPackageUris(
- isolateId,
- [packageUri1, packageUri2],
- ),
+ service
+ .lookupResolvedPackageUris(isolateId, [packageUri1, packageUri2]),
).thenAnswer(
(realInvocation) => Future.value(UriList(uris: [uri1, uri2])),
);
@@ -215,16 +186,12 @@
});
test('remembers already fetched file paths', () async {
- when(
- serviceConnection.serviceManager.service!
- .lookupResolvedPackageUris(isolateId, [packageUri1]),
- ).thenAnswer(
+ when(service.lookupResolvedPackageUris(isolateId, [packageUri1]))
+ .thenAnswer(
(realInvocation) => Future.value(UriList(uris: [uri1])),
);
- when(
- serviceConnection.serviceManager.service!
- .lookupResolvedPackageUris(isolateId, [packageUri2]),
- ).thenAnswer(
+ when(service.lookupResolvedPackageUris(isolateId, [packageUri2]))
+ .thenAnswer(
(realInvocation) => Future.value(UriList(uris: [uri2])),
);
@@ -249,16 +216,12 @@
const String isolateId2 = 'anIsolateId2';
const String fileUriFromDifferentIsolate =
'file:///this/is/a/third/fileUri3';
- when(
- serviceConnection.serviceManager.service!
- .lookupResolvedPackageUris(isolateId, [packageUri1]),
- ).thenAnswer(
+ when(service.lookupResolvedPackageUris(isolateId, [packageUri1]))
+ .thenAnswer(
(realInvocation) => Future.value(UriList(uris: [uri1])),
);
- when(
- serviceConnection.serviceManager.service!
- .lookupResolvedPackageUris(isolateId2, [packageUri1]),
- ).thenAnswer(
+ when(service.lookupResolvedPackageUris(isolateId2, [packageUri1]))
+ .thenAnswer(
(realInvocation) =>
Future.value(UriList(uris: [fileUriFromDifferentIsolate])),
);
@@ -277,12 +240,8 @@
});
test('preserves the reverse file to package mapping', () async {
- when(
- serviceConnection.serviceManager.service!.lookupResolvedPackageUris(
- isolateId,
- [packageUri1],
- ),
- ).thenAnswer(
+ when(service.lookupResolvedPackageUris(isolateId, [packageUri1]))
+ .thenAnswer(
(realInvocation) => Future.value(UriList(uris: [uri1])),
);
diff --git a/packages/devtools_app/test/shared/scaffold_debugger_test.dart b/packages/devtools_app/test/shared/scaffold_debugger_test.dart
index 935f0df..f373826 100644
--- a/packages/devtools_app/test/shared/scaffold_debugger_test.dart
+++ b/packages/devtools_app/test/shared/scaffold_debugger_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/scaffold_debugging_controls_test.dart b/packages/devtools_app/test/shared/scaffold_debugging_controls_test.dart
index c5394a8..649823f 100644
--- a/packages/devtools_app/test/shared/scaffold_debugging_controls_test.dart
+++ b/packages/devtools_app/test/shared/scaffold_debugging_controls_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/scaffold_no_app_test.dart b/packages/devtools_app/test/shared/scaffold_no_app_test.dart
index 59317d1..36a6c77 100644
--- a/packages/devtools_app/test/shared/scaffold_no_app_test.dart
+++ b/packages/devtools_app/test/shared/scaffold_no_app_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/scaffold_profile_test.dart b/packages/devtools_app/test/shared/scaffold_profile_test.dart
index c723165..bbdb4f2 100644
--- a/packages/devtools_app/test/shared/scaffold_profile_test.dart
+++ b/packages/devtools_app/test/shared/scaffold_profile_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/scaffold_test.dart b/packages/devtools_app/test/shared/scaffold_test.dart
index f5e0a3f..d6838d7 100644
--- a/packages/devtools_app/test/shared/scaffold_test.dart
+++ b/packages/devtools_app/test/shared/scaffold_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/shared/server_api_client_test.dart b/packages/devtools_app/test/shared/server_api_client_test.dart
index 9672af3..44a5e17 100644
--- a/packages/devtools_app/test/shared/server_api_client_test.dart
+++ b/packages/devtools_app/test/shared/server_api_client_test.dart
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:devtools_app/src/shared/server_api_client.dart';
+import 'package:devtools_app/src/shared/server/server_api_client.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
diff --git a/packages/devtools_app/test/shared/service_extension_widgets_test.dart b/packages/devtools_app/test/shared/service_extension_widgets_test.dart
index 2f1969b..a5d990b 100644
--- a/packages/devtools_app/test/shared/service_extension_widgets_test.dart
+++ b/packages/devtools_app/test/shared/service_extension_widgets_test.dart
@@ -15,6 +15,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/shared/syntax_highlighter_test.dart b/packages/devtools_app/test/shared/syntax_highlighter_test.dart
index 12b7dfe..5e4c0f2 100644
--- a/packages/devtools_app/test/shared/syntax_highlighter_test.dart
+++ b/packages/devtools_app/test/shared/syntax_highlighter_test.dart
@@ -12,7 +12,7 @@
import 'package:devtools_app/src/shared/ui/colors.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -433,7 +433,14 @@
spanTester(
context,
children[i++] as TextSpan,
- "'\$",
+ "'",
+ stringSyntaxColor,
+ );
+
+ spanTester(
+ context,
+ children[i++] as TextSpan,
+ '\$',
stringSyntaxColor,
);
diff --git a/packages/devtools_app/test/shared/table_test.dart b/packages/devtools_app/test/shared/table_test.dart
index e047334..0689f4f 100644
--- a/packages/devtools_app/test/shared/table_test.dart
+++ b/packages/devtools_app/test/shared/table_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart' hide TableRow;
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -218,7 +219,7 @@
defaultSortDirection: SortDirection.ascending,
);
await tester.pumpWidget(wrap(table));
- final FlatTableState state = tester.state(find.byWidget(table));
+ final FlatTableState<TestData> state = tester.state(find.byWidget(table));
final data = state.tableController.tableData.value.data;
expect(data[0].name, equals('Bar'));
expect(data[1].name, equals('Baz'));
@@ -244,7 +245,7 @@
defaultSortDirection: SortDirection.ascending,
);
await tester.pumpWidget(wrap(table));
- final FlatTableState state = tester.state(find.byWidget(table));
+ final FlatTableState<TestData> state = tester.state(find.byWidget(table));
{
final data = state.tableController.tableData.value.data;
expect(data[0].name, equals('Bar'));
@@ -311,7 +312,8 @@
defaultSortDirection: SortDirection.ascending,
);
await tester.pumpWidget(wrap(table));
- final FlatTableState state = tester.state(find.byWidget(table));
+ final FlatTableState<TestData> state =
+ tester.state(find.byWidget(table));
{
final data = state.tableController.tableData.value.data;
expect(data[0].name, equals('Bar'));
@@ -387,7 +389,8 @@
secondarySortColumn: flatNameColumn,
);
await tester.pumpWidget(wrap(table));
- final FlatTableState state = tester.state(find.byWidget(table));
+ final FlatTableState<TestData> state =
+ tester.state(find.byWidget(table));
{
final data = state.tableController.tableData.value.data;
expect(data[0].name, equals('Foo'));
@@ -1205,7 +1208,7 @@
defaultSortDirection: SortDirection.ascending,
);
await tester.pumpWidget(wrap(table));
- final TreeTableState state = tester.state(find.byWidget(table));
+ final TreeTableState<TestData> state = tester.state(find.byWidget(table));
final tree = state.tableController.dataRoots[0];
expect(tree.children[0].name, equals('Bar'));
expect(tree.children[0].children[0].name, equals('Baz'));
@@ -1231,7 +1234,7 @@
defaultSortDirection: SortDirection.ascending,
);
await tester.pumpWidget(wrap(table));
- final TreeTableState state = tester.state(find.byWidget(table));
+ final TreeTableState<TestData> state = tester.state(find.byWidget(table));
expect(state.tableController.columnWidths![0], equals(400));
expect(state.tableController.columnWidths![1], equals(81));
final tree = state.tableController.dataRoots[0];
diff --git a/packages/devtools_app/test/shared/treemap_test.dart b/packages/devtools_app/test/shared/treemap_test.dart
index 954c65f..dd7164d 100644
--- a/packages/devtools_app/test/shared/treemap_test.dart
+++ b/packages/devtools_app/test/shared/treemap_test.dart
@@ -2,14 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:convert';
+
import 'package:devtools_app/src/service/service_manager.dart';
import 'package:devtools_app/src/shared/charts/treemap.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
+import 'package:vm_snapshot_analysis/treemap.dart';
import '../test_infra/matchers/matchers.dart';
import '../test_infra/test_data/app_size/apk_analysis.dart';
@@ -132,7 +136,7 @@
group('Treemap from small instruction sizes', () {
setUp(() async {
- root = await loadSnapshotJsonAsTree(smallInstructionSizes);
+ root = await _loadSnapshotJsonAsTree(smallInstructionSizes);
});
testWidgetsWithWindowSize(
'zooms in down to a node without children',
@@ -167,7 +171,7 @@
group('Treemap from instruction sizes', () {
setUp(() async {
- root = await loadSnapshotJsonAsTree(instructionSizes);
+ root = await _loadSnapshotJsonAsTree(instructionSizes);
});
testWidgetsWithWindowSize(
@@ -190,7 +194,7 @@
group('Treemap from v8 snapshot', () {
setUp(() async {
- root = await loadSnapshotJsonAsTree(newV8);
+ root = await _loadSnapshotJsonAsTree(newV8);
});
testWidgetsWithWindowSize(
@@ -215,7 +219,7 @@
group('Treemap from APK analysis', () {
setUp(() async {
- root = await loadSnapshotJsonAsTree(apkAnalysis);
+ root = await _loadSnapshotJsonAsTree(apkAnalysis);
});
testWidgetsWithWindowSize(
@@ -238,3 +242,44 @@
);
});
}
+
+Future<TreemapNode> _loadSnapshotJsonAsTree(String snapshotJson) async {
+ final treemapTestData = jsonDecode(snapshotJson);
+
+ if (treemapTestData is Map<String, dynamic> &&
+ treemapTestData['type'] == 'apk') {
+ return _generateTree(treemapTestData);
+ } else {
+ final processedTestData = treemapFromJson(treemapTestData);
+ processedTestData['n'] = 'Root';
+ return _generateTree(processedTestData);
+ }
+}
+
+/// Builds a tree with [TreemapNode] from [treeJson] which represents
+/// the hierarchical structure of the tree.
+TreemapNode _generateTree(Map<String, dynamic> treeJson) {
+ var treemapNodeName = treeJson['n'];
+ if (treemapNodeName == '') treemapNodeName = 'Unnamed';
+ final rawChildren = treeJson['children'];
+ final treemapNodeChildren = <TreemapNode>[];
+
+ int treemapNodeSize = 0;
+ if (rawChildren != null) {
+ // If not a leaf node, build all children then take the sum of the
+ // children's sizes as its own size.
+ for (var child in rawChildren) {
+ final childTreemapNode = _generateTree(child);
+ treemapNodeChildren.add(childTreemapNode);
+ treemapNodeSize += childTreemapNode.byteSize;
+ }
+ treemapNodeSize = treemapNodeSize;
+ } else {
+ // If a leaf node, just take its own size.
+ // Defaults to 0 if a leaf node has a size of null.
+ treemapNodeSize = treeJson['value'] ?? 0;
+ }
+
+ return TreemapNode(name: treemapNodeName, byteSize: treemapNodeSize)
+ ..addAllChildren(treemapNodeChildren);
+}
diff --git a/packages/devtools_app/test/shared/ui_utils_test.dart b/packages/devtools_app/test/shared/ui_utils_test.dart
index 18102d6..bdfb31c 100644
--- a/packages/devtools_app/test/shared/ui_utils_test.dart
+++ b/packages/devtools_app/test/shared/ui_utils_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/devtools_app/test/shared/visible_screens_test.dart b/packages/devtools_app/test/shared/visible_screens_test.dart
index fdd2938..73c5b4a 100644
--- a/packages/devtools_app/test/shared/visible_screens_test.dart
+++ b/packages/devtools_app/test/shared/visible_screens_test.dart
@@ -46,7 +46,7 @@
}) {
if (web) {
fakeServiceConnection.serviceManager.availableLibraries
- .add('dart:html');
+ .add('dart:js_interop');
}
mockConnectedApp(
fakeServiceConnection.serviceManager.connectedApp!,
@@ -81,6 +81,7 @@
NetworkScreen,
LoggingScreen,
AppSizeScreen,
+ DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -102,6 +103,7 @@
// NetworkScreen,
LoggingScreen,
// AppSizeScreen,
+ // DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -125,6 +127,7 @@
NetworkScreen,
LoggingScreen,
AppSizeScreen,
+ DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -149,6 +152,7 @@
NetworkScreen,
LoggingScreen,
AppSizeScreen,
+ DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -173,6 +177,7 @@
// NetworkScreen,
LoggingScreen,
// AppSizeScreen,
+ // DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -207,6 +212,7 @@
NetworkScreen,
LoggingScreen,
AppSizeScreen,
+ DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -231,6 +237,7 @@
// NetworkScreen,
// LoggingScreen,
// AppSizeScreen,
+ // DeepLinksScreen,
// VMDeveloperToolsScreen,
]),
);
@@ -255,6 +262,7 @@
NetworkScreen,
LoggingScreen,
AppSizeScreen,
+ DeepLinksScreen,
VMDeveloperToolsScreen,
]),
);
diff --git a/packages/devtools_app/test/shared/vm_flag_widgets_test.dart b/packages/devtools_app/test/shared/vm_flag_widgets_test.dart
index 2286c66..569aa87 100644
--- a/packages/devtools_app/test/shared/vm_flag_widgets_test.dart
+++ b/packages/devtools_app/test/shared/vm_flag_widgets_test.dart
@@ -10,6 +10,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -216,7 +217,7 @@
await tester.pumpWidget(wrap(const VMFlagsDialog()));
expect(find.richText('VM Flags'), findsOneWidget);
expect(find.richText('flag 1 name'), findsOneWidget);
- final RichText commentText = tester.firstWidget<RichText>(
+ final Text commentText = tester.firstWidget<Text>(
findSubstring('flag 1 comment'),
);
expect(commentText, isNotNull);
diff --git a/packages/devtools_app/test/test_infra/fixtures/flutter_error_app/lib/main.dart b/packages/devtools_app/test/test_infra/fixtures/flutter_error_app/lib/main.dart
index 1f7ddb7..74d3be5 100644
--- a/packages/devtools_app/test/test_infra/fixtures/flutter_error_app/lib/main.dart
+++ b/packages/devtools_app/test/test_infra/fixtures/flutter_error_app/lib/main.dart
@@ -82,7 +82,7 @@
}
}
-Map<String, Function> navigateCallbacks = {};
+Map<String, void Function()> navigateCallbacks = {};
// Hook to navigate to a specific screen.
void navigateToScreen(String title) {
diff --git a/packages/devtools_app/test/test_infra/fixtures/memory_app/lib/main.dart b/packages/devtools_app/test/test_infra/fixtures/memory_app/lib/main.dart
index c1a47be..44adde9 100644
--- a/packages/devtools_app/test/test_infra/fixtures/memory_app/lib/main.dart
+++ b/packages/devtools_app/test/test_infra/fixtures/memory_app/lib/main.dart
@@ -87,40 +87,36 @@
mapSimpleKey = null;
mapSimpleValue = null;
map = null;
- // record = null;
+ record = null;
} else {
_MyGarbage createInstance({String? note}) =>
_MyGarbage(_level + 1, note ?? _note);
childClass = createInstance();
- childList = Iterable.generate(_width, (_) => createInstance()).toList();
+ childList = List.generate(_width, (_) => createInstance());
- mapSimpleKey = Map.fromIterable(
- Iterable.generate(_width),
- value: (_) => createInstance(),
- );
+ mapSimpleKey = {
+ for (var index = 0; index < _width; index++) index: createInstance(),
+ };
- mapSimpleValue = Map.fromIterable(
- Iterable.generate(_width),
- key: (_) => createInstance(),
- );
+ mapSimpleValue = {
+ for (var index = 0; index < _width; index++) createInstance(): index,
+ };
- map = Map.fromIterable(
- Iterable.generate(_width),
- key: (_) => createInstance(),
- value: (_) => createInstance(),
- );
+ map = {
+ for (var _ in Iterable.generate(_width))
+ createInstance(): createInstance(),
+ };
- final _closureMember = createInstance(note: 'closure');
+ final closureMember = createInstance(note: 'closure');
closure = () {
- if (identityHashCode(_closureMember) < 0) {
+ if (identityHashCode(closureMember) < 0) {
// We need this block to show compiler [_closureMember] is in use.
}
};
- // TODO(polina-c): uncomment after figuring out how to enable records in dart format
- // record = ('foo', count: 100, garbage: createInstance(note: 'record'));
+ record = ('foo', count: 100, garbage: createInstance(note: 'record'));
}
}
@@ -135,12 +131,11 @@
final Map mapSimple = Map.fromIterable(Iterable.generate(_width));
final Map mapEmpty = {};
final Map mapOfNulls = {null: null};
- final listOfInt = Iterable.generate(300).toList();
+ final listOfInt = List.generate(300, (i) => i);
late final Map<dynamic, _MyGarbage>? mapSimpleKey;
late final Map<_MyGarbage, dynamic>? mapSimpleValue;
late final Map<_MyGarbage, _MyGarbage>? map;
late final void Function() closure;
- // TODO(polina-c): uncomment after figuring out how to enable records in dart format
- // late final (String, {int count, _MyGarbage garbage})? record;
+ late final (String, {int count, _MyGarbage garbage})? record;
}
diff --git a/packages/devtools_app/test/test_infra/fixtures/provider_app/.gitignore b/packages/devtools_app/test/test_infra/fixtures/provider_app/.gitignore
deleted file mode 100644
index 0fa6b67..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/provider_app/.gitignore
+++ /dev/null
@@ -1,46 +0,0 @@
-# Miscellaneous
-*.class
-*.log
-*.pyc
-*.swp
-.DS_Store
-.atom/
-.buildlog/
-.history
-.svn/
-
-# IntelliJ related
-*.iml
-*.ipr
-*.iws
-.idea/
-
-# The .vscode folder contains launch configuration and tasks you configure in
-# VS Code which you may wish to be included in version control, so this line
-# is commented out by default.
-#.vscode/
-
-# Flutter/Dart/Pub related
-**/doc/api/
-**/ios/Flutter/.last_build_id
-.dart_tool/
-.flutter-plugins
-.flutter-plugins-dependencies
-.packages
-.pub-cache/
-.pub/
-/build/
-
-# Web related
-lib/generated_plugin_registrant.dart
-
-# Symbolication related
-app.*.symbols
-
-# Obfuscation related
-app.*.map.json
-
-# Android Studio will place build artifacts here
-/android/app/debug
-/android/app/profile
-/android/app/release
diff --git a/packages/devtools_app/test/test_infra/fixtures/provider_app/.metadata b/packages/devtools_app/test/test_infra/fixtures/provider_app/.metadata
deleted file mode 100644
index 083256c..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/provider_app/.metadata
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
- revision: 25134a16d128ed22dc0ad8d41d2b931fcad3b014
- channel: master
-
-project_type: app
diff --git a/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/main.dart b/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/main.dart
deleted file mode 100644
index 5d25766..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/main.dart
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// ignore: unused_import, allows the tests to use functions from tester.dart
-
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:provider/single_child_widget.dart';
-
-import 'mixin.dart';
-// ignore: unused_import, allows the tests to use functions from tester.dart
-import 'tester.dart';
-
-// This lint gets in the way of testing the provider package.
-// ignore_for_file: unnecessary_getters_setters
-
-void main() {
- runApp(const MyApp());
-}
-
-class MyApp extends StatefulWidget {
- const MyApp({super.key});
-
- @override
- State<MyApp> createState() => _MyAppState();
-}
-
-class _MyAppState extends State<MyApp> {
- var _providers = <SingleChildWidget>[];
- var _totalProvidersAdded = 0;
-
- @override
- Widget build(BuildContext context) {
- return MultiProvider(
- providers: [
- ChangeNotifierProvider(create: (context) => Counter()),
- ..._providers,
- ],
- builder: (context, _) => MaterialApp(
- home: Scaffold(
- body: SizedBox.expand(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Text('Providers count ${_providers.length + 1}'),
- Text(context.watch<Counter>().count.toString()),
- ElevatedButton(
- key: const Key('increment'),
- onPressed: () => context.read<Counter>().increment(),
- child: const Icon(Icons.add),
- ),
- ],
- ),
- ),
- floatingActionButton: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- FloatingActionButton(
- key: const Key('add'),
- onPressed: () {
- setState(() {
- _providers = [
- ..._providers,
- Provider<int>.value(value: _totalProvidersAdded++),
- ];
- });
- },
- child: const Icon(Icons.add),
- ),
- FloatingActionButton(
- key: const Key('remove'),
- onPressed: () {
- setState(() {
- _providers = List.of(_providers)..removeLast();
- });
- },
- child: const Icon(Icons.remove),
- ),
- ],
- ),
- ),
- ),
- );
- }
-}
-
-class Counter with ChangeNotifier, Mixin {
- int _count = 0;
- int get count => _count;
-
- final complex = ComplexObject();
-
- void increment() {
- _count++;
- notifyListeners();
- }
-
- @override
- // ignore: hash_and_equals, overriding the hashcode for testing purposes
- int get hashCode => 42;
-}
-
-enum Enum { a, b }
-
-final _token = Object();
-
-class ComplexObject {
- Enum enumeration = Enum.a;
- void nill;
- bool boolean = false;
- int integer = 0;
- double float = 0.42;
- String string = 'hello world';
- Object plainInstance = const _SubObject('hello world');
-
- int lateWithInitializer = 21;
- late int uninitializedLate;
-
- final int finalVar = 42;
-
- int get getter => 42;
-
- int _getterAndSetter = 0;
- int get getterAndSetter => _getterAndSetter;
- set getterAndSetter(int value) => _getterAndSetter = value;
-
- var map = <Object?, Object?>{
- 'list': [42],
- 'string': 'string',
- 42: 'number_key',
- true: 'bool_key',
- null: null,
- const _SubObject('complex-key'): const _SubObject('complex-value'),
- _token: 'non-constant key',
- 'nested_map': <Object, Object>{
- 'key': 'value',
- },
- };
-
- var list = <Object?>[
- 42,
- 'string',
- [],
- <Object, Object>{},
- const _SubObject('complex-value'),
- null,
- ];
-
- @override
- // ignore: hash_and_equals, overriding the hashcode for testing purposes
- int get hashCode => 21;
-}
-
-class _SubObject {
- const _SubObject(this.value);
- final String value;
-}
diff --git a/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/mixin.dart b/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/mixin.dart
deleted file mode 100644
index 3a0b518..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/mixin.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-mixin Mixin {
- // ignore: unused_field, prefer_final_fields, the property is used for testing
- int _privateMixinProperty = 0;
-}
diff --git a/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/tester.dart b/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/tester.dart
deleted file mode 100644
index 9b230b3..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/provider_app/lib/tester.dart
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_test/flutter_test.dart';
-
-export 'package:flutter_test/flutter_test.dart';
-
-class _Tester extends WidgetController {
- _Tester() : super(WidgetsBinding.instance);
-
- @override
- Future<List<Duration>> handlePointerEventRecord(
- List<PointerEventRecord> records,
- ) {
- return Future.error(UnimplementedError());
- }
-
- @override
- Future<void> pump([Duration? duration]) {
- binding.rootElement!.markNeedsBuild();
-
- final completer = Completer<void>();
- binding.addPostFrameCallback((timeStamp) => completer.complete());
-
- return completer.future;
- }
-
- @override
- Future<int> pumpAndSettle([
- Duration duration = const Duration(milliseconds: 100),
- ]) {
- return Future.error(UnimplementedError());
- }
-}
-
-final tester = _Tester();
diff --git a/packages/devtools_app/test/test_infra/fixtures/provider_app/pubspec.yaml b/packages/devtools_app/test/test_infra/fixtures/provider_app/pubspec.yaml
deleted file mode 100644
index e530639..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/provider_app/pubspec.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: provider_app
-description: A test app that uses package:provider.
-publish_to: "none" # Remove this line if you wish to publish to pub.dev
-version: 1.0.0+1
-
-environment:
- sdk: '>=3.0.0'
- flutter: '>=3.0.0'
-
-dependencies:
- flutter:
- sdk: flutter
- flutter_test:
- sdk: flutter
- provider: ^5.0.0
-
-flutter:
- uses-material-design: true
diff --git a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/.gitignore b/packages/devtools_app/test/test_infra/fixtures/riverpod_app/.gitignore
deleted file mode 100644
index 0fa6b67..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/.gitignore
+++ /dev/null
@@ -1,46 +0,0 @@
-# Miscellaneous
-*.class
-*.log
-*.pyc
-*.swp
-.DS_Store
-.atom/
-.buildlog/
-.history
-.svn/
-
-# IntelliJ related
-*.iml
-*.ipr
-*.iws
-.idea/
-
-# The .vscode folder contains launch configuration and tasks you configure in
-# VS Code which you may wish to be included in version control, so this line
-# is commented out by default.
-#.vscode/
-
-# Flutter/Dart/Pub related
-**/doc/api/
-**/ios/Flutter/.last_build_id
-.dart_tool/
-.flutter-plugins
-.flutter-plugins-dependencies
-.packages
-.pub-cache/
-.pub/
-/build/
-
-# Web related
-lib/generated_plugin_registrant.dart
-
-# Symbolication related
-app.*.symbols
-
-# Obfuscation related
-app.*.map.json
-
-# Android Studio will place build artifacts here
-/android/app/debug
-/android/app/profile
-/android/app/release
diff --git a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/.metadata b/packages/devtools_app/test/test_infra/fixtures/riverpod_app/.metadata
deleted file mode 100644
index 083256c..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/.metadata
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
- revision: 25134a16d128ed22dc0ad8d41d2b931fcad3b014
- channel: master
-
-project_type: app
diff --git a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/README.md b/packages/devtools_app/test/test_infra/fixtures/riverpod_app/README.md
deleted file mode 100644
index c3f4718..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# riverpod_app
-
-A new Flutter project.
-
-## Getting Started
-
-This project is a starting point for a Flutter application.
-
-A few resources to get you started if this is your first Flutter project:
-
-- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
-- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
-
-For help getting started with Flutter, view our
-[online documentation](https://flutter.dev/docs), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
diff --git a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/lib/main.dart b/packages/devtools_app/test/test_infra/fixtures/riverpod_app/lib/main.dart
deleted file mode 100644
index 3241d4a..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/lib/main.dart
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// ignore: unused_import, allows the tests to use functions from tester.dart
-
-import 'package:flutter/material.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-
-// ignore: unused_import, allows the tests to use functions from tester.dart
-import 'tester.dart';
-
-final container = ProviderContainer();
-
-void main() {
- runApp(
- UncontrolledProviderScope(
- container: container,
- child: const MyApp(),
- ),
- );
-}
-
-final counterProvider = StateNotifierProvider<Counter, int>((ref) => Counter());
-
-class MyApp extends ConsumerWidget {
- const MyApp({super.key});
-
- @override
- Widget build(BuildContext context, WidgetRef ref) {
- return MaterialApp(
- home: Scaffold(
- appBar: AppBar(
- title: const Text('Counter'),
- ),
- body: Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- const Text('You clicked this many times on the button:'),
- Text(
- ref.watch(counterProvider).toString(),
- style: Theme.of(context).textTheme.headlineMedium,
- ),
- ],
- ),
- ),
- floatingActionButton: FloatingActionButton(
- key: const Key('increment'),
- onPressed: () => ref.read(counterProvider.notifier).increment(),
- child: const Icon(Icons.add),
- ),
- ),
- );
- }
-}
-
-class Counter extends StateNotifier<int> {
- Counter() : super(0);
-
- void increment() => state++;
-
- @override
- // ignore: hash_and_equals, overriding the hashcode for testing purposes
- int get hashCode => 42;
-}
diff --git a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/lib/tester.dart b/packages/devtools_app/test/test_infra/fixtures/riverpod_app/lib/tester.dart
deleted file mode 100644
index 486b295..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/lib/tester.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:developer';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_test/flutter_test.dart';
-
-export 'package:flutter_test/flutter_test.dart';
-
-class _Tester extends WidgetController {
- _Tester() : super(WidgetsBinding.instance);
-
- @override
- Future<List<Duration>> handlePointerEventRecord(
- List<PointerEventRecord> records,
- ) {
- return Future.error(UnimplementedError());
- }
-
- @override
- Future<void> pump([Duration? duration]) {
- binding.rootElement!.markNeedsBuild();
-
- final completer = Completer<void>();
- binding.addPostFrameCallback((timeStamp) => completer.complete());
-
- return completer.future;
- }
-
- @override
- Future<int> pumpAndSettle([
- Duration duration = const Duration(milliseconds: 100),
- ]) {
- return Future.error(UnimplementedError());
- }
-}
-
-final tester = _Tester();
-
-Future<T> $await<T>(Future<T> future, String id) async {
- try {
- return await future;
- } finally {
- postEvent('future_completed', {'id': id});
- }
-}
diff --git a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/pubspec.yaml b/packages/devtools_app/test/test_infra/fixtures/riverpod_app/pubspec.yaml
deleted file mode 100644
index 6787f6e..0000000
--- a/packages/devtools_app/test/test_infra/fixtures/riverpod_app/pubspec.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: riverpod_app
-description: A test app that uses package:riverpod.
-publish_to: "none" # Remove this line if you wish to publish to pub.dev
-version: 1.0.0+1
-
-environment:
- sdk: '>=3.0.0'
- flutter: '>=3.0.0'
-
-dependencies:
- flutter:
- sdk: flutter
- flutter_riverpod: ^2.0.0-dev.5
- flutter_test:
- sdk: flutter
-
-flutter:
- uses-material-design: true
diff --git a/packages/devtools_app/test/test_infra/flutter_test_driver.dart b/packages/devtools_app/test/test_infra/flutter_test_driver.dart
index 5abbcf4..400300d 100644
--- a/packages/devtools_app/test/test_infra/flutter_test_driver.dart
+++ b/packages/devtools_app/test/test_infra/flutter_test_driver.dart
@@ -340,10 +340,27 @@
_vmServiceWsUri =
convertToWebSocketUrl(serviceProtocolUrl: _vmServiceWsUri);
- vmService = VmServiceWrapper(
- await vmServiceConnectUri(_vmServiceWsUri.toString()),
- _vmServiceWsUri,
- trackFutures: true,
+ vmService = await vmServiceConnectUriWithFactory<VmServiceWrapper>(
+ _vmServiceWsUri.toString(),
+ vmServiceFactory: ({
+ // ignore: avoid-dynamic, mirrors types of [VmServiceFactory].
+ required Stream<dynamic> /*String|List<int>*/ inStream,
+ required void Function(String message) writeMessage,
+ Log? log,
+ DisposeHandler? disposeHandler,
+ Future? streamClosed,
+ String? wsUri,
+ bool trackFutures = false,
+ }) =>
+ VmServiceWrapper.defaultFactory(
+ inStream: inStream,
+ writeMessage: writeMessage,
+ log: log,
+ disposeHandler: disposeHandler,
+ streamClosed: streamClosed,
+ wsUri: wsUri,
+ trackFutures: true,
+ ),
);
final vmServiceLocal = vmService!;
@@ -412,6 +429,7 @@
final vmServiceLocal = vmService;
if (vmServiceLocal != null) {
_debugPrint('Closing VM service');
+ await Future.delayed(const Duration(milliseconds: 500));
await vmServiceLocal.dispose();
}
if (_currentRunningAppId != null) {
diff --git a/packages/devtools_app/test/test_infra/goldens/codeview_scrollbars.png b/packages/devtools_app/test/test_infra/goldens/codeview_scrollbars.png
index a8be121..82785bc 100644
--- a/packages/devtools_app/test/test_infra/goldens/codeview_scrollbars.png
+++ b/packages/devtools_app/test/test_infra/goldens/codeview_scrollbars.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/keywords.dart.golden b/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/keywords.dart.golden
index bfcd6bd..81b65d6 100644
--- a/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/keywords.dart.golden
+++ b/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/keywords.dart.golden
@@ -91,10 +91,11 @@
>
> @override
# ^^^^^^^^^ storage.type.annotation.dart
-> bool operator ==(other) {
+> bool operator ==(Object other) {
# ^^^^ support.class.dart
# ^^^^^^^^ keyword.declaration.dart
# ^^ keyword.operator.comparison.dart
+# ^^^^^^ support.class.dart
> return false;
# ^^^^^^ keyword.control.dart
# ^^^^^ constant.language.dart
diff --git a/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/literals.dart.golden b/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/literals.dart.golden
index f0da673..bbe961a 100644
--- a/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/literals.dart.golden
+++ b/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/literals.dart.golden
@@ -27,8 +27,9 @@
# ^ keyword.operator.assignment.dart
# ^^ string.interpolated.single.dart
# ^ punctuation.comma.dart
-# ^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
>const list4 = <String>['', '$a'];
@@ -39,8 +40,9 @@
# ^ keyword.operator.comparison.dart
# ^^ string.interpolated.single.dart
# ^ punctuation.comma.dart
-# ^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
>
@@ -60,8 +62,9 @@
# ^ keyword.operator.assignment.dart
# ^^ string.interpolated.single.dart
# ^ punctuation.comma.dart
-# ^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
>const set4 = <String>{'', '$a'};
@@ -72,8 +75,9 @@
# ^ keyword.operator.comparison.dart
# ^^ string.interpolated.single.dart
# ^ punctuation.comma.dart
-# ^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
>
@@ -91,8 +95,9 @@
# ^ keyword.operator.assignment.dart
# ^^ string.interpolated.single.dart
# ^ keyword.operator.ternary.dart
-# ^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
>const map3 = <String, String>{'': '$a'};
@@ -105,7 +110,8 @@
# ^ keyword.operator.comparison.dart
# ^^ string.interpolated.single.dart
# ^ keyword.operator.ternary.dart
-# ^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
diff --git a/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/string_interpolation.dart.golden b/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/string_interpolation.dart.golden
index d411646..cc0a78f 100644
--- a/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/string_interpolation.dart.golden
+++ b/packages/devtools_app/test/test_infra/goldens/syntax_highlighting/string_interpolation.dart.golden
@@ -23,8 +23,9 @@
# ^^^^^ entity.name.function.dart
# ^^^^^^^^^^^^^^ string.interpolated.single.dart
# ^^ string.interpolated.single.dart constant.character.escape.dart
-# ^^^^^^ string.interpolated.single.dart
-# ^ string.interpolated.single.dart variable.parameter.dart
+# ^^^^^ string.interpolated.single.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart
+# ^ string.interpolated.single.dart string.interpolated.expression.dart variable.parameter.dart
# ^ string.interpolated.single.dart
# ^ punctuation.terminator.dart
> print('the value after \$i is ${i + 1}');
diff --git a/packages/devtools_app/test/test_infra/matchers/matchers.dart b/packages/devtools_app/test/test_infra/matchers/matchers.dart
index c7b3b06..0c9727d 100644
--- a/packages/devtools_app/test/test_infra/matchers/matchers.dart
+++ b/packages/devtools_app/test/test_infra/matchers/matchers.dart
@@ -4,14 +4,13 @@
// ignore_for_file: avoid_print
-library matchers;
-
import 'dart:io' as io;
import 'package:devtools_app/src/shared/diagnostics/diagnostics_node.dart';
import 'package:flutter_test/flutter_test.dart';
+
import '_golden_matcher_io.dart'
- if (dart.library.html) '_golden_matcher_web.dart' as golden_matcher;
+ if (dart.library.js_interop) '_golden_matcher_web.dart' as golden_matcher;
RemoteDiagnosticsNode? findNodeMatching(
RemoteDiagnosticsNode node,
diff --git a/packages/devtools_app/test/test_infra/scenes/cpu_profiler/default.dart b/packages/devtools_app/test/test_infra/scenes/cpu_profiler/default.dart
index 89e2971..3296b31 100644
--- a/packages/devtools_app/test/test_infra/scenes/cpu_profiler/default.dart
+++ b/packages/devtools_app/test/test_infra/scenes/cpu_profiler/default.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:mockito/mockito.dart';
import 'package:stager/stager.dart';
diff --git a/packages/devtools_app/test/test_infra/scenes/memory/default.dart b/packages/devtools_app/test/test_infra/scenes/memory/default.dart
index b725105..df0e605 100644
--- a/packages/devtools_app/test/test_infra/scenes/memory/default.dart
+++ b/packages/devtools_app/test/test_infra/scenes/memory/default.dart
@@ -14,6 +14,7 @@
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_shared/devtools_shared.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -93,8 +94,8 @@
profilePaneController: profileController,
)
..offline = true
- ..memoryTimeline.offlineData.clear()
- ..memoryTimeline.offlineData.addAll(memoryJson.data);
+ ..controllers.memoryTimeline.offlineData.clear()
+ ..controllers.memoryTimeline.offlineData.addAll(memoryJson.data);
}
@override
@@ -152,7 +153,6 @@
return AdaptedHeapData(
objects,
rootIndex: rootIndex,
- isolateId: '',
);
}
diff --git a/packages/devtools_app/test/test_infra/scenes/memory/diff_snapshot.dart b/packages/devtools_app/test/test_infra/scenes/memory/diff_snapshot.dart
index a01489f..ec22f4e 100644
--- a/packages/devtools_app/test/test_infra/scenes/memory/diff_snapshot.dart
+++ b/packages/devtools_app/test/test_infra/scenes/memory/diff_snapshot.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:stager/stager.dart';
diff --git a/packages/devtools_app/test/test_infra/scenes/performance/default.dart b/packages/devtools_app/test/test_infra/scenes/performance/default.dart
index 97a8046..44904ae 100644
--- a/packages/devtools_app/test/test_infra/scenes/performance/default.dart
+++ b/packages/devtools_app/test/test_infra/scenes/performance/default.dart
@@ -11,7 +11,7 @@
import 'package:devtools_app/src/shared/feature_flags.dart';
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:stager/stager.dart';
diff --git a/packages/devtools_app/test/test_infra/test_data/dart_tooling_api/mock_api.dart b/packages/devtools_app/test/test_infra/test_data/dart_tooling_api/mock_api.dart
index 5dcd071..0a3ce66 100644
--- a/packages/devtools_app/test/test_infra/test_data/dart_tooling_api/mock_api.dart
+++ b/packages/devtools_app/test/test_infra/test_data/dart_tooling_api/mock_api.dart
@@ -66,6 +66,7 @@
'executeCommand': true,
'selectDevice': true,
'openDevToolsPage': true,
+ 'openDevToolsExternally': true,
'hotReload': true,
'hotRestart': true,
};
@@ -73,6 +74,7 @@
server.registerMethod('vsCode.initialize', initialize);
server.registerMethod('vsCode.executeCommand', executeCommand);
server.registerMethod('vsCode.selectDevice', selectDevice);
+ server.registerMethod('vsCode.enablePlatformType', enablePlatformType);
server.registerMethod('vsCode.openDevToolsPage', noOpHandler);
server.registerMethod('vsCode.hotReload', noOpHandler);
server.registerMethod('vsCode.hotRestart', noOpHandler);
@@ -113,11 +115,36 @@
platform: 'web-javascript',
platformType: 'web',
),
+ VsCodeDeviceImpl(
+ id: 'web-server',
+ name: 'Web Server',
+ category: 'web',
+ emulator: false,
+ emulatorId: null,
+ ephemeral: true,
+ platform: 'web-javascript',
+ platformType: 'web',
+ ),
];
+ /// The current set of enabled platform types.
+ ///
+ /// Defauls are set in [connectDevices].
+ final _enabledPlatformTypes = <String>{};
+
/// The current set of devices being presented to the embedded panel.
final _devices = <VsCodeDevice>[];
+ /// The current set of devices whose platform types are enabled.
+ List<VsCodeDevice> get _enabledDevices => _devices
+ .where((device) => _enabledPlatformTypes.contains(device.platformType))
+ .toList();
+
+ /// The current set of devices whose platform types are not enabled.
+ List<VsCodeDevice> get _disabledDevices => _devices
+ .where((device) => !_enabledPlatformTypes.contains(device.platformType))
+ .toList();
+
/// The current set of debug sessions that are running.
final _debugSessions = <VsCodeDebugSession>[];
@@ -136,7 +163,7 @@
}
/// Simulates executing a VS Code command requested by the embedded panel.
- Future<Object?> executeCommand(json_rpc_2.Parameters parameters) async {
+ Future<Object?> executeCommand(json_rpc_2.Parameters parameters) {
final params = parameters.asMap;
final command = params['command'];
switch (command) {
@@ -154,6 +181,18 @@
return true;
}
+ /// Simulates a request to enable a platform type to allow additional devices
+ /// to be used.
+ Future<bool> enablePlatformType(json_rpc_2.Parameters parameters) async {
+ final params = parameters.asMap;
+ _enabledPlatformTypes.add(params['platformType'] as String);
+ // Add some delay because the real impl will need to prompt + run
+ // `flutter create`.
+ await Future.delayed(const Duration(seconds: 1));
+ _sendDevicesChanged();
+ return true;
+ }
+
/// A no-op handler for method handlers that don't require an implementation
/// but need to exist so that the request/response is successful.
void noOpHandler(json_rpc_2.Parameters _) {}
@@ -164,7 +203,10 @@
_devices
..clear()
..addAll(_mockDevices);
- _selectedDeviceId = _devices.lastOrNull?.id;
+ _enabledPlatformTypes
+ ..clear()
+ ..addAll(['macos', 'android']);
+ _selectedDeviceId = _enabledDevices.lastOrNull?.id;
_sendDevicesChanged();
}
@@ -179,6 +221,7 @@
flutterMode: mode,
flutterDeviceId: deviceId,
debuggerType: 'Flutter',
+ projectRootPath: null,
),
);
_sendDebugSessionsChanged();
@@ -202,7 +245,8 @@
server.sendNotification(
'${VsCodeApi.jsonApiName}.${VsCodeApi.jsonDevicesChangedEvent}',
VsCodeDevicesEventImpl(
- devices: _devices,
+ devices: _enabledDevices,
+ unsupportedDevices: _disabledDevices,
selectedDeviceId: _selectedDeviceId,
).toJson(),
);
diff --git a/packages/devtools_app/test/test_infra/test_data/extensions.dart b/packages/devtools_app/test/test_infra/test_data/extensions.dart
index 0cceaab..3b8b3d8 100644
--- a/packages/devtools_app/test/test_infra/test_data/extensions.dart
+++ b/packages/devtools_app/test/test_infra/test_data/extensions.dart
@@ -7,10 +7,11 @@
final testExtensions = [fooExtension, barExtension, providerExtension];
final fooExtension = DevToolsExtensionConfig.parse({
- DevToolsExtensionConfig.nameKey: 'Foo',
+ DevToolsExtensionConfig.nameKey: 'foo',
DevToolsExtensionConfig.issueTrackerKey: 'www.google.com',
DevToolsExtensionConfig.versionKey: '1.0.0',
DevToolsExtensionConfig.pathKey: '/path/to/foo',
+ DevToolsExtensionConfig.isPubliclyHostedKey: 'false',
});
final barExtension = DevToolsExtensionConfig.parse({
@@ -19,6 +20,7 @@
DevToolsExtensionConfig.versionKey: '2.0.0',
DevToolsExtensionConfig.materialIconCodePointKey: 0xe638,
DevToolsExtensionConfig.pathKey: '/path/to/bar',
+ DevToolsExtensionConfig.isPubliclyHostedKey: 'false',
});
final providerExtension = DevToolsExtensionConfig.parse({
@@ -28,4 +30,5 @@
DevToolsExtensionConfig.versionKey: '3.0.0',
DevToolsExtensionConfig.materialIconCodePointKey: 0xe50a,
DevToolsExtensionConfig.pathKey: '/path/to/provider',
+ DevToolsExtensionConfig.isPubliclyHostedKey: 'true',
});
diff --git a/packages/devtools_app/test/test_infra/test_data/memory/heap/heap_data.dart b/packages/devtools_app/test/test_infra/test_data/memory/heap/heap_data.dart
index 9de0c19..f6a445e 100644
--- a/packages/devtools_app/test/test_infra/test_data/memory/heap/heap_data.dart
+++ b/packages/devtools_app/test/test_infra/test_data/memory/heap/heap_data.dart
@@ -2,7 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:io';
+
import 'package:devtools_app/src/shared/memory/adapted_heap_data.dart';
+import 'package:vm_service/vm_service.dart';
const _dataDir = 'test/test_infra/test_data/memory/heap/';
@@ -20,8 +23,7 @@
/// Loads the heap data from a file.
///
/// Format is format used by [NativeRuntime.writeHeapSnapshotToFile].
- Future<AdaptedHeapData> loadHeap() =>
- AdaptedHeapData.fromFile('$_dataDir$fileName', isolateId: 'test');
+ Future<AdaptedHeapData> loadHeap() => heapFromFile('$_dataDir$fileName');
}
List<GoldenHeapTest> goldenHeapTests = <GoldenHeapTest>[
@@ -42,3 +44,13 @@
appClassName: 'MyApp',
),
];
+
+Future<AdaptedHeapData> heapFromFile(
+ String fileName,
+) async {
+ final file = File(fileName);
+ final bytes = await file.readAsBytes();
+ final data = bytes.buffer.asByteData();
+ final graph = HeapSnapshotGraph.fromChunks([data]);
+ return AdaptedHeapData.fromHeapSnapshot(graph);
+}
diff --git a/packages/devtools_app/test/test_infra/test_data/syntax_highlighting/keywords.dart b/packages/devtools_app/test/test_infra/test_data/syntax_highlighting/keywords.dart
index 6da845e..65a3574 100644
--- a/packages/devtools_app/test/test_infra/test_data/syntax_highlighting/keywords.dart
+++ b/packages/devtools_app/test/test_infra/test_data/syntax_highlighting/keywords.dart
@@ -24,7 +24,7 @@
set foo(String value) {}
@override
- bool operator ==(other) {
+ bool operator ==(Object other) {
return false;
}
}
diff --git a/packages/devtools_app/test/test_infra/utils/debugger_utils.dart b/packages/devtools_app/test/test_infra/utils/debugger_utils.dart
new file mode 100644
index 0000000..bac11aa
--- /dev/null
+++ b/packages/devtools_app/test/test_infra/utils/debugger_utils.dart
@@ -0,0 +1,15 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:devtools_app_shared/ui.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+Finder findDebuggerButtonWithIcon(IconData icon) => find.ancestor(
+ of: find.byWidgetPredicate(
+ (Widget widget) =>
+ widget is MaterialIconLabel && widget.iconData == icon,
+ ),
+ matching: find.byType(OutlinedButton),
+ );
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/class_hierarchy_explorer_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/class_hierarchy_explorer_test.dart
index 289f242..92eee37 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/class_hierarchy_explorer_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/class_hierarchy_explorer_test.dart
@@ -7,6 +7,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vm_service/vm_service.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/object_inspector_view_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/object_inspector_view_test.dart
index ee5d696..fd66817 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/object_inspector_view_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/object_inspector_view_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/object_viewport_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/object_viewport_test.dart
index 4164e75..0df5322 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/object_viewport_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/object_viewport_test.dart
@@ -14,6 +14,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_class_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_class_display_test.dart
index b6872e6..7a5c00f 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_class_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_class_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_code_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_code_display_test.dart
index 371700a..f9c981a 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_code_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_code_display_test.dart
@@ -11,6 +11,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_developer_common_widgets_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_developer_common_widgets_test.dart
index cc1b93f..acd5608 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_developer_common_widgets_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_developer_common_widgets_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_field_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_field_display_test.dart
index 9b3eafe..3333bb6 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_field_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_field_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_function_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_function_display_test.dart
index a84bdc3..d74f46f 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_function_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_function_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_ic_data_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_ic_data_display_test.dart
index 3bf1e9a..6698e7a 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_ic_data_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_ic_data_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_library_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_library_display_test.dart
index cc014a9..971ecf8 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_library_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_library_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_object_pool_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_object_pool_display_test.dart
index 15711cf..6e38879 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_object_pool_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_object_pool_display_test.dart
@@ -9,6 +9,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_script_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_script_display_test.dart
index bf63d38..b572c7f 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_script_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_script_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test/vm_developer/object_inspector/vm_simple_list_display_test.dart b/packages/devtools_app/test/vm_developer/object_inspector/vm_simple_list_display_test.dart
index f377894..84df6f2 100644
--- a/packages/devtools_app/test/vm_developer/object_inspector/vm_simple_list_display_test.dart
+++ b/packages/devtools_app/test/vm_developer/object_inspector/vm_simple_list_display_test.dart
@@ -8,6 +8,7 @@
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';
import 'package:devtools_test/devtools_test.dart';
+import 'package:devtools_test/helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
diff --git a/packages/devtools_app/test_driver/integration_test.dart b/packages/devtools_app/test_driver/integration_test.dart
index b395246..eeb38f4 100644
--- a/packages/devtools_app/test_driver/integration_test.dart
+++ b/packages/devtools_app/test_driver/integration_test.dart
@@ -5,6 +5,7 @@
// ignore_for_file: avoid_print
import 'dart:io';
+import 'dart:typed_data';
import 'package:collection/collection.dart';
import 'package:flutter_driver/flutter_driver.dart';
@@ -95,9 +96,9 @@
);
}
-double _percentDiff(List<int> goldenBytes, List<int> screenshotBytes) {
+double _percentDiff(Uint8List goldenBytes, List<int> screenshotBytes) {
final goldenImage = decodeImage(goldenBytes);
- final screenshotImage = decodeImage(screenshotBytes);
+ final screenshotImage = decodeImage(Uint8List.fromList(screenshotBytes));
if (goldenImage == null || screenshotImage == null) {
print('Cannot decode one or both of the golden images.');
return _defaultDiffPercentage;
diff --git a/packages/devtools_app_shared/CHANGELOG.md b/packages/devtools_app_shared/CHANGELOG.md
index c278921..df089f3 100644
--- a/packages/devtools_app_shared/CHANGELOG.md
+++ b/packages/devtools_app_shared/CHANGELOG.md
@@ -1,3 +1,29 @@
+## 0.0.8
+* Add `ServiceManager.resolvedUriManager` for looking up package and file uris from
+a VM service connection.
+* Migrate from `dart:html` to `package:web`.
+
+## 0.0.7
+* Bump minimum Dart SDK version to `3.3.0-91.0.dev` and minimum Flutter SDK version to `3.17.0-0.0.pre`.
+* Bump `package:vm_service` dependency to ^13.0.0.
+* Bump the `package:devtools_shared` dependency to ^6.0.1.
+* Remove public getter `libraryRef`, and public methods `getLibrary` and `retrieveFullValueAsString` from `EvalOnDartLibrary`.
+* Change `toString` output for `UnknownEvalException`, `EvalSentinelException`, and `EvalErrorException`.
+* Remove public getters `flutterVersionSummary`, `frameworkVersionSummary`, and `engineVersionSummary` from `FlutterVersion`.
+* Remove public getters `onIsolateCreated` and `onIsolateExited` from `IsolateManager`.
+* Remove public getter `firstFrameReceived` from `ServiceExtensionManager`.
+* Add `RoundedButtonGroup` common widget.
+
+## 0.0.6
+* Add `profilePlatformChannels` to known service extensions.
+* Fix a bug where service extension states were not getting cleared on app disconnect.
+* Add optional parameter `id` to `DisposerMixin.addAutoDisposeListener` and
+`AutoDisposeMixin.addAutoDisposeListener` that allows for tagging a listener
+with a specific id.
+* Add optional parameter `excludeIds` to `DisposerMixin.cancelListeners` and
+`AutoDisposeMixin.cancelListeners` that allows for excluding listeners with
+a specific id from the cancel operation.
+
## 0.0.5
* Fix bug where registered services were not getting cleared on app disconnect.
* Fix a bug with the logic to wait for a service extension's availability.
diff --git a/packages/devtools_app_shared/README.md b/packages/devtools_app_shared/README.md
index 365acb0..9ef62c9 100644
--- a/packages/devtools_app_shared/README.md
+++ b/packages/devtools_app_shared/README.md
@@ -9,7 +9,7 @@
Add a dependency to your `pubspec.yaml` file:
```yaml
-devtools_app_shared: ^0.0.5
+devtools_app_shared: ^0.0.7
```
Import the component library that you need:
@@ -124,14 +124,7 @@
final vmService = await connect<VmService>(
uri: Uri.parse(vmServiceUri),
finishedCompleter: finishedCompleter,
- createService: ({
- // ignore: avoid-dynamic, code needs to match API from VmService.
- required Stream<dynamic> /*String|List<int>*/ inStream,
- required void Function(String message) writeMessage,
- required Uri connectedUri,
- }) {
- return VmService(inStream, writeMessage);
- },
+ serviceFactory: VmService.defaultFactory,
);
await serviceManager.vmServiceOpened(
diff --git a/packages/devtools_app_shared/example/service_example.dart b/packages/devtools_app_shared/example/service_example.dart
index 5e01774..1da1f3f 100644
--- a/packages/devtools_app_shared/example/service_example.dart
+++ b/packages/devtools_app_shared/example/service_example.dart
@@ -32,14 +32,7 @@
final vmService = await connect<VmService>(
uri: Uri.parse(someVmServiceUri),
finishedCompleter: finishedCompleter,
- createService: ({
- // ignore: avoid-dynamic, code needs to match API from VmService.
- required Stream<dynamic> /*String|List<int>*/ inStream,
- required void Function(String message) writeMessage,
- required Uri connectedUri,
- }) {
- return VmService(inStream, writeMessage);
- },
+ serviceFactory: VmService.defaultFactory,
);
await serviceManager.vmServiceOpened(
diff --git a/packages/devtools_app_shared/lib/service.dart b/packages/devtools_app_shared/lib/service.dart
index cdad654..ddf3650 100644
--- a/packages/devtools_app_shared/lib/service.dart
+++ b/packages/devtools_app_shared/lib/service.dart
@@ -7,6 +7,7 @@
export 'src/service/flutter_version.dart';
export 'src/service/isolate_manager.dart' hide TestIsolateManager;
export 'src/service/isolate_state.dart';
+export 'src/service/resolved_uri_manager.dart';
export 'src/service/service_extension_manager.dart'
hide TestServiceExtensionManager;
export 'src/service/service_manager.dart';
diff --git a/packages/devtools_app_shared/lib/src/service/connected_app.dart b/packages/devtools_app_shared/lib/src/service/connected_app.dart
index 8150596..118e47c 100644
--- a/packages/devtools_app_shared/lib/src/service/connected_app.dart
+++ b/packages/devtools_app_shared/lib/src/service/connected_app.dart
@@ -14,6 +14,9 @@
final _log = Logger('connected_app');
const flutterLibraryUri = 'package:flutter/src/widgets/binding.dart';
+
+// TODO(kenz): if we want to support debugging dart2wasm web apps, we will need
+// to check for the presence of a different library.
const dartHtmlLibraryUri = 'dart:html';
// TODO(https://github.com/flutter/devtools/issues/6239): try to remove this.
diff --git a/packages/devtools_app_shared/lib/src/service/eval_on_dart_library.dart b/packages/devtools_app_shared/lib/src/service/eval_on_dart_library.dart
index 43b6753..0188144 100644
--- a/packages/devtools_app_shared/lib/src/service/eval_on_dart_library.dart
+++ b/packages/devtools_app_shared/lib/src/service/eval_on_dart_library.dart
@@ -17,7 +17,6 @@
import '../utils/auto_dispose.dart';
import 'service_manager.dart';
-import 'service_utils.dart';
final _log = Logger('eval_on_dart_library');
@@ -102,9 +101,8 @@
int _currentRequestId = 0;
late Completer<LibraryRef> _libraryRef;
- Future<LibraryRef> get libraryRef => _libraryRef.future;
- Completer? allPendingRequestsDone;
+ Completer<void>? allPendingRequestsDone;
Isolate? get isolate => _isolate;
Isolate? _isolate;
@@ -292,10 +290,6 @@
return value;
}
- Future<Library?> getLibrary(LibraryRef instance, Disposable isAlive) {
- return getObjHelper(instance, isAlive);
- }
-
Future<Class?> getClass(ClassRef instance, Disposable isAlive) {
return getObjHelper(instance, isAlive);
}
@@ -602,7 +596,7 @@
return response.future;
}
- final Future previousDone = allPendingRequestsDone!.future;
+ final Future<void> previousDone = allPendingRequestsDone!.future;
allPendingRequestsDone = response;
// Schedule this request only after the previous request completes.
try {
@@ -633,10 +627,6 @@
return value;
});
}
-
- Future<String?> retrieveFullValueAsString(InstanceRef stringRef) {
- return service.retrieveFullStringValue(_isolateRef!.id!, stringRef);
- }
}
final class LibraryNotFound implements Exception {
@@ -644,7 +634,10 @@
final String name;
- String get message => 'Library matchining $name not found';
+ String get message => 'Library matching $name not found';
+
+ @override
+ String toString() => message;
}
final class FutureFailedException implements Exception {
@@ -675,7 +668,7 @@
@override
String toString() {
- return 'Unknown error during the evaluation of `$expression`: $exception';
+ return 'Unknown error during the evaluation of `$expression`: $exception for scope: $scope';
}
}
@@ -702,7 +695,7 @@
@override
String toString() {
- return 'Evaluation `$expression` returned the Sentinel $sentinel';
+ return 'Evaluation `$expression` returned the Sentinel $sentinel for scope: $scope';
}
}
@@ -719,6 +712,6 @@
@override
String toString() {
- return 'Evaluation `$expression` failed with $errorRef';
+ return 'Evaluation `$expression` failed with $errorRef for scope: $scope';
}
}
diff --git a/packages/devtools_app_shared/lib/src/service/flutter_version.dart b/packages/devtools_app_shared/lib/src/service/flutter_version.dart
index c3eb6e8..6f9a32d 100644
--- a/packages/devtools_app_shared/lib/src/service/flutter_version.dart
+++ b/packages/devtools_app_shared/lib/src/service/flutter_version.dart
@@ -57,20 +57,8 @@
final SemanticVersion? dartSdkVersion;
- String get flutterVersionSummary => [
- if (version != 'unknown') version,
- 'channel $channel',
- repositoryUrl ?? 'unknown source',
- ].join(' • ');
-
- String get frameworkVersionSummary =>
- 'revision $frameworkRevision • $frameworkCommitDate';
-
- String get engineVersionSummary => 'revision $engineRevision';
-
@override
- // ignore: avoid-dynamic, necessary here.
- bool operator ==(other) {
+ bool operator ==(Object other) {
if (other is! FlutterVersion) return false;
return version == other.version &&
channel == other.channel &&
diff --git a/packages/devtools_app_shared/lib/src/service/isolate_manager.dart b/packages/devtools_app_shared/lib/src/service/isolate_manager.dart
index e506440..2548443 100644
--- a/packages/devtools_app_shared/lib/src/service/isolate_manager.dart
+++ b/packages/devtools_app_shared/lib/src/service/isolate_manager.dart
@@ -45,10 +45,6 @@
ValueListenable<List<IsolateRef>> get isolates => _isolates;
final _isolates = ListValueNotifier(const <IsolateRef>[]);
- Stream<IsolateRef?> get onIsolateCreated => _isolateCreatedController.stream;
-
- Stream<IsolateRef?> get onIsolateExited => _isolateExitedController.stream;
-
ValueListenable<IsolateRef?> get mainIsolate => _mainIsolate;
final _mainIsolate = ValueNotifier<IsolateRef?>(null);
diff --git a/packages/devtools_app/lib/src/service/resolved_uri_manager.dart b/packages/devtools_app_shared/lib/src/service/resolved_uri_manager.dart
similarity index 91%
rename from packages/devtools_app/lib/src/service/resolved_uri_manager.dart
rename to packages/devtools_app_shared/lib/src/service/resolved_uri_manager.dart
index e1cd917..948772f 100644
--- a/packages/devtools_app/lib/src/service/resolved_uri_manager.dart
+++ b/packages/devtools_app_shared/lib/src/service/resolved_uri_manager.dart
@@ -2,19 +2,23 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import '../shared/globals.dart';
+import 'package:vm_service/vm_service.dart';
/// Manager for handling package Uri lookup and caching.
-class ResolvedUriManager {
+final class ResolvedUriManager {
+ VmService? _service;
+
_PackagePathMappings? _packagePathMappings;
/// Initializes the [ResolvedUriManager]
- void vmServiceOpened() {
+ void vmServiceOpened(VmService service) {
+ _service = service;
_packagePathMappings = _PackagePathMappings();
}
/// Cleans up the resources of the [ResolvedUriManager]
void vmServiceClosed() {
+ _service = null;
_packagePathMappings = null;
}
@@ -27,9 +31,8 @@
Future<void> fetchPackageUris(String isolateId, List<String> uris) async {
if (uris.isEmpty) return;
if (_packagePathMappings != null) {
- final packageUris = (await serviceConnection.serviceManager.service!
- .lookupPackageUris(isolateId, uris))
- .uris;
+ final packageUris =
+ (await _service!.lookupPackageUris(isolateId, uris)).uris;
if (packageUris != null) {
_packagePathMappings!.addMappings(
@@ -50,9 +53,9 @@
/// [packageUris] List of uris to fetch full file paths for.
Future<void> fetchFileUris(String isolateId, List<String> packageUris) async {
if (_packagePathMappings != null) {
- final fileUris = (await serviceConnection.serviceManager.service!
- .lookupResolvedPackageUris(isolateId, packageUris))
- .uris;
+ final fileUris =
+ (await _service!.lookupResolvedPackageUris(isolateId, packageUris))
+ .uris;
// [_packagePathMappings] could have been set to null during the async gap
// so check that it is non-null again here.
diff --git a/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart b/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart
index 4cbee88..e8e6879 100644
--- a/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart
+++ b/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart
@@ -27,14 +27,13 @@
final IsolateManager _isolateManager;
- Future<void> get firstFrameReceived => _firstFrameReceived.future;
Completer<void> _firstFrameReceived = Completer();
bool get _firstFrameEventReceived => _firstFrameReceived.isCompleted;
final _serviceExtensionAvailable = <String, ValueNotifier<bool>>{};
- final _serviceExtensionStateController =
+ final _serviceExtensionStates =
<String, ValueNotifier<ServiceExtensionState>>{};
/// All available service extensions.
@@ -54,8 +53,8 @@
Map<IsolateRef, List<AsyncCallback>> _callbacksOnIsolateResume = {};
- ConnectedApp get connectedApp => _connectedApp;
- late ConnectedApp _connectedApp;
+ ConnectedApp get connectedApp => _connectedApp!;
+ ConnectedApp? _connectedApp;
Future<void> _handleIsolateEvent(Event event) async {
if (event.kind == EventKind.kServiceExtensionAdded) {
@@ -421,6 +420,10 @@
void vmServiceClosed() {
cancelStreamSubscriptions();
_mainIsolateClosed();
+
+ _enabledServiceExtensions.clear();
+ _callbacksOnIsolateResume.clear();
+ _connectedApp = null;
}
void _mainIsolateClosed() {
@@ -431,16 +434,38 @@
// If the isolate has closed, there is no need to wait any longer for
// service extensions that might be registered.
- for (var completer in _maybeRegisteringServiceExtensions.values) {
- if (!completer.isCompleted) {
- completer.complete(false);
- }
- }
- _maybeRegisteringServiceExtensions.clear();
+ _performActionAndClearMap<Completer<bool>>(
+ _maybeRegisteringServiceExtensions,
+ action: (completer) {
+ if (!completer.isCompleted) {
+ completer.complete(false);
+ }
+ },
+ );
- for (var listenable in _serviceExtensionAvailable.values) {
- listenable.value = false;
- }
+ _performActionAndClearMap<ValueNotifier<bool>>(
+ _serviceExtensionAvailable,
+ action: (listenable) => listenable.value = false,
+ );
+
+ _performActionAndClearMap(
+ _serviceExtensionStates,
+ action: (state) => state.value = ServiceExtensionState(
+ enabled: false,
+ value: null,
+ ),
+ );
+ }
+
+ /// Performs [action] over the values in [map], and then clears the [map] once
+ /// finished.
+ void _performActionAndClearMap<T>(
+ Map<Object, T> map, {
+ required void Function(T) action,
+ }) {
+ map
+ ..values.forEach(action)
+ ..clear();
}
/// Sets the state for a service extension and makes the call to the VMService.
@@ -512,7 +537,7 @@
}
ValueNotifier<ServiceExtensionState> _serviceExtensionState(String name) {
- return _serviceExtensionStateController.putIfAbsent(
+ return _serviceExtensionStates.putIfAbsent(
name,
() {
return ValueNotifier<ServiceExtensionState>(
diff --git a/packages/devtools_app_shared/lib/src/service/service_extensions.dart b/packages/devtools_app_shared/lib/src/service/service_extensions.dart
index edc3eee..764f824 100644
--- a/packages/devtools_app_shared/lib/src/service/service_extensions.dart
+++ b/packages/devtools_app_shared/lib/src/service/service_extensions.dart
@@ -6,6 +6,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart';
+import 'package:flutter/services.dart';
class ServiceExtension<T> {
ServiceExtension({
@@ -20,7 +21,7 @@
final bool shouldCallOnAllIsolates;
}
-class ToggleableServiceExtension<T> extends ServiceExtension {
+class ToggleableServiceExtension<T extends Object> extends ServiceExtension<T> {
ToggleableServiceExtension({
required super.extension,
required T enabledValue,
@@ -215,16 +216,23 @@
disabledValue: false,
);
+final profilePlatformChannels = ToggleableServiceExtension<bool>(
+ extension:
+ '$flutterExtensionPrefix${ServicesServiceExtensions.profilePlatformChannels.name}',
+ enabledValue: true,
+ disabledValue: false,
+);
+
// This extensions below should never be displayed as a button so does not need
// a ServiceExtensionDescription object.
final String didSendFirstFrameEvent =
'$flutterExtensionPrefix${WidgetsServiceExtensions.didSendFirstFrameEvent.name}';
-final serviceExtensionsAllowlist = <String, ServiceExtension>{
+final serviceExtensionsAllowlist = <String, ServiceExtension<Object>>{
for (var extension in _extensionDescriptions) extension.extension: extension,
};
-final List<ServiceExtension> _extensionDescriptions = [
+final List<ServiceExtension<Object>> _extensionDescriptions = [
debugAllowBanner,
debugPaint,
debugPaintBaselines,
@@ -247,6 +255,7 @@
togglePlatformMode,
toggleSelectWidgetMode,
trackRebuildWidgets,
+ profilePlatformChannels,
];
/// Service extensions that are not safe to call unless a frame has already
@@ -257,7 +266,8 @@
/// extensions are safe to run before the first frame as there is little harm
/// in setting these extensions after one frame has rendered without the
/// extension set.
-final Set<String> _unsafeBeforeFirstFrameFlutterExtensions = <ServiceExtension>[
+final Set<String> _unsafeBeforeFirstFrameFlutterExtensions =
+ <ServiceExtension<Object>>[
debugPaint,
debugPaintBaselines,
repaintRainbow,
diff --git a/packages/devtools_app_shared/lib/src/service/service_manager.dart b/packages/devtools_app_shared/lib/src/service/service_manager.dart
index 1022b2d..fa619db 100644
--- a/packages/devtools_app_shared/lib/src/service/service_manager.dart
+++ b/packages/devtools_app_shared/lib/src/service/service_manager.dart
@@ -15,6 +15,7 @@
import 'flutter_version.dart';
import 'isolate_manager.dart';
import 'isolate_state.dart';
+import 'resolved_uri_manager.dart';
import 'service_extension_manager.dart';
import 'service_extensions.dart';
import 'service_utils.dart';
@@ -80,6 +81,8 @@
final isolateManager = IsolateManager();
+ final resolvedUriManager = ResolvedUriManager();
+
/// Proxy to state inside the isolateManager, for code consizeness.
///
/// Defaults to false if there is no main isolate.
@@ -223,6 +226,7 @@
// race conditions where managers cannot listen for events soon enough.
isolateManager.vmServiceOpened(service);
serviceExtensionManager.vmServiceOpened(service, connectedApp!);
+ resolvedUriManager.vmServiceOpened(service);
await callLifecycleCallbacks(
ServiceManagerLifecycle.beforeOpenVmService,
@@ -254,6 +258,7 @@
this.service,
);
+ resolvedUriManager.vmServiceClosed();
serviceExtensionManager.vmServiceClosed();
isolateManager.handleVmServiceClosed();
_registeredMethodsForService.clear();
@@ -452,7 +457,7 @@
final bool userInitiatedConnectionState;
@override
- bool operator ==(Object? other) {
+ bool operator ==(Object other) {
return other is ConnectedState &&
other.connected == connected &&
other.userInitiatedConnectionState == userInitiatedConnectionState;
diff --git a/packages/devtools_app_shared/lib/src/service/service_utils.dart b/packages/devtools_app_shared/lib/src/service/service_utils.dart
index fe1380f..c0f8380 100644
--- a/packages/devtools_app_shared/lib/src/service/service_utils.dart
+++ b/packages/devtools_app_shared/lib/src/service/service_utils.dart
@@ -53,7 +53,7 @@
Future<void> Function(IsolateRef) callback,
) async {
final vm = await vmService.getVM();
- final futures = <Future>[];
+ final futures = <Future<void>>[];
for (final isolate in vm.isolates ?? []) {
futures.add(callback(isolate));
}
diff --git a/packages/devtools_app_shared/lib/src/ui/common.dart b/packages/devtools_app_shared/lib/src/ui/common.dart
index 83e45f2..95dc682 100644
--- a/packages/devtools_app_shared/lib/src/ui/common.dart
+++ b/packages/devtools_app_shared/lib/src/ui/common.dart
@@ -566,6 +566,117 @@
}
}
+/// A group of buttons that share a common border.
+///
+/// This widget ensures the buttons are displayed with proper borders on the
+/// interior and exterior of the group. The attirbutes for each button can be
+/// defined by [ButtonGroupItemData] and included in [items].
+final class RoundedButtonGroup extends StatelessWidget {
+ const RoundedButtonGroup({
+ super.key,
+ required this.items,
+ this.minScreenWidthForTextBeforeScaling,
+ });
+
+ final List<ButtonGroupItemData> items;
+ final double? minScreenWidthForTextBeforeScaling;
+
+ @override
+ Widget build(BuildContext context) {
+ Widget buildButton(int index) {
+ final itemData = items[index];
+ Widget button = _ButtonGroupButton(
+ buttonData: itemData,
+ roundedLeftBorder: index == 0,
+ roundedRightBorder: index == items.length - 1,
+ minScreenWidthForTextBeforeScaling: minScreenWidthForTextBeforeScaling,
+ );
+ if (index != 0) {
+ button = Container(
+ decoration: BoxDecoration(
+ border: Border(
+ left: BorderSide(
+ color: Theme.of(context).focusColor,
+ ),
+ ),
+ ),
+ child: button,
+ );
+ }
+ return button;
+ }
+
+ return SizedBox(
+ height: defaultButtonHeight,
+ child: RoundedOutlinedBorder(
+ child: Row(
+ children: [
+ for (int i = 0; i < items.length; i++) buildButton(i),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+final class _ButtonGroupButton extends StatelessWidget {
+ const _ButtonGroupButton({
+ required this.buttonData,
+ this.roundedLeftBorder = false,
+ this.roundedRightBorder = false,
+ this.minScreenWidthForTextBeforeScaling,
+ });
+
+ final ButtonGroupItemData buttonData;
+ final bool roundedLeftBorder;
+ final bool roundedRightBorder;
+ final double? minScreenWidthForTextBeforeScaling;
+
+ @override
+ Widget build(BuildContext context) {
+ return DevToolsTooltip(
+ message: buttonData.tooltip,
+ child: OutlinedButton(
+ autofocus: buttonData.autofocus,
+ style: OutlinedButton.styleFrom(
+ padding: const EdgeInsets.symmetric(horizontal: densePadding),
+ side: BorderSide.none,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.horizontal(
+ left: roundedLeftBorder ? defaultRadius : Radius.zero,
+ right: roundedRightBorder ? defaultRadius : Radius.zero,
+ ),
+ ),
+ ),
+ onPressed: buttonData.onPressed,
+ child: MaterialIconLabel(
+ label: buttonData.label,
+ iconData: buttonData.icon,
+ minScreenWidthForTextBeforeScaling:
+ minScreenWidthForTextBeforeScaling,
+ ),
+ ),
+ );
+ }
+}
+
+final class ButtonGroupItemData {
+ const ButtonGroupItemData({
+ this.label,
+ this.icon,
+ String? tooltip,
+ this.onPressed,
+ this.autofocus = false,
+ }) : tooltip = tooltip ?? label,
+ assert(label != null || icon != null);
+
+ final String? label;
+ final IconData? icon;
+ final String? tooltip;
+ final VoidCallback? onPressed;
+ final bool autofocus;
+}
+
final class DevToolsFilterButton extends StatelessWidget {
const DevToolsFilterButton({
Key? key,
diff --git a/packages/devtools_app_shared/lib/src/ui/dialogs.dart b/packages/devtools_app_shared/lib/src/ui/dialogs.dart
index 59ffee6..e7e8ba3 100644
--- a/packages/devtools_app_shared/lib/src/ui/dialogs.dart
+++ b/packages/devtools_app_shared/lib/src/ui/dialogs.dart
@@ -231,7 +231,7 @@
final class DialogApplyButton extends StatelessWidget {
const DialogApplyButton({super.key, required this.onPressed});
- final Function onPressed;
+ final void Function() onPressed;
@override
Widget build(BuildContext context) {
diff --git a/packages/devtools_app_shared/lib/src/ui/theme/_ide_theme_web.dart b/packages/devtools_app_shared/lib/src/ui/theme/_ide_theme_web.dart
index 3e143d6..48aa88a 100644
--- a/packages/devtools_app_shared/lib/src/ui/theme/_ide_theme_web.dart
+++ b/packages/devtools_app_shared/lib/src/ui/theme/_ide_theme_web.dart
@@ -2,11 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
-
import 'package:flutter/widgets.dart';
import 'package:logging/logging.dart';
+import 'package:web/helpers.dart';
import '../../utils/url/url.dart';
import '../../utils/utils.dart';
diff --git a/packages/devtools_app_shared/lib/src/ui/theme/ide_theme.dart b/packages/devtools_app_shared/lib/src/ui/theme/ide_theme.dart
index 6f4189e..306570b 100644
--- a/packages/devtools_app_shared/lib/src/ui/theme/ide_theme.dart
+++ b/packages/devtools_app_shared/lib/src/ui/theme/ide_theme.dart
@@ -6,7 +6,8 @@
import 'theme.dart';
-export '_ide_theme_desktop.dart' if (dart.library.html) '_ide_theme_web.dart';
+export '_ide_theme_desktop.dart'
+ if (dart.library.js_interop) '_ide_theme_web.dart';
/// IDE-supplied theming.
final class IdeTheme {
diff --git a/packages/devtools_app_shared/lib/src/ui/theme/theme.dart b/packages/devtools_app_shared/lib/src/ui/theme/theme.dart
index 62fe725..2389eff 100644
--- a/packages/devtools_app_shared/lib/src/ui/theme/theme.dart
+++ b/packages/devtools_app_shared/lib/src/ui/theme/theme.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'dart:ui';
-
import 'package:flutter/material.dart';
import '../ui_utils.dart';
@@ -261,6 +259,7 @@
double get inputDecorationElementHeight => scaleByFontFactor(20.0);
// Padding / spacing constants:
+const largeSpacing = 32.0;
const defaultSpacing = 16.0;
const intermediateSpacing = 12.0;
const denseSpacing = 8.0;
diff --git a/packages/devtools_app_shared/lib/src/utils/auto_dispose.dart b/packages/devtools_app_shared/lib/src/utils/auto_dispose.dart
index 227701e..263dcfb 100644
--- a/packages/devtools_app_shared/lib/src/utils/auto_dispose.dart
+++ b/packages/devtools_app_shared/lib/src/utils/auto_dispose.dart
@@ -45,8 +45,9 @@
void addAutoDisposeListener(
Listenable? listenable, [
VoidCallback? listener,
+ String? id,
]) {
- _delegate.addAutoDisposeListener(listenable, listener ?? _refresh);
+ _delegate.addAutoDisposeListener(listenable, listener ?? _refresh, id);
}
@override
@@ -79,8 +80,8 @@
}
@override
- void cancelListeners() {
- _delegate.cancelListeners();
+ void cancelListeners({List<String> excludeIds = const <String>[]}) {
+ _delegate.cancelListeners(excludeIds: excludeIds);
}
@override
@@ -119,6 +120,10 @@
final List<Listenable> _listenables = [];
final List<VoidCallback> _listeners = [];
+ /// An [Expando] that tracks listener ids when [addAutoDisposeListener] is
+ /// called with a non-null [id] parameter.
+ final _listenerIdExpando = Expando<String>();
+
/// Track a stream subscription to be automatically cancelled on dispose.
void autoDisposeStreamSubscription(StreamSubscription subscription) {
_subscriptions.add(subscription);
@@ -135,11 +140,16 @@
void addAutoDisposeListener(
Listenable? listenable, [
VoidCallback? listener,
+ String? id,
]) {
if (listenable == null || listener == null) return;
_listenables.add(listenable);
_listeners.add(listener);
listenable.addListener(listener);
+
+ if (id != null) {
+ _listenerIdExpando[listener] = id;
+ }
}
/// Cancel all stream subscriptions added.
@@ -155,13 +165,25 @@
/// Cancel all listeners added.
///
/// It is fine to call this method and then add additional listeners.
- void cancelListeners() {
+ ///
+ /// If [excludeIds] is non-empty, any listeners that have an associated id
+ /// from [_listenersById] will not be cancelled.
+ void cancelListeners({List<String> excludeIds = const <String>[]}) {
assert(_listenables.length == _listeners.length);
+ final skipCancelIndices = <int>[];
for (int i = 0; i < _listenables.length; ++i) {
- _listenables[i].removeListener(_listeners[i]);
+ final listener = _listeners[i];
+ final listenerId = _listenerIdExpando[listener];
+ if (listenerId != null && excludeIds.contains(listenerId)) {
+ skipCancelIndices.add(i);
+ continue;
+ }
+
+ _listenables[i].removeListener(listener);
}
- _listenables.clear();
- _listeners.clear();
+
+ _listenables.removeAllExceptIndices(skipCancelIndices);
+ _listeners.removeAllExceptIndices(skipCancelIndices);
}
/// Cancels a single listener, if present.
@@ -260,8 +282,9 @@
void addAutoDisposeListener(
Listenable? listenable, [
VoidCallback? listener,
+ String? id,
]) {
- _delegate.addAutoDisposeListener(listenable, listener);
+ _delegate.addAutoDisposeListener(listenable, listener, id);
}
@override
@@ -280,7 +303,7 @@
}
@override
- void cancelListeners() {
+ void cancelListeners({List<String> excludeIds = const <String>[]}) {
_delegate.cancelListeners();
}
@@ -310,3 +333,16 @@
@visibleForTesting
class Disposer with DisposerMixin {}
+
+extension _AutoDisposeListExtension<T> on List<T> {
+ /// Reduces the list content to include only elements at [indices].
+ ///
+ /// If any index in [indices] is out of range, an exception will be thrown.
+ void removeAllExceptIndices(List<int> indices) {
+ final tmp = [
+ for (int index in indices) this[index],
+ ];
+ clear();
+ addAll(tmp);
+ }
+}
diff --git a/packages/devtools_app_shared/lib/src/utils/url/_url_web.dart b/packages/devtools_app_shared/lib/src/utils/url/_url_web.dart
index 2329882..cc240f0 100644
--- a/packages/devtools_app_shared/lib/src/utils/url/_url_web.dart
+++ b/packages/devtools_app_shared/lib/src/utils/url/_url_web.dart
@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-// ignore: avoid_web_libraries_in_flutter, as designed
-import 'dart:html';
+import 'package:web/helpers.dart';
Map<String, String> loadQueryParams({String Function(String)? urlModifier}) {
var url = getWebUrl()!;
diff --git a/packages/devtools_app_shared/lib/src/utils/url/url.dart b/packages/devtools_app_shared/lib/src/utils/url/url.dart
index c54fe58..2f31163 100644
--- a/packages/devtools_app_shared/lib/src/utils/url/url.dart
+++ b/packages/devtools_app_shared/lib/src/utils/url/url.dart
@@ -2,4 +2,4 @@
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
-export '_url_stub.dart' if (dart.library.html) '_url_web.dart';
+export '_url_stub.dart' if (dart.library.js_interop) '_url_web.dart';
diff --git a/packages/devtools_app_shared/lib/src/utils/web_utils.dart b/packages/devtools_app_shared/lib/src/utils/web_utils.dart
new file mode 100644
index 0000000..deec56d
--- /dev/null
+++ b/packages/devtools_app_shared/lib/src/utils/web_utils.dart
@@ -0,0 +1,19 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+import 'dart:js_interop';
+
+import 'package:web/helpers.dart';
+
+extension MessageExtension on Event {
+ bool get isMessageEvent =>
+ // TODO(srujzs): This is necessary in order to support package:web 0.4.0.
+ // This was not needed with 0.3.0, hence the lint.
+ // ignore: avoid-unnecessary-type-casts
+ (this as JSObject).instanceOfString('MessageEvent');
+}
+
+extension NodeListExtension on NodeList {
+ external void forEach(JSFunction callback);
+}
diff --git a/packages/devtools_app_shared/lib/web_utils.dart b/packages/devtools_app_shared/lib/web_utils.dart
new file mode 100644
index 0000000..65e4a69
--- /dev/null
+++ b/packages/devtools_app_shared/lib/web_utils.dart
@@ -0,0 +1,5 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+export 'src/utils/web_utils.dart';
diff --git a/packages/devtools_app_shared/pubspec.yaml b/packages/devtools_app_shared/pubspec.yaml
index e696168..ad9faf9 100644
--- a/packages/devtools_app_shared/pubspec.yaml
+++ b/packages/devtools_app_shared/pubspec.yaml
@@ -1,27 +1,28 @@
name: devtools_app_shared
description: Package of Dart & Flutter structures shared between devtools_app and devtools extensions.
-version: 0.0.5
+version: 0.0.8
repository: https://github.com/flutter/devtools/tree/master/packages/devtools_extensions
environment:
- sdk: '>=3.0.0 <4.0.0'
- flutter: '>=3.0.0'
+ sdk: '>=3.3.0-91.0.dev <4.0.0'
+ flutter: '>=3.17.0-0.0.pre'
dependencies:
collection: ^1.15.0
- devtools_shared: ^4.0.1
+ devtools_shared: ^6.0.1
flutter:
sdk: flutter
logging: ^1.1.1
meta: ^1.9.1
pointer_interceptor: ^0.9.3+3
- vm_service: ^11.10.0
+ vm_service: ^13.0.0
+ web: ^0.4.0
dev_dependencies:
- flutter_lints: ^2.0.0
+ flutter_lints: ^2.0.3
flutter_test:
sdk: flutter
- lints: ^2.0.0
+ lints: ^2.1.1
test: ^1.21.0
flutter:
diff --git a/packages/devtools_app_shared/test/utils/auto_dispose_mixin_test.dart b/packages/devtools_app_shared/test/utils/auto_dispose_mixin_test.dart
index f1175a3..91fb6c8 100644
--- a/packages/devtools_app_shared/test/utils/auto_dispose_mixin_test.dart
+++ b/packages/devtools_app_shared/test/utils/auto_dispose_mixin_test.dart
@@ -16,7 +16,7 @@
class AutoDisposedWidget extends StatefulWidget {
const AutoDisposedWidget(this.stream, {Key? key}) : super(key: key);
- final Stream stream;
+ final Stream<Object?> stream;
@override
State<AutoDisposedWidget> createState() => _AutoDisposedWidgetState();
@@ -153,6 +153,53 @@
expect(values.last, equals(19));
});
+ test('cancels listeners with excludeIds', () {
+ final disposer = Disposer();
+ final notifier = ValueNotifier<int>(42);
+
+ final values1 = <int>[];
+ void listener1() {
+ values1.add(notifier.value);
+ }
+
+ final values2 = <int>[];
+ void listener2() {
+ values2.add(notifier.value);
+ }
+
+ disposer.addAutoDisposeListener(notifier, listener1);
+ disposer.addAutoDisposeListener(notifier, listener2, 'id-2');
+ expect(notifier.hasListeners, isTrue);
+ notifier.value = 13;
+ expect(values1.length, equals(1));
+ expect(values1.last, equals(13));
+ expect(values2.length, equals(1));
+ expect(values2.last, equals(13));
+
+ disposer.cancelListeners(excludeIds: ['id-2']);
+ notifier.value = 15;
+ // Verify the first listener was cancelled and did not fire.
+ expect(values1.length, equals(1));
+ expect(values1.last, equals(13));
+
+ // Verify the second listener was not cancelled and did fire.
+ expect(values2.length, equals(2));
+ expect(values2.last, equals(15));
+
+ expect(notifier.hasListeners, isTrue);
+
+ // Cancel all listeners.
+ disposer.cancelListeners();
+ expect(notifier.hasListeners, isFalse);
+ notifier.value = 19;
+
+ // Verify neither listeners fire.
+ expect(values1.length, equals(1));
+ expect(values1.last, equals(13));
+ expect(values2.length, equals(2));
+ expect(values2.last, equals(15));
+ });
+
group('callOnceWhenReady', () {
for (bool isReady in [false, true]) {
group('isReady=$isReady', () {
diff --git a/packages/devtools_app_shared/test/utils/list_test.dart b/packages/devtools_app_shared/test/utils/list_test.dart
index f0f1fa5..e16589e 100644
--- a/packages/devtools_app_shared/test/utils/list_test.dart
+++ b/packages/devtools_app_shared/test/utils/list_test.dart
@@ -35,7 +35,7 @@
});
test('value returns ImmutableList', () {
- expect(notifier.value, isA<ImmutableList>());
+ expect(notifier.value, isA<ImmutableList<Object?>>());
});
test('notifies on add', () {
diff --git a/packages/devtools_extensions/README.md b/packages/devtools_extensions/README.md
index 272a815..26cbc28 100644
--- a/packages/devtools_extensions/README.md
+++ b/packages/devtools_extensions/README.md
@@ -1,5 +1,4 @@
# Dart & Flutter DevTools Extensions
-Note: this package is under active development; more thorough documentation coming soon.
Extend Dart & Flutter's developer tool suite,
[Dart DevTools](https://docs.flutter.dev/tools/devtools/overview), with a custom tool for
@@ -21,6 +20,7 @@
- [Development](#create-the-extension-web-app)
- [Debugging](#debug-the-extension-web-app)
3. [Publish your package with a DevTools extension](#publish-your-package-with-a-DevTools-extension)
+4. [Resources and support](#resources-and-support)
## Setup your package to provide a DevTools extension
@@ -29,7 +29,7 @@
To add an extension to your Dart package, add a top-level `extension` directory:
```
-foo_package
+foo
extension/
lib/
...
@@ -43,17 +43,36 @@
config.yaml
```
-The `config.yaml` file contains metadata that DevTools needs in order to load the
-extension. Copy the `config.yaml` file below and fill in the approproate value for each key.
-The `material_icon_code_point` field should correspond to the codepoint value of an icon from
-[material/icons.dart](https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/icons.dart).
+The `config.yaml` file contains metadata that DevTools needs to load the extension.
+
```yaml
-name: foo_package
-issue_tracker: <link_to_your_issue_tracker.com>
+name: foo
+issueTracker: <link_to_your_issue_tracker.com>
version: 0.0.1
-material_icon_code_point: '0xe0b1'
+materialIconCodePoint: '0xe0b1'
```
+Copy the `config.yaml` file content above and paste it into the `config.yaml` file you just
+created in your package. For each key, fill in the appropriate value for your package.
+* `name`: the package name that this DevTools extension belongs to. The value of this field
+will be used in the extension page title bar. **(required)**
+* `issueTracker`: the url for your issue tracker. When a user clicks the “Report an issue”
+link in the DevTools UI, they will be directed to this url. **(required)**
+* `version`: the version of your DevTools extension. This version number should evolve over
+time as you ship new features for your extension. The value of this field will be used in the
+extension page title bar. **(required)**
+
+ 
+
+* `materialIconCodePoint`: corresponds to the codepoint value of an icon from
+[material/icons.dart](https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/icons.dart).
+This icon will be used for the extension’s tab in the top-level DevTools tab bar. **(required)**
+
+ 
+
+For the most up-to-date documentation on the `config.yaml` spec, see
+[extension_config_spec.md](https://github.com/flutter/devtools/blob/master/packages/devtools_extensions/extension_config_spec.md)
+
Now it is time to build your extension.
## Create a DevTools extension
@@ -65,52 +84,53 @@
you develop your DevTools extension outside of your pub package. Here is the recommended package structure:
```
-foo_package/ # formerly the repository root of your pub package
+foo/ # formerly the repository root of your pub package
packages/
- foo_package/ # your pub package
+ foo/ # your pub package
extension/
devtools/
build/
- ... # pre-compiled output of foo_package_devtools_extension
+ ... # pre-compiled output of foo_devtools_extension
config.yaml
- foo_package_devtools_extension/ # source code for your extension
+ foo_devtools_extension/ # source code for your extension
```
### Create the extension web app
From the directory where you want your extension source code to live, run the following command,
-replacing `foo_package_devtools_extension` with `<your_package_name>_devtools_extension``:
+replacing `foo_devtools_extension` with `<your_package_name>_devtools_extension``:
```sh
-flutter create --template app --platforms web foo_package_devtools_extension
+flutter create --template app --platforms web foo_devtools_extension
```
-In `foo_package_devtools_extension/pubspec.yaml`, add a dependency on `devtools_extensions`:
+In `foo_devtools_extension/pubspec.yaml`, add a dependency on `devtools_extensions`:
```yaml
-devtools_extensions: ^0.0.8
+devtools_extensions: ^0.0.10
```
-In `lib/main.dart`, place a `DevToolsExtension` widget at the root of your app:
+In `foo_devtools_extension/lib/main.dart`, place a `DevToolsExtension` widget at the root of your app:
```dart
import 'package:devtools_extensions/devtools_extensions.dart';
+import 'package:flutter/material.dart';
void main() {
- runApp(const FooPackageDevToolsExtension());
+ runApp(const FooDevToolsExtension());
}
-class FooPackageDevToolsExtension extends StatelessWidget {
- const FooPackageDevToolsExtension({super.key});
+class FooDevToolsExtension extends StatelessWidget {
+ const FooDevToolsExtension({super.key});
@override
Widget build(BuildContext context) {
return const DevToolsExtension(
- child: FooDevToolsExtension(),
+ child: Placeholder(), // Build your extension here
);
}
}
```
The `DevToolsExtension` widget automatically performs all extension initialization required
-to interact with DevTools. From anywhere your extension web app, you can access the globals
+to interact with DevTools. From anywhere in your extension web app, you can access the globals
`extensionManager` and `serviceManager` to send messages and interact with the connected app.
#### Utilize helper packages
@@ -126,11 +146,18 @@
For debugging purposes, you will likely want to use the "simulated DevTools environment". This
is a simulated environment that allows you to build your extension without having to develop it
-as an embedded iFrame in DevTools. The simulated environment is enabled by an environment
-parameter `use_simulated_environment`.
+as an embedded iFrame in DevTools. Running your extension this way will wrap your extension
+with an environment that simulates the DevTools-to-DevTools extension connection. It also
+gives you access to hot restart and a faster development cycle.

+1. Your DevTools extension.
+2. The VM service URI for a test app that your DevTools extension will interact with. This app
+should depend on your extension’s parent package.
+3. Buttons to perform actions that a user may trigger from DevTools.
+4. Logs showing the messages that will be sent between your extension and DevTools.
+The simulated environment is enabled by an environment parameter `use_simulated_environment`.
To run your extension web app with this flag enabled, add a configuration to your `launch.json`
file in VS code:
```json
@@ -140,7 +167,7 @@
...
{
"name": "foo_devtools_extension + simulated environment",
- "program": "foo_package/extension/foo_devtools_extension/lib/main.dart",
+ "cwd": "packages/foo_devtools_extension",
"request": "launch",
"type": "dart",
"args": [
@@ -162,27 +189,26 @@
1. Develop your extension to a point where you are ready to test your changes in a
real DevTools environment. Build your flutter web app and copy the built assets from
-`your_extension_web_app/build` to your pub package's `extension/devtools/build` directory.
+`your_extension_web_app/build/web` to your pub package's `extension/devtools/build` directory.
-Use the `build_extension` command from `package:devtools_extensions` to help with this step.
+Use the `build_and_copy` command from `package:devtools_extensions` to help with this step.
```sh
-cd your_extension_web_app &&
-flutter pub get &&
-dart run devtools_extensions build_and_copy \
- --source=. \
- --dest=path/to/your_pub_package/extension/devtools
+cd your_extension_web_app;
+flutter pub get;
+dart run devtools_extensions build_and_copy --source=. --dest=../foo/extension/devtools
```
2. Prepare and run a test application that depends on your pub package. You'll need to change the
-`pubspec.yaml` dependency to be a `path` dependency that points to your local pub package
-source code. Once you have done this, run `pub get`, and run the application.
+`pubspec.yaml` dependency to be a [path](https://dart.dev/tools/pub/dependencies#path-packages)
+dependency that points to your local pub package source code. Once you have done this,
+run `pub get` on the test app, and run the application.
3. Start DevTools:
* **If you need local or unreleased changes from DevTools**, you'll need to build and run DevTools
from source. See the DevTools [CONTRIBUTING.md]() for a guide on how to do this.
> Note: you'll need to build DevTools with the server and the front end to test extensions - see
- [instructions](https://github.com/flutter/devtools/blob/master/CONTRIBUTING.md#development-devtools-server--devtools-flutter-web-app).
- * **If not, and if your local Dart or Flutter SDK version is >= `<TODO: insert version>`**,
+ > [instructions](https://github.com/flutter/devtools/blob/master/CONTRIBUTING.md#development-devtools-server--devtools-flutter-web-app).
+ * **If not, and if your local Dart or Flutter SDK version is >= 3.16.0-0.1.pre**,
you can launch the DevTools instance that was just started by running your app (either from
a url printed to command line or from the IDE where you ran your test app). You can also run
`dart devtools` from the command line.
@@ -203,11 +229,9 @@
2. Use the `build_and_copy` command provided by `package:devtools_extensions` to build
your extension and copy the output to the `extension/devtools` directory:
```sh
-cd your_extension_web_app &&
-flutter pub get &&
-dart run devtools_extensions build_and_copy \
- --source=. \
- --dest=path/to/your_pub_package/extension/devtools
+cd your_extension_web_app;
+flutter pub get;
+dart run devtools_extensions build_and_copy --source=. --dest=../foo/extension/devtools
```
Then publish your package.
@@ -234,14 +258,21 @@
```sh
pushd your_extension_web_app
-flutter pub get &&
-dart run devtools_extensions build_and_copy \
- --source=. \
- --dest=path/to/your_pub_package/extension/devtools
+flutter pub get
+dart run devtools_extensions build_and_copy --source=. --dest=../foo/extension/devtools
popd
pushd your_pub_package
flutter pub publish
popd
-```
\ No newline at end of file
+```
+
+## Resources and support
+
+Please join the [Flutter Discord server](https://github.com/flutter/flutter/wiki/Chat) and then check out
+the [#devtools-extension-authors](https://discord.com/channels/608014603317936148/1159561514072690739)
+channel to connect with other DevTools extension authors and the DevTools team.
+
+For feature requests or bugs, please [file an issue](https://github.com/flutter/devtools/issues/new)
+on the DevTools Github repository.
diff --git a/packages/devtools_extensions/_readme_images/example_devtools_extension.png b/packages/devtools_extensions/_readme_images/example_devtools_extension.png
index 345ed14..ab841c0 100644
--- a/packages/devtools_extensions/_readme_images/example_devtools_extension.png
+++ b/packages/devtools_extensions/_readme_images/example_devtools_extension.png
Binary files differ
diff --git a/packages/devtools_extensions/_readme_images/extension_tab_icon.png b/packages/devtools_extensions/_readme_images/extension_tab_icon.png
new file mode 100644
index 0000000..34f294d
--- /dev/null
+++ b/packages/devtools_extensions/_readme_images/extension_tab_icon.png
Binary files differ
diff --git a/packages/devtools_extensions/_readme_images/extension_title_bar.png b/packages/devtools_extensions/_readme_images/extension_title_bar.png
new file mode 100644
index 0000000..7202364
--- /dev/null
+++ b/packages/devtools_extensions/_readme_images/extension_title_bar.png
Binary files differ
diff --git a/packages/devtools_extensions/_readme_images/simulated_devtools_environment.png b/packages/devtools_extensions/_readme_images/simulated_devtools_environment.png
index 44456f8..3c9e2ce 100644
--- a/packages/devtools_extensions/_readme_images/simulated_devtools_environment.png
+++ b/packages/devtools_extensions/_readme_images/simulated_devtools_environment.png
Binary files differ
diff --git a/packages/devtools_extensions/bin/_build_and_copy.dart b/packages/devtools_extensions/bin/_build_and_copy.dart
index d4c3ff5..40f70c0 100644
--- a/packages/devtools_extensions/bin/_build_and_copy.dart
+++ b/packages/devtools_extensions/bin/_build_and_copy.dart
@@ -20,14 +20,14 @@
BuildExtensionCommand() {
argParser
..addOption(
- 'source',
+ _sourceKey,
help: 'The source location for the extension flutter web app (can be '
'relative or absolute)',
valueHelp: 'path/to/foo/packages/foo_devtools_extension',
mandatory: true,
)
..addOption(
- 'dest',
+ _destinationKey,
help: 'The destination location for the extension build output (can be '
'relative or absolute)',
valueHelp: 'path/to/foo/packages/foo/extension/devtools',
@@ -56,7 +56,7 @@
_log('Building the extension Flutter web app...');
await _runProcess(
processManager,
- 'flutter',
+ Platform.isWindows ? 'flutter.bat' : 'flutter',
[
'build',
'web',
@@ -69,24 +69,25 @@
workingDirectory: source,
);
- _log('Setting canvaskit permissions...');
- await _runProcess(
- processManager,
- 'chmod',
- [
- '0755',
- // Note: using a wildcard `canvaskit.*` throws.
- 'build/web/canvaskit/canvaskit.js',
- 'build/web/canvaskit/canvaskit.wasm',
- ],
- workingDirectory: source,
- );
+ // TODO(kenz): investigate if we need to perform a windows equivalent of
+ // `chmod` or if we even need to perform `chmod` for linux / mac anymore.
+ if (!Platform.isWindows) {
+ _log('Setting canvaskit permissions...');
+ await _runProcess(
+ processManager,
+ 'chmod',
+ [
+ '0755',
+ // Note: using a wildcard `canvaskit.*` throws.
+ 'build/web/canvaskit/canvaskit.js',
+ 'build/web/canvaskit/canvaskit.wasm',
+ ],
+ workingDirectory: source,
+ );
+ }
_log('Copying built output to the extension destination...');
await _copyBuildToDestination(source: source, dest: destination);
-
- // Closes stdin for the entire program.
- await sharedStdIn.terminate();
}
Future<void> _copyBuildToDestination({
diff --git a/packages/devtools_extensions/bin/devtools_extensions.dart b/packages/devtools_extensions/bin/devtools_extensions.dart
index 6851603..853b7e7 100644
--- a/packages/devtools_extensions/bin/devtools_extensions.dart
+++ b/packages/devtools_extensions/bin/devtools_extensions.dart
@@ -3,11 +3,13 @@
// found in the LICENSE file.
import 'package:args/command_runner.dart';
+import 'package:io/io.dart';
+
import '_build_and_copy.dart';
void main(List<String> arguments) async {
final command = BuildExtensionCommand();
final runner = CommandRunner('devtools_extensions', command.description)
..addCommand(BuildExtensionCommand());
- await runner.run(arguments);
+ await runner.run(arguments).whenComplete(sharedStdIn.terminate);
}
diff --git a/packages/devtools_extensions/example/README.md b/packages/devtools_extensions/example/README.md
index d8be583..398a49f 100644
--- a/packages/devtools_extensions/example/README.md
+++ b/packages/devtools_extensions/example/README.md
@@ -27,9 +27,9 @@
2. Configure your extension using the `foo/extension/devtools/config.yaml` file
```yaml
name: foo
- issue_tracker: <link_to_your_issue_tracker.com>
+ issueTracker: <link_to_your_issue_tracker.com>
version: 0.0.1
- material_icon_code_point: '0xe0b1'
+ materialIconCodePoint: '0xe0b1'
```
3. Use `package:devtools_extensions` and `package:devtools_app_shared` to
develop your DevTools extension (see source code under `foo_devtools_extension`).
diff --git a/packages/devtools_extensions/example/app_that_uses_foo/.vscode/launch.json b/packages/devtools_extensions/example/app_that_uses_foo/.vscode/launch.json
new file mode 100644
index 0000000..0d7661c
--- /dev/null
+++ b/packages/devtools_extensions/example/app_that_uses_foo/.vscode/launch.json
@@ -0,0 +1,25 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "app_that_uses_foo",
+ "request": "launch",
+ "type": "dart"
+ },
+ {
+ "name": "app_that_uses_foo (profile mode)",
+ "request": "launch",
+ "type": "dart",
+ "flutterMode": "profile"
+ },
+ {
+ "name": "app_that_uses_foo (release mode)",
+ "request": "launch",
+ "type": "dart",
+ "flutterMode": "release"
+ }
+ ]
+}
diff --git a/packages/devtools_extensions/example/app_that_uses_foo/devtools_options.yaml b/packages/devtools_extensions/example/app_that_uses_foo/devtools_options.yaml
new file mode 100644
index 0000000..e7dc1cf
--- /dev/null
+++ b/packages/devtools_extensions/example/app_that_uses_foo/devtools_options.yaml
@@ -0,0 +1,2 @@
+extensions:
+ - foo: true
\ No newline at end of file
diff --git a/packages/devtools_extensions/example/app_that_uses_foo/lib/main.dart b/packages/devtools_extensions/example/app_that_uses_foo/lib/main.dart
index 61da152..a5bc3cb 100644
--- a/packages/devtools_extensions/example/app_that_uses_foo/lib/main.dart
+++ b/packages/devtools_extensions/example/app_that_uses_foo/lib/main.dart
@@ -35,12 +35,12 @@
}
class _HomePageState extends State<HomePage> {
- int _counter = 0;
+ late final FooController fooController;
- void _incrementCounter() {
- setState(() {
- _counter++;
- });
+ @override
+ void initState() {
+ super.initState();
+ fooController = FooController.instance;
}
@override
@@ -51,15 +51,8 @@
title: Text(widget.title),
),
body: Center(
- child: Column(
- children: [
- FooBarBaz(
- onFoo: _incrementCounter,
- onBar: _incrementCounter,
- onBaz: _incrementCounter,
- ),
- Text('FooBarBaz count: $_counter'),
- ],
+ child: FooWidget(
+ fooController: fooController,
),
),
);
diff --git a/packages/devtools_extensions/example/app_that_uses_foo/pubspec.yaml b/packages/devtools_extensions/example/app_that_uses_foo/pubspec.yaml
index f888c1b..dd0bb54 100644
--- a/packages/devtools_extensions/example/app_that_uses_foo/pubspec.yaml
+++ b/packages/devtools_extensions/example/app_that_uses_foo/pubspec.yaml
@@ -17,7 +17,7 @@
dev_dependencies:
flutter_test:
sdk: flutter
- flutter_lints: ^2.0.0
+ flutter_lints: ^2.0.3
flutter:
uses-material-design: true
diff --git a/packages/devtools_extensions/example/app_that_uses_foo/test/app_that_uses_foo_test.dart b/packages/devtools_extensions/example/app_that_uses_foo/test/app_that_uses_foo_test.dart
new file mode 100644
index 0000000..0ac9053
--- /dev/null
+++ b/packages/devtools_extensions/example/app_that_uses_foo/test/app_that_uses_foo_test.dart
@@ -0,0 +1,25 @@
+// Copyright 2023 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:app_that_uses_foo/main.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:foo/foo.dart';
+
+// This test can be run to verify that the `package:foo` DevTools extension
+// loads properly when debugging a test target with DevTools.
+//
+// To test this, run the following command and copy the VM service URI to
+// connect to DevTools:
+//
+// flutter run test/app_that_uses_foo_test.dart --start-paused
+
+void main() {
+ testWidgets('Builds $MyAppThatUsesFoo', (tester) async {
+ await tester.pumpWidget(const MyAppThatUsesFoo());
+ await tester.pumpAndSettle();
+
+ expect(find.byType(MyAppThatUsesFoo), findsOneWidget);
+ expect(find.byType(FooWidget), findsOneWidget);
+ });
+}
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/.last_build_id b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/.last_build_id
index a7ef2c7..0b89c0e 100644
--- a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/.last_build_id
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/.last_build_id
@@ -1 +1 @@
-8c60270877067c249075063f1ce2ad13
\ No newline at end of file
+39cefa5985076931d7760efd7467b506
\ No newline at end of file
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/assets/NOTICES b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/assets/NOTICES
index 1f6a9ed..a6f320e 100644
--- a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/assets/NOTICES
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/assets/NOTICES
@@ -210,7 +210,6 @@
flatbuffers
fuchsia_sdk
glslang
-khronos
perfetto
shaderc
spirv-cross
@@ -933,6 +932,29 @@
--------------------------------------------------------------------------------
angle
+Copyright (c) 2013-2018 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+--------------------------------------------------------------------------------
+angle
+
Copyright (c) 2020 The ANGLE Project Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -1657,30 +1679,6 @@
POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
angle
-khronos
-
-Copyright (c) 2013-2018 The Khronos Group Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and/or associated documentation files (the
-"Materials"), to deal in the Materials without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Materials, and to
-permit persons to whom the Materials are furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Materials.
-
-THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
---------------------------------------------------------------------------------
-angle
xxhash
Copyright 2019 The ANGLE Project Authors. All rights reserved.
@@ -28365,52 +28363,6 @@
--------------------------------------------------------------------------------
khronos
-Copyright (c) 2007-2012 The Khronos Group Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and/or associated documentation files (the
-"Materials"), to deal in the Materials without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Materials, and to
-permit persons to whom the Materials are furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Materials.
-
-THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
---------------------------------------------------------------------------------
-khronos
-
-Copyright (c) 2008-2009 The Khronos Group Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and/or associated documentation files (the
-"Materials"), to deal in the Materials without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Materials, and to
-permit persons to whom the Materials are furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Materials.
-
-THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
---------------------------------------------------------------------------------
-khronos
-
Copyright (c) 2013-2014 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
@@ -28432,29 +28384,6 @@
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
--------------------------------------------------------------------------------
-khronos
-
-Copyright (c) 2013-2016 The Khronos Group Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and/or associated documentation files (the
-"Materials"), to deal in the Materials without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Materials, and to
-permit persons to whom the Materials are furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Materials.
-
-THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
---------------------------------------------------------------------------------
libXNVCtrl
Copyright (c) 2008 NVIDIA, Corporation
@@ -30381,18 +30310,7 @@
END OF TERMS AND CONDITIONS
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
+ Copyright 2021 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -30405,6 +30323,7 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+
--------------------------------------------------------------------------------
meta
@@ -32926,6 +32845,38 @@
--------------------------------------------------------------------------------
skia
+Copyright 2023 Google, LLC
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--------------------------------------------------------------------------------
+skia
+
Copyright 2023 The Android Open Source Project
Redistribution and use in source and binary forms, with or without
@@ -33147,36 +33098,6 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
--------------------------------------------------------------------------------
-vulkanmemoryallocator
-
-Copyright 2018 Google Inc.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
web
Copyright 2023, the Dart project authors.
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js
index b54c44e..8170e2a 100755
--- a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js
@@ -65,11 +65,11 @@
a.MakeVertices=function(g,e,h,n,t,x){var z=t&&t.length||0,E=0;h&&h.length&&(E|=1);n&&n.length&&(E|=2);void 0===x||x||(E|=4);g=new a._VerticesBuilder(g,e.length/2,z,E);l(e,"HEAPF32",g.positions());g.texCoords()&&l(h,"HEAPF32",g.texCoords());g.colors()&&l(c(n),"HEAPU32",g.colors());g.indices()&&l(t,"HEAPU16",g.indices());return g.detach()};(function(g){g.Md=g.Md||[];g.Md.push(function(){function e(q){q&&(q.dir=0===q.dir?g.TextDirection.RTL:g.TextDirection.LTR);return q}function h(q){if(!q||!q.length)return[];
for(var A=[],P=0;P<q.length;P+=5){var Z=g.LTRBRect(q[P],q[P+1],q[P+2],q[P+3]),za=g.TextDirection.LTR;0===q[P+4]&&(za=g.TextDirection.RTL);A.push({rect:Z,dir:za})}g._free(q.byteOffset);return A}function n(q){q=q||{};void 0===q.weight&&(q.weight=g.FontWeight.Normal);q.width=q.width||g.FontWidth.Normal;q.slant=q.slant||g.FontSlant.Upright;return q}function t(q){if(!q||!q.length)return M;for(var A=[],P=0;P<q.length;P++){var Z=x(q[P]);A.push(Z)}return l(A,"HEAPU32")}function x(q){if(J[q])return J[q];var A=
ja(q)+1,P=g._malloc(A);ka(q,C,P,A);return J[q]=P}function z(q){q._colorPtr=y(q.color);q._foregroundColorPtr=M;q._backgroundColorPtr=M;q._decorationColorPtr=M;q.foregroundColor&&(q._foregroundColorPtr=y(q.foregroundColor,I));q.backgroundColor&&(q._backgroundColorPtr=y(q.backgroundColor,U));q.decorationColor&&(q._decorationColorPtr=y(q.decorationColor,V));Array.isArray(q.fontFamilies)&&q.fontFamilies.length?(q._fontFamiliesPtr=t(q.fontFamilies),q._fontFamiliesLen=q.fontFamilies.length):(q._fontFamiliesPtr=
-M,q._fontFamiliesLen=0);if(q.locale){var A=q.locale;q._localePtr=x(A);q._localeLen=ja(A)+1}else q._localePtr=M,q._localeLen=0;if(Array.isArray(q.shadows)&&q.shadows.length){A=q.shadows;var P=A.map(function(qa){return qa.color||g.BLACK}),Z=A.map(function(qa){return qa.blurRadius||0});q._shadowLen=A.length;for(var za=g._malloc(8*A.length),Hb=za/4,Ib=0;Ib<A.length;Ib++){var lc=A[Ib].offset||[0,0];g.HEAPF32[Hb]=lc[0];g.HEAPF32[Hb+1]=lc[1];Hb+=2}q._shadowColorsPtr=m(P).Rd;q._shadowOffsetsPtr=za;q._shadowBlurRadiiPtr=
+M,q._fontFamiliesLen=0);if(q.locale){var A=q.locale;q._localePtr=x(A);q._localeLen=ja(A)}else q._localePtr=M,q._localeLen=0;if(Array.isArray(q.shadows)&&q.shadows.length){A=q.shadows;var P=A.map(function(qa){return qa.color||g.BLACK}),Z=A.map(function(qa){return qa.blurRadius||0});q._shadowLen=A.length;for(var za=g._malloc(8*A.length),Hb=za/4,Ib=0;Ib<A.length;Ib++){var lc=A[Ib].offset||[0,0];g.HEAPF32[Hb]=lc[0];g.HEAPF32[Hb+1]=lc[1];Hb+=2}q._shadowColorsPtr=m(P).Rd;q._shadowOffsetsPtr=za;q._shadowBlurRadiiPtr=
l(Z,"HEAPF32")}else q._shadowLen=0,q._shadowColorsPtr=M,q._shadowOffsetsPtr=M,q._shadowBlurRadiiPtr=M;Array.isArray(q.fontFeatures)&&q.fontFeatures.length?(A=q.fontFeatures,P=A.map(function(qa){return qa.name}),Z=A.map(function(qa){return qa.value}),q._fontFeatureLen=A.length,q._fontFeatureNamesPtr=t(P),q._fontFeatureValuesPtr=l(Z,"HEAPU32")):(q._fontFeatureLen=0,q._fontFeatureNamesPtr=M,q._fontFeatureValuesPtr=M);Array.isArray(q.fontVariations)&&q.fontVariations.length?(A=q.fontVariations,P=A.map(function(qa){return qa.axis}),
Z=A.map(function(qa){return qa.value}),q._fontVariationLen=A.length,q._fontVariationAxesPtr=t(P),q._fontVariationValuesPtr=l(Z,"HEAPF32")):(q._fontVariationLen=0,q._fontVariationAxesPtr=M,q._fontVariationValuesPtr=M)}function E(q){g._free(q._fontFamiliesPtr);g._free(q._shadowColorsPtr);g._free(q._shadowOffsetsPtr);g._free(q._shadowBlurRadiiPtr);g._free(q._fontFeatureNamesPtr);g._free(q._fontFeatureValuesPtr);g._free(q._fontVariationAxesPtr);g._free(q._fontVariationValuesPtr)}g.Paragraph.prototype.getRectsForRange=
-function(q,A,P,Z){q=this._getRectsForRange(q,A,P,Z);return h(q)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var q=this._getRectsForPlaceholders();return h(q)};g.Paragraph.prototype.getGlyphInfoAt=function(q){return e(this._getGlyphInfoAt(q))};g.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(q,A){return e(this._getClosestGlyphInfoAtCoordinate(q,A))};g.TypefaceFontProvider.prototype.registerFont=function(q,A){q=g.Typeface.MakeFreeTypeFaceFromData(q);if(!q)return null;A=x(A);
-this._registerFont(q,A)};g.ParagraphStyle=function(q){q.disableHinting=q.disableHinting||!1;if(q.ellipsis){var A=q.ellipsis;q._ellipsisPtr=x(A);q._ellipsisLen=ja(A)+1}else q._ellipsisPtr=M,q._ellipsisLen=0;null==q.heightMultiplier&&(q.heightMultiplier=-1);q.maxLines=q.maxLines||0;q.replaceTabCharacters=q.replaceTabCharacters||!1;A=(A=q.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=t(A.fontFamilies),A._fontFamiliesLen=
+function(q,A,P,Z){q=this._getRectsForRange(q,A,P,Z);return h(q)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var q=this._getRectsForPlaceholders();return h(q)};g.Paragraph.prototype.getGlyphInfoAt=function(q){return e(this._getGlyphInfoAt(q))};g.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(q,A){return e(this._getClosestGlyphInfoAtCoordinate(q,A))};g.TypefaceFontProvider.prototype.registerFont=function(q,A){q=g.Typeface.MakeTypefaceFromData(q);if(!q)return null;A=x(A);
+this._registerFont(q,A)};g.ParagraphStyle=function(q){q.disableHinting=q.disableHinting||!1;if(q.ellipsis){var A=q.ellipsis;q._ellipsisPtr=x(A);q._ellipsisLen=ja(A)}else q._ellipsisPtr=M,q._ellipsisLen=0;null==q.heightMultiplier&&(q.heightMultiplier=-1);q.maxLines=q.maxLines||0;q.replaceTabCharacters=q.replaceTabCharacters||!1;A=(A=q.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=t(A.fontFamilies),A._fontFamiliesLen=
A.fontFamilies.length):(A._fontFamiliesPtr=M,A._fontFamiliesLen=0);A.fontStyle=n(A.fontStyle);null==A.fontSize&&(A.fontSize=-1);null==A.heightMultiplier&&(A.heightMultiplier=-1);A.halfLeading=A.halfLeading||!1;A.leading=A.leading||0;A.forceStrutHeight=A.forceStrutHeight||!1;q.strutStyle=A;q.textAlign=q.textAlign||g.TextAlign.Start;q.textDirection=q.textDirection||g.TextDirection.LTR;q.textHeightBehavior=q.textHeightBehavior||g.TextHeightBehavior.All;q.textStyle=g.TextStyle(q.textStyle);q.applyRoundingHack=
!1!==q.applyRoundingHack;return q};g.TextStyle=function(q){q.color||(q.color=g.BLACK);q.decoration=q.decoration||0;q.decorationThickness=q.decorationThickness||0;q.decorationStyle=q.decorationStyle||g.DecorationStyle.Solid;q.textBaseline=q.textBaseline||g.TextBaseline.Alphabetic;null==q.fontSize&&(q.fontSize=-1);q.letterSpacing=q.letterSpacing||0;q.wordSpacing=q.wordSpacing||0;null==q.heightMultiplier&&(q.heightMultiplier=-1);q.halfLeading=q.halfLeading||!1;q.fontStyle=n(q.fontStyle);return q};var J=
{},I=g._malloc(16),U=g._malloc(16),V=g._malloc(16);g.ParagraphBuilder.Make=function(q,A){z(q.textStyle);A=g.ParagraphBuilder._Make(q,A);E(q.textStyle);return A};g.ParagraphBuilder.MakeFromFontProvider=function(q,A){z(q.textStyle);A=g.ParagraphBuilder._MakeFromFontProvider(q,A);E(q.textStyle);return A};g.ParagraphBuilder.MakeFromFontCollection=function(q,A){z(q.textStyle);A=g.ParagraphBuilder._MakeFromFontCollection(q,A);E(q.textStyle);return A};g.ParagraphBuilder.ShapeText=function(q,A,P){let Z=0;
@@ -79,12 +79,12 @@
function(g,e,h,n,t){var x=ja(g),z=a._malloc(x+1);ka(g,C,z,x+1);this._drawSimpleText(z,x,e,h,t,n);a._free(z)};a.Canvas.prototype.drawGlyphs=function(g,e,h,n,t,x){if(!(2*g.length<=e.length))throw"Not enough positions for the array of gyphs";a.Jd(this.Id);const z=l(g,"HEAPU16"),E=l(e,"HEAPF32");this._drawGlyphs(g.length,z,E,h,n,t,x);k(E,e);k(z,g)};a.Font.prototype.getGlyphBounds=function(g,e,h){var n=l(g,"HEAPU16"),t=a._malloc(16*g.length);this._getGlyphWidthBounds(n,g.length,M,t,e||null);e=new Float32Array(a.HEAPU8.buffer,
t,4*g.length);k(n,g);if(h)return h.set(e),a._free(t),h;g=Float32Array.from(e);a._free(t);return g};a.Font.prototype.getGlyphIDs=function(g,e,h){e||(e=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*e);e=this._getGlyphIDs(t,n-1,e,g);a._free(t);if(0>e)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.Font.prototype.getGlyphIntercepts=function(g,e,h,n){var t=l(g,"HEAPU16"),x=l(e,"HEAPF32");return this._getGlyphIntercepts(t,
g.length,!(g&&g._ck),x,e.length,!(e&&e._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,e,h){var n=l(g,"HEAPU16"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,e||null);e=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(e),a._free(t),h;g=Float32Array.from(e);a._free(t);return g};a.FontMgr.FromData=function(){if(!arguments.length)return null;var g=arguments;1===g.length&&Array.isArray(g[0])&&(g=arguments[0]);if(!g.length)return null;for(var e=[],h=[],n=
-0;n<g.length;n++){var t=new Uint8Array(g[n]),x=l(t,"HEAPU8");e.push(x);h.push(t.byteLength)}e=l(e,"HEAPU32");h=l(h,"HEAPU32");g=a.FontMgr._fromData(e,h,g.length);a._free(e);a._free(h);return g};a.Typeface.MakeFreeTypeFaceFromData=function(g){g=new Uint8Array(g);var e=l(g,"HEAPU8");return(g=a.Typeface._MakeFreeTypeFaceFromData(e,g.byteLength))?g:null};a.Typeface.prototype.getGlyphIDs=function(g,e,h){e||(e=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*e);e=this._getGlyphIDs(t,n-1,
-e,g);a._free(t);if(0>e)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,e,h,n){if(g&&g.length&&e&&e.countPoints()){if(1===e.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var x=[];e=new a.ContourMeasureIter(e,!1,1);for(var z=e.next(),E=new Float32Array(4),J=0;J<g.length&&z;J++){var I=t[J];n+=I/2;if(n>z.length()){z.delete();z=
-e.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];x.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,x,h);z&&z.delete();e.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,e,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(e,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,e,h){var n=l(g,"HEAPU16");e=l(e,"HEAPF32");h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,e,h);k(n,
-g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,e){var h=l(g,"HEAPU16");e=a.TextBlob._MakeFromGlyphs(h,2*g.length,e);k(h,g);return e?e:null};a.TextBlob.MakeFromText=function(g,e){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,e);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Md=a.Md||[];a.Md.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var e=a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._MakePicture(e,
-g.byteLength))?g:null}});a.Md=a.Md||[];a.Md.push(function(){a.RuntimeEffect.Make=function(g,e){return a.RuntimeEffect._Make(g,{onError:e||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.MakeForBlender=function(g,e){return a.RuntimeEffect._MakeForBlender(g,{onError:e||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,e){var h=!g._ck,n=l(g,"HEAPF32");e=p(e);return this._makeShader(n,4*g.length,h,e)};a.RuntimeEffect.prototype.makeShaderWithChildren=
-function(g,e,h){var n=!g._ck,t=l(g,"HEAPF32");h=p(h);for(var x=[],z=0;z<e.length;z++)x.push(e[z].kd.Kd);e=l(x,"HEAPU32");return this._makeShaderWithChildren(t,4*g.length,n,e,x.length,h)};a.RuntimeEffect.prototype.makeBlender=function(g){var e=!g._ck,h=l(g,"HEAPF32");return this._makeBlender(h,4*g.length,e)}})})(r);
+0;n<g.length;n++){var t=new Uint8Array(g[n]),x=l(t,"HEAPU8");e.push(x);h.push(t.byteLength)}e=l(e,"HEAPU32");h=l(h,"HEAPU32");g=a.FontMgr._fromData(e,h,g.length);a._free(e);a._free(h);return g};a.Typeface.MakeTypefaceFromData=function(g){g=new Uint8Array(g);var e=l(g,"HEAPU8");return(g=a.Typeface._MakeTypefaceFromData(e,g.byteLength))?g:null};a.Typeface.MakeFreeTypeFaceFromData=a.Typeface.MakeTypefaceFromData;a.Typeface.prototype.getGlyphIDs=function(g,e,h){e||(e=g.length);var n=ja(g)+1,t=a._malloc(n);
+ka(g,C,t,n);g=a._malloc(2*e);e=this._getGlyphIDs(t,n-1,e,g);a._free(t);if(0>e)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,e,h,n){if(g&&g.length&&e&&e.countPoints()){if(1===e.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var x=[];e=new a.ContourMeasureIter(e,!1,1);for(var z=e.next(),E=new Float32Array(4),J=0;J<g.length&&
+z;J++){var I=t[J];n+=I/2;if(n>z.length()){z.delete();z=e.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];x.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,x,h);z&&z.delete();e.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,e,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(e,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,e,h){var n=l(g,"HEAPU16");e=l(e,"HEAPF32");
+h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,e,h);k(n,g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,e){var h=l(g,"HEAPU16");e=a.TextBlob._MakeFromGlyphs(h,2*g.length,e);k(h,g);return e?e:null};a.TextBlob.MakeFromText=function(g,e){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,e);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Md=a.Md||[];a.Md.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var e=
+a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._MakePicture(e,g.byteLength))?g:null}});a.Md=a.Md||[];a.Md.push(function(){a.RuntimeEffect.Make=function(g,e){return a.RuntimeEffect._Make(g,{onError:e||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.MakeForBlender=function(g,e){return a.RuntimeEffect._MakeForBlender(g,{onError:e||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,e){var h=!g._ck,n=l(g,"HEAPF32");e=p(e);return this._makeShader(n,
+4*g.length,h,e)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(g,e,h){var n=!g._ck,t=l(g,"HEAPF32");h=p(h);for(var x=[],z=0;z<e.length;z++)x.push(e[z].kd.Kd);e=l(x,"HEAPU32");return this._makeShaderWithChildren(t,4*g.length,n,e,x.length,h)};a.RuntimeEffect.prototype.makeBlender=function(g){var e=!g._ck,h=l(g,"HEAPF32");return this._makeBlender(h,4*g.length,e)}})})(r);
var la=Object.assign({},r),ma="./this.program",oa=(a,b)=>{throw b;},pa="object"==typeof window,ra="function"==typeof importScripts,sa="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ta="",ua,wa,xa;
if(sa){var fs=require("fs"),ya=require("path");ta=ra?ya.dirname(ta)+"/":__dirname+"/";ua=(a,b)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};xa=a=>{a=ua(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c,d=!0)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);fs.readFile(a,d?void 0:"utf8",(f,k)=>{f?c(f):b(d?k.buffer:k)})};!r.thisProgram&&1<process.argv.length&&(ma=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);oa=(a,b)=>{process.exitCode=
a;throw b;};r.inspect=()=>"[Emscripten Module object]"}else if(pa||ra)ra?ta=self.location.href:"undefined"!=typeof document&&document.currentScript&&(ta=document.currentScript.src),_scriptDir&&(ta=_scriptDir),0!==ta.indexOf("blob:")?ta=ta.substr(0,ta.replace(/[?#].*/,"").lastIndexOf("/")+1):ta="",ua=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ra&&(xa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),
@@ -127,14 +127,13 @@
var Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],dd={},ed={},gd=4;function R(a){hd||(hd=a)}function da(a){for(var b=Vc++,c=a.length;c<b;c++)a[c]=null;return b}function fa(a,b){a.Zd||(a.Zd=a.getContext,a.getContext=function(d,f){f=a.Zd(d,f);return"webgl"==d==f instanceof WebGLRenderingContext?f:null});var c=1<b.majorVersion?a.getContext("webgl2",b):a.getContext("webgl",b);return c?jd(c,b):0}
function jd(a,b){var c=da(ia),d={handle:c,attributes:b,version:b.majorVersion,Ud:a};a.canvas&&(a.canvas.Oe=d);ia[c]=d;("undefined"==typeof b.Ze||b.Ze)&&kd(d);return c}function ha(a){v=ia[a];r.vf=S=v&&v.Ud;return!(a&&!S)}
function kd(a){a||(a=v);if(!a.gf){a.gf=!0;var b=a.Ud;Sc(b);Tc(b);Uc(b);b.Fe=b.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");b.Je=b.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");2<=a.version&&(b.Ge=b.getExtension("EXT_disjoint_timer_query_webgl2"));if(2>a.version||!b.Ge)b.Ge=b.getExtension("EXT_disjoint_timer_query");b.wf=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}
-var v,hd;function ld(a){S.bindVertexArray(ad[a])}function md(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2];S.deleteVertexArray(ad[d]);ad[d]=null}}var nd=[];function od(a,b,c,d){S.drawElements(a,b,c,d)}function pd(a,b,c,d){for(var f=0;f<a;f++){var k=S[c](),l=k&&da(d);k?(k.name=l,d[l]=k):R(1282);K[b+4*f>>2]=l}}function qd(a,b){pd(a,b,"createVertexArray",ad)}
-function rd(a,b,c){if(b){var d=void 0;switch(a){case 36346:d=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:d=0;break;case 34466:var f=S.getParameter(34467);d=f?f.length:0;break;case 33309:if(2>v.version){R(1282);return}d=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>v.version){R(1280);return}d=33307==a?3:0}if(void 0===d)switch(f=S.getParameter(a),typeof f){case "number":d=f;break;case "boolean":d=f?1:0;break;case "string":R(1280);return;case "object":if(null===
+var v,hd,ld={},nd=()=>{if(!md){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in ld)void 0===ld[b]?delete a[b]:a[b]=ld[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);md=c}return md},md,od=[null,[],[]];function pd(a){S.bindVertexArray(ad[a])}
+function qd(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2];S.deleteVertexArray(ad[d]);ad[d]=null}}var rd=[];function sd(a,b,c,d){S.drawElements(a,b,c,d)}function td(a,b,c,d){for(var f=0;f<a;f++){var k=S[c](),l=k&&da(d);k?(k.name=l,d[l]=k):R(1282);K[b+4*f>>2]=l}}function ud(a,b){td(a,b,"createVertexArray",ad)}
+function vd(a,b,c){if(b){var d=void 0;switch(a){case 36346:d=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:d=0;break;case 34466:var f=S.getParameter(34467);d=f?f.length:0;break;case 33309:if(2>v.version){R(1282);return}d=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>v.version){R(1280);return}d=33307==a?3:0}if(void 0===d)switch(f=S.getParameter(a),typeof f){case "number":d=f;break;case "boolean":d=f?1:0;break;case "string":R(1280);return;case "object":if(null===
f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:d=0;break;default:R(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a<f.length;++a)switch(c){case 0:K[b+4*a>>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ha[b+a>>0]=f[a]?1:0}return}try{d=f.name|0}catch(k){R(1280);
-Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:R(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=d;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=d;break;case 2:N[b>>2]=d;break;case 4:Ha[b>>0]=d?1:0}}else R(1281)}var td=a=>{var b=ja(a)+1,c=sd(b);c&&ka(a,C,c,b);return c};
-function ud(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function vd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function wd(a,b,c,d,f){a=vd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+d*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+l-1&-l)>>k)}
-function W(a){var b=S.We;if(b){var c=b.je[a];"number"==typeof c&&(b.je[a]=c=S.getUniformLocation(b,b.Me[a]+(0<c?"["+c+"]":"")));return c}R(1282)}
-var xd=[],yd=[],zd={},Bd=()=>{if(!Ad){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in zd)void 0===zd[b]?delete a[b]:a[b]=zd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Ad=c}return Ad},Ad,Cd=[null,[],[]],Dd=a=>0===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];
-function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}
+Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:R(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=d;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=d;break;case 2:N[b>>2]=d;break;case 4:Ha[b>>0]=d?1:0}}else R(1281)}var xd=a=>{var b=ja(a)+1,c=wd(b);c&&ka(a,C,c,b);return c};
+function yd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function zd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function Ad(a,b,c,d,f){a=zd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+d*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+l-1&-l)>>k)}
+function W(a){var b=S.We;if(b){var c=b.je[a];"number"==typeof c&&(b.je[a]=c=S.getUniformLocation(b,b.Me[a]+(0<c?"["+c+"]":"")));return c}R(1282)}var Bd=[],Cd=[],Dd=a=>0===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}
var Hd=(a,b,c,d)=>{function f(u,F,H){for(u="number"==typeof u?u.toString():u||"";u.length<F;)u=H[0]+u;return u}function k(u,F){return f(u,F,"0")}function l(u,F){function H(ca){return 0>ca?-1:0<ca?1:0}var T;0===(T=H(u.getFullYear()-F.getFullYear()))&&0===(T=H(u.getMonth()-F.getMonth()))&&(T=H(u.getDate()-F.getDate()));return T}function m(u){switch(u.getDay()){case 0:return new Date(u.getFullYear()-1,11,29);case 1:return u;case 2:return new Date(u.getFullYear(),0,3);case 3:return new Date(u.getFullYear(),
0,2);case 4:return new Date(u.getFullYear(),0,1);case 5:return new Date(u.getFullYear()-1,11,31);case 6:return new Date(u.getFullYear()-1,11,30)}}function p(u){var F=u.$d;for(u=new Date((new Date(u.ae+1900,0,1)).getTime());0<F;){var H=u.getMonth(),T=(Dd(u.getFullYear())?Ed:Fd)[H];if(F>T-u.getDate())F-=T-u.getDate()+1,u.setDate(1),11>H?u.setMonth(H+1):(u.setMonth(0),u.setFullYear(u.getFullYear()+1));else{u.setDate(u.getDate()+F);break}}H=new Date(u.getFullYear()+1,0,4);F=m(new Date(u.getFullYear(),
0,4));H=m(H);return 0>=l(F,u)?0>=l(H,u)?u.getFullYear()+1:u.getFullYear():u.getFullYear()-1}var w=K[d+40>>2];d={tf:K[d>>2],sf:K[d+4>>2],te:K[d+8>>2],Ce:K[d+12>>2],ue:K[d+16>>2],ae:K[d+20>>2],Vd:K[d+24>>2],$d:K[d+28>>2],zf:K[d+32>>2],rf:K[d+36>>2],uf:w?w?kb(C,w):"":""};c=c?kb(C,c):"";w={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y",
@@ -148,55 +147,55 @@
cc.prototype.bf=function(a){this.Ke&&(a=this.Ke(a));return a};cc.prototype.Ee=function(a){this.Xd&&this.Xd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=nb;cc.prototype.deleteObject=function(a){if(null!==a)a["delete"]()};
cc.prototype.fromWireType=function(a){function b(){return this.pe?Pb(this.Ld.fe,{Nd:this.jf,Kd:c,Td:this,Pd:a}):Pb(this.Ld.fe,{Nd:this,Kd:a})}var c=this.bf(a);if(!c)return this.Ee(a),null;var d=Ob(this.Ld,c);if(void 0!==d){if(0===d.kd.count.value)return d.kd.Kd=c,d.kd.Pd=a,d.clone();d=d.clone();this.Ee(a);return d}d=this.Ld.af(c);d=Jb[d];if(!d)return b.call(this);d=this.oe?d.Ve:d.pointerType;var f=Db(c,this.Ld,d.Ld);return null===f?b.call(this):this.pe?Pb(d.Ld.fe,{Nd:d,Kd:f,Td:this,Pd:a}):Pb(d.Ld.fe,
{Nd:d,Kd:f})};nc=r.UnboundTypeError=function(a,b){var c=Tb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,"UnboundTypeError");
-Object.assign(uc.prototype,{get(a){return this.Wd[a]},has(a){return void 0!==this.Wd[a]},ve(a){var b=this.Ie.pop()||this.Wd.length;this.Wd[b]=a;return b},we(a){this.Wd[a]=void 0;this.Ie.push(a)}});vc.Wd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Zd=vc.Wd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Zd;b<vc.Wd.length;++b)void 0!==vc.Wd[b]&&++a;return a};for(var S,Kd=0;32>Kd;++Kd)nd.push(Array(Kd));var Ld=new Float32Array(288);
-for(Kd=0;288>Kd;++Kd)xd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)yd[Kd]=Md.subarray(0,Kd+1);
-var $d={H:function(a,b,c){(new fb(a)).Zd(b,c);gb=a;ib++;throw gb;},U:function(){return 0},tb:()=>{},vb:function(){return 0},qb:()=>{},rb:()=>{},V:function(){},sb:()=>{},C:function(a){var b=lb[a];delete lb[a];var c=b.Be,d=b.Xd,f=b.He,k=f.map(l=>l.ef).concat(f.map(l=>l.nf));tb([a],k,l=>{var m={};f.forEach((p,w)=>{var y=l[w],B=p.cf,D=p.df,u=l[w+f.length],F=p.mf,H=p.pf;m[p.$e]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(p){var w=
-{},y;for(y in m)w[y]=m[y].read(p);d(p);return w},toWireType:function(p,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: "${y}"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==p&&p.push(d,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:d}]})},kb:function(){},zb:function(a,b,c,d,f){var k=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia;
+Object.assign(uc.prototype,{get(a){return this.Wd[a]},has(a){return void 0!==this.Wd[a]},ve(a){var b=this.Ie.pop()||this.Wd.length;this.Wd[b]=a;return b},we(a){this.Wd[a]=void 0;this.Ie.push(a)}});vc.Wd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Zd=vc.Wd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Zd;b<vc.Wd.length;++b)void 0!==vc.Wd[b]&&++a;return a};for(var S,Kd=0;32>Kd;++Kd)rd.push(Array(Kd));var Ld=new Float32Array(288);
+for(Kd=0;288>Kd;++Kd)Bd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)Cd[Kd]=Md.subarray(0,Kd+1);
+var $d={H:function(a,b,c){(new fb(a)).Zd(b,c);gb=a;ib++;throw gb;},$:function(){return 0},$c:()=>{},_c:function(){return 0},Zc:()=>{},Yc:()=>{},_:function(){},Xc:()=>{},E:function(a){var b=lb[a];delete lb[a];var c=b.Be,d=b.Xd,f=b.He,k=f.map(l=>l.ef).concat(f.map(l=>l.nf));tb([a],k,l=>{var m={};f.forEach((p,w)=>{var y=l[w],B=p.cf,D=p.df,u=l[w+f.length],F=p.mf,H=p.pf;m[p.$e]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(p){var w=
+{},y;for(y in m)w[y]=m[y].read(p);d(p);return w},toWireType:function(p,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: "${y}"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==p&&p.push(d,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:d}]})},fa:function(){},Tc:function(a,b,c,d,f){var k=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia;
else if(4===c)m=K;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(m[l>>k])},Sd:null})},l:function(a,b,c,d,f,k,l,m,p,w,y,B,D){y=O(y);k=mc(f,k);m&&(m=mc(l,m));w&&(w=mc(p,w));D=mc(B,D);var u=Sb(y);Vb(u,function(){rc(`Cannot construct ${y} due to unbound types`,[d])});tb([a,b,c],d?[d]:[],function(F){F=F[0];if(d){var H=F.Ld;var T=H.fe}else T=Rb.prototype;F=Tb(u,function(){if(Object.getPrototypeOf(this)!==ca)throw new xb("Use 'new' to construct "+y);if(void 0===Y.Yd)throw new xb(y+
" has no accessible constructor");var Ma=Y.Yd[arguments.length];if(void 0===Ma)throw new xb(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(Y.Yd).toString()}) parameters instead!`);return Ma.apply(this,arguments)});var ca=Object.create(T,{constructor:{value:F}});F.prototype=ca;var Y=new Wb(y,F,ca,D,H,k,m,w);Y.Qd&&(void 0===Y.Qd.le&&(Y.Qd.le=[]),Y.Qd.le.push(Y));H=new cc(y,Y,!0,!1,!1);T=new cc(y+"*",Y,!1,!1,!1);var va=new cc(y+" const*",
Y,!1,!0,!1);Jb[a]={pointerType:T,Ve:va};dc(u,F);return[H,T,va]})},e:function(a,b,c,d,f,k,l){var m=tc(c,d);b=O(b);k=mc(f,k);tb([],[a],function(p){function w(){rc(`Cannot call ${y} due to unbound types`,m)}p=p[0];var y=`${p.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var B=p.Ld.constructor;void 0===B[b]?(w.ce=c-1,B[b]=w):(Ub(B,b,y),B[b].Od[c-1]=w);tb([],m,function(D){D=[D[0],null].concat(D.slice(1));D=sc(y,D,null,k,l);void 0===B[b].Od?(D.ce=c-1,B[b]=D):B[b].Od[c-1]=D;if(p.Ld.le)for(const u of p.Ld.le)u.constructor.hasOwnProperty(b)||
-(u.constructor[b]=D);return[]});return[]})},A:function(a,b,c,d,f,k){var l=tc(b,c);f=mc(d,f);tb([],[a],function(m){m=m[0];var p=`constructor ${m.name}`;void 0===m.Ld.Yd&&(m.Ld.Yd=[]);if(void 0!==m.Ld.Yd[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Ld.Yd[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)};
+(u.constructor[b]=D);return[]});return[]})},B:function(a,b,c,d,f,k){var l=tc(b,c);f=mc(d,f);tb([],[a],function(m){m=m[0];var p=`constructor ${m.name}`;void 0===m.Ld.Yd&&(m.Ld.Yd=[]);if(void 0!==m.Ld.Yd[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Ld.Yd[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)};
tb([],l,function(w){w.splice(1,0,null);m.Ld.Yd[b-1]=sc(p,w,null,f,k);return[]});return[]})},a:function(a,b,c,d,f,k,l,m){var p=tc(c,d);b=O(b);k=mc(f,k);tb([],[a],function(w){function y(){rc(`Cannot call ${B} due to unbound types`,p)}w=w[0];var B=`${w.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);m&&w.Ld.kf.push(b);var D=w.Ld.fe,u=D[b];void 0===u||void 0===u.Od&&u.className!==w.name&&u.ce===c-2?(y.ce=c-2,y.className=w.name,D[b]=y):(Ub(D,b,B),D[b].Od[c-2]=y);tb([],p,function(F){F=sc(B,F,
-w,k,l);void 0===D[b].Od?(F.ce=c-2,D[b]=F):D[b].Od[c-2]=F;return[]});return[]})},t:function(a,b,c){a=O(a);tb([],[b],function(d){d=d[0];r[a]=d.fromWireType(c);return[]})},yb:function(a,b){b=O(b);ub(a,{name:b,fromWireType:function(c){var d=xc(c);wc(c);return d},toWireType:function(c,d){return ac(d)},argPackAdvance:8,readValueFromPointer:nb,Sd:null})},j:function(a,b,c,d){function f(){}c=vb(c);b=O(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,
-l){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,d),Sd:null});Vb(b,f)},b:function(a,b,c){var d=zc(a,"enum");b=O(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},X:function(a,b,c){c=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Sd:null})},v:function(a,b,c,d,f,k){var l=tc(b,c);a=O(a);f=
-mc(d,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},E:function(a,b,c,d,f){b=O(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===d){var l=32-8*c;k=m=>m<<l>>>l}c=b.includes("unsigned")?function(m,p){return p>>>0}:function(m,p){return p};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==d),Sd:null})},s:function(a,b,c){function d(k){k>>=2;var l=
-L;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);ub(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ff:!0})},q:function(a,b,c,d,f,k,l,m,p,w,y,B){c=O(c);k=mc(f,k);m=mc(l,m);w=mc(p,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Ld,!1,!1,!0,D,d,k,m,w,B)]})},W:function(a,b){b=O(b);var c="std::string"===b;ub(a,{name:b,fromWireType:function(d){var f=L[d>>2],k=d+4;if(c)for(var l=
-k,m=0;m<=f;++m){var p=k+m;if(m==f||0==C[p]){l=l?kb(C,l,p-l):"";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=p+1}}else{w=Array(f);for(m=0;m<f;++m)w[m]=String.fromCharCode(C[k+m]);w=w.join("")}qc(d);return w},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k="string"==typeof f;k||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q("Cannot pass non-string to std::string");var l=c&&k?ja(f):f.length;var m=sd(4+l+1),p=m+4;L[m>>2]=
-l;if(c&&k)ka(f,C,p,l+1);else if(k)for(k=0;k<l;++k){var w=f.charCodeAt(k);255<w&&(qc(p),Q("String has UTF-16 code units that do not fit in 8 bits"));C[p+k]=w}else for(k=0;k<l;++k)C[p+k]=f[k];null!==d&&d.push(qc,m);return m},argPackAdvance:8,readValueFromPointer:nb,Sd:function(d){qc(d)}})},N:function(a,b,c){c=O(c);if(2===b){var d=Dc;var f=Ec;var k=Fc;var l=()=>Ja;var m=1}else 4===b&&(d=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(p){for(var w=L[p>>2],y=l(),B,D=p+4,u=0;u<=w;++u){var F=
-p+4+u*b;if(u==w||0==y[F>>m])D=d(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(p);return B},toWireType:function(p,w){"string"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=sd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==p&&p.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:function(p){qc(p)}})},D:function(a,b,c,d,f,k){lb[a]={name:O(b),Be:mc(c,d),Xd:mc(f,k),He:[]}},d:function(a,b,c,d,f,k,l,m,p,w){lb[a].He.push({$e:O(b),ef:c,cf:mc(d,f),df:k,
-nf:l,mf:mc(m,p),pf:w})},Ab:function(a,b){b=O(b);ub(a,{hf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},xb:()=>!0,mb:()=>{throw Infinity;},F:function(a,b,c){a=xc(a);b=zc(b,"emval::as");var d=[],f=ac(d);L[c>>2]=f;return b.toWireType(d,a)},P:function(a,b,c,d,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[d>>2]=ac(k);return a(b,c,k,f)},u:function(a,b,c,d){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,d)},c:wc,K:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},r:function(a,
-b){var c=Oc(a,b),d=c[0];b=d.name+"_$"+c.slice(1).map(function(l){return l.name}).join("_")+"$";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,p,w)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(w+y),y+=c[B+1].argPackAdvance;l=l[m].apply(l,k);for(B=0;B<a-1;++B)c[B+1].Xe&&c[B+1].Xe(k[B]);if(!d.hf)return d.toWireType(p,l)});return Pc[b]=f},z:function(a,b){a=xc(a);b=xc(b);return ac(a[b])},m:function(a){4<a&&(vc.get(a).Le+=1)},J:function(a,b,c,d){a=xc(a);var f=Rc[b];f||(f=
-Qc(b),Rc[b]=f);return f(a,c,d)},I:function(){return ac([])},f:function(a){return ac(Kc(a))},G:function(){return ac({})},eb:function(a){a=xc(a);return!a},B:function(a){var b=xc(a);mb(b);wc(a)},i:function(a,b,c){a=xc(a);b=xc(b);c=xc(c);a[b]=c},g:function(a,b){a=zc(a,"_emval_take_value");a=a.readValueFromPointer(b);return ac(a)},hb:function(){return-52},ib:function(){},h:()=>{Ea("")},wb:()=>performance.now(),Uc:function(a){S.activeTexture(a)},Vc:function(a,b){S.attachShader(Xc[a],$c[b])},Wc:function(a,
-b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):"")},Xc:function(a,b){35051==a?S.ye=b:35052==a&&(S.de=b);S.bindBuffer(a,Wc[b])},$:function(a,b){S.bindFramebuffer(a,Yc[b])},Yb:function(a,b){S.bindRenderbuffer(a,Zc[b])},Ib:function(a,b){S.bindSampler(a,bd[b])},Yc:function(a,b){S.bindTexture(a,ea[b])},qc:ld,tc:ld,Zc:function(a,b,c,d){S.blendColor(a,b,c,d)},_c:function(a){S.blendEquation(a)},$c:function(a,b){S.blendFunc(a,b)},Sb:function(a,b,c,d,f,k,l,m,p,w){S.blitFramebuffer(a,b,c,d,f,k,l,m,p,w)},aa:function(a,
-b,c,d){2<=v.version?c&&b?S.bufferData(a,C,d,c,b):S.bufferData(a,b,d):S.bufferData(a,c?C.subarray(c,c+b):b,d)},ba:function(a,b,c,d){2<=v.version?c&&S.bufferSubData(a,b,C,d,c):S.bufferSubData(a,b,C.subarray(d,d+c))},Zb:function(a){return S.checkFramebufferStatus(a)},R:function(a){S.clear(a)},_:function(a,b,c,d){S.clearColor(a,b,c,d)},T:function(a){S.clearStencil(a)},cb:function(a,b,c,d){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*d)},ca:function(a,b,c,d){S.colorMask(!!a,!!b,!!c,!!d)},da:function(a){S.compileShader($c[a])},
-ea:function(a,b,c,d,f,k,l,m){2<=v.version?S.de||!l?S.compressedTexImage2D(a,b,c,d,f,k,l,m):S.compressedTexImage2D(a,b,c,d,f,k,C,m,l):S.compressedTexImage2D(a,b,c,d,f,k,m?C.subarray(m,m+l):null)},fa:function(a,b,c,d,f,k,l,m,p){2<=v.version?S.de||!m?S.compressedTexSubImage2D(a,b,c,d,f,k,l,m,p):S.compressedTexSubImage2D(a,b,c,d,f,k,l,C,p,m):S.compressedTexSubImage2D(a,b,c,d,f,k,l,p?C.subarray(p,p+m):null)},Qb:function(a,b,c,d,f){S.copyBufferSubData(a,b,c,d,f)},ga:function(a,b,c,d,f,k,l,m){S.copyTexSubImage2D(a,
-b,c,d,f,k,l,m)},ha:function(){var a=da(Xc),b=S.createProgram();b.name=a;b.se=b.qe=b.re=0;b.De=1;Xc[a]=b;return a},ia:function(a){var b=da($c);$c[b]=S.createShader(a);return b},ja:function(a){S.cullFace(a)},ka:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=Wc[d];f&&(S.deleteBuffer(f),f.name=0,Wc[d]=null,d==S.ye&&(S.ye=0),d==S.de&&(S.de=0))}},_b:function(a,b){for(var c=0;c<a;++c){var d=K[b+4*c>>2],f=Yc[d];f&&(S.deleteFramebuffer(f),f.name=0,Yc[d]=null)}},la:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),
-b.name=0,Xc[a]=null):R(1281)}},$b:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=Zc[d];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[d]=null)}},Jb:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=bd[d];f&&(S.deleteSampler(f),f.name=0,bd[d]=null)}},ma:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},Rb:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},na:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=ea[d];f&&(S.deleteTexture(f),
-f.name=0,ea[d]=null)}},rc:md,uc:md,oa:function(a){S.depthMask(!!a)},pa:function(a){S.disable(a)},qa:function(a){S.disableVertexAttribArray(a)},ra:function(a,b,c){S.drawArrays(a,b,c)},oc:function(a,b,c,d){S.drawArraysInstanced(a,b,c,d)},mc:function(a,b,c,d,f){S.Fe.drawArraysInstancedBaseInstanceWEBGL(a,b,c,d,f)},kc:function(a,b){for(var c=nd[a],d=0;d<a;d++)c[d]=K[b+4*d>>2];S.drawBuffers(c)},sa:od,pc:function(a,b,c,d,f){S.drawElementsInstanced(a,b,c,d,f)},nc:function(a,b,c,d,f,k,l){S.Fe.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,
-b,c,d,f,k,l)},ec:function(a,b,c,d,f,k){od(a,d,f,k)},ta:function(a){S.enable(a)},ua:function(a){S.enableVertexAttribArray(a)},Ob:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},va:function(){S.finish()},wa:function(){S.flush()},ac:function(a,b,c,d){S.framebufferRenderbuffer(a,b,c,Zc[d])},bc:function(a,b,c,d,f){S.framebufferTexture2D(a,b,c,ea[d],f)},xa:function(a){S.frontFace(a)},ya:function(a,b){pd(a,b,"createBuffer",Wc)},cc:function(a,b){pd(a,b,"createFramebuffer",Yc)},dc:function(a,
-b){pd(a,b,"createRenderbuffer",Zc)},Kb:function(a,b){pd(a,b,"createSampler",bd)},za:function(a,b){pd(a,b,"createTexture",ea)},sc:qd,vc:qd,Ub:function(a){S.generateMipmap(a)},Aa:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},Ba:function(){var a=S.getError()||hd;hd=0;return a},Ca:function(a,b){rd(a,b,2)},Vb:function(a,b,c,d){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[d>>2]=a},L:function(a,b){rd(a,b,0)},Da:function(a,
-b,c,d){a=S.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0<b&&d?ka(a,C,d,b):0;c&&(K[c>>2]=b)},Ea:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a="(unknown error)"),K[c>>2]=a.length+1;else if(35719==b){if(!a.se)for(b=0;b<S.getProgramParameter(a,35718);++b)a.se=Math.max(a.se,S.getActiveUniform(a,b).name.length+1);K[c>>2]=a.se}else if(35722==b){if(!a.qe)for(b=0;b<S.getProgramParameter(a,35721);++b)a.qe=Math.max(a.qe,S.getActiveAttrib(a,
-b).name.length+1);K[c>>2]=a.qe}else if(35381==b){if(!a.re)for(b=0;b<S.getProgramParameter(a,35382);++b)a.re=Math.max(a.re,S.getActiveUniformBlockName(a,b).length+1);K[c>>2]=a.re}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},Wb:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},Fa:function(a,b,c,d){a=S.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0<b&&d?ka(a,C,d,b):0;c&&(K[c>>2]=b)},Fb:function(a,b,c,d){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>>
-2]=a.rangeMax;K[d>>2]=a.precision},Ga:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},Q:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return"GL_"+d}));b=td(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&td(b);break;
-case 7938:b=S.getParameter(7938);b=2<=v.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=td(b);break;case 35724:b=S.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=td(b);break;default:R(1280)}dd[a]=b}return b},bb:function(a,b){if(2>v.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[],
-c=c.concat(c.map(function(d){return"GL_"+d})),c=c.map(function(d){return td(d)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},Ha:function(a,b){b=b?kb(C,b):"";if(a=Xc[a]){var c=a,d=c.je,f=c.Ne,k;if(!d)for(c.je=d={},c.Me={},k=0;k<S.getProgramParameter(c,35718);++k){var l=S.getActiveUniform(c,k);var m=l.name;l=l.size;var p=ud(m);p=0<p?m.slice(0,p):m;var w=c.De;c.De+=l;f[p]=[l,w];for(m=0;m<l;++m)d[w]=m,c.Me[w++]=p}c=a.je;d=0;f=b;k=ud(b);0<k&&(d=parseInt(b.slice(k+1))>>>0,f=b.slice(0,
-k));if((f=a.Ne[f])&&d<f[0]&&(d+=f[1],c[d]=c[d]||S.getUniformLocation(a,b)))return d}else R(1281);return-1},Gb:function(a,b,c){for(var d=nd[b],f=0;f<b;f++)d[f]=K[c+4*f>>2];S.invalidateFramebuffer(a,d)},Hb:function(a,b,c,d,f,k,l){for(var m=nd[b],p=0;p<b;p++)m[p]=K[c+4*p>>2];S.invalidateSubFramebuffer(a,m,d,f,k,l)},Pb:function(a){return S.isSync(cd[a])},Ia:function(a){return(a=ea[a])?S.isTexture(a):0},Ja:function(a){S.lineWidth(a)},Ka:function(a){a=Xc[a];S.linkProgram(a);a.je=0;a.Ne={}},ic:function(a,
-b,c,d,f,k){S.Je.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,d>>2,L,f>>2,k)},jc:function(a,b,c,d,f,k,l,m){S.Je.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,d>>2,K,f>>2,K,k>>2,L,l>>2,m)},La:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},lc:function(a){S.readBuffer(a)},Ma:function(a,b,c,d,f,k,l){if(2<=v.version)if(S.ye)S.readPixels(a,b,c,d,f,k,l);else{var m=vd(k);S.readPixels(a,b,c,d,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=wd(k,f,c,d,l))?S.readPixels(a,
-b,c,d,f,k,l):R(1280)},Xb:function(a,b,c,d){S.renderbufferStorage(a,b,c,d)},Tb:function(a,b,c,d,f){S.renderbufferStorageMultisample(a,b,c,d,f)},Lb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},Mb:function(a,b,c){S.samplerParameteri(bd[a],b,c)},Nb:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},Na:function(a,b,c,d){S.scissor(a,b,c,d)},Oa:function(a,b,c,d){for(var f="",k=0;k<b;++k){var l=d?K[d+4*k>>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):"";f+=l}S.shaderSource($c[a],f)},Pa:function(a,b,
-c){S.stencilFunc(a,b,c)},Qa:function(a,b,c,d){S.stencilFuncSeparate(a,b,c,d)},Ra:function(a){S.stencilMask(a)},Sa:function(a,b){S.stencilMaskSeparate(a,b)},Ta:function(a,b,c){S.stencilOp(a,b,c)},Ua:function(a,b,c,d){S.stencilOpSeparate(a,b,c,d)},Va:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=vd(m);S.texImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,d,f,k,l,m,null);else S.texImage2D(a,b,c,d,f,k,l,m,p?
-wd(m,l,d,f,p):null)},Wa:function(a,b,c){S.texParameterf(a,b,c)},Xa:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Ya:function(a,b,c){S.texParameteri(a,b,c)},Za:function(a,b,c){S.texParameteri(a,b,K[c>>2])},fc:function(a,b,c,d,f){S.texStorage2D(a,b,c,d,f)},_a:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texSubImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=vd(m);S.texSubImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,d,f,k,l,m,null);else w=null,p&&(w=
-wd(m,l,f,k,p)),S.texSubImage2D(a,b,c,d,f,k,l,m,w)},$a:function(a,b){S.uniform1f(W(a),b)},ab:function(a,b,c){if(2<=v.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var d=xd[b-1],f=0;f<b;++f)d[f]=N[c+4*f>>2];else d=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),d)}},Qc:function(a,b){S.uniform1i(W(a),b)},Rc:function(a,b,c){if(2<=v.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var d=yd[b-1],f=0;f<b;++f)d[f]=K[c+4*f>>2];else d=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),d)}},Sc:function(a,
-b,c){S.uniform2f(W(a),b,c)},Tc:function(a,b,c){if(2<=v.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var d=xd[2*b-1],f=0;f<2*b;f+=2)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2];else d=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),d)}},Pc:function(a,b,c){S.uniform2i(W(a),b,c)},Oc:function(a,b,c){if(2<=v.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var d=yd[2*b-1],f=0;f<2*b;f+=2)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2];else d=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),d)}},Nc:function(a,
-b,c,d){S.uniform3f(W(a),b,c,d)},Mc:function(a,b,c){if(2<=v.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var d=xd[3*b-1],f=0;f<3*b;f+=3)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2],d[f+2]=N[c+(4*f+8)>>2];else d=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),d)}},Lc:function(a,b,c,d){S.uniform3i(W(a),b,c,d)},Kc:function(a,b,c){if(2<=v.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var d=yd[3*b-1],f=0;f<3*b;f+=3)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2];else d=
-K.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),d)}},Jc:function(a,b,c,d,f){S.uniform4f(W(a),b,c,d,f)},Ic:function(a,b,c){if(2<=v.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var d=xd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;d[k]=f[l];d[k+1]=f[l+1];d[k+2]=f[l+2];d[k+3]=f[l+3]}}else d=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),d)}},wc:function(a,b,c,d,f){S.uniform4i(W(a),b,c,d,f)},xc:function(a,b,c){if(2<=v.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var d=yd[4*b-
-1],f=0;f<4*b;f+=4)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2],d[f+3]=K[c+(4*f+12)>>2];else d=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),d)}},yc:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix2fv(W(a),!!c,N,d>>2,4*b);else{if(72>=b)for(var f=xd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2];else f=N.subarray(d>>2,d+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},zc:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix3fv(W(a),
-!!c,N,d>>2,9*b);else{if(32>=b)for(var f=xd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2],f[k+4]=N[d+(4*k+16)>>2],f[k+5]=N[d+(4*k+20)>>2],f[k+6]=N[d+(4*k+24)>>2],f[k+7]=N[d+(4*k+28)>>2],f[k+8]=N[d+(4*k+32)>>2];else f=N.subarray(d>>2,d+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},Ac:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix4fv(W(a),!!c,N,d>>2,16*b);else{if(18>=b){var f=xd[16*b-1],k=N;d>>=2;for(var l=0;l<16*b;l+=16){var m=d+l;f[l]=
-k[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(d>>2,d+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},Bc:function(a){a=Xc[a];S.useProgram(a);S.We=a},Cc:function(a,b){S.vertexAttrib1f(a,b)},Dc:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},Ec:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},
-Fc:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},gc:function(a,b){S.vertexAttribDivisor(a,b)},hc:function(a,b,c,d,f){S.vertexAttribIPointer(a,b,c,d,f)},Gc:function(a,b,c,d,f,k){S.vertexAttribPointer(a,b,c,!!d,f,k)},Hc:function(a,b,c,d){S.viewport(a,b,c,d)},db:function(a,b,c,d){S.waitSync(cd[a],b,(c>>>0)+4294967296*d)},nb:a=>{var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);a:{f=f.min.call(f,
-2147483648,d+(65536-d%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},fb:function(){return v?v.handle:0},ob:(a,b)=>{var c=0;Bd().forEach(function(d,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k<d.length;++k)Ha[f++>>0]=d.charCodeAt(k);Ha[f>>0]=0;c+=d.length+1});return 0},pb:(a,b)=>{var c=Bd();L[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});L[b>>2]=d;return 0},Bb:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,
-new db(a))},M:()=>52,gb:function(){return 52},ub:()=>52,jb:function(){return 70},S:(a,b,c,d)=>{for(var f=0,k=0;k<c;k++){var l=L[b>>2],m=L[b+4>>2];b+=8;for(var p=0;p<m;p++){var w=C[l+p],y=Cd[a];0===w||10===w?((1===a?Aa:Ca)(kb(y,0)),y.length=0):y.push(w)}f+=m}L[d>>2]=f;return 0},o:Nd,n:Od,k:Pd,O:Qd,Z:Rd,Y:Sd,x:Td,y:Ud,p:Vd,w:Wd,Cb:Xd,Db:Yd,Eb:Zd,lb:(a,b,c,d)=>Hd(a,b,c,d)};
+w,k,l);void 0===D[b].Od?(F.ce=c-2,D[b]=F):D[b].Od[c-2]=F;return[]});return[]})},t:function(a,b,c){a=O(a);tb([],[b],function(d){d=d[0];r[a]=d.fromWireType(c);return[]})},Sc:function(a,b){b=O(b);ub(a,{name:b,fromWireType:function(c){var d=xc(c);wc(c);return d},toWireType:function(c,d){return ac(d)},argPackAdvance:8,readValueFromPointer:nb,Sd:null})},j:function(a,b,c,d){function f(){}c=vb(c);b=O(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,
+l){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,d),Sd:null});Vb(b,f)},b:function(a,b,c){var d=zc(a,"enum");b=O(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},Y:function(a,b,c){c=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Sd:null})},v:function(a,b,c,d,f,k){var l=tc(b,c);a=O(a);f=
+mc(d,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},D:function(a,b,c,d,f){b=O(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===d){var l=32-8*c;k=m=>m<<l>>>l}c=b.includes("unsigned")?function(m,p){return p>>>0}:function(m,p){return p};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==d),Sd:null})},s:function(a,b,c){function d(k){k>>=2;var l=
+L;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);ub(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ff:!0})},r:function(a,b,c,d,f,k,l,m,p,w,y,B){c=O(c);k=mc(f,k);m=mc(l,m);w=mc(p,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Ld,!1,!1,!0,D,d,k,m,w,B)]})},X:function(a,b){b=O(b);var c="std::string"===b;ub(a,{name:b,fromWireType:function(d){var f=L[d>>2],k=d+4;if(c)for(var l=
+k,m=0;m<=f;++m){var p=k+m;if(m==f||0==C[p]){l=l?kb(C,l,p-l):"";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=p+1}}else{w=Array(f);for(m=0;m<f;++m)w[m]=String.fromCharCode(C[k+m]);w=w.join("")}qc(d);return w},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k="string"==typeof f;k||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q("Cannot pass non-string to std::string");var l=c&&k?ja(f):f.length;var m=wd(4+l+1),p=m+4;L[m>>2]=
+l;if(c&&k)ka(f,C,p,l+1);else if(k)for(k=0;k<l;++k){var w=f.charCodeAt(k);255<w&&(qc(p),Q("String has UTF-16 code units that do not fit in 8 bits"));C[p+k]=w}else for(k=0;k<l;++k)C[p+k]=f[k];null!==d&&d.push(qc,m);return m},argPackAdvance:8,readValueFromPointer:nb,Sd:function(d){qc(d)}})},O:function(a,b,c){c=O(c);if(2===b){var d=Dc;var f=Ec;var k=Fc;var l=()=>Ja;var m=1}else 4===b&&(d=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(p){for(var w=L[p>>2],y=l(),B,D=p+4,u=0;u<=w;++u){var F=
+p+4+u*b;if(u==w||0==y[F>>m])D=d(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(p);return B},toWireType:function(p,w){"string"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=wd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==p&&p.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:function(p){qc(p)}})},C:function(a,b,c,d,f,k){lb[a]={name:O(b),Be:mc(c,d),Xd:mc(f,k),He:[]}},d:function(a,b,c,d,f,k,l,m,p,w){lb[a].He.push({$e:O(b),ef:c,cf:mc(d,f),df:k,
+nf:l,mf:mc(m,p),pf:w})},Rc:function(a,b){b=O(b);ub(a,{hf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},Qc:()=>!0,Pc:()=>{throw Infinity;},G:function(a,b,c){a=xc(a);b=zc(b,"emval::as");var d=[],f=ac(d);L[c>>2]=f;return b.toWireType(d,a)},N:function(a,b,c,d,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[d>>2]=ac(k);return a(b,c,k,f)},u:function(a,b,c,d){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,d)},c:wc,M:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},q:function(a,
+b){var c=Oc(a,b),d=c[0];b=d.name+"_$"+c.slice(1).map(function(l){return l.name}).join("_")+"$";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,p,w)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(w+y),y+=c[B+1].argPackAdvance;l=l[m].apply(l,k);for(B=0;B<a-1;++B)c[B+1].Xe&&c[B+1].Xe(k[B]);if(!d.hf)return d.toWireType(p,l)});return Pc[b]=f},A:function(a,b){a=xc(a);b=xc(b);return ac(a[b])},m:function(a){4<a&&(vc.get(a).Le+=1)},L:function(a,b,c,d){a=xc(a);var f=Rc[b];f||(f=
+Qc(b),Rc[b]=f);return f(a,c,d)},I:function(){return ac([])},f:function(a){return ac(Kc(a))},F:function(){return ac({})},Oc:function(a){a=xc(a);return!a},z:function(a){var b=xc(a);mb(b);wc(a)},i:function(a,b,c){a=xc(a);b=xc(b);c=xc(c);a[b]=c},g:function(a,b){a=zc(a,"_emval_take_value");a=a.readValueFromPointer(b);return ac(a)},ea:function(){return-52},da:function(){},h:()=>{Ea("")},Nc:()=>performance.now(),Mc:a=>{var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);
+d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);a:{f=f.min.call(f,2147483648,d+(65536-d%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},Lc:function(){return v?v.handle:0},Wc:(a,b)=>{var c=0;nd().forEach(function(d,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k<d.length;++k)Ha[f++>>0]=d.charCodeAt(k);Ha[f>>0]=0;c+=d.length+1});return 0},Vc:(a,b)=>{var c=nd();L[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});L[b>>
+2]=d;return 0},Kc:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,new db(a))},P:()=>52,ha:function(){return 52},Uc:()=>52,ga:function(){return 70},Z:(a,b,c,d)=>{for(var f=0,k=0;k<c;k++){var l=L[b>>2],m=L[b+4>>2];b+=8;for(var p=0;p<m;p++){var w=C[l+p],y=od[a];0===w||10===w?((1===a?Aa:Ca)(kb(y,0)),y.length=0):y.push(w)}f+=m}L[d>>2]=f;return 0},Jc:function(a){S.activeTexture(a)},Ic:function(a,b){S.attachShader(Xc[a],$c[b])},Hc:function(a,b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):"")},Gc:function(a,
+b){35051==a?S.ye=b:35052==a&&(S.de=b);S.bindBuffer(a,Wc[b])},W:function(a,b){S.bindFramebuffer(a,Yc[b])},Fc:function(a,b){S.bindRenderbuffer(a,Zc[b])},Ec:function(a,b){S.bindSampler(a,bd[b])},Dc:function(a,b){S.bindTexture(a,ea[b])},Cc:pd,Bc:pd,Ac:function(a,b,c,d){S.blendColor(a,b,c,d)},zc:function(a){S.blendEquation(a)},yc:function(a,b){S.blendFunc(a,b)},xc:function(a,b,c,d,f,k,l,m,p,w){S.blitFramebuffer(a,b,c,d,f,k,l,m,p,w)},wc:function(a,b,c,d){2<=v.version?c&&b?S.bufferData(a,C,d,c,b):S.bufferData(a,
+b,d):S.bufferData(a,c?C.subarray(c,c+b):b,d)},vc:function(a,b,c,d){2<=v.version?c&&S.bufferSubData(a,b,C,d,c):S.bufferSubData(a,b,C.subarray(d,d+c))},uc:function(a){return S.checkFramebufferStatus(a)},V:function(a){S.clear(a)},U:function(a,b,c,d){S.clearColor(a,b,c,d)},T:function(a){S.clearStencil(a)},ca:function(a,b,c,d){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*d)},tc:function(a,b,c,d){S.colorMask(!!a,!!b,!!c,!!d)},sc:function(a){S.compileShader($c[a])},rc:function(a,b,c,d,f,k,l,m){2<=
+v.version?S.de||!l?S.compressedTexImage2D(a,b,c,d,f,k,l,m):S.compressedTexImage2D(a,b,c,d,f,k,C,m,l):S.compressedTexImage2D(a,b,c,d,f,k,m?C.subarray(m,m+l):null)},qc:function(a,b,c,d,f,k,l,m,p){2<=v.version?S.de||!m?S.compressedTexSubImage2D(a,b,c,d,f,k,l,m,p):S.compressedTexSubImage2D(a,b,c,d,f,k,l,C,p,m):S.compressedTexSubImage2D(a,b,c,d,f,k,l,p?C.subarray(p,p+m):null)},pc:function(a,b,c,d,f){S.copyBufferSubData(a,b,c,d,f)},oc:function(a,b,c,d,f,k,l,m){S.copyTexSubImage2D(a,b,c,d,f,k,l,m)},nc:function(){var a=
+da(Xc),b=S.createProgram();b.name=a;b.se=b.qe=b.re=0;b.De=1;Xc[a]=b;return a},mc:function(a){var b=da($c);$c[b]=S.createShader(a);return b},lc:function(a){S.cullFace(a)},kc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=Wc[d];f&&(S.deleteBuffer(f),f.name=0,Wc[d]=null,d==S.ye&&(S.ye=0),d==S.de&&(S.de=0))}},jc:function(a,b){for(var c=0;c<a;++c){var d=K[b+4*c>>2],f=Yc[d];f&&(S.deleteFramebuffer(f),f.name=0,Yc[d]=null)}},ic:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),b.name=0,Xc[a]=null):
+R(1281)}},hc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=Zc[d];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[d]=null)}},gc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=bd[d];f&&(S.deleteSampler(f),f.name=0,bd[d]=null)}},fc:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},ec:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},dc:function(a,b){for(var c=0;c<a;c++){var d=K[b+4*c>>2],f=ea[d];f&&(S.deleteTexture(f),f.name=0,ea[d]=null)}},
+cc:qd,bc:qd,ac:function(a){S.depthMask(!!a)},$b:function(a){S.disable(a)},_b:function(a){S.disableVertexAttribArray(a)},Zb:function(a,b,c){S.drawArrays(a,b,c)},Yb:function(a,b,c,d){S.drawArraysInstanced(a,b,c,d)},Xb:function(a,b,c,d,f){S.Fe.drawArraysInstancedBaseInstanceWEBGL(a,b,c,d,f)},Wb:function(a,b){for(var c=rd[a],d=0;d<a;d++)c[d]=K[b+4*d>>2];S.drawBuffers(c)},Vb:sd,Ub:function(a,b,c,d,f){S.drawElementsInstanced(a,b,c,d,f)},Tb:function(a,b,c,d,f,k,l){S.Fe.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,
+b,c,d,f,k,l)},Sb:function(a,b,c,d,f,k){sd(a,d,f,k)},Rb:function(a){S.enable(a)},Qb:function(a){S.enableVertexAttribArray(a)},Pb:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},Ob:function(){S.finish()},Nb:function(){S.flush()},Mb:function(a,b,c,d){S.framebufferRenderbuffer(a,b,c,Zc[d])},Lb:function(a,b,c,d,f){S.framebufferTexture2D(a,b,c,ea[d],f)},Kb:function(a){S.frontFace(a)},Jb:function(a,b){td(a,b,"createBuffer",Wc)},Ib:function(a,b){td(a,b,"createFramebuffer",Yc)},Hb:function(a,
+b){td(a,b,"createRenderbuffer",Zc)},Gb:function(a,b){td(a,b,"createSampler",bd)},Fb:function(a,b){td(a,b,"createTexture",ea)},Eb:ud,Db:ud,Cb:function(a){S.generateMipmap(a)},Bb:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},Ab:function(){var a=S.getError()||hd;hd=0;return a},zb:function(a,b){vd(a,b,2)},yb:function(a,b,c,d){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[d>>2]=a},K:function(a,b){vd(a,b,0)},xb:function(a,
+b,c,d){a=S.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0<b&&d?ka(a,C,d,b):0;c&&(K[c>>2]=b)},wb:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a="(unknown error)"),K[c>>2]=a.length+1;else if(35719==b){if(!a.se)for(b=0;b<S.getProgramParameter(a,35718);++b)a.se=Math.max(a.se,S.getActiveUniform(a,b).name.length+1);K[c>>2]=a.se}else if(35722==b){if(!a.qe)for(b=0;b<S.getProgramParameter(a,35721);++b)a.qe=Math.max(a.qe,S.getActiveAttrib(a,
+b).name.length+1);K[c>>2]=a.qe}else if(35381==b){if(!a.re)for(b=0;b<S.getProgramParameter(a,35382);++b)a.re=Math.max(a.re,S.getActiveUniformBlockName(a,b).length+1);K[c>>2]=a.re}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},vb:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},ub:function(a,b,c,d){a=S.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0<b&&d?ka(a,C,d,b):0;c&&(K[c>>2]=b)},tb:function(a,b,c,d){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>>
+2]=a.rangeMax;K[d>>2]=a.precision},sb:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},S:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return"GL_"+d}));b=xd(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&xd(b);break;
+case 7938:b=S.getParameter(7938);b=2<=v.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=xd(b);break;case 35724:b=S.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=xd(b);break;default:R(1280)}dd[a]=b}return b},rb:function(a,b){if(2>v.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[],
+c=c.concat(c.map(function(d){return"GL_"+d})),c=c.map(function(d){return xd(d)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},qb:function(a,b){b=b?kb(C,b):"";if(a=Xc[a]){var c=a,d=c.je,f=c.Ne,k;if(!d)for(c.je=d={},c.Me={},k=0;k<S.getProgramParameter(c,35718);++k){var l=S.getActiveUniform(c,k);var m=l.name;l=l.size;var p=yd(m);p=0<p?m.slice(0,p):m;var w=c.De;c.De+=l;f[p]=[l,w];for(m=0;m<l;++m)d[w]=m,c.Me[w++]=p}c=a.je;d=0;f=b;k=yd(b);0<k&&(d=parseInt(b.slice(k+1))>>>0,f=b.slice(0,
+k));if((f=a.Ne[f])&&d<f[0]&&(d+=f[1],c[d]=c[d]||S.getUniformLocation(a,b)))return d}else R(1281);return-1},pb:function(a,b,c){for(var d=rd[b],f=0;f<b;f++)d[f]=K[c+4*f>>2];S.invalidateFramebuffer(a,d)},ob:function(a,b,c,d,f,k,l){for(var m=rd[b],p=0;p<b;p++)m[p]=K[c+4*p>>2];S.invalidateSubFramebuffer(a,m,d,f,k,l)},nb:function(a){return S.isSync(cd[a])},mb:function(a){return(a=ea[a])?S.isTexture(a):0},lb:function(a){S.lineWidth(a)},kb:function(a){a=Xc[a];S.linkProgram(a);a.je=0;a.Ne={}},jb:function(a,
+b,c,d,f,k){S.Je.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,d>>2,L,f>>2,k)},ib:function(a,b,c,d,f,k,l,m){S.Je.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,d>>2,K,f>>2,K,k>>2,L,l>>2,m)},hb:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},gb:function(a){S.readBuffer(a)},fb:function(a,b,c,d,f,k,l){if(2<=v.version)if(S.ye)S.readPixels(a,b,c,d,f,k,l);else{var m=zd(k);S.readPixels(a,b,c,d,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=Ad(k,f,c,d,l))?S.readPixels(a,
+b,c,d,f,k,l):R(1280)},eb:function(a,b,c,d){S.renderbufferStorage(a,b,c,d)},db:function(a,b,c,d,f){S.renderbufferStorageMultisample(a,b,c,d,f)},cb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},bb:function(a,b,c){S.samplerParameteri(bd[a],b,c)},ab:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},$a:function(a,b,c,d){S.scissor(a,b,c,d)},_a:function(a,b,c,d){for(var f="",k=0;k<b;++k){var l=d?K[d+4*k>>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):"";f+=l}S.shaderSource($c[a],f)},Za:function(a,b,
+c){S.stencilFunc(a,b,c)},Ya:function(a,b,c,d){S.stencilFuncSeparate(a,b,c,d)},Xa:function(a){S.stencilMask(a)},Wa:function(a,b){S.stencilMaskSeparate(a,b)},Va:function(a,b,c){S.stencilOp(a,b,c)},Ua:function(a,b,c,d){S.stencilOpSeparate(a,b,c,d)},Ta:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=zd(m);S.texImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,d,f,k,l,m,null);else S.texImage2D(a,b,c,d,f,k,l,m,p?
+Ad(m,l,d,f,p):null)},Sa:function(a,b,c){S.texParameterf(a,b,c)},Ra:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Qa:function(a,b,c){S.texParameteri(a,b,c)},Pa:function(a,b,c){S.texParameteri(a,b,K[c>>2])},Oa:function(a,b,c,d,f){S.texStorage2D(a,b,c,d,f)},Na:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texSubImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=zd(m);S.texSubImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,d,f,k,l,m,null);else w=null,p&&(w=
+Ad(m,l,f,k,p)),S.texSubImage2D(a,b,c,d,f,k,l,m,w)},Ma:function(a,b){S.uniform1f(W(a),b)},La:function(a,b,c){if(2<=v.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var d=Bd[b-1],f=0;f<b;++f)d[f]=N[c+4*f>>2];else d=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),d)}},Ka:function(a,b){S.uniform1i(W(a),b)},Ja:function(a,b,c){if(2<=v.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var d=Cd[b-1],f=0;f<b;++f)d[f]=K[c+4*f>>2];else d=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),d)}},Ia:function(a,
+b,c){S.uniform2f(W(a),b,c)},Ha:function(a,b,c){if(2<=v.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var d=Bd[2*b-1],f=0;f<2*b;f+=2)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2];else d=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),d)}},Ga:function(a,b,c){S.uniform2i(W(a),b,c)},Fa:function(a,b,c){if(2<=v.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var d=Cd[2*b-1],f=0;f<2*b;f+=2)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2];else d=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),d)}},Ea:function(a,
+b,c,d){S.uniform3f(W(a),b,c,d)},Da:function(a,b,c){if(2<=v.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var d=Bd[3*b-1],f=0;f<3*b;f+=3)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2],d[f+2]=N[c+(4*f+8)>>2];else d=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),d)}},Ca:function(a,b,c,d){S.uniform3i(W(a),b,c,d)},Ba:function(a,b,c){if(2<=v.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var d=Cd[3*b-1],f=0;f<3*b;f+=3)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2];else d=
+K.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),d)}},Aa:function(a,b,c,d,f){S.uniform4f(W(a),b,c,d,f)},za:function(a,b,c){if(2<=v.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var d=Bd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;d[k]=f[l];d[k+1]=f[l+1];d[k+2]=f[l+2];d[k+3]=f[l+3]}}else d=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),d)}},ya:function(a,b,c,d,f){S.uniform4i(W(a),b,c,d,f)},xa:function(a,b,c){if(2<=v.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var d=Cd[4*b-
+1],f=0;f<4*b;f+=4)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2],d[f+3]=K[c+(4*f+12)>>2];else d=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),d)}},wa:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix2fv(W(a),!!c,N,d>>2,4*b);else{if(72>=b)for(var f=Bd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2];else f=N.subarray(d>>2,d+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},va:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix3fv(W(a),
+!!c,N,d>>2,9*b);else{if(32>=b)for(var f=Bd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2],f[k+4]=N[d+(4*k+16)>>2],f[k+5]=N[d+(4*k+20)>>2],f[k+6]=N[d+(4*k+24)>>2],f[k+7]=N[d+(4*k+28)>>2],f[k+8]=N[d+(4*k+32)>>2];else f=N.subarray(d>>2,d+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},ua:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix4fv(W(a),!!c,N,d>>2,16*b);else{if(18>=b){var f=Bd[16*b-1],k=N;d>>=2;for(var l=0;l<16*b;l+=16){var m=d+l;f[l]=
+k[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(d>>2,d+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},ta:function(a){a=Xc[a];S.useProgram(a);S.We=a},sa:function(a,b){S.vertexAttrib1f(a,b)},ra:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},qa:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},
+pa:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},oa:function(a,b){S.vertexAttribDivisor(a,b)},na:function(a,b,c,d,f){S.vertexAttribIPointer(a,b,c,d,f)},ma:function(a,b,c,d,f,k){S.vertexAttribPointer(a,b,c,!!d,f,k)},la:function(a,b,c,d){S.viewport(a,b,c,d)},ba:function(a,b,c,d){S.waitSync(cd[a],b,(c>>>0)+4294967296*d)},o:Nd,n:Od,k:Pd,J:Qd,R:Rd,Q:Sd,x:Td,y:Ud,p:Vd,w:Wd,ka:Xd,ja:Yd,ia:Zd,aa:(a,b,c,d)=>Hd(a,b,c,d)};
(function(){function a(c){G=c=c.exports;Fa=G.ad;La();Na=G.cd;Pa.unshift(G.bd);Ua--;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(0==Ua&&(null!==Va&&(clearInterval(Va),Va=null),Wa)){var d=Wa;Wa=null;d()}return c}var b={a:$d};Ua++;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca("Module.instantiateWasm callback failed with error: "+c),ba(c)}cb(b,function(c){a(c.instance)}).catch(ba);return{}})();
-var qc=r._free=a=>(qc=r._free=G.dd)(a),sd=r._malloc=a=>(sd=r._malloc=G.ed)(a),pc=a=>(pc=G.fd)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.gd)();var ae=(a,b)=>(ae=G.hd)(a,b),be=()=>(be=G.id)(),ce=a=>(ce=G.jd)(a);r.dynCall_viji=(a,b,c,d,f)=>(r.dynCall_viji=G.ld)(a,b,c,d,f);r.dynCall_vijiii=(a,b,c,d,f,k,l)=>(r.dynCall_vijiii=G.md)(a,b,c,d,f,k,l);r.dynCall_viiiiij=(a,b,c,d,f,k,l,m)=>(r.dynCall_viiiiij=G.nd)(a,b,c,d,f,k,l,m);
+var qc=r._free=a=>(qc=r._free=G.dd)(a),wd=r._malloc=a=>(wd=r._malloc=G.ed)(a),pc=a=>(pc=G.fd)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.gd)();var ae=(a,b)=>(ae=G.hd)(a,b),be=()=>(be=G.id)(),ce=a=>(ce=G.jd)(a);r.dynCall_viji=(a,b,c,d,f)=>(r.dynCall_viji=G.ld)(a,b,c,d,f);r.dynCall_vijiii=(a,b,c,d,f,k,l)=>(r.dynCall_vijiii=G.md)(a,b,c,d,f,k,l);r.dynCall_viiiiij=(a,b,c,d,f,k,l,m)=>(r.dynCall_viiiiij=G.nd)(a,b,c,d,f,k,l,m);
r.dynCall_iiiji=(a,b,c,d,f,k)=>(r.dynCall_iiiji=G.od)(a,b,c,d,f,k);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.pd)(a,b,c);r.dynCall_vij=(a,b,c,d)=>(r.dynCall_vij=G.qd)(a,b,c,d);r.dynCall_iiij=(a,b,c,d,f)=>(r.dynCall_iiij=G.rd)(a,b,c,d,f);r.dynCall_iiiij=(a,b,c,d,f,k)=>(r.dynCall_iiiij=G.sd)(a,b,c,d,f,k);r.dynCall_viij=(a,b,c,d,f)=>(r.dynCall_viij=G.td)(a,b,c,d,f);r.dynCall_viiij=(a,b,c,d,f,k)=>(r.dynCall_viiij=G.ud)(a,b,c,d,f,k);r.dynCall_ji=(a,b)=>(r.dynCall_ji=G.vd)(a,b);
r.dynCall_iij=(a,b,c,d)=>(r.dynCall_iij=G.wd)(a,b,c,d);r.dynCall_jiiiiii=(a,b,c,d,f,k,l)=>(r.dynCall_jiiiiii=G.xd)(a,b,c,d,f,k,l);r.dynCall_jiiiiji=(a,b,c,d,f,k,l,m)=>(r.dynCall_jiiiiji=G.yd)(a,b,c,d,f,k,l,m);r.dynCall_iijj=(a,b,c,d,f,k)=>(r.dynCall_iijj=G.zd)(a,b,c,d,f,k);r.dynCall_iiji=(a,b,c,d,f)=>(r.dynCall_iiji=G.Ad)(a,b,c,d,f);r.dynCall_iijjiii=(a,b,c,d,f,k,l,m,p)=>(r.dynCall_iijjiii=G.Bd)(a,b,c,d,f,k,l,m,p);
r.dynCall_vijjjii=(a,b,c,d,f,k,l,m,p,w)=>(r.dynCall_vijjjii=G.Cd)(a,b,c,d,f,k,l,m,p,w);r.dynCall_jiji=(a,b,c,d,f)=>(r.dynCall_jiji=G.Dd)(a,b,c,d,f);r.dynCall_viijii=(a,b,c,d,f,k,l)=>(r.dynCall_viijii=G.Ed)(a,b,c,d,f,k,l);r.dynCall_iiiiij=(a,b,c,d,f,k,l)=>(r.dynCall_iiiiij=G.Fd)(a,b,c,d,f,k,l);r.dynCall_iiiiijj=(a,b,c,d,f,k,l,m,p)=>(r.dynCall_iiiiijj=G.Gd)(a,b,c,d,f,k,l,m,p);r.dynCall_iiiiiijj=(a,b,c,d,f,k,l,m,p,w)=>(r.dynCall_iiiiiijj=G.Hd)(a,b,c,d,f,k,l,m,p,w);
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js.symbols b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js.symbols
new file mode 100644
index 0000000..eb6af62
--- /dev/null
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.js.symbols
@@ -0,0 +1,11857 @@
+0:_embind_register_class_function
+1:_embind_register_enum_value
+2:_emval_decref
+3:_embind_register_value_object_field
+4:_embind_register_class_class_function
+5:_emval_new_cstring
+6:_emval_take_value
+7:abort
+8:_emval_set_property
+9:_embind_register_enum
+10:invoke_iiii
+11:_embind_register_class
+12:_emval_incref
+13:invoke_iii
+14:invoke_ii
+15:invoke_viii
+16:_emval_get_method_caller
+17:_embind_register_smart_ptr
+18:_embind_register_memory_view
+19:_embind_register_constant
+20:_emval_call_void_method
+21:_embind_register_function
+22:invoke_viiii
+23:invoke_vi
+24:invoke_vii
+25:_emval_run_destructors
+26:_emval_get_property
+27:_embind_register_class_constructor
+28:_embind_register_value_object
+29:_embind_register_integer
+30:_embind_finalize_value_object
+31:_emval_new_object
+32:_emval_as
+33:__cxa_throw
+34:_emval_new_array
+35:invoke_iiiii
+36:glGetIntegerv
+37:_emval_new
+38:_emval_get_global
+39:_emval_call_method
+40:_embind_register_std_wstring
+41:__wasi_fd_close
+42:invoke_iiiiiiiiii
+43:invoke_iiiiiii
+44:glGetString
+45:glClearStencil
+46:glClearColor
+47:glClear
+48:glBindFramebuffer
+49:_embind_register_std_string
+50:_embind_register_float
+51:__wasi_fd_write
+52:__syscall_openat
+53:__syscall_fcntl64
+54:strftime_l
+55:legalimport$glWaitSync
+56:legalimport$glClientWaitSync
+57:legalimport$_munmap_js
+58:legalimport$_mmap_js
+59:legalimport$_embind_register_bigint
+60:legalimport$__wasi_fd_seek
+61:legalimport$__wasi_fd_pread
+62:invoke_viiiiiiiii
+63:invoke_viiiiii
+64:invoke_viiiii
+65:glViewport
+66:glVertexAttribPointer
+67:glVertexAttribIPointer
+68:glVertexAttribDivisor
+69:glVertexAttrib4fv
+70:glVertexAttrib3fv
+71:glVertexAttrib2fv
+72:glVertexAttrib1f
+73:glUseProgram
+74:glUniformMatrix4fv
+75:glUniformMatrix3fv
+76:glUniformMatrix2fv
+77:glUniform4iv
+78:glUniform4i
+79:glUniform4fv
+80:glUniform4f
+81:glUniform3iv
+82:glUniform3i
+83:glUniform3fv
+84:glUniform3f
+85:glUniform2iv
+86:glUniform2i
+87:glUniform2fv
+88:glUniform2f
+89:glUniform1iv
+90:glUniform1i
+91:glUniform1fv
+92:glUniform1f
+93:glTexSubImage2D
+94:glTexStorage2D
+95:glTexParameteriv
+96:glTexParameteri
+97:glTexParameterfv
+98:glTexParameterf
+99:glTexImage2D
+100:glStencilOpSeparate
+101:glStencilOp
+102:glStencilMaskSeparate
+103:glStencilMask
+104:glStencilFuncSeparate
+105:glStencilFunc
+106:glShaderSource
+107:glScissor
+108:glSamplerParameteriv
+109:glSamplerParameteri
+110:glSamplerParameterf
+111:glRenderbufferStorageMultisample
+112:glRenderbufferStorage
+113:glReadPixels
+114:glReadBuffer
+115:glPixelStorei
+116:glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL
+117:glMultiDrawArraysInstancedBaseInstanceWEBGL
+118:glLinkProgram
+119:glLineWidth
+120:glIsTexture
+121:glIsSync
+122:glInvalidateSubFramebuffer
+123:glInvalidateFramebuffer
+124:glGetUniformLocation
+125:glGetStringi
+126:glGetShaderiv
+127:glGetShaderPrecisionFormat
+128:glGetShaderInfoLog
+129:glGetRenderbufferParameteriv
+130:glGetProgramiv
+131:glGetProgramInfoLog
+132:glGetFramebufferAttachmentParameteriv
+133:glGetFloatv
+134:glGetError
+135:glGetBufferParameteriv
+136:glGenerateMipmap
+137:glGenVertexArraysOES
+138:glGenVertexArrays
+139:glGenTextures
+140:glGenSamplers
+141:glGenRenderbuffers
+142:glGenFramebuffers
+143:glGenBuffers
+144:glFrontFace
+145:glFramebufferTexture2D
+146:glFramebufferRenderbuffer
+147:glFlush
+148:glFinish
+149:glFenceSync
+150:glEnableVertexAttribArray
+151:glEnable
+152:glDrawRangeElements
+153:glDrawElementsInstancedBaseVertexBaseInstanceWEBGL
+154:glDrawElementsInstanced
+155:glDrawElements
+156:glDrawBuffers
+157:glDrawArraysInstancedBaseInstanceWEBGL
+158:glDrawArraysInstanced
+159:glDrawArrays
+160:glDisableVertexAttribArray
+161:glDisable
+162:glDepthMask
+163:glDeleteVertexArraysOES
+164:glDeleteVertexArrays
+165:glDeleteTextures
+166:glDeleteSync
+167:glDeleteShader
+168:glDeleteSamplers
+169:glDeleteRenderbuffers
+170:glDeleteProgram
+171:glDeleteFramebuffers
+172:glDeleteBuffers
+173:glCullFace
+174:glCreateShader
+175:glCreateProgram
+176:glCopyTexSubImage2D
+177:glCopyBufferSubData
+178:glCompressedTexSubImage2D
+179:glCompressedTexImage2D
+180:glCompileShader
+181:glColorMask
+182:glCheckFramebufferStatus
+183:glBufferSubData
+184:glBufferData
+185:glBlitFramebuffer
+186:glBlendFunc
+187:glBlendEquation
+188:glBlendColor
+189:glBindVertexArrayOES
+190:glBindVertexArray
+191:glBindTexture
+192:glBindSampler
+193:glBindRenderbuffer
+194:glBindBuffer
+195:glBindAttribLocation
+196:glAttachShader
+197:glActiveTexture
+198:exit
+199:emscripten_webgl_get_current_context
+200:emscripten_resize_heap
+201:emscripten_get_now
+202:_emval_not
+203:_emscripten_throw_longjmp
+204:_emscripten_get_now_is_monotonic
+205:_embind_register_void
+206:_embind_register_emval
+207:_embind_register_bool
+208:__wasi_fd_read
+209:__wasi_environ_sizes_get
+210:__wasi_environ_get
+211:__syscall_stat64
+212:__syscall_newfstatat
+213:__syscall_lstat64
+214:__syscall_ioctl
+215:__syscall_fstat64
+216:dlfree
+217:operator\20new\28unsigned\20long\29
+218:void\20emscripten::internal::raw_destructor<SkColorSpace>\28SkColorSpace*\29
+219:__memcpy
+220:SkString::~SkString\28\29
+221:__memset
+222:GrGLSLShaderBuilder::codeAppendf\28char\20const*\2c\20...\29
+223:uprv_free_73
+224:SkColorInfo::~SkColorInfo\28\29
+225:memcmp
+226:SkContainerAllocator::allocate\28int\2c\20double\29
+227:SkString::SkString\28\29
+228:SkDebugf\28char\20const*\2c\20...\29
+229:memmove
+230:SkString::insert\28unsigned\20long\2c\20char\20const*\29
+231:SkData::~SkData\28\29
+232:SkArenaAlloc::ensureSpace\28unsigned\20int\2c\20unsigned\20int\29
+233:hb_blob_destroy
+234:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::append\28char\20const*\29
+235:sk_report_container_overflow_and_die\28\29
+236:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::~__func\28\29
+237:SkPath::~SkPath\28\29
+238:uprv_malloc_73
+239:strlen
+240:SkRasterPipeline::append\28SkRasterPipelineOp\2c\20void*\29
+241:ft_mem_free
+242:SkString::SkString\28char\20const*\29
+243:FT_MulFix
+244:strcmp
+245:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::share\28void*\29
+246:SkSL::ErrorReporter::error\28SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+247:SkTDStorage::append\28\29
+248:SkMatrix::computeTypeMask\28\29\20const
+249:testSetjmp
+250:GrGpuResource::notifyARefCntIsZero\28GrIORef<GrGpuResource>::LastRemovedRef\29\20const
+251:SkWriter32::growToAtLeast\28unsigned\20long\29
+252:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::append\28char\20const*\2c\20unsigned\20long\29
+253:SkSL::Pool::AllocMemory\28unsigned\20long\29
+254:fmaxf
+255:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::size\5babi:v160004\5d\28\29\20const
+256:SkString::SkString\28SkString&&\29
+257:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__throw_length_error\5babi:v160004\5d\28\29\20const
+258:std::__2::__shared_weak_count::__release_weak\28\29
+259:GrColorInfo::~GrColorInfo\28\29
+260:SkIRect::intersect\28SkIRect\20const&\2c\20SkIRect\20const&\29
+261:SkTDStorage::SkTDStorage\28int\29
+262:GrBackendFormat::~GrBackendFormat\28\29
+263:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::insert\28unsigned\20long\2c\20char\20const*\29
+264:icu_73::UnicodeString::~UnicodeString\28\29
+265:std::__2::vector<float\2c\20std::__2::allocator<float>>::__throw_length_error\5babi:v160004\5d\28\29\20const
+266:GrContext_Base::caps\28\29\20const
+267:SkPaint::~SkPaint\28\29
+268:strncmp
+269:SkTDStorage::~SkTDStorage\28\29
+270:SkSL::RP::Generator::pushExpression\28SkSL::Expression\20const&\2c\20bool\29
+271:sk_malloc_throw\28unsigned\20long\2c\20unsigned\20long\29
+272:SkStrokeRec::getStyle\28\29\20const
+273:SkString::SkString\28SkString\20const&\29
+274:icu_73::UMemory::operator\20delete\28void*\29
+275:void\20emscripten::internal::raw_destructor<SkContourMeasure>\28SkContourMeasure*\29
+276:hb_ot_map_builder_t::add_feature\28unsigned\20int\2c\20hb_ot_map_feature_flags_t\2c\20unsigned\20int\29
+277:SkMatrix::mapRect\28SkRect*\2c\20SkRect\20const&\2c\20SkApplyPerspectiveClip\29\20const
+278:SkFontMgr*\20emscripten::base<SkFontMgr>::convertPointer<skia::textlayout::TypefaceFontProvider\2c\20SkFontMgr>\28skia::textlayout::TypefaceFontProvider*\29
+279:SkArenaAlloc::installFooter\28char*\20\28*\29\28char*\29\2c\20unsigned\20int\29
+280:hb_buffer_t::make_room_for\28unsigned\20int\2c\20unsigned\20int\29
+281:SkArenaAlloc::allocObjectWithFooter\28unsigned\20int\2c\20unsigned\20int\29
+282:fminf
+283:SkSemaphore::osSignal\28int\29
+284:icu_73::CharString::append\28char\20const*\2c\20int\2c\20UErrorCode&\29
+285:SkBitmap::~SkBitmap\28\29
+286:SkString::operator=\28SkString&&\29
+287:SkSL::Parser::nextRawToken\28\29
+288:SkPath::SkPath\28\29
+289:skia_private::TArray<SkPoint\2c\20true>::push_back\28SkPoint\20const&\29
+290:skia_png_error
+291:hb_buffer_t::message\28hb_font_t*\2c\20char\20const*\2c\20...\29
+292:SkArenaAlloc::~SkArenaAlloc\28\29
+293:SkMatrix::computePerspectiveTypeMask\28\29\20const
+294:SkColorInfo::SkColorInfo\28SkColorInfo\20const&\29
+295:SkSemaphore::osWait\28\29
+296:SkIntersections::insert\28double\2c\20double\2c\20SkDPoint\20const&\29
+297:dlmalloc
+298:FT_DivFix
+299:SkString::appendf\28char\20const*\2c\20...\29
+300:uprv_isASCIILetter_73
+301:std::__throw_bad_array_new_length\5babi:v160004\5d\28\29
+302:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_string\28\29
+303:SkChecksum::Hash32\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20int\29
+304:skia_png_free
+305:SkPath::lineTo\28float\2c\20float\29
+306:skia_png_crc_finish
+307:skia_png_chunk_benign_error
+308:icu_73::StringPiece::StringPiece\28char\20const*\29
+309:utext_getNativeIndex_73
+310:SkReadBuffer::readUInt\28\29
+311:utext_setNativeIndex_73
+312:SkMatrix::mapPoints\28SkPoint*\2c\20SkPoint\20const*\2c\20int\29\20const
+313:dlrealloc
+314:SkReadBuffer::setInvalid\28\29
+315:SkMatrix::setTranslate\28float\2c\20float\29
+316:ures_closeBundle\28UResourceBundle*\2c\20signed\20char\29
+317:skia_png_warning
+318:SkBlitter::~SkBlitter\28\29
+319:OT::VarData::get_delta\28unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\2c\20OT::VarRegionList\20const&\2c\20float*\29\20const
+320:ft_mem_qrealloc
+321:SkPaint::SkPaint\28SkPaint\20const&\29
+322:SkColorInfo::bytesPerPixel\28\29\20const
+323:GrVertexChunkBuilder::allocChunk\28int\29
+324:OT::DeltaSetIndexMap::map\28unsigned\20int\29\20const
+325:strchr
+326:ft_mem_realloc
+327:strstr
+328:SkMatrix::reset\28\29
+329:SkImageInfo::MakeUnknown\28int\2c\20int\29
+330:GrSurfaceProxyView::asRenderTargetProxy\28\29\20const
+331:skia_private::TArray<unsigned\20long\2c\20true>::push_back\28unsigned\20long\20const&\29
+332:skia_private::TArray<unsigned\20char\2c\20true>::push_back\28unsigned\20char&&\29
+333:SkSL::RP::Builder::appendInstruction\28SkSL::RP::BuilderOp\2c\20SkSL::RP::Builder::SlotList\2c\20int\2c\20int\2c\20int\2c\20int\29
+334:SkPath::SkPath\28SkPath\20const&\29
+335:SkBitmap::SkBitmap\28\29
+336:ft_validator_error
+337:SkPaint::SkPaint\28\29
+338:SkOpPtT::segment\28\29\20const
+339:skia_private::TArray<sk_sp<SkIDChangeListener>\2c\20true>::push_back\28sk_sp<SkIDChangeListener>&&\29
+340:sk_malloc_flags\28unsigned\20long\2c\20unsigned\20int\29
+341:SkSL::Parser::expect\28SkSL::Token::Kind\2c\20char\20const*\2c\20SkSL::Token*\29
+342:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__get_pointer\5babi:v160004\5d\28\29
+343:dlcalloc
+344:SkMatrix::invertNonIdentity\28SkMatrix*\29\20const
+345:GrTextureGenerator::isTextureGenerator\28\29\20const
+346:skia_png_get_uint_32
+347:skia_png_calculate_crc
+348:SkImageGenerator::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+349:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\29
+350:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::resize\5babi:v160004\5d\28unsigned\20long\29
+351:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20true>::operator=\28skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20true>&&\29
+352:SkSL::GLSLCodeGenerator::writeExpression\28SkSL::Expression\20const&\2c\20SkSL::OperatorPrecedence\29
+353:SkPoint::Length\28float\2c\20float\29
+354:SkLoadICULib\28\29
+355:GrImageInfo::GrImageInfo\28GrImageInfo\20const&\29
+356:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::operator\5b\5d\5babi:v160004\5d\28unsigned\20long\29\20const
+357:uhash_close_73
+358:std::__2::locale::~locale\28\29
+359:SkPath::getBounds\28\29\20const
+360:ucptrie_internalSmallIndex_73
+361:skia_private::TArray<SkString\2c\20true>::push_back\28SkString&&\29
+362:skgpu::Swizzle::Swizzle\28char\20const*\29
+363:FT_Stream_Seek
+364:SkRect::join\28SkRect\20const&\29
+365:SkPathRef::Editor::Editor\28sk_sp<SkPathRef>*\2c\20int\2c\20int\29
+366:skia_private::TArray<SkSL::RP::Instruction\2c\20true>::push_back\28SkSL::RP::Instruction&&\29
+367:hb_blob_reference
+368:cf2_stack_popFixed
+369:SkRect::setBoundsCheck\28SkPoint\20const*\2c\20int\29
+370:SkRect::intersect\28SkRect\20const&\29
+371:GrGLExtensions::has\28char\20const*\29\20const
+372:SkCachedData::internalUnref\28bool\29\20const
+373:GrProcessor::operator\20new\28unsigned\20long\29
+374:FT_MulDiv
+375:strcpy
+376:std::__2::__throw_bad_function_call\5babi:v160004\5d\28\29
+377:SkJSONWriter::appendName\28char\20const*\29
+378:std::__2::to_string\28int\29
+379:std::__2::ios_base::getloc\28\29\20const
+380:icu_73::UnicodeString::doAppend\28char16_t\20const*\2c\20int\2c\20int\29
+381:SkRegion::~SkRegion\28\29
+382:skia_png_read_push_finish_row
+383:skia::textlayout::TextStyle::~TextStyle\28\29
+384:icu_73::CharString::append\28char\2c\20UErrorCode&\29
+385:hb_blob_make_immutable
+386:SkString::operator=\28char\20const*\29
+387:SkSL::ThreadContext::ReportError\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+388:SkSL::SymbolTable::addWithoutOwnership\28SkSL::Symbol*\29
+389:hb_ot_map_builder_t::add_pause\28unsigned\20int\2c\20bool\20\28*\29\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29\29
+390:cff1_path_procs_extents_t::curve\28CFF::cff1_cs_interp_env_t&\2c\20cff1_extents_param_t&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\29
+391:VP8GetValue
+392:SkSemaphore::~SkSemaphore\28\29
+393:SkSL::Type::matches\28SkSL::Type\20const&\29\20const
+394:SkSL::String::printf\28char\20const*\2c\20...\29
+395:SkJSONWriter::beginValue\28bool\29
+396:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d\28\29
+397:skgpu::ganesh::SurfaceContext::caps\28\29\20const
+398:icu_73::UnicodeSet::~UnicodeSet\28\29
+399:icu_73::UnicodeSet::contains\28int\29\20const
+400:SkPoint::normalize\28\29
+401:SkColorInfo::operator=\28SkColorInfo\20const&\29
+402:SkArenaAlloc::SkArenaAlloc\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29
+403:FT_Stream_ReadUShort
+404:jdiv_round_up
+405:SkSL::RP::Builder::binary_op\28SkSL::RP::BuilderOp\2c\20int\29
+406:SkImageGenerator::onQueryYUVAInfo\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\2c\20SkYUVAPixmapInfo*\29\20const
+407:SkColorInfo::operator=\28SkColorInfo&&\29
+408:utext_next32_73
+409:umtx_unlock_73
+410:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::capacity\5babi:v160004\5d\28\29\20const
+411:jzero_far
+412:hb_blob_get_data_writable
+413:SkColorInfo::SkColorInfo\28SkColorInfo&&\29
+414:SkBlitter::~SkBlitter\28\29.1
+415:skia_png_write_data
+416:bool\20std::__2::operator==\5babi:v160004\5d<char\2c\20std::__2::char_traits<char>>\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\20const&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\20const&\29
+417:SkRuntimeEffect::uniformSize\28\29\20const
+418:FT_Stream_ExitFrame
+419:subtag_matches\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20int\29
+420:__shgetc
+421:FT_Stream_GetUShort
+422:uhash_get_73
+423:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::operator=\5babi:v160004\5d\28wchar_t\20const*\29
+424:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::operator=\5babi:v160004\5d\28char\20const*\29
+425:sktext::gpu::BagOfBytes::~BagOfBytes\28\29
+426:skia_private::TArray<unsigned\20int\2c\20true>::push_back_raw\28int\29
+427:bool\20std::__2::operator==\5babi:v160004\5d<wchar_t\2c\20std::__2::char_traits<wchar_t>>\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\20const&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\20const&\29
+428:SkPoint::scale\28float\2c\20SkPoint*\29\20const
+429:SkPathRef::growForVerb\28int\2c\20float\29
+430:SkNullBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+431:SkMatrix::setConcat\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+432:GrFragmentProcessor::ProgramImpl::invokeChild\28int\2c\20char\20const*\2c\20char\20const*\2c\20GrFragmentProcessor::ProgramImpl::EmitArgs&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+433:skia_png_chunk_error
+434:hb_face_reference_table
+435:GrSurfaceProxyView::asTextureProxy\28\29\20const
+436:umtx_lock_73
+437:icu_73::UVector32::expandCapacity\28int\2c\20UErrorCode&\29
+438:SkStringPrintf\28char\20const*\2c\20...\29
+439:RoughlyEqualUlps\28float\2c\20float\29
+440:GrGLSLVaryingHandler::addVarying\28char\20const*\2c\20GrGLSLVarying*\2c\20GrGLSLVaryingHandler::Interpolation\29
+441:sscanf
+442:SkTDStorage::reserve\28int\29
+443:SkPath::Iter::next\28SkPoint*\29
+444:OT::Layout::Common::Coverage::get_coverage\28unsigned\20int\29\20const
+445:round
+446:SkRecord::grow\28\29
+447:SkRGBA4f<\28SkAlphaType\293>::toBytes_RGBA\28\29\20const
+448:GrQuad::MakeFromRect\28SkRect\20const&\2c\20SkMatrix\20const&\29
+449:GrProcessor::operator\20new\28unsigned\20long\2c\20unsigned\20long\29
+450:skgpu::ganesh::SurfaceDrawContext::addDrawOp\28GrClip\20const*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20std::__2::function<void\20\28GrOp*\2c\20unsigned\20int\29>\20const&\29
+451:skgpu::ResourceKeyHash\28unsigned\20int\20const*\2c\20unsigned\20long\29
+452:icu_73::UVector::elementAt\28int\29\20const
+453:VP8LoadFinalBytes
+454:SkPath::moveTo\28float\2c\20float\29
+455:SkPath::conicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\29
+456:SkCanvas::predrawNotify\28bool\29
+457:std::__2::__cloc\28\29
+458:SkStrikeSpec::~SkStrikeSpec\28\29
+459:SkSL::RP::Builder::discard_stack\28int\2c\20int\29
+460:GrSkSLFP::GrSkSLFP\28sk_sp<SkRuntimeEffect>\2c\20char\20const*\2c\20GrSkSLFP::OptFlags\29
+461:GrBackendFormat::GrBackendFormat\28\29
+462:__multf3
+463:VP8LReadBits
+464:SkTDStorage::append\28int\29
+465:SkSurfaceProps::SkSurfaceProps\28\29
+466:SkPath::isFinite\28\29\20const
+467:SkMatrix::setScale\28float\2c\20float\29
+468:GrOpsRenderPass::setScissorRect\28SkIRect\20const&\29
+469:GrOpsRenderPass::bindPipeline\28GrProgramInfo\20const&\2c\20SkRect\20const&\29
+470:skia_private::TArray<SkPoint\2c\20true>::push_back_raw\28int\29
+471:hb_draw_funcs_t::start_path\28void*\2c\20hb_draw_state_t&\29
+472:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitStatement\28SkSL::Statement\20const&\29
+473:SkPath::operator=\28SkPath\20const&\29
+474:SkIRect\20skif::Mapping::map<SkIRect>\28SkIRect\20const&\2c\20SkMatrix\20const&\29
+475:SkColorSpaceXformSteps::SkColorSpaceXformSteps\28SkColorSpace\20const*\2c\20SkAlphaType\2c\20SkColorSpace\20const*\2c\20SkAlphaType\29
+476:GrSimpleMeshDrawOpHelper::~GrSimpleMeshDrawOpHelper\28\29
+477:GrProcessorSet::GrProcessorSet\28GrPaint&&\29
+478:GrCaps::getDefaultBackendFormat\28GrColorType\2c\20skgpu::Renderable\29\20const
+479:GrBackendFormats::AsGLFormat\28GrBackendFormat\20const&\29
+480:std::__2::locale::id::__get\28\29
+481:std::__2::locale::facet::facet\5babi:v160004\5d\28unsigned\20long\29
+482:icu_73::umtx_initImplPreInit\28icu_73::UInitOnce&\29
+483:icu_73::umtx_initImplPostInit\28icu_73::UInitOnce&\29
+484:hb_buffer_t::_infos_set_glyph_flags\28hb_glyph_info_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+485:SkSL::PipelineStage::PipelineStageCodeGenerator::writeExpression\28SkSL::Expression\20const&\2c\20SkSL::OperatorPrecedence\29
+486:SkSL::Inliner::inlineExpression\28SkSL::Position\2c\20skia_private::THashMap<SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkGoodHash>*\2c\20SkSL::SymbolTable*\2c\20SkSL::Expression\20const&\29
+487:SkSL::GLSLCodeGenerator::writeIdentifier\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+488:SkPath::reset\28\29
+489:SkPath::isEmpty\28\29\20const
+490:GrGeometryProcessor::AttributeSet::initImplicit\28GrGeometryProcessor::Attribute\20const*\2c\20int\29
+491:GrContext_Base::contextID\28\29\20const
+492:FT_Stream_EnterFrame
+493:AlmostEqualUlps\28float\2c\20float\29
+494:udata_close_73
+495:std::__2::locale::__imp::install\28std::__2::locale::facet*\2c\20long\29
+496:skia_png_read_data
+497:SkSurface_Base::aboutToDraw\28SkSurface::ContentChangeMode\29
+498:SkSpinlock::contendedAcquire\28\29
+499:SkSL::evaluate_n_way_intrinsic\28SkSL::Context\20const&\2c\20SkSL::Expression\20const*\2c\20SkSL::Expression\20const*\2c\20SkSL::Expression\20const*\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\29\20\28.18\29
+500:SkSL::FunctionDeclaration::description\28\29\20const
+501:SkPaint::setStyle\28SkPaint::Style\29
+502:SkNullBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+503:SkDPoint::approximatelyEqual\28SkDPoint\20const&\29\20const
+504:GrOpsRenderPass::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29
+505:uprv_asciitolower_73
+506:ucln_common_registerCleanup_73
+507:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::~basic_string\28\29
+508:skgpu::ganesh::SurfaceContext::drawingManager\28\29
+509:skgpu::UniqueKey::GenerateDomain\28\29
+510:hb_buffer_t::_set_glyph_flags\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20bool\2c\20bool\29
+511:emscripten_longjmp
+512:SkReadBuffer::readScalar\28\29
+513:SkDynamicMemoryWStream::write\28void\20const*\2c\20unsigned\20long\29
+514:GrSurfaceProxy::backingStoreDimensions\28\29\20const
+515:GrMeshDrawOp::GrMeshDrawOp\28unsigned\20int\29
+516:FT_RoundFix
+517:uprv_realloc_73
+518:std::__2::unique_ptr<unsigned\20char\2c\20void\20\28*\29\28void*\29>::~unique_ptr\5babi:v160004\5d\28\29
+519:std::__2::unique_ptr<unsigned\20char\2c\20void\20\28*\29\28void*\29>::unique_ptr\5babi:v160004\5d<true\2c\20void>\28unsigned\20char*\2c\20std::__2::__dependent_type<std::__2::__unique_ptr_deleter_sfinae<void\20\28*\29\28void*\29>\2c\20true>::__good_rval_ref_type\29
+520:icu_73::UnicodeSet::UnicodeSet\28\29
+521:hb_face_get_glyph_count
+522:cf2_stack_pushFixed
+523:__multi3
+524:SkSL::RP::Builder::push_duplicates\28int\29
+525:SkSL::Pool::FreeMemory\28void*\29
+526:SkSL::ConstructorCompound::MakeFromConstants\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20double\20const*\29
+527:SkRuntimeEffect::MakeForShader\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+528:SkMatrix::postTranslate\28float\2c\20float\29
+529:SkBlockAllocator::reset\28\29
+530:GrTextureEffect::Make\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20SkFilterMode\2c\20SkMipmapMode\29
+531:GrGLSLVaryingHandler::addPassThroughAttribute\28GrShaderVar\20const&\2c\20char\20const*\2c\20GrGLSLVaryingHandler::Interpolation\29
+532:GrFragmentProcessor::registerChild\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkSL::SampleUsage\29
+533:FT_Stream_ReleaseFrame
+534:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator*\5babi:v160004\5d\28\29\20const
+535:skia::textlayout::TextStyle::TextStyle\28skia::textlayout::TextStyle\20const&\29
+536:hb_buffer_t::merge_clusters_impl\28unsigned\20int\2c\20unsigned\20int\29
+537:decltype\28fp.sanitize\28this\29\29\20hb_sanitize_context_t::_dispatch<OT::Layout::Common::Coverage>\28OT::Layout::Common::Coverage\20const&\2c\20hb_priority<1u>\29
+538:byn$mgfn-shared$decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkNullBlitter*\20SkArenaAlloc::make<SkNullBlitter>\28\29::'lambda'\28void*\29>\28SkNullBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+539:SkWStream::writePackedUInt\28unsigned\20long\29
+540:SkSL::RP::Builder::push_constant_i\28int\2c\20int\29
+541:SkSL::FunctionReference::~FunctionReference\28\29
+542:SkColorInfo::refColorSpace\28\29\20const
+543:SkBitmapDevice::drawMesh\28SkMesh\20const&\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+544:GrPipeline::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+545:GrGeometryProcessor::GrGeometryProcessor\28GrProcessor::ClassID\29
+546:void\20emscripten::internal::raw_destructor<GrDirectContext>\28GrDirectContext*\29
+547:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator*\5babi:v160004\5d\28\29\20const
+548:icu_73::UnicodeSet::add\28int\2c\20int\29
+549:SkSL::fold_expression\28SkSL::Position\2c\20double\2c\20SkSL::Type\20const*\29
+550:SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0::operator\28\29\28SkSL::FunctionDefinition\20const*\2c\20SkSL::FunctionDefinition\20const*\29\20const
+551:SkSL::RP::Generator::binaryOp\28SkSL::Type\20const&\2c\20SkSL::RP::Generator::TypedOps\20const&\29
+552:SkPaint::setShader\28sk_sp<SkShader>\29
+553:GrGeometryProcessor::Attribute&\20skia_private::TArray<GrGeometryProcessor::Attribute\2c\20true>::emplace_back<char\20const\20\28&\29\20\5b10\5d\2c\20GrVertexAttribType\2c\20SkSLType>\28char\20const\20\28&\29\20\5b10\5d\2c\20GrVertexAttribType&&\2c\20SkSLType&&\29
+554:Cr_z_crc32
+555:skia_png_push_save_buffer
+556:cosf
+557:SkString::equals\28SkString\20const&\29\20const
+558:SkSL::RP::Builder::unary_op\28SkSL::RP::BuilderOp\2c\20int\29
+559:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\28\29
+560:SkBitmap::setImmutable\28\29
+561:GrProcessorSet::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+562:GrGLTexture::target\28\29\20const
+563:sk_srgb_singleton\28\29
+564:fma
+565:SkString::operator=\28SkString\20const&\29
+566:SkShaderBase::SkShaderBase\28\29
+567:SkSL::RP::SlotManager::getVariableSlots\28SkSL::Variable\20const&\29
+568:SkPaint::SkPaint\28SkPaint&&\29
+569:SkDPoint::ApproximatelyEqual\28SkPoint\20const&\2c\20SkPoint\20const&\29
+570:SkBitmap::SkBitmap\28SkBitmap\20const&\29
+571:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::push_back\28char\29
+572:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__init_copy_ctor_external\28char\20const*\2c\20unsigned\20long\29
+573:skip_spaces
+574:sk_realloc_throw\28void*\2c\20unsigned\20long\29
+575:cff2_path_param_t::cubic_to\28CFF::point_t\20const&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\29
+576:cff1_path_param_t::cubic_to\28CFF::point_t\20const&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\29
+577:bool\20OT::Layout::Common::Coverage::collect_coverage<hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\204u>\2c\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\200u>\2c\20hb_set_digest_bits_pattern_t<unsigned\20long\2c\209u>>>>\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\204u>\2c\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\200u>\2c\20hb_set_digest_bits_pattern_t<unsigned\20long\2c\209u>>>*\29\20const
+578:SkSL::Type::toCompound\28SkSL::Context\20const&\2c\20int\2c\20int\29\20const
+579:SkPath::transform\28SkMatrix\20const&\2c\20SkPath*\2c\20SkApplyPerspectiveClip\29\20const
+580:SkPath::quadTo\28float\2c\20float\2c\20float\2c\20float\29
+581:SkMatrix::mapVectors\28SkPoint*\2c\20SkPoint\20const*\2c\20int\29\20const
+582:SkCanvas::restoreToCount\28int\29
+583:SkBlockAllocator::addBlock\28int\2c\20int\29
+584:SkAAClipBlitter::~SkAAClipBlitter\28\29
+585:OT::hb_ot_apply_context_t::match_properties_mark\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29\20const
+586:GrThreadSafeCache::VertexData::~VertexData\28\29
+587:GrShape::asPath\28SkPath*\2c\20bool\29\20const
+588:GrShaderVar::appendDecl\28GrShaderCaps\20const*\2c\20SkString*\29\20const
+589:GrPixmapBase<void\2c\20GrPixmap>::~GrPixmapBase\28\29
+590:GrGLSLVaryingHandler::emitAttributes\28GrGeometryProcessor\20const&\29
+591:void\20std::__2::vector<std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>\2c\20std::__2::allocator<std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>>>::__push_back_slow_path<std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>>\28std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>&&\29
+592:std::__2::unique_ptr<unsigned\20char\2c\20void\20\28*\29\28void*\29>::reset\5babi:v160004\5d\28unsigned\20char*\29
+593:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator++\5babi:v160004\5d\28\29
+594:sktext::gpu::BagOfBytes::needMoreBytes\28int\2c\20int\29
+595:skcms_Transform
+596:png_icc_profile_error
+597:icu_73::UnicodeString::getChar32At\28int\29\20const
+598:emscripten::smart_ptr_trait<sk_sp<GrDirectContext>>::get\28sk_sp<GrDirectContext>\20const&\29
+599:SkSL::evaluate_pairwise_intrinsic\28SkSL::Context\20const&\2c\20std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\29
+600:SkSL::Type::MakeAliasType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Type\20const&\29
+601:SkRasterClip::~SkRasterClip\28\29
+602:SkPixmap::reset\28SkImageInfo\20const&\2c\20void\20const*\2c\20unsigned\20long\29
+603:SkPath::countPoints\28\29\20const
+604:SkPaint::computeFastBounds\28SkRect\20const&\2c\20SkRect*\29\20const
+605:SkPaint::canComputeFastBounds\28\29\20const
+606:SkOpPtT::contains\28SkOpPtT\20const*\29\20const
+607:SkOpAngle::segment\28\29\20const
+608:SkMatrix::preConcat\28SkMatrix\20const&\29
+609:SkMasks::getRed\28unsigned\20int\29\20const
+610:SkMasks::getGreen\28unsigned\20int\29\20const
+611:SkMasks::getBlue\28unsigned\20int\29\20const
+612:SkColorInfo::shiftPerPixel\28\29\20const
+613:GrProcessorSet::~GrProcessorSet\28\29
+614:GrMeshDrawOp::createProgramInfo\28GrMeshDrawTarget*\29
+615:FT_Stream_ReadFields
+616:ures_getByKey_73
+617:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator++\5babi:v160004\5d\28\29
+618:saveSetjmp
+619:operator==\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+620:icu_73::UnicodeSet::compact\28\29
+621:hb_face_t::load_num_glyphs\28\29\20const
+622:fmodf
+623:emscripten::internal::MethodInvoker<int\20\28SkAnimatedImage::*\29\28\29\2c\20int\2c\20SkAnimatedImage*>::invoke\28int\20\28SkAnimatedImage::*\20const&\29\28\29\2c\20SkAnimatedImage*\29
+624:byn$mgfn-shared$std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::__clone\28\29\20const
+625:VP8GetSignedValue
+626:SkSafeMath::Mul\28unsigned\20long\2c\20unsigned\20long\29
+627:SkSL::Type::MakeVectorType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20SkSL::Type\20const&\2c\20int\29
+628:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitExpression\28SkSL::Expression\20const&\29
+629:SkPoint::setLength\28float\29
+630:SkImageGenerator::onIsValid\28GrRecordingContext*\29\20const
+631:SkBitmap::tryAllocPixels\28SkImageInfo\20const&\2c\20unsigned\20long\29
+632:OT::GDEF::accelerator_t::mark_set_covers\28unsigned\20int\2c\20unsigned\20int\29\20const
+633:GrTextureProxy::mipmapped\28\29\20const
+634:GrGpuResource::~GrGpuResource\28\29
+635:FT_Stream_GetULong
+636:FT_Get_Char_Index
+637:Cr_z__tr_flush_bits
+638:AutoLayerForImageFilter::~AutoLayerForImageFilter\28\29
+639:AutoLayerForImageFilter::AutoLayerForImageFilter\28SkCanvas*\2c\20SkPaint\20const&\2c\20SkRect\20const*\29
+640:void\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20int>::setWire<RuntimeEffectUniform>\28int\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform&\2c\20int\29
+641:uhash_setKeyDeleter_73
+642:uhash_put_73
+643:std::__2::ctype<char>::widen\5babi:v160004\5d\28char\29\20const
+644:std::__2::__throw_overflow_error\5babi:v160004\5d\28char\20const*\29
+645:std::__2::__throw_bad_optional_access\5babi:v160004\5d\28\29
+646:sktext::SkStrikePromise::SkStrikePromise\28sktext::SkStrikePromise&&\29
+647:skia_private::TArray<SkPaint\2c\20true>::push_back\28SkPaint\20const&\29
+648:skia_png_chunk_report
+649:skgpu::UniqueKey::operator=\28skgpu::UniqueKey\20const&\29
+650:sk_double_nearly_zero\28double\29
+651:int\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20int>::getWire<RuntimeEffectUniform>\28int\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform\20const&\29
+652:icu_73::UnicodeString::tempSubString\28int\2c\20int\29\20const
+653:hb_font_get_glyph
+654:ft_mem_qalloc
+655:fit_linear\28skcms_Curve\20const*\2c\20int\2c\20float\2c\20float*\2c\20float*\2c\20float*\29
+656:expf
+657:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::construct_null\28\29
+658:_output_with_dotted_circle\28hb_buffer_t*\29
+659:WebPSafeMalloc
+660:SkStream::readS32\28int*\29
+661:SkSL::GLSLCodeGenerator::getTypeName\28SkSL::Type\20const&\29
+662:SkRGBA4f<\28SkAlphaType\293>::FromColor\28unsigned\20int\29
+663:SkPath::Iter::Iter\28SkPath\20const&\2c\20bool\29
+664:SkMatrix::postConcat\28SkMatrix\20const&\29
+665:SkImageShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::$_3::operator\28\29\28\28anonymous\20namespace\29::MipLevelHelper\20const*\29\20const
+666:SkImageFilter::getInput\28int\29\20const
+667:SkGlyph::rowBytes\28\29\20const
+668:SkFont::setTypeface\28sk_sp<SkTypeface>\29
+669:SkDrawable::getBounds\28\29
+670:SkDCubic::ptAtT\28double\29\20const
+671:SkColorSpace::MakeSRGB\28\29
+672:SkColorInfo::SkColorInfo\28\29
+673:GrOpFlushState::drawMesh\28GrSimpleMesh\20const&\29
+674:GrImageInfo::GrImageInfo\28SkImageInfo\20const&\29
+675:DefaultGeoProc::Impl::~Impl\28\29
+676:void\20emscripten::internal::raw_destructor<sk_sp<GrDirectContext>>\28sk_sp<GrDirectContext>*\29
+677:uhash_init_73
+678:skia_private::THashMap<char\20const*\2c\20unsigned\20int\2c\20SkGoodHash>::set\28char\20const*\2c\20unsigned\20int\29
+679:out
+680:jpeg_fill_bit_buffer
+681:icu_73::UnicodeString::setToBogus\28\29
+682:icu_73::UnicodeString::UnicodeString\28icu_73::UnicodeString\20const&\29
+683:icu_73::ReorderingBuffer::appendZeroCC\28char16_t\20const*\2c\20char16_t\20const*\2c\20UErrorCode&\29
+684:icu_73::CharStringByteSink::CharStringByteSink\28icu_73::CharString*\29
+685:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29
+686:SkString::data\28\29
+687:SkSL::Type::coerceExpression\28std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Context\20const&\29\20const
+688:SkSL::Type::MakeGenericType\28char\20const*\2c\20SkSpan<SkSL::Type\20const*\20const>\2c\20SkSL::Type\20const*\29
+689:SkSL::ConstantFolder::GetConstantValueForVariable\28SkSL::Expression\20const&\29
+690:SkRegion::setRect\28SkIRect\20const&\29
+691:SkRegion::SkRegion\28\29
+692:SkRecords::FillBounds::adjustForSaveLayerPaints\28SkRect*\2c\20int\29\20const
+693:SkPathStroker::lineTo\28SkPoint\20const&\2c\20SkPath::Iter\20const*\29
+694:SkPathRef::~SkPathRef\28\29
+695:SkPaint::setColor\28unsigned\20int\29
+696:SkOpContourBuilder::flush\28\29
+697:SkMatrix::setRectToRect\28SkRect\20const&\2c\20SkRect\20const&\2c\20SkMatrix::ScaleToFit\29
+698:SkDrawable::getFlattenableType\28\29\20const
+699:SkCanvas::internalQuickReject\28SkRect\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const*\29
+700:GrMatrixEffect::Make\28SkMatrix\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+701:u_strlen_73
+702:std::__2::char_traits<char>::assign\28char&\2c\20char\20const&\29
+703:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::operator=\5babi:v160004\5d\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&&\29
+704:std::__2::__check_grouping\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20unsigned\20int&\29
+705:skia_png_malloc
+706:skgpu::ganesh::SurfaceDrawContext::drawFilledQuad\28GrClip\20const*\2c\20GrPaint&&\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\29
+707:png_write_complete_chunk
+708:pad
+709:icu_73::Locale::~Locale\28\29
+710:hb_lockable_set_t<hb_user_data_array_t::hb_user_data_item_t\2c\20hb_mutex_t>::fini\28hb_mutex_t&\29
+711:ft_mem_alloc
+712:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20SkBlendMode\29
+713:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+714:__ashlti3
+715:SkWBuffer::writeNoSizeCheck\28void\20const*\2c\20unsigned\20long\29
+716:SkUTF::NextUTF8\28char\20const**\2c\20char\20const*\29
+717:SkTCoincident::setPerp\28SkTCurve\20const&\2c\20double\2c\20SkDPoint\20const&\2c\20SkTCurve\20const&\29
+718:SkStrokeRec::SkStrokeRec\28SkStrokeRec::InitStyle\29
+719:SkString::printf\28char\20const*\2c\20...\29
+720:SkSL::Type::MakeMatrixType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20SkSL::Type\20const&\2c\20int\2c\20signed\20char\29
+721:SkSL::Operator::tightOperatorName\28\29\20const
+722:SkSL::Analysis::HasSideEffects\28SkSL::Expression\20const&\29
+723:SkReadBuffer::readColor4f\28SkRGBA4f<\28SkAlphaType\293>*\29
+724:SkPixmap::reset\28\29
+725:SkPath::cubicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+726:SkPath::close\28\29
+727:SkPaintToGrPaint\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+728:SkPaint::setMaskFilter\28sk_sp<SkMaskFilter>\29
+729:SkPaint::setColor\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkColorSpace*\29
+730:SkPaint::setBlendMode\28SkBlendMode\29
+731:SkMatrix::mapXY\28float\2c\20float\2c\20SkPoint*\29\20const
+732:SkGetICULib\28\29
+733:SkFindUnitQuadRoots\28float\2c\20float\2c\20float\2c\20float*\29
+734:SkDeque::push_back\28\29
+735:SkData::MakeWithCopy\28void\20const*\2c\20unsigned\20long\29
+736:SkCanvas::concat\28SkMatrix\20const&\29
+737:SkBinaryWriteBuffer::writeBool\28bool\29
+738:OT::hb_paint_context_t::return_t\20OT::Paint::dispatch<OT::hb_paint_context_t>\28OT::hb_paint_context_t*\29\20const
+739:GrProgramInfo::GrProgramInfo\28GrCaps\20const&\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrPipeline\20const*\2c\20GrUserStencilSettings\20const*\2c\20GrGeometryProcessor\20const*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+740:GrPixmapBase<void\2c\20GrPixmap>::GrPixmapBase\28GrImageInfo\2c\20void*\2c\20unsigned\20long\29
+741:GrColorInfo::GrColorInfo\28GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+742:FT_Outline_Translate
+743:FT_Load_Glyph
+744:FT_GlyphLoader_CheckPoints
+745:DefaultGeoProc::~DefaultGeoProc\28\29
+746:u_memcpy_73
+747:std::__2::ctype<char>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::ctype<char>>\28std::__2::locale\20const&\29
+748:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_short_size\5babi:v160004\5d\28unsigned\20long\29
+749:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_long_size\5babi:v160004\5d\28unsigned\20long\29
+750:skcms_TransferFunction_eval
+751:sinf
+752:icu_73::UnicodeString::UnicodeString\28char16_t\20const*\29
+753:icu_73::BMPSet::~BMPSet\28\29.1
+754:emscripten::internal::FunctionInvoker<void\20\28*\29\28GrDirectContext&\2c\20unsigned\20long\29\2c\20void\2c\20GrDirectContext&\2c\20unsigned\20long>::invoke\28void\20\28**\29\28GrDirectContext&\2c\20unsigned\20long\29\2c\20GrDirectContext*\2c\20unsigned\20long\29
+755:cbrtf
+756:SkTextBlob::~SkTextBlob\28\29
+757:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitProgramElement\28SkSL::ProgramElement\20const&\29
+758:SkRasterPipeline::extend\28SkRasterPipeline\20const&\29
+759:SkMatrix::mapRadius\28float\29\20const
+760:SkJSONWriter::appendf\28char\20const*\2c\20...\29
+761:SkData::MakeUninitialized\28unsigned\20long\29
+762:SkDQuad::RootsValidT\28double\2c\20double\2c\20double\2c\20double*\29
+763:SkDLine::nearPoint\28SkDPoint\20const&\2c\20bool*\29\20const
+764:SkConic::chopIntoQuadsPOW2\28SkPoint*\2c\20int\29\20const
+765:SkColorSpaceXformSteps::apply\28float*\29\20const
+766:SkCodec::applyColorXform\28void*\2c\20void\20const*\2c\20int\29\20const
+767:SkCachedData::internalRef\28bool\29\20const
+768:SkBitmap::installPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20void\20\28*\29\28void*\2c\20void*\29\2c\20void*\29
+769:GrSurface::RefCntedReleaseProc::~RefCntedReleaseProc\28\29
+770:GrStyle::initPathEffect\28sk_sp<SkPathEffect>\29
+771:GrShape::bounds\28\29\20const
+772:GrProcessor::operator\20delete\28void*\29
+773:GrGpuResource::hasRef\28\29\20const
+774:GrColorSpaceXformEffect::onMakeProgramImpl\28\29\20const::Impl::~Impl\28\29
+775:GrBufferAllocPool::~GrBufferAllocPool\28\29.1
+776:u_terminateUChars_73
+777:std::__2::numpunct<char>::thousands_sep\5babi:v160004\5d\28\29\20const
+778:std::__2::numpunct<char>::grouping\5babi:v160004\5d\28\29\20const
+779:std::__2::ctype<wchar_t>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::ctype<wchar_t>>\28std::__2::locale\20const&\29
+780:skia_png_malloc_warn
+781:skia::textlayout::Cluster::run\28\29\20const
+782:rewind\28GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29
+783:icu_73::UnicodeString::setTo\28signed\20char\2c\20icu_73::ConstChar16Ptr\2c\20int\29
+784:icu_73::UnicodeSet::add\28int\29
+785:icu_73::UVector::removeAllElements\28\29
+786:cf2_stack_popInt
+787:SkSL::Analysis::IsCompileTimeConstant\28SkSL::Expression\20const&\29
+788:SkRGBA4f<\28SkAlphaType\293>::toSkColor\28\29\20const
+789:SkPictureData::requiredPaint\28SkReadBuffer*\29\20const
+790:SkPaint::setColorFilter\28sk_sp<SkColorFilter>\29
+791:SkMatrixPriv::MapRect\28SkM44\20const&\2c\20SkRect\20const&\29
+792:SkMatrix::preTranslate\28float\2c\20float\29
+793:SkDevice::createDevice\28SkDevice::CreateInfo\20const&\2c\20SkPaint\20const*\29
+794:SkData::MakeEmpty\28\29
+795:SkConic::computeQuadPOW2\28float\29\20const
+796:SkColorInfo::makeColorType\28SkColorType\29\20const
+797:SkCodec::~SkCodec\28\29
+798:SkCanvas::~SkCanvas\28\29.1
+799:SkAutoPixmapStorage::~SkAutoPixmapStorage\28\29
+800:SkAAClip::quickContains\28int\2c\20int\2c\20int\2c\20int\29\20const
+801:SkAAClip::isRect\28\29\20const
+802:GrSurface::ComputeSize\28GrBackendFormat\20const&\2c\20SkISize\2c\20int\2c\20skgpu::Mipmapped\2c\20bool\29
+803:GrSimpleMeshDrawOpHelper::GrSimpleMeshDrawOpHelper\28GrProcessorSet*\2c\20GrAAType\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+804:GrGeometryProcessor::ProgramImpl::SetTransform\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix*\29
+805:GrDrawingManager::flushIfNecessary\28\29
+806:GrBlendFragmentProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkBlendMode\2c\20bool\29
+807:FT_Stream_ExtractFrame
+808:AAT::Lookup<OT::IntType<unsigned\20short\2c\202u>>::get_value\28unsigned\20int\2c\20unsigned\20int\29\20const
+809:utext_current32_73
+810:std::__2::ctype<wchar_t>::widen\5babi:v160004\5d\28char\29\20const
+811:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__is_long\5babi:v160004\5d\28\29\20const
+812:skia_png_malloc_base
+813:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\28\29
+814:skgpu::ganesh::AsView\28GrRecordingContext*\2c\20SkImage\20const*\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\29
+815:sk_sp<SkData>::~sk_sp\28\29
+816:icu_73::UnicodeString::releaseBuffer\28int\29
+817:icu_73::UnicodeSet::_appendToPat\28icu_73::UnicodeString&\2c\20int\2c\20signed\20char\29
+818:icu_73::UVector::~UVector\28\29
+819:hb_ot_face_t::init0\28hb_face_t*\29
+820:hb_lazy_loader_t<OT::GSUB_accelerator_t\2c\20hb_face_lazy_loader_t<OT::GSUB_accelerator_t\2c\2025u>\2c\20hb_face_t\2c\2025u\2c\20OT::GSUB_accelerator_t>::get\28\29\20const
+821:__addtf3
+822:SkTDStorage::reset\28\29
+823:SkScan::AntiHairLineRgn\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+824:SkSL::RP::Builder::label\28int\29
+825:SkSL::BinaryExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Operator\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+826:SkReadBuffer::skip\28unsigned\20long\2c\20unsigned\20long\29
+827:SkPath::countVerbs\28\29\20const
+828:SkMatrix::set9\28float\20const*\29
+829:SkMatrix::getMaxScale\28\29\20const
+830:SkImageInfo::computeByteSize\28unsigned\20long\29\20const
+831:SkImageInfo::Make\28int\2c\20int\2c\20SkColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+832:SkImageInfo::MakeA8\28int\2c\20int\29
+833:SkImageGenerator::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkImageGenerator::Options\20const&\29
+834:SkDrawBase::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const*\2c\20bool\2c\20bool\2c\20SkBlitter*\29\20const
+835:SkData::MakeWithProc\28void\20const*\2c\20unsigned\20long\2c\20void\20\28*\29\28void\20const*\2c\20void*\29\2c\20void*\29
+836:SkColorTypeIsAlwaysOpaque\28SkColorType\29
+837:SkBlockAllocator::SkBlockAllocator\28SkBlockAllocator::GrowthPolicy\2c\20unsigned\20long\2c\20unsigned\20long\29
+838:SkBlender::Mode\28SkBlendMode\29
+839:ReadHuffmanCode
+840:GrSurfaceProxy::~GrSurfaceProxy\28\29
+841:GrRenderTask::makeClosed\28GrRecordingContext*\29
+842:GrGpuBuffer::unmap\28\29
+843:GrContext_Base::options\28\29\20const
+844:GrCaps::getReadSwizzle\28GrBackendFormat\20const&\2c\20GrColorType\29\20const
+845:GrBufferAllocPool::reset\28\29
+846:FT_Stream_ReadByte
+847:void\20std::__2::vector<std::__2::pair<unsigned\20int\2c\20sk_sp<SkData>>\2c\20std::__2::allocator<std::__2::pair<unsigned\20int\2c\20sk_sp<SkData>>>>::__emplace_back_slow_path<unsigned\20int\20const&\2c\20sk_sp<SkData>>\28unsigned\20int\20const&\2c\20sk_sp<SkData>&&\29
+848:std::__2::char_traits<wchar_t>::assign\28wchar_t&\2c\20wchar_t\20const&\29
+849:std::__2::char_traits<char>::copy\28char*\2c\20char\20const*\2c\20unsigned\20long\29
+850:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::begin\5babi:v160004\5d\28\29
+851:std::__2::__next_prime\28unsigned\20long\29
+852:std::__2::__libcpp_snprintf_l\28char*\2c\20unsigned\20long\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+853:snprintf
+854:skif::LayerSpace<SkMatrix>::mapRect\28skif::LayerSpace<SkIRect>\20const&\29\20const
+855:locale_get_default_73
+856:is_equal\28std::type_info\20const*\2c\20std::type_info\20const*\2c\20bool\29
+857:icu_73::BytesTrie::~BytesTrie\28\29
+858:hb_buffer_t::sync\28\29
+859:__floatsitf
+860:WebPSafeCalloc
+861:StreamRemainingLengthIsBelow\28SkStream*\2c\20unsigned\20long\29
+862:SkSL::VariableReference::VariableReference\28SkSL::Position\2c\20SkSL::Variable\20const*\2c\20SkSL::VariableRefKind\29
+863:SkSL::RP::Builder::swizzle\28int\2c\20SkSpan<signed\20char\20const>\29
+864:SkSL::Parser::expression\28\29
+865:SkPath::isConvex\28\29\20const
+866:SkPaint::asBlendMode\28\29\20const
+867:SkImageFilter_Base::getFlattenableType\28\29\20const
+868:SkImageFilter_Base::SkImageFilter_Base\28sk_sp<SkImageFilter>\20const*\2c\20int\2c\20std::__2::optional<bool>\29
+869:SkIRect::join\28SkIRect\20const&\29
+870:SkIDChangeListener::List::~List\28\29
+871:SkFontMgr::countFamilies\28\29\20const
+872:SkDQuad::ptAtT\28double\29\20const
+873:SkDLine::exactPoint\28SkDPoint\20const&\29\20const
+874:SkDConic::ptAtT\28double\29\20const
+875:SkColorInfo::makeAlphaType\28SkAlphaType\29\20const
+876:SkCanvas::save\28\29
+877:SkCanvas::drawImage\28SkImage\20const*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+878:SkBitmap::setInfo\28SkImageInfo\20const&\2c\20unsigned\20long\29
+879:SkAAClip::Builder::addRun\28int\2c\20int\2c\20unsigned\20int\2c\20int\29
+880:GrSkSLFP::addChild\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20bool\29
+881:GrGLSLShaderBuilder::appendTextureLookup\28SkString*\2c\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\2c\20char\20const*\29\20const
+882:GrFragmentProcessor::cloneAndRegisterAllChildProcessors\28GrFragmentProcessor\20const&\29
+883:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::~SwizzleFragmentProcessor\28\29
+884:GrDrawOpAtlas::~GrDrawOpAtlas\28\29
+885:GrBackendFormat::GrBackendFormat\28GrBackendFormat\20const&\29
+886:AutoFTAccess::AutoFTAccess\28SkTypeface_FreeType\20const*\29
+887:AlmostPequalUlps\28float\2c\20float\29
+888:strncpy
+889:std::__2::ctype<char>::is\5babi:v160004\5d\28unsigned\20long\2c\20char\29\20const
+890:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d<std::nullptr_t>\28char\20const*\29
+891:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_long_cap\5babi:v160004\5d\28unsigned\20long\29
+892:skia_private::TArray<unsigned\20char\2c\20true>::operator=\28skia_private::TArray<unsigned\20char\2c\20true>&&\29
+893:skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>\20const&\29
+894:skia_png_reset_crc
+895:memchr
+896:icu_73::UnicodeString::operator=\28icu_73::UnicodeString\20const&\29
+897:icu_73::UnicodeString::doReplace\28int\2c\20int\2c\20char16_t\20const*\2c\20int\2c\20int\29
+898:icu_73::MlBreakEngine::initKeyValue\28UResourceBundle*\2c\20char\20const*\2c\20char\20const*\2c\20icu_73::Hashtable&\2c\20UErrorCode&\29
+899:icu_73::CharString::appendInvariantChars\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29
+900:icu_73::ByteSinkUtil::appendUnchanged\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20icu_73::ByteSink&\2c\20unsigned\20int\2c\20icu_73::Edits*\2c\20UErrorCode&\29
+901:hb_buffer_t::sync_so_far\28\29
+902:hb_buffer_t::move_to\28unsigned\20int\29
+903:VP8ExitCritical
+904:SkTDStorage::resize\28int\29
+905:SkSwizzler::swizzle\28void*\2c\20unsigned\20char\20const*\29
+906:SkStream::readPackedUInt\28unsigned\20long*\29
+907:SkSize\20skif::Mapping::map<SkSize>\28SkSize\20const&\2c\20SkMatrix\20const&\29
+908:SkSL::Type::coercionCost\28SkSL::Type\20const&\29\20const
+909:SkSL::Type::clone\28SkSL::SymbolTable*\29\20const
+910:SkSL::RP::Generator::writeStatement\28SkSL::Statement\20const&\29
+911:SkSL::Parser::operatorRight\28SkSL::Parser::AutoDepth&\2c\20SkSL::OperatorKind\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20\28SkSL::Parser::*\29\28\29\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>&\29
+912:SkRuntimeEffect::MakeForColorFilter\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+913:SkResourceCache::Key::init\28void*\2c\20unsigned\20long\20long\2c\20unsigned\20long\29
+914:SkReadBuffer::skip\28unsigned\20long\29
+915:SkReadBuffer::readFlattenable\28SkFlattenable::Type\29
+916:SkRBuffer::read\28void*\2c\20unsigned\20long\29
+917:SkIDChangeListener::List::List\28\29
+918:SkGlyph::path\28\29\20const
+919:GrStyledShape::GrStyledShape\28GrStyledShape\20const&\29
+920:GrRenderTargetProxy::arenas\28\29
+921:GrOpFlushState::caps\28\29\20const
+922:GrGpuResource::hasNoCommandBufferUsages\28\29\20const
+923:GrGeometryProcessor::ProgramImpl::WriteLocalCoord\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\2c\20GrShaderVar\2c\20SkMatrix\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+924:GrGLTextureParameters::SamplerOverriddenState::SamplerOverriddenState\28\29
+925:GrGLGpu::deleteFramebuffer\28unsigned\20int\29
+926:GrFragmentProcessors::Make\28SkShader\20const*\2c\20GrFPArgs\20const&\2c\20SkShaders::MatrixRec\20const&\29
+927:FT_Stream_ReadULong
+928:FT_Get_Module
+929:Cr_z__tr_flush_block
+930:AlmostBequalUlps\28float\2c\20float\29
+931:utext_previous32_73
+932:ures_getByKeyWithFallback_73
+933:std::__2::numpunct<char>::truename\5babi:v160004\5d\28\29\20const
+934:std::__2::moneypunct<char\2c\20false>::do_grouping\28\29\20const
+935:std::__2::locale::use_facet\28std::__2::locale::id&\29\20const
+936:std::__2::ctype<wchar_t>::is\5babi:v160004\5d\28unsigned\20long\2c\20wchar_t\29\20const
+937:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::empty\5babi:v160004\5d\28\29\20const
+938:skia_private::THashTable<SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Entry*\2c\20unsigned\20long\20long\2c\20SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Traits>::removeSlot\28int\29
+939:skia_png_save_int_32
+940:skia_png_safecat
+941:skia_png_gamma_significant
+942:skgpu::ganesh::SurfaceContext::readPixels\28GrDirectContext*\2c\20GrPixmap\2c\20SkIPoint\29
+943:icu_73::UnicodeString::getBuffer\28int\29
+944:icu_73::UnicodeString::doAppend\28icu_73::UnicodeString\20const&\2c\20int\2c\20int\29
+945:icu_73::UVector32::~UVector32\28\29
+946:icu_73::RuleBasedBreakIterator::handleNext\28\29
+947:hb_lazy_loader_t<OT::GPOS_accelerator_t\2c\20hb_face_lazy_loader_t<OT::GPOS_accelerator_t\2c\2026u>\2c\20hb_face_t\2c\2026u\2c\20OT::GPOS_accelerator_t>::get\28\29\20const
+948:hb_font_get_nominal_glyph
+949:hb_buffer_t::clear_output\28\29
+950:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28SkPaint\20const&\29\2c\20SkCanvas*\2c\20SkPaint*\29
+951:cff_parse_num
+952:T_CString_toLowerCase_73
+953:SkTSect::SkTSect\28SkTCurve\20const&\29
+954:SkStrokeRec::SkStrokeRec\28SkPaint\20const&\2c\20float\29
+955:SkString::set\28char\20const*\2c\20unsigned\20long\29
+956:SkSL::Swizzle::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20skia_private::STArray<4\2c\20signed\20char\2c\20true>\29
+957:SkSL::String::appendf\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20char\20const*\2c\20...\29
+958:SkSL::Parser::layoutInt\28\29
+959:SkSL::Parser::expectIdentifier\28SkSL::Token*\29
+960:SkRegion::Cliperator::next\28\29
+961:SkRegion::Cliperator::Cliperator\28SkRegion\20const&\2c\20SkIRect\20const&\29
+962:SkRRect::initializeRect\28SkRect\20const&\29
+963:SkPictureRecorder::~SkPictureRecorder\28\29
+964:SkPathRef::CreateEmpty\28\29
+965:SkPath::addRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+966:SkMasks::getAlpha\28unsigned\20int\29\20const
+967:SkM44::setConcat\28SkM44\20const&\2c\20SkM44\20const&\29
+968:SkImageFilter_Base::getChildOutputLayerBounds\28int\2c\20skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+969:SkImageFilter_Base::getChildInputLayerBounds\28int\2c\20skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+970:SkData::MakeFromMalloc\28void\20const*\2c\20unsigned\20long\29
+971:SkDRect::setBounds\28SkTCurve\20const&\29
+972:SkColorFilter::isAlphaUnchanged\28\29\20const
+973:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\29
+974:SkCanvas::translate\28float\2c\20float\29
+975:SkBitmapCache::Rec::getKey\28\29\20const
+976:SkBitmap::asImage\28\29\20const
+977:PS_Conv_ToFixed
+978:OT::hb_ot_apply_context_t::hb_ot_apply_context_t\28unsigned\20int\2c\20hb_font_t*\2c\20hb_buffer_t*\2c\20hb_blob_t*\29
+979:GrTriangulator::Line::intersect\28GrTriangulator::Line\20const&\2c\20SkPoint*\29\20const
+980:GrSimpleMeshDrawOpHelper::isCompatible\28GrSimpleMeshDrawOpHelper\20const&\2c\20GrCaps\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20bool\29\20const
+981:GrQuad::MakeFromSkQuad\28SkPoint\20const*\2c\20SkMatrix\20const&\29
+982:GrOpsRenderPass::bindBuffers\28sk_sp<GrBuffer\20const>\2c\20sk_sp<GrBuffer\20const>\2c\20sk_sp<GrBuffer\20const>\2c\20GrPrimitiveRestart\29
+983:GrImageInfo::GrImageInfo\28GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20SkISize\20const&\29
+984:GrColorInfo::GrColorInfo\28SkColorInfo\20const&\29
+985:AlmostDequalUlps\28double\2c\20double\29
+986:utrace_exit_73
+987:utrace_entry_73
+988:ures_hasNext_73
+989:ures_getNextResource_73
+990:uprv_toupper_73
+991:tt_face_get_name
+992:strrchr
+993:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::size\5babi:v160004\5d\28\29\20const
+994:std::__2::to_string\28long\20long\29
+995:std::__2::__libcpp_locale_guard::~__libcpp_locale_guard\5babi:v160004\5d\28\29
+996:std::__2::__libcpp_locale_guard::__libcpp_locale_guard\5babi:v160004\5d\28__locale_struct*&\29
+997:sktext::gpu::GlyphVector::~GlyphVector\28\29
+998:sktext::gpu::GlyphVector::glyphs\28\29\20const
+999:skia_png_benign_error
+1000:skia_png_app_error
+1001:skgpu::ganesh::SurfaceFillContext::getOpsTask\28\29
+1002:isdigit
+1003:icu_73::Locale::Locale\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29
+1004:hb_sanitize_context_t::return_t\20OT::Paint::dispatch<hb_sanitize_context_t>\28hb_sanitize_context_t*\29\20const
+1005:hb_ot_layout_lookup_would_substitute
+1006:hb_buffer_t::unsafe_to_break\28unsigned\20int\2c\20unsigned\20int\29
+1007:ft_module_get_service
+1008:emscripten::internal::FunctionInvoker<unsigned\20long\20\28*\29\28GrDirectContext&\29\2c\20unsigned\20long\2c\20GrDirectContext&>::invoke\28unsigned\20long\20\28**\29\28GrDirectContext&\29\2c\20GrDirectContext*\29
+1009:cf2_hintmap_map
+1010:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>*\29\20const
+1011:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28\29\20const
+1012:blit_trapezoid_row\28AdditiveBlitter*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char*\2c\20bool\2c\20bool\2c\20bool\29
+1013:__sindf
+1014:__shlim
+1015:__cosdf
+1016:\28anonymous\20namespace\29::init_resb_result\28UResourceDataEntry*\2c\20unsigned\20int\2c\20char\20const*\2c\20int\2c\20UResourceDataEntry*\2c\20char\20const*\2c\20int\2c\20UResourceBundle*\2c\20UErrorCode*\29
+1017:SkSurface::getCanvas\28\29
+1018:SkSL::cast_expression\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+1019:SkSL::Variable::initialValue\28\29\20const
+1020:SkSL::SymbolTable::addArrayDimension\28SkSL::Type\20const*\2c\20int\29
+1021:SkSL::StringStream::str\28\29\20const
+1022:SkSL::RP::Program::appendCopy\28skia_private::TArray<SkSL::RP::Program::Stage\2c\20true>*\2c\20SkArenaAlloc*\2c\20std::byte*\2c\20SkSL::RP::ProgramOp\2c\20unsigned\20int\2c\20int\2c\20unsigned\20int\2c\20int\2c\20int\29\20const
+1023:SkSL::RP::Generator::makeLValue\28SkSL::Expression\20const&\2c\20bool\29
+1024:SkSL::RP::DynamicIndexLValue::dynamicSlotRange\28\29
+1025:SkSL::GLSLCodeGenerator::writeStatement\28SkSL::Statement\20const&\29
+1026:SkSL::Expression::description\28\29\20const
+1027:SkSL::Analysis::UpdateVariableRefKind\28SkSL::Expression*\2c\20SkSL::VariableRefKind\2c\20SkSL::ErrorReporter*\29
+1028:SkRegion::setEmpty\28\29
+1029:SkRasterPipeline::append_load_dst\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+1030:SkRRect::setRectRadii\28SkRect\20const&\2c\20SkPoint\20const*\29
+1031:SkRRect::setOval\28SkRect\20const&\29
+1032:SkPointPriv::DistanceToLineSegmentBetweenSqd\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\29
+1033:SkPath::arcTo\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\29
+1034:SkPath::addPath\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPath::AddPathMode\29
+1035:SkPaint::setImageFilter\28sk_sp<SkImageFilter>\29
+1036:SkPaint::operator=\28SkPaint&&\29
+1037:SkOpSpanBase::contains\28SkOpSegment\20const*\29\20const
+1038:SkMipmap::ComputeLevelCount\28int\2c\20int\29
+1039:SkMatrix::mapHomogeneousPoints\28SkPoint3*\2c\20SkPoint\20const*\2c\20int\29\20const
+1040:SkMD5::bytesWritten\28\29\20const
+1041:SkImageFilters::Crop\28SkRect\20const&\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\29
+1042:SkImageFilter_Base::getChildOutput\28int\2c\20skif::Context\20const&\29\20const
+1043:SkIDChangeListener::List::changed\28\29
+1044:SkDevice::makeSpecial\28SkBitmap\20const&\29
+1045:SkCanvas::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\29
+1046:SkBlockMemoryStream::getLength\28\29\20const
+1047:SkAAClipBlitterWrapper::init\28SkRasterClip\20const&\2c\20SkBlitter*\29
+1048:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\28\29
+1049:RunBasedAdditiveBlitter::flush\28\29
+1050:GrSurface::onRelease\28\29
+1051:GrStyledShape::unstyledKeySize\28\29\20const
+1052:GrShape::convex\28bool\29\20const
+1053:GrRecordingContext::threadSafeCache\28\29
+1054:GrProxyProvider::caps\28\29\20const
+1055:GrOp::GrOp\28unsigned\20int\29
+1056:GrMakeUncachedBitmapProxyView\28GrRecordingContext*\2c\20SkBitmap\20const&\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\29
+1057:GrGLSLShaderBuilder::getMangledFunctionName\28char\20const*\29
+1058:GrGLGpu::bindBuffer\28GrGpuBufferType\2c\20GrBuffer\20const*\29
+1059:GrGLAttribArrayState::set\28GrGLGpu*\2c\20int\2c\20GrBuffer\20const*\2c\20GrVertexAttribType\2c\20SkSLType\2c\20int\2c\20unsigned\20long\2c\20int\29
+1060:GrAAConvexTessellator::Ring::computeNormals\28GrAAConvexTessellator\20const&\29
+1061:GrAAConvexTessellator::Ring::computeBisectors\28GrAAConvexTessellator\20const&\29
+1062:FT_Activate_Size
+1063:Cr_z_adler32
+1064:vsnprintf
+1065:void\20extend_pts<\28SkPaint::Cap\292>\28SkPath::Verb\2c\20SkPath::Verb\2c\20SkPoint*\2c\20int\29
+1066:void\20extend_pts<\28SkPaint::Cap\291>\28SkPath::Verb\2c\20SkPath::Verb\2c\20SkPoint*\2c\20int\29
+1067:ures_getStringByKey_73
+1068:ucptrie_getRange_73
+1069:u_terminateChars_73
+1070:u_strchr_73
+1071:top12
+1072:toSkImageInfo\28SimpleImageInfo\20const&\29
+1073:std::__2::pair<std::__2::__unwrap_ref_decay<char\20const*>::type\2c\20std::__2::__unwrap_ref_decay<char*>::type>\20std::__2::make_pair\5babi:v160004\5d<char\20const*\2c\20char*>\28char\20const*&&\2c\20char*&&\29
+1074:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::operator=\5babi:v160004\5d\28std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&&\29
+1075:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20std::__2::operator+<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\28char\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+1076:std::__2::__tree<std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>\2c\20std::__2::__map_value_compare<unsigned\20long\2c\20std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>\2c\20std::__2::less<unsigned\20long>\2c\20true>\2c\20std::__2::allocator<std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>>>::destroy\28std::__2::__tree_node<std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>\2c\20void*>*\29
+1077:std::__2::__num_put_base::__identify_padding\28char*\2c\20char*\2c\20std::__2::ios_base\20const&\29
+1078:std::__2::__num_get_base::__get_base\28std::__2::ios_base&\29
+1079:std::__2::__libcpp_asprintf_l\28char**\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+1080:skia_private::THashMap<SkSL::Variable\20const*\2c\20SkSL::ProgramUsage::VariableCounts\2c\20SkGoodHash>::operator\5b\5d\28SkSL::Variable\20const*\20const&\29
+1081:skia_png_zstream_error
+1082:skia::textlayout::TextLine::iterateThroughVisualRuns\28bool\2c\20std::__2::function<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>\20const&\29\20const
+1083:skia::textlayout::ParagraphImpl::cluster\28unsigned\20long\29
+1084:skia::textlayout::Cluster::runOrNull\28\29\20const
+1085:skgpu::ganesh::SurfaceFillContext::replaceOpsTask\28\29
+1086:skcms_TransferFunction_getType
+1087:skcms_GetTagBySignature
+1088:read_curve\28unsigned\20char\20const*\2c\20unsigned\20int\2c\20skcms_Curve*\2c\20unsigned\20int*\29
+1089:pow
+1090:int\20std::__2::__get_up_to_n_digits\5babi:v160004\5d<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\2c\20int\29
+1091:int\20std::__2::__get_up_to_n_digits\5babi:v160004\5d<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\2c\20int\29
+1092:icu_73::UnicodeString::unBogus\28\29
+1093:icu_73::UnicodeString::doIndexOf\28char16_t\2c\20int\2c\20int\29\20const
+1094:icu_73::UnicodeSetStringSpan::~UnicodeSetStringSpan\28\29
+1095:icu_73::UVector::adoptElement\28void*\2c\20UErrorCode&\29
+1096:icu_73::SimpleFilteredSentenceBreakIterator::operator==\28icu_73::BreakIterator\20const&\29\20const
+1097:icu_73::Locale::init\28char\20const*\2c\20signed\20char\29
+1098:hb_serialize_context_t::pop_pack\28bool\29
+1099:hb_lazy_loader_t<OT::OS2\2c\20hb_table_lazy_loader_t<OT::OS2\2c\206u\2c\20true>\2c\20hb_face_t\2c\206u\2c\20hb_blob_t>::get\28\29\20const
+1100:hb_buffer_destroy
+1101:getenv
+1102:bool\20std::__2::operator!=\5babi:v160004\5d<char*>\28std::__2::__wrap_iter<char*>\20const&\2c\20std::__2::__wrap_iter<char*>\20const&\29
+1103:afm_parser_read_vals
+1104:__extenddftf2
+1105:\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29
+1106:\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29
+1107:\28anonymous\20namespace\29::colrv1_transform\28FT_FaceRec_*\2c\20FT_COLR_Paint_\20const&\2c\20SkCanvas*\2c\20SkMatrix*\29
+1108:WebPRescalerImport
+1109:SkTDStorage::removeShuffle\28int\29
+1110:SkString::SkString\28char\20const*\2c\20unsigned\20long\29
+1111:SkStrikeCache::GlobalStrikeCache\28\29
+1112:SkScan::HairLineRgn\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+1113:SkSL::InlineCandidateAnalyzer::visitExpression\28std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>*\29
+1114:SkSL::GLSLCodeGenerator::getTypePrecision\28SkSL::Type\20const&\29
+1115:SkRuntimeEffect::Uniform::sizeInBytes\28\29\20const
+1116:SkReadBuffer::readMatrix\28SkMatrix*\29
+1117:SkReadBuffer::readByteArray\28void*\2c\20unsigned\20long\29
+1118:SkReadBuffer::readBool\28\29
+1119:SkRasterPipeline::run\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\20const
+1120:SkPictureData::optionalPaint\28SkReadBuffer*\29\20const
+1121:SkPathWriter::isClosed\28\29\20const
+1122:SkPath::isRect\28SkRect*\2c\20bool*\2c\20SkPathDirection*\29\20const
+1123:SkPaint::setStrokeWidth\28float\29
+1124:SkOpSegment::nextChase\28SkOpSpanBase**\2c\20int*\2c\20SkOpSpan**\2c\20SkOpSpanBase**\29\20const
+1125:SkOpSegment::addCurveTo\28SkOpSpanBase\20const*\2c\20SkOpSpanBase\20const*\2c\20SkPathWriter*\29\20const
+1126:SkMatrix::preScale\28float\2c\20float\29
+1127:SkMatrix::postScale\28float\2c\20float\29
+1128:SkMatrix::isSimilarity\28float\29\20const
+1129:SkMask::computeImageSize\28\29\20const
+1130:SkIntersections::removeOne\28int\29
+1131:SkImageInfo::Make\28int\2c\20int\2c\20SkColorType\2c\20SkAlphaType\29
+1132:SkDynamicMemoryWStream::detachAsData\28\29
+1133:SkDLine::ptAtT\28double\29\20const
+1134:SkColorSpace::Equals\28SkColorSpace\20const*\2c\20SkColorSpace\20const*\29
+1135:SkColorFilter::makeComposed\28sk_sp<SkColorFilter>\29\20const
+1136:SkCanvas::drawImageRect\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+1137:SkBulkGlyphMetrics::~SkBulkGlyphMetrics\28\29
+1138:SkBitmap::peekPixels\28SkPixmap*\29\20const
+1139:SkAutoPixmapStorage::SkAutoPixmapStorage\28\29
+1140:SkAAClip::setEmpty\28\29
+1141:PS_Conv_Strtol
+1142:OT::Layout::GSUB_impl::SubstLookup*\20hb_serialize_context_t::push<OT::Layout::GSUB_impl::SubstLookup>\28\29
+1143:GrTriangulator::makeConnectingEdge\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeType\2c\20GrTriangulator::Comparator\20const&\2c\20int\29
+1144:GrTextureProxy::~GrTextureProxy\28\29
+1145:GrSimpleMeshDrawOpHelper::createProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrGeometryProcessor*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+1146:GrResourceAllocator::addInterval\28GrSurfaceProxy*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20GrResourceAllocator::ActualUse\2c\20GrResourceAllocator::AllowRecycling\29
+1147:GrRecordingContextPriv::makeSFCWithFallback\28GrImageInfo\2c\20SkBackingFit\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+1148:GrGpuBuffer::updateData\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+1149:GrGLTextureParameters::NonsamplerState::NonsamplerState\28\29
+1150:GrGLSLShaderBuilder::~GrGLSLShaderBuilder\28\29
+1151:GrGLSLProgramBuilder::nameVariable\28char\2c\20char\20const*\2c\20bool\29
+1152:GrGLGpu::prepareToDraw\28GrPrimitiveType\29
+1153:GrGLFormatFromGLEnum\28unsigned\20int\29
+1154:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\28\29
+1155:GrBackendTexture::getBackendFormat\28\29\20const
+1156:GrBackendFormats::MakeGL\28unsigned\20int\2c\20unsigned\20int\29
+1157:GrBackendFormatToCompressionType\28GrBackendFormat\20const&\29
+1158:FilterLoop24_C
+1159:FT_Stream_Skip
+1160:CFF::CFFIndex<OT::IntType<unsigned\20short\2c\202u>>::operator\5b\5d\28unsigned\20int\29\20const
+1161:AAT::Lookup<OT::HBGlyphID16>::sanitize\28hb_sanitize_context_t*\29\20const
+1162:write_trc_tag\28skcms_Curve\20const&\29
+1163:utext_close_73
+1164:ures_open_73
+1165:ures_getKey_73
+1166:ulocimp_getLanguage_73\28char\20const*\2c\20char\20const**\2c\20UErrorCode&\29
+1167:u_UCharsToChars_73
+1168:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+1169:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\20const*\2c\20char\20const*\29\20const
+1170:std::__2::enable_if<true\2c\20void>::type\20skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\298>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2964>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2932>\2c\20skgpu::tess::AddTrianglesWhenChopping\2c\20skgpu::tess::DiscardFlatCurves>::writeTriangleStack<void>\28skgpu::tess::MiddleOutPolygonTriangulator::PoppedTriangleStack&&\29
+1171:std::__2::ctype<wchar_t>::widen\5babi:v160004\5d\28char\20const*\2c\20char\20const*\2c\20wchar_t*\29\20const
+1172:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__get_long_cap\5babi:v160004\5d\28\29\20const
+1173:skif::RoundOut\28SkRect\29
+1174:skif::LayerSpace<SkSize>::ceil\28\29\20const
+1175:skia_private::TArray<float\2c\20true>::push_back\28float\20const&\29
+1176:skia_png_write_finish_row
+1177:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\28\29
+1178:scalbn
+1179:res_getStringNoTrace_73
+1180:non-virtual\20thunk\20to\20GrOpFlushState::allocator\28\29
+1181:icu_73::UnicodeSet::applyPattern\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29
+1182:icu_73::Normalizer2Impl::getFCD16FromNormData\28int\29\20const
+1183:icu_73::Locale::Locale\28\29
+1184:hb_lazy_loader_t<OT::MVAR\2c\20hb_table_lazy_loader_t<OT::MVAR\2c\2022u\2c\20true>\2c\20hb_face_t\2c\2022u\2c\20hb_blob_t>::get\28\29\20const
+1185:hb_lazy_loader_t<OT::GDEF_accelerator_t\2c\20hb_face_lazy_loader_t<OT::GDEF_accelerator_t\2c\2024u>\2c\20hb_face_t\2c\2024u\2c\20OT::GDEF_accelerator_t>::get\28\29\20const
+1186:hb_buffer_get_glyph_infos
+1187:cff2_path_param_t::line_to\28CFF::point_t\20const&\29
+1188:cff1_path_param_t::line_to\28CFF::point_t\20const&\29
+1189:cf2_stack_getReal
+1190:byn$mgfn-shared$GrGLProgramDataManager::set1iv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\20const*\29\20const
+1191:antifilldot8\28int\2c\20int\2c\20int\2c\20int\2c\20SkBlitter*\2c\20bool\29
+1192:afm_stream_skip_spaces
+1193:WebPRescalerInit
+1194:WebPRescalerExportRow
+1195:SkTextBlobBuilder::allocInternal\28SkFont\20const&\2c\20SkTextBlob::GlyphPositioning\2c\20int\2c\20int\2c\20SkPoint\2c\20SkRect\20const*\29
+1196:SkTDStorage::append\28void\20const*\2c\20int\29
+1197:SkString::Rec::Make\28char\20const*\2c\20unsigned\20long\29::$_0::operator\28\29\28\29\20const
+1198:SkStrike::digestFor\28skglyph::ActionType\2c\20SkPackedGlyphID\29
+1199:SkShaders::Color\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20sk_sp<SkColorSpace>\29
+1200:SkSafeMath::Add\28unsigned\20long\2c\20unsigned\20long\29
+1201:SkSL::SymbolTable::lookup\28SkSL::SymbolTable::SymbolKey\20const&\29\20const
+1202:SkSL::ProgramUsage::get\28SkSL::Variable\20const&\29\20const
+1203:SkSL::Parser::assignmentExpression\28\29
+1204:SkSL::Operator::determineBinaryType\28SkSL::Context\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Type\20const**\2c\20SkSL::Type\20const**\2c\20SkSL::Type\20const**\29\20const
+1205:SkSL::Inliner::inlineStatement\28SkSL::Position\2c\20skia_private::THashMap<SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkGoodHash>*\2c\20SkSL::SymbolTable*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>*\2c\20SkSL::Analysis::ReturnComplexity\2c\20SkSL::Statement\20const&\2c\20SkSL::ProgramUsage\20const&\2c\20bool\29
+1206:SkSL::GLSLCodeGenerator::write\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1207:SkSL::FieldAccess::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20int\2c\20SkSL::FieldAccessOwnerKind\29
+1208:SkSL::ConstructorSplat::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1209:SkSL::ConstructorScalarCast::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1210:SkRuntimeEffectBuilder::writableUniformData\28\29
+1211:SkRuntimeEffect::findUniform\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+1212:SkResourceCache::Find\28SkResourceCache::Key\20const&\2c\20bool\20\28*\29\28SkResourceCache::Rec\20const&\2c\20void*\29\2c\20void*\29
+1213:SkRegion::SkRegion\28SkIRect\20const&\29
+1214:SkRect::toQuad\28SkPoint*\29\20const
+1215:SkRasterPipeline::append_transfer_function\28skcms_TransferFunction\20const&\29
+1216:SkRasterPipeline::append_store\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+1217:SkRasterPipeline::append_constant_color\28SkArenaAlloc*\2c\20float\20const*\29
+1218:SkRasterClip::SkRasterClip\28\29
+1219:SkRRect::checkCornerContainment\28float\2c\20float\29\20const
+1220:SkPictureData::getImage\28SkReadBuffer*\29\20const
+1221:SkPathMeasure::getLength\28\29
+1222:SkPathBuilder::~SkPathBuilder\28\29
+1223:SkPathBuilder::detach\28\29
+1224:SkPathBuilder::SkPathBuilder\28\29
+1225:SkPath::getGenerationID\28\29\20const
+1226:SkPath::addPoly\28SkPoint\20const*\2c\20int\2c\20bool\29
+1227:SkParse::FindScalars\28char\20const*\2c\20float*\2c\20int\29
+1228:SkPaint::refPathEffect\28\29\20const
+1229:SkPaint::operator=\28SkPaint\20const&\29
+1230:SkMipmap::getLevel\28int\2c\20SkMipmap::Level*\29\20const
+1231:SkJSONWriter::appendCString\28char\20const*\2c\20char\20const*\29
+1232:SkIntersections::setCoincident\28int\29
+1233:SkImage_Ganesh::SkImage_Ganesh\28sk_sp<GrImageContext>\2c\20unsigned\20int\2c\20GrSurfaceProxyView\2c\20SkColorInfo\29
+1234:SkImageInfo::computeOffset\28int\2c\20int\2c\20unsigned\20long\29\20const
+1235:SkImageFilter_Base::flatten\28SkWriteBuffer&\29\20const
+1236:SkDrawBase::SkDrawBase\28\29
+1237:SkDLine::NearPointV\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1238:SkDLine::NearPointH\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1239:SkDLine::ExactPointV\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1240:SkDLine::ExactPointH\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1241:SkColorSpaceXformSteps::apply\28SkRasterPipeline*\29\20const
+1242:SkColorFilter::filterColor\28unsigned\20int\29\20const
+1243:SkCodec::SkCodec\28SkEncodedInfo&&\2c\20skcms_PixelFormat\2c\20std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkEncodedOrigin\29
+1244:SkCanvas::drawPicture\28SkPicture\20const*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\29
+1245:SkCanvas::drawColor\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+1246:SkBulkGlyphMetrics::SkBulkGlyphMetrics\28SkStrikeSpec\20const&\29
+1247:SkBlockAllocator::releaseBlock\28SkBlockAllocator::Block*\29
+1248:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\28SkRasterClip\20const&\2c\20SkBlitter*\29
+1249:OT::MVAR::get_var\28unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\29\20const
+1250:GrXferProcessor::GrXferProcessor\28GrProcessor::ClassID\2c\20bool\2c\20GrProcessorAnalysisCoverage\29
+1251:GrTextureEffect::Make\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState\2c\20GrCaps\20const&\2c\20float\20const*\29
+1252:GrTextureEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20GrCaps\20const&\2c\20float\20const*\29
+1253:GrSimpleMeshDrawOpHelper::finalizeProcessors\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\2c\20GrProcessorAnalysisCoverage\2c\20SkRGBA4f<\28SkAlphaType\292>*\2c\20bool*\29
+1254:GrResourceProvider::findResourceByUniqueKey\28skgpu::UniqueKey\20const&\29
+1255:GrRecordingContext::OwnedArenas::get\28\29
+1256:GrProxyProvider::createProxy\28GrBackendFormat\20const&\2c\20SkISize\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\29
+1257:GrProxyProvider::assignUniqueKeyToProxy\28skgpu::UniqueKey\20const&\2c\20GrTextureProxy*\29
+1258:GrProcessorSet::finalize\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20GrAppliedClip\20const*\2c\20GrUserStencilSettings\20const*\2c\20GrCaps\20const&\2c\20GrClampType\2c\20SkRGBA4f<\28SkAlphaType\292>*\29
+1259:GrOpFlushState::allocator\28\29
+1260:GrOp::cutChain\28\29
+1261:GrMeshDrawTarget::makeVertexWriter\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+1262:GrGpuResource::GrGpuResource\28GrGpu*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1263:GrGeometryProcessor::TextureSampler::reset\28GrSamplerState\2c\20GrBackendFormat\20const&\2c\20skgpu::Swizzle\20const&\29
+1264:GrGeometryProcessor::AttributeSet::end\28\29\20const
+1265:GrGeometryProcessor::AttributeSet::Iter::operator++\28\29
+1266:GrGeometryProcessor::AttributeSet::Iter::operator*\28\29\20const
+1267:GrGLTextureParameters::set\28GrGLTextureParameters::SamplerOverriddenState\20const*\2c\20GrGLTextureParameters::NonsamplerState\20const&\2c\20unsigned\20long\20long\29
+1268:GrGLSLShaderBuilder::appendTextureLookup\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+1269:GrClip::GetPixelIBounds\28SkRect\20const&\2c\20GrAA\2c\20GrClip::BoundsType\29
+1270:GrBackendTexture::~GrBackendTexture\28\29
+1271:FT_Outline_Get_CBox
+1272:FT_Get_Sfnt_Table
+1273:utf8_prevCharSafeBody_73
+1274:ures_getString_73
+1275:ulocimp_getScript_73\28char\20const*\2c\20char\20const**\2c\20UErrorCode&\29
+1276:uhash_open_73
+1277:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__destroy_vector::__destroy_vector\28std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>&\29
+1278:std::__2::moneypunct<char\2c\20true>::negative_sign\5babi:v160004\5d\28\29\20const
+1279:std::__2::moneypunct<char\2c\20true>::neg_format\5babi:v160004\5d\28\29\20const
+1280:std::__2::moneypunct<char\2c\20true>::frac_digits\5babi:v160004\5d\28\29\20const
+1281:std::__2::moneypunct<char\2c\20false>::do_pos_format\28\29\20const
+1282:std::__2::ctype<char>::widen\5babi:v160004\5d\28char\20const*\2c\20char\20const*\2c\20char*\29\20const
+1283:std::__2::char_traits<wchar_t>::copy\28wchar_t*\2c\20wchar_t\20const*\2c\20unsigned\20long\29
+1284:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::end\5babi:v160004\5d\28\29
+1285:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::end\5babi:v160004\5d\28\29
+1286:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_size\5babi:v160004\5d\28unsigned\20long\29
+1287:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__assign_external\28char\20const*\2c\20unsigned\20long\29
+1288:std::__2::__itoa::__append2\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+1289:skif::FilterResult::resolve\28skif::Context\20const&\2c\20skif::LayerSpace<SkIRect>\2c\20bool\29\20const
+1290:skia_png_read_finish_row
+1291:skia_png_handle_unknown
+1292:skia_png_gamma_correct
+1293:skia_png_colorspace_sync
+1294:skia_png_app_warning
+1295:skia::textlayout::TextStyle::operator=\28skia::textlayout::TextStyle\20const&\29
+1296:skia::textlayout::TextLine::offset\28\29\20const
+1297:skia::textlayout::Run::placeholderStyle\28\29\20const
+1298:skia::textlayout::Cluster::Cluster\28skia::textlayout::ParagraphImpl*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkSpan<char\20const>\2c\20float\2c\20float\29
+1299:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\28SkIRect\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1300:skgpu::ganesh::SurfaceDrawContext::Make\28GrRecordingContext*\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20SkBackingFit\2c\20SkISize\2c\20SkSurfaceProps\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+1301:skgpu::ganesh::SurfaceContext::PixelTransferResult::~PixelTransferResult\28\29
+1302:skgpu::ganesh::ClipStack::SaveRecord::state\28\29\20const
+1303:skgpu::SkSLToGLSL\28SkSL::Compiler*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20SkSL::ProgramKind\2c\20SkSL::ProgramSettings\20const&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20SkSL::Program::Interface*\2c\20skgpu::ShaderErrorHandler*\29
+1304:skcms_Matrix3x3_invert
+1305:sk_doubles_nearly_equal_ulps\28double\2c\20double\2c\20unsigned\20char\29
+1306:ps_parser_to_token
+1307:isspace
+1308:icu_73::UnicodeString::moveIndex32\28int\2c\20int\29\20const
+1309:icu_73::UnicodeString::cloneArrayIfNeeded\28int\2c\20int\2c\20signed\20char\2c\20int**\2c\20signed\20char\29
+1310:icu_73::UnicodeSet::span\28char16_t\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+1311:icu_73::UVector32::UVector32\28UErrorCode&\29
+1312:icu_73::RuleCharacterIterator::next\28int\2c\20signed\20char&\2c\20UErrorCode&\29
+1313:icu_73::ReorderingBuffer::appendBMP\28char16_t\2c\20unsigned\20char\2c\20UErrorCode&\29
+1314:icu_73::ICUServiceKey::prefix\28icu_73::UnicodeString&\29\20const
+1315:icu_73::Edits::addReplace\28int\2c\20int\29
+1316:icu_73::BreakIterator::buildInstance\28icu_73::Locale\20const&\2c\20char\20const*\2c\20UErrorCode&\29
+1317:hb_face_t::load_upem\28\29\20const
+1318:hb_buffer_t::merge_out_clusters\28unsigned\20int\2c\20unsigned\20int\29
+1319:hb_buffer_t::enlarge\28unsigned\20int\29
+1320:hb_buffer_reverse
+1321:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&\29\2c\20void\2c\20SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&\29\2c\20SkCanvas*\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint*\29
+1322:cff_index_init
+1323:cf2_glyphpath_curveTo
+1324:atan2f
+1325:WebPCopyPlane
+1326:SkTypeface::getVariationDesignPosition\28SkFontArguments::VariationPosition::Coordinate*\2c\20int\29\20const
+1327:SkTMaskGamma_build_correcting_lut\28unsigned\20char*\2c\20unsigned\20int\2c\20float\2c\20SkColorSpaceLuminance\20const&\2c\20float\2c\20SkColorSpaceLuminance\20const&\2c\20float\29
+1328:SkSurface_Raster::type\28\29\20const
+1329:SkString::swap\28SkString&\29
+1330:SkString::reset\28\29
+1331:SkSampler::Fill\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::ZeroInitialized\29
+1332:SkSL::Type::MakeTextureType\28char\20const*\2c\20SpvDim_\2c\20bool\2c\20bool\2c\20bool\2c\20SkSL::Type::TextureAccess\29
+1333:SkSL::Type::MakeSpecialType\28char\20const*\2c\20char\20const*\2c\20SkSL::Type::TypeKind\29
+1334:SkSL::RP::Builder::push_slots_or_immutable\28SkSL::RP::SlotRange\2c\20SkSL::RP::BuilderOp\29
+1335:SkSL::RP::Builder::push_clone_from_stack\28SkSL::RP::SlotRange\2c\20int\2c\20int\29
+1336:SkSL::Program::~Program\28\29
+1337:SkSL::PipelineStage::PipelineStageCodeGenerator::writeStatement\28SkSL::Statement\20const&\29
+1338:SkSL::Operator::isAssignment\28\29\20const
+1339:SkSL::InlineCandidateAnalyzer::visitStatement\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>*\2c\20bool\29
+1340:SkSL::GLSLCodeGenerator::writeModifiers\28SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20bool\29
+1341:SkSL::ExpressionStatement::Make\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1342:SkSL::ConstructorCompound::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+1343:SkSL::Analysis::IsTrivialExpression\28SkSL::Expression\20const&\29
+1344:SkSL::Analysis::GetReturnComplexity\28SkSL::FunctionDefinition\20const&\29
+1345:SkSL::AliasType::resolve\28\29\20const
+1346:SkResourceCache::Add\28SkResourceCache::Rec*\2c\20void*\29
+1347:SkRegion::writeToMemory\28void*\29\20const
+1348:SkRasterClip::setRect\28SkIRect\20const&\29
+1349:SkRasterClip::SkRasterClip\28SkRasterClip\20const&\29
+1350:SkPathMeasure::~SkPathMeasure\28\29
+1351:SkPathMeasure::SkPathMeasure\28SkPath\20const&\2c\20bool\2c\20float\29
+1352:SkPath::swap\28SkPath&\29
+1353:SkPaint::setAlphaf\28float\29
+1354:SkOpSpan::computeWindSum\28\29
+1355:SkOpSegment::existing\28double\2c\20SkOpSegment\20const*\29\20const
+1356:SkOpPtT::find\28SkOpSegment\20const*\29\20const
+1357:SkOpCoincidence::addEndMovedSpans\28SkOpSpan\20const*\2c\20SkOpSpanBase\20const*\29
+1358:SkImageInfo::makeColorSpace\28sk_sp<SkColorSpace>\29\20const
+1359:SkImage::refColorSpace\28\29\20const
+1360:SkGlyph::imageSize\28\29\20const
+1361:SkFont::textToGlyphs\28void\20const*\2c\20unsigned\20long\2c\20SkTextEncoding\2c\20unsigned\20short*\2c\20int\29\20const
+1362:SkFont::setSubpixel\28bool\29
+1363:SkDraw::SkDraw\28\29
+1364:SkDevice::onReadPixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+1365:SkChopQuadAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\29
+1366:SkCanvas::topDevice\28\29\20const
+1367:SkBmpCodec::getDstRow\28int\2c\20int\29\20const
+1368:SkAutoDescriptor::SkAutoDescriptor\28\29
+1369:OT::DeltaSetIndexMap::sanitize\28hb_sanitize_context_t*\29\20const
+1370:OT::ClassDef::sanitize\28hb_sanitize_context_t*\29\20const
+1371:GrTriangulator::Comparator::sweep_lt\28SkPoint\20const&\2c\20SkPoint\20const&\29\20const
+1372:GrTextureProxy::textureType\28\29\20const
+1373:GrSurfaceProxy::createSurfaceImpl\28GrResourceProvider*\2c\20int\2c\20skgpu::Renderable\2c\20skgpu::Mipmapped\29\20const
+1374:GrStyledShape::writeUnstyledKey\28unsigned\20int*\29\20const
+1375:GrStyledShape::simplify\28\29
+1376:GrSkSLFP::setInput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1377:GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil\28GrProcessorSet*\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+1378:GrShape::operator=\28GrShape\20const&\29
+1379:GrResourceProvider::createPatternedIndexBuffer\28unsigned\20short\20const*\2c\20int\2c\20int\2c\20int\2c\20skgpu::UniqueKey\20const*\29
+1380:GrRenderTarget::~GrRenderTarget\28\29
+1381:GrRecordingContextPriv::makeSC\28GrSurfaceProxyView\2c\20GrColorInfo\20const&\29
+1382:GrOpFlushState::detachAppliedClip\28\29
+1383:GrMakeCachedBitmapProxyView\28GrRecordingContext*\2c\20SkBitmap\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skgpu::Mipmapped\29
+1384:GrGpuBuffer::map\28\29
+1385:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\28GrGLSLVertexBuilder*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\2c\20char\20const*\29
+1386:GrGLSLShaderBuilder::declAppend\28GrShaderVar\20const&\29
+1387:GrGLGpu::didDrawTo\28GrRenderTarget*\29
+1388:GrGLCompileAndAttachShader\28GrGLContext\20const&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20GrThreadSafePipelineBuilder::Stats*\2c\20skgpu::ShaderErrorHandler*\29
+1389:GrFragmentProcessors::Make\28GrRecordingContext*\2c\20SkColorFilter\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrColorInfo\20const&\2c\20SkSurfaceProps\20const&\29
+1390:GrColorSpaceXformEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrColorInfo\20const&\2c\20GrColorInfo\20const&\29
+1391:GrCaps::validateSurfaceParams\28SkISize\20const&\2c\20GrBackendFormat\20const&\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20GrTextureType\29\20const
+1392:GrBufferAllocPool::putBack\28unsigned\20long\29
+1393:GrBlurUtils::GaussianBlur\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkIRect\2c\20float\2c\20float\2c\20SkTileMode\2c\20SkBackingFit\29::$_0::operator\28\29\28SkIRect\2c\20SkIRect\29\20const
+1394:GrAAConvexTessellator::createInsetRing\28GrAAConvexTessellator::Ring\20const&\2c\20GrAAConvexTessellator::Ring*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29
+1395:FT_Stream_GetByte
+1396:FT_Set_Transform
+1397:FT_Add_Module
+1398:CFF::CFFIndex<OT::IntType<unsigned\20short\2c\202u>>::sanitize\28hb_sanitize_context_t*\29\20const
+1399:AlmostLessOrEqualUlps\28float\2c\20float\29
+1400:ActiveEdge::intersect\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\29\20const
+1401:wrapper_cmp
+1402:void\20std::__2::vector<SkCodecs::Decoder\2c\20std::__2::allocator<SkCodecs::Decoder>>::__push_back_slow_path<SkCodecs::Decoder>\28SkCodecs::Decoder&&\29
+1403:void\20std::__2::reverse\5babi:v160004\5d<char*>\28char*\2c\20char*\29
+1404:void\20std::__2::__hash_table<int\2c\20std::__2::hash<int>\2c\20std::__2::equal_to<int>\2c\20std::__2::allocator<int>>::__do_rehash<true>\28unsigned\20long\29
+1405:utrace_data_73
+1406:utf8_nextCharSafeBody_73
+1407:utext_setup_73
+1408:uhash_puti_73
+1409:uhash_nextElement_73
+1410:ubidi_getParaLevelAtIndex_73
+1411:u_charType_73
+1412:tanf
+1413:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::operator\5b\5d\5babi:v160004\5d\28unsigned\20long\29
+1414:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::capacity\5babi:v160004\5d\28\29\20const
+1415:std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\20std::__2::__pad_and_output\5babi:v160004\5d<wchar_t\2c\20std::__2::char_traits<wchar_t>>\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20std::__2::ios_base&\2c\20wchar_t\29
+1416:std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\20std::__2::__pad_and_output\5babi:v160004\5d<char\2c\20std::__2::char_traits<char>>\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20std::__2::ios_base&\2c\20char\29
+1417:std::__2::char_traits<char>::to_int_type\28char\29
+1418:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__recommend\5babi:v160004\5d\28unsigned\20long\29
+1419:std::__2::basic_ios<char\2c\20std::__2::char_traits<char>>::setstate\5babi:v160004\5d\28unsigned\20int\29
+1420:std::__2::__compressed_pair_elem<void\20\28*\29\28void*\29\2c\201\2c\20false>::__compressed_pair_elem\5babi:v160004\5d<void\20\28*\29\28void*\29\2c\20void>\28void\20\28*&&\29\28void*\29\29
+1421:sktext::StrikeMutationMonitor::~StrikeMutationMonitor\28\29
+1422:sktext::StrikeMutationMonitor::StrikeMutationMonitor\28sktext::StrikeForGPU*\29
+1423:skif::LayerSpace<SkIRect>::contains\28skif::LayerSpace<SkIRect>\20const&\29\20const
+1424:skif::Backend::~Backend\28\29.1
+1425:skia_private::TArray<float\2c\20true>::operator=\28skia_private::TArray<float\2c\20true>&&\29
+1426:skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>::~STArray\28\29
+1427:skia_png_chunk_unknown_handling
+1428:skia::textlayout::TextStyle::TextStyle\28\29
+1429:skia::textlayout::TextLine::iterateThroughSingleRunByStyles\28skia::textlayout::TextLine::TextAdjustment\2c\20skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::StyleType\2c\20std::__2::function<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\20const&\29\20const
+1430:skgpu::ganesh::SurfaceFillContext::internalClear\28SkIRect\20const*\2c\20std::__2::array<float\2c\204ul>\2c\20bool\29
+1431:skgpu::ganesh::SurfaceDrawContext::fillRectToRect\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+1432:res_getTableItemByKey_73
+1433:powf
+1434:icu_73::UnicodeString::operator=\28icu_73::UnicodeString&&\29
+1435:icu_73::UnicodeString::doEquals\28icu_73::UnicodeString\20const&\2c\20int\29\20const
+1436:icu_73::UnicodeSet::ensureCapacity\28int\29
+1437:icu_73::UnicodeSet::clear\28\29
+1438:icu_73::UVector::addElement\28void*\2c\20UErrorCode&\29
+1439:icu_73::UVector32::setElementAt\28int\2c\20int\29
+1440:icu_73::RuleCharacterIterator::setPos\28icu_73::RuleCharacterIterator::Pos\20const&\29
+1441:icu_73::Locale::operator=\28icu_73::Locale\20const&\29
+1442:icu_73::Edits::addUnchanged\28int\29
+1443:icu_73::CharString::extract\28char*\2c\20int\2c\20UErrorCode&\29\20const
+1444:hb_lazy_loader_t<OT::vhea\2c\20hb_table_lazy_loader_t<OT::vhea\2c\2011u\2c\20true>\2c\20hb_face_t\2c\2011u\2c\20hb_blob_t>::get\28\29\20const
+1445:hb_lazy_loader_t<OT::maxp\2c\20hb_table_lazy_loader_t<OT::maxp\2c\202u\2c\20true>\2c\20hb_face_t\2c\202u\2c\20hb_blob_t>::get\28\29\20const
+1446:hb_lazy_loader_t<OT::hhea\2c\20hb_table_lazy_loader_t<OT::hhea\2c\204u\2c\20true>\2c\20hb_face_t\2c\204u\2c\20hb_blob_t>::get\28\29\20const
+1447:hb_font_t::scale_glyph_extents\28hb_glyph_extents_t*\29
+1448:hb_font_t::get_glyph_h_origin_with_fallback\28unsigned\20int\2c\20int*\2c\20int*\29
+1449:hb_buffer_append
+1450:emscripten::internal::MethodInvoker<void\20\28SkFont::*\29\28sk_sp<SkTypeface>\29\2c\20void\2c\20SkFont*\2c\20sk_sp<SkTypeface>>::invoke\28void\20\28SkFont::*\20const&\29\28sk_sp<SkTypeface>\29\2c\20SkFont*\2c\20sk_sp<SkTypeface>*\29
+1451:emscripten::internal::Invoker<unsigned\20long>::invoke\28unsigned\20long\20\28*\29\28\29\29
+1452:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+1453:cos
+1454:cf2_glyphpath_lineTo
+1455:byn$mgfn-shared$SkTDStorage::calculateSizeOrDie\28int\29::$_0::operator\28\29\28\29\20const
+1456:alloc_small
+1457:af_latin_hints_compute_segments
+1458:_hb_glyph_info_set_unicode_props\28hb_glyph_info_t*\2c\20hb_buffer_t*\29
+1459:__lshrti3
+1460:__letf2
+1461:__cxx_global_array_dtor.4
+1462:SkUTF::ToUTF16\28int\2c\20unsigned\20short*\29
+1463:SkTextBlobBuilder::~SkTextBlobBuilder\28\29
+1464:SkTextBlobBuilder::make\28\29
+1465:SkSurface::makeImageSnapshot\28\29
+1466:SkString::insert\28unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29
+1467:SkString::insertUnichar\28unsigned\20long\2c\20int\29
+1468:SkStrikeSpec::findOrCreateScopedStrike\28sktext::StrikeForGPUCacheInterface*\29\20const
+1469:SkSpecialImages::MakeDeferredFromGpu\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20unsigned\20int\2c\20GrSurfaceProxyView\2c\20GrColorInfo\20const&\2c\20SkSurfaceProps\20const&\29
+1470:SkShader::isAImage\28SkMatrix*\2c\20SkTileMode*\29\20const
+1471:SkSL::is_constant_value\28SkSL::Expression\20const&\2c\20double\29
+1472:SkSL::compile_and_shrink\28SkSL::Compiler*\2c\20SkSL::ProgramKind\2c\20char\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkSL::Module\20const*\29
+1473:SkSL::\28anonymous\20namespace\29::ReturnsOnAllPathsVisitor::visitStatement\28SkSL::Statement\20const&\29
+1474:SkSL::Type::isOrContainsAtomic\28\29\20const
+1475:SkSL::Type::MakeScalarType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20SkSL::Type::NumberKind\2c\20signed\20char\2c\20signed\20char\29
+1476:SkSL::RP::Generator::pushBinaryExpression\28SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29
+1477:SkSL::RP::Builder::push_clone\28int\2c\20int\29
+1478:SkSL::ProgramUsage::remove\28SkSL::Statement\20const*\29
+1479:SkSL::Parser::statement\28\29
+1480:SkSL::ModifierFlags::description\28\29\20const
+1481:SkSL::Layout::paddedDescription\28\29\20const
+1482:SkSL::ConstructorCompoundCast::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1483:SkSL::Compiler::~Compiler\28\29
+1484:SkSL::Analysis::IsSameExpressionTree\28SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+1485:SkRect\20skif::Mapping::map<SkRect>\28SkRect\20const&\2c\20SkMatrix\20const&\29
+1486:SkRectPriv::Subtract\28SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkIRect*\29
+1487:SkPictureRecorder::SkPictureRecorder\28\29
+1488:SkPictureData::~SkPictureData\28\29
+1489:SkPathMeasure::nextContour\28\29
+1490:SkPathMeasure::getSegment\28float\2c\20float\2c\20SkPath*\2c\20bool\29
+1491:SkPathMeasure::getPosTan\28float\2c\20SkPoint*\2c\20SkPoint*\29
+1492:SkPathBuilder::lineTo\28SkPoint\29
+1493:SkPath::getPoint\28int\29\20const
+1494:SkPath::getLastPt\28SkPoint*\29\20const
+1495:SkOpSegment::addT\28double\29
+1496:SkNoPixelsDevice::ClipState&\20skia_private::TArray<SkNoPixelsDevice::ClipState\2c\20true>::emplace_back<SkIRect\2c\20bool\2c\20bool>\28SkIRect&&\2c\20bool&&\2c\20bool&&\29
+1497:SkNoDrawCanvas::onDrawImageRect2\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+1498:SkNextID::ImageID\28\29
+1499:SkMessageBus<SkResourceCache::PurgeSharedIDMessage\2c\20unsigned\20int\2c\20true>::Inbox::Inbox\28unsigned\20int\29
+1500:SkMakeImageFromRasterBitmap\28SkBitmap\20const&\2c\20SkCopyPixelsMode\29
+1501:SkImage_Lazy::generator\28\29\20const
+1502:SkImage_Base::~SkImage_Base\28\29
+1503:SkImage_Base::SkImage_Base\28SkImageInfo\20const&\2c\20unsigned\20int\29
+1504:SkFont::getWidthsBounds\28unsigned\20short\20const*\2c\20int\2c\20float*\2c\20SkRect*\2c\20SkPaint\20const*\29\20const
+1505:SkFont::getMetrics\28SkFontMetrics*\29\20const
+1506:SkFont::SkFont\28sk_sp<SkTypeface>\2c\20float\29
+1507:SkFont::SkFont\28\29
+1508:SkDrawBase::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const*\2c\20SkRect\20const*\29\20const
+1509:SkDevice::setGlobalCTM\28SkM44\20const&\29
+1510:SkDescriptor::operator==\28SkDescriptor\20const&\29\20const
+1511:SkConvertPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkImageInfo\20const&\2c\20void\20const*\2c\20unsigned\20long\29
+1512:SkConic::chopAt\28float\2c\20SkConic*\29\20const
+1513:SkColorSpace::gammaIsLinear\28\29\20const
+1514:SkColorSpace::MakeRGB\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+1515:SkCodec::fillIncompleteImage\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::ZeroInitialized\2c\20int\2c\20int\29
+1516:SkCanvas::saveLayer\28SkRect\20const*\2c\20SkPaint\20const*\29
+1517:SkCanvas::drawPaint\28SkPaint\20const&\29
+1518:SkCanvas::ImageSetEntry::~ImageSetEntry\28\29
+1519:SkBulkGlyphMetrics::glyphs\28SkSpan<unsigned\20short\20const>\29
+1520:SkBlendMode_AsCoeff\28SkBlendMode\2c\20SkBlendModeCoeff*\2c\20SkBlendModeCoeff*\29
+1521:SkBitmap::getGenerationID\28\29\20const
+1522:SkArenaAllocWithReset::reset\28\29
+1523:OT::Layout::GPOS_impl::AnchorFormat3::sanitize\28hb_sanitize_context_t*\29\20const
+1524:OT::GDEF::get_glyph_props\28unsigned\20int\29\20const
+1525:OT::CmapSubtable::get_glyph\28unsigned\20int\2c\20unsigned\20int*\29\20const
+1526:Ins_UNKNOWN
+1527:GrTextureEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20GrCaps\20const&\2c\20float\20const*\2c\20bool\29
+1528:GrSurfaceProxyView::mipmapped\28\29\20const
+1529:GrSurfaceProxy::instantiateImpl\28GrResourceProvider*\2c\20int\2c\20skgpu::Renderable\2c\20skgpu::Mipmapped\2c\20skgpu::UniqueKey\20const*\29
+1530:GrSimpleMeshDrawOpHelperWithStencil::isCompatible\28GrSimpleMeshDrawOpHelperWithStencil\20const&\2c\20GrCaps\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20bool\29\20const
+1531:GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\2c\20GrProcessorAnalysisCoverage\2c\20SkRGBA4f<\28SkAlphaType\292>*\2c\20bool*\29
+1532:GrShape::simplifyRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\2c\20unsigned\20int\29
+1533:GrQuad::projectedBounds\28\29\20const
+1534:GrProcessorSet::MakeEmptySet\28\29
+1535:GrPorterDuffXPFactory::SimpleSrcOverXP\28\29
+1536:GrPixmap::Allocate\28GrImageInfo\20const&\29
+1537:GrPathTessellationShader::MakeSimpleTriangleShader\28SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+1538:GrImageInfo::operator=\28GrImageInfo&&\29
+1539:GrImageInfo::makeColorType\28GrColorType\29\20const
+1540:GrGpuResource::setUniqueKey\28skgpu::UniqueKey\20const&\29
+1541:GrGpuResource::release\28\29
+1542:GrGpuResource::isPurgeable\28\29\20const
+1543:GrGeometryProcessor::textureSampler\28int\29\20const
+1544:GrGeometryProcessor::AttributeSet::begin\28\29\20const
+1545:GrGLSLShaderBuilder::addFeature\28unsigned\20int\2c\20char\20const*\29
+1546:GrGLGpu::clearErrorsAndCheckForOOM\28\29
+1547:GrGLGpu::bindSurfaceFBOForPixelOps\28GrSurface*\2c\20int\2c\20unsigned\20int\2c\20GrGLGpu::TempFBOTarget\29
+1548:GrFragmentProcessor::MakeColor\28SkRGBA4f<\28SkAlphaType\292>\29
+1549:GrDirectContextPriv::flushSurfaces\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+1550:GrDefaultGeoProcFactory::Make\28SkArenaAlloc*\2c\20GrDefaultGeoProcFactory::Color\20const&\2c\20GrDefaultGeoProcFactory::Coverage\20const&\2c\20GrDefaultGeoProcFactory::LocalCoords\20const&\2c\20SkMatrix\20const&\29
+1551:GrConvertPixels\28GrPixmap\20const&\2c\20GrCPixmap\20const&\2c\20bool\29
+1552:GrColorSpaceXformEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkColorSpace*\2c\20SkAlphaType\2c\20SkColorSpace*\2c\20SkAlphaType\29
+1553:GrColorInfo::GrColorInfo\28\29
+1554:GrBlurUtils::convolve_gaussian_1d\28skgpu::ganesh::SurfaceFillContext*\2c\20GrSurfaceProxyView\2c\20SkIRect\20const&\2c\20SkIPoint\2c\20SkIRect\20const&\2c\20SkAlphaType\2c\20GrBlurUtils::\28anonymous\20namespace\29::Direction\2c\20int\2c\20float\2c\20SkTileMode\29
+1555:GrBackendTexture::GrBackendTexture\28\29
+1556:GrBackendFormat::operator=\28GrBackendFormat\20const&\29
+1557:FT_Stream_Read
+1558:FT_GlyphLoader_Rewind
+1559:Cr_z_inflate
+1560:CFF::CFFIndex<OT::IntType<unsigned\20int\2c\204u>>::operator\5b\5d\28unsigned\20int\29\20const
+1561:void\20std::__2::__stable_sort<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>\28std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::value_type*\2c\20long\29
+1562:void\20std::__2::__double_or_nothing\5babi:v160004\5d<unsigned\20int>\28std::__2::unique_ptr<unsigned\20int\2c\20void\20\28*\29\28void*\29>&\2c\20unsigned\20int*&\2c\20unsigned\20int*&\29
+1563:void\20icu_73::\28anonymous\20namespace\29::MixedBlocks::extend<unsigned\20short>\28unsigned\20short\20const*\2c\20int\2c\20int\2c\20int\29
+1564:void\20hb_serialize_context_t::add_link<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20true>>\28OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20true>&\2c\20unsigned\20int\2c\20hb_serialize_context_t::whence_t\2c\20unsigned\20int\29
+1565:void\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20bool>::setWire<RuntimeEffectUniform>\28bool\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform&\2c\20bool\29
+1566:utext_nativeLength_73
+1567:ures_getStringByKeyWithFallback_73
+1568:uprv_strnicmp_73
+1569:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+1570:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+1571:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+1572:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+1573:ulocimp_getKeywordValue_73
+1574:ulocimp_getCountry_73\28char\20const*\2c\20char\20const**\2c\20UErrorCode&\29
+1575:uenum_close_73
+1576:udata_getMemory_73
+1577:ucptrie_openFromBinary_73
+1578:u_charsToUChars_73
+1579:toupper
+1580:top12.2
+1581:std::__2::numpunct<wchar_t>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::numpunct<wchar_t>>\28std::__2::locale\20const&\29
+1582:std::__2::numpunct<char>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::numpunct<char>>\28std::__2::locale\20const&\29
+1583:std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot\20\5b\5d>::_EnableIfConvertible<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot>::type\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot\20\5b\5d>::operator\28\29\5babi:v160004\5d<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot>\28skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot*\29\20const
+1584:std::__2::ctype<char>::narrow\5babi:v160004\5d\28char\2c\20char\29\20const
+1585:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::basic_string\5babi:v160004\5d<std::nullptr_t>\28wchar_t\20const*\29
+1586:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__recommend\5babi:v160004\5d\28unsigned\20long\29
+1587:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::setg\5babi:v160004\5d\28char*\2c\20char*\2c\20char*\29
+1588:std::__2::basic_ios<char\2c\20std::__2::char_traits<char>>::~basic_ios\28\29
+1589:std::__2::__num_get<wchar_t>::__stage2_int_loop\28wchar_t\2c\20int\2c\20char*\2c\20char*&\2c\20unsigned\20int&\2c\20wchar_t\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20wchar_t\20const*\29
+1590:std::__2::__num_get<char>::__stage2_int_loop\28char\2c\20int\2c\20char*\2c\20char*&\2c\20unsigned\20int&\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20char\20const*\29
+1591:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<wchar_t>>::pointer>\20std::__2::__allocate_at_least\5babi:v160004\5d<std::__2::allocator<wchar_t>>\28std::__2::allocator<wchar_t>&\2c\20unsigned\20long\29
+1592:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<char>>::pointer>\20std::__2::__allocate_at_least\5babi:v160004\5d<std::__2::allocator<char>>\28std::__2::allocator<char>&\2c\20unsigned\20long\29
+1593:src_p\28unsigned\20char\2c\20unsigned\20char\29
+1594:skia_private::TArray<skif::FilterResult::Builder::SampledFilterResult\2c\20false>::push_back\28skif::FilterResult::Builder::SampledFilterResult&&\29
+1595:skia_private::TArray<float\2c\20true>::operator=\28skia_private::TArray<float\2c\20true>\20const&\29
+1596:skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>&&\29
+1597:skia_png_get_valid
+1598:skia_png_gamma_8bit_correct
+1599:skia_png_free_data
+1600:skia_png_chunk_warning
+1601:skia::textlayout::TextLine::measureTextInsideOneRun\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::Run\20const*\2c\20float\2c\20float\2c\20bool\2c\20skia::textlayout::TextLine::TextAdjustment\29\20const
+1602:skia::textlayout::Run::positionX\28unsigned\20long\29\20const
+1603:skia::textlayout::Run::Run\28skia::textlayout::ParagraphImpl*\2c\20SkShaper::RunHandler::RunInfo\20const&\2c\20unsigned\20long\2c\20float\2c\20bool\2c\20float\2c\20unsigned\20long\2c\20float\29
+1604:skia::textlayout::ParagraphCacheKey::operator==\28skia::textlayout::ParagraphCacheKey\20const&\29\20const
+1605:skia::textlayout::FontCollection::enableFontFallback\28\29
+1606:skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\2c\20skgpu::tess::Required<\28skgpu::tess::PatchAttribs\291>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\294>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\298>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2964>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2932>\2c\20skgpu::tess::ReplicateLineEndPoints\2c\20skgpu::tess::TrackJoinControlPoints>::chopAndWriteCubics\28skvx::Vec<2\2c\20float>\2c\20skvx::Vec<2\2c\20float>\2c\20skvx::Vec<2\2c\20float>\2c\20skvx::Vec<2\2c\20float>\2c\20int\29
+1607:skgpu::ganesh::SmallPathAtlasMgr::reset\28\29
+1608:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::vertexSize\28\29\20const
+1609:skgpu::ganesh::Device::readSurfaceView\28\29
+1610:skgpu::ganesh::ClipStack::clip\28skgpu::ganesh::ClipStack::RawElement&&\29
+1611:skgpu::ganesh::ClipStack::RawElement::contains\28skgpu::ganesh::ClipStack::RawElement\20const&\29\20const
+1612:skgpu::ganesh::ClipStack::RawElement::RawElement\28SkMatrix\20const&\2c\20GrShape\20const&\2c\20GrAA\2c\20SkClipOp\29
+1613:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane&\20skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\2c\20false>::emplace_back<sk_sp<SkData>\2c\20unsigned\20long&>\28sk_sp<SkData>&&\2c\20unsigned\20long&\29
+1614:skgpu::Swizzle::asString\28\29\20const
+1615:skgpu::ScratchKey::GenerateResourceType\28\29
+1616:skgpu::GetBlendFormula\28bool\2c\20bool\2c\20SkBlendMode\29
+1617:select_curve_ops\28skcms_Curve\20const*\2c\20int\2c\20OpAndArg*\29
+1618:sbrk
+1619:ps_tofixedarray
+1620:processPropertySeq\28UBiDi*\2c\20LevState*\2c\20unsigned\20char\2c\20int\2c\20int\29
+1621:png_format_buffer
+1622:png_check_keyword
+1623:nextafterf
+1624:jpeg_huff_decode
+1625:init_entry\28char\20const*\2c\20char\20const*\2c\20UErrorCode*\29
+1626:icu_73::UnicodeString::countChar32\28int\2c\20int\29\20const
+1627:icu_73::UnicodeSet::getRangeStart\28int\29\20const
+1628:icu_73::UnicodeSet::getRangeEnd\28int\29\20const
+1629:icu_73::UnicodeSet::getRangeCount\28\29\20const
+1630:icu_73::UVector::UVector\28void\20\28*\29\28void*\29\2c\20signed\20char\20\28*\29\28UElement\2c\20UElement\29\2c\20int\2c\20UErrorCode&\29
+1631:icu_73::UVector32::addElement\28int\2c\20UErrorCode&\29
+1632:icu_73::UVector32::UVector32\28int\2c\20UErrorCode&\29
+1633:icu_73::UCharsTrie::next\28int\29
+1634:icu_73::UCharsTrie::branchNext\28char16_t\20const*\2c\20int\2c\20int\29
+1635:icu_73::ReorderingBuffer::appendSupplementary\28int\2c\20unsigned\20char\2c\20UErrorCode&\29
+1636:icu_73::Norm2AllModes::createNFCInstance\28UErrorCode&\29
+1637:icu_73::LanguageBreakEngine::LanguageBreakEngine\28\29
+1638:icu_73::CharacterProperties::getInclusionsForProperty\28UProperty\2c\20UErrorCode&\29
+1639:icu_73::CharString::ensureCapacity\28int\2c\20int\2c\20UErrorCode&\29
+1640:hb_unicode_funcs_destroy
+1641:hb_serialize_context_t::pop_discard\28\29
+1642:hb_buffer_set_flags
+1643:hb_blob_create_sub_blob
+1644:hb_array_t<char\20const>::hash\28\29\20const
+1645:hairquad\28SkPoint\20const*\2c\20SkRegion\20const*\2c\20SkRect\20const*\2c\20SkRect\20const*\2c\20SkBlitter*\2c\20int\2c\20void\20\28*\29\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29\29
+1646:haircubic\28SkPoint\20const*\2c\20SkRegion\20const*\2c\20SkRect\20const*\2c\20SkRect\20const*\2c\20SkBlitter*\2c\20int\2c\20void\20\28*\29\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29\29
+1647:fmt_u
+1648:flush_pending
+1649:emscripten::internal::Invoker<sk_sp<GrDirectContext>>::invoke\28sk_sp<GrDirectContext>\20\28*\29\28\29\29
+1650:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\29\2c\20void\2c\20SkPath&>::invoke\28void\20\28**\29\28SkPath&\29\2c\20SkPath*\29
+1651:do_fixed
+1652:destroy_face
+1653:decltype\28fp\28\28SkRecords::NoOp*\29\28nullptr\29\29\29\20SkRecord::Record::mutate<SkRecord::Destroyer&>\28SkRecord::Destroyer&\29
+1654:char*\20const&\20std::__2::max\5babi:v160004\5d<char*>\28char*\20const&\2c\20char*\20const&\29
+1655:cf2_stack_pushInt
+1656:cf2_interpT2CharString
+1657:cf2_glyphpath_moveTo
+1658:byn$mgfn-shared$SkSL::ConstructorArrayCast::clone\28SkSL::Position\29\20const
+1659:byn$mgfn-shared$GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::onMakeProgramImpl\28\29\20const
+1660:bool\20hb_hashmap_t<unsigned\20int\2c\20unsigned\20int\2c\20true>::set_with_hash<unsigned\20int\20const&\2c\20unsigned\20int\20const&>\28unsigned\20int\20const&\2c\20unsigned\20int\2c\20unsigned\20int\20const&\2c\20bool\29
+1661:bool\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20bool>::getWire<RuntimeEffectUniform>\28bool\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform\20const&\29
+1662:_isVariantSubtag\28char\20const*\2c\20int\29
+1663:_hb_ot_metrics_get_position_common\28hb_font_t*\2c\20hb_ot_metrics_tag_t\2c\20int*\29
+1664:_getStringOrCopyKey\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char16_t*\2c\20int\2c\20UErrorCode*\29
+1665:__wasi_syscall_ret
+1666:__tandf
+1667:__syscall_ret
+1668:__floatunsitf
+1669:__cxa_allocate_exception
+1670:\28anonymous\20namespace\29::SkBlurImageFilter::~SkBlurImageFilter\28\29
+1671:\28anonymous\20namespace\29::PathGeoBuilder::createMeshAndPutBackReserve\28\29
+1672:\28anonymous\20namespace\29::MeshOp::fixedFunctionFlags\28\29\20const
+1673:\28anonymous\20namespace\29::DrawAtlasOpImpl::fixedFunctionFlags\28\29\20const
+1674:WebPDemuxGetI
+1675:VP8LDoFillBitWindow
+1676:VP8LClear
+1677:TT_Get_MM_Var
+1678:SkWStream::writeScalar\28float\29
+1679:SkUTF::UTF8ToUTF16\28unsigned\20short*\2c\20int\2c\20char\20const*\2c\20unsigned\20long\29
+1680:SkTSect::BinarySearch\28SkTSect*\2c\20SkTSect*\2c\20SkIntersections*\29
+1681:SkTConic::operator\5b\5d\28int\29\20const
+1682:SkTBlockList<GrShaderVar\2c\201>::reset\28\29
+1683:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\2c\201>::reset\28\29
+1684:SkSurfaces::RenderTarget\28GrRecordingContext*\2c\20skgpu::Budgeted\2c\20SkImageInfo\20const&\2c\20int\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const*\2c\20bool\2c\20bool\29
+1685:SkSurfaceProps::SkSurfaceProps\28unsigned\20int\2c\20SkPixelGeometry\29
+1686:SkString::insertU32\28unsigned\20long\2c\20unsigned\20int\29
+1687:SkSpecialImage::asShader\28SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const&\29\20const
+1688:SkScan::FillRect\28SkRect\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+1689:SkScan::FillIRect\28SkIRect\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+1690:SkSL::optimize_comparison\28SkSL::Context\20const&\2c\20std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20bool\20\28*\29\28double\2c\20double\29\29
+1691:SkSL::Type::convertArraySize\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Position\2c\20long\20long\29\20const
+1692:SkSL::RP::Builder::dot_floats\28int\29
+1693:SkSL::ProgramUsage::get\28SkSL::FunctionDeclaration\20const&\29\20const
+1694:SkSL::Parser::type\28SkSL::Modifiers*\29
+1695:SkSL::Parser::modifiers\28\29
+1696:SkSL::IndexExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1697:SkSL::ConstructorDiagonalMatrix::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1698:SkSL::ConstructorArrayCast::~ConstructorArrayCast\28\29
+1699:SkSL::ConstantFolder::MakeConstantValueForVariable\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1700:SkSL::Block::Make\28SkSL::Position\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>\2c\20SkSL::Block::Kind\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+1701:SkRuntimeEffectPriv::CanDraw\28SkCapabilities\20const*\2c\20SkRuntimeEffect\20const*\29
+1702:SkRegion::setPath\28SkPath\20const&\2c\20SkRegion\20const&\29
+1703:SkRegion::operator=\28SkRegion\20const&\29
+1704:SkRegion::op\28SkRegion\20const&\2c\20SkRegion\20const&\2c\20SkRegion::Op\29
+1705:SkRegion::Iterator::next\28\29
+1706:SkRasterPipeline::compile\28\29\20const
+1707:SkRasterPipeline::append_clamp_if_normalized\28SkImageInfo\20const&\29
+1708:SkRRect::transform\28SkMatrix\20const&\2c\20SkRRect*\29\20const
+1709:SkPictureRecorder::beginRecording\28SkRect\20const&\2c\20SkBBHFactory*\29
+1710:SkPathWriter::finishContour\28\29
+1711:SkPathStroker::cubicPerpRay\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\2c\20SkPoint*\29\20const
+1712:SkPath::getSegmentMasks\28\29\20const
+1713:SkPath::addRRect\28SkRRect\20const&\2c\20SkPathDirection\29
+1714:SkPaintPriv::ComputeLuminanceColor\28SkPaint\20const&\29
+1715:SkPaint::setBlender\28sk_sp<SkBlender>\29
+1716:SkPaint::isSrcOver\28\29\20const
+1717:SkOpAngle::linesOnOriginalSide\28SkOpAngle\20const*\29
+1718:SkNotifyBitmapGenIDIsStale\28unsigned\20int\29
+1719:SkMipmap::Build\28SkPixmap\20const&\2c\20SkDiscardableMemory*\20\28*\29\28unsigned\20long\29\2c\20bool\29
+1720:SkMeshSpecification::~SkMeshSpecification\28\29
+1721:SkMatrix::setSinCos\28float\2c\20float\2c\20float\2c\20float\29
+1722:SkMatrix::setRSXform\28SkRSXform\20const&\29
+1723:SkMatrix::mapHomogeneousPoints\28SkPoint3*\2c\20SkPoint3\20const*\2c\20int\29\20const
+1724:SkMatrix::decomposeScale\28SkSize*\2c\20SkMatrix*\29\20const
+1725:SkMaskFilterBase::getFlattenableType\28\29\20const
+1726:SkMaskBuilder::AllocImage\28unsigned\20long\2c\20SkMaskBuilder::AllocType\29
+1727:SkIntersections::insertNear\28double\2c\20double\2c\20SkDPoint\20const&\2c\20SkDPoint\20const&\29
+1728:SkIntersections::flip\28\29
+1729:SkImageInfo::Make\28SkISize\2c\20SkColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+1730:SkImageFilter_Base::~SkImageFilter_Base\28\29
+1731:SkImage::isAlphaOnly\28\29\20const
+1732:SkGlyph::drawable\28\29\20const
+1733:SkFont::unicharToGlyph\28int\29\20const
+1734:SkFont::setHinting\28SkFontHinting\29
+1735:SkFindQuadMaxCurvature\28SkPoint\20const*\29
+1736:SkEvalCubicAt\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\2c\20SkPoint*\29
+1737:SkDrawTiler::stepAndSetupTileDraw\28\29
+1738:SkDrawTiler::SkDrawTiler\28SkBitmapDevice*\2c\20SkRect\20const*\29
+1739:SkDevice::accessPixels\28SkPixmap*\29
+1740:SkDeque::SkDeque\28unsigned\20long\2c\20void*\2c\20unsigned\20long\2c\20int\29
+1741:SkDCubic::FindExtrema\28double\20const*\2c\20double*\29
+1742:SkColorFilters::Blend\28unsigned\20int\2c\20SkBlendMode\29
+1743:SkCanvas::internalRestore\28\29
+1744:SkCanvas::init\28sk_sp<SkDevice>\29
+1745:SkCanvas::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+1746:SkCanvas::clipRect\28SkRect\20const&\2c\20SkClipOp\2c\20bool\29
+1747:SkBitmap::operator=\28SkBitmap&&\29
+1748:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\28\29
+1749:SkAAClip::SkAAClip\28\29
+1750:OT::glyf_accelerator_t::glyf_accelerator_t\28hb_face_t*\29
+1751:OT::VariationStore::sanitize\28hb_sanitize_context_t*\29\20const
+1752:OT::Layout::GPOS_impl::ValueFormat::sanitize_value_devices\28hb_sanitize_context_t*\2c\20void\20const*\2c\20OT::IntType<unsigned\20short\2c\202u>\20const*\29\20const
+1753:OT::Layout::GPOS_impl::ValueFormat::apply_value\28OT::hb_ot_apply_context_t*\2c\20void\20const*\2c\20OT::IntType<unsigned\20short\2c\202u>\20const*\2c\20hb_glyph_position_t&\29\20const
+1754:OT::HVARVVAR::sanitize\28hb_sanitize_context_t*\29\20const
+1755:GrTriangulator::VertexList::insert\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\29
+1756:GrTriangulator::Poly::addEdge\28GrTriangulator::Edge*\2c\20GrTriangulator::Side\2c\20GrTriangulator*\29
+1757:GrTriangulator::EdgeList::remove\28GrTriangulator::Edge*\29
+1758:GrSurfaceProxyView::Copy\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20skgpu::Mipmapped\2c\20SkIRect\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1759:GrSurfaceProxy::isFunctionallyExact\28\29\20const
+1760:GrStyledShape::operator=\28GrStyledShape\20const&\29
+1761:GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrGeometryProcessor*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+1762:GrResourceCache::purgeAsNeeded\28\29
+1763:GrRenderTask::addDependency\28GrDrawingManager*\2c\20GrSurfaceProxy*\2c\20skgpu::Mipmapped\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29
+1764:GrRenderTask::GrRenderTask\28\29
+1765:GrRenderTarget::onRelease\28\29
+1766:GrProxyProvider::findOrCreateProxyByUniqueKey\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxy::UseAllocator\29
+1767:GrProcessorSet::operator==\28GrProcessorSet\20const&\29\20const
+1768:GrPathUtils::generateQuadraticPoints\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20SkPoint**\2c\20unsigned\20int\29
+1769:GrMeshDrawOp::QuadHelper::QuadHelper\28GrMeshDrawTarget*\2c\20unsigned\20long\2c\20int\29
+1770:GrIsStrokeHairlineOrEquivalent\28GrStyle\20const&\2c\20SkMatrix\20const&\2c\20float*\29
+1771:GrImageContext::abandoned\28\29
+1772:GrGpuResource::registerWithCache\28skgpu::Budgeted\29
+1773:GrGpuBuffer::isMapped\28\29\20const
+1774:GrGpu::submitToGpu\28GrSyncCpu\29
+1775:GrGpu::didWriteToSurface\28GrSurface*\2c\20GrSurfaceOrigin\2c\20SkIRect\20const*\2c\20unsigned\20int\29\20const
+1776:GrGeometryProcessor::ProgramImpl::setupUniformColor\28GrGLSLFPFragmentBuilder*\2c\20GrGLSLUniformHandler*\2c\20char\20const*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+1777:GrGLGpu::flushRenderTarget\28GrGLRenderTarget*\2c\20bool\29
+1778:GrFragmentProcessor::visitTextureEffects\28std::__2::function<void\20\28GrTextureEffect\20const&\29>\20const&\29\20const
+1779:GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+1780:GrCpuBuffer::ref\28\29\20const
+1781:GrBufferAllocPool::makeSpace\28unsigned\20long\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+1782:GrBackendTextures::GetGLTextureInfo\28GrBackendTexture\20const&\2c\20GrGLTextureInfo*\29
+1783:FilterLoop26_C
+1784:FT_Vector_Transform
+1785:FT_Vector_NormLen
+1786:FT_Outline_Transform
+1787:FT_Done_Face
+1788:CFF::dict_opset_t::process_op\28unsigned\20int\2c\20CFF::interp_env_t<CFF::number_t>&\29
+1789:AlmostBetweenUlps\28float\2c\20float\2c\20float\29
+1790:void\20std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__emplace_back_slow_path<skia::textlayout::OneLineShaper::RunBlock&>\28skia::textlayout::OneLineShaper::RunBlock&\29
+1791:utext_openUChars_73
+1792:utext_char32At_73
+1793:ures_openWithType\28UResourceBundle*\2c\20char\20const*\2c\20char\20const*\2c\20UResOpenType\2c\20UErrorCode*\29
+1794:ures_openDirect_73
+1795:ures_getSize_73
+1796:uprv_min_73
+1797:uloc_forLanguageTag_73
+1798:uhash_openSize_73
+1799:udata_openChoice_73
+1800:ucptrie_internalSmallU8Index_73
+1801:ucptrie_get_73
+1802:ubidi_getMemory_73
+1803:ubidi_getClass_73
+1804:transform\28unsigned\20int*\2c\20unsigned\20char\20const*\29
+1805:toUpperOrTitle\28int\2c\20int\20\28*\29\28void*\2c\20signed\20char\29\2c\20void*\2c\20char16_t\20const**\2c\20int\2c\20signed\20char\29
+1806:strtod
+1807:strcspn
+1808:std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>::__append\28unsigned\20long\29
+1809:std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20SkSL::coalesce_pairwise_vectors<float>\28std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20double\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\2c\20double\20\28*\29\28double\29\29
+1810:std::__2::locale::locale\28std::__2::locale\20const&\29
+1811:std::__2::locale::classic\28\29
+1812:std::__2::codecvt<char\2c\20char\2c\20__mbstate_t>::do_unshift\28__mbstate_t&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+1813:std::__2::chrono::__libcpp_steady_clock_now\28\29
+1814:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__grow_by_and_replace\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20char\20const*\29
+1815:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__fits_in_sso\5babi:v160004\5d\28unsigned\20long\29
+1816:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::~basic_streambuf\28\29
+1817:std::__2::__wrap_iter<wchar_t*>::operator++\5babi:v160004\5d\28\29
+1818:std::__2::__wrap_iter<float*>\20std::__2::vector<float\2c\20std::__2::allocator<float>>::insert<float\20const*\2c\200>\28std::__2::__wrap_iter<float\20const*>\2c\20float\20const*\2c\20float\20const*\29
+1819:std::__2::__wrap_iter<char*>::operator++\5babi:v160004\5d\28\29
+1820:std::__2::__throw_bad_variant_access\5babi:v160004\5d\28\29
+1821:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_front\28skia::textlayout::OneLineShaper::RunBlock*&&\29
+1822:std::__2::__shared_count::__release_shared\5babi:v160004\5d\28\29
+1823:std::__2::__num_get<wchar_t>::__stage2_int_prep\28std::__2::ios_base&\2c\20wchar_t&\29
+1824:std::__2::__num_get<wchar_t>::__do_widen\28std::__2::ios_base&\2c\20wchar_t*\29\20const
+1825:std::__2::__num_get<char>::__stage2_int_prep\28std::__2::ios_base&\2c\20char&\29
+1826:std::__2::__itoa::__append1\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+1827:sktext::gpu::VertexFiller::vertexStride\28SkMatrix\20const&\29\20const
+1828:skif::\28anonymous\20namespace\29::AutoSurface::AutoSurface\28skif::Context\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20bool\2c\20SkSurfaceProps\20const*\29
+1829:skif::Mapping::adjustLayerSpace\28SkMatrix\20const&\29
+1830:skif::LayerSpace<SkSize>::round\28\29\20const
+1831:skif::FilterResult::analyzeBounds\28SkMatrix\20const&\2c\20SkIRect\20const&\2c\20bool\29\20const
+1832:skia_private::THashTable<skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair\2c\20SkSL::Type\20const*\2c\20skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair&&\29
+1833:skia_private::THashTable<GrGpuResource*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrGpuResource\2c\20skgpu::UniqueKey\2c\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::remove\28skgpu::UniqueKey\20const&\29
+1834:skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\2c\20true>::operator=\28skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\2c\20true>&&\29
+1835:skia_private::TArray<SkCanvas::Lattice::RectType\2c\20true>::push_back_raw\28int\29
+1836:skia_png_sig_cmp
+1837:skia_png_set_progressive_read_fn
+1838:skia_png_set_longjmp_fn
+1839:skia_png_set_interlace_handling
+1840:skia_png_reciprocal
+1841:skia_png_read_chunk_header
+1842:skia_png_get_io_ptr
+1843:skia_png_calloc
+1844:skia::textlayout::TextLine::~TextLine\28\29
+1845:skia::textlayout::ParagraphStyle::ParagraphStyle\28skia::textlayout::ParagraphStyle\20const&\29
+1846:skia::textlayout::ParagraphCacheKey::~ParagraphCacheKey\28\29
+1847:skia::textlayout::FontCollection::findTypefaces\28std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>\20const&\2c\20SkFontStyle\2c\20std::__2::optional<skia::textlayout::FontArguments>\20const&\29
+1848:skia::textlayout::Cluster::trimmedWidth\28unsigned\20long\29\20const
+1849:skgpu::ganesh::TextureOp::BatchSizeLimiter::createOp\28GrTextureSetEntry*\2c\20int\2c\20GrAAType\29
+1850:skgpu::ganesh::SurfaceFillContext::fillWithFP\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1851:skgpu::ganesh::SurfaceDrawContext::drawShapeUsingPathRenderer\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20GrStyledShape&&\2c\20bool\29
+1852:skgpu::ganesh::SurfaceDrawContext::drawRect\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrStyle\20const*\29
+1853:skgpu::ganesh::SurfaceDrawContext::drawRRect\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20GrStyle\20const&\29
+1854:skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29
+1855:skgpu::ganesh::QuadPerEdgeAA::CalcIndexBufferOption\28GrAAType\2c\20int\29
+1856:skgpu::ganesh::LockTextureProxyView\28GrRecordingContext*\2c\20SkImage_Lazy\20const*\2c\20GrImageTexGenPolicy\2c\20skgpu::Mipmapped\29::$_0::operator\28\29\28GrSurfaceProxyView\20const&\29\20const
+1857:skgpu::ganesh::Device::targetProxy\28\29
+1858:skgpu::ganesh::ClipStack::getConservativeBounds\28\29\20const
+1859:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::addTransferResult\28skgpu::ganesh::SurfaceContext::PixelTransferResult\20const&\2c\20SkISize\2c\20unsigned\20long\2c\20skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>*\29
+1860:skgpu::Plot::resetRects\28\29
+1861:skcms_TransferFunction_isPQish
+1862:skcms_TransferFunction_invert
+1863:skcms_Matrix3x3_concat
+1864:ps_dimension_add_t1stem
+1865:log2f
+1866:log
+1867:jcopy_sample_rows
+1868:icu_73::initSingletons\28char\20const*\2c\20UErrorCode&\29
+1869:icu_73::\28anonymous\20namespace\29::AliasReplacer::replaceLanguage\28bool\2c\20bool\2c\20bool\2c\20icu_73::UVector&\2c\20UErrorCode&\29
+1870:icu_73::UnicodeString::append\28int\29
+1871:icu_73::UnicodeSetStringSpan::UnicodeSetStringSpan\28icu_73::UnicodeSet\20const&\2c\20icu_73::UVector\20const&\2c\20unsigned\20int\29
+1872:icu_73::UnicodeSet::spanUTF8\28char\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+1873:icu_73::UnicodeSet::spanBack\28char16_t\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+1874:icu_73::UnicodeSet::spanBackUTF8\28char\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+1875:icu_73::UnicodeSet::retain\28int\20const*\2c\20int\2c\20signed\20char\29
+1876:icu_73::UnicodeSet::removeAllStrings\28\29
+1877:icu_73::UnicodeSet::operator=\28icu_73::UnicodeSet\20const&\29
+1878:icu_73::UnicodeSet::complement\28\29
+1879:icu_73::UnicodeSet::_add\28icu_73::UnicodeString\20const&\29
+1880:icu_73::UVector::indexOf\28void*\2c\20int\29\20const
+1881:icu_73::UVector::UVector\28void\20\28*\29\28void*\29\2c\20signed\20char\20\28*\29\28UElement\2c\20UElement\29\2c\20UErrorCode&\29
+1882:icu_73::UCharsTrieBuilder::write\28char16_t\20const*\2c\20int\29
+1883:icu_73::StringEnumeration::~StringEnumeration\28\29
+1884:icu_73::StackUResourceBundle::StackUResourceBundle\28\29
+1885:icu_73::RuleCharacterIterator::getPos\28icu_73::RuleCharacterIterator::Pos&\29\20const
+1886:icu_73::RuleBasedBreakIterator::BreakCache::populatePreceding\28UErrorCode&\29
+1887:icu_73::ReorderingBuffer::previousCC\28\29
+1888:icu_73::Normalizer2Impl::compose\28char16_t\20const*\2c\20char16_t\20const*\2c\20signed\20char\2c\20signed\20char\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+1889:icu_73::Normalizer2Factory::getNFCImpl\28UErrorCode&\29
+1890:icu_73::LocaleUtility::initLocaleFromName\28icu_73::UnicodeString\20const&\2c\20icu_73::Locale&\29
+1891:icu_73::LocaleKeyFactory::~LocaleKeyFactory\28\29
+1892:icu_73::Locale::setToBogus\28\29
+1893:icu_73::CheckedArrayByteSink::CheckedArrayByteSink\28char*\2c\20int\29
+1894:icu_73::BreakIterator::createInstance\28icu_73::Locale\20const&\2c\20int\2c\20UErrorCode&\29
+1895:hb_font_t::has_func\28unsigned\20int\29
+1896:hb_buffer_create_similar
+1897:ft_service_list_lookup
+1898:fseek
+1899:fiprintf
+1900:fflush
+1901:expm1
+1902:emscripten::internal::MethodInvoker<void\20\28GrDirectContext::*\29\28\29\2c\20void\2c\20GrDirectContext*>::invoke\28void\20\28GrDirectContext::*\20const&\29\28\29\2c\20GrDirectContext*\29
+1903:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+1904:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28SkFont&\29\2c\20emscripten::val\2c\20SkFont&>::invoke\28emscripten::val\20\28**\29\28SkFont&\29\2c\20SkFont*\29
+1905:do_putc
+1906:crc32_z
+1907:cf2_hintmap_insertHint
+1908:cf2_hintmap_build
+1909:cf2_glyphpath_pushPrevElem
+1910:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+1911:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+1912:byn$mgfn-shared$skif::\28anonymous\20namespace\29::RasterBackend::~RasterBackend\28\29
+1913:byn$mgfn-shared$skif::Backend::~Backend\28\29.1
+1914:byn$mgfn-shared$skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+1915:append_multitexture_lookup\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20int\2c\20GrGLSLVarying\20const&\2c\20char\20const*\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+1916:afm_stream_read_one
+1917:af_latin_hints_link_segments
+1918:af_latin_compute_stem_width
+1919:af_glyph_hints_reload
+1920:acosf
+1921:__sin
+1922:__cos
+1923:\28anonymous\20namespace\29::PathSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+1924:VP8LHuffmanTablesDeallocate
+1925:UDataMemory_createNewInstance_73
+1926:SkWriter32::writeSampling\28SkSamplingOptions\20const&\29
+1927:SkVertices::Builder::detach\28\29
+1928:SkTypeface_FreeType::~SkTypeface_FreeType\28\29
+1929:SkTypeface_FreeType::FaceRec::~FaceRec\28\29
+1930:SkTypeface::SkTypeface\28SkFontStyle\20const&\2c\20bool\29
+1931:SkTypeface::GetDefaultTypeface\28SkTypeface::Style\29
+1932:SkTreatAsSprite\28SkMatrix\20const&\2c\20SkISize\20const&\2c\20SkSamplingOptions\20const&\2c\20bool\29
+1933:SkTextBlobBuilder::TightRunBounds\28SkTextBlob::RunRecord\20const&\29
+1934:SkTextBlob::RunRecord::textSizePtr\28\29\20const
+1935:SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::remove\28skgpu::ScratchKey\20const&\2c\20GrGpuResource\20const*\29
+1936:SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::insert\28skgpu::ScratchKey\20const&\2c\20GrGpuResource*\29
+1937:SkTDStorage::insert\28int\2c\20int\2c\20void\20const*\29
+1938:SkTDPQueue<\28anonymous\20namespace\29::RunIteratorQueue::Entry\2c\20&\28anonymous\20namespace\29::RunIteratorQueue::CompareEntry\28\28anonymous\20namespace\29::RunIteratorQueue::Entry\20const&\2c\20\28anonymous\20namespace\29::RunIteratorQueue::Entry\20const&\29\2c\20\28int*\20\28*\29\28\28anonymous\20namespace\29::RunIteratorQueue::Entry\20const&\29\290>::insert\28\28anonymous\20namespace\29::RunIteratorQueue::Entry\29
+1939:SkSwizzler::Make\28SkEncodedInfo\20const&\2c\20unsigned\20int\20const*\2c\20SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20SkIRect\20const*\29
+1940:SkSurface_Base::~SkSurface_Base\28\29
+1941:SkSurface::recordingContext\28\29\20const
+1942:SkString::resize\28unsigned\20long\29
+1943:SkStrikeSpec::SkStrikeSpec\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\29
+1944:SkStrikeSpec::MakeMask\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\29
+1945:SkStrikeSpec::MakeCanonicalized\28SkFont\20const&\2c\20SkPaint\20const*\29
+1946:SkStrikeCache::findOrCreateStrike\28SkStrikeSpec\20const&\29
+1947:SkSpecialImages::MakeFromRaster\28SkIRect\20const&\2c\20SkBitmap\20const&\2c\20SkSurfaceProps\20const&\29
+1948:SkShaders::MatrixRec::applyForFragmentProcessor\28SkMatrix\20const&\29\20const
+1949:SkShaders::MatrixRec::MatrixRec\28SkMatrix\20const&\29
+1950:SkShaders::Blend\28SkBlendMode\2c\20sk_sp<SkShader>\2c\20sk_sp<SkShader>\29
+1951:SkScan::FillPath\28SkPath\20const&\2c\20SkRegion\20const&\2c\20SkBlitter*\29
+1952:SkScalerContext_FreeType::emboldenIfNeeded\28FT_FaceRec_*\2c\20FT_GlyphSlotRec_*\2c\20unsigned\20short\29
+1953:SkSL::is_or_contains_array\28SkSL::Type\20const*\2c\20bool\29
+1954:SkSL::Type::isOrContainsArray\28\29\20const
+1955:SkSL::Type::displayName\28\29\20const
+1956:SkSL::Type::checkForOutOfRangeLiteral\28SkSL::Context\20const&\2c\20double\2c\20SkSL::Position\29\20const
+1957:SkSL::ThreadContext::SetErrorReporter\28SkSL::ErrorReporter*\29
+1958:SkSL::ThreadContext::RTAdjustState\28\29
+1959:SkSL::String::Separator\28\29::Output::~Output\28\29
+1960:SkSL::RP::SlotManager::addSlotDebugInfoForGroup\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Position\2c\20int*\2c\20bool\29
+1961:SkSL::RP::Generator::foldComparisonOp\28SkSL::Operator\2c\20int\29
+1962:SkSL::RP::Builder::branch_if_no_lanes_active\28int\29
+1963:SkSL::PrefixExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Operator\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1964:SkSL::PipelineStage::PipelineStageCodeGenerator::typedVariable\28SkSL::Type\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1965:SkSL::Parser::parseArrayDimensions\28SkSL::Position\2c\20SkSL::Type\20const**\29
+1966:SkSL::Parser::arraySize\28long\20long*\29
+1967:SkSL::Operator::operatorName\28\29\20const
+1968:SkSL::ModifierFlags::paddedDescription\28\29\20const
+1969:SkSL::ConstantFolder::GetConstantValue\28SkSL::Expression\20const&\2c\20double*\29
+1970:SkSL::ConstantFolder::GetConstantInt\28SkSL::Expression\20const&\2c\20long\20long*\29
+1971:SkSL::Compiler::Compiler\28SkSL::ShaderCaps\20const*\29
+1972:SkSL::BinaryExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Operator\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Type\20const*\29
+1973:SkRuntimeEffect::findChild\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+1974:SkResourceCache::remove\28SkResourceCache::Rec*\29
+1975:SkRegion::op\28SkRegion\20const&\2c\20SkIRect\20const&\2c\20SkRegion::Op\29
+1976:SkRegion::Iterator::Iterator\28SkRegion\20const&\29
+1977:SkRecords::FillBounds::bounds\28SkRecords::DrawArc\20const&\29\20const
+1978:SkReadBuffer::setMemory\28void\20const*\2c\20unsigned\20long\29
+1979:SkRasterClip::SkRasterClip\28SkIRect\20const&\29
+1980:SkRRect::writeToMemory\28void*\29\20const
+1981:SkRRect::setRectXY\28SkRect\20const&\2c\20float\2c\20float\29
+1982:SkPointPriv::DistanceToLineBetweenSqd\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPointPriv::Side*\29
+1983:SkPoint::setNormalize\28float\2c\20float\29
+1984:SkPictureRecorder::finishRecordingAsPicture\28\29
+1985:SkPathPriv::ComputeFirstDirection\28SkPath\20const&\29
+1986:SkPathEffect::asADash\28SkPathEffect::DashInfo*\29\20const
+1987:SkPathEdgeIter::SkPathEdgeIter\28SkPath\20const&\29
+1988:SkPath::rewind\28\29
+1989:SkPath::isLine\28SkPoint*\29\20const
+1990:SkPath::incReserve\28int\29
+1991:SkPath::addOval\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1992:SkPaint::setStrokeCap\28SkPaint::Cap\29
+1993:SkPaint::refShader\28\29\20const
+1994:SkPaint::nothingToDraw\28\29\20const
+1995:SkOpSpan::setWindSum\28int\29
+1996:SkOpSegment::markAndChaseWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20int\2c\20int\2c\20SkOpSpanBase**\29
+1997:SkOpContourBuilder::addCurve\28SkPath::Verb\2c\20SkPoint\20const*\2c\20float\29
+1998:SkOpAngle::starter\28\29
+1999:SkOpAngle::insert\28SkOpAngle*\29
+2000:SkNoDrawCanvas::onDrawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+2001:SkNoDestructor<SkSL::String::Separator\28\29::Output>::SkNoDestructor\28SkSL::String::Separator\28\29::Output&&\29
+2002:SkMatrix::setSinCos\28float\2c\20float\29
+2003:SkMaskFilter::MakeBlur\28SkBlurStyle\2c\20float\2c\20bool\29
+2004:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29
+2005:SkLineClipper::IntersectLine\28SkPoint\20const*\2c\20SkRect\20const&\2c\20SkPoint*\29
+2006:SkImage_GaneshBase::SkImage_GaneshBase\28sk_sp<GrImageContext>\2c\20SkImageInfo\2c\20unsigned\20int\29
+2007:SkImageFilters::Blend\28SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+2008:SkImage::makeShader\28SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const&\29\20const
+2009:SkImage::makeRasterImage\28GrDirectContext*\2c\20SkImage::CachingHint\29\20const
+2010:SkIDChangeListener::SkIDChangeListener\28\29
+2011:SkIDChangeListener::List::reset\28\29
+2012:SkGradientBaseShader::flatten\28SkWriteBuffer&\29\20const
+2013:SkFontMgr::RefDefault\28\29
+2014:SkFont::setEdging\28SkFont::Edging\29
+2015:SkEvalQuadAt\28SkPoint\20const*\2c\20float\29
+2016:SkEdgeClipper::next\28SkPoint*\29
+2017:SkDevice::scalerContextFlags\28\29\20const
+2018:SkConic::evalAt\28float\2c\20SkPoint*\2c\20SkPoint*\29\20const
+2019:SkColorTypeBytesPerPixel\28SkColorType\29
+2020:SkColorInfo::SkColorInfo\28SkColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+2021:SkCodec::skipScanlines\28int\29
+2022:SkCodec::getPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const*\29
+2023:SkChopCubicAtHalf\28SkPoint\20const*\2c\20SkPoint*\29
+2024:SkCapabilities::RasterBackend\28\29
+2025:SkCanvas::saveLayer\28SkCanvas::SaveLayerRec\20const&\29
+2026:SkCanvas::restore\28\29
+2027:SkCanvas::imageInfo\28\29\20const
+2028:SkCanvas::drawTextBlob\28SkTextBlob\20const*\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+2029:SkCanvas::drawDrawable\28SkDrawable*\2c\20SkMatrix\20const*\29
+2030:SkCanvas::clipPath\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29
+2031:SkBmpBaseCodec::~SkBmpBaseCodec\28\29
+2032:SkBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+2033:SkBlendMode\20SkReadBuffer::read32LE<SkBlendMode>\28SkBlendMode\29
+2034:SkBitmap::operator=\28SkBitmap\20const&\29
+2035:SkBitmap::extractSubset\28SkBitmap*\2c\20SkIRect\20const&\29\20const
+2036:SkBinaryWriteBuffer::writeByteArray\28void\20const*\2c\20unsigned\20long\29
+2037:SkBinaryWriteBuffer::SkBinaryWriteBuffer\28SkSerialProcs\20const&\29
+2038:SkBaseShadowTessellator::handleLine\28SkPoint\20const&\29
+2039:SkAutoPixmapStorage::tryAlloc\28SkImageInfo\20const&\29
+2040:SkAutoDescriptor::~SkAutoDescriptor\28\29
+2041:SkAAClip::setRegion\28SkRegion\20const&\29
+2042:R
+2043:OT::hb_ot_apply_context_t::_set_glyph_class\28unsigned\20int\2c\20unsigned\20int\2c\20bool\2c\20bool\29
+2044:OT::cmap::find_subtable\28unsigned\20int\2c\20unsigned\20int\29\20const
+2045:GrXPFactory::FromBlendMode\28SkBlendMode\29
+2046:GrTriangulator::setBottom\28GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+2047:GrTriangulator::mergeCollinearEdges\28GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+2048:GrTriangulator::Edge::disconnect\28\29
+2049:GrThreadSafeCache::find\28skgpu::UniqueKey\20const&\29
+2050:GrThreadSafeCache::add\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&\29
+2051:GrThreadSafeCache::Entry::makeEmpty\28\29
+2052:GrSurfaceProxyView::operator==\28GrSurfaceProxyView\20const&\29\20const
+2053:GrSurfaceProxyPriv::doLazyInstantiation\28GrResourceProvider*\29
+2054:GrSurfaceProxy::Copy\28GrRecordingContext*\2c\20sk_sp<GrSurfaceProxy>\2c\20GrSurfaceOrigin\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20sk_sp<GrRenderTask>*\29
+2055:GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags\28\29\20const
+2056:GrSimpleMeshDrawOpHelper::finalizeProcessors\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrUserStencilSettings\20const*\2c\20GrClampType\2c\20GrProcessorAnalysisCoverage\2c\20GrProcessorAnalysisColor*\29
+2057:GrSimpleMeshDrawOpHelper::CreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrGeometryProcessor*\2c\20GrProcessorSet&&\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\2c\20GrPipeline::InputFlags\2c\20GrUserStencilSettings\20const*\29
+2058:GrSimpleMeshDrawOpHelper::CreatePipeline\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20skgpu::Swizzle\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrProcessorSet&&\2c\20GrPipeline::InputFlags\29
+2059:GrResourceProvider::findOrMakeStaticBuffer\28GrGpuBufferType\2c\20unsigned\20long\2c\20void\20const*\2c\20skgpu::UniqueKey\20const&\29
+2060:GrResourceProvider::findOrMakeStaticBuffer\28GrGpuBufferType\2c\20unsigned\20long\2c\20skgpu::UniqueKey\20const&\2c\20void\20\28*\29\28skgpu::VertexWriter\2c\20unsigned\20long\29\29
+2061:GrResourceProvider::MakeApprox\28SkISize\29
+2062:GrResourceCache::findAndRefScratchResource\28skgpu::ScratchKey\20const&\29
+2063:GrRecordingContextPriv::makeSFC\28GrImageInfo\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkBackingFit\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+2064:GrQuadUtils::TessellationHelper::Vertices::moveAlong\28GrQuadUtils::TessellationHelper::EdgeVectors\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\29
+2065:GrQuad::asRect\28SkRect*\29\20const
+2066:GrProcessorSet::GrProcessorSet\28GrProcessorSet&&\29
+2067:GrPathUtils::generateCubicPoints\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20SkPoint**\2c\20unsigned\20int\29
+2068:GrGpu::createBuffer\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\29
+2069:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\2c\20char\20const*\2c\20SkMatrix\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+2070:GrGLTexture::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+2071:GrGLSLColorSpaceXformHelper::emitCode\28GrGLSLUniformHandler*\2c\20GrColorSpaceXform\20const*\2c\20unsigned\20int\29
+2072:GrGLRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+2073:GrGLRenderTarget::bindInternal\28unsigned\20int\2c\20bool\29
+2074:GrGLGpu::getErrorAndCheckForOOM\28\29
+2075:GrGLGpu::bindTexture\28int\2c\20GrSamplerState\2c\20skgpu::Swizzle\20const&\2c\20GrGLTexture*\29
+2076:GrFragmentProcessors::Make\28SkShader\20const*\2c\20GrFPArgs\20const&\2c\20SkMatrix\20const&\29
+2077:GrFragmentProcessor::visitWithImpls\28std::__2::function<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\20const
+2078:GrFragmentProcessor::ColorMatrix\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20float\20const*\2c\20bool\2c\20bool\2c\20bool\29
+2079:GrDrawingManager::appendTask\28sk_sp<GrRenderTask>\29
+2080:GrColorInfo::GrColorInfo\28GrColorInfo\20const&\29
+2081:GrCaps::isFormatCompressed\28GrBackendFormat\20const&\29\20const
+2082:GrAAConvexTessellator::lineTo\28SkPoint\20const&\2c\20GrAAConvexTessellator::CurveState\29
+2083:FT_Select_Metrics
+2084:FT_Select_Charmap
+2085:FT_Get_Next_Char
+2086:FT_Get_Module_Interface
+2087:FT_Done_Size
+2088:DecodeImageStream
+2089:CFF::opset_t<CFF::number_t>::process_op\28unsigned\20int\2c\20CFF::interp_env_t<CFF::number_t>&\29
+2090:CFF::Charset::get_glyph\28unsigned\20int\2c\20unsigned\20int\29\20const
+2091:wuffs_gif__decoder__num_decoded_frames
+2092:void\20std::__2::vector<sk_sp<SkFontMgr>\2c\20std::__2::allocator<sk_sp<SkFontMgr>>>::__push_back_slow_path<sk_sp<SkFontMgr>\20const&>\28sk_sp<SkFontMgr>\20const&\29
+2093:void\20std::__2::reverse\5babi:v160004\5d<wchar_t*>\28wchar_t*\2c\20wchar_t*\29
+2094:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29.2
+2095:void\20merge_sort<&sweep_lt_vert\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\29
+2096:void\20merge_sort<&sweep_lt_horiz\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\29
+2097:void\20icu_73::\28anonymous\20namespace\29::MixedBlocks::extend<unsigned\20int>\28unsigned\20int\20const*\2c\20int\2c\20int\2c\20int\29
+2098:void\20emscripten::internal::MemberAccess<StrokeOpts\2c\20float>::setWire<StrokeOpts>\28float\20StrokeOpts::*\20const&\2c\20StrokeOpts&\2c\20float\29
+2099:validate_offsetToRestore\28SkReadBuffer*\2c\20unsigned\20long\29
+2100:utrie2_enum_73
+2101:utext_clone_73
+2102:ustr_hashUCharsN_73
+2103:ures_appendResPath\28UResourceBundle*\2c\20char\20const*\2c\20int\2c\20UErrorCode*\29
+2104:uprv_isInvariantUString_73
+2105:umutablecptrie_set_73
+2106:umutablecptrie_close_73
+2107:uloc_getVariant_73
+2108:uloc_canonicalize_73
+2109:uhash_setValueDeleter_73
+2110:ubidi_setPara_73
+2111:ubidi_getVisualRun_73
+2112:ubidi_getRuns_73
+2113:u_strstr_73
+2114:u_getPropertyValueEnum_73
+2115:u_getIntPropertyValue_73
+2116:tt_set_mm_blend
+2117:tt_face_get_ps_name
+2118:trinkle
+2119:strtox.1
+2120:strtoul
+2121:std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>::release\5babi:v160004\5d\28\29
+2122:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20std::__2::__unordered_map_hasher<GrTriangulator::Vertex*\2c\20std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20std::__2::hash<GrTriangulator::Vertex*>\2c\20std::__2::equal_to<GrTriangulator::Vertex*>\2c\20true>\2c\20std::__2::__unordered_map_equal<GrTriangulator::Vertex*\2c\20std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20std::__2::equal_to<GrTriangulator::Vertex*>\2c\20std::__2::hash<GrTriangulator::Vertex*>\2c\20true>\2c\20std::__2::allocator<std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>>>::__emplace_unique_key_args<GrTriangulator::Vertex*\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrTriangulator::Vertex*\20const&>\2c\20std::__2::tuple<>>\28GrTriangulator::Vertex*\20const&\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrTriangulator::Vertex*\20const&>&&\2c\20std::__2::tuple<>&&\29
+2123:std::__2::pair<char\20const*\2c\20char*>::pair\5babi:v160004\5d<char\20const*\2c\20char*\2c\20\28void*\290>\28char\20const*&&\2c\20char*&&\29
+2124:std::__2::moneypunct<wchar_t\2c\20false>::do_decimal_point\28\29\20const
+2125:std::__2::moneypunct<char\2c\20false>::do_decimal_point\28\29\20const
+2126:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::istreambuf_iterator\5babi:v160004\5d\28std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>&\29
+2127:std::__2::ios_base::good\5babi:v160004\5d\28\29\20const
+2128:std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot\20\5b\5d>::_EnableIfConvertible<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot>::type\20std::__2::default_delete<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot\20\5b\5d>::operator\28\29\5babi:v160004\5d<skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot>\28skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot*\29\20const
+2129:std::__2::ctype<char>::toupper\5babi:v160004\5d\28char\29\20const
+2130:std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29
+2131:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\20std::__2::__scan_keyword\5babi:v160004\5d<std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\2c\20std::__2::ctype<wchar_t>>\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\2c\20std::__2::ctype<wchar_t>\20const&\2c\20unsigned\20int&\2c\20bool\29
+2132:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::operator\5b\5d\5babi:v160004\5d\28unsigned\20long\29\20const
+2133:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__fits_in_sso\5babi:v160004\5d\28unsigned\20long\29
+2134:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\20std::__2::__scan_keyword\5babi:v160004\5d<std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::ctype<char>>\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::ctype<char>\20const&\2c\20unsigned\20int&\2c\20bool\29
+2135:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d<char\20const*\2c\20void>\28char\20const*\2c\20char\20const*\29
+2136:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+2137:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__get_short_size\5babi:v160004\5d\28\29\20const
+2138:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__assign_no_alias<true>\28char\20const*\2c\20unsigned\20long\29
+2139:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::__pbump\5babi:v160004\5d\28long\29
+2140:std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.1
+2141:std::__2::allocator_traits<std::__2::allocator<wchar_t>>::deallocate\5babi:v160004\5d\28std::__2::allocator<wchar_t>&\2c\20wchar_t*\2c\20unsigned\20long\29
+2142:std::__2::allocator_traits<std::__2::allocator<char>>::deallocate\5babi:v160004\5d\28std::__2::allocator<char>&\2c\20char*\2c\20unsigned\20long\29
+2143:std::__2::__num_put_base::__format_int\28char*\2c\20char\20const*\2c\20bool\2c\20unsigned\20int\29
+2144:std::__2::__num_put_base::__format_float\28char*\2c\20char\20const*\2c\20unsigned\20int\29
+2145:std::__2::__itoa::__append8\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2146:sktext::gpu::VertexFiller::deviceRectAndCheckTransform\28SkMatrix\20const&\29\20const
+2147:sktext::gpu::TextBlob::Key::operator==\28sktext::gpu::TextBlob::Key\20const&\29\20const
+2148:sktext::gpu::GlyphVector::packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29
+2149:sktext::SkStrikePromise::strike\28\29
+2150:skif::LayerSpace<SkMatrix>::inverseMapRect\28skif::LayerSpace<SkIRect>\20const&\2c\20skif::LayerSpace<SkIRect>*\29\20const
+2151:skif::FilterResult::applyTransform\28skif::Context\20const&\2c\20skif::LayerSpace<SkMatrix>\20const&\2c\20SkSamplingOptions\20const&\29\20const
+2152:skif::FilterResult::Builder::~Builder\28\29
+2153:skif::FilterResult::Builder::Builder\28skif::Context\20const&\29
+2154:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair>::resize\28int\29
+2155:skia_private::THashTable<skia_private::THashMap<int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>\2c\20SkGoodHash>::Pair\2c\20int\2c\20skia_private::THashMap<int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>\2c\20SkGoodHash>::Pair>::Slot::emplace\28skia_private::THashMap<int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>\2c\20SkGoodHash>::Pair&&\2c\20unsigned\20int\29
+2156:skia_private::THashTable<skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair\2c\20SkSL::Type\20const*\2c\20skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair>::resize\28int\29
+2157:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\2c\20SkSL::SymbolTable::SymbolKey\2c\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::uncheckedSet\28skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair&&\29
+2158:skia_private::THashTable<SkSL::Variable\20const*\2c\20SkSL::Variable\20const*\2c\20skia_private::THashSet<SkSL::Variable\20const*\2c\20SkGoodHash>::Traits>::resize\28int\29
+2159:skia_private::TArray<skia::textlayout::Run\2c\20false>::move\28void*\29
+2160:skia_private::TArray<SkRGBA4f<\28SkAlphaType\293>\2c\20true>::push_back\28SkRGBA4f<\28SkAlphaType\293>&&\29
+2161:skia_png_set_text_2
+2162:skia_png_set_palette_to_rgb
+2163:skia_png_handle_IHDR
+2164:skia_png_handle_IEND
+2165:skia_png_destroy_write_struct
+2166:skia::textlayout::operator==\28skia::textlayout::FontArguments\20const&\2c\20skia::textlayout::FontArguments\20const&\29
+2167:skia::textlayout::TextWrapper::TextStretch::extend\28skia::textlayout::Cluster*\29
+2168:skia::textlayout::FontArguments::FontArguments\28skia::textlayout::FontArguments\20const&\29
+2169:skia::textlayout::Decorations::calculateGaps\28skia::textlayout::TextLine::ClipContext\20const&\2c\20SkRect\20const&\2c\20float\2c\20float\29
+2170:skia::textlayout::Block&\20skia_private::TArray<skia::textlayout::Block\2c\20true>::emplace_back<unsigned\20long\2c\20unsigned\20long\2c\20skia::textlayout::TextStyle\20const&>\28unsigned\20long&&\2c\20unsigned\20long&&\2c\20skia::textlayout::TextStyle\20const&\29
+2171:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::fixedFunctionFlags\28\29\20const
+2172:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\28SkIRect\20const&\2c\20SkMatrix\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+2173:skgpu::ganesh::SurfaceFillContext::SurfaceFillContext\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrSurfaceProxyView\2c\20GrColorInfo\20const&\29
+2174:skgpu::ganesh::SurfaceDrawContext::drawShape\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20GrStyledShape&&\29
+2175:skgpu::ganesh::SurfaceDrawContext::drawPaint\28GrClip\20const*\2c\20GrPaint&&\2c\20SkMatrix\20const&\29
+2176:skgpu::ganesh::SurfaceDrawContext::MakeWithFallback\28GrRecordingContext*\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20SkBackingFit\2c\20SkISize\2c\20SkSurfaceProps\20const&\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+2177:skgpu::ganesh::SurfaceContext::rescaleInto\28skgpu::ganesh::SurfaceFillContext*\2c\20SkIRect\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\29
+2178:skgpu::ganesh::SurfaceContext::PixelTransferResult::operator=\28skgpu::ganesh::SurfaceContext::PixelTransferResult&&\29
+2179:skgpu::ganesh::SmallPathAtlasMgr::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29
+2180:skgpu::ganesh::OpsTask::~OpsTask\28\29
+2181:skgpu::ganesh::OpsTask::setColorLoadOp\28GrLoadOp\2c\20std::__2::array<float\2c\204ul>\29
+2182:skgpu::ganesh::OpsTask::deleteOps\28\29
+2183:skgpu::ganesh::FillRectOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20GrAAType\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+2184:skgpu::ganesh::Device::drawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29::$_0::operator\28\29\28int\29\20const
+2185:skgpu::ganesh::ClipStack::~ClipStack\28\29
+2186:skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::~TClientMappedBufferManager\28\29
+2187:skgpu::Swizzle::apply\28SkRasterPipeline*\29\20const
+2188:skgpu::Plot::addSubImage\28int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29
+2189:skgpu::GetLCDBlendFormula\28SkBlendMode\29
+2190:skcms_TransferFunction_isHLGish
+2191:sk_srgb_linear_singleton\28\29
+2192:shr
+2193:shl
+2194:setRegionCheck\28SkRegion*\2c\20SkRegion\20const&\29
+2195:res_getTableItemByIndex_73
+2196:res_getArrayItem_73
+2197:res_findResource_73
+2198:ps_dimension_set_mask_bits
+2199:operator==\28SkPath\20const&\2c\20SkPath\20const&\29
+2200:mbrtowc
+2201:jround_up
+2202:jpeg_make_d_derived_tbl
+2203:init\28\29
+2204:ilogbf
+2205:icu_73::locale_set_default_internal\28char\20const*\2c\20UErrorCode&\29
+2206:icu_73::compute\28int\2c\20icu_73::ReadArray2D\20const&\2c\20icu_73::ReadArray2D\20const&\2c\20icu_73::ReadArray1D\20const&\2c\20icu_73::ReadArray1D\20const&\2c\20icu_73::Array1D&\2c\20icu_73::Array1D&\2c\20icu_73::Array1D&\29
+2207:icu_73::UnicodeString::getChar32Start\28int\29\20const
+2208:icu_73::UnicodeString::extract\28int\2c\20int\2c\20char*\2c\20int\2c\20icu_73::UnicodeString::EInvariant\29\20const
+2209:icu_73::UnicodeString::doReplace\28int\2c\20int\2c\20icu_73::UnicodeString\20const&\2c\20int\2c\20int\29
+2210:icu_73::UnicodeString::copyFrom\28icu_73::UnicodeString\20const&\2c\20signed\20char\29
+2211:icu_73::UnicodeString::UnicodeString\28signed\20char\2c\20icu_73::ConstChar16Ptr\2c\20int\29
+2212:icu_73::UnicodeSet::setToBogus\28\29
+2213:icu_73::UnicodeSet::freeze\28\29
+2214:icu_73::UnicodeSet::copyFrom\28icu_73::UnicodeSet\20const&\2c\20signed\20char\29
+2215:icu_73::UnicodeSet::add\28int\20const*\2c\20int\2c\20signed\20char\29
+2216:icu_73::UnicodeSet::_toPattern\28icu_73::UnicodeString&\2c\20signed\20char\29\20const
+2217:icu_73::UnicodeSet::UnicodeSet\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29
+2218:icu_73::UVector::removeElementAt\28int\29
+2219:icu_73::UDataPathIterator::next\28UErrorCode*\29
+2220:icu_73::StringTrieBuilder::writeNode\28int\2c\20int\2c\20int\29
+2221:icu_73::StringEnumeration::StringEnumeration\28\29
+2222:icu_73::SimpleFilteredSentenceBreakIterator::breakExceptionAt\28int\29
+2223:icu_73::RuleBasedBreakIterator::DictionaryCache::reset\28\29
+2224:icu_73::RuleBasedBreakIterator::BreakCache::reset\28int\2c\20int\29
+2225:icu_73::RuleBasedBreakIterator::BreakCache::populateNear\28int\2c\20UErrorCode&\29
+2226:icu_73::RuleBasedBreakIterator::BreakCache::populateFollowing\28\29
+2227:icu_73::ResourceDataValue::~ResourceDataValue\28\29
+2228:icu_73::ReorderingBuffer::init\28int\2c\20UErrorCode&\29
+2229:icu_73::Normalizer2Impl::makeFCD\28char16_t\20const*\2c\20char16_t\20const*\2c\20icu_73::ReorderingBuffer*\2c\20UErrorCode&\29\20const
+2230:icu_73::Normalizer2Impl::hasCompBoundaryBefore\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\29\20const
+2231:icu_73::Normalizer2Impl::decomposeShort\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20icu_73::Normalizer2Impl::StopAt\2c\20signed\20char\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+2232:icu_73::Normalizer2Impl::addPropertyStarts\28USetAdder\20const*\2c\20UErrorCode&\29\20const
+2233:icu_73::ICU_Utility::skipWhitespace\28icu_73::UnicodeString\20const&\2c\20int&\2c\20signed\20char\29
+2234:hb_ucd_get_unicode_funcs
+2235:hb_syllabic_insert_dotted_circles\28hb_font_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20int\2c\20int\29
+2236:hb_shape_full
+2237:hb_serialize_context_t::~hb_serialize_context_t\28\29
+2238:hb_serialize_context_t::resolve_links\28\29
+2239:hb_serialize_context_t::reset\28\29
+2240:hb_lazy_loader_t<OT::cff1_accelerator_t\2c\20hb_face_lazy_loader_t<OT::cff1_accelerator_t\2c\2016u>\2c\20hb_face_t\2c\2016u\2c\20OT::cff1_accelerator_t>::get\28\29\20const
+2241:hb_lazy_loader_t<AAT::feat\2c\20hb_table_lazy_loader_t<AAT::feat\2c\2034u\2c\20false>\2c\20hb_face_t\2c\2034u\2c\20hb_blob_t>::get\28\29\20const
+2242:hb_language_from_string
+2243:hb_font_t::mults_changed\28\29
+2244:hb_font_destroy
+2245:hb_buffer_t::next_glyph\28\29
+2246:get_sof
+2247:ftell
+2248:ft_var_readpackedpoints
+2249:ft_mem_strdup
+2250:float\20emscripten::internal::MemberAccess<StrokeOpts\2c\20float>::getWire<StrokeOpts>\28float\20StrokeOpts::*\20const&\2c\20StrokeOpts\20const&\29
+2251:findLikelySubtags\28char\20const*\2c\20char*\2c\20int\2c\20UErrorCode*\29
+2252:fill_window
+2253:exp
+2254:encodeImage\28GrDirectContext*\2c\20sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29
+2255:emscripten::val\20MakeTypedArray<float>\28int\2c\20float\20const*\29
+2256:emscripten::internal::MethodInvoker<float\20\28SkContourMeasure::*\29\28\29\20const\2c\20float\2c\20SkContourMeasure\20const*>::invoke\28float\20\28SkContourMeasure::*\20const&\29\28\29\20const\2c\20SkContourMeasure\20const*\29
+2257:emscripten::internal::Invoker<sk_sp<SkAnimatedImage>\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkAnimatedImage>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\29\2c\20unsigned\20long\2c\20unsigned\20long\29
+2258:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\29\2c\20bool\2c\20SkPath\20const&\2c\20SkPath\20const&>::invoke\28bool\20\28**\29\28SkPath\20const&\2c\20SkPath\20const&\29\2c\20SkPath*\2c\20SkPath*\29
+2259:dquad_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2260:do_clip_op\28SkReadBuffer*\2c\20SkCanvas*\2c\20SkRegion::Op\2c\20SkClipOp*\29
+2261:do_anti_hairline\28int\2c\20int\2c\20int\2c\20int\2c\20SkIRect\20const*\2c\20SkBlitter*\29
+2262:doWriteReverse\28char16_t\20const*\2c\20int\2c\20char16_t*\2c\20int\2c\20unsigned\20short\2c\20UErrorCode*\29
+2263:doWriteForward\28char16_t\20const*\2c\20int\2c\20char16_t*\2c\20int\2c\20unsigned\20short\2c\20UErrorCode*\29
+2264:dline_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2265:dispose_chunk
+2266:direct_blur_y\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20int\2c\20int\2c\20unsigned\20short*\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29
+2267:decltype\28fp\28\28SkRecords::NoOp\29\28\29\29\29\20SkRecord::Record::visit<SkRecords::Draw&>\28SkRecords::Draw&\29\20const
+2268:dcubic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2269:dconic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2270:crop_rect_edge\28SkRect\20const&\2c\20int\2c\20int\2c\20int\2c\20int\2c\20float*\2c\20float*\2c\20float*\2c\20float*\2c\20float*\29
+2271:createTagStringWithAlternates\28char\20const*\2c\20int\2c\20char\20const*\2c\20int\2c\20char\20const*\2c\20int\2c\20char\20const*\2c\20int\2c\20char\20const*\2c\20icu_73::ByteSink&\2c\20UErrorCode*\29
+2272:createPath\28char\20const*\2c\20int\2c\20char\20const*\2c\20int\2c\20char\20const*\2c\20icu_73::CharString&\2c\20UErrorCode*\29
+2273:char*\20std::__2::__rewrap_iter\5babi:v160004\5d<char*\2c\20char*\2c\20std::__2::__unwrap_iter_impl<char*\2c\20true>>\28char*\2c\20char*\29
+2274:cff_slot_load
+2275:cff_parse_real
+2276:cff_index_get_sid_string
+2277:cff_index_access_element
+2278:cf2_doStems
+2279:cf2_doFlex
+2280:byn$mgfn-shared$tt_cmap8_get_info
+2281:byn$mgfn-shared$tt_cmap0_get_info
+2282:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>*\29\20const
+2283:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28\29\20const
+2284:byn$mgfn-shared$skia_png_set_strip_16
+2285:byn$mgfn-shared$isBidiControl\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+2286:byn$mgfn-shared$SkSL::Tracer::line\28int\29
+2287:byn$mgfn-shared$AlmostBequalUlps\28float\2c\20float\29
+2288:buffer_verify_error\28hb_buffer_t*\2c\20hb_font_t*\2c\20char\20const*\2c\20...\29
+2289:blur_y_rect\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20int\2c\20skvx::Vec<8\2c\20unsigned\20short>\20\28*\29\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29\2c\20int\2c\20unsigned\20short*\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29
+2290:blur_column\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20skvx::Vec<8\2c\20unsigned\20short>\20\28*\29\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29\2c\20int\2c\20int\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29::$_0::operator\28\29\28unsigned\20char*\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\29\20const
+2291:af_sort_and_quantize_widths
+2292:af_glyph_hints_align_weak_points
+2293:af_glyph_hints_align_strong_points
+2294:af_face_globals_new
+2295:af_cjk_compute_stem_width
+2296:add_huff_table
+2297:addPoint\28UBiDi*\2c\20int\2c\20int\29
+2298:_addExtensionToList\28ExtensionListEntry**\2c\20ExtensionListEntry*\2c\20signed\20char\29
+2299:__uselocale
+2300:__math_xflow
+2301:__cxxabiv1::__base_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+2302:\28anonymous\20namespace\29::make_vertices_spec\28bool\2c\20bool\29
+2303:\28anonymous\20namespace\29::gather_lines_and_quads\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20float\2c\20bool\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20skia_private::TArray<int\2c\20true>*\2c\20skia_private::TArray<float\2c\20true>*\29::$_1::operator\28\29\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20bool\29\20const
+2304:\28anonymous\20namespace\29::draw_stencil_rect\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrHardClip\20const&\2c\20GrUserStencilSettings\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrAA\29
+2305:\28anonymous\20namespace\29::TentPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29::'lambda'\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29::operator\28\29\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29\20const
+2306:\28anonymous\20namespace\29::GaussPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29::'lambda'\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29::operator\28\29\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29\20const
+2307:\28anonymous\20namespace\29::CacheImpl::removeInternal\28\28anonymous\20namespace\29::CacheImpl::Value*\29
+2308:WebPRescalerExport
+2309:WebPInitAlphaProcessing
+2310:WebPFreeDecBuffer
+2311:WebPDemuxDelete
+2312:VP8SetError
+2313:VP8LInverseTransform
+2314:VP8LDelete
+2315:VP8LColorCacheClear
+2316:UDataMemory_init_73
+2317:TT_Load_Context
+2318:StringBuffer\20apply_format_string<1024>\28char\20const*\2c\20void*\2c\20char\20\28&\29\20\5b1024\5d\2c\20SkString*\29
+2319:SkYUVAPixmaps::operator=\28SkYUVAPixmaps\20const&\29
+2320:SkYUVAPixmapInfo::SupportedDataTypes::enableDataType\28SkYUVAPixmapInfo::DataType\2c\20int\29
+2321:SkWriter32::writeMatrix\28SkMatrix\20const&\29
+2322:SkWriter32::snapshotAsData\28\29\20const
+2323:SkVertices::uniqueID\28\29\20const
+2324:SkVertices::approximateSize\28\29\20const
+2325:SkUnicode::convertUtf8ToUtf16\28char\20const*\2c\20int\29
+2326:SkUTF::UTF16ToUTF8\28char*\2c\20int\2c\20unsigned\20short\20const*\2c\20unsigned\20long\29
+2327:SkTypefaceCache::NewTypefaceID\28\29
+2328:SkTextBlobRunIterator::next\28\29
+2329:SkTextBlobRunIterator::SkTextBlobRunIterator\28SkTextBlob\20const*\29
+2330:SkTextBlobBuilder::SkTextBlobBuilder\28\29
+2331:SkTextBlobBuilder::ConservativeRunBounds\28SkTextBlob::RunRecord\20const&\29
+2332:SkTSpan::closestBoundedT\28SkDPoint\20const&\29\20const
+2333:SkTSect::updateBounded\28SkTSpan*\2c\20SkTSpan*\2c\20SkTSpan*\29
+2334:SkTSect::trim\28SkTSpan*\2c\20SkTSect*\29
+2335:SkTDStorage::erase\28int\2c\20int\29
+2336:SkTDPQueue<GrGpuResource*\2c\20&GrResourceCache::CompareTimestamp\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\2c\20&GrResourceCache::AccessResourceIndex\28GrGpuResource*\20const&\29>::percolateUpIfNecessary\28int\29
+2337:SkSurfaces::Raster\28SkImageInfo\20const&\2c\20unsigned\20long\2c\20SkSurfaceProps\20const*\29
+2338:SkStrokerPriv::JoinFactory\28SkPaint::Join\29
+2339:SkStrokeRec::setStrokeStyle\28float\2c\20bool\29
+2340:SkStrokeRec::setFillStyle\28\29
+2341:SkStrokeRec::applyToPath\28SkPath*\2c\20SkPath\20const&\29\20const
+2342:SkString::set\28char\20const*\29
+2343:SkStrikeSpec::findOrCreateStrike\28\29\20const
+2344:SkStrikeSpec::MakeWithNoDevice\28SkFont\20const&\2c\20SkPaint\20const*\29
+2345:SkStrike::unlock\28\29
+2346:SkStrike::lock\28\29
+2347:SkSharedMutex::SkSharedMutex\28\29
+2348:SkShadowTessellator::MakeSpot\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPoint3\20const&\2c\20SkPoint3\20const&\2c\20float\2c\20bool\2c\20bool\29
+2349:SkShaders::MatrixRec::apply\28SkStageRec\20const&\2c\20SkMatrix\20const&\29\20const
+2350:SkShaders::Empty\28\29
+2351:SkShaders::Color\28unsigned\20int\29
+2352:SkShaderBase::appendRootStages\28SkStageRec\20const&\2c\20SkMatrix\20const&\29\20const
+2353:SkScalerContext::~SkScalerContext\28\29.1
+2354:SkSL::write_stringstream\28SkSL::StringStream\20const&\2c\20SkSL::OutputStream&\29
+2355:SkSL::evaluate_3_way_intrinsic\28SkSL::Context\20const&\2c\20std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\29
+2356:SkSL::VarDeclaration::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Modifiers\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::VariableStorage\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+2357:SkSL::Type::priority\28\29\20const
+2358:SkSL::Type::checkIfUsableInArray\28SkSL::Context\20const&\2c\20SkSL::Position\29\20const
+2359:SkSL::SymbolTable::takeOwnershipOfString\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+2360:SkSL::SymbolTable::isBuiltinType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+2361:SkSL::SymbolTable::find\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+2362:SkSL::ShaderCapsFactory::MakeShaderCaps\28\29
+2363:SkSL::RP::Program::appendStages\28SkRasterPipeline*\2c\20SkArenaAlloc*\2c\20SkSL::RP::Callbacks*\2c\20SkSpan<float\20const>\29\20const
+2364:SkSL::RP::Generator::pushVectorizedExpression\28SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+2365:SkSL::RP::Builder::ternary_op\28SkSL::RP::BuilderOp\2c\20int\29
+2366:SkSL::RP::Builder::simplifyPopSlotsUnmasked\28SkSL::RP::SlotRange*\29
+2367:SkSL::RP::Builder::pop_slots_unmasked\28SkSL::RP::SlotRange\29
+2368:SkSL::RP::Builder::pad_stack\28int\29
+2369:SkSL::RP::Builder::exchange_src\28\29
+2370:SkSL::ProgramUsage::remove\28SkSL::ProgramElement\20const&\29
+2371:SkSL::ProgramUsage::isDead\28SkSL::Variable\20const&\29\20const
+2372:SkSL::PipelineStage::PipelineStageCodeGenerator::typeName\28SkSL::Type\20const&\29
+2373:SkSL::LiteralType::priority\28\29\20const
+2374:SkSL::GLSLCodeGenerator::writeAnyConstructor\28SkSL::AnyConstructor\20const&\2c\20SkSL::OperatorPrecedence\29
+2375:SkSL::ExpressionArray::clone\28\29\20const
+2376:SkSL::Context::~Context\28\29
+2377:SkSL::Compiler::errorText\28bool\29
+2378:SkSL::Compiler::convertProgram\28SkSL::ProgramKind\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkSL::ProgramSettings\29
+2379:SkSL::Analysis::DetectVarDeclarationWithoutScope\28SkSL::Statement\20const&\2c\20SkSL::ErrorReporter*\29
+2380:SkRuntimeShaderBuilder::SkRuntimeShaderBuilder\28sk_sp<SkRuntimeEffect>\29
+2381:SkRuntimeEffect::getRPProgram\28SkSL::DebugTracePriv*\29\20const
+2382:SkRegion::getBoundaryPath\28SkPath*\29\20const
+2383:SkRegion::Spanerator::next\28int*\2c\20int*\29
+2384:SkRegion::SkRegion\28SkRegion\20const&\29
+2385:SkReduceOrder::Quad\28SkPoint\20const*\2c\20SkPoint*\29
+2386:SkReadBuffer::skipByteArray\28unsigned\20long*\29
+2387:SkReadBuffer::readSampling\28\29
+2388:SkReadBuffer::readRect\28\29
+2389:SkReadBuffer::readRRect\28SkRRect*\29
+2390:SkReadBuffer::readPoint\28SkPoint*\29
+2391:SkReadBuffer::readPad32\28void*\2c\20unsigned\20long\29
+2392:SkReadBuffer::readArray\28void*\2c\20unsigned\20long\2c\20unsigned\20long\29
+2393:SkReadBuffer::checkInt\28int\2c\20int\29
+2394:SkRasterPipeline::append_matrix\28SkArenaAlloc*\2c\20SkMatrix\20const&\29
+2395:SkQuads::RootsReal\28double\2c\20double\2c\20double\2c\20double*\29
+2396:SkQuadraticEdge::updateQuadratic\28\29
+2397:SkPngCodec::~SkPngCodec\28\29.1
+2398:SkPngCodec::processData\28\29
+2399:SkPixmap::readPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\29\20const
+2400:SkPictureRecord::~SkPictureRecord\28\29
+2401:SkPicture::~SkPicture\28\29.1
+2402:SkPathStroker::quadStroke\28SkPoint\20const*\2c\20SkQuadConstruct*\29
+2403:SkPathStroker::preJoinTo\28SkPoint\20const&\2c\20SkPoint*\2c\20SkPoint*\2c\20bool\29
+2404:SkPathStroker::intersectRay\28SkQuadConstruct*\2c\20SkPathStroker::IntersectRayType\29\20const
+2405:SkPathStroker::cubicStroke\28SkPoint\20const*\2c\20SkQuadConstruct*\29
+2406:SkPathStroker::conicStroke\28SkConic\20const&\2c\20SkQuadConstruct*\29
+2407:SkPathMeasure::isClosed\28\29
+2408:SkPathEffectBase::getFlattenableType\28\29\20const
+2409:SkPathBuilder::moveTo\28SkPoint\29
+2410:SkPathBuilder::incReserve\28int\2c\20int\29
+2411:SkPathBuilder::addRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+2412:SkPath::isLastContourClosed\28\29\20const
+2413:SkPath::addRRect\28SkRRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+2414:SkPaintToGrPaintReplaceShader\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+2415:SkPaint::setStrokeMiter\28float\29
+2416:SkPaint::setStrokeJoin\28SkPaint::Join\29
+2417:SkOpSpanBase::mergeMatches\28SkOpSpanBase*\29
+2418:SkOpSpanBase::addOpp\28SkOpSpanBase*\29
+2419:SkOpSegment::subDivide\28SkOpSpanBase\20const*\2c\20SkOpSpanBase\20const*\2c\20SkDCurve*\29\20const
+2420:SkOpSegment::release\28SkOpSpan\20const*\29
+2421:SkOpSegment::operand\28\29\20const
+2422:SkOpSegment::moveNearby\28\29
+2423:SkOpSegment::markDone\28SkOpSpan*\29
+2424:SkOpSegment::markAndChaseDone\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20SkOpSpanBase**\29
+2425:SkOpSegment::isClose\28double\2c\20SkOpSegment\20const*\29\20const
+2426:SkOpSegment::init\28SkPoint*\2c\20float\2c\20SkOpContour*\2c\20SkPath::Verb\29
+2427:SkOpSegment::addT\28double\2c\20SkPoint\20const&\29
+2428:SkOpCoincidence::fixUp\28SkOpPtT*\2c\20SkOpPtT\20const*\29
+2429:SkOpCoincidence::add\28SkOpPtT*\2c\20SkOpPtT*\2c\20SkOpPtT*\2c\20SkOpPtT*\29
+2430:SkOpCoincidence::addMissing\28bool*\29
+2431:SkOpCoincidence::addIfMissing\28SkOpPtT\20const*\2c\20SkOpPtT\20const*\2c\20double\2c\20double\2c\20SkOpSegment*\2c\20SkOpSegment*\2c\20bool*\29
+2432:SkOpCoincidence::addExpanded\28\29
+2433:SkOpAngle::set\28SkOpSpanBase*\2c\20SkOpSpanBase*\29
+2434:SkOpAngle::lineOnOneSide\28SkDPoint\20const&\2c\20SkDVector\20const&\2c\20SkOpAngle\20const*\2c\20bool\29\20const
+2435:SkNoPixelsDevice::ClipState::op\28SkClipOp\2c\20SkM44\20const&\2c\20SkRect\20const&\2c\20bool\2c\20bool\29
+2436:SkMemoryStream::Make\28sk_sp<SkData>\29
+2437:SkMatrix\20skif::Mapping::map<SkMatrix>\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+2438:SkMatrixPriv::DifferentialAreaScale\28SkMatrix\20const&\2c\20SkPoint\20const&\29
+2439:SkMatrix::writeToMemory\28void*\29\20const
+2440:SkMatrix::preservesRightAngles\28float\29\20const
+2441:SkM44::normalizePerspective\28\29
+2442:SkLatticeIter::~SkLatticeIter\28\29
+2443:SkLatticeIter::next\28SkIRect*\2c\20SkRect*\2c\20bool*\2c\20unsigned\20int*\29
+2444:SkJSONWriter::endObject\28\29
+2445:SkJSONWriter::endArray\28\29
+2446:SkImage_Lazy::Validator::Validator\28sk_sp<SharedGenerator>\2c\20SkColorType\20const*\2c\20sk_sp<SkColorSpace>\29
+2447:SkImageShader::MakeSubset\28sk_sp<SkImage>\2c\20SkRect\20const&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const*\2c\20bool\29
+2448:SkImageGenerator::onRefEncodedData\28\29
+2449:SkImageFilters::Image\28sk_sp<SkImage>\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\29
+2450:SkImageFilters::Empty\28\29
+2451:SkImage::width\28\29\20const
+2452:SkImage::readPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+2453:SkHalfToFloat\28unsigned\20short\29
+2454:SkGradientShader::MakeSweep\28float\2c\20float\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+2455:SkGradientShader::MakeRadial\28SkPoint\20const&\2c\20float\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+2456:SkGradientBaseShader::commonAsAGradient\28SkShaderBase::GradientInfo*\29\20const
+2457:SkGradientBaseShader::ValidGradient\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\29
+2458:SkGradientBaseShader::SkGradientBaseShader\28SkGradientBaseShader::Descriptor\20const&\2c\20SkMatrix\20const&\29
+2459:SkGradientBaseShader::MakeDegenerateGradient\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20float\20const*\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20SkTileMode\29
+2460:SkGradientBaseShader::Descriptor::~Descriptor\28\29
+2461:SkGradientBaseShader::Descriptor::Descriptor\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\29
+2462:SkGlyph::setPath\28SkArenaAlloc*\2c\20SkPath\20const*\2c\20bool\29
+2463:SkFont::setSize\28float\29
+2464:SkEvalQuadAt\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\29
+2465:SkEncodedInfo::~SkEncodedInfo\28\29
+2466:SkEncodedInfo::makeImageInfo\28\29\20const
+2467:SkEmptyFontMgr::onMakeFromStreamIndex\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20int\29\20const
+2468:SkDrawableList::~SkDrawableList\28\29
+2469:SkDrawable::draw\28SkCanvas*\2c\20SkMatrix\20const*\29
+2470:SkDevice::setDeviceCoordinateSystem\28SkM44\20const&\2c\20SkM44\20const&\2c\20SkM44\20const&\2c\20int\2c\20int\29
+2471:SkData::PrivateNewWithCopy\28void\20const*\2c\20unsigned\20long\29::$_0::operator\28\29\28\29\20const
+2472:SkDashPathEffect::Make\28float\20const*\2c\20int\2c\20float\29
+2473:SkDQuad::monotonicInX\28\29\20const
+2474:SkDCubic::dxdyAtT\28double\29\20const
+2475:SkDCubic::RootsValidT\28double\2c\20double\2c\20double\2c\20double\2c\20double*\29
+2476:SkCubicEdge::updateCubic\28\29
+2477:SkConicalGradient::~SkConicalGradient\28\29
+2478:SkColorSpace::serialize\28\29\20const
+2479:SkColorSpace::MakeSRGBLinear\28\29
+2480:SkColorFilterPriv::MakeGaussian\28\29
+2481:SkColorConverter::SkColorConverter\28unsigned\20int\20const*\2c\20int\29
+2482:SkCodec::startScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const*\29
+2483:SkCodec::handleFrameIndex\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20std::__2::function<SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>\29
+2484:SkCodec::getScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+2485:SkChopQuadAtYExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+2486:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\20const*\2c\20int\29
+2487:SkChopCubicAtYExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+2488:SkCharToGlyphCache::SkCharToGlyphCache\28\29
+2489:SkCanvas::peekPixels\28SkPixmap*\29
+2490:SkCanvas::getTotalMatrix\28\29\20const
+2491:SkCanvas::getLocalToDevice\28\29\20const
+2492:SkCanvas::getLocalClipBounds\28\29\20const
+2493:SkCanvas::drawImageLattice\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+2494:SkCanvas::drawAtlas\28SkImage\20const*\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20SkBlendMode\2c\20SkSamplingOptions\20const&\2c\20SkRect\20const*\2c\20SkPaint\20const*\29
+2495:SkCanvas::concat\28SkM44\20const&\29
+2496:SkCanvas::SkCanvas\28SkBitmap\20const&\29
+2497:SkCanvas::ImageSetEntry::ImageSetEntry\28SkCanvas::ImageSetEntry\20const&\29
+2498:SkBlitter::blitRectRegion\28SkIRect\20const&\2c\20SkRegion\20const&\29
+2499:SkBlendMode_ShouldPreScaleCoverage\28SkBlendMode\2c\20bool\29
+2500:SkBlendMode_AppendStages\28SkBlendMode\2c\20SkRasterPipeline*\29
+2501:SkBitmap::tryAllocPixels\28SkBitmap::Allocator*\29
+2502:SkBitmap::readPixels\28SkPixmap\20const&\2c\20int\2c\20int\29\20const
+2503:SkBitmap::readPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\29\20const
+2504:SkBitmap::installPixels\28SkPixmap\20const&\29
+2505:SkBitmap::allocPixels\28SkImageInfo\20const&\29
+2506:SkBitmap::SkBitmap\28SkBitmap&&\29
+2507:SkBaseShadowTessellator::handleQuad\28SkPoint\20const*\29
+2508:SkAAClip::~SkAAClip\28\29
+2509:SkAAClip::setPath\28SkPath\20const&\2c\20SkIRect\20const&\2c\20bool\29
+2510:SkAAClip::op\28SkAAClip\20const&\2c\20SkClipOp\29
+2511:OT::hb_ot_layout_lookup_accelerator_t*\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GSUB_impl::SubstLookup>\28OT::Layout::GSUB_impl::SubstLookup\20const&\29
+2512:OT::hb_ot_apply_context_t::replace_glyph\28unsigned\20int\29
+2513:OT::apply_lookup\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20OT::LookupRecord\20const*\2c\20unsigned\20int\29
+2514:OT::Layout::GPOS_impl::ValueFormat::get_device\28OT::IntType<unsigned\20short\2c\202u>\20const*\2c\20bool*\2c\20void\20const*\2c\20hb_sanitize_context_t&\29
+2515:OT::Layout::GPOS_impl::AnchorFormat3::get_anchor\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20float*\2c\20float*\29\20const
+2516:OT::Layout::GPOS_impl::AnchorFormat2::get_anchor\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20float*\2c\20float*\29\20const
+2517:OT::ClassDef::get_class\28unsigned\20int\29\20const
+2518:JpegDecoderMgr::~JpegDecoderMgr\28\29
+2519:GrTriangulator::simplify\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29
+2520:GrTriangulator::setTop\28GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+2521:GrTriangulator::mergeCoincidentVertices\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29\20const
+2522:GrTriangulator::Vertex*\20SkArenaAlloc::make<GrTriangulator::Vertex\2c\20SkPoint&\2c\20int>\28SkPoint&\2c\20int&&\29
+2523:GrThreadSafeCache::remove\28skgpu::UniqueKey\20const&\29
+2524:GrThreadSafeCache::internalFind\28skgpu::UniqueKey\20const&\29
+2525:GrThreadSafeCache::internalAdd\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&\29
+2526:GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29
+2527:GrTexture::markMipmapsClean\28\29
+2528:GrTessellationShader::MakePipeline\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAAType\2c\20GrAppliedClip&&\2c\20GrProcessorSet&&\29
+2529:GrSurfaceProxyView::concatSwizzle\28skgpu::Swizzle\29
+2530:GrSurfaceProxy::LazyCallbackResult::LazyCallbackResult\28sk_sp<GrTexture>\29
+2531:GrSurfaceProxy::Copy\28GrRecordingContext*\2c\20sk_sp<GrSurfaceProxy>\2c\20GrSurfaceOrigin\2c\20skgpu::Mipmapped\2c\20SkIRect\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20GrSurfaceProxy::RectsMustMatch\2c\20sk_sp<GrRenderTask>*\29
+2532:GrStyledShape::GrStyledShape\28SkPath\20const&\2c\20GrStyle\20const&\2c\20GrStyledShape::DoSimplify\29
+2533:GrStyledShape::GrStyledShape\28GrStyledShape\20const&\2c\20GrStyle::Apply\2c\20float\29
+2534:GrSimpleMeshDrawOpHelper::CreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrPipeline\20const*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrGeometryProcessor*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\2c\20GrUserStencilSettings\20const*\29
+2535:GrShape::simplifyLine\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20int\29
+2536:GrShape::reset\28\29
+2537:GrShape::conservativeContains\28SkPoint\20const&\29\20const
+2538:GrSWMaskHelper::init\28SkIRect\20const&\29
+2539:GrResourceProvider::createNonAAQuadIndexBuffer\28\29
+2540:GrResourceProvider::createBuffer\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\2c\20GrResourceProvider::ZeroInit\29
+2541:GrResourceCache::refAndMakeResourceMRU\28GrGpuResource*\29
+2542:GrResourceCache::findAndRefUniqueResource\28skgpu::UniqueKey\20const&\29
+2543:GrRenderTask::addTarget\28GrDrawingManager*\2c\20sk_sp<GrSurfaceProxy>\29
+2544:GrRenderTarget::~GrRenderTarget\28\29.1
+2545:GrQuadUtils::WillUseHairline\28GrQuad\20const&\2c\20GrAAType\2c\20GrQuadAAFlags\29
+2546:GrQuadUtils::CropToRect\28SkRect\20const&\2c\20GrAA\2c\20DrawQuad*\2c\20bool\29
+2547:GrProxyProvider::processInvalidUniqueKey\28skgpu::UniqueKey\20const&\2c\20GrTextureProxy*\2c\20GrProxyProvider::InvalidateGPUResource\29
+2548:GrPorterDuffXPFactory::Get\28SkBlendMode\29
+2549:GrPixmap::operator=\28GrPixmap&&\29
+2550:GrPathUtils::scaleToleranceToSrc\28float\2c\20SkMatrix\20const&\2c\20SkRect\20const&\29
+2551:GrPathUtils::quadraticPointCount\28SkPoint\20const*\2c\20float\29
+2552:GrPathUtils::cubicPointCount\28SkPoint\20const*\2c\20float\29
+2553:GrPaint::setPorterDuffXPFactory\28SkBlendMode\29
+2554:GrPaint::GrPaint\28GrPaint\20const&\29
+2555:GrOpsRenderPass::draw\28int\2c\20int\29
+2556:GrOpsRenderPass::drawInstanced\28int\2c\20int\2c\20int\2c\20int\29
+2557:GrMeshDrawOp::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+2558:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29
+2559:GrGradientShader::MakeGradientFP\28SkGradientBaseShader\20const&\2c\20GrFPArgs\20const&\2c\20SkShaders::MatrixRec\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkMatrix\20const*\29
+2560:GrGpuResource::getContext\28\29
+2561:GrGpu::writePixels\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20bool\29
+2562:GrGLTexture::onSetLabel\28\29
+2563:GrGLTexture::onRelease\28\29
+2564:GrGLTexture::onAbandon\28\29
+2565:GrGLTexture::backendFormat\28\29\20const
+2566:GrGLSLUniformHandler::addInputSampler\28skgpu::Swizzle\20const&\2c\20char\20const*\29
+2567:GrGLSLShaderBuilder::appendFunctionDecl\28SkSLType\2c\20char\20const*\2c\20SkSpan<GrShaderVar\20const>\29
+2568:GrGLSLShaderBuilder::appendColorGamutXform\28SkString*\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+2569:GrGLSLProgramBuilder::fragmentProcessorHasCoordsParam\28GrFragmentProcessor\20const*\29\20const
+2570:GrGLRenderTarget::onRelease\28\29
+2571:GrGLRenderTarget::onAbandon\28\29
+2572:GrGLGpu::resolveRenderFBOs\28GrGLRenderTarget*\2c\20SkIRect\20const&\2c\20GrGLRenderTarget::ResolveDirection\2c\20bool\29
+2573:GrGLGpu::flushBlendAndColorWrite\28skgpu::BlendInfo\20const&\2c\20skgpu::Swizzle\20const&\29
+2574:GrGLGetVersionFromString\28char\20const*\29
+2575:GrGLCheckLinkStatus\28GrGLGpu\20const*\2c\20unsigned\20int\2c\20skgpu::ShaderErrorHandler*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const**\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\29
+2576:GrGLCaps::maxRenderTargetSampleCount\28GrGLFormat\29\20const
+2577:GrFragmentProcessors::Make\28SkBlenderBase\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrFPArgs\20const&\29
+2578:GrFragmentProcessor::isEqual\28GrFragmentProcessor\20const&\29\20const
+2579:GrFragmentProcessor::asTextureEffect\28\29\20const
+2580:GrFragmentProcessor::Rect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrClipEdgeType\2c\20SkRect\29
+2581:GrFragmentProcessor::ModulateRGBA\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+2582:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+2583:GrDrawingManager::~GrDrawingManager\28\29
+2584:GrDrawingManager::removeRenderTasks\28\29
+2585:GrDrawingManager::getPathRenderer\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\2c\20bool\2c\20skgpu::ganesh::PathRendererChain::DrawType\2c\20skgpu::ganesh::PathRenderer::StencilSupport*\29
+2586:GrDrawOpAtlas::compact\28skgpu::AtlasToken\29
+2587:GrContext_Base::~GrContext_Base\28\29
+2588:GrContext_Base::defaultBackendFormat\28SkColorType\2c\20skgpu::Renderable\29\20const
+2589:GrColorSpaceXform::XformKey\28GrColorSpaceXform\20const*\29
+2590:GrColorSpaceXform::Make\28SkColorSpace*\2c\20SkAlphaType\2c\20SkColorSpace*\2c\20SkAlphaType\29
+2591:GrColorSpaceXform::Make\28GrColorInfo\20const&\2c\20GrColorInfo\20const&\29
+2592:GrColorInfo::operator=\28GrColorInfo\20const&\29
+2593:GrCaps::supportedReadPixelsColorType\28GrColorType\2c\20GrBackendFormat\20const&\2c\20GrColorType\29\20const
+2594:GrCaps::getFallbackColorTypeAndFormat\28GrColorType\2c\20int\29\20const
+2595:GrCaps::areColorTypeAndFormatCompatible\28GrColorType\2c\20GrBackendFormat\20const&\29\20const
+2596:GrBufferAllocPool::~GrBufferAllocPool\28\29
+2597:GrBlurUtils::GaussianBlur\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkIRect\2c\20float\2c\20float\2c\20SkTileMode\2c\20SkBackingFit\29
+2598:GrBlurUtils::DrawShapeWithMaskFilter\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrClip\20const*\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20GrStyledShape\20const&\29
+2599:GrBaseContextPriv::getShaderErrorHandler\28\29\20const
+2600:GrBackendTexture::GrBackendTexture\28GrBackendTexture\20const&\29
+2601:GrBackendRenderTarget::getBackendFormat\28\29\20const
+2602:GrBackendFormat::operator==\28GrBackendFormat\20const&\29\20const
+2603:GrAAConvexTessellator::createOuterRing\28GrAAConvexTessellator::Ring\20const&\2c\20float\2c\20float\2c\20GrAAConvexTessellator::Ring*\29
+2604:GrAAConvexTessellator::createInsetRings\28GrAAConvexTessellator::Ring&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20GrAAConvexTessellator::Ring**\29
+2605:FindSortableTop\28SkOpContourHead*\29
+2606:FT_Set_Charmap
+2607:FT_Outline_Decompose
+2608:FT_New_Size
+2609:FT_Load_Sfnt_Table
+2610:FT_GlyphLoader_Add
+2611:FT_Get_Color_Glyph_Paint
+2612:FT_Get_Color_Glyph_Layer
+2613:FT_Get_Advance
+2614:FT_CMap_New
+2615:End
+2616:Current_Ratio
+2617:Cr_z__tr_stored_block
+2618:ClipParams_unpackRegionOp\28SkReadBuffer*\2c\20unsigned\20int\29
+2619:CircleOp::Circle&\20skia_private::TArray<CircleOp::Circle\2c\20true>::emplace_back<CircleOp::Circle>\28CircleOp::Circle&&\29
+2620:CFF::CFFIndex<OT::IntType<unsigned\20int\2c\204u>>::sanitize\28hb_sanitize_context_t*\29\20const
+2621:AlmostEqualUlps_Pin\28float\2c\20float\29
+2622:wuffs_lzw__decoder__workbuf_len
+2623:wuffs_gif__decoder__decode_image_config
+2624:wuffs_gif__decoder__decode_frame_config
+2625:wrap_proxy_in_image\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20SkColorInfo\20const&\29
+2626:winding_mono_quad\28SkPoint\20const*\2c\20float\2c\20float\2c\20int*\29
+2627:winding_mono_conic\28SkConic\20const&\2c\20float\2c\20float\2c\20int*\29
+2628:wcrtomb
+2629:wchar_t\20const*\20std::__2::find\5babi:v160004\5d<wchar_t\20const*\2c\20wchar_t>\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const&\29
+2630:void\20std::__2::vector<std::__2::shared_ptr<SkSL::SymbolTable>\2c\20std::__2::allocator<std::__2::shared_ptr<SkSL::SymbolTable>>>::__push_back_slow_path<std::__2::shared_ptr<SkSL::SymbolTable>>\28std::__2::shared_ptr<SkSL::SymbolTable>&&\29
+2631:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20std::__2::iterator_traits<skia::textlayout::OneLineShaper::RunBlock*>::difference_type\29
+2632:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20std::__2::iterator_traits<\28anonymous\20namespace\29::Entry*>::difference_type\29
+2633:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20std::__2::iterator_traits<SkSL::ProgramElement\20const**>::difference_type\29
+2634:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20std::__2::iterator_traits<SkSL::FunctionDefinition\20const**>::difference_type\29
+2635:void\20std::__2::__inplace_merge<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>\28std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::value_type*\2c\20long\29
+2636:void\20sort_r_simple<void*>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\2c\20void*\29\2c\20void*\29
+2637:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29.3
+2638:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29
+2639:void\20SkTIntroSort<double\2c\20void\20SkTQSort<double>\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29>\28int\2c\20double*\2c\20int\2c\20void\20SkTQSort<double>\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29\20const&\29
+2640:void\20SkTIntroSort<SkEdge*\2c\20void\20SkTQSort<SkEdge>\28SkEdge**\2c\20SkEdge**\29::'lambda'\28SkEdge\20const*\2c\20SkEdge\20const*\29>\28int\2c\20SkEdge*\2c\20int\2c\20void\20SkTQSort<SkEdge>\28SkEdge**\2c\20SkEdge**\29::'lambda'\28SkEdge\20const*\2c\20SkEdge\20const*\29\20const&\29
+2641:vfprintf
+2642:valid_args\28SkImageInfo\20const&\2c\20unsigned\20long\2c\20unsigned\20long*\29
+2643:utf8_back1SafeBody_73
+2644:ustrcase_internalToUpper_73
+2645:uscript_getScript_73
+2646:ures_getStringWithAlias\28UResourceBundle\20const*\2c\20unsigned\20int\2c\20int\2c\20int*\2c\20UErrorCode*\29
+2647:uprv_strdup_73
+2648:uprv_sortArray_73
+2649:uprv_mapFile_73
+2650:uprv_compareASCIIPropertyNames_73
+2651:update_offset_to_base\28char\20const*\2c\20long\29
+2652:update_box
+2653:unsigned\20long\20const&\20std::__2::min\5babi:v160004\5d<unsigned\20long>\28unsigned\20long\20const&\2c\20unsigned\20long\20const&\29
+2654:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+2655:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+2656:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+2657:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+2658:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+2659:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+2660:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+2661:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+2662:umutablecptrie_get_73
+2663:ultag_isUnicodeLocaleAttributes_73
+2664:ultag_isPrivateuseValueSubtags_73
+2665:ulocimp_getKeywords_73
+2666:uloc_openKeywords_73
+2667:uloc_getScript_73
+2668:uloc_getLanguage_73
+2669:uloc_getCountry_73
+2670:uhash_remove_73
+2671:uhash_hashChars_73
+2672:uhash_getiAndFound_73
+2673:uhash_compareChars_73
+2674:uenum_next_73
+2675:udata_getHashTable\28UErrorCode&\29
+2676:ucstrTextAccess\28UText*\2c\20long\20long\2c\20signed\20char\29
+2677:u_strToUTF8_73
+2678:u_strToUTF8WithSub_73
+2679:u_strCompare_73
+2680:u_memmove_73
+2681:u_getUnicodeProperties_73
+2682:u_getDataDirectory_73
+2683:u_charMirror_73
+2684:tt_size_reset
+2685:tt_sbit_decoder_load_metrics
+2686:tt_face_get_location
+2687:tt_face_find_bdf_prop
+2688:tolower
+2689:toTextStyle\28SimpleTextStyle\20const&\29
+2690:t1_cmap_unicode_done
+2691:subdivide_cubic_to\28SkPath*\2c\20SkPoint\20const*\2c\20int\29
+2692:subdivide\28SkConic\20const&\2c\20SkPoint*\2c\20int\29
+2693:subQuickSort\28char*\2c\20int\2c\20int\2c\20int\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\2c\20void\20const*\29\2c\20void\20const*\2c\20void*\2c\20void*\29
+2694:strtox
+2695:strtoull_l
+2696:strcat
+2697:std::logic_error::~logic_error\28\29.1
+2698:std::__2::vector<float\2c\20std::__2::allocator<float>>::push_back\5babi:v160004\5d\28float&&\29
+2699:std::__2::vector<float\2c\20std::__2::allocator<float>>::__append\28unsigned\20long\29
+2700:std::__2::vector<SkSL::SlotDebugInfo\2c\20std::__2::allocator<SkSL::SlotDebugInfo>>::reserve\28unsigned\20long\29
+2701:std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>::push_back\5babi:v160004\5d\28SkRGBA4f<\28SkAlphaType\293>\20const&\29
+2702:std::__2::unique_ptr<\28anonymous\20namespace\29::SoftwarePathData\2c\20std::__2::default_delete<\28anonymous\20namespace\29::SoftwarePathData>>::reset\5babi:v160004\5d\28\28anonymous\20namespace\29::SoftwarePathData*\29
+2703:std::__2::time_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::~time_put\28\29.1
+2704:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>>::~pair\28\29
+2705:std::__2::pair<char\20const*\2c\20char*>\20std::__2::__copy_trivial::operator\28\29\5babi:v160004\5d<char\20const\2c\20char\2c\200>\28char\20const*\2c\20char\20const*\2c\20char*\29\20const
+2706:std::__2::locale::operator=\28std::__2::locale\20const&\29
+2707:std::__2::locale::locale\28\29
+2708:std::__2::iterator_traits<unsigned\20int\20const*>::difference_type\20std::__2::distance\5babi:v160004\5d<unsigned\20int\20const*>\28unsigned\20int\20const*\2c\20unsigned\20int\20const*\29
+2709:std::__2::ios_base::~ios_base\28\29
+2710:std::__2::fpos<__mbstate_t>::fpos\5babi:v160004\5d\28long\20long\29
+2711:std::__2::enable_if<is_move_constructible<SkAnimatedImage::Frame>::value\20&&\20is_move_assignable<SkAnimatedImage::Frame>::value\2c\20void>::type\20std::__2::swap\5babi:v160004\5d<SkAnimatedImage::Frame>\28SkAnimatedImage::Frame&\2c\20SkAnimatedImage::Frame&\29
+2712:std::__2::decay<decltype\28__to_address_helper<std::__2::__wrap_iter<char\20const*>>::__call\28std::declval<std::__2::__wrap_iter<char\20const*>\20const&>\28\29\29\29>::type\20std::__2::__to_address\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20void>\28std::__2::__wrap_iter<char\20const*>\20const&\29
+2713:std::__2::chrono::duration<long\20long\2c\20std::__2::ratio<1ll\2c\201ll>>::duration\5babi:v160004\5d<long\20long>\28long\20long\20const&\2c\20std::__2::enable_if<is_convertible<long\20long\20const&\2c\20long\20long>::value\20&&\20\28std::__2::integral_constant<bool\2c\20false>::value\20||\20!treat_as_floating_point<long\20long>::value\29\2c\20void>::type*\29
+2714:std::__2::char_traits<char>::move\28char*\2c\20char\20const*\2c\20unsigned\20long\29
+2715:std::__2::char_traits<char>::assign\28char*\2c\20unsigned\20long\2c\20char\29
+2716:std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29.2
+2717:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringbuf\28\29
+2718:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::push_back\28wchar_t\29
+2719:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::capacity\5babi:v160004\5d\28\29\20const
+2720:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d<char*\2c\20void>\28char*\2c\20char*\2c\20std::__2::allocator<char>\20const&\29
+2721:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__make_iterator\5babi:v160004\5d\28char*\29
+2722:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__grow_by\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+2723:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::setp\5babi:v160004\5d\28char*\2c\20char*\29
+2724:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29.1
+2725:std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29.1
+2726:std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.2
+2727:std::__2::__wrap_iter<wchar_t*>::operator+\5babi:v160004\5d\28long\29\20const
+2728:std::__2::__wrap_iter<char*>::operator+\5babi:v160004\5d\28long\29\20const
+2729:std::__2::__unique_if<SkSL::ConstructorStruct>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorStruct\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+2730:std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorArray\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+2731:std::__2::__throw_system_error\28int\2c\20char\20const*\29
+2732:std::__2::__throw_out_of_range\5babi:v160004\5d\28char\20const*\29
+2733:std::__2::__throw_length_error\5babi:v160004\5d\28char\20const*\29
+2734:std::__2::__optional_destruct_base<GrStyledShape\2c\20false>::reset\5babi:v160004\5d\28\29
+2735:std::__2::__num_get<wchar_t>::__stage2_float_prep\28std::__2::ios_base&\2c\20wchar_t*\2c\20wchar_t&\2c\20wchar_t&\29
+2736:std::__2::__num_get<wchar_t>::__stage2_float_loop\28wchar_t\2c\20bool&\2c\20char&\2c\20char*\2c\20char*&\2c\20wchar_t\2c\20wchar_t\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20unsigned\20int&\2c\20wchar_t*\29
+2737:std::__2::__num_get<char>::__stage2_float_prep\28std::__2::ios_base&\2c\20char*\2c\20char&\2c\20char&\29
+2738:std::__2::__num_get<char>::__stage2_float_loop\28char\2c\20bool&\2c\20char&\2c\20char*\2c\20char*&\2c\20char\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20unsigned\20int&\2c\20char*\29
+2739:std::__2::__libcpp_wcrtomb_l\5babi:v160004\5d\28char*\2c\20wchar_t\2c\20__mbstate_t*\2c\20__locale_struct*\29
+2740:std::__2::__less<unsigned\20int\2c\20unsigned\20long>::operator\28\29\5babi:v160004\5d\28unsigned\20int\20const&\2c\20unsigned\20long\20const&\29\20const
+2741:std::__2::__itoa::__base_10_u32\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2742:std::__2::__itoa::__append6\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2743:std::__2::__itoa::__append4\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2744:std::__2::__call_once\28unsigned\20long\20volatile&\2c\20void*\2c\20void\20\28*\29\28void*\29\29
+2745:sktext::gpu::VertexFiller::flatten\28SkWriteBuffer&\29\20const
+2746:sktext::gpu::VertexFiller::Make\28skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20SkRect\2c\20SkSpan<SkPoint\20const>\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::FillerType\29
+2747:sktext::gpu::VertexFiller::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\29
+2748:sktext::gpu::SubRunContainer::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20SkRefCnt\20const*\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+2749:sktext::gpu::SubRunAllocator::SubRunAllocator\28int\29
+2750:sktext::gpu::MakePointsFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\29
+2751:sktext::gpu::GlyphVector::flatten\28SkWriteBuffer&\29\20const
+2752:sktext::gpu::GlyphVector::Make\28sktext::SkStrikePromise&&\2c\20SkSpan<SkPackedGlyphID\20const>\2c\20sktext::gpu::SubRunAllocator*\29
+2753:sktext::gpu::GlyphVector::MakeFromBuffer\28SkReadBuffer&\2c\20SkStrikeClient\20const*\2c\20sktext::gpu::SubRunAllocator*\29
+2754:sktext::SkStrikePromise::flatten\28SkWriteBuffer&\29\20const
+2755:sktext::SkStrikePromise::MakeFromBuffer\28SkReadBuffer&\2c\20SkStrikeClient\20const*\2c\20SkStrikeCache*\29
+2756:sktext::GlyphRunBuilder::makeGlyphRunList\28sktext::GlyphRun\20const&\2c\20SkPaint\20const&\2c\20SkPoint\29
+2757:sktext::GlyphRun::GlyphRun\28SkFont\20const&\2c\20SkSpan<SkPoint\20const>\2c\20SkSpan<unsigned\20short\20const>\2c\20SkSpan<char\20const>\2c\20SkSpan<unsigned\20int\20const>\2c\20SkSpan<SkPoint\20const>\29
+2758:skpaint_to_grpaint_impl\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20std::__2::optional<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\2c\20SkBlender*\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+2759:skip_literal_string
+2760:skif::\28anonymous\20namespace\29::apply_decal\28skif::LayerSpace<SkMatrix>\20const&\2c\20sk_sp<SkSpecialImage>\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20SkSamplingOptions\20const&\29
+2761:skif::RoundIn\28SkRect\29
+2762:skif::FilterResult::Builder::outputBounds\28std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+2763:skif::FilterResult::Builder::drawShader\28sk_sp<SkShader>\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20bool\29\20const
+2764:skif::FilterResult::Builder::createInputShaders\28skif::LayerSpace<SkIRect>\20const&\2c\20bool\29
+2765:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair>::resize\28int\29
+2766:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\2c\20SkGoodHash>::Pair>::resize\28int\29
+2767:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20int\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20int\2c\20SkGoodHash>::Pair>::removeSlot\28int\29
+2768:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20GrRenderTask*\2c\20GrCheapHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20GrRenderTask*\2c\20GrCheapHash>::Pair>::resize\28int\29
+2769:skia_private::THashTable<skia_private::THashMap<char\20const*\2c\20unsigned\20int\2c\20SkGoodHash>::Pair\2c\20char\20const*\2c\20skia_private::THashMap<char\20const*\2c\20unsigned\20int\2c\20SkGoodHash>::Pair>::resize\28int\29
+2770:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\2c\20SkSL::SymbolTable::SymbolKey\2c\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::resize\28int\29
+2771:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\20const*\2c\20SkSL::RP::SlotRange\2c\20SkGoodHash>::Pair\2c\20SkSL::IRNode\20const*\2c\20skia_private::THashMap<SkSL::IRNode\20const*\2c\20SkSL::RP::SlotRange\2c\20SkGoodHash>::Pair>::resize\28int\29
+2772:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::remove\28skgpu::ganesh::SmallPathShapeDataKey\20const&\29
+2773:skia_private::THashTable<int\2c\20int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>::Traits>::resize\28int\29
+2774:skia_private::THashTable<SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Entry*\2c\20unsigned\20int\2c\20SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Traits>::resize\28int\29
+2775:skia_private::THashTable<SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*\2c\20GrProgramDesc\2c\20SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Traits>::find\28GrProgramDesc\20const&\29\20const
+2776:skia_private::THashTable<GrThreadSafeCache::Entry*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\2c\20GrThreadSafeCache::Entry>::AdaptedTraits>::uncheckedSet\28GrThreadSafeCache::Entry*&&\29
+2777:skia_private::THashTable<GrThreadSafeCache::Entry*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\2c\20GrThreadSafeCache::Entry>::AdaptedTraits>::resize\28int\29
+2778:skia_private::THashTable<GrThreadSafeCache::Entry*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\2c\20GrThreadSafeCache::Entry>::AdaptedTraits>::remove\28skgpu::UniqueKey\20const&\29
+2779:skia_private::THashTable<GrTextureProxy*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrTextureProxy\2c\20skgpu::UniqueKey\2c\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::uncheckedSet\28GrTextureProxy*&&\29
+2780:skia_private::THashTable<GrTextureProxy*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrTextureProxy\2c\20skgpu::UniqueKey\2c\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::resize\28int\29
+2781:skia_private::THashTable<FT_Opaque_Paint_\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>::Traits>::uncheckedSet\28FT_Opaque_Paint_&&\29
+2782:skia_private::THashTable<FT_Opaque_Paint_\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>::Traits>::resize\28int\29
+2783:skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::~THashMap\28\29
+2784:skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::find\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\20const&\29\20const
+2785:skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::THashMap\28std::initializer_list<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair>\29
+2786:skia_private::THashMap<SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkGoodHash>::set\28SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+2787:skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::set\28SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\29
+2788:skia_png_write_chunk
+2789:skia_png_set_sBIT
+2790:skia_png_set_read_fn
+2791:skia_png_set_packing
+2792:skia_png_set_bKGD
+2793:skia_png_save_uint_32
+2794:skia_png_reciprocal2
+2795:skia_png_realloc_array
+2796:skia_png_read_start_row
+2797:skia_png_read_IDAT_data
+2798:skia_png_handle_zTXt
+2799:skia_png_handle_tRNS
+2800:skia_png_handle_tIME
+2801:skia_png_handle_tEXt
+2802:skia_png_handle_sRGB
+2803:skia_png_handle_sPLT
+2804:skia_png_handle_sCAL
+2805:skia_png_handle_sBIT
+2806:skia_png_handle_pHYs
+2807:skia_png_handle_pCAL
+2808:skia_png_handle_oFFs
+2809:skia_png_handle_iTXt
+2810:skia_png_handle_iCCP
+2811:skia_png_handle_hIST
+2812:skia_png_handle_gAMA
+2813:skia_png_handle_cHRM
+2814:skia_png_handle_bKGD
+2815:skia_png_handle_as_unknown
+2816:skia_png_handle_PLTE
+2817:skia_png_do_strip_channel
+2818:skia_png_destroy_read_struct
+2819:skia_png_destroy_info_struct
+2820:skia_png_compress_IDAT
+2821:skia_png_combine_row
+2822:skia_png_colorspace_set_sRGB
+2823:skia_png_check_fp_string
+2824:skia_png_check_fp_number
+2825:skia::textlayout::TypefaceFontStyleSet::createTypeface\28int\29
+2826:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::$_0::operator\28\29\28sk_sp<SkTypeface>\2c\20bool\29\20const
+2827:skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const
+2828:skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29
+2829:skia::textlayout::Run::isResolved\28\29\20const
+2830:skia::textlayout::Run::copyTo\28SkTextBlobBuilder&\2c\20unsigned\20long\2c\20unsigned\20long\29\20const
+2831:skia::textlayout::ParagraphImpl::buildClusterTable\28\29
+2832:skia::textlayout::OneLineShaper::~OneLineShaper\28\29
+2833:skia::textlayout::FontCollection::setDefaultFontManager\28sk_sp<SkFontMgr>\29
+2834:skia::textlayout::FontCollection::getFontManagerOrder\28\29\20const
+2835:skia::textlayout::FontCollection::FontCollection\28\29
+2836:skia::textlayout::Cluster::isSoftBreak\28\29\20const
+2837:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::flush\28GrMeshDrawTarget*\2c\20skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::FlushInfo*\29\20const
+2838:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::~Impl\28\29
+2839:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::programInfo\28\29
+2840:skgpu::ganesh::SurfaceFillContext::discard\28\29
+2841:skgpu::ganesh::SurfaceDrawContext::internalStencilClear\28SkIRect\20const*\2c\20bool\29
+2842:skgpu::ganesh::SurfaceDrawContext::drawPath\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrStyle\20const&\29
+2843:skgpu::ganesh::SurfaceDrawContext::attemptQuadOptimization\28GrClip\20const*\2c\20GrUserStencilSettings\20const*\2c\20DrawQuad*\2c\20GrPaint*\29
+2844:skgpu::ganesh::SurfaceDrawContext::Make\28GrRecordingContext*\2c\20GrColorType\2c\20sk_sp<GrSurfaceProxy>\2c\20sk_sp<SkColorSpace>\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const&\29
+2845:skgpu::ganesh::SurfaceContext::rescaleInto\28skgpu::ganesh::SurfaceFillContext*\2c\20SkIRect\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\29::$_0::operator\28\29\28GrSurfaceProxyView\2c\20SkIRect\29\20const
+2846:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29
+2847:skgpu::ganesh::QuadPerEdgeAA::MinColorType\28SkRGBA4f<\28SkAlphaType\292>\29
+2848:skgpu::ganesh::PathRendererChain::PathRendererChain\28GrRecordingContext*\2c\20skgpu::ganesh::PathRendererChain::Options\20const&\29
+2849:skgpu::ganesh::PathRenderer::getStencilSupport\28GrStyledShape\20const&\29\20const
+2850:skgpu::ganesh::PathCurveTessellator::draw\28GrOpFlushState*\29\20const
+2851:skgpu::ganesh::OpsTask::recordOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const*\2c\20GrCaps\20const&\29
+2852:skgpu::ganesh::FillRectOp::MakeNonAARect\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrUserStencilSettings\20const*\29
+2853:skgpu::ganesh::FillRRectOp::Make\28GrRecordingContext*\2c\20SkArenaAlloc*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20SkRect\20const&\2c\20GrAA\29
+2854:skgpu::ganesh::Device::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+2855:skgpu::ganesh::Device::drawImageQuadDirect\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+2856:skgpu::ganesh::Device::Make\28std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\2c\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>\2c\20SkAlphaType\2c\20skgpu::ganesh::Device::InitContents\29
+2857:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::setup_dashed_rect\28SkRect\20const&\2c\20skgpu::VertexWriter&\2c\20SkMatrix\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashCap\29
+2858:skgpu::ganesh::ClipStack::SaveRecord::invalidateMasks\28GrProxyProvider*\2c\20SkTBlockList<skgpu::ganesh::ClipStack::Mask\2c\201>*\29
+2859:skgpu::ganesh::ClipStack::RawElement::contains\28skgpu::ganesh::ClipStack::SaveRecord\20const&\29\20const
+2860:skgpu::ganesh::AtlasTextOp::operator\20new\28unsigned\20long\29
+2861:skgpu::ganesh::AtlasTextOp::Geometry::Make\28sktext::gpu::AtlasSubRun\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\2c\20sk_sp<SkRefCnt>&&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkArenaAlloc*\29
+2862:skgpu::ganesh::AtlasRenderTask::addAtlasDrawOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrCaps\20const&\29
+2863:skcms_Transform::$_2::operator\28\29\28skcms_Curve\20const*\2c\20int\29\20const
+2864:skcms_MaxRoundtripError
+2865:sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>::~sk_sp\28\29
+2866:sk_free_releaseproc\28void\20const*\2c\20void*\29
+2867:siprintf
+2868:sift
+2869:shallowTextClone\28UText*\2c\20UText\20const*\2c\20UErrorCode*\29
+2870:rotate\28SkDCubic\20const&\2c\20int\2c\20int\2c\20SkDCubic&\29
+2871:res_getResource_73
+2872:read_header\28SkStream*\2c\20SkPngChunkReader*\2c\20SkCodec**\2c\20png_struct_def**\2c\20png_info_def**\29
+2873:read_header\28SkStream*\2c\20SkISize*\29
+2874:quad_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2875:qsort
+2876:psh_globals_set_scale
+2877:ps_parser_skip_PS_token
+2878:ps_builder_done
+2879:portable::uniform_color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+2880:png_text_compress
+2881:png_inflate_read
+2882:png_inflate_claim
+2883:png_image_size
+2884:png_colorspace_endpoints_match
+2885:png_build_16bit_table
+2886:normalize
+2887:next_marker
+2888:morphpoints\28SkPoint*\2c\20SkPoint\20const*\2c\20int\2c\20SkPathMeasure&\2c\20float\29
+2889:make_unpremul_effect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+2890:long\20std::__2::__libcpp_atomic_refcount_decrement\5babi:v160004\5d<long>\28long&\29
+2891:long\20const&\20std::__2::min\5babi:v160004\5d<long>\28long\20const&\2c\20long\20const&\29
+2892:log1p
+2893:locale_getKeywordsStart_73
+2894:load_truetype_glyph
+2895:loadParentsExceptRoot\28UResourceDataEntry*&\2c\20char*\2c\20int\2c\20signed\20char\2c\20char*\2c\20UErrorCode*\29
+2896:line_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2897:lang_find_or_insert\28char\20const*\29
+2898:jpeg_calc_output_dimensions
+2899:inner_scanline\28int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkBlitter*\29
+2900:inflate_table
+2901:increment_simple_rowgroup_ctr
+2902:icu_73::spanOneUTF8\28icu_73::UnicodeSet\20const&\2c\20unsigned\20char\20const*\2c\20int\29
+2903:icu_73::enumGroupNames\28icu_73::UCharNames*\2c\20unsigned\20short\20const*\2c\20int\2c\20int\2c\20signed\20char\20\28*\29\28void*\2c\20int\2c\20UCharNameChoice\2c\20char\20const*\2c\20int\29\2c\20void*\2c\20UCharNameChoice\29
+2904:icu_73::\28anonymous\20namespace\29::appendResult\28char16_t*\2c\20int\2c\20int\2c\20int\2c\20char16_t\20const*\2c\20int\2c\20unsigned\20int\2c\20icu_73::Edits*\29
+2905:icu_73::\28anonymous\20namespace\29::AliasReplacer::replace\28icu_73::Locale\20const&\2c\20icu_73::CharString&\2c\20UErrorCode&\29::$_0::__invoke\28UElement\2c\20UElement\29
+2906:icu_73::UnicodeString::fromUTF8\28icu_73::StringPiece\29
+2907:icu_73::UnicodeString::doCompare\28int\2c\20int\2c\20char16_t\20const*\2c\20int\2c\20int\29\20const
+2908:icu_73::UnicodeString::UnicodeString\28char\20const*\2c\20int\2c\20icu_73::UnicodeString::EInvariant\29
+2909:icu_73::UnicodeString::UnicodeString\28char16_t\20const*\2c\20int\29
+2910:icu_73::UnicodeSet::retainAll\28icu_73::UnicodeSet\20const&\29
+2911:icu_73::UnicodeSet::remove\28int\2c\20int\29
+2912:icu_73::UnicodeSet::exclusiveOr\28int\20const*\2c\20int\2c\20signed\20char\29
+2913:icu_73::UnicodeSet::ensureBufferCapacity\28int\29
+2914:icu_73::UnicodeSet::applyIntPropertyValue\28UProperty\2c\20int\2c\20UErrorCode&\29
+2915:icu_73::UnicodeSet::applyFilter\28signed\20char\20\28*\29\28int\2c\20void*\29\2c\20void*\2c\20icu_73::UnicodeSet\20const*\2c\20UErrorCode&\29
+2916:icu_73::UnicodeSet::UnicodeSet\28icu_73::UnicodeSet\20const&\29
+2917:icu_73::UVector::sort\28int\20\28*\29\28UElement\2c\20UElement\29\2c\20UErrorCode&\29
+2918:icu_73::UVector::removeElement\28void*\29
+2919:icu_73::UVector::insertElementAt\28void*\2c\20int\2c\20UErrorCode&\29
+2920:icu_73::UVector::UVector\28UErrorCode&\29
+2921:icu_73::UVector32::setSize\28int\29
+2922:icu_73::UCharsTrieBuilder::add\28icu_73::UnicodeString\20const&\2c\20int\2c\20UErrorCode&\29
+2923:icu_73::StringTrieBuilder::~StringTrieBuilder\28\29
+2924:icu_73::SimpleFilteredSentenceBreakIterator::internalNext\28int\29
+2925:icu_73::RuleCharacterIterator::atEnd\28\29\20const
+2926:icu_73::ResourceDataValue::getString\28int&\2c\20UErrorCode&\29\20const
+2927:icu_73::ResourceDataValue::getArray\28UErrorCode&\29\20const
+2928:icu_73::ReorderingBuffer::append\28char16_t\20const*\2c\20int\2c\20signed\20char\2c\20unsigned\20char\2c\20unsigned\20char\2c\20UErrorCode&\29
+2929:icu_73::PatternProps::isWhiteSpace\28int\29
+2930:icu_73::Normalizer2Impl::~Normalizer2Impl\28\29
+2931:icu_73::Normalizer2Impl::decompose\28int\2c\20unsigned\20short\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+2932:icu_73::Normalizer2Impl::decompose\28char16_t\20const*\2c\20char16_t\20const*\2c\20icu_73::ReorderingBuffer*\2c\20UErrorCode&\29\20const
+2933:icu_73::Normalizer2Impl::decomposeShort\28char16_t\20const*\2c\20char16_t\20const*\2c\20signed\20char\2c\20signed\20char\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+2934:icu_73::LocaleUtility::initNameFromLocale\28icu_73::Locale\20const&\2c\20icu_73::UnicodeString&\29
+2935:icu_73::LocaleBuilder::~LocaleBuilder\28\29
+2936:icu_73::Locale::getKeywordValue\28icu_73::StringPiece\2c\20icu_73::ByteSink&\2c\20UErrorCode&\29\20const
+2937:icu_73::Locale::getDefault\28\29
+2938:icu_73::ICUServiceKey::~ICUServiceKey\28\29
+2939:icu_73::ICUResourceBundleFactory::~ICUResourceBundleFactory\28\29
+2940:icu_73::ICULocaleService::~ICULocaleService\28\29
+2941:icu_73::EmojiProps::getSingleton\28UErrorCode&\29
+2942:icu_73::Edits::reset\28\29
+2943:icu_73::DictionaryBreakEngine::~DictionaryBreakEngine\28\29
+2944:icu_73::CharString::getAppendBuffer\28int\2c\20int\2c\20int&\2c\20UErrorCode&\29
+2945:icu_73::BytesTrie::readValue\28unsigned\20char\20const*\2c\20int\29
+2946:icu_73::ByteSinkUtil::appendChange\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20char16_t\20const*\2c\20int\2c\20icu_73::ByteSink&\2c\20icu_73::Edits*\2c\20UErrorCode&\29
+2947:icu_73::BreakIterator::makeInstance\28icu_73::Locale\20const&\2c\20int\2c\20UErrorCode&\29
+2948:hb_tag_from_string
+2949:hb_shape_plan_destroy
+2950:hb_script_get_horizontal_direction
+2951:hb_paint_extents_context_t::push_clip\28hb_extents_t\29
+2952:hb_ot_color_palette_get_colors
+2953:hb_lazy_loader_t<OT::vmtx_accelerator_t\2c\20hb_face_lazy_loader_t<OT::vmtx_accelerator_t\2c\2012u>\2c\20hb_face_t\2c\2012u\2c\20OT::vmtx_accelerator_t>::get\28\29\20const
+2954:hb_lazy_loader_t<OT::kern\2c\20hb_table_lazy_loader_t<OT::kern\2c\2023u\2c\20true>\2c\20hb_face_t\2c\2023u\2c\20hb_blob_t>::get\28\29\20const
+2955:hb_lazy_loader_t<OT::head\2c\20hb_table_lazy_loader_t<OT::head\2c\201u\2c\20true>\2c\20hb_face_t\2c\201u\2c\20hb_blob_t>::get\28\29\20const
+2956:hb_lazy_loader_t<OT::fvar\2c\20hb_table_lazy_loader_t<OT::fvar\2c\2018u\2c\20true>\2c\20hb_face_t\2c\2018u\2c\20hb_blob_t>::get\28\29\20const
+2957:hb_hashmap_t<unsigned\20int\2c\20unsigned\20int\2c\20true>::alloc\28unsigned\20int\29
+2958:hb_font_funcs_destroy
+2959:hb_face_get_upem
+2960:hb_face_destroy
+2961:hb_draw_cubic_to_nil\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+2962:hb_buffer_set_segment_properties
+2963:hb_blob_create
+2964:gray_render_line
+2965:get_vendor\28char\20const*\29
+2966:get_renderer\28char\20const*\2c\20GrGLExtensions\20const&\29
+2967:get_joining_type\28unsigned\20int\2c\20hb_unicode_general_category_t\29
+2968:getDefaultScript\28icu_73::CharString\20const&\2c\20icu_73::CharString\20const&\29
+2969:generate_distance_field_from_image\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\29
+2970:ft_var_readpackeddeltas
+2971:ft_var_get_item_delta
+2972:ft_var_done_item_variation_store
+2973:ft_glyphslot_done
+2974:ft_glyphslot_alloc_bitmap
+2975:freelocale
+2976:free_pool
+2977:fquad_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2978:fp_barrierf
+2979:fline_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2980:fixN0c\28BracketData*\2c\20int\2c\20int\2c\20unsigned\20char\29
+2981:findFirstExisting\28char\20const*\2c\20char*\2c\20char\20const*\2c\20UResOpenType\2c\20signed\20char*\2c\20signed\20char*\2c\20signed\20char*\2c\20UErrorCode*\29
+2982:fcubic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2983:fconic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2984:fclose
+2985:expm1f
+2986:emscripten::internal::MethodInvoker<void\20\28SkFont::*\29\28float\29\2c\20void\2c\20SkFont*\2c\20float>::invoke\28void\20\28SkFont::*\20const&\29\28float\29\2c\20SkFont*\2c\20float\29
+2987:emscripten::internal::MethodInvoker<sk_sp<SkImage>\20\28SkAnimatedImage::*\29\28\29\2c\20sk_sp<SkImage>\2c\20SkAnimatedImage*>::invoke\28sk_sp<SkImage>\20\28SkAnimatedImage::*\20const&\29\28\29\2c\20SkAnimatedImage*\29
+2988:emscripten::internal::Invoker<std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\2c\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\2c\20SimpleParagraphStyle\2c\20sk_sp<SkFontMgr>>::invoke\28std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\2c\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\20\28*\29\28SimpleParagraphStyle\2c\20sk_sp<SkFontMgr>\29\2c\20SimpleParagraphStyle*\2c\20sk_sp<SkFontMgr>*\29
+2989:emscripten::internal::FunctionInvoker<int\20\28*\29\28SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29\2c\20int\2c\20SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int>::invoke\28int\20\28**\29\28SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29\2c\20SkCanvas*\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29
+2990:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28SkFontMgr&\2c\20int\29\2c\20emscripten::val\2c\20SkFontMgr&\2c\20int>::invoke\28emscripten::val\20\28**\29\28SkFontMgr&\2c\20int\29\2c\20SkFontMgr*\2c\20int\29
+2991:do_scanline\28int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkBlitter*\29
+2992:doLoadFromIndividualFiles\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20signed\20char\20\28*\29\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29\2c\20void*\2c\20UErrorCode*\2c\20UErrorCode*\29
+2993:doLoadFromCommonData\28signed\20char\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20signed\20char\20\28*\29\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29\2c\20void*\2c\20UErrorCode*\2c\20UErrorCode*\29
+2994:decompose\28hb_ot_shape_normalize_context_t\20const*\2c\20bool\2c\20unsigned\20int\29
+2995:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::ganesh::DashOp::AAMode\2c\20SkMatrix\20const&\2c\20bool\29::$_0>\28skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::ganesh::DashOp::AAMode\2c\20SkMatrix\20const&\2c\20bool\29::$_0&&\29::'lambda'\28char*\29::__invoke\28char*\29
+2996:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrProgramInfo*\20SkArenaAlloc::make<GrProgramInfo\2c\20GrCaps\20const&\2c\20GrSurfaceProxyView\20const&\2c\20bool&\2c\20GrPipeline*&\2c\20GrUserStencilSettings\20const*\2c\20\28anonymous\20namespace\29::DrawAtlasPathShader*&\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags&\2c\20GrLoadOp&>\28GrCaps\20const&\2c\20GrSurfaceProxyView\20const&\2c\20bool&\2c\20GrPipeline*&\2c\20GrUserStencilSettings\20const*&&\2c\20\28anonymous\20namespace\29::DrawAtlasPathShader*&\2c\20GrPrimitiveType&&\2c\20GrXferBarrierFlags&\2c\20GrLoadOp&\29::'lambda'\28void*\29>\28GrProgramInfo&&\29::'lambda'\28char*\29::__invoke\28char*\29
+2997:cubic_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2998:conic_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2999:char\20const*\20std::__2::find\5babi:v160004\5d<char\20const*\2c\20char>\28char\20const*\2c\20char\20const*\2c\20char\20const&\29
+3000:char\20const*\20std::__2::__rewrap_range\5babi:v160004\5d<char\20const*\2c\20char\20const*\2c\20char\20const*>\28char\20const*\2c\20char\20const*\29
+3001:cff_index_get_pointers
+3002:cff2_path_param_t::move_to\28CFF::point_t\20const&\29
+3003:cff1_path_param_t::move_to\28CFF::point_t\20const&\29
+3004:cf2_glyphpath_computeOffset
+3005:cached_mask_gamma\28float\2c\20float\2c\20float\29
+3006:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3007:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3008:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3009:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3010:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3011:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3012:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3013:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+3014:byn$mgfn-shared$void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+3015:byn$mgfn-shared$ultag_isExtensionSubtags_73
+3016:byn$mgfn-shared$std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorArray\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+3017:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+3018:byn$mgfn-shared$skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>\20const&\29
+3019:byn$mgfn-shared$skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>&&\29
+3020:byn$mgfn-shared$skia_private::TArray<SkPath\2c\20true>::push_back_raw\28int\29
+3021:byn$mgfn-shared$skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+3022:byn$mgfn-shared$non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+3023:byn$mgfn-shared$icu_73::LaoBreakEngine::~LaoBreakEngine\28\29.1
+3024:byn$mgfn-shared$icu_73::LaoBreakEngine::~LaoBreakEngine\28\29
+3025:byn$mgfn-shared$getInPC\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+3026:byn$mgfn-shared$__cxx_global_array_dtor.1
+3027:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+3028:byn$mgfn-shared$SkSL::BreakStatement::clone\28\29\20const
+3029:byn$mgfn-shared$SkRuntimeEffect::MakeForColorFilter\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+3030:byn$mgfn-shared$SkImageInfo::MakeN32Premul\28int\2c\20int\29
+3031:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\28\29.1
+3032:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\28\29
+3033:byn$mgfn-shared$SkBinaryWriteBuffer::writeScalarArray\28float\20const*\2c\20unsigned\20int\29
+3034:byn$mgfn-shared$Round_To_Grid
+3035:byn$mgfn-shared$LineConicIntersections::addLineNearEndPoints\28\29
+3036:byn$mgfn-shared$GrModulateAtlasCoverageEffect::onMakeProgramImpl\28\29\20const
+3037:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+3038:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\20const*\29\20const
+3039:byn$mgfn-shared$DefaultGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+3040:build_tree
+3041:bracketAddOpening\28BracketData*\2c\20char16_t\2c\20int\29
+3042:bool\20OT::glyf_impl::Glyph::get_points<OT::glyf_accelerator_t>\28hb_font_t*\2c\20OT::glyf_accelerator_t\20const&\2c\20contour_point_vector_t&\2c\20contour_point_vector_t*\2c\20head_maxp_info_t*\2c\20unsigned\20int*\2c\20bool\2c\20bool\2c\20bool\2c\20hb_array_t<int>\2c\20hb_map_t*\2c\20unsigned\20int\2c\20unsigned\20int*\29\20const
+3043:bool\20OT::glyf_accelerator_t::get_points<OT::glyf_accelerator_t::points_aggregator_t>\28hb_font_t*\2c\20unsigned\20int\2c\20OT::glyf_accelerator_t::points_aggregator_t\29\20const
+3044:bool\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GSUB_impl::SubstLookup>\28hb_sanitize_context_t*\29\20const
+3045:bool\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GPOS_impl::PosLookup>\28hb_sanitize_context_t*\29\20const
+3046:blit_aaa_trapezoid_row\28AdditiveBlitter*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char*\2c\20bool\2c\20bool\2c\20bool\29
+3047:auto\20std::__2::__unwrap_range\5babi:v160004\5d<char\20const*\2c\20char\20const*>\28char\20const*\2c\20char\20const*\29
+3048:atan
+3049:alloc_large
+3050:af_glyph_hints_done
+3051:add_quad\28SkPoint\20const*\2c\20skia_private::TArray<PathSegment\2c\20true>*\29
+3052:acos
+3053:aaa_fill_path\28SkPath\20const&\2c\20SkIRect\20const&\2c\20AdditiveBlitter*\2c\20int\2c\20int\2c\20bool\2c\20bool\2c\20bool\29
+3054:_get_path\28OT::cff1::accelerator_t\20const*\2c\20hb_font_t*\2c\20unsigned\20int\2c\20hb_draw_session_t&\2c\20bool\2c\20CFF::point_t*\29
+3055:_get_bounds\28OT::cff1::accelerator_t\20const*\2c\20unsigned\20int\2c\20bounds_t&\2c\20bool\29
+3056:_getVariant\28char\20const*\2c\20char\2c\20icu_73::ByteSink&\2c\20signed\20char\29
+3057:_enumPropertyStartsRange\28void\20const*\2c\20int\2c\20int\2c\20unsigned\20int\29
+3058:_embind_register_bindings
+3059:_canonicalize\28char\20const*\2c\20icu_73::ByteSink&\2c\20unsigned\20int\2c\20UErrorCode*\29
+3060:__trunctfdf2
+3061:__towrite
+3062:__toread
+3063:__subtf3
+3064:__strchrnul
+3065:__rem_pio2f
+3066:__rem_pio2
+3067:__math_uflowf
+3068:__math_oflowf
+3069:__fwritex
+3070:__dynamic_cast
+3071:__cxxabiv1::__class_type_info::process_static_type_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\29\20const
+3072:__cxxabiv1::__class_type_info::process_static_type_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\29\20const
+3073:__cxxabiv1::__class_type_info::process_found_base_class\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+3074:__cxxabiv1::__base_class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+3075:\28anonymous\20namespace\29::ulayout_ensureData\28UErrorCode&\29
+3076:\28anonymous\20namespace\29::shape_contains_rect\28GrShape\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkMatrix\20const&\2c\20bool\29
+3077:\28anonymous\20namespace\29::getRange\28void\20const*\2c\20int\2c\20unsigned\20int\20\28*\29\28void\20const*\2c\20unsigned\20int\29\2c\20void\20const*\2c\20unsigned\20int*\29
+3078:\28anonymous\20namespace\29::generateFacePathCOLRv1\28FT_FaceRec_*\2c\20unsigned\20short\2c\20SkPath*\29
+3079:\28anonymous\20namespace\29::convert_noninflect_cubic_to_quads_with_constraint\28SkPoint\20const*\2c\20float\2c\20SkPathFirstDirection\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20int\29
+3080:\28anonymous\20namespace\29::convert_noninflect_cubic_to_quads\28SkPoint\20const*\2c\20float\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20int\2c\20bool\2c\20bool\29
+3081:\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const
+3082:\28anonymous\20namespace\29::bloat_quad\28SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkMatrix\20const*\2c\20\28anonymous\20namespace\29::BezierVertex*\29
+3083:\28anonymous\20namespace\29::SkEmptyTypeface::onMakeClone\28SkFontArguments\20const&\29\20const
+3084:\28anonymous\20namespace\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\28\29.1
+3085:\28anonymous\20namespace\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\28\29
+3086:\28anonymous\20namespace\29::SkBlurImageFilter::mapSigma\28skif::Mapping\20const&\2c\20bool\29\20const
+3087:\28anonymous\20namespace\29::DrawAtlasOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+3088:\28anonymous\20namespace\29::DrawAtlasOpImpl::programInfo\28\29
+3089:\28anonymous\20namespace\29::DrawAtlasOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+3090:\28anonymous\20namespace\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29\20const
+3091:\28anonymous\20namespace\29::DirectMaskSubRun::glyphs\28\29\20const
+3092:WebPRescaleNeededLines
+3093:WebPInitDecBufferInternal
+3094:WebPInitCustomIo
+3095:WebPGetFeaturesInternal
+3096:WebPDemuxGetFrame
+3097:VP8LInitBitReader
+3098:VP8LColorIndexInverseTransformAlpha
+3099:VP8InitIoInternal
+3100:VP8InitBitReader
+3101:UDatamemory_assign_73
+3102:T_CString_toUpperCase_73
+3103:TT_Vary_Apply_Glyph_Deltas
+3104:TT_Set_Var_Design
+3105:SkWuffsCodec::decodeFrame\28\29
+3106:SkVertices::MakeCopy\28SkVertices::VertexMode\2c\20int\2c\20SkPoint\20const*\2c\20SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20short\20const*\29
+3107:SkVertices::Builder::texCoords\28\29
+3108:SkVertices::Builder::positions\28\29
+3109:SkVertices::Builder::init\28SkVertices::Desc\20const&\29
+3110:SkVertices::Builder::colors\28\29
+3111:SkVertices::Builder::Builder\28SkVertices::VertexMode\2c\20int\2c\20int\2c\20unsigned\20int\29
+3112:SkUnicode_icu::extractPositions\28char\20const*\2c\20int\2c\20SkUnicode::BreakType\2c\20char\20const*\2c\20std::__2::function<void\20\28int\2c\20int\29>\20const&\29
+3113:SkTypeface_FreeType::Scanner::GetAxes\28FT_FaceRec_*\2c\20skia_private::STArray<4\2c\20SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>*\29
+3114:SkTypeface_FreeType::MakeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29
+3115:SkTypeface::getTableSize\28unsigned\20int\29\20const
+3116:SkTiffImageFileDirectory::getEntryValuesGeneric\28unsigned\20short\2c\20unsigned\20short\2c\20unsigned\20int\2c\20void*\29\20const
+3117:SkTextBlobRunIterator::positioning\28\29\20const
+3118:SkTSpan::splitAt\28SkTSpan*\2c\20double\2c\20SkArenaAlloc*\29
+3119:SkTSect::computePerpendiculars\28SkTSect*\2c\20SkTSpan*\2c\20SkTSpan*\29
+3120:SkTDStorage::insert\28int\29
+3121:SkTDStorage::calculateSizeOrDie\28int\29::$_0::operator\28\29\28\29\20const
+3122:SkTDPQueue<GrGpuResource*\2c\20&GrResourceCache::CompareTimestamp\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\2c\20&GrResourceCache::AccessResourceIndex\28GrGpuResource*\20const&\29>::percolateDownIfNecessary\28int\29
+3123:SkTConic::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+3124:SkSurface_Base::outstandingImageSnapshot\28\29\20const
+3125:SkSurface_Base::SkSurface_Base\28int\2c\20int\2c\20SkSurfaceProps\20const*\29
+3126:SkSurface::width\28\29\20const
+3127:SkStrokerPriv::CapFactory\28SkPaint::Cap\29
+3128:SkStrokeRec::getInflationRadius\28\29\20const
+3129:SkString::equals\28char\20const*\29\20const
+3130:SkStrikeSpec::MakeTransformMask\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\29
+3131:SkStrikeSpec::MakePath\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\29
+3132:SkStrike::glyph\28SkGlyphDigest\29
+3133:SkSpecialImages::AsView\28GrRecordingContext*\2c\20SkSpecialImage\20const*\29
+3134:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::endOfCurrentRun\28\29\20const
+3135:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::atEnd\28\29\20const
+3136:SkShaper::MakeShapeDontWrapOrReorder\28std::__2::unique_ptr<SkUnicode\2c\20std::__2::default_delete<SkUnicode>>\2c\20sk_sp<SkFontMgr>\29
+3137:SkShadowTessellator::MakeAmbient\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPoint3\20const&\2c\20bool\29
+3138:SkScan::FillTriangle\28SkPoint\20const*\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+3139:SkScan::FillPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+3140:SkScan::FillIRect\28SkIRect\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+3141:SkScan::AntiHairLine\28SkPoint\20const*\2c\20int\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+3142:SkScan::AntiFillPath\28SkPath\20const&\2c\20SkRegion\20const&\2c\20SkBlitter*\2c\20bool\29
+3143:SkScalerContext_FreeType_Base::drawSVGGlyph\28FT_FaceRec_*\2c\20SkGlyph\20const&\2c\20unsigned\20int\2c\20SkSpan<unsigned\20int>\2c\20SkCanvas*\29
+3144:SkScalerContext_FreeType::computeGlyphBounds\28SkGlyph\20const&\2c\20SkRect*\2c\20bool\29
+3145:SkScalarInterpFunc\28float\2c\20float\20const*\2c\20float\20const*\2c\20int\29
+3146:SkSLTypeString\28SkSLType\29
+3147:SkSL::simplify_negation\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\29
+3148:SkSL::simplify_matrix_multiplication\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20int\2c\20int\2c\20int\2c\20int\29
+3149:SkSL::simplify_componentwise\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29
+3150:SkSL::build_argument_type_list\28SkSpan<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20const>\29
+3151:SkSL::\28anonymous\20namespace\29::SwitchCaseContainsExit::visitStatement\28SkSL::Statement\20const&\29
+3152:SkSL::\28anonymous\20namespace\29::ReturnsInputAlphaVisitor::returnsInputAlpha\28SkSL::Expression\20const&\29
+3153:SkSL::\28anonymous\20namespace\29::ProgramUsageVisitor::visitExpression\28SkSL::Expression\20const&\29
+3154:SkSL::\28anonymous\20namespace\29::ConstantExpressionVisitor::visitExpression\28SkSL::Expression\20const&\29
+3155:SkSL::Variable::setGlobalVarDeclaration\28SkSL::GlobalVarDeclaration*\29
+3156:SkSL::Variable::globalVarDeclaration\28\29\20const
+3157:SkSL::Variable::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Position\2c\20SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20SkSL::Type\20const*\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::VariableStorage\29
+3158:SkSL::Type::MakeSamplerType\28char\20const*\2c\20SkSL::Type\20const&\29
+3159:SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::addDeclaringElement\28SkSL::ProgramElement\20const*\29
+3160:SkSL::ThreadContext::~ThreadContext\28\29
+3161:SkSL::ThreadContext::Context\28\29
+3162:SkSL::TernaryExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+3163:SkSL::SymbolTable::isType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+3164:SkSL::SampleUsage::merge\28SkSL::SampleUsage\20const&\29
+3165:SkSL::ReturnStatement::~ReturnStatement\28\29.1
+3166:SkSL::ReturnStatement::~ReturnStatement\28\29
+3167:SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\28\29
+3168:SkSL::RP::Generator::pushTernaryExpression\28SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+3169:SkSL::RP::Generator::pushStructuredComparison\28SkSL::RP::LValue*\2c\20SkSL::Operator\2c\20SkSL::RP::LValue*\2c\20SkSL::Type\20const&\29
+3170:SkSL::RP::Generator::pushMatrixMultiply\28SkSL::RP::LValue*\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20int\2c\20int\2c\20int\2c\20int\29
+3171:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\28\29
+3172:SkSL::RP::Builder::push_uniform\28SkSL::RP::SlotRange\29
+3173:SkSL::RP::Builder::merge_condition_mask\28\29
+3174:SkSL::RP::Builder::jump\28int\29
+3175:SkSL::RP::Builder::branch_if_no_active_lanes_on_stack_top_equal\28int\2c\20int\29
+3176:SkSL::Pool::~Pool\28\29
+3177:SkSL::Pool::detachFromThread\28\29
+3178:SkSL::PipelineStage::ConvertProgram\28SkSL::Program\20const&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20SkSL::PipelineStage::Callbacks*\29
+3179:SkSL::Parser::unaryExpression\28\29
+3180:SkSL::Parser::swizzle\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+3181:SkSL::Parser::statementOrNop\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+3182:SkSL::Parser::block\28\29
+3183:SkSL::Operator::getBinaryPrecedence\28\29\20const
+3184:SkSL::ModuleLoader::loadGPUModule\28SkSL::Compiler*\29
+3185:SkSL::ModifierFlags::checkPermittedFlags\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ModifierFlags\29\20const
+3186:SkSL::Mangler::uniqueName\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::SymbolTable*\29
+3187:SkSL::LiteralType::slotType\28unsigned\20long\29\20const
+3188:SkSL::Layout::operator==\28SkSL::Layout\20const&\29\20const
+3189:SkSL::Layout::checkPermittedLayout\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkEnumBitMask<SkSL::LayoutFlag>\29\20const
+3190:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\28\29
+3191:SkSL::GLSLCodeGenerator::writeLiteral\28SkSL::Literal\20const&\29
+3192:SkSL::GLSLCodeGenerator::writeFunctionDeclaration\28SkSL::FunctionDeclaration\20const&\29
+3193:SkSL::ForStatement::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ForLoopPositions\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::LoopUnrollInfo\2c\20std::__2::default_delete<SkSL::LoopUnrollInfo>>\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+3194:SkSL::FieldAccess::description\28SkSL::OperatorPrecedence\29\20const
+3195:SkSL::Expression::isIncomplete\28SkSL::Context\20const&\29\20const
+3196:SkSL::Expression::compareConstant\28SkSL::Expression\20const&\29\20const
+3197:SkSL::DebugTracePriv::~DebugTracePriv\28\29
+3198:SkSL::Context::Context\28SkSL::BuiltinTypes\20const&\2c\20SkSL::ShaderCaps\20const*\2c\20SkSL::ErrorReporter&\29
+3199:SkSL::ConstructorArrayCast::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+3200:SkSL::ConstructorArray::~ConstructorArray\28\29
+3201:SkSL::ConstructorArray::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+3202:SkSL::Compiler::runInliner\28SkSL::Inliner*\2c\20std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>\2c\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>>\20const&\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\2c\20SkSL::ProgramUsage*\29
+3203:SkSL::Block::MakeBlock\28SkSL::Position\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>\2c\20SkSL::Block::Kind\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+3204:SkSL::Analysis::CheckProgramStructure\28SkSL::Program\20const&\2c\20bool\29::ProgramSizeVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+3205:SkSL::Analysis::CallsColorTransformIntrinsics\28SkSL::Program\20const&\29
+3206:SkSL::AliasType::bitWidth\28\29\20const
+3207:SkRuntimeShaderBuilder::~SkRuntimeShaderBuilder\28\29
+3208:SkRuntimeShaderBuilder::makeShader\28SkMatrix\20const*\29\20const
+3209:SkRuntimeEffectPriv::VarAsUniform\28SkSL::Variable\20const&\2c\20SkSL::Context\20const&\2c\20unsigned\20long*\29
+3210:SkRuntimeEffectPriv::UniformsAsSpan\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20sk_sp<SkData\20const>\2c\20bool\2c\20SkColorSpace\20const*\2c\20SkArenaAlloc*\29
+3211:SkRuntimeEffectPriv::TransformUniforms\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20sk_sp<SkData\20const>\2c\20SkColorSpace\20const*\29
+3212:SkRuntimeEffectPriv::TransformUniforms\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20sk_sp<SkData\20const>\2c\20SkColorSpaceXformSteps\20const&\29
+3213:SkRuntimeEffect::makeShader\28sk_sp<SkData\20const>\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\2c\20SkMatrix\20const*\29\20const
+3214:SkResourceCache::checkMessages\28\29
+3215:SkResourceCache::NewCachedData\28unsigned\20long\29
+3216:SkRegion::translate\28int\2c\20int\2c\20SkRegion*\29\20const
+3217:SkReduceOrder::Cubic\28SkPoint\20const*\2c\20SkPoint*\29
+3218:SkRectPriv::QuadContainsRect\28SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20float\29
+3219:SkRectPriv::ClosestDisjointEdge\28SkIRect\20const&\2c\20SkIRect\20const&\29
+3220:SkRecords::PreCachedPath::PreCachedPath\28SkPath\20const&\29
+3221:SkRecords::FillBounds::pushSaveBlock\28SkPaint\20const*\29
+3222:SkRecordDraw\28SkRecord\20const&\2c\20SkCanvas*\2c\20SkPicture\20const*\20const*\2c\20SkDrawable*\20const*\2c\20int\2c\20SkBBoxHierarchy\20const*\2c\20SkPicture::AbortCallback*\29
+3223:SkReadBuffer::readPath\28SkPath*\29
+3224:SkReadBuffer::readByteArrayAsData\28\29
+3225:SkRasterPipelineBlitter::blitRectWithTrace\28int\2c\20int\2c\20int\2c\20int\2c\20bool\29
+3226:SkRasterPipelineBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+3227:SkRasterPipelineBlitter::Create\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkArenaAlloc*\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20bool\2c\20SkShader\20const*\29
+3228:SkRasterPipeline::append_load\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+3229:SkRasterClip::op\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkClipOp\2c\20bool\29
+3230:SkRRectPriv::ConservativeIntersect\28SkRRect\20const&\2c\20SkRRect\20const&\29
+3231:SkRRect::scaleRadii\28\29
+3232:SkRRect::AreRectAndRadiiValid\28SkRect\20const&\2c\20SkPoint\20const*\29
+3233:SkRBuffer::skip\28unsigned\20long\29
+3234:SkPixmapUtils::SwapWidthHeight\28SkImageInfo\20const&\29
+3235:SkPixmap::setColorSpace\28sk_sp<SkColorSpace>\29
+3236:SkPixelRef::~SkPixelRef\28\29
+3237:SkPixelRef::notifyPixelsChanged\28\29
+3238:SkPictureRecorder::beginRecording\28SkRect\20const&\2c\20sk_sp<SkBBoxHierarchy>\29
+3239:SkPictureRecord::addPathToHeap\28SkPath\20const&\29
+3240:SkPictureData::getPath\28SkReadBuffer*\29\20const
+3241:SkPicture::serialize\28SkWStream*\2c\20SkSerialProcs\20const*\2c\20SkRefCntSet*\2c\20bool\29\20const
+3242:SkPathWriter::update\28SkOpPtT\20const*\29
+3243:SkPathStroker::strokeCloseEnough\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20SkQuadConstruct*\29\20const
+3244:SkPathStroker::finishContour\28bool\2c\20bool\29
+3245:SkPathRef::reset\28\29
+3246:SkPathRef::isRRect\28SkRRect*\2c\20bool*\2c\20unsigned\20int*\29\20const
+3247:SkPathRef::addGenIDChangeListener\28sk_sp<SkIDChangeListener>\29
+3248:SkPathPriv::IsRectContour\28SkPath\20const&\2c\20bool\2c\20int*\2c\20SkPoint\20const**\2c\20bool*\2c\20SkPathDirection*\2c\20SkRect*\29
+3249:SkPathEffectBase::onAsPoints\28SkPathEffectBase::PointData*\2c\20SkPath\20const&\2c\20SkStrokeRec\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const*\29\20const
+3250:SkPathEffect::filterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\29\20const
+3251:SkPathBuilder::quadTo\28SkPoint\2c\20SkPoint\29
+3252:SkPathBuilder::cubicTo\28SkPoint\2c\20SkPoint\2c\20SkPoint\29
+3253:SkPath::writeToMemory\28void*\29\20const
+3254:SkPath::reversePathTo\28SkPath\20const&\29
+3255:SkPath::rQuadTo\28float\2c\20float\2c\20float\2c\20float\29
+3256:SkPath::contains\28float\2c\20float\29\20const
+3257:SkPath::arcTo\28float\2c\20float\2c\20float\2c\20SkPath::ArcSize\2c\20SkPathDirection\2c\20float\2c\20float\29
+3258:SkPath::approximateBytesUsed\28\29\20const
+3259:SkPath::addCircle\28float\2c\20float\2c\20float\2c\20SkPathDirection\29
+3260:SkPath::Rect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+3261:SkParsePath::ToSVGString\28SkPath\20const&\2c\20SkParsePath::PathEncoding\29::$_0::operator\28\29\28char\2c\20SkPoint\20const*\2c\20unsigned\20long\29\20const
+3262:SkParse::FindScalar\28char\20const*\2c\20float*\29
+3263:SkPairPathEffect::flatten\28SkWriteBuffer&\29\20const
+3264:SkPaintToGrPaintWithBlend\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20SkBlender*\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+3265:SkPaint::refBlender\28\29\20const
+3266:SkPaint::getBlendMode_or\28SkBlendMode\29\20const
+3267:SkPackARGB_as_RGBA\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+3268:SkPackARGB_as_BGRA\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+3269:SkOpSpan::setOppSum\28int\29
+3270:SkOpSegment::markAndChaseWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20int\2c\20SkOpSpanBase**\29
+3271:SkOpSegment::markAllDone\28\29
+3272:SkOpSegment::activeWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\29
+3273:SkOpPtT::contains\28SkOpSegment\20const*\29\20const
+3274:SkOpEdgeBuilder::closeContour\28SkPoint\20const&\2c\20SkPoint\20const&\29
+3275:SkOpCoincidence::releaseDeleted\28\29
+3276:SkOpCoincidence::markCollapsed\28SkOpPtT*\29
+3277:SkOpCoincidence::findOverlaps\28SkOpCoincidence*\29\20const
+3278:SkOpCoincidence::expand\28\29
+3279:SkOpCoincidence::apply\28\29
+3280:SkOpAngle::orderable\28SkOpAngle*\29
+3281:SkOpAngle::computeSector\28\29
+3282:SkNullBlitter::~SkNullBlitter\28\29
+3283:SkNoPixelsDevice::SkNoPixelsDevice\28SkIRect\20const&\2c\20SkSurfaceProps\20const&\2c\20sk_sp<SkColorSpace>\29
+3284:SkNoPixelsDevice::SkNoPixelsDevice\28SkIRect\20const&\2c\20SkSurfaceProps\20const&\29
+3285:SkNoDestructor<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>>::SkNoDestructor\28skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>&&\29
+3286:SkMessageBus<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20GrDirectContext::DirectContextID\2c\20false>::Get\28\29
+3287:SkMemoryStream::SkMemoryStream\28void\20const*\2c\20unsigned\20long\2c\20bool\29
+3288:SkMemoryStream::SkMemoryStream\28sk_sp<SkData>\29
+3289:SkMatrixPriv::InverseMapRect\28SkMatrix\20const&\2c\20SkRect*\2c\20SkRect\20const&\29
+3290:SkMatrix::setRotate\28float\29
+3291:SkMatrix::setPolyToPoly\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20int\29
+3292:SkMatrix::postSkew\28float\2c\20float\29
+3293:SkMatrix::invert\28SkMatrix*\29\20const
+3294:SkMatrix::getMinScale\28\29\20const
+3295:SkMaskBuilder::PrepareDestination\28int\2c\20int\2c\20SkMask\20const&\29
+3296:SkMakeBitmapShaderForPaint\28SkPaint\20const&\2c\20SkBitmap\20const&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const*\2c\20SkCopyPixelsMode\29
+3297:SkMD5::write\28void\20const*\2c\20unsigned\20long\29
+3298:SkLineClipper::ClipLine\28SkPoint\20const*\2c\20SkRect\20const&\2c\20SkPoint*\2c\20bool\29
+3299:SkJSONWriter::separator\28bool\29
+3300:SkIntersections::intersectRay\28SkDQuad\20const&\2c\20SkDLine\20const&\29
+3301:SkIntersections::intersectRay\28SkDLine\20const&\2c\20SkDLine\20const&\29
+3302:SkIntersections::intersectRay\28SkDCubic\20const&\2c\20SkDLine\20const&\29
+3303:SkIntersections::intersectRay\28SkDConic\20const&\2c\20SkDLine\20const&\29
+3304:SkIntersections::cleanUpParallelLines\28bool\29
+3305:SkImages::RasterFromBitmap\28SkBitmap\20const&\29
+3306:SkImage_Raster::SkImage_Raster\28SkImageInfo\20const&\2c\20sk_sp<SkData>\2c\20unsigned\20long\2c\20unsigned\20int\29
+3307:SkImage_Ganesh::~SkImage_Ganesh\28\29
+3308:SkImageInfo::Make\28SkISize\2c\20SkColorType\2c\20SkAlphaType\29
+3309:SkImageInfo::MakeN32Premul\28SkISize\29
+3310:SkImageGenerator::getPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\29
+3311:SkImageGenerator::SkImageGenerator\28SkImageInfo\20const&\2c\20unsigned\20int\29
+3312:SkImageFilters::MatrixTransform\28SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20sk_sp<SkImageFilter>\29
+3313:SkImageFilters::Blur\28float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+3314:SkImageFilter_Base::affectsTransparentBlack\28\29\20const
+3315:SkImage::readPixels\28GrDirectContext*\2c\20SkPixmap\20const&\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+3316:SkImage::hasMipmaps\28\29\20const
+3317:SkIcuBreakIteratorCache::makeBreakIterator\28SkUnicode::BreakType\2c\20char\20const*\29
+3318:SkIDChangeListener::List::add\28sk_sp<SkIDChangeListener>\29
+3319:SkGradientShader::MakeTwoPointConical\28SkPoint\20const&\2c\20float\2c\20SkPoint\20const&\2c\20float\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+3320:SkGradientShader::MakeLinear\28SkPoint\20const*\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+3321:SkGradientBaseShader::AppendInterpolatedToDstStages\28SkRasterPipeline*\2c\20SkArenaAlloc*\2c\20bool\2c\20SkGradientShader::Interpolation\20const&\2c\20SkColorSpace\20const*\2c\20SkColorSpace\20const*\29
+3322:SkGlyph::setPath\28SkArenaAlloc*\2c\20SkScalerContext*\29
+3323:SkGlyph::mask\28\29\20const
+3324:SkFontStyleSet_Custom::appendTypeface\28sk_sp<SkTypeface>\29
+3325:SkFontStyleSet_Custom::SkFontStyleSet_Custom\28SkString\29
+3326:SkFontPriv::ApproximateTransformedTextSize\28SkFont\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\20const&\29
+3327:SkFontMgr::matchFamilyStyleCharacter\28char\20const*\2c\20SkFontStyle\20const&\2c\20char\20const**\2c\20int\2c\20int\29\20const
+3328:SkFontMgr::legacyMakeTypeface\28char\20const*\2c\20SkFontStyle\29\20const
+3329:SkFont::refTypefaceOrDefault\28\29\20const
+3330:SkFindCubicMaxCurvature\28SkPoint\20const*\2c\20float*\29
+3331:SkEncodedInfo::ICCProfile::Make\28sk_sp<SkData>\29
+3332:SkEmptyFontMgr::onMatchFamilyStyleCharacter\28char\20const*\2c\20SkFontStyle\20const&\2c\20char\20const**\2c\20int\2c\20int\29\20const
+3333:SkEdge::setLine\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkIRect\20const*\2c\20int\29
+3334:SkDynamicMemoryWStream::padToAlign4\28\29
+3335:SkDrawable::SkDrawable\28\29
+3336:SkDrawBase::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29\20const
+3337:SkDrawBase::drawDevicePoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\2c\20SkDevice*\29\20const
+3338:SkDraw::drawBitmap\28SkBitmap\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29\20const
+3339:SkDevice::simplifyGlyphRunRSXFormAndRedraw\28SkCanvas*\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+3340:SkDevice::drawFilteredImage\28skif::Mapping\20const&\2c\20SkSpecialImage*\2c\20SkColorType\2c\20SkImageFilter\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+3341:SkDevice::SkDevice\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\29
+3342:SkDataTable::at\28int\2c\20unsigned\20long*\29\20const
+3343:SkData::MakeZeroInitialized\28unsigned\20long\29
+3344:SkDQuad::dxdyAtT\28double\29\20const
+3345:SkDQuad::RootsReal\28double\2c\20double\2c\20double\2c\20double*\29
+3346:SkDQuad::FindExtrema\28double\20const*\2c\20double*\29
+3347:SkDCubic::subDivide\28double\2c\20double\29\20const
+3348:SkDCubic::searchRoots\28double*\2c\20int\2c\20double\2c\20SkDCubic::SearchAxis\2c\20double*\29\20const
+3349:SkDCubic::Coefficients\28double\20const*\2c\20double*\2c\20double*\2c\20double*\2c\20double*\29
+3350:SkDConic::dxdyAtT\28double\29\20const
+3351:SkDConic::FindExtrema\28double\20const*\2c\20float\2c\20double*\29
+3352:SkCopyStreamToData\28SkStream*\29
+3353:SkContourMeasure_segTo\28SkPoint\20const*\2c\20unsigned\20int\2c\20float\2c\20float\2c\20SkPath*\29
+3354:SkContourMeasureIter::next\28\29
+3355:SkContourMeasureIter::Impl::compute_quad_segs\28SkPoint\20const*\2c\20float\2c\20int\2c\20int\2c\20unsigned\20int\29
+3356:SkContourMeasureIter::Impl::compute_cubic_segs\28SkPoint\20const*\2c\20float\2c\20int\2c\20int\2c\20unsigned\20int\29
+3357:SkContourMeasureIter::Impl::compute_conic_segs\28SkConic\20const&\2c\20float\2c\20int\2c\20SkPoint\20const&\2c\20int\2c\20SkPoint\20const&\2c\20unsigned\20int\29
+3358:SkContourMeasure::getPosTan\28float\2c\20SkPoint*\2c\20SkPoint*\29\20const
+3359:SkConic::evalAt\28float\29\20const
+3360:SkConic::TransformW\28SkPoint\20const*\2c\20float\2c\20SkMatrix\20const&\29
+3361:SkColorToPMColor4f\28unsigned\20int\2c\20GrColorInfo\20const&\29
+3362:SkColorSpaceLuminance::Fetch\28float\29
+3363:SkColorSpace::transferFn\28skcms_TransferFunction*\29\20const
+3364:SkColorSpace::toXYZD50\28skcms_Matrix3x3*\29\20const
+3365:SkColorPalette::SkColorPalette\28unsigned\20int\20const*\2c\20int\29
+3366:SkColorFilters::Blend\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20sk_sp<SkColorSpace>\2c\20SkBlendMode\29
+3367:SkColor4fPrepForDst\28SkRGBA4f<\28SkAlphaType\293>\2c\20GrColorInfo\20const&\29
+3368:SkCodec::startIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const*\29
+3369:SkChopMonoCubicAtY\28SkPoint\20const*\2c\20float\2c\20SkPoint*\29
+3370:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\2c\20float\29
+3371:SkCanvas::setMatrix\28SkM44\20const&\29
+3372:SkCanvas::scale\28float\2c\20float\29
+3373:SkCanvas::private_draw_shadow_rec\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+3374:SkCanvas::onResetClip\28\29
+3375:SkCanvas::onClipShader\28sk_sp<SkShader>\2c\20SkClipOp\29
+3376:SkCanvas::onClipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+3377:SkCanvas::onClipRect\28SkRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+3378:SkCanvas::onClipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+3379:SkCanvas::onClipPath\28SkPath\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+3380:SkCanvas::internal_private_resetClip\28\29
+3381:SkCanvas::internalSaveLayer\28SkCanvas::SaveLayerRec\20const&\2c\20SkCanvas::SaveLayerStrategy\2c\20bool\29
+3382:SkCanvas::experimental_DrawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+3383:SkCanvas::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+3384:SkCanvas::drawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+3385:SkCanvas::drawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+3386:SkCanvas::drawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+3387:SkCanvas::drawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+3388:SkCanvas::drawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+3389:SkCanvas::clipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20bool\29
+3390:SkCanvas::SkCanvas\28SkIRect\20const&\29
+3391:SkCachedData::~SkCachedData\28\29
+3392:SkCTMShader::~SkCTMShader\28\29.1
+3393:SkBmpRLECodec::setPixel\28void*\2c\20unsigned\20long\2c\20SkImageInfo\20const&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20char\29
+3394:SkBmpCodec::prepareToDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+3395:SkBmpCodec::ReadHeader\28SkStream*\2c\20bool\2c\20std::__2::unique_ptr<SkCodec\2c\20std::__2::default_delete<SkCodec>>*\29
+3396:SkBlurMaskFilterImpl::computeXformedSigma\28SkMatrix\20const&\29\20const
+3397:SkBlitterClipper::apply\28SkBlitter*\2c\20SkRegion\20const*\2c\20SkIRect\20const*\29
+3398:SkBlitter::blitRegion\28SkRegion\20const&\29
+3399:SkBitmapDevice::BDDraw::~BDDraw\28\29
+3400:SkBitmapCacheDesc::Make\28SkImage\20const*\29
+3401:SkBitmap::writePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+3402:SkBitmap::setPixels\28void*\29
+3403:SkBitmap::pixelRefOrigin\28\29\20const
+3404:SkBitmap::notifyPixelsChanged\28\29\20const
+3405:SkBitmap::isImmutable\28\29\20const
+3406:SkBitmap::allocPixels\28\29
+3407:SkBinaryWriteBuffer::writeScalarArray\28float\20const*\2c\20unsigned\20int\29
+3408:SkBaseShadowTessellator::~SkBaseShadowTessellator\28\29.1
+3409:SkBaseShadowTessellator::handleCubic\28SkMatrix\20const&\2c\20SkPoint*\29
+3410:SkBaseShadowTessellator::handleConic\28SkMatrix\20const&\2c\20SkPoint*\2c\20float\29
+3411:SkAutoPathBoundsUpdate::SkAutoPathBoundsUpdate\28SkPath*\2c\20SkRect\20const&\29
+3412:SkAutoDescriptor::SkAutoDescriptor\28SkAutoDescriptor&&\29
+3413:SkArenaAllocWithReset::SkArenaAllocWithReset\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29
+3414:SkAnimatedImage::getFrameCount\28\29\20const
+3415:SkAnimatedImage::decodeNextFrame\28\29
+3416:SkAnimatedImage::Frame::copyTo\28SkAnimatedImage::Frame*\29\20const
+3417:SkAnalyticQuadraticEdge::updateQuadratic\28\29
+3418:SkAnalyticCubicEdge::updateCubic\28bool\29
+3419:SkAlphaRuns::reset\28int\29
+3420:SkAAClip::setRect\28SkIRect\20const&\29
+3421:Simplify\28SkPath\20const&\2c\20SkPath*\29
+3422:ReconstructRow
+3423:R.1
+3424:OpAsWinding::nextEdge\28Contour&\2c\20OpAsWinding::Edge\29
+3425:OT::sbix::sanitize\28hb_sanitize_context_t*\29\20const
+3426:OT::post::accelerator_t::cmp_gids\28void\20const*\2c\20void\20const*\2c\20void*\29
+3427:OT::gvar::sanitize_shallow\28hb_sanitize_context_t*\29\20const
+3428:OT::fvar::sanitize\28hb_sanitize_context_t*\29\20const
+3429:OT::cmap::sanitize\28hb_sanitize_context_t*\29\20const
+3430:OT::cmap::accelerator_t::accelerator_t\28hb_face_t*\29
+3431:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\2c\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\28\29
+3432:OT::avar::sanitize\28hb_sanitize_context_t*\29\20const
+3433:OT::VarRegionList::evaluate\28unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\2c\20float*\29\20const
+3434:OT::Rule<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ContextApplyLookupContext\20const&\29\20const
+3435:OT::OpenTypeFontFile::sanitize\28hb_sanitize_context_t*\29\20const
+3436:OT::MVAR::sanitize\28hb_sanitize_context_t*\29\20const
+3437:OT::Layout::GSUB_impl::SubstLookup::serialize_ligature\28hb_serialize_context_t*\2c\20unsigned\20int\2c\20hb_sorted_array_t<OT::HBGlyphID16\20const>\2c\20hb_array_t<unsigned\20int\20const>\2c\20hb_array_t<OT::HBGlyphID16\20const>\2c\20hb_array_t<unsigned\20int\20const>\2c\20hb_array_t<OT::HBGlyphID16\20const>\29
+3438:OT::Layout::GPOS_impl::MarkArray::apply\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20OT::Layout::GPOS_impl::AnchorMatrix\20const&\2c\20unsigned\20int\2c\20unsigned\20int\29\20const
+3439:OT::GDEFVersion1_2<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+3440:OT::Device::get_y_delta\28hb_font_t*\2c\20OT::VariationStore\20const&\2c\20float*\29\20const
+3441:OT::Device::get_x_delta\28hb_font_t*\2c\20OT::VariationStore\20const&\2c\20float*\29\20const
+3442:OT::ClipList::get_extents\28unsigned\20int\2c\20hb_glyph_extents_t*\2c\20OT::VarStoreInstancer\20const&\29\20const
+3443:OT::ChainRule<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ChainContextApplyLookupContext\20const&\29\20const
+3444:OT::CPAL::sanitize\28hb_sanitize_context_t*\29\20const
+3445:OT::COLR::sanitize\28hb_sanitize_context_t*\29\20const
+3446:OT::COLR::paint_glyph\28hb_font_t*\2c\20unsigned\20int\2c\20hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20bool\29\20const
+3447:MakeRasterCopyPriv\28SkPixmap\20const&\2c\20unsigned\20int\29
+3448:LineQuadraticIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineQuadraticIntersections::PinTPoint\29
+3449:LineQuadraticIntersections::checkCoincident\28\29
+3450:LineQuadraticIntersections::addLineNearEndPoints\28\29
+3451:LineCubicIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineCubicIntersections::PinTPoint\29
+3452:LineCubicIntersections::checkCoincident\28\29
+3453:LineCubicIntersections::addLineNearEndPoints\28\29
+3454:LineConicIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineConicIntersections::PinTPoint\29
+3455:LineConicIntersections::checkCoincident\28\29
+3456:LineConicIntersections::addLineNearEndPoints\28\29
+3457:GrXferProcessor::GrXferProcessor\28GrProcessor::ClassID\29
+3458:GrVertexChunkBuilder::~GrVertexChunkBuilder\28\29
+3459:GrTriangulator::tessellate\28GrTriangulator::VertexList\20const&\2c\20GrTriangulator::Comparator\20const&\29
+3460:GrTriangulator::splitEdge\28GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29
+3461:GrTriangulator::pathToPolys\28float\2c\20SkRect\20const&\2c\20bool*\29
+3462:GrTriangulator::generateCubicPoints\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20GrTriangulator::VertexList*\2c\20int\29\20const
+3463:GrTriangulator::emitTriangle\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20int\2c\20skgpu::VertexWriter\29\20const
+3464:GrTriangulator::checkForIntersection\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29
+3465:GrTriangulator::applyFillType\28int\29\20const
+3466:GrTriangulator::EdgeList::insert\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\29
+3467:GrTriangulator::Edge::insertBelow\28GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29
+3468:GrTriangulator::Edge::insertAbove\28GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29
+3469:GrToGLStencilFunc\28GrStencilTest\29
+3470:GrThreadSafeCache::dropAllRefs\28\29
+3471:GrTextureRenderTargetProxy::callbackDesc\28\29\20const
+3472:GrTexture::GrTexture\28GrGpu*\2c\20SkISize\20const&\2c\20skgpu::Protected\2c\20GrTextureType\2c\20GrMipmapStatus\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3473:GrTexture::ComputeScratchKey\28GrCaps\20const&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20skgpu::ScratchKey*\29
+3474:GrSurfaceProxyView::asTextureProxyRef\28\29\20const
+3475:GrSurfaceProxy::GrSurfaceProxy\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>&&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3476:GrSurfaceProxy::GrSurfaceProxy\28sk_sp<GrSurface>\2c\20SkBackingFit\2c\20GrSurfaceProxy::UseAllocator\29
+3477:GrSurface::setRelease\28sk_sp<skgpu::RefCntedCallback>\29
+3478:GrStyledShape::styledBounds\28\29\20const
+3479:GrStyledShape::asLine\28SkPoint*\2c\20bool*\29\20const
+3480:GrStyledShape::addGenIDChangeListener\28sk_sp<SkIDChangeListener>\29\20const
+3481:GrSkSLFP::name\28\29\20const
+3482:GrSimpleMeshDrawOpHelper::fixedFunctionFlags\28\29\20const
+3483:GrShape::setRect\28SkRect\20const&\29
+3484:GrShape::setRRect\28SkRRect\20const&\29
+3485:GrResourceProvider::assignUniqueKeyToResource\28skgpu::UniqueKey\20const&\2c\20GrGpuResource*\29
+3486:GrResourceCache::releaseAll\28\29
+3487:GrResourceCache::getNextTimestamp\28\29
+3488:GrRenderTask::addDependency\28GrRenderTask*\29
+3489:GrRenderTargetProxy::canUseStencil\28GrCaps\20const&\29\20const
+3490:GrRecordingContextPriv::addOnFlushCallbackObject\28GrOnFlushCallbackObject*\29
+3491:GrRecordingContext::~GrRecordingContext\28\29
+3492:GrRecordingContext::abandonContext\28\29
+3493:GrQuadUtils::TessellationHelper::Vertices::moveTo\28skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20int>\20const&\29
+3494:GrQuadUtils::TessellationHelper::EdgeEquations::reset\28GrQuadUtils::TessellationHelper::EdgeVectors\20const&\29
+3495:GrQuadUtils::ResolveAAType\28GrAAType\2c\20GrQuadAAFlags\2c\20GrQuad\20const&\2c\20GrAAType*\2c\20GrQuadAAFlags*\29
+3496:GrQuadBuffer<\28anonymous\20namespace\29::FillRectOpImpl::ColorAndAA>::append\28GrQuad\20const&\2c\20\28anonymous\20namespace\29::FillRectOpImpl::ColorAndAA&&\2c\20GrQuad\20const*\29
+3497:GrPixmap::GrPixmap\28GrImageInfo\2c\20void*\2c\20unsigned\20long\29
+3498:GrPipeline::GrPipeline\28GrPipeline::InitArgs\20const&\2c\20GrProcessorSet&&\2c\20GrAppliedClip&&\29
+3499:GrPersistentCacheUtils::UnpackCachedShaders\28SkReadBuffer*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20SkSL::Program::Interface*\2c\20int\2c\20GrPersistentCacheUtils::ShaderMetadata*\29
+3500:GrPathUtils::convertCubicToQuads\28SkPoint\20const*\2c\20float\2c\20skia_private::TArray<SkPoint\2c\20true>*\29
+3501:GrPathTessellationShader::Make\28GrShaderCaps\20const&\2c\20SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::tess::PatchAttribs\29
+3502:GrOp::chainConcat\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\29
+3503:GrOp::GenOpClassID\28\29
+3504:GrMeshDrawOp::PatternHelper::PatternHelper\28GrMeshDrawTarget*\2c\20GrPrimitiveType\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>\2c\20int\2c\20int\2c\20int\2c\20int\29
+3505:GrMemoryPool::Make\28unsigned\20long\2c\20unsigned\20long\29
+3506:GrMakeKeyFromImageID\28skgpu::UniqueKey*\2c\20unsigned\20int\2c\20SkIRect\20const&\29
+3507:GrImageInfo::GrImageInfo\28GrColorInfo\20const&\2c\20SkISize\20const&\29
+3508:GrGpuResource::removeScratchKey\28\29
+3509:GrGpuResource::registerWithCacheWrapped\28GrWrapCacheable\29
+3510:GrGpuResource::dumpMemoryStatisticsPriv\28SkTraceMemoryDump*\2c\20SkString\20const&\2c\20char\20const*\2c\20unsigned\20long\29\20const
+3511:GrGpuBuffer::onGpuMemorySize\28\29\20const
+3512:GrGpu::resolveRenderTarget\28GrRenderTarget*\2c\20SkIRect\20const&\29
+3513:GrGpu::executeFlushInfo\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+3514:GrGeometryProcessor::TextureSampler::TextureSampler\28GrSamplerState\2c\20GrBackendFormat\20const&\2c\20skgpu::Swizzle\20const&\29
+3515:GrGeometryProcessor::ProgramImpl::ComputeMatrixKeys\28GrShaderCaps\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\29
+3516:GrGLUniformHandler::getUniformVariable\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\29\20const
+3517:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29.1
+3518:GrGLSemaphore::GrGLSemaphore\28GrGLGpu*\2c\20bool\29
+3519:GrGLSLVaryingHandler::~GrGLSLVaryingHandler\28\29
+3520:GrGLSLShaderBuilder::emitFunction\28SkSLType\2c\20char\20const*\2c\20SkSpan<GrShaderVar\20const>\2c\20char\20const*\29
+3521:GrGLSLProgramDataManager::setSkMatrix\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20SkMatrix\20const&\29\20const
+3522:GrGLSLProgramBuilder::writeFPFunction\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+3523:GrGLSLProgramBuilder::invokeFP\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl\20const&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29\20const
+3524:GrGLSLProgramBuilder::addRTFlipUniform\28char\20const*\29
+3525:GrGLSLFragmentShaderBuilder::dstColor\28\29
+3526:GrGLSLBlend::BlendKey\28SkBlendMode\29
+3527:GrGLProgramBuilder::~GrGLProgramBuilder\28\29
+3528:GrGLProgramBuilder::computeCountsAndStrides\28unsigned\20int\2c\20GrGeometryProcessor\20const&\2c\20bool\29
+3529:GrGLGpu::flushScissor\28GrScissorState\20const&\2c\20int\2c\20GrSurfaceOrigin\29
+3530:GrGLGpu::flushClearColor\28std::__2::array<float\2c\204ul>\29
+3531:GrGLGpu::createTexture\28SkISize\2c\20GrGLFormat\2c\20unsigned\20int\2c\20skgpu::Renderable\2c\20GrGLTextureParameters::SamplerOverriddenState*\2c\20int\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3532:GrGLGpu::copySurfaceAsDraw\28GrSurface*\2c\20bool\2c\20GrSurface*\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkFilterMode\29
+3533:GrGLGpu::SamplerObjectCache::~SamplerObjectCache\28\29
+3534:GrGLGpu::HWVertexArrayState::bindInternalVertexArray\28GrGLGpu*\2c\20GrBuffer\20const*\29
+3535:GrGLFunction<void\20\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29>::GrGLFunction\28void\20\28*\29\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29\29::'lambda'\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29::__invoke\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29
+3536:GrGLBuffer::Make\28GrGLGpu*\2c\20unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\29
+3537:GrGLAttribArrayState::enableVertexArrays\28GrGLGpu\20const*\2c\20int\2c\20GrPrimitiveRestart\29
+3538:GrFragmentProcessors::make_effect_fp\28sk_sp<SkRuntimeEffect>\2c\20char\20const*\2c\20sk_sp<SkData\20const>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\2c\20GrFPArgs\20const&\29
+3539:GrFragmentProcessors::MakeChildFP\28SkRuntimeEffect::ChildPtr\20const&\2c\20GrFPArgs\20const&\29
+3540:GrFragmentProcessors::IsSupported\28SkMaskFilter\20const*\29
+3541:GrFragmentProcessor::makeProgramImpl\28\29\20const
+3542:GrFragmentProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+3543:GrFragmentProcessor::MulInputByChildAlpha\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+3544:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3545:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+3546:GrFinishCallbacks::callAll\28bool\29
+3547:GrDynamicAtlas::makeNode\28GrDynamicAtlas::Node*\2c\20int\2c\20int\2c\20int\2c\20int\29
+3548:GrDrawingManager::setLastRenderTask\28GrSurfaceProxy\20const*\2c\20GrRenderTask*\29
+3549:GrDrawingManager::flushSurfaces\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+3550:GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29
+3551:GrDirectContext::resetContext\28unsigned\20int\29
+3552:GrDirectContext::getResourceCacheLimit\28\29\20const
+3553:GrDefaultGeoProcFactory::MakeForDeviceSpace\28SkArenaAlloc*\2c\20GrDefaultGeoProcFactory::Color\20const&\2c\20GrDefaultGeoProcFactory::Coverage\20const&\2c\20GrDefaultGeoProcFactory::LocalCoords\20const&\2c\20SkMatrix\20const&\29
+3554:GrColorSpaceXformEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20sk_sp<GrColorSpaceXform>\29
+3555:GrColorSpaceXform::apply\28SkRGBA4f<\28SkAlphaType\293>\20const&\29
+3556:GrColorSpaceXform::Equals\28GrColorSpaceXform\20const*\2c\20GrColorSpaceXform\20const*\29
+3557:GrBufferAllocPool::unmap\28\29
+3558:GrBlurUtils::can_filter_mask\28SkMaskFilterBase\20const*\2c\20GrStyledShape\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkIRect*\29
+3559:GrBicubicEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState::WrapMode\2c\20GrSamplerState::WrapMode\2c\20SkRect\20const&\2c\20SkCubicResampler\2c\20GrBicubicEffect::Direction\2c\20GrCaps\20const&\29
+3560:GrBackendTextures::MakeGL\28int\2c\20int\2c\20skgpu::Mipmapped\2c\20GrGLTextureInfo\20const&\2c\20sk_sp<GrGLTextureParameters>\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3561:GrBackendFormatStencilBits\28GrBackendFormat\20const&\29
+3562:GrBackendFormat::asMockCompressionType\28\29\20const
+3563:GrAATriangulator::~GrAATriangulator\28\29
+3564:GrAATriangulator::makeEvent\28GrAATriangulator::SSEdge*\2c\20GrAATriangulator::EventList*\29\20const
+3565:GrAAConvexTessellator::fanRing\28GrAAConvexTessellator::Ring\20const&\29
+3566:GrAAConvexTessellator::computePtAlongBisector\28int\2c\20SkPoint\20const&\2c\20int\2c\20float\2c\20SkPoint*\29\20const
+3567:FT_Stream_ReadAt
+3568:FT_Stream_OpenMemory
+3569:FT_Set_Char_Size
+3570:FT_Request_Metrics
+3571:FT_Open_Face
+3572:FT_Hypot
+3573:FT_Get_Var_Design_Coordinates
+3574:FT_Get_Paint
+3575:FT_Get_MM_Var
+3576:FT_Done_Library
+3577:DecodeImageData
+3578:Cr_z_inflate_table
+3579:Cr_z_inflateReset
+3580:Cr_z_deflateEnd
+3581:Cr_z_copy_with_crc
+3582:Compute_Point_Displacement
+3583:AAT::trak::sanitize\28hb_sanitize_context_t*\29\20const
+3584:AAT::ltag::sanitize\28hb_sanitize_context_t*\29\20const
+3585:AAT::feat::sanitize\28hb_sanitize_context_t*\29\20const
+3586:AAT::StateTable<AAT::ObsoleteTypes\2c\20void>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+3587:AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor\2c\20OT::IntType<unsigned\20int\2c\204u>>\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20false>>::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+3588:AAT::KerxTable<OT::KernOT>::sanitize\28hb_sanitize_context_t*\29\20const
+3589:AAT::KerxTable<OT::KernAAT>::sanitize\28hb_sanitize_context_t*\29\20const
+3590:AAT::KerxTable<AAT::kerx>::sanitize\28hb_sanitize_context_t*\29\20const
+3591:zeroinfnan
+3592:xyz_almost_equal\28skcms_Matrix3x3\20const&\2c\20skcms_Matrix3x3\20const&\29
+3593:wyhash\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\20long\2c\20unsigned\20long\20long\20const*\29
+3594:wuffs_lzw__decoder__transform_io
+3595:wuffs_gif__decoder__set_quirk_enabled
+3596:wuffs_gif__decoder__restart_frame
+3597:wuffs_gif__decoder__num_animation_loops
+3598:wuffs_gif__decoder__frame_dirty_rect
+3599:wuffs_gif__decoder__decode_up_to_id_part1
+3600:wuffs_gif__decoder__decode_frame
+3601:write_vertex_position\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\2c\20GrShaderCaps\20const&\2c\20GrShaderVar\20const&\2c\20SkMatrix\20const&\2c\20char\20const*\2c\20GrShaderVar*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+3602:write_text_tag\28char\20const*\29
+3603:write_passthrough_vertex_position\28GrGLSLVertexBuilder*\2c\20GrShaderVar\20const&\2c\20GrShaderVar*\29
+3604:write_mAB_or_mBA_tag\28unsigned\20int\2c\20skcms_Curve\20const*\2c\20skcms_Curve\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20skcms_Curve\20const*\2c\20skcms_Matrix3x4\20const*\29
+3605:webgl_get_gl_proc\28void*\2c\20char\20const*\29
+3606:wctomb
+3607:wchar_t*\20std::__2::copy\5babi:v160004\5d<std::__2::__wrap_iter<wchar_t\20const*>\2c\20wchar_t*>\28std::__2::__wrap_iter<wchar_t\20const*>\2c\20std::__2::__wrap_iter<wchar_t\20const*>\2c\20wchar_t*\29
+3608:walk_simple_edges\28SkEdge*\2c\20SkBlitter*\2c\20int\2c\20int\29
+3609:vsscanf
+3610:void\20std::__2::vector<sktext::GlyphRun\2c\20std::__2::allocator<sktext::GlyphRun>>::__emplace_back_slow_path<SkFont\20const&\2c\20SkSpan<SkPoint\20const>&\2c\20SkSpan<unsigned\20short\20const>&\2c\20SkSpan<char\20const>&\2c\20SkSpan<unsigned\20int\20const>&\2c\20SkSpan<SkPoint\20const>&>\28SkFont\20const&\2c\20SkSpan<SkPoint\20const>&\2c\20SkSpan<unsigned\20short\20const>&\2c\20SkSpan<char\20const>&\2c\20SkSpan<unsigned\20int\20const>&\2c\20SkSpan<SkPoint\20const>&\29
+3611:void\20std::__2::vector<skia::textlayout::FontFeature\2c\20std::__2::allocator<skia::textlayout::FontFeature>>::assign<skia::textlayout::FontFeature*\2c\200>\28skia::textlayout::FontFeature*\2c\20skia::textlayout::FontFeature*\29
+3612:void\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>::__emplace_back_slow_path<sk_sp<SkTypeface>>\28sk_sp<SkTypeface>&&\29
+3613:void\20std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>::assign<SkString*\2c\200>\28SkString*\2c\20SkString*\29
+3614:void\20std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\20const*&>\28char\20const*&\29
+3615:void\20std::__2::vector<SkMeshSpecification::Varying\2c\20std::__2::allocator<SkMeshSpecification::Varying>>::__push_back_slow_path<SkMeshSpecification::Varying>\28SkMeshSpecification::Varying&&\29
+3616:void\20std::__2::vector<SkMeshSpecification::Attribute\2c\20std::__2::allocator<SkMeshSpecification::Attribute>>::__push_back_slow_path<SkMeshSpecification::Attribute>\28SkMeshSpecification::Attribute&&\29
+3617:void\20std::__2::vector<SkFontArguments::VariationPosition::Coordinate\2c\20std::__2::allocator<SkFontArguments::VariationPosition::Coordinate>>::assign<SkFontArguments::VariationPosition::Coordinate*\2c\200>\28SkFontArguments::VariationPosition::Coordinate*\2c\20SkFontArguments::VariationPosition::Coordinate*\29
+3618:void\20std::__2::vector<Contour\2c\20std::__2::allocator<Contour>>::__emplace_back_slow_path<SkRect&\2c\20int&\2c\20int&>\28SkRect&\2c\20int&\2c\20int&\29
+3619:void\20std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::construct\5babi:v160004\5d<std::__2::locale::facet*\2c\20void\2c\20void>\28std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>&\2c\20std::__2::locale::facet**\29
+3620:void\20std::__2::__tree_balance_after_insert\5babi:v160004\5d<std::__2::__tree_node_base<void*>*>\28std::__2::__tree_node_base<void*>*\2c\20std::__2::__tree_node_base<void*>*\29
+3621:void\20std::__2::__stable_sort_move<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>\28std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::value_type*\29
+3622:void\20std::__2::__sift_up\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20GrGeometryProcessor::ProgramImpl::emitTransformCode\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\29::$_0&\2c\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>\28std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\2c\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\2c\20GrGeometryProcessor::ProgramImpl::emitTransformCode\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\29::$_0&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>::difference_type\29
+3623:void\20std::__2::__optional_storage_base<skia::textlayout::FontArguments\2c\20false>::__assign_from\5babi:v160004\5d<std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\2c\20false>\20const&>\28std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\2c\20false>\20const&\29
+3624:void\20std::__2::__double_or_nothing\5babi:v160004\5d<char>\28std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>&\2c\20char*&\2c\20char*&\29
+3625:void\20sorted_merge<&sweep_lt_vert\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\29
+3626:void\20sorted_merge<&sweep_lt_horiz\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\29
+3627:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29.1
+3628:void\20skgpu::ganesh::SurfaceFillContext::clear<\28SkAlphaType\292>\28SkRGBA4f<\28SkAlphaType\292>\20const&\29
+3629:void\20emscripten::internal::raw_destructor<sk_sp<SkColorSpace>>\28sk_sp<SkColorSpace>*\29
+3630:void\20emscripten::internal::MemberAccess<SimpleStrutStyle\2c\20SimpleFontStyle>::setWire<SimpleStrutStyle>\28SimpleFontStyle\20SimpleStrutStyle::*\20const&\2c\20SimpleStrutStyle&\2c\20SimpleFontStyle*\29
+3631:void\20\28anonymous\20namespace\29::copyFT2LCD16<false>\28FT_Bitmap_\20const&\2c\20SkMaskBuilder*\2c\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\29
+3632:void\20SkTIntroSort<int\2c\20DistanceLessThan>\28int\2c\20int*\2c\20int\2c\20DistanceLessThan\20const&\29
+3633:void\20SkTIntroSort<float\2c\20void\20SkTQSort<float>\28float*\2c\20float*\29::'lambda'\28float\20const&\2c\20float\20const&\29>\28int\2c\20float*\2c\20int\2c\20void\20SkTQSort<float>\28float*\2c\20float*\29::'lambda'\28float\20const&\2c\20float\20const&\29\20const&\29
+3634:void\20SkTIntroSort<SkString\2c\20bool\20\28SkString\20const&\2c\20SkString\20const&\29>\28int\2c\20SkString*\2c\20int\2c\20bool\20\20const\28&\29\28SkString\20const&\2c\20SkString\20const&\29\29
+3635:void\20SkTIntroSort<SkOpRayHit*\2c\20bool\20\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29>\28int\2c\20SkOpRayHit**\2c\20int\2c\20bool\20\20const\28&\29\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29\29
+3636:void\20SkTIntroSort<SkOpContour*\2c\20void\20SkTQSort<SkOpContour>\28SkOpContour**\2c\20SkOpContour**\29::'lambda'\28SkOpContour\20const*\2c\20SkOpContour\20const*\29>\28int\2c\20SkOpContour*\2c\20int\2c\20void\20SkTQSort<SkOpContour>\28SkOpContour**\2c\20SkOpContour**\29::'lambda'\28SkOpContour\20const*\2c\20SkOpContour\20const*\29\20const&\29
+3637:void\20SkTIntroSort<SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::Entry\2c\20SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::EntryLessThan>\28int\2c\20SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::Entry*\2c\20int\2c\20SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::EntryLessThan\20const&\29
+3638:void\20SkTIntroSort<SkClosestRecord\20const*\2c\20void\20SkTQSort<SkClosestRecord\20const>\28SkClosestRecord\20const**\2c\20SkClosestRecord\20const**\29::'lambda'\28SkClosestRecord\20const*\2c\20SkClosestRecord\20const*\29>\28int\2c\20SkClosestRecord\20const*\2c\20int\2c\20void\20SkTQSort<SkClosestRecord\20const>\28SkClosestRecord\20const**\2c\20SkClosestRecord\20const**\29::'lambda'\28SkClosestRecord\20const*\2c\20SkClosestRecord\20const*\29\20const&\29
+3639:void\20SkTIntroSort<SkAnalyticEdge*\2c\20void\20SkTQSort<SkAnalyticEdge>\28SkAnalyticEdge**\2c\20SkAnalyticEdge**\29::'lambda'\28SkAnalyticEdge\20const*\2c\20SkAnalyticEdge\20const*\29>\28int\2c\20SkAnalyticEdge*\2c\20int\2c\20void\20SkTQSort<SkAnalyticEdge>\28SkAnalyticEdge**\2c\20SkAnalyticEdge**\29::'lambda'\28SkAnalyticEdge\20const*\2c\20SkAnalyticEdge\20const*\29\20const&\29
+3640:void\20SkTIntroSort<GrGpuResource*\2c\20bool\20\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29>\28int\2c\20GrGpuResource**\2c\20int\2c\20bool\20\20const\28&\29\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\29
+3641:void\20SkTIntroSort<GrGpuResource*\2c\20bool\20\28*\29\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29>\28int\2c\20GrGpuResource**\2c\20int\2c\20bool\20\28*\20const&\29\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\29
+3642:void\20SkTIntroSort<Edge\2c\20EdgeLT>\28int\2c\20Edge*\2c\20int\2c\20EdgeLT\20const&\29
+3643:void\20GrGeometryProcessor::ProgramImpl::collectTransforms\28GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGLSLUniformHandler*\2c\20GrShaderType\2c\20GrShaderVar\20const&\2c\20GrShaderVar\20const&\2c\20GrPipeline\20const&\29::$_0::operator\28\29<$_0>\28$_0&\2c\20GrFragmentProcessor\20const&\2c\20bool\2c\20GrFragmentProcessor\20const*\2c\20int\2c\20GrGeometryProcessor::ProgramImpl::collectTransforms\28GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGLSLUniformHandler*\2c\20GrShaderType\2c\20GrShaderVar\20const&\2c\20GrShaderVar\20const&\2c\20GrPipeline\20const&\29::BaseCoord\29
+3644:void\20AAT::StateTableDriver<AAT::ObsoleteTypes\2c\20void>::drive<AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t>\28AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t*\2c\20AAT::hb_aat_apply_context_t*\29::'lambda0'\28\29::operator\28\29\28\29\20const
+3645:virtual\20thunk\20to\20GrGLTexture::onSetLabel\28\29
+3646:virtual\20thunk\20to\20GrGLTexture::backendFormat\28\29\20const
+3647:vfiprintf
+3648:validate_texel_levels\28SkISize\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20GrCaps\20const*\29
+3649:utf8TextClose\28UText*\29
+3650:utf8TextAccess\28UText*\2c\20long\20long\2c\20signed\20char\29
+3651:utext_openConstUnicodeString_73
+3652:utext_moveIndex32_73
+3653:utext_getPreviousNativeIndex_73
+3654:utext_extract_73
+3655:uscript_getShortName_73
+3656:ures_resetIterator_73
+3657:ures_initStackObject_73
+3658:ures_getValueWithFallback_73
+3659:ures_getInt_73
+3660:ures_getIntVector_73
+3661:ures_copyResb_73
+3662:uprv_stricmp_73
+3663:uprv_getMaxValues_73
+3664:uprv_compareInvAscii_73
+3665:upropsvec_addPropertyStarts_73
+3666:uprops_getSource_73
+3667:unsigned\20short\20std::__2::__num_get_unsigned_integral\5babi:v160004\5d<unsigned\20short>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3668:unsigned\20long\20long\20std::__2::__num_get_unsigned_integral\5babi:v160004\5d<unsigned\20long\20long>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3669:unsigned\20int\20std::__2::__num_get_unsigned_integral\5babi:v160004\5d<unsigned\20int>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3670:unsigned\20int\20const*\20std::__2::lower_bound\5babi:v160004\5d<unsigned\20int\20const*\2c\20unsigned\20long>\28unsigned\20int\20const*\2c\20unsigned\20int\20const*\2c\20unsigned\20long\20const&\29
+3671:unorm_getFCD16_73
+3672:ultag_isUnicodeLocaleKey_73
+3673:ultag_isScriptSubtag_73
+3674:ultag_isLanguageSubtag_73
+3675:ultag_isExtensionSubtags_73
+3676:ultag_getTKeyStart_73
+3677:ulocimp_toBcpType_73
+3678:ulocimp_forLanguageTag_73
+3679:uloc_toUnicodeLocaleType_73
+3680:uloc_toUnicodeLocaleKey_73
+3681:uloc_setKeywordValue_73
+3682:uloc_getTableStringWithFallback_73
+3683:uloc_getName_73
+3684:uloc_getDisplayName_73
+3685:uenum_unext_73
+3686:udata_open_73
+3687:udata_checkCommonData_73
+3688:ucptrie_internalU8PrevIndex_73
+3689:uchar_addPropertyStarts_73
+3690:ucase_toFullUpper_73
+3691:ucase_toFullLower_73
+3692:ucase_toFullFolding_73
+3693:ucase_getTypeOrIgnorable_73
+3694:ucase_addPropertyStarts_73
+3695:ubidi_getPairedBracketType_73
+3696:ubidi_close_73
+3697:u_unescapeAt_73
+3698:u_strFindFirst_73
+3699:u_memrchr_73
+3700:u_memcmp_73
+3701:u_hasBinaryProperty_73
+3702:u_getPropertyEnum_73
+3703:tt_size_run_prep
+3704:tt_size_done_bytecode
+3705:tt_sbit_decoder_load_image
+3706:tt_face_vary_cvt
+3707:tt_face_palette_set
+3708:tt_face_load_cvt
+3709:tt_face_get_metrics
+3710:tt_done_blend
+3711:tt_delta_interpolate
+3712:tt_cmap4_set_range
+3713:tt_cmap4_next
+3714:tt_cmap4_char_map_linear
+3715:tt_cmap4_char_map_binary
+3716:tt_cmap14_get_def_chars
+3717:tt_cmap13_next
+3718:tt_cmap12_next
+3719:tt_cmap12_init
+3720:tt_cmap12_char_map_binary
+3721:tt_apply_mvar
+3722:toParagraphStyle\28SimpleParagraphStyle\20const&\29
+3723:tanhf
+3724:t1_lookup_glyph_by_stdcharcode_ps
+3725:t1_builder_close_contour
+3726:t1_builder_check_points
+3727:strtoull
+3728:strtoll_l
+3729:strtol
+3730:strspn
+3731:store_int
+3732:std::logic_error::~logic_error\28\29
+3733:std::logic_error::logic_error\28char\20const*\29
+3734:std::exception::exception\5babi:v160004\5d\28\29
+3735:std::__2::vector<unsigned\20char\2c\20std::__2::allocator<unsigned\20char>>::__append\28unsigned\20long\29
+3736:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::max_size\28\29\20const
+3737:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__construct_at_end\28unsigned\20long\29
+3738:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__clear\5babi:v160004\5d\28\29
+3739:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__base_destruct_at_end\5babi:v160004\5d\28std::__2::locale::facet**\29
+3740:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__annotate_shrink\5babi:v160004\5d\28unsigned\20long\29\20const
+3741:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__annotate_new\5babi:v160004\5d\28unsigned\20long\29\20const
+3742:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__annotate_delete\5babi:v160004\5d\28\29\20const
+3743:std::__2::vector<float\2c\20std::__2::allocator<float>>::insert\28std::__2::__wrap_iter<float\20const*>\2c\20float&&\29
+3744:std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>::__throw_length_error\5babi:v160004\5d\28\29\20const
+3745:std::__2::vector<SkSL::InlineCandidate\2c\20std::__2::allocator<SkSL::InlineCandidate>>::erase\28std::__2::__wrap_iter<SkSL::InlineCandidate\20const*>\2c\20std::__2::__wrap_iter<SkSL::InlineCandidate\20const*>\29
+3746:std::__2::vector<SkCustomTypefaceBuilder::GlyphRec\2c\20std::__2::allocator<SkCustomTypefaceBuilder::GlyphRec>>::__append\28unsigned\20long\29
+3747:std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>::operator=\5babi:v160004\5d\28std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>&&\29
+3748:std::__2::unique_ptr<SkSL::Program\2c\20std::__2::default_delete<SkSL::Program>>::~unique_ptr\5babi:v160004\5d\28\29
+3749:std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20SkSL::coalesce_vector<bool>\28std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20double\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\2c\20double\20\28*\29\28double\29\29
+3750:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\5babi:v160004\5d\28std::nullptr_t\29
+3751:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\2c\20int\2c\20sktext::gpu::SubRunAllocator>\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\28int\29::'lambda0'\28\29::operator\28\29\28\29\20const
+3752:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\2c\20int\2c\20sktext::gpu::SubRunAllocator>\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\28int\29::'lambda'\28\29::operator\28\29\28\29\20const
+3753:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\2c\20int\2c\20sktext::gpu::SubRunAllocator>\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\28int\29
+3754:std::__2::to_string\28unsigned\20long\29
+3755:std::__2::to_chars_result\20std::__2::__to_chars_itoa\5babi:v160004\5d<unsigned\20int>\28char*\2c\20char*\2c\20unsigned\20int\2c\20std::__2::integral_constant<bool\2c\20false>\29
+3756:std::__2::time_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::~time_put\28\29
+3757:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__get_year\28int&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\29\20const
+3758:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__get_weekdayname\28int&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\29\20const
+3759:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__get_monthname\28int&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\29\20const
+3760:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__get_year\28int&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\29\20const
+3761:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__get_weekdayname\28int&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\29\20const
+3762:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__get_monthname\28int&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\29\20const
+3763:std::__2::reverse_iterator<std::__2::locale::facet**>::operator++\5babi:v160004\5d\28\29
+3764:std::__2::reverse_iterator<std::__2::locale::facet**>::operator*\5babi:v160004\5d\28\29\20const
+3765:std::__2::priority_queue<GrAATriangulator::Event*\2c\20std::__2::vector<GrAATriangulator::Event*\2c\20std::__2::allocator<GrAATriangulator::Event*>>\2c\20GrAATriangulator::EventComparator>::push\28GrAATriangulator::Event*\20const&\29
+3766:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20std::__2::__unordered_map_hasher<GrFragmentProcessor\20const*\2c\20std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20std::__2::hash<GrFragmentProcessor\20const*>\2c\20std::__2::equal_to<GrFragmentProcessor\20const*>\2c\20true>\2c\20std::__2::__unordered_map_equal<GrFragmentProcessor\20const*\2c\20std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20std::__2::equal_to<GrFragmentProcessor\20const*>\2c\20std::__2::hash<GrFragmentProcessor\20const*>\2c\20true>\2c\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>>>::__emplace_unique_key_args<GrFragmentProcessor\20const*\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrFragmentProcessor\20const*&&>\2c\20std::__2::tuple<>>\28GrFragmentProcessor\20const*\20const&\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrFragmentProcessor\20const*&&>&&\2c\20std::__2::tuple<>&&\29
+3767:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<int\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<int\2c\20std::__2::hash<int>\2c\20std::__2::equal_to<int>\2c\20std::__2::allocator<int>>::__emplace_unique_key_args<int\2c\20int\20const&>\28int\20const&\2c\20int\20const&\29
+3768:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>>::pair\28std::__2::pair<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>>&&\29
+3769:std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator=\5babi:v160004\5d\28wchar_t\29
+3770:std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator=\5babi:v160004\5d\28char\29
+3771:std::__2::optional<SkPath>&\20std::__2::optional<SkPath>::operator=\5babi:v160004\5d<SkPath\20const&\2c\20void>\28SkPath\20const&\29
+3772:std::__2::numpunct<wchar_t>::~numpunct\28\29
+3773:std::__2::numpunct<char>::~numpunct\28\29
+3774:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20int&\29\20const
+3775:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>>\28std::__2::locale\20const&\29
+3776:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20int&\29\20const
+3777:std::__2::moneypunct<wchar_t\2c\20true>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<wchar_t\2c\20true>>\28std::__2::locale\20const&\29
+3778:std::__2::moneypunct<wchar_t\2c\20false>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<wchar_t\2c\20false>>\28std::__2::locale\20const&\29
+3779:std::__2::moneypunct<wchar_t\2c\20false>::do_negative_sign\28\29\20const
+3780:std::__2::moneypunct<char\2c\20true>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<char\2c\20true>>\28std::__2::locale\20const&\29
+3781:std::__2::moneypunct<char\2c\20false>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<char\2c\20false>>\28std::__2::locale\20const&\29
+3782:std::__2::moneypunct<char\2c\20false>::do_negative_sign\28\29\20const
+3783:std::__2::money_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::locale\20const&\2c\20unsigned\20int\2c\20unsigned\20int&\2c\20bool&\2c\20std::__2::ctype<wchar_t>\20const&\2c\20std::__2::unique_ptr<wchar_t\2c\20void\20\28*\29\28void*\29>&\2c\20wchar_t*&\2c\20wchar_t*\29
+3784:std::__2::money_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::locale\20const&\2c\20unsigned\20int\2c\20unsigned\20int&\2c\20bool&\2c\20std::__2::ctype<char>\20const&\2c\20std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>&\2c\20char*&\2c\20char*\29
+3785:std::__2::locale::__imp::~__imp\28\29
+3786:std::__2::iterator_traits<unsigned\20int\20const*>::difference_type\20std::__2::__distance\5babi:v160004\5d<unsigned\20int\20const*>\28unsigned\20int\20const*\2c\20unsigned\20int\20const*\2c\20std::__2::random_access_iterator_tag\29
+3787:std::__2::iterator_traits<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*>::difference_type\20std::__2::distance\5babi:v160004\5d<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*>\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\29
+3788:std::__2::iterator_traits<char*>::difference_type\20std::__2::distance\5babi:v160004\5d<char*>\28char*\2c\20char*\29
+3789:std::__2::iterator_traits<char*>::difference_type\20std::__2::__distance\5babi:v160004\5d<char*>\28char*\2c\20char*\2c\20std::__2::random_access_iterator_tag\29
+3790:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator++\5babi:v160004\5d\28int\29
+3791:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::__test_for_eof\5babi:v160004\5d\28\29\20const
+3792:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator++\5babi:v160004\5d\28int\29
+3793:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::__test_for_eof\5babi:v160004\5d\28\29\20const
+3794:std::__2::ios_base::width\5babi:v160004\5d\28long\29
+3795:std::__2::ios_base::init\28void*\29
+3796:std::__2::ios_base::imbue\28std::__2::locale\20const&\29
+3797:std::__2::ios_base::clear\28unsigned\20int\29
+3798:std::__2::ios_base::__call_callbacks\28std::__2::ios_base::event\29
+3799:std::__2::hash<skia::textlayout::FontArguments>::operator\28\29\28skia::textlayout::FontArguments\20const&\29\20const
+3800:std::__2::enable_if<std::is_base_of_v<SkShader\2c\20SkPictureShader>\2c\20sk_sp<SkShader>>::type\20SkLocalMatrixShader::MakeWrapped<SkPictureShader\2c\20sk_sp<SkPicture>\2c\20SkTileMode&\2c\20SkTileMode&\2c\20SkFilterMode&\2c\20SkRect\20const*&>\28SkMatrix\20const*\2c\20sk_sp<SkPicture>&&\2c\20SkTileMode&\2c\20SkTileMode&\2c\20SkFilterMode&\2c\20SkRect\20const*&\29
+3801:std::__2::enable_if<is_move_constructible<char>::value\20&&\20is_move_assignable<char>::value\2c\20void>::type\20std::__2::swap\5babi:v160004\5d<char>\28char&\2c\20char&\29
+3802:std::__2::enable_if<__is_cpp17_random_access_iterator<char\20const*>::value\2c\20char*>::type\20std::__2::copy_n\5babi:v160004\5d<char\20const*\2c\20unsigned\20long\2c\20char*>\28char\20const*\2c\20unsigned\20long\2c\20char*\29
+3803:std::__2::enable_if<__is_cpp17_forward_iterator<wchar_t\20const*>::value\2c\20void>::type\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__init<wchar_t\20const*>\28wchar_t\20const*\2c\20wchar_t\20const*\29
+3804:std::__2::enable_if<__is_cpp17_forward_iterator<char*>::value\2c\20void>::type\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__init<char*>\28char*\2c\20char*\29
+3805:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__add_back_capacity\28\29
+3806:std::__2::default_delete<sktext::gpu::TextBlobRedrawCoordinator>::operator\28\29\5babi:v160004\5d\28sktext::gpu::TextBlobRedrawCoordinator*\29\20const
+3807:std::__2::default_delete<sktext::GlyphRunBuilder>::operator\28\29\5babi:v160004\5d\28sktext::GlyphRunBuilder*\29\20const
+3808:std::__2::ctype<char>::~ctype\28\29
+3809:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::~codecvt\28\29
+3810:std::__2::codecvt<char\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+3811:std::__2::codecvt<char32_t\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20char32_t\20const*\2c\20char32_t\20const*\2c\20char32_t\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+3812:std::__2::codecvt<char32_t\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+3813:std::__2::codecvt<char32_t\2c\20char\2c\20__mbstate_t>::do_in\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20char32_t*\2c\20char32_t*\2c\20char32_t*&\29\20const
+3814:std::__2::codecvt<char16_t\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20char16_t\20const*\2c\20char16_t\20const*\2c\20char16_t\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+3815:std::__2::codecvt<char16_t\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+3816:std::__2::codecvt<char16_t\2c\20char\2c\20__mbstate_t>::do_in\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20char16_t*\2c\20char16_t*\2c\20char16_t*&\29\20const
+3817:std::__2::char_traits<char>::not_eof\28int\29
+3818:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::str\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+3819:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::str\28\29\20const
+3820:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::basic_string\5babi:v160004\5d\28unsigned\20long\2c\20wchar_t\29
+3821:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__grow_by_and_replace\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20wchar_t\20const*\29
+3822:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__grow_by\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+3823:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::insert\28unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29
+3824:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d\28unsigned\20long\2c\20char\29
+3825:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20void>\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\20const&\29
+3826:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__throw_out_of_range\5babi:v160004\5d\28\29\20const
+3827:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__null_terminate_at\5babi:v160004\5d\28char*\2c\20unsigned\20long\29
+3828:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__assign_no_alias<false>\28char\20const*\2c\20unsigned\20long\29
+3829:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\20skia_private::TArray<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20false>::emplace_back<char\20const*>\28char\20const*&&\29
+3830:std::__2::basic_streambuf<wchar_t\2c\20std::__2::char_traits<wchar_t>>::sgetc\5babi:v160004\5d\28\29
+3831:std::__2::basic_streambuf<wchar_t\2c\20std::__2::char_traits<wchar_t>>::sbumpc\5babi:v160004\5d\28\29
+3832:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::sputc\5babi:v160004\5d\28char\29
+3833:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::sgetc\5babi:v160004\5d\28\29
+3834:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::sbumpc\5babi:v160004\5d\28\29
+3835:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::basic_streambuf\28\29
+3836:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29.2
+3837:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::sentry::~sentry\28\29
+3838:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::sentry::sentry\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\29
+3839:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::operator<<\28float\29
+3840:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::flush\28\29
+3841:std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29.2
+3842:std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::sentry::sentry\28std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>&\2c\20bool\29
+3843:std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::deallocate\5babi:v160004\5d\28std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>&\2c\20std::__2::locale::facet**\2c\20unsigned\20long\29
+3844:std::__2::allocator<wchar_t>::deallocate\5babi:v160004\5d\28wchar_t*\2c\20unsigned\20long\29
+3845:std::__2::allocator<wchar_t>::allocate\5babi:v160004\5d\28unsigned\20long\29
+3846:std::__2::allocator<char>::allocate\5babi:v160004\5d\28unsigned\20long\29
+3847:std::__2::__unique_if<SkSL::ConstructorCompound>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorCompound\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+3848:std::__2::__time_put::__time_put\5babi:v160004\5d\28\29
+3849:std::__2::__time_put::__do_put\28char*\2c\20char*&\2c\20tm\20const*\2c\20char\2c\20char\29\20const
+3850:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_back\28skia::textlayout::OneLineShaper::RunBlock*&&\29
+3851:std::__2::__optional_destruct_base<GrStyledShape\2c\20false>::~__optional_destruct_base\5babi:v160004\5d\28\29
+3852:std::__2::__num_put<wchar_t>::__widen_and_group_int\28char*\2c\20char*\2c\20char*\2c\20wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20std::__2::locale\20const&\29
+3853:std::__2::__num_put<wchar_t>::__widen_and_group_float\28char*\2c\20char*\2c\20char*\2c\20wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20std::__2::locale\20const&\29
+3854:std::__2::__num_put<char>::__widen_and_group_int\28char*\2c\20char*\2c\20char*\2c\20char*\2c\20char*&\2c\20char*&\2c\20std::__2::locale\20const&\29
+3855:std::__2::__num_put<char>::__widen_and_group_float\28char*\2c\20char*\2c\20char*\2c\20char*\2c\20char*&\2c\20char*&\2c\20std::__2::locale\20const&\29
+3856:std::__2::__money_put<wchar_t>::__gather_info\28bool\2c\20bool\2c\20std::__2::locale\20const&\2c\20std::__2::money_base::pattern&\2c\20wchar_t&\2c\20wchar_t&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&\2c\20int&\29
+3857:std::__2::__money_put<wchar_t>::__format\28wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20unsigned\20int\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20std::__2::ctype<wchar_t>\20const&\2c\20bool\2c\20std::__2::money_base::pattern\20const&\2c\20wchar_t\2c\20wchar_t\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\2c\20int\29
+3858:std::__2::__money_put<char>::__gather_info\28bool\2c\20bool\2c\20std::__2::locale\20const&\2c\20std::__2::money_base::pattern&\2c\20char&\2c\20char&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20int&\29
+3859:std::__2::__money_put<char>::__format\28char*\2c\20char*&\2c\20char*&\2c\20unsigned\20int\2c\20char\20const*\2c\20char\20const*\2c\20std::__2::ctype<char>\20const&\2c\20bool\2c\20std::__2::money_base::pattern\20const&\2c\20char\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20int\29
+3860:std::__2::__libcpp_sscanf_l\28char\20const*\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+3861:std::__2::__libcpp_mbrtowc_l\5babi:v160004\5d\28wchar_t*\2c\20char\20const*\2c\20unsigned\20long\2c\20__mbstate_t*\2c\20__locale_struct*\29
+3862:std::__2::__libcpp_mb_cur_max_l\5babi:v160004\5d\28__locale_struct*\29
+3863:std::__2::__libcpp_deallocate\5babi:v160004\5d\28void*\2c\20unsigned\20long\2c\20unsigned\20long\29
+3864:std::__2::__libcpp_allocate\5babi:v160004\5d\28unsigned\20long\2c\20unsigned\20long\29
+3865:std::__2::__is_overaligned_for_new\5babi:v160004\5d\28unsigned\20long\29
+3866:std::__2::__function::__value_func<void\20\28void*\2c\20void\20const*\29>::swap\5babi:v160004\5d\28std::__2::__function::__value_func<void\20\28void*\2c\20void\20const*\29>&\29
+3867:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+3868:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+3869:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::operator\28\29\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29
+3870:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::destroy\28\29
+3871:std::__2::__constexpr_wcslen\5babi:v160004\5d\28wchar_t\20const*\29
+3872:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::pointer>\20std::__2::__allocate_at_least\5babi:v160004\5d<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>\28std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>&\2c\20unsigned\20long\29
+3873:start_input_pass
+3874:sktext::gpu::can_use_direct\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+3875:sktext::gpu::build_distance_adjust_table\28float\2c\20float\29
+3876:sktext::gpu::VertexFiller::opMaskType\28\29\20const
+3877:sktext::gpu::VertexFiller::fillVertexData\28int\2c\20int\2c\20SkSpan<sktext::gpu::Glyph\20const*>\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkIRect\2c\20void*\29\20const
+3878:sktext::gpu::TextBlobRedrawCoordinator::internalRemove\28sktext::gpu::TextBlob*\29
+3879:sktext::gpu::SubRunContainer::MakeInAlloc\28sktext::GlyphRunList\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\2c\20char\20const*\29::$_2::operator\28\29\28SkZip<SkPackedGlyphID\20const\2c\20SkPoint\20const>\2c\20skgpu::MaskFormat\29\20const
+3880:sktext::gpu::SubRunContainer::MakeInAlloc\28sktext::GlyphRunList\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\2c\20char\20const*\29::$_0::operator\28\29\28SkZip<SkPackedGlyphID\20const\2c\20SkPoint\20const>\2c\20skgpu::MaskFormat\29\20const
+3881:sktext::gpu::SubRunContainer::MakeInAlloc\28sktext::GlyphRunList\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\2c\20char\20const*\29
+3882:sktext::gpu::SubRunContainer::EstimateAllocSize\28sktext::GlyphRunList\20const&\29
+3883:sktext::gpu::SubRunAllocator::SubRunAllocator\28char*\2c\20int\2c\20int\29
+3884:sktext::gpu::StrikeCache::~StrikeCache\28\29
+3885:sktext::gpu::SlugImpl::Make\28SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\29
+3886:sktext::gpu::Slug::NextUniqueID\28\29
+3887:sktext::gpu::BagOfBytes::BagOfBytes\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29::$_1::operator\28\29\28\29\20const
+3888:sktext::glyphrun_source_bounds\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkZip<unsigned\20short\20const\2c\20SkPoint\20const>\2c\20SkSpan<SkPoint\20const>\29
+3889:sktext::SkStrikePromise::resetStrike\28\29
+3890:sktext::SkStrikePromise::SkStrikePromise\28sk_sp<SkStrike>&&\29
+3891:sktext::GlyphRunList::makeBlob\28\29\20const
+3892:sktext::GlyphRunBuilder::blobToGlyphRunList\28SkTextBlob\20const&\2c\20SkPoint\29
+3893:skstd::to_string\28float\29
+3894:skpathutils::FillPathWithPaint\28SkPath\20const&\2c\20SkPaint\20const&\2c\20SkPath*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29
+3895:skjpeg_err_exit\28jpeg_common_struct*\29
+3896:skip_string
+3897:skip_procedure
+3898:skif::\28anonymous\20namespace\29::is_nearly_integer_translation\28skif::LayerSpace<SkMatrix>\20const&\2c\20skif::LayerSpace<SkIPoint>*\29
+3899:skif::\28anonymous\20namespace\29::extract_subset\28SkSpecialImage\20const*\2c\20skif::LayerSpace<SkIPoint>\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20bool\29
+3900:skif::\28anonymous\20namespace\29::decompose_transform\28SkMatrix\20const&\2c\20SkPoint\2c\20SkMatrix*\2c\20SkMatrix*\29
+3901:skif::\28anonymous\20namespace\29::GaneshBackend::maxSigma\28\29\20const
+3902:skif::\28anonymous\20namespace\29::GaneshBackend::getBlurEngine\28\29\20const
+3903:skif::\28anonymous\20namespace\29::GaneshBackend::blur\28SkSize\2c\20sk_sp<SkSpecialImage>\2c\20SkIRect\20const&\2c\20SkTileMode\2c\20SkIRect\20const&\29\20const
+3904:skif::Mapping::applyOrigin\28skif::LayerSpace<SkIPoint>\20const&\29
+3905:skif::FilterResult::draw\28skif::Context\20const&\2c\20SkDevice*\2c\20bool\2c\20SkBlender\20const*\29\20const
+3906:skif::FilterResult::applyCrop\28skif::Context\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20SkTileMode\29\20const
+3907:skif::FilterResult::FilterResult\28std::__2::pair<sk_sp<SkSpecialImage>\2c\20skif::LayerSpace<SkIPoint>>\29
+3908:skia_private::THashTable<unsigned\20long\20long\2c\20unsigned\20long\20long\2c\20skia_private::THashSet<unsigned\20long\20long\2c\20SkGoodHash>::Traits>::set\28unsigned\20long\20long\29
+3909:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair&&\29
+3910:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair>::removeSlot\28int\29
+3911:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair&&\29
+3912:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\2c\20sk_sp<SkTypeface>\2c\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\2c\20skia::textlayout::OneLineShaper::FontKey\2c\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\2c\20sk_sp<SkTypeface>\2c\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::uncheckedSet\28skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\2c\20sk_sp<SkTypeface>\2c\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair&&\29
+3913:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>\2c\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\2c\20skia::textlayout::FontCollection::FamilyKey\2c\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>\2c\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::uncheckedSet\28skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>\2c\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair&&\29
+3914:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\2c\20GrResourceAllocator::Register*\2c\20GrResourceAllocator::UniqueKeyHash>::Pair\2c\20skgpu::UniqueKey\2c\20skia_private::THashMap<skgpu::UniqueKey\2c\20GrResourceAllocator::Register*\2c\20GrResourceAllocator::UniqueKeyHash>::Pair>::uncheckedSet\28skia_private::THashMap<skgpu::UniqueKey\2c\20GrResourceAllocator::Register*\2c\20GrResourceAllocator::UniqueKeyHash>::Pair&&\29
+3915:skia_private::THashTable<skia_private::THashMap<SkString\2c\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\2c\20SkGoodHash>::Pair\2c\20SkString\2c\20skia_private::THashMap<SkString\2c\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkString\2c\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\2c\20SkGoodHash>::Pair&&\29
+3916:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\2c\20SkSL::SymbolTable::SymbolKey\2c\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::find\28SkSL::SymbolTable::SymbolKey\20const&\29\20const
+3917:skia_private::THashTable<skia_private::THashMap<SkPath\2c\20int\2c\20SkPictureRecord::PathHash>::Pair\2c\20SkPath\2c\20skia_private::THashMap<SkPath\2c\20int\2c\20SkPictureRecord::PathHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkPath\2c\20int\2c\20SkPictureRecord::PathHash>::Pair&&\29
+3918:skia_private::THashTable<skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair\2c\20SkImageFilter\20const*\2c\20skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair&&\29
+3919:skia_private::THashTable<skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair\2c\20SkImageFilter\20const*\2c\20skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair>::resize\28int\29
+3920:skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::uncheckedSet\28skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair&&\29
+3921:skia_private::THashTable<skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair\2c\20SkIcuBreakIteratorCache::Request\2c\20skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair>::Slot::emplace\28skia_private::THashMap<SkIcuBreakIteratorCache::Request\2c\20sk_sp<SkIcuBreakIteratorCache::BreakIteratorRef>\2c\20SkIcuBreakIteratorCache::Request::Hash>::Pair&&\2c\20unsigned\20int\29
+3922:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::uncheckedSet\28skgpu::ganesh::SmallPathShapeData*&&\29
+3923:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::resize\28int\29
+3924:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::uncheckedSet\28sk_sp<sktext::gpu::TextStrike>&&\29
+3925:skia_private::THashTable<sk_sp<SkStrike>\2c\20SkDescriptor\2c\20SkStrikeCache::StrikeTraits>::resize\28int\29
+3926:skia_private::THashTable<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20SkImageFilterCacheKey\2c\20SkTDynamicHash<\28anonymous\20namespace\29::CacheImpl::Value\2c\20SkImageFilterCacheKey\2c\20\28anonymous\20namespace\29::CacheImpl::Value>::AdaptedTraits>::uncheckedSet\28\28anonymous\20namespace\29::CacheImpl::Value*&&\29
+3927:skia_private::THashTable<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20SkImageFilterCacheKey\2c\20SkTDynamicHash<\28anonymous\20namespace\29::CacheImpl::Value\2c\20SkImageFilterCacheKey\2c\20\28anonymous\20namespace\29::CacheImpl::Value>::AdaptedTraits>::resize\28int\29
+3928:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::uncheckedSet\28SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList*&&\29
+3929:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::resize\28int\29
+3930:skia_private::THashTable<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::uncheckedSet\28SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList*&&\29
+3931:skia_private::THashTable<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::resize\28int\29
+3932:skia_private::THashTable<SkResourceCache::Rec*\2c\20SkResourceCache::Key\2c\20\28anonymous\20namespace\29::HashTraits>::uncheckedSet\28SkResourceCache::Rec*&&\29
+3933:skia_private::THashTable<SkResourceCache::Rec*\2c\20SkResourceCache::Key\2c\20\28anonymous\20namespace\29::HashTraits>::resize\28int\29
+3934:skia_private::THashTable<SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Entry*\2c\20unsigned\20long\20long\2c\20SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Traits>::resize\28int\29
+3935:skia_private::THashTable<SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Entry*\2c\20unsigned\20int\2c\20SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Traits>::set\28SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Entry*\29
+3936:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\2c\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\2c\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\2c\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\2c\20skia::textlayout::ParagraphCacheKey\2c\20SkLRUCache<skia::textlayout::ParagraphCacheKey\2c\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\2c\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\2c\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::resize\28int\29
+3937:skia_private::THashTable<SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*\2c\20GrProgramDesc\2c\20SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Traits>::uncheckedSet\28SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*&&\29
+3938:skia_private::THashTable<SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*\2c\20GrProgramDesc\2c\20SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Traits>::resize\28int\29
+3939:skia_private::THashTable<GrGpuResource*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrGpuResource\2c\20skgpu::UniqueKey\2c\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::uncheckedSet\28GrGpuResource*&&\29
+3940:skia_private::THashTable<GrGpuResource*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrGpuResource\2c\20skgpu::UniqueKey\2c\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::resize\28int\29
+3941:skia_private::THashMap<unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\2c\20SkGoodHash>::set\28unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\29
+3942:skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::remove\28SkImageFilter\20const*\20const&\29
+3943:skia_private::TArray<skia::textlayout::Run\2c\20false>::~TArray\28\29
+3944:skia_private::TArray<skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::Entry\2c\20false>::installDataAndUpdateCapacity\28SkSpan<std::byte>\29
+3945:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\2c\20false>::operator=\28skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\2c\20false>&&\29
+3946:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\2c\20false>::installDataAndUpdateCapacity\28SkSpan<std::byte>\29
+3947:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20false>::operator=\28skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20false>&&\29
+3948:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20false>::installDataAndUpdateCapacity\28SkSpan<std::byte>\29
+3949:skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\2c\20false>::move\28void*\29
+3950:skia_private::TArray<SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>::operator=\28skia_private::TArray<SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>\20const&\29
+3951:skia_private::TArray<SkString\2c\20true>::operator=\28skia_private::TArray<SkString\2c\20true>&&\29
+3952:skia_private::TArray<SkSL::optimize_constructor_swizzle\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ConstructorCompound\20const&\2c\20skia_private::STArray<4\2c\20signed\20char\2c\20true>\29::ReorderedArgument\2c\20false>::push_back\28SkSL::optimize_constructor_swizzle\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ConstructorCompound\20const&\2c\20skia_private::STArray<4\2c\20signed\20char\2c\20true>\29::ReorderedArgument&&\29
+3953:skia_private::TArray<SkSL::Field\2c\20true>::TArray\28skia_private::TArray<SkSL::Field\2c\20true>&&\29
+3954:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\2c\20true>::swap\28skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\2c\20true>&\29
+3955:skia_private::TArray<SkRGBA4f<\28SkAlphaType\292>\2c\20true>::operator=\28skia_private::TArray<SkRGBA4f<\28SkAlphaType\292>\2c\20true>&&\29
+3956:skia_private::TArray<SkPath\2c\20true>::push_back_raw\28int\29
+3957:skia_private::TArray<SkMatrix\2c\20true>::push_back_raw\28int\29
+3958:skia_private::TArray<SkClosestRecord\2c\20true>::push_back_raw\28int\29
+3959:skia_private::TArray<PathSegment\2c\20true>::push_back_raw\28int\29
+3960:skia_private::TArray<GrTextureProxy*\2c\20true>::move_back_n\28int\2c\20GrTextureProxy**\29
+3961:skia_private::TArray<GrResourceCache::UnrefResourceMessage\2c\20false>::operator=\28skia_private::TArray<GrResourceCache::UnrefResourceMessage\2c\20false>&&\29
+3962:skia_private::TArray<GrGLAttribArrayState::AttribArrayState\2c\20true>::push_back_raw\28int\29
+3963:skia_private::TArray<EllipticalRRectOp::RRect\2c\20true>::push_back_n\28int\2c\20EllipticalRRectOp::RRect\20const*\29
+3964:skia_private::STArray<4\2c\20signed\20char\2c\20true>::STArray\28skia_private::STArray<4\2c\20signed\20char\2c\20true>\20const&\29
+3965:skia_png_zfree
+3966:skia_png_write_zTXt
+3967:skia_png_write_tIME
+3968:skia_png_write_tEXt
+3969:skia_png_write_iTXt
+3970:skia_png_set_write_fn
+3971:skia_png_set_strip_16
+3972:skia_png_set_read_user_transform_fn
+3973:skia_png_set_read_user_chunk_fn
+3974:skia_png_set_option
+3975:skia_png_set_mem_fn
+3976:skia_png_set_expand_gray_1_2_4_to_8
+3977:skia_png_set_error_fn
+3978:skia_png_set_compression_level
+3979:skia_png_set_IHDR
+3980:skia_png_read_filter_row
+3981:skia_png_process_IDAT_data
+3982:skia_png_icc_set_sRGB
+3983:skia_png_icc_check_tag_table
+3984:skia_png_icc_check_header
+3985:skia_png_get_uint_31
+3986:skia_png_get_sBIT
+3987:skia_png_get_rowbytes
+3988:skia_png_get_error_ptr
+3989:skia_png_get_IHDR
+3990:skia_png_do_swap
+3991:skia_png_do_read_transformations
+3992:skia_png_do_read_interlace
+3993:skia_png_do_packswap
+3994:skia_png_do_invert
+3995:skia_png_do_gray_to_rgb
+3996:skia_png_do_expand
+3997:skia_png_do_check_palette_indexes
+3998:skia_png_do_bgr
+3999:skia_png_destroy_png_struct
+4000:skia_png_destroy_gamma_table
+4001:skia_png_create_png_struct
+4002:skia_png_create_info_struct
+4003:skia_png_crc_read
+4004:skia_png_colorspace_sync_info
+4005:skia_png_check_IHDR
+4006:skia::textlayout::TypefaceFontStyleSet::matchStyle\28SkFontStyle\20const&\29
+4007:skia::textlayout::TextStyle::matchOneAttribute\28skia::textlayout::StyleType\2c\20skia::textlayout::TextStyle\20const&\29\20const
+4008:skia::textlayout::TextStyle::equals\28skia::textlayout::TextStyle\20const&\29\20const
+4009:skia::textlayout::TextShadow::operator!=\28skia::textlayout::TextShadow\20const&\29\20const
+4010:skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29
+4011:skia::textlayout::TextLine::iterateThroughClustersInGlyphsOrder\28bool\2c\20bool\2c\20std::__2::function<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>\20const&\29\20const::$_0::operator\28\29\28unsigned\20long\20const&\29\20const
+4012:skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\20const::'lambda'\28SkRect\29::operator\28\29\28SkRect\29\20const
+4013:skia::textlayout::TextLine::getMetrics\28\29\20const
+4014:skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29
+4015:skia::textlayout::TextLine::buildTextBlob\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+4016:skia::textlayout::TextLine::TextLine\28skia::textlayout::ParagraphImpl*\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20skia::textlayout::InternalLineMetrics\29
+4017:skia::textlayout::TextLine&\20skia_private::TArray<skia::textlayout::TextLine\2c\20false>::emplace_back<skia::textlayout::ParagraphImpl*\2c\20SkPoint&\2c\20SkPoint&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20float&\2c\20skia::textlayout::InternalLineMetrics&>\28skia::textlayout::ParagraphImpl*&&\2c\20SkPoint&\2c\20SkPoint&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20float&\2c\20skia::textlayout::InternalLineMetrics&\29
+4018:skia::textlayout::Run::shift\28skia::textlayout::Cluster\20const*\2c\20float\29
+4019:skia::textlayout::Run::newRunBuffer\28\29
+4020:skia::textlayout::Run::findLimitingGlyphClusters\28skia::textlayout::SkRange<unsigned\20long>\29\20const
+4021:skia::textlayout::ParagraphStyle::effective_align\28\29\20const
+4022:skia::textlayout::ParagraphStyle::ParagraphStyle\28\29
+4023:skia::textlayout::ParagraphPainter::DecorationStyle::DecorationStyle\28unsigned\20int\2c\20float\2c\20std::__2::optional<skia::textlayout::ParagraphPainter::DashPathEffect>\29
+4024:skia::textlayout::ParagraphImpl::~ParagraphImpl\28\29
+4025:skia::textlayout::ParagraphImpl::text\28skia::textlayout::SkRange<unsigned\20long>\29
+4026:skia::textlayout::ParagraphImpl::resolveStrut\28\29
+4027:skia::textlayout::ParagraphImpl::getGlyphInfoAtUTF16Offset\28unsigned\20long\2c\20skia::textlayout::Paragraph::GlyphInfo*\29
+4028:skia::textlayout::ParagraphImpl::getGlyphClusterAt\28unsigned\20long\2c\20skia::textlayout::Paragraph::GlyphClusterInfo*\29
+4029:skia::textlayout::ParagraphImpl::findPreviousGraphemeBoundary\28unsigned\20long\29\20const
+4030:skia::textlayout::ParagraphImpl::computeEmptyMetrics\28\29
+4031:skia::textlayout::ParagraphImpl::clusters\28skia::textlayout::SkRange<unsigned\20long>\29
+4032:skia::textlayout::ParagraphImpl::block\28unsigned\20long\29
+4033:skia::textlayout::ParagraphCacheValue::~ParagraphCacheValue\28\29
+4034:skia::textlayout::ParagraphCacheKey::ParagraphCacheKey\28skia::textlayout::ParagraphImpl\20const*\29
+4035:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\28\29
+4036:skia::textlayout::ParagraphBuilderImpl::make\28skia::textlayout::ParagraphStyle\20const&\2c\20sk_sp<skia::textlayout::FontCollection>\29
+4037:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\28skia::textlayout::PlaceholderStyle\20const&\2c\20bool\29
+4038:skia::textlayout::ParagraphBuilderImpl::ParagraphBuilderImpl\28skia::textlayout::ParagraphStyle\20const&\2c\20sk_sp<skia::textlayout::FontCollection>\2c\20std::__2::unique_ptr<SkUnicode\2c\20std::__2::default_delete<SkUnicode>>\29
+4039:skia::textlayout::Paragraph::~Paragraph\28\29
+4040:skia::textlayout::OneLineShaper::clusteredText\28skia::textlayout::SkRange<unsigned\20long>&\29
+4041:skia::textlayout::FontCollection::~FontCollection\28\29
+4042:skia::textlayout::FontCollection::matchTypeface\28SkString\20const&\2c\20SkFontStyle\29
+4043:skia::textlayout::FontCollection::defaultFallback\28int\2c\20SkFontStyle\2c\20SkString\20const&\29
+4044:skia::textlayout::FontCollection::FamilyKey::Hasher::operator\28\29\28skia::textlayout::FontCollection::FamilyKey\20const&\29\20const
+4045:skgpu::tess::\28anonymous\20namespace\29::write_curve_index_buffer_base_index\28skgpu::VertexWriter\2c\20unsigned\20long\2c\20unsigned\20short\29
+4046:skgpu::tess::StrokeIterator::next\28\29
+4047:skgpu::tess::StrokeIterator::finishOpenContour\28\29
+4048:skgpu::tess::PreChopPathCurves\28float\2c\20SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\29
+4049:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::~SmallPathOp\28\29
+4050:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::SmallPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrStyledShape\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20GrUserStencilSettings\20const*\29
+4051:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::recordDraw\28GrMeshDrawTarget*\2c\20int\2c\20unsigned\20long\2c\20void*\2c\20int\2c\20unsigned\20short*\29
+4052:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::AAFlatteningConvexPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20float\2c\20SkStrokeRec::Style\2c\20SkPaint::Join\2c\20float\2c\20GrUserStencilSettings\20const*\29
+4053:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::AAConvexPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrUserStencilSettings\20const*\29
+4054:skgpu::ganesh::TextureOp::Make\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::ganesh::TextureOp::Saturate\2c\20SkBlendMode\2c\20GrAAType\2c\20DrawQuad*\2c\20SkRect\20const*\29
+4055:skgpu::ganesh::TessellationPathRenderer::IsSupported\28GrCaps\20const&\29
+4056:skgpu::ganesh::SurfaceFillContext::fillRectToRectWithFP\28SkIRect\20const&\2c\20SkIRect\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+4057:skgpu::ganesh::SurfaceFillContext::blitTexture\28GrSurfaceProxyView\2c\20SkIRect\20const&\2c\20SkIPoint\20const&\29
+4058:skgpu::ganesh::SurfaceFillContext::addOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\29
+4059:skgpu::ganesh::SurfaceFillContext::addDrawOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\29
+4060:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\28\29.1
+4061:skgpu::ganesh::SurfaceDrawContext::drawVertices\28GrClip\20const*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20sk_sp<SkVertices>\2c\20GrPrimitiveType*\2c\20bool\29
+4062:skgpu::ganesh::SurfaceDrawContext::drawTexturedQuad\28GrClip\20const*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkBlendMode\2c\20DrawQuad*\2c\20SkRect\20const*\29
+4063:skgpu::ganesh::SurfaceDrawContext::drawTexture\28GrClip\20const*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkBlendMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20GrQuadAAFlags\2c\20SkCanvas::SrcRectConstraint\2c\20SkMatrix\20const&\2c\20sk_sp<GrColorSpaceXform>\29
+4064:skgpu::ganesh::SurfaceDrawContext::drawStrokedLine\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkPoint\20const*\2c\20SkStrokeRec\20const&\29
+4065:skgpu::ganesh::SurfaceDrawContext::drawRegion\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRegion\20const&\2c\20GrStyle\20const&\2c\20GrUserStencilSettings\20const*\29
+4066:skgpu::ganesh::SurfaceDrawContext::drawOval\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrStyle\20const&\29
+4067:skgpu::ganesh::SurfaceDrawContext::SurfaceDrawContext\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20SkSurfaceProps\20const&\29
+4068:skgpu::ganesh::SurfaceContext::~SurfaceContext\28\29
+4069:skgpu::ganesh::SurfaceContext::writePixels\28GrDirectContext*\2c\20GrCPixmap\2c\20SkIPoint\29
+4070:skgpu::ganesh::SurfaceContext::copy\28sk_sp<GrSurfaceProxy>\2c\20SkIRect\2c\20SkIPoint\29
+4071:skgpu::ganesh::SurfaceContext::copyScaled\28sk_sp<GrSurfaceProxy>\2c\20SkIRect\2c\20SkIRect\2c\20SkFilterMode\29
+4072:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+4073:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\28GrDirectContext*\2c\20SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\20const&\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::FinishContext::~FinishContext\28\29
+4074:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\28GrDirectContext*\2c\20SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\20const&\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+4075:skgpu::ganesh::SurfaceContext::SurfaceContext\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorInfo\20const&\29
+4076:skgpu::ganesh::StrokeTessellator::draw\28GrOpFlushState*\29\20const
+4077:skgpu::ganesh::StrokeTessellateOp::prePrepareTessellator\28GrTessellationShader::ProgramArgs&&\2c\20GrAppliedClip&&\29
+4078:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::NonAAStrokeRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrSimpleMeshDrawOpHelper::InputFlags\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkStrokeRec\20const&\2c\20GrAAType\29
+4079:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::AAStrokeRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::RectInfo\20const&\2c\20bool\29
+4080:skgpu::ganesh::StencilMaskHelper::drawShape\28GrShape\20const&\2c\20SkMatrix\20const&\2c\20SkRegion::Op\2c\20GrAA\29
+4081:skgpu::ganesh::SoftwarePathRenderer::DrawAroundInvPath\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrPaint&&\2c\20GrUserStencilSettings\20const&\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\29
+4082:skgpu::ganesh::SmallPathAtlasMgr::findOrCreate\28skgpu::ganesh::SmallPathShapeDataKey\20const&\29
+4083:skgpu::ganesh::SmallPathAtlasMgr::deleteCacheEntry\28skgpu::ganesh::SmallPathShapeData*\29
+4084:skgpu::ganesh::ShadowRRectOp::Make\28GrRecordingContext*\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20float\2c\20float\29
+4085:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::RegionOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkRegion\20const&\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\29
+4086:skgpu::ganesh::RasterAsView\28GrRecordingContext*\2c\20SkImage_Raster\20const*\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\29
+4087:skgpu::ganesh::QuadPerEdgeAA::Tessellator::append\28GrQuad*\2c\20GrQuad*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20GrQuadAAFlags\29
+4088:skgpu::ganesh::QuadPerEdgeAA::Tessellator::Tessellator\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20char*\29
+4089:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::initializeAttrs\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\29
+4090:skgpu::ganesh::QuadPerEdgeAA::IssueDraw\28GrCaps\20const&\2c\20GrOpsRenderPass*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20int\2c\20int\2c\20int\2c\20int\29
+4091:skgpu::ganesh::QuadPerEdgeAA::GetIndexBuffer\28GrMeshDrawTarget*\2c\20skgpu::ganesh::QuadPerEdgeAA::IndexBufferOption\29
+4092:skgpu::ganesh::PathTessellateOp::usesMSAA\28\29\20const
+4093:skgpu::ganesh::PathTessellateOp::prepareTessellator\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAppliedClip&&\29
+4094:skgpu::ganesh::PathTessellateOp::PathTessellateOp\28SkArenaAlloc*\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrPaint&&\2c\20SkRect\20const&\29
+4095:skgpu::ganesh::PathStencilCoverOp::prePreparePrograms\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAppliedClip&&\29
+4096:skgpu::ganesh::PathInnerTriangulateOp::prePreparePrograms\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAppliedClip&&\29
+4097:skgpu::ganesh::PathCurveTessellator::~PathCurveTessellator\28\29
+4098:skgpu::ganesh::PathCurveTessellator::prepareWithTriangles\28GrMeshDrawTarget*\2c\20SkMatrix\20const&\2c\20GrTriangulator::BreadcrumbTriangleList*\2c\20skgpu::ganesh::PathTessellator::PathDrawList\20const&\2c\20int\29
+4099:skgpu::ganesh::OpsTask::onMakeClosed\28GrRecordingContext*\2c\20SkIRect*\29
+4100:skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29
+4101:skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29
+4102:skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29
+4103:skgpu::ganesh::OpsTask::OpsTask\28GrDrawingManager*\2c\20GrSurfaceProxyView\2c\20GrAuditTrail*\2c\20sk_sp<GrArenas>\29
+4104:skgpu::ganesh::OpsTask::OpChain::tryConcat\28skgpu::ganesh::OpsTask::OpChain::List*\2c\20GrProcessorSet::Analysis\2c\20GrDstProxyView\20const&\2c\20GrAppliedClip\20const*\2c\20SkRect\20const&\2c\20GrCaps\20const&\2c\20SkArenaAlloc*\2c\20GrAuditTrail*\29
+4105:skgpu::ganesh::MakeFragmentProcessorFromView\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkSamplingOptions\2c\20SkTileMode\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkRect\20const*\29
+4106:skgpu::ganesh::LockTextureProxyView\28GrRecordingContext*\2c\20SkImage_Lazy\20const*\2c\20GrImageTexGenPolicy\2c\20skgpu::Mipmapped\29
+4107:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::~NonAALatticeOp\28\29
+4108:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::NonAALatticeOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20std::__2::unique_ptr<SkLatticeIter\2c\20std::__2::default_delete<SkLatticeIter>>\2c\20SkRect\20const&\29
+4109:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::programInfo\28\29
+4110:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Make\28GrRecordingContext*\2c\20SkArenaAlloc*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::LocalCoords\20const&\2c\20GrAA\29
+4111:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::FillRRectOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::LocalCoords\20const&\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::ProcessorFlags\29
+4112:skgpu::ganesh::DrawAtlasPathOp::prepareProgram\28GrCaps\20const&\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+4113:skgpu::ganesh::Device::replaceBackingProxy\28SkSurface::ContentChangeMode\2c\20sk_sp<GrRenderTargetProxy>\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const&\29
+4114:skgpu::ganesh::Device::makeSpecial\28SkBitmap\20const&\29
+4115:skgpu::ganesh::Device::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\2c\20bool\29
+4116:skgpu::ganesh::Device::drawEdgeAAImage\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\2c\20SkMatrix\20const&\2c\20SkTileMode\29
+4117:skgpu::ganesh::Device::discard\28\29
+4118:skgpu::ganesh::Device::android_utils_clipAsRgn\28SkRegion*\29\20const
+4119:skgpu::ganesh::DefaultPathRenderer::internalDrawPath\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrPaint&&\2c\20GrAAType\2c\20GrUserStencilSettings\20const&\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20GrStyledShape\20const&\2c\20bool\29
+4120:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+4121:skgpu::ganesh::CopyView\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+4122:skgpu::ganesh::ClipStack::clipPath\28SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrAA\2c\20SkClipOp\29
+4123:skgpu::ganesh::ClipStack::SaveRecord::replaceWithElement\28skgpu::ganesh::ClipStack::RawElement&&\2c\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\2c\201>*\29
+4124:skgpu::ganesh::ClipStack::SaveRecord::addElement\28skgpu::ganesh::ClipStack::RawElement&&\2c\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\2c\201>*\29
+4125:skgpu::ganesh::ClipStack::RawElement::contains\28skgpu::ganesh::ClipStack::Draw\20const&\29\20const
+4126:skgpu::ganesh::AtlasTextOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+4127:skgpu::ganesh::AtlasTextOp::AtlasTextOp\28skgpu::ganesh::AtlasTextOp::MaskType\2c\20bool\2c\20int\2c\20SkRect\2c\20skgpu::ganesh::AtlasTextOp::Geometry*\2c\20GrColorInfo\20const&\2c\20GrPaint&&\29
+4128:skgpu::ganesh::AtlasRenderTask::stencilAtlasRect\28GrRecordingContext*\2c\20SkRect\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrUserStencilSettings\20const*\29
+4129:skgpu::ganesh::AtlasRenderTask::addPath\28SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkIPoint\2c\20int\2c\20int\2c\20bool\2c\20SkIPoint16*\29
+4130:skgpu::ganesh::AtlasPathRenderer::preFlush\28GrOnFlushResourceProvider*\29
+4131:skgpu::ganesh::AtlasPathRenderer::addPathToAtlas\28GrRecordingContext*\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkRect\20const&\2c\20SkIRect*\2c\20SkIPoint16*\2c\20bool*\2c\20std::__2::function<bool\20\28GrSurfaceProxy\20const*\29>\20const&\29
+4132:skgpu::ganesh::AsFragmentProcessor\28GrRecordingContext*\2c\20SkImage\20const*\2c\20SkSamplingOptions\2c\20SkTileMode\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkRect\20const*\29
+4133:skgpu::TiledTextureUtils::OptimizeSampleArea\28SkISize\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkPoint\20const*\2c\20SkRect*\2c\20SkRect*\2c\20SkMatrix*\29
+4134:skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::process\28\29
+4135:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\28\29
+4136:skgpu::RectanizerSkyline::addRect\28int\2c\20int\2c\20SkIPoint16*\29
+4137:skgpu::Plot::Plot\28int\2c\20int\2c\20skgpu::AtlasGenerationCounter*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20SkColorType\2c\20unsigned\20long\29
+4138:skgpu::GetReducedBlendModeInfo\28SkBlendMode\29
+4139:skgpu::BlendFuncName\28SkBlendMode\29
+4140:skcms_ApproximatelyEqualProfiles
+4141:sk_sp<SkSurface_Raster>\20sk_make_sp<SkSurface_Raster\2c\20SkImageInfo\20const&\2c\20sk_sp<SkPixelRef>\2c\20SkSurfaceProps\20const*&>\28SkImageInfo\20const&\2c\20sk_sp<SkPixelRef>&&\2c\20SkSurfaceProps\20const*&\29
+4142:sk_fopen\28char\20const*\2c\20SkFILE_Flags\29
+4143:sk_fgetsize\28_IO_FILE*\29
+4144:sk_fclose\28_IO_FILE*\29
+4145:sk_error_fn\28png_struct_def*\2c\20char\20const*\29
+4146:setup_masks_arabic_plan\28arabic_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_script_t\29
+4147:set_khr_debug_label\28GrGLGpu*\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+4148:setThrew
+4149:setCommonICUData\28UDataMemory*\2c\20signed\20char\2c\20UErrorCode*\29
+4150:serialize_image\28SkImage\20const*\2c\20SkSerialProcs\29
+4151:send_tree
+4152:sect_with_vertical\28SkPoint\20const*\2c\20float\29
+4153:sect_with_horizontal\28SkPoint\20const*\2c\20float\29
+4154:scanexp
+4155:scalbnl
+4156:rewind_if_necessary\28GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29
+4157:resolveImplicitLevels\28UBiDi*\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+4158:reset_and_decode_image_config\28wuffs_gif__decoder__struct*\2c\20wuffs_base__image_config__struct*\2c\20wuffs_base__io_buffer__struct*\2c\20SkStream*\29
+4159:res_unload_73
+4160:res_countArrayItems_73
+4161:renderbuffer_storage_msaa\28GrGLGpu*\2c\20int\2c\20unsigned\20int\2c\20int\2c\20int\29
+4162:recursive_edge_intersect\28GrTriangulator::Line\20const&\2c\20SkPoint\2c\20SkPoint\2c\20GrTriangulator::Line\20const&\2c\20SkPoint\2c\20SkPoint\2c\20SkPoint*\2c\20double*\2c\20double*\29
+4163:reclassify_vertex\28TriangulationVertex*\2c\20SkPoint\20const*\2c\20int\2c\20ReflexHash*\2c\20SkTInternalLList<TriangulationVertex>*\29
+4164:read_metadata\28std::__2::vector<SkJpegMetadataDecoder::Segment\2c\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>\20const&\2c\20unsigned\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+4165:quad_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4166:quad_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4167:quad_in_line\28SkPoint\20const*\29
+4168:psh_hint_table_init
+4169:psh_hint_table_find_strong_points
+4170:psh_hint_table_activate_mask
+4171:psh_hint_align
+4172:psh_glyph_interpolate_strong_points
+4173:psh_glyph_interpolate_other_points
+4174:psh_glyph_interpolate_normal_points
+4175:psh_blues_set_zones
+4176:ps_parser_load_field
+4177:ps_dimension_end
+4178:ps_dimension_done
+4179:ps_builder_start_point
+4180:printf_core
+4181:premultiply_argb_as_rgba\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+4182:premultiply_argb_as_bgra\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+4183:position_cluster\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20bool\29
+4184:portable::uniform_color_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4185:portable::set_rgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4186:portable::scale_1_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4187:portable::memset64\28unsigned\20long\20long*\2c\20unsigned\20long\20long\2c\20int\29
+4188:portable::lerp_1_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4189:portable::copy_from_indirect_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4190:portable::copy_2_slots_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4191:portable::check_decal_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4192:portable::branch_if_all_lanes_active\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4193:pop_arg
+4194:pntz
+4195:png_inflate
+4196:png_deflate_claim
+4197:png_decompress_chunk
+4198:png_cache_unknown_chunk
+4199:optimize_layer_filter\28SkImageFilter\20const*\2c\20SkPaint*\29
+4200:operator==\28SkPaint\20const&\2c\20SkPaint\20const&\29
+4201:open_face
+4202:openCommonData\28char\20const*\2c\20int\2c\20UErrorCode*\29
+4203:offsetTOCEntryCount\28UDataMemory\20const*\29
+4204:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::vertexStride\28SkMatrix\20const&\29\20const
+4205:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4206:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4207:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29\20const
+4208:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::glyphs\28\29\20const
+4209:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::glyphCount\28\29\20const
+4210:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29.1
+4211:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29
+4212:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\28\29\20const
+4213:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\28GrDirectContext*\2c\20void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\29
+4214:nearly_equal\28double\2c\20double\29
+4215:mbsrtowcs
+4216:map_quad_general\28skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20SkMatrix\20const&\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\29
+4217:make_tiled_gradient\28GrFPArgs\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20bool\2c\20bool\29
+4218:make_premul_effect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+4219:make_dual_interval_colorizer\28SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20float\29
+4220:make_clamped_gradient\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkRGBA4f<\28SkAlphaType\292>\2c\20SkRGBA4f<\28SkAlphaType\292>\2c\20bool\29
+4221:make_bmp_proxy\28GrProxyProvider*\2c\20SkBitmap\20const&\2c\20GrColorType\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\29
+4222:longest_match
+4223:long\20std::__2::__num_get_signed_integral\5babi:v160004\5d<long>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+4224:long\20long\20std::__2::__num_get_signed_integral\5babi:v160004\5d<long\20long>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+4225:long\20double\20std::__2::__num_get_float\5babi:v160004\5d<long\20double>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\29
+4226:load_post_names
+4227:line_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4228:line_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4229:legalfunc$_embind_register_bigint
+4230:jpeg_open_backing_store
+4231:jpeg_destroy
+4232:jpeg_alloc_huff_table
+4233:jinit_upsampler
+4234:isSpecialTypeCodepoints\28char\20const*\29
+4235:internal_memalign
+4236:int\20icu_73::\28anonymous\20namespace\29::MixedBlocks::findBlock<unsigned\20short\2c\20unsigned\20short>\28unsigned\20short\20const*\2c\20unsigned\20short\20const*\2c\20int\29\20const
+4237:int\20icu_73::\28anonymous\20namespace\29::MixedBlocks::findBlock<unsigned\20short\2c\20unsigned\20int>\28unsigned\20short\20const*\2c\20unsigned\20int\20const*\2c\20int\29\20const
+4238:insertRootBundle\28UResourceDataEntry*&\2c\20UErrorCode*\29
+4239:initial_reordering_consonant_syllable\28hb_ot_shape_plan_t\20const*\2c\20hb_face_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\29
+4240:init_error_limit
+4241:init_block
+4242:image_filter_color_type\28SkImageInfo\29
+4243:icu_73::set32x64Bits\28unsigned\20int*\2c\20int\2c\20int\29
+4244:icu_73::getExtName\28unsigned\20int\2c\20char*\2c\20unsigned\20short\29
+4245:icu_73::compareUnicodeString\28UElement\2c\20UElement\29
+4246:icu_73::cloneUnicodeString\28UElement*\2c\20UElement*\29
+4247:icu_73::\28anonymous\20namespace\29::mungeCharName\28char*\2c\20char\20const*\2c\20int\29
+4248:icu_73::\28anonymous\20namespace\29::MutableCodePointTrie::getDataBlock\28int\29
+4249:icu_73::UnicodeString::setCharAt\28int\2c\20char16_t\29
+4250:icu_73::UnicodeString::indexOf\28char16_t\20const*\2c\20int\2c\20int\2c\20int\2c\20int\29\20const
+4251:icu_73::UnicodeString::doReverse\28int\2c\20int\29
+4252:icu_73::UnicodeSetStringSpan::span\28char16_t\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+4253:icu_73::UnicodeSetStringSpan::spanUTF8\28unsigned\20char\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+4254:icu_73::UnicodeSetStringSpan::spanBack\28char16_t\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+4255:icu_73::UnicodeSetStringSpan::spanBackUTF8\28unsigned\20char\20const*\2c\20int\2c\20USetSpanCondition\29\20const
+4256:icu_73::UnicodeSet::set\28int\2c\20int\29
+4257:icu_73::UnicodeSet::setPattern\28char16_t\20const*\2c\20int\29
+4258:icu_73::UnicodeSet::remove\28int\29
+4259:icu_73::UnicodeSet::removeAll\28icu_73::UnicodeSet\20const&\29
+4260:icu_73::UnicodeSet::matches\28icu_73::Replaceable\20const&\2c\20int&\2c\20int\2c\20signed\20char\29
+4261:icu_73::UnicodeSet::matchesIndexValue\28unsigned\20char\29\20const
+4262:icu_73::UnicodeSet::clone\28\29\20const
+4263:icu_73::UnicodeSet::cloneAsThawed\28\29\20const
+4264:icu_73::UnicodeSet::applyPattern\28icu_73::RuleCharacterIterator&\2c\20icu_73::SymbolTable\20const*\2c\20icu_73::UnicodeString&\2c\20unsigned\20int\2c\20icu_73::UnicodeSet&\20\28icu_73::UnicodeSet::*\29\28int\29\2c\20int\2c\20UErrorCode&\29
+4265:icu_73::UnicodeSet::applyPatternIgnoreSpace\28icu_73::UnicodeString\20const&\2c\20icu_73::ParsePosition&\2c\20icu_73::SymbolTable\20const*\2c\20UErrorCode&\29
+4266:icu_73::UnicodeSet::add\28icu_73::UnicodeString\20const&\29
+4267:icu_73::UnicodeSet::addAll\28icu_73::UnicodeSet\20const&\29
+4268:icu_73::UnicodeSet::_generatePattern\28icu_73::UnicodeString&\2c\20signed\20char\29\20const
+4269:icu_73::UnicodeSet::UnicodeSet\28int\2c\20int\29
+4270:icu_73::UVector::sortedInsert\28void*\2c\20int\20\28*\29\28UElement\2c\20UElement\29\2c\20UErrorCode&\29
+4271:icu_73::UVector::setElementAt\28void*\2c\20int\29
+4272:icu_73::UVector::assign\28icu_73::UVector\20const&\2c\20void\20\28*\29\28UElement*\2c\20UElement*\29\2c\20UErrorCode&\29
+4273:icu_73::UStringSet::~UStringSet\28\29.1
+4274:icu_73::UStringSet::~UStringSet\28\29
+4275:icu_73::UStack::UStack\28void\20\28*\29\28void*\29\2c\20signed\20char\20\28*\29\28UElement\2c\20UElement\29\2c\20UErrorCode&\29
+4276:icu_73::UDataPathIterator::UDataPathIterator\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20signed\20char\2c\20UErrorCode*\29
+4277:icu_73::UCharsTrieBuilder::build\28UStringTrieBuildOption\2c\20UErrorCode&\29
+4278:icu_73::UCharsTrieBuilder::UCharsTrieBuilder\28UErrorCode&\29
+4279:icu_73::UCharsTrie::nextForCodePoint\28int\29
+4280:icu_73::UCharsTrie::Iterator::next\28UErrorCode&\29
+4281:icu_73::UCharsTrie::Iterator::branchNext\28char16_t\20const*\2c\20int\2c\20UErrorCode&\29
+4282:icu_73::UCharCharacterIterator::setText\28icu_73::ConstChar16Ptr\2c\20int\29
+4283:icu_73::StringTrieBuilder::writeBranchSubNode\28int\2c\20int\2c\20int\2c\20int\29
+4284:icu_73::StringTrieBuilder::LinearMatchNode::operator==\28icu_73::StringTrieBuilder::Node\20const&\29\20const
+4285:icu_73::StringTrieBuilder::LinearMatchNode::markRightEdgesFirst\28int\29
+4286:icu_73::RuleCharacterIterator::skipIgnored\28int\29
+4287:icu_73::RuleBasedBreakIterator::~RuleBasedBreakIterator\28\29
+4288:icu_73::RuleBasedBreakIterator::handleSafePrevious\28int\29
+4289:icu_73::RuleBasedBreakIterator::RuleBasedBreakIterator\28UErrorCode*\29
+4290:icu_73::RuleBasedBreakIterator::DictionaryCache::~DictionaryCache\28\29
+4291:icu_73::RuleBasedBreakIterator::DictionaryCache::populateDictionary\28int\2c\20int\2c\20int\2c\20int\29
+4292:icu_73::RuleBasedBreakIterator::BreakCache::seek\28int\29
+4293:icu_73::RuleBasedBreakIterator::BreakCache::current\28\29
+4294:icu_73::ResourceArray::getValue\28int\2c\20icu_73::ResourceValue&\29\20const
+4295:icu_73::ReorderingBuffer::equals\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\29\20const
+4296:icu_73::RBBIDataWrapper::removeReference\28\29
+4297:icu_73::PropNameData::getPropertyOrValueEnum\28int\2c\20char\20const*\29
+4298:icu_73::Normalizer2WithImpl::normalizeSecondAndAppend\28icu_73::UnicodeString&\2c\20icu_73::UnicodeString\20const&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+4299:icu_73::Normalizer2WithImpl::isNormalized\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+4300:icu_73::Normalizer2Impl::recompose\28icu_73::ReorderingBuffer&\2c\20int\2c\20signed\20char\29\20const
+4301:icu_73::Normalizer2Impl::init\28int\20const*\2c\20UCPTrie\20const*\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+4302:icu_73::Normalizer2Impl::findNextFCDBoundary\28char16_t\20const*\2c\20char16_t\20const*\29\20const
+4303:icu_73::Normalizer2Impl::decomposeUTF8\28unsigned\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20icu_73::ByteSink*\2c\20icu_73::Edits*\2c\20UErrorCode&\29\20const
+4304:icu_73::Normalizer2Impl::composeUTF8\28unsigned\20int\2c\20signed\20char\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20icu_73::ByteSink*\2c\20icu_73::Edits*\2c\20UErrorCode&\29\20const
+4305:icu_73::Normalizer2Impl::composeQuickCheck\28char16_t\20const*\2c\20char16_t\20const*\2c\20signed\20char\2c\20UNormalizationCheckResult*\29\20const
+4306:icu_73::Normalizer2Factory::getNFKC_CFImpl\28UErrorCode&\29
+4307:icu_73::Normalizer2Factory::getInstance\28UNormalizationMode\2c\20UErrorCode&\29
+4308:icu_73::Normalizer2::getNFCInstance\28UErrorCode&\29
+4309:icu_73::Norm2AllModes::~Norm2AllModes\28\29
+4310:icu_73::Norm2AllModes::createInstance\28icu_73::Normalizer2Impl*\2c\20UErrorCode&\29
+4311:icu_73::NoopNormalizer2::normalizeSecondAndAppend\28icu_73::UnicodeString&\2c\20icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+4312:icu_73::NoopNormalizer2::isNormalized\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+4313:icu_73::MlBreakEngine::~MlBreakEngine\28\29
+4314:icu_73::LocaleUtility::canonicalLocaleString\28icu_73::UnicodeString\20const*\2c\20icu_73::UnicodeString&\29
+4315:icu_73::LocaleKeyFactory::LocaleKeyFactory\28int\29
+4316:icu_73::LocaleKey::LocaleKey\28icu_73::UnicodeString\20const&\2c\20icu_73::UnicodeString\20const&\2c\20icu_73::UnicodeString\20const*\2c\20int\29
+4317:icu_73::LocaleBuilder::build\28UErrorCode&\29
+4318:icu_73::LocaleBuilder::LocaleBuilder\28\29
+4319:icu_73::LocaleBased::setLocaleIDs\28char\20const*\2c\20char\20const*\29
+4320:icu_73::Locale::setKeywordValue\28char\20const*\2c\20char\20const*\2c\20UErrorCode&\29
+4321:icu_73::Locale::operator=\28icu_73::Locale&&\29
+4322:icu_73::Locale::operator==\28icu_73::Locale\20const&\29\20const
+4323:icu_73::Locale::createKeywords\28UErrorCode&\29\20const
+4324:icu_73::LoadedNormalizer2Impl::load\28char\20const*\2c\20char\20const*\2c\20UErrorCode&\29
+4325:icu_73::LaoBreakEngine::divideUpDictionaryRange\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+4326:icu_73::InitCanonIterData::doInit\28icu_73::Normalizer2Impl*\2c\20UErrorCode&\29
+4327:icu_73::ICU_Utility::shouldAlwaysBeEscaped\28int\29
+4328:icu_73::ICU_Utility::isUnprintable\28int\29
+4329:icu_73::ICU_Utility::escape\28icu_73::UnicodeString&\2c\20int\29
+4330:icu_73::ICUServiceKey::parseSuffix\28icu_73::UnicodeString&\29
+4331:icu_73::ICUService::~ICUService\28\29
+4332:icu_73::ICUService::getVisibleIDs\28icu_73::UVector&\2c\20UErrorCode&\29\20const
+4333:icu_73::ICUService::clearServiceCache\28\29
+4334:icu_73::ICUNotifier::~ICUNotifier\28\29
+4335:icu_73::Hashtable::put\28icu_73::UnicodeString\20const&\2c\20void*\2c\20UErrorCode&\29
+4336:icu_73::DecomposeNormalizer2::hasBoundaryBefore\28int\29\20const
+4337:icu_73::DecomposeNormalizer2::hasBoundaryAfter\28int\29\20const
+4338:icu_73::CjkBreakEngine::~CjkBreakEngine\28\29
+4339:icu_73::CjkBreakEngine::CjkBreakEngine\28icu_73::DictionaryMatcher*\2c\20icu_73::LanguageType\2c\20UErrorCode&\29
+4340:icu_73::CharString::truncate\28int\29
+4341:icu_73::CharString*\20icu_73::MemoryPool<icu_73::CharString\2c\208>::create<char\20const*&\2c\20UErrorCode&>\28char\20const*&\2c\20UErrorCode&\29
+4342:icu_73::CharString*\20icu_73::MemoryPool<icu_73::CharString\2c\208>::create<>\28\29
+4343:icu_73::CanonIterData::addToStartSet\28int\2c\20int\2c\20UErrorCode&\29
+4344:icu_73::BytesTrie::next\28int\29
+4345:icu_73::BytesTrie::branchNext\28unsigned\20char\20const*\2c\20int\2c\20int\29
+4346:icu_73::ByteSinkUtil::appendCodePoint\28int\2c\20int\2c\20icu_73::ByteSink&\2c\20icu_73::Edits*\29
+4347:icu_73::BreakIterator::getLocale\28ULocDataLocaleType\2c\20UErrorCode&\29\20const
+4348:icu_73::BreakIterator::createCharacterInstance\28icu_73::Locale\20const&\2c\20UErrorCode&\29
+4349:hb_vector_t<hb_vector_t<hb_aat_map_t::range_flags_t\2c\20true>\2c\20false>::resize\28int\2c\20bool\2c\20bool\29
+4350:hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\2c\20false>::resize\28int\2c\20bool\2c\20bool\29
+4351:hb_utf8_t::next\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20int*\2c\20unsigned\20int\29
+4352:hb_unicode_script
+4353:hb_unicode_mirroring_nil\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+4354:hb_unicode_funcs_t::is_default_ignorable\28unsigned\20int\29
+4355:hb_shape_plan_key_t::init\28bool\2c\20hb_face_t*\2c\20hb_segment_properties_t\20const*\2c\20hb_feature_t\20const*\2c\20unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\2c\20char\20const*\20const*\29
+4356:hb_shape_plan_create2
+4357:hb_serialize_context_t::fini\28\29
+4358:hb_sanitize_context_t::return_t\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<hb_sanitize_context_t>\28hb_sanitize_context_t*\29\20const
+4359:hb_sanitize_context_t::return_t\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<hb_sanitize_context_t>\28hb_sanitize_context_t*\29\20const
+4360:hb_paint_extents_paint_linear_gradient\28hb_paint_funcs_t*\2c\20void*\2c\20hb_color_line_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+4361:hb_paint_extents_get_funcs\28\29
+4362:hb_paint_extents_context_t::hb_paint_extents_context_t\28\29
+4363:hb_ot_map_t::fini\28\29
+4364:hb_ot_layout_table_select_script
+4365:hb_ot_layout_table_get_lookup_count
+4366:hb_ot_layout_table_find_feature_variations
+4367:hb_ot_layout_table_find_feature\28hb_face_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+4368:hb_ot_layout_script_select_language
+4369:hb_ot_layout_language_get_required_feature
+4370:hb_ot_layout_language_find_feature
+4371:hb_ot_layout_has_substitution
+4372:hb_ot_layout_feature_with_variations_get_lookups
+4373:hb_ot_layout_collect_features_map
+4374:hb_ot_font_set_funcs
+4375:hb_lazy_loader_t<OT::sbix_accelerator_t\2c\20hb_face_lazy_loader_t<OT::sbix_accelerator_t\2c\2038u>\2c\20hb_face_t\2c\2038u\2c\20OT::sbix_accelerator_t>::create\28hb_face_t*\29
+4376:hb_lazy_loader_t<OT::post_accelerator_t\2c\20hb_face_lazy_loader_t<OT::post_accelerator_t\2c\207u>\2c\20hb_face_t\2c\207u\2c\20OT::post_accelerator_t>::get\28\29\20const
+4377:hb_lazy_loader_t<OT::avar\2c\20hb_table_lazy_loader_t<OT::avar\2c\2019u\2c\20true>\2c\20hb_face_t\2c\2019u\2c\20hb_blob_t>::get\28\29\20const
+4378:hb_lazy_loader_t<OT::COLR\2c\20hb_table_lazy_loader_t<OT::COLR\2c\2035u\2c\20true>\2c\20hb_face_t\2c\2035u\2c\20hb_blob_t>::get\28\29\20const
+4379:hb_lazy_loader_t<OT::CBDT_accelerator_t\2c\20hb_face_lazy_loader_t<OT::CBDT_accelerator_t\2c\2037u>\2c\20hb_face_t\2c\2037u\2c\20OT::CBDT_accelerator_t>::get\28\29\20const
+4380:hb_lazy_loader_t<AAT::trak\2c\20hb_table_lazy_loader_t<AAT::trak\2c\2032u\2c\20false>\2c\20hb_face_t\2c\2032u\2c\20hb_blob_t>::get\28\29\20const
+4381:hb_lazy_loader_t<AAT::morx\2c\20hb_table_lazy_loader_t<AAT::morx\2c\2028u\2c\20false>\2c\20hb_face_t\2c\2028u\2c\20hb_blob_t>::get\28\29\20const
+4382:hb_lazy_loader_t<AAT::mort\2c\20hb_table_lazy_loader_t<AAT::mort\2c\2029u\2c\20false>\2c\20hb_face_t\2c\2029u\2c\20hb_blob_t>::get\28\29\20const
+4383:hb_language_matches
+4384:hb_indic_get_categories\28unsigned\20int\29
+4385:hb_hashmap_t<hb_serialize_context_t::object_t\20const*\2c\20unsigned\20int\2c\20false>::fetch_item\28hb_serialize_context_t::object_t\20const*\20const&\2c\20unsigned\20int\29\20const
+4386:hb_hashmap_t<hb_serialize_context_t::object_t\20const*\2c\20unsigned\20int\2c\20false>::alloc\28unsigned\20int\29
+4387:hb_font_t::get_glyph_v_origin_with_fallback\28unsigned\20int\2c\20int*\2c\20int*\29
+4388:hb_font_set_variations
+4389:hb_font_set_funcs
+4390:hb_font_get_variation_glyph_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+4391:hb_font_get_glyph_h_advance
+4392:hb_font_get_glyph_extents
+4393:hb_font_get_font_h_extents_nil\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+4394:hb_font_funcs_set_variation_glyph_func
+4395:hb_font_funcs_set_nominal_glyphs_func
+4396:hb_font_funcs_set_nominal_glyph_func
+4397:hb_font_funcs_set_glyph_h_advances_func
+4398:hb_font_funcs_set_glyph_extents_func
+4399:hb_font_funcs_create
+4400:hb_draw_move_to_nil\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+4401:hb_draw_funcs_set_quadratic_to_func
+4402:hb_draw_funcs_set_move_to_func
+4403:hb_draw_funcs_set_line_to_func
+4404:hb_draw_funcs_set_cubic_to_func
+4405:hb_draw_funcs_destroy
+4406:hb_draw_funcs_create
+4407:hb_draw_extents_move_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+4408:hb_buffer_t::sort\28unsigned\20int\2c\20unsigned\20int\2c\20int\20\28*\29\28hb_glyph_info_t\20const*\2c\20hb_glyph_info_t\20const*\29\29
+4409:hb_buffer_t::safe_to_insert_tatweel\28unsigned\20int\2c\20unsigned\20int\29
+4410:hb_buffer_t::output_info\28hb_glyph_info_t\20const&\29
+4411:hb_buffer_t::message_impl\28hb_font_t*\2c\20char\20const*\2c\20void*\29
+4412:hb_buffer_t::leave\28\29
+4413:hb_buffer_t::delete_glyphs_inplace\28bool\20\28*\29\28hb_glyph_info_t\20const*\29\29
+4414:hb_buffer_t::clear_positions\28\29
+4415:hb_buffer_set_length
+4416:hb_buffer_get_glyph_positions
+4417:hb_buffer_diff
+4418:hb_buffer_create
+4419:hb_buffer_clear_contents
+4420:hb_buffer_add_utf8
+4421:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<OT::kern>\28hb_blob_t*\29
+4422:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>\28hb_blob_t*\29
+4423:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::morx>\28hb_blob_t*\29
+4424:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::mort>\28hb_blob_t*\29
+4425:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::ltag>\28hb_blob_t*\29
+4426:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::kerx>\28hb_blob_t*\29
+4427:hb_aat_layout_remove_deleted_glyphs\28hb_buffer_t*\29
+4428:hair_cubic\28SkPoint\20const*\2c\20SkRegion\20const*\2c\20SkBlitter*\2c\20void\20\28*\29\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29\29
+4429:getint
+4430:get_win_string
+4431:get_layer_mapping_and_bounds\28SkImageFilter\20const*\2c\20SkMatrix\20const&\2c\20skif::DeviceSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::ParameterSpace<SkRect>>\2c\20bool\2c\20float\29
+4432:get_dst_swizzle_and_store\28GrColorType\2c\20SkRasterPipelineOp*\2c\20LumMode*\2c\20bool*\2c\20bool*\29
+4433:get_driver_and_version\28GrGLStandard\2c\20GrGLVendor\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29
+4434:get_cicp_trfn\28skcms_TransferFunction\20const&\29
+4435:get_cicp_primaries\28skcms_Matrix3x3\20const&\29
+4436:getFallbackData\28UResourceBundle\20const*\2c\20char\20const**\2c\20unsigned\20int*\2c\20UErrorCode*\29
+4437:gen_key\28skgpu::KeyBuilder*\2c\20GrProgramInfo\20const&\2c\20GrCaps\20const&\29
+4438:gen_fp_key\28GrFragmentProcessor\20const&\2c\20GrCaps\20const&\2c\20skgpu::KeyBuilder*\29
+4439:gather_uniforms_and_check_for_main\28SkSL::Program\20const&\2c\20std::__2::vector<SkRuntimeEffect::Uniform\2c\20std::__2::allocator<SkRuntimeEffect::Uniform>>*\2c\20std::__2::vector<SkRuntimeEffect::Child\2c\20std::__2::allocator<SkRuntimeEffect::Child>>*\2c\20SkRuntimeEffect::Uniform::Flags\2c\20unsigned\20long*\29
+4440:fwrite
+4441:ft_var_to_normalized
+4442:ft_var_load_item_variation_store
+4443:ft_var_load_hvvar
+4444:ft_var_load_avar
+4445:ft_var_get_value_pointer
+4446:ft_var_apply_tuple
+4447:ft_validator_init
+4448:ft_mem_strcpyn
+4449:ft_hash_num_lookup
+4450:ft_glyphslot_set_bitmap
+4451:ft_glyphslot_preset_bitmap
+4452:ft_corner_orientation
+4453:ft_corner_is_flat
+4454:frexp
+4455:free_entry\28UResourceDataEntry*\29
+4456:fread
+4457:fp_force_eval
+4458:fp_barrier.1
+4459:fopen
+4460:fold_opacity_layer_color_to_paint\28SkPaint\20const*\2c\20bool\2c\20SkPaint*\29
+4461:fmodl
+4462:float\20std::__2::__num_get_float\5babi:v160004\5d<float>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\29
+4463:fill_shadow_rec\28SkPath\20const&\2c\20SkPoint3\20const&\2c\20SkPoint3\20const&\2c\20float\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkDrawShadowRec*\29
+4464:fill_inverse_cmap
+4465:fileno
+4466:exp2f
+4467:examine_app0
+4468:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29\2c\20void\2c\20SkCanvas*\2c\20SkPath\20const&\2c\20SkClipOp\2c\20bool>::invoke\28void\20\28SkCanvas::*\20const&\29\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29\2c\20SkCanvas*\2c\20SkPath*\2c\20SkClipOp\2c\20bool\29
+4469:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>\29\2c\20sk_sp<SkColorFilter>*\2c\20sk_sp<SkImageFilter>*\29
+4470:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29\2c\20SkBlendMode\2c\20sk_sp<SkImageFilter>*\2c\20sk_sp<SkImageFilter>*\29
+4471:emscripten::internal::Invoker<sk_sp<SkFontMgr>\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int>::invoke\28sk_sp<SkFontMgr>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\2c\20int\29\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\29
+4472:emscripten::internal::Invoker<sk_sp<SkBlender>\2c\20SkBlendMode>::invoke\28sk_sp<SkBlender>\20\28*\29\28SkBlendMode\29\2c\20SkBlendMode\29
+4473:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4474:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\29
+4475:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20void\2c\20SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28void\20\28**\29\28SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20SkPaint*\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+4476:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29\2c\20void\2c\20SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29\2c\20SkCanvas*\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+4477:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+4478:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+4479:emscripten::internal::FunctionInvoker<sk_sp<SkSurface>\20\28*\29\28SkCanvas&\2c\20SimpleImageInfo\29\2c\20sk_sp<SkSurface>\2c\20SkCanvas&\2c\20SimpleImageInfo>::invoke\28sk_sp<SkSurface>\20\28**\29\28SkCanvas&\2c\20SimpleImageInfo\29\2c\20SkCanvas*\2c\20SimpleImageInfo*\29
+4480:emscripten::internal::FunctionInvoker<sk_sp<SkColorSpace>\20\28*\29\28sk_sp<SkImage>\29\2c\20sk_sp<SkColorSpace>\2c\20sk_sp<SkImage>>::invoke\28sk_sp<SkColorSpace>\20\28**\29\28sk_sp<SkImage>\29\2c\20sk_sp<SkImage>*\29
+4481:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20SkPath\20const&\2c\20SkPathOp\29\2c\20bool\2c\20SkPath&\2c\20SkPath\20const&\2c\20SkPathOp>::invoke\28bool\20\28**\29\28SkPath&\2c\20SkPath\20const&\2c\20SkPathOp\29\2c\20SkPath*\2c\20SkPath*\2c\20SkPathOp\29
+4482:embind_init_builtin\28\29
+4483:embind_init_Skia\28\29
+4484:embind_init_Paragraph\28\29::$_0::__invoke\28SimpleParagraphStyle\2c\20sk_sp<SkFontMgr>\29
+4485:embind_init_Paragraph\28\29
+4486:embind_init_ParagraphGen\28\29
+4487:edge_line_needs_recursion\28SkPoint\20const&\2c\20SkPoint\20const&\29
+4488:draw_nine\28SkMask\20const&\2c\20SkIRect\20const&\2c\20SkIPoint\20const&\2c\20bool\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+4489:dquad_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+4490:dquad_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+4491:double\20std::__2::__num_get_float\5babi:v160004\5d<double>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\29
+4492:doOpenChoice\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20signed\20char\20\28*\29\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29\2c\20void*\2c\20UErrorCode*\29
+4493:dline_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+4494:dline_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+4495:deserialize_image\28sk_sp<SkData>\2c\20SkDeserialProcs\2c\20std::__2::optional<SkAlphaType>\29
+4496:deflate_stored
+4497:decompose_current_character\28hb_ot_shape_normalize_context_t\20const*\2c\20bool\29
+4498:decltype\28std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\20const*>\2c\20true>::__unwrap\28std::declval<std::__2::__wrap_iter<char\20const*>>\28\29\29\29\20std::__2::__unwrap_iter\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\20const*>\2c\20true>\2c\200>\28std::__2::__wrap_iter<char\20const*>\29
+4499:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\28SkArenaAlloc*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\29::'lambda'\28void*\29>\28skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\28SkArenaAlloc*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4500:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator*\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator\2c\20bool&\2c\20skgpu::tess::PatchAttribs&>\28bool&\2c\20skgpu::tess::PatchAttribs&\29::'lambda'\28void*\29>\28skgpu::ganesh::PathCurveTessellator&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4501:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::Make\28SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20bool\29::'lambda'\28void*\29>\28skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::Make\28SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20bool\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4502:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::MeshGP::Make\28SkArenaAlloc*\2c\20sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::MeshGP::Make\28SkArenaAlloc*\2c\20sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4503:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker*\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker\2c\20int&>\28int&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4504:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTransformShader*\20SkArenaAlloc::make<SkTransformShader\2c\20SkShaderBase\20const&\2c\20bool\20const&>\28SkShaderBase\20const&\2c\20bool\20const&\29::'lambda'\28void*\29>\28SkTransformShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4505:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkA8_Blitter*\20SkArenaAlloc::make<SkA8_Blitter\2c\20SkPixmap\20const&\2c\20SkPaint\20const&>\28SkPixmap\20const&\2c\20SkPaint\20const&\29::'lambda'\28void*\29>\28SkA8_Blitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4506:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrThreadSafeCache::Entry*\20SkArenaAlloc::make<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&>\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&\29::'lambda'\28void*\29>\28GrThreadSafeCache::Entry&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4507:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrResourceAllocator::Register*\20SkArenaAlloc::make<GrResourceAllocator::Register\2c\20GrSurfaceProxy*&\2c\20skgpu::ScratchKey\2c\20GrResourceProvider*&>\28GrSurfaceProxy*&\2c\20skgpu::ScratchKey&&\2c\20GrResourceProvider*&\29::'lambda'\28void*\29>\28GrResourceAllocator::Register&&\29
+4508:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrQuadEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrCaps\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29>\28GrQuadEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrCaps\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4509:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrPipeline*\20SkArenaAlloc::make<GrPipeline\2c\20GrPipeline::InitArgs&\2c\20GrProcessorSet\2c\20GrAppliedClip>\28GrPipeline::InitArgs&\2c\20GrProcessorSet&&\2c\20GrAppliedClip&&\29::'lambda'\28void*\29>\28GrPipeline&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4510:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrDistanceFieldA8TextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20float\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28GrDistanceFieldA8TextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20float\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4511:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29>\28GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29&&\29
+4512:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29>\28DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4513:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29>\28DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29&&\29
+4514:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<CircleGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28CircleGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4515:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+4516:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>>::__generic_construct\5babi:v160004\5d<std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>>\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>>&\2c\20std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>&&\29::'lambda'\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&&>\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&&\29
+4517:dcubic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+4518:dcubic_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+4519:dconic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+4520:dconic_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+4521:data_destroy_arabic\28void*\29
+4522:data_create_arabic\28hb_ot_shape_plan_t\20const*\29
+4523:cycle
+4524:cubic_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4525:cubic_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4526:create_colorindex
+4527:copysignl
+4528:copy_bitmap_subset\28SkBitmap\20const&\2c\20SkIRect\20const&\29
+4529:conic_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4530:conic_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4531:compute_pos_tan\28SkPoint\20const*\2c\20unsigned\20int\2c\20float\2c\20SkPoint*\2c\20SkPoint*\29
+4532:compute_intersection\28OffsetSegment\20const&\2c\20OffsetSegment\20const&\2c\20SkPoint*\2c\20float*\2c\20float*\29
+4533:compress_block
+4534:compose_khmer\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+4535:clipHandlesSprite\28SkRasterClip\20const&\2c\20int\2c\20int\2c\20SkPixmap\20const&\29
+4536:clamp\28SkPoint\2c\20SkPoint\2c\20SkPoint\2c\20GrTriangulator::Comparator\20const&\29
+4537:checkint
+4538:check_inverse_on_empty_return\28SkRegion*\2c\20SkPath\20const&\2c\20SkRegion\20const&\29
+4539:charIterTextAccess\28UText*\2c\20long\20long\2c\20signed\20char\29
+4540:char*\20std::__2::copy\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20char*>\28std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__wrap_iter<char\20const*>\2c\20char*\29
+4541:char*\20std::__2::copy\5babi:v160004\5d<char\20const*\2c\20char*>\28char\20const*\2c\20char\20const*\2c\20char*\29
+4542:cff_vstore_done
+4543:cff_subfont_load
+4544:cff_subfont_done
+4545:cff_size_select
+4546:cff_parser_run
+4547:cff_make_private_dict
+4548:cff_load_private_dict
+4549:cff_index_get_name
+4550:cff_get_kerning
+4551:cff_blend_build_vector
+4552:cf2_getSeacComponent
+4553:cf2_computeDarkening
+4554:cf2_arrstack_push
+4555:cbrt
+4556:byn$mgfn-shared$void\20extend_pts<\28SkPaint::Cap\292>\28SkPath::Verb\2c\20SkPath::Verb\2c\20SkPoint*\2c\20int\29
+4557:byn$mgfn-shared$void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+4558:byn$mgfn-shared$virtual\20thunk\20to\20GrRenderTarget::onRelease\28\29
+4559:byn$mgfn-shared$uloc_getName_73
+4560:byn$mgfn-shared$uhash_put_73
+4561:byn$mgfn-shared$ubidi_getClass_73
+4562:byn$mgfn-shared$t1_hints_open
+4563:byn$mgfn-shared$std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\29\20const
+4564:byn$mgfn-shared$std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20long\29\20const
+4565:byn$mgfn-shared$std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\29\20const
+4566:byn$mgfn-shared$std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\20long\29\20const
+4567:byn$mgfn-shared$std::__2::ctype<wchar_t>::do_toupper\28wchar_t*\2c\20wchar_t\20const*\29\20const
+4568:byn$mgfn-shared$std::__2::ctype<char>::do_toupper\28char*\2c\20char\20const*\29\20const
+4569:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>*\29\20const
+4570:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28\29\20const
+4571:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+4572:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+4573:byn$mgfn-shared$skia_private::TArray<unsigned\20int\2c\20true>::push_back_raw\28int\29
+4574:byn$mgfn-shared$skia_private::TArray<SkMatrix\2c\20true>::push_back_raw\28int\29
+4575:byn$mgfn-shared$skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::~Impl\28\29
+4576:byn$mgfn-shared$skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+4577:byn$mgfn-shared$skgpu::ScratchKey::GenerateResourceType\28\29
+4578:byn$mgfn-shared$skcms_TransferFunction_isPQish
+4579:byn$mgfn-shared$setup_masks_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+4580:byn$mgfn-shared$portable::store_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4581:byn$mgfn-shared$portable::load_8888_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4582:byn$mgfn-shared$portable::load_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4583:byn$mgfn-shared$portable::gather_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4584:byn$mgfn-shared$non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4585:byn$mgfn-shared$non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4586:byn$mgfn-shared$make_unpremul_effect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+4587:byn$mgfn-shared$icu_73::isAcceptable\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29
+4588:byn$mgfn-shared$icu_73::ResourceDataValue::getIntVector\28int&\2c\20UErrorCode&\29\20const
+4589:byn$mgfn-shared$hb_outline_recording_pen_move_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+4590:byn$mgfn-shared$hb_lazy_loader_t<OT::hhea\2c\20hb_table_lazy_loader_t<OT::hhea\2c\204u\2c\20true>\2c\20hb_face_t\2c\204u\2c\20hb_blob_t>::get\28\29\20const
+4591:byn$mgfn-shared$embind_init_Skia\28\29::$_75::__invoke\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29
+4592:byn$mgfn-shared$embind_init_Skia\28\29::$_72::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+4593:byn$mgfn-shared$embind_init_Skia\28\29::$_11::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+4594:byn$mgfn-shared$decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph::DrawableData*\20SkArenaAlloc::make<SkGlyph::DrawableData>\28\29::'lambda'\28void*\29>\28SkGlyph::DrawableData&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4595:byn$mgfn-shared$decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20skgpu::AtlasToken>\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\2c\20skgpu::AtlasToken&&\29::'lambda'\28void*\29>\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4596:byn$mgfn-shared$decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+4597:byn$mgfn-shared$cf2_stack_pushInt
+4598:byn$mgfn-shared$\28anonymous\20namespace\29::SDFTSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+4599:byn$mgfn-shared$\28anonymous\20namespace\29::DrawAtlasPathShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+4600:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4601:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4602:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::glyphCount\28\29\20const
+4603:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+4604:byn$mgfn-shared$SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_0::operator\28\29\28int\29\20const
+4605:byn$mgfn-shared$SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\28\29
+4606:byn$mgfn-shared$SkSL::RP::LValue::~LValue\28\29.1
+4607:byn$mgfn-shared$SkSL::FunctionReference::clone\28SkSL::Position\29\20const
+4608:byn$mgfn-shared$SkSL::EmptyExpression::clone\28SkSL::Position\29\20const
+4609:byn$mgfn-shared$SkSL::ChildCall::description\28SkSL::OperatorPrecedence\29\20const
+4610:byn$mgfn-shared$SkSL::ChildCall::clone\28SkSL::Position\29\20const
+4611:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\28\29.1
+4612:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\28\29
+4613:byn$mgfn-shared$SkRecorder::onDrawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+4614:byn$mgfn-shared$SkRecorder::onDrawPaint\28SkPaint\20const&\29
+4615:byn$mgfn-shared$SkRecorder::didScale\28float\2c\20float\29
+4616:byn$mgfn-shared$SkRecorder::didConcat44\28SkM44\20const&\29
+4617:byn$mgfn-shared$SkRasterPipelineBlitter::blitAntiH2\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+4618:byn$mgfn-shared$SkPictureRecord::onDrawPaint\28SkPaint\20const&\29
+4619:byn$mgfn-shared$SkPictureRecord::onDrawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+4620:byn$mgfn-shared$SkPictureRecord::didConcat44\28SkM44\20const&\29
+4621:byn$mgfn-shared$SkPairPathEffect::~SkPairPathEffect\28\29.1
+4622:byn$mgfn-shared$SkJSONWriter::endObject\28\29
+4623:byn$mgfn-shared$SkComposePathEffect::~SkComposePathEffect\28\29
+4624:byn$mgfn-shared$SkColorSpace::MakeSRGB\28\29
+4625:byn$mgfn-shared$SkChopMonoCubicAtY\28SkPoint\20const*\2c\20float\2c\20SkPoint*\29
+4626:byn$mgfn-shared$OT::PaintLinearGradient<OT::NoVariable>::sanitize\28hb_sanitize_context_t*\29\20const
+4627:byn$mgfn-shared$GrRRectShadowGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+4628:byn$mgfn-shared$GrPathTessellationShader::Impl::~Impl\28\29
+4629:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::~Listener\28\29.1
+4630:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::~Listener\28\29
+4631:byn$mgfn-shared$GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::clone\28\29\20const
+4632:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\28\29.1
+4633:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\28\29
+4634:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\28\29.1
+4635:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\28\29
+4636:byn$mgfn-shared$GrBicubicEffect::onMakeProgramImpl\28\29\20const
+4637:byn$mgfn-shared$Cr_z_inflate_table
+4638:byn$mgfn-shared$BlendFragmentProcessor::onMakeProgramImpl\28\29\20const
+4639:byn$mgfn-shared$AAT::Lookup<OT::IntType<unsigned\20short\2c\202u>>::get_value\28unsigned\20int\2c\20unsigned\20int\29\20const
+4640:build_ycc_rgb_table
+4641:bracketProcessChar\28BracketData*\2c\20int\29
+4642:bracketInit\28UBiDi*\2c\20BracketData*\29
+4643:bool\20std::__2::operator==\5babi:v160004\5d<char\2c\20void\20\28*\29\28void*\29>\28std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>\20const&\2c\20std::nullptr_t\29
+4644:bool\20std::__2::operator!=\5babi:v160004\5d<SkPaint\2c\20int>\28std::__2::variant<SkPaint\2c\20int>\20const&\2c\20std::__2::variant<SkPaint\2c\20int>\20const&\29
+4645:bool\20std::__2::__insertion_sort_incomplete<skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+4646:bool\20std::__2::__insertion_sort_incomplete<\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+4647:bool\20std::__2::__insertion_sort_incomplete<SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+4648:bool\20std::__2::__insertion_sort_incomplete<SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+4649:bool\20is_parallel<SkTCurve>\28SkDLine\20const&\2c\20SkTCurve\20const&\29
+4650:bool\20hb_hashmap_t<hb_serialize_context_t::object_t\20const*\2c\20unsigned\20int\2c\20false>::set_with_hash<hb_serialize_context_t::object_t*&\2c\20unsigned\20int&>\28hb_serialize_context_t::object_t*&\2c\20unsigned\20int\2c\20unsigned\20int&\2c\20bool\29
+4651:bool\20apply_string<GSUBProxy>\28OT::hb_ot_apply_context_t*\2c\20GSUBProxy::Lookup\20const&\2c\20OT::hb_ot_layout_lookup_accelerator_t\20const&\29
+4652:bool\20OT::hb_accelerate_subtables_context_t::cache_func_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\2c\20bool\29
+4653:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat2_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4654:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4655:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::ReverseChainSingleSubstFormat1>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4656:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4657:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::LigatureSubstFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4658:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::AlternateSubstFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4659:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat2>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4660:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat1>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4661:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4662:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4663:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4664:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4665:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4666:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::CursivePosFormat1>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4667:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat3>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4668:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat1_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4669:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat3>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4670:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat1_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4671:bool\20OT::OffsetTo<OT::Layout::Common::Coverage\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20true>::serialize_serialize<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\2c\20hb_array_t<OT::HBGlyphID16>>\2c\20$_7\20const&\2c\20\28hb_function_sortedness_t\291\2c\20\28void*\290>&>\28hb_serialize_context_t*\2c\20hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\2c\20hb_array_t<OT::HBGlyphID16>>\2c\20$_7\20const&\2c\20\28hb_function_sortedness_t\291\2c\20\28void*\290>&\29
+4672:bool\20GrTTopoSort_Visit<GrRenderTask\2c\20GrRenderTask::TopoSortTraits>\28GrRenderTask*\2c\20unsigned\20int*\29
+4673:blur_column\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20skvx::Vec<8\2c\20unsigned\20short>\20\28*\29\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29\2c\20int\2c\20int\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29
+4674:blit_saved_trapezoid\28SkAnalyticEdge*\2c\20int\2c\20int\2c\20int\2c\20AdditiveBlitter*\2c\20unsigned\20char*\2c\20bool\2c\20bool\2c\20int\2c\20int\29
+4675:blend_line\28SkColorType\2c\20void*\2c\20SkColorType\2c\20void\20const*\2c\20SkAlphaType\2c\20bool\2c\20int\29
+4676:bits_to_runs\28SkBlitter*\2c\20int\2c\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\2c\20long\2c\20unsigned\20char\29
+4677:baseline::exec_ops\28skcms_private::Op\20const*\2c\20void\20const**\2c\20char\20const*\2c\20char*\2c\20int\29
+4678:baseline::clut\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20float\20vector\5b4\5d*\2c\20float\20vector\5b4\5d*\2c\20float\20vector\5b4\5d*\2c\20float\20vector\5b4\5d*\29
+4679:barycentric_coords\28float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\29
+4680:auto\20std::__2::__unwrap_range\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__wrap_iter<char\20const*>>\28std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__wrap_iter<char\20const*>\29
+4681:atanf
+4682:apply_forward\28OT::hb_ot_apply_context_t*\2c\20OT::hb_ot_layout_lookup_accelerator_t\20const&\2c\20unsigned\20int\29
+4683:append_color_output\28PorterDuffXferProcessor\20const&\2c\20GrGLSLXPFragmentBuilder*\2c\20skgpu::BlendFormula::OutputType\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29
+4684:af_loader_compute_darkening
+4685:af_latin_metrics_scale_dim
+4686:af_latin_hints_detect_features
+4687:af_latin_hint_edges
+4688:af_hint_normal_stem
+4689:af_cjk_metrics_scale_dim
+4690:af_cjk_metrics_scale
+4691:af_cjk_metrics_init_widths
+4692:af_cjk_metrics_check_digits
+4693:af_cjk_hints_init
+4694:af_cjk_hints_detect_features
+4695:af_cjk_hints_compute_blue_edges
+4696:af_cjk_hints_apply
+4697:af_cjk_hint_edges
+4698:af_cjk_get_standard_widths
+4699:af_axis_hints_new_edge
+4700:adler32
+4701:a_ctz_32
+4702:_uhash_remove\28UHashtable*\2c\20UElement\29
+4703:_uhash_rehash\28UHashtable*\2c\20UErrorCode*\29
+4704:_uhash_put\28UHashtable*\2c\20UElement\2c\20UElement\2c\20signed\20char\2c\20UErrorCode*\29
+4705:_uhash_create\28int\20\28*\29\28UElement\29\2c\20signed\20char\20\28*\29\28UElement\2c\20UElement\29\2c\20signed\20char\20\28*\29\28UElement\2c\20UElement\29\2c\20int\2c\20UErrorCode*\29
+4706:_iup_worker_interpolate
+4707:_isUnicodeExtensionSubtag\28int&\2c\20char\20const*\2c\20int\29
+4708:_isTransformedExtensionSubtag\28int&\2c\20char\20const*\2c\20int\29
+4709:_hb_preprocess_text_vowel_constraints\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+4710:_hb_ot_shape
+4711:_hb_options_init\28\29
+4712:_hb_grapheme_group_func\28hb_glyph_info_t\20const&\2c\20hb_glyph_info_t\20const&\29
+4713:_hb_font_create\28hb_face_t*\29
+4714:_hb_fallback_shape
+4715:_glyf_get_advance_with_var_unscaled\28hb_font_t*\2c\20unsigned\20int\2c\20bool\29
+4716:__vfprintf_internal
+4717:__trunctfsf2
+4718:__tan
+4719:__rem_pio2_large
+4720:__overflow
+4721:__newlocale
+4722:__munmap
+4723:__mmap
+4724:__math_xflowf
+4725:__math_invalidf
+4726:__loc_is_allocated
+4727:__isxdigit_l
+4728:__getf2
+4729:__get_locale
+4730:__ftello_unlocked
+4731:__fstatat
+4732:__fseeko_unlocked
+4733:__floatscan
+4734:__expo2
+4735:__divtf3
+4736:__cxxabiv1::__base_class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+4737:\28anonymous\20namespace\29::set_uv_quad\28SkPoint\20const*\2c\20\28anonymous\20namespace\29::BezierVertex*\29
+4738:\28anonymous\20namespace\29::safe_to_ignore_subset_rect\28GrAAType\2c\20SkFilterMode\2c\20DrawQuad\20const&\2c\20SkRect\20const&\29
+4739:\28anonymous\20namespace\29::prepare_for_direct_mask_drawing\28SkStrike*\2c\20SkMatrix\20const&\2c\20SkZip<unsigned\20short\20const\2c\20SkPoint\20const>\2c\20SkZip<SkGlyph\20const*\2c\20SkPoint>\2c\20SkZip<unsigned\20short\2c\20SkPoint>\29
+4740:\28anonymous\20namespace\29::morphology_pass\28skif::Context\20const&\2c\20skif::FilterResult\20const&\2c\20\28anonymous\20namespace\29::MorphType\2c\20\28anonymous\20namespace\29::MorphDirection\2c\20int\29
+4741:\28anonymous\20namespace\29::make_non_convex_fill_op\28GrRecordingContext*\2c\20SkArenaAlloc*\2c\20skgpu::ganesh::FillPathFlags\2c\20GrAAType\2c\20SkRect\20const&\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrPaint&&\29
+4742:\28anonymous\20namespace\29::is_newer_better\28SkData*\2c\20SkData*\29
+4743:\28anonymous\20namespace\29::get_glyph_run_intercepts\28sktext::GlyphRun\20const&\2c\20SkPaint\20const&\2c\20float\20const*\2c\20float*\2c\20int*\29
+4744:\28anonymous\20namespace\29::getStringArray\28ResourceData\20const*\2c\20icu_73::ResourceArray\20const&\2c\20icu_73::UnicodeString*\2c\20int\2c\20UErrorCode&\29
+4745:\28anonymous\20namespace\29::getInclusionsForSource\28UPropertySource\2c\20UErrorCode&\29
+4746:\28anonymous\20namespace\29::filter_and_mm_have_effect\28GrQuad\20const&\2c\20GrQuad\20const&\29
+4747:\28anonymous\20namespace\29::draw_to_sw_mask\28GrSWMaskHelper*\2c\20skgpu::ganesh::ClipStack::Element\20const&\2c\20bool\29
+4748:\28anonymous\20namespace\29::determine_clipped_src_rect\28SkIRect\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20SkISize\20const&\2c\20SkRect\20const*\29
+4749:\28anonymous\20namespace\29::create_hb_face\28SkTypeface\20const&\29::$_0::__invoke\28void*\29
+4750:\28anonymous\20namespace\29::cpu_blur\28skif::Context\20const&\2c\20skif::LayerSpace<SkSize>\2c\20sk_sp<SkSpecialImage>\20const&\2c\20skif::LayerSpace<SkIRect>\2c\20skif::LayerSpace<SkIRect>\29::$_0::operator\28\29\28double\29\20const
+4751:\28anonymous\20namespace\29::copyFTBitmap\28FT_Bitmap_\20const&\2c\20SkMaskBuilder*\29
+4752:\28anonymous\20namespace\29::colrv1_start_glyph\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20unsigned\20short\2c\20FT_Color_Root_Transform_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29
+4753:\28anonymous\20namespace\29::colrv1_draw_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_COLR_Paint_\20const&\29
+4754:\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29
+4755:\28anonymous\20namespace\29::YUVPlanesRec::~YUVPlanesRec\28\29
+4756:\28anonymous\20namespace\29::TriangulatingPathOp::~TriangulatingPathOp\28\29
+4757:\28anonymous\20namespace\29::TriangulatingPathOp::TriangulatingPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrStyledShape\20const&\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\29
+4758:\28anonymous\20namespace\29::TriangulatingPathOp::Triangulate\28GrEagerVertexAllocator*\2c\20SkMatrix\20const&\2c\20GrStyledShape\20const&\2c\20SkIRect\20const&\2c\20float\2c\20bool*\29
+4759:\28anonymous\20namespace\29::TriangulatingPathOp::CreateKey\28skgpu::UniqueKey*\2c\20GrStyledShape\20const&\2c\20SkIRect\20const&\29
+4760:\28anonymous\20namespace\29::TransformedMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+4761:\28anonymous\20namespace\29::TextureOpImpl::propagateCoverageAAThroughoutChain\28\29
+4762:\28anonymous\20namespace\29::TextureOpImpl::characterize\28\28anonymous\20namespace\29::TextureOpImpl::Desc*\29\20const
+4763:\28anonymous\20namespace\29::TextureOpImpl::appendQuad\28DrawQuad*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\29
+4764:\28anonymous\20namespace\29::TextureOpImpl::Make\28GrRecordingContext*\2c\20GrTextureSetEntry*\2c\20int\2c\20int\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20skgpu::ganesh::TextureOp::Saturate\2c\20GrAAType\2c\20SkCanvas::SrcRectConstraint\2c\20SkMatrix\20const&\2c\20sk_sp<GrColorSpaceXform>\29
+4765:\28anonymous\20namespace\29::TextureOpImpl::FillInVertices\28GrCaps\20const&\2c\20\28anonymous\20namespace\29::TextureOpImpl*\2c\20\28anonymous\20namespace\29::TextureOpImpl::Desc*\2c\20char*\29
+4766:\28anonymous\20namespace\29::SpotVerticesFactory::makeVertices\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPoint*\29\20const
+4767:\28anonymous\20namespace\29::SkImageImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+4768:\28anonymous\20namespace\29::SkCropImageFilter::requiredInput\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\29\20const
+4769:\28anonymous\20namespace\29::SDFTSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+4770:\28anonymous\20namespace\29::RunIteratorQueue::advanceRuns\28\29
+4771:\28anonymous\20namespace\29::Pass::blur\28int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29
+4772:\28anonymous\20namespace\29::MipLevelHelper::allocAndInit\28SkArenaAlloc*\2c\20SkSamplingOptions\20const&\2c\20SkTileMode\2c\20SkTileMode\29
+4773:\28anonymous\20namespace\29::MeshOp::~MeshOp\28\29
+4774:\28anonymous\20namespace\29::MeshOp::MeshOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20sk_sp<SkVertices>\2c\20GrPrimitiveType\20const*\2c\20GrAAType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\29
+4775:\28anonymous\20namespace\29::MeshOp::MeshOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMesh\20const&\2c\20skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20true>\2c\20GrAAType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\29
+4776:\28anonymous\20namespace\29::MeshOp::Mesh::Mesh\28SkMesh\20const&\29
+4777:\28anonymous\20namespace\29::MeshGP::~MeshGP\28\29
+4778:\28anonymous\20namespace\29::MeshGP::Impl::~Impl\28\29
+4779:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::defineStruct\28char\20const*\29
+4780:\28anonymous\20namespace\29::FillRectOpImpl::tessellate\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20char*\29\20const
+4781:\28anonymous\20namespace\29::FillRectOpImpl::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20GrAAType\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+4782:\28anonymous\20namespace\29::FillRectOpImpl::FillRectOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\2c\20GrAAType\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+4783:\28anonymous\20namespace\29::EllipticalRRectEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrClipEdgeType\2c\20SkRRect\20const&\29
+4784:\28anonymous\20namespace\29::DrawAtlasOpImpl::DrawAtlasOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrAAType\2c\20int\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\29
+4785:\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4786:\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4787:\28anonymous\20namespace\29::DirectMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+4788:\28anonymous\20namespace\29::DirectMaskSubRun::glyphCount\28\29\20const
+4789:\28anonymous\20namespace\29::DefaultPathOp::programInfo\28\29
+4790:\28anonymous\20namespace\29::DefaultPathOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkPath\20const&\2c\20float\2c\20unsigned\20char\2c\20SkMatrix\20const&\2c\20bool\2c\20GrAAType\2c\20SkRect\20const&\2c\20GrUserStencilSettings\20const*\29
+4791:\28anonymous\20namespace\29::DefaultPathOp::DefaultPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkPath\20const&\2c\20float\2c\20unsigned\20char\2c\20SkMatrix\20const&\2c\20bool\2c\20GrAAType\2c\20SkRect\20const&\2c\20GrUserStencilSettings\20const*\29
+4792:\28anonymous\20namespace\29::ClipGeometry\20\28anonymous\20namespace\29::get_clip_geometry<skgpu::ganesh::ClipStack::SaveRecord\2c\20skgpu::ganesh::ClipStack::Draw>\28skgpu::ganesh::ClipStack::SaveRecord\20const&\2c\20skgpu::ganesh::ClipStack::Draw\20const&\29
+4793:\28anonymous\20namespace\29::CircularRRectEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+4794:\28anonymous\20namespace\29::CachedTessellations::~CachedTessellations\28\29
+4795:\28anonymous\20namespace\29::CachedTessellations::CachedTessellations\28\29
+4796:\28anonymous\20namespace\29::CacheImpl::~CacheImpl\28\29
+4797:\28anonymous\20namespace\29::AAHairlineOp::AAHairlineOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20unsigned\20char\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkIRect\2c\20float\2c\20GrUserStencilSettings\20const*\29
+4798:WebPResetDecParams
+4799:WebPRescalerGetScaledDimensions
+4800:WebPMultRows
+4801:WebPMultARGBRows
+4802:WebPIoInitFromOptions
+4803:WebPInitUpsamplers
+4804:WebPFlipBuffer
+4805:WebPDemuxGetChunk
+4806:WebPCopyDecBufferPixels
+4807:WebPAllocateDecBuffer
+4808:VP8RemapBitReader
+4809:VP8LHuffmanTablesAllocate
+4810:VP8LDspInit
+4811:VP8LConvertFromBGRA
+4812:VP8LColorCacheInit
+4813:VP8LColorCacheCopy
+4814:VP8LBuildHuffmanTable
+4815:VP8LBitReaderSetBuffer
+4816:VP8InitScanline
+4817:VP8GetInfo
+4818:VP8BitReaderSetBuffer
+4819:Update_Max
+4820:TransformOne_C
+4821:TT_Set_Named_Instance
+4822:TT_Hint_Glyph
+4823:StoreFrame
+4824:SortContourList\28SkOpContourHead**\2c\20bool\2c\20bool\29
+4825:SkYUVAPixmapInfo::isSupported\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\29\20const
+4826:SkWuffsCodec::seekFrame\28int\29
+4827:SkWuffsCodec::onStartIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+4828:SkWuffsCodec::onIncrementalDecodeTwoPass\28\29
+4829:SkWuffsCodec::decodeFrameConfig\28\29
+4830:SkWriter32::writeString\28char\20const*\2c\20unsigned\20long\29
+4831:SkWriteICCProfile\28skcms_ICCProfile\20const*\2c\20char\20const*\29
+4832:SkWStream::SizeOfPackedUInt\28unsigned\20long\29
+4833:SkWBuffer::padToAlign4\28\29
+4834:SkVertices::Builder::indices\28\29
+4835:SkUnicode_icu::extractWords\28unsigned\20short*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29
+4836:SkUnicode::convertUtf16ToUtf8\28std::__2::basic_string<char16_t\2c\20std::__2::char_traits<char16_t>\2c\20std::__2::allocator<char16_t>>\20const&\29
+4837:SkUnicode::MakeIcuBasedUnicode\28\29
+4838:SkUTF::NextUTF16\28unsigned\20short\20const**\2c\20unsigned\20short\20const*\29
+4839:SkTypeface_FreeType::Scanner::~Scanner\28\29
+4840:SkTypeface_FreeType::Scanner::scanFont\28SkStreamAsset*\2c\20int\2c\20SkString*\2c\20SkFontStyle*\2c\20bool*\2c\20skia_private::STArray<4\2c\20SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>*\29\20const
+4841:SkTypeface_FreeType::Scanner::Scanner\28\29
+4842:SkTypeface_FreeType::FaceRec::Make\28SkTypeface_FreeType\20const*\29
+4843:SkTypeface_Empty::SkTypeface_Empty\28\29
+4844:SkTypeface_Custom::onGetFamilyName\28SkString*\29\20const
+4845:SkTypeface::textToGlyphs\28void\20const*\2c\20unsigned\20long\2c\20SkTextEncoding\2c\20unsigned\20short*\2c\20int\29\20const
+4846:SkTypeface::serialize\28SkWStream*\2c\20SkTypeface::SerializeBehavior\29\20const
+4847:SkTypeface::openStream\28int*\29\20const
+4848:SkTypeface::getFamilyName\28SkString*\29\20const
+4849:SkTypeface::MakeDefault\28\29
+4850:SkTransformShader::update\28SkMatrix\20const&\29
+4851:SkTransformShader::SkTransformShader\28SkShaderBase\20const&\2c\20bool\29
+4852:SkTiffImageFileDirectory::getEntryTag\28unsigned\20short\29\20const
+4853:SkTextBlobBuilder::allocRunPos\28SkFont\20const&\2c\20int\2c\20SkRect\20const*\29
+4854:SkTextBlob::getIntercepts\28float\20const*\2c\20float*\2c\20SkPaint\20const*\29\20const
+4855:SkTextBlob::RunRecord::StorageSize\28unsigned\20int\2c\20unsigned\20int\2c\20SkTextBlob::GlyphPositioning\2c\20SkSafeMath*\29
+4856:SkTextBlob::MakeFromText\28void\20const*\2c\20unsigned\20long\2c\20SkFont\20const&\2c\20SkTextEncoding\29
+4857:SkTextBlob::MakeFromRSXform\28void\20const*\2c\20unsigned\20long\2c\20SkRSXform\20const*\2c\20SkFont\20const&\2c\20SkTextEncoding\29
+4858:SkTextBlob::Iter::experimentalNext\28SkTextBlob::Iter::ExperimentalRun*\29
+4859:SkTextBlob::Iter::Iter\28SkTextBlob\20const&\29
+4860:SkTaskGroup::wait\28\29
+4861:SkTaskGroup::add\28std::__2::function<void\20\28\29>\29
+4862:SkTSpan::onlyEndPointsInCommon\28SkTSpan\20const*\2c\20bool*\2c\20bool*\2c\20bool*\29
+4863:SkTSpan::linearIntersects\28SkTCurve\20const&\29\20const
+4864:SkTSect::removeAllBut\28SkTSpan\20const*\2c\20SkTSpan*\2c\20SkTSect*\29
+4865:SkTSect::intersects\28SkTSpan*\2c\20SkTSect*\2c\20SkTSpan*\2c\20int*\29
+4866:SkTSect::deleteEmptySpans\28\29
+4867:SkTSect::addSplitAt\28SkTSpan*\2c\20double\29
+4868:SkTSect::addForPerp\28SkTSpan*\2c\20double\29
+4869:SkTSect::EndsEqual\28SkTSect\20const*\2c\20SkTSect\20const*\2c\20SkIntersections*\29
+4870:SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::~SkTMultiMap\28\29
+4871:SkTDynamicHash<\28anonymous\20namespace\29::CacheImpl::Value\2c\20SkImageFilterCacheKey\2c\20\28anonymous\20namespace\29::CacheImpl::Value>::find\28SkImageFilterCacheKey\20const&\29\20const
+4872:SkTDStorage::calculateSizeOrDie\28int\29::$_1::operator\28\29\28\29\20const
+4873:SkTDStorage::SkTDStorage\28SkTDStorage&&\29
+4874:SkTCubic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+4875:SkTConic::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+4876:SkTConic::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+4877:SkTConic::controlsInside\28\29\20const
+4878:SkTConic::collapsed\28\29\20const
+4879:SkTBlockList<skgpu::ganesh::PathTessellator::PathDrawList\2c\2016>::reset\28\29
+4880:SkTBlockList<SkRasterClipStack::Rec\2c\2016>::reset\28\29
+4881:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\2c\201>::push_back\28GrGLProgramDataManager::GLUniformInfo\20const&\29
+4882:SkSwizzler::MakeSimple\28int\2c\20SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+4883:SkSurfaces::WrapPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkSurfaceProps\20const*\29
+4884:SkSurface_Base::onDraw\28SkCanvas*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+4885:SkSurface_Base::onCapabilities\28\29
+4886:SkStrokeRec::setHairlineStyle\28\29
+4887:SkStrokeRec::SkStrokeRec\28SkPaint\20const&\2c\20SkPaint::Style\2c\20float\29
+4888:SkStrokeRec::GetInflationRadius\28SkPaint::Join\2c\20float\2c\20SkPaint::Cap\2c\20float\29
+4889:SkString::insertHex\28unsigned\20long\2c\20unsigned\20int\2c\20int\29
+4890:SkString::appendVAList\28char\20const*\2c\20void*\29
+4891:SkString::SkString\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+4892:SkStrikeSpec::SkStrikeSpec\28SkStrikeSpec\20const&\29
+4893:SkStrikeSpec::ShouldDrawAsPath\28SkPaint\20const&\2c\20SkFont\20const&\2c\20SkMatrix\20const&\29
+4894:SkStrikeCache::internalRemoveStrike\28SkStrike*\29
+4895:SkStrikeCache::internalFindStrikeOrNull\28SkDescriptor\20const&\29
+4896:SkStrSplit\28char\20const*\2c\20char\20const*\2c\20SkStrSplitMode\2c\20skia_private::TArray<SkString\2c\20true>*\29
+4897:SkSpriteBlitter_Memcpy::~SkSpriteBlitter_Memcpy\28\29
+4898:SkSpecialImages::MakeFromRaster\28SkIRect\20const&\2c\20sk_sp<SkImage>\2c\20SkSurfaceProps\20const&\29
+4899:SkSharedMutex::releaseShared\28\29
+4900:SkShaper::MakeFontMgrRunIterator\28char\20const*\2c\20unsigned\20long\2c\20SkFont\20const&\2c\20sk_sp<SkFontMgr>\29
+4901:SkShaders::MatrixRec::concat\28SkMatrix\20const&\29\20const
+4902:SkShaders::Blend\28sk_sp<SkBlender>\2c\20sk_sp<SkShader>\2c\20sk_sp<SkShader>\29
+4903:SkShaderUtils::VisitLineByLine\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::function<void\20\28int\2c\20char\20const*\29>\20const&\29
+4904:SkShaderUtils::PrettyPrint\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+4905:SkShaderUtils::GLSLPrettyPrint::parseUntil\28char\20const*\29
+4906:SkShaderBase::getFlattenableType\28\29\20const
+4907:SkShader::makeWithLocalMatrix\28SkMatrix\20const&\29\20const
+4908:SkShader::makeWithColorFilter\28sk_sp<SkColorFilter>\29\20const
+4909:SkScan::PathRequiresTiling\28SkIRect\20const&\29
+4910:SkScan::HairLine\28SkPoint\20const*\2c\20int\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+4911:SkScan::AntiFrameRect\28SkRect\20const&\2c\20SkPoint\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+4912:SkScan::AntiFillXRect\28SkIRect\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+4913:SkScan::AntiFillRect\28SkRect\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+4914:SkScan::AAAFillPath\28SkPath\20const&\2c\20SkBlitter*\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20bool\29
+4915:SkScalerContext_FreeType_Base::drawCOLRv1Glyph\28FT_FaceRec_*\2c\20SkGlyph\20const&\2c\20unsigned\20int\2c\20SkSpan<unsigned\20int>\2c\20SkCanvas*\29
+4916:SkScalerContext_FreeType_Base::drawCOLRv0Glyph\28FT_FaceRec_*\2c\20SkGlyph\20const&\2c\20unsigned\20int\2c\20SkSpan<unsigned\20int>\2c\20SkCanvas*\29
+4917:SkScalerContext_FreeType::shouldSubpixelBitmap\28SkGlyph\20const&\2c\20SkMatrix\20const&\29
+4918:SkScalerContextRec::getSingleMatrix\28SkMatrix*\29\20const
+4919:SkScalerContext::internalMakeGlyph\28SkPackedGlyphID\2c\20SkMask::Format\2c\20SkArenaAlloc*\29
+4920:SkScalerContext::internalGetPath\28SkGlyph&\2c\20SkArenaAlloc*\29
+4921:SkScalerContext::getFontMetrics\28SkFontMetrics*\29
+4922:SkScalerContext::SkScalerContext\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29
+4923:SkScalerContext::PreprocessRec\28SkTypeface\20const&\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const&\29
+4924:SkScalerContext::MakeRecAndEffects\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\2c\20SkScalerContextRec*\2c\20SkScalerContextEffects*\29
+4925:SkScalerContext::MakeEmpty\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29
+4926:SkScalerContext::GetMaskPreBlend\28SkScalerContextRec\20const&\29
+4927:SkScalerContext::AutoDescriptorGivenRecAndEffects\28SkScalerContextRec\20const&\2c\20SkScalerContextEffects\20const&\2c\20SkAutoDescriptor*\29
+4928:SkSampledCodec::sampledDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const&\29
+4929:SkSampledCodec::accountForNativeScaling\28int*\2c\20int*\29\20const
+4930:SkSampledCodec::SkSampledCodec\28SkCodec*\29
+4931:SkSL::zero_expression\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\29
+4932:SkSL::type_to_sksltype\28SkSL::Context\20const&\2c\20SkSL::Type\20const&\2c\20SkSLType*\29
+4933:SkSL::stoi\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20long\20long*\29
+4934:SkSL::splat_scalar\28SkSL::Context\20const&\2c\20SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+4935:SkSL::rewrite_matrix_vector_multiply\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+4936:SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_2::operator\28\29\28int\29\20const
+4937:SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_1::operator\28\29\28int\29\20const
+4938:SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_0::operator\28\29\28int\29\20const
+4939:SkSL::negate_expression\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+4940:SkSL::move_all_but_break\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>*\29
+4941:SkSL::make_reciprocal_expression\28SkSL::Context\20const&\2c\20SkSL::Expression\20const&\29
+4942:SkSL::is_too_deeply_nested\28SkSL::Type\20const*\2c\20int\29
+4943:SkSL::index_out_of_range\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20long\20long\2c\20SkSL::Expression\20const&\29
+4944:SkSL::find_existing_declaration\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ModifierFlags\2c\20SkSL::IntrinsicKind\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\2c\20std::__2::default_delete<SkSL::Variable>>\2c\20true>&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::FunctionDeclaration**\29::$_0::operator\28\29\28\29\20const
+4945:SkSL::extract_matrix\28SkSL::Expression\20const*\2c\20float*\29
+4946:SkSL::eliminate_unreachable_code\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::UnreachableCodeEliminator::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\29
+4947:SkSL::check_main_signature\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\2c\20std::__2::default_delete<SkSL::Variable>>\2c\20true>&\29::$_4::operator\28\29\28int\29\20const
+4948:SkSL::\28anonymous\20namespace\29::check_valid_uniform_type\28SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::Context\20const&\2c\20bool\29
+4949:SkSL::\28anonymous\20namespace\29::FinalizationVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+4950:SkSL::VariableReference::setRefKind\28SkSL::VariableRefKind\29
+4951:SkSL::Variable::setVarDeclaration\28SkSL::VarDeclaration*\29
+4952:SkSL::Variable::Make\28SkSL::Position\2c\20SkSL::Position\2c\20SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20SkSL::Type\20const*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20bool\2c\20SkSL::VariableStorage\29
+4953:SkSL::Variable::MakeScratchVariable\28SkSL::Context\20const&\2c\20SkSL::Mangler&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Type\20const*\2c\20SkSL::SymbolTable*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4954:SkSL::VarDeclaration::Make\28SkSL::Context\20const&\2c\20SkSL::Variable*\2c\20SkSL::Type\20const*\2c\20int\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4955:SkSL::VarDeclaration::ErrorCheck\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Position\2c\20SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20SkSL::Type\20const*\2c\20SkSL::Type\20const*\2c\20SkSL::VariableStorage\29
+4956:SkSL::TypeReference::description\28SkSL::OperatorPrecedence\29\20const
+4957:SkSL::TypeReference::VerifyType\28SkSL::Context\20const&\2c\20SkSL::Type\20const*\2c\20SkSL::Position\29
+4958:SkSL::TypeReference::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\29
+4959:SkSL::Type::checkForOutOfRangeLiteral\28SkSL::Context\20const&\2c\20SkSL::Expression\20const&\29\20const
+4960:SkSL::Type::MakeStructType\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::TArray<SkSL::Field\2c\20true>\2c\20bool\29
+4961:SkSL::Type::MakeLiteralType\28char\20const*\2c\20SkSL::Type\20const&\2c\20signed\20char\29
+4962:SkSL::ThreadContext::ThreadContext\28SkSL::Compiler*\2c\20SkSL::ProgramKind\2c\20SkSL::ProgramSettings\20const&\2c\20SkSL::Module\20const*\2c\20bool\29
+4963:SkSL::ThreadContext::End\28\29
+4964:SkSL::SymbolTable::wouldShadowSymbolsFrom\28SkSL::SymbolTable\20const*\29\20const
+4965:SkSL::SymbolTable::findBuiltinSymbol\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+4966:SkSL::Swizzle::MaskString\28skia_private::STArray<4\2c\20signed\20char\2c\20true>\20const&\29
+4967:SkSL::SwitchStatement::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+4968:SkSL::SwitchCase::Make\28SkSL::Position\2c\20long\20long\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+4969:SkSL::SwitchCase::MakeDefault\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+4970:SkSL::String::vappendf\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20char\20const*\2c\20void*\29
+4971:SkSL::SingleArgumentConstructor::argumentSpan\28\29
+4972:SkSL::Setting::name\28\29\20const
+4973:SkSL::Setting::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\20const&\29
+4974:SkSL::RP::stack_usage\28SkSL::RP::Instruction\20const&\29
+4975:SkSL::RP::UnownedLValueSlice::isWritable\28\29\20const
+4976:SkSL::RP::UnownedLValueSlice::dynamicSlotRange\28\29
+4977:SkSL::RP::ScratchLValue::~ScratchLValue\28\29
+4978:SkSL::RP::Program::~Program\28\29
+4979:SkSL::RP::LValue::swizzle\28\29
+4980:SkSL::RP::Generator::writeVarDeclaration\28SkSL::VarDeclaration\20const&\29
+4981:SkSL::RP::Generator::writeFunction\28SkSL::IRNode\20const&\2c\20SkSL::FunctionDefinition\20const&\2c\20SkSpan<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20const>\29
+4982:SkSL::RP::Generator::storeImmutableValueToSlots\28skia_private::TArray<int\2c\20true>\20const&\2c\20SkSL::RP::SlotRange\29
+4983:SkSL::RP::Generator::pushVariableReferencePartial\28SkSL::VariableReference\20const&\2c\20SkSL::RP::SlotRange\29
+4984:SkSL::RP::Generator::pushPrefixExpression\28SkSL::Operator\2c\20SkSL::Expression\20const&\29
+4985:SkSL::RP::Generator::pushIntrinsic\28SkSL::IntrinsicKind\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+4986:SkSL::RP::Generator::pushImmutableData\28SkSL::Expression\20const&\29
+4987:SkSL::RP::Generator::pushAbsFloatIntrinsic\28int\29
+4988:SkSL::RP::Generator::getImmutableValueForExpression\28SkSL::Expression\20const&\2c\20skia_private::TArray<int\2c\20true>*\29
+4989:SkSL::RP::Generator::foldWithMultiOp\28SkSL::RP::BuilderOp\2c\20int\29
+4990:SkSL::RP::Generator::findPreexistingImmutableData\28skia_private::TArray<int\2c\20true>\20const&\29
+4991:SkSL::RP::Builder::push_slots_or_immutable_indirect\28SkSL::RP::SlotRange\2c\20int\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::BuilderOp\29
+4992:SkSL::RP::Builder::copy_stack_to_slots\28SkSL::RP::SlotRange\2c\20int\29
+4993:SkSL::RP::Builder::branch_if_any_lanes_active\28int\29
+4994:SkSL::ProgramVisitor::visit\28SkSL::Program\20const&\29
+4995:SkSL::ProgramUsage::remove\28SkSL::Expression\20const*\29
+4996:SkSL::ProgramUsage::add\28SkSL::Statement\20const*\29
+4997:SkSL::ProgramUsage::add\28SkSL::ProgramElement\20const&\29
+4998:SkSL::Pool::attachToThread\28\29
+4999:SkSL::PipelineStage::PipelineStageCodeGenerator::functionName\28SkSL::FunctionDeclaration\20const&\29
+5000:SkSL::PipelineStage::PipelineStageCodeGenerator::functionDeclaration\28SkSL::FunctionDeclaration\20const&\29
+5001:SkSL::Parser::varDeclarationsOrExpressionStatement\28\29
+5002:SkSL::Parser::switchCaseBody\28SkSL::ExpressionArray*\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+5003:SkSL::Parser::shiftExpression\28\29
+5004:SkSL::Parser::relationalExpression\28\29
+5005:SkSL::Parser::parameter\28std::__2::unique_ptr<SkSL::Variable\2c\20std::__2::default_delete<SkSL::Variable>>*\29
+5006:SkSL::Parser::multiplicativeExpression\28\29
+5007:SkSL::Parser::logicalXorExpression\28\29
+5008:SkSL::Parser::logicalAndExpression\28\29
+5009:SkSL::Parser::localVarDeclarationEnd\28SkSL::Position\2c\20SkSL::Modifiers\20const&\2c\20SkSL::Type\20const*\2c\20SkSL::Token\29
+5010:SkSL::Parser::intLiteral\28long\20long*\29
+5011:SkSL::Parser::globalVarDeclarationEnd\28SkSL::Position\2c\20SkSL::Modifiers\20const&\2c\20SkSL::Type\20const*\2c\20SkSL::Token\29
+5012:SkSL::Parser::equalityExpression\28\29
+5013:SkSL::Parser::directive\28bool\29
+5014:SkSL::Parser::declarations\28\29
+5015:SkSL::Parser::checkNext\28SkSL::Token::Kind\2c\20SkSL::Token*\29
+5016:SkSL::Parser::bitwiseXorExpression\28\29
+5017:SkSL::Parser::bitwiseOrExpression\28\29
+5018:SkSL::Parser::bitwiseAndExpression\28\29
+5019:SkSL::Parser::additiveExpression\28\29
+5020:SkSL::Parser::Parser\28SkSL::Compiler*\2c\20SkSL::ProgramSettings\20const&\2c\20SkSL::ProgramKind\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+5021:SkSL::MultiArgumentConstructor::argumentSpan\28\29
+5022:SkSL::ModuleLoader::~ModuleLoader\28\29
+5023:SkSL::ModuleLoader::loadVertexModule\28SkSL::Compiler*\29
+5024:SkSL::ModuleLoader::loadSharedModule\28SkSL::Compiler*\29
+5025:SkSL::ModuleLoader::loadPublicModule\28SkSL::Compiler*\29
+5026:SkSL::ModuleLoader::loadFragmentModule\28SkSL::Compiler*\29
+5027:SkSL::ModuleLoader::Get\28\29
+5028:SkSL::MethodReference::~MethodReference\28\29.1
+5029:SkSL::MethodReference::~MethodReference\28\29
+5030:SkSL::MatrixType::bitWidth\28\29\20const
+5031:SkSL::MakeRasterPipelineProgram\28SkSL::Program\20const&\2c\20SkSL::FunctionDefinition\20const&\2c\20SkSL::DebugTracePriv*\2c\20bool\29
+5032:SkSL::Layout::description\28\29\20const
+5033:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_matrixCompMult\28double\2c\20double\2c\20double\29
+5034:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_length\28std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\29
+5035:SkSL::InterfaceBlock::~InterfaceBlock\28\29
+5036:SkSL::Inliner::candidateCanBeInlined\28SkSL::InlineCandidate\20const&\2c\20SkSL::ProgramUsage\20const&\2c\20skia_private::THashMap<SkSL::FunctionDeclaration\20const*\2c\20bool\2c\20SkGoodHash>*\29
+5037:SkSL::IfStatement::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+5038:SkSL::GLSLCodeGenerator::writeVarDeclaration\28SkSL::VarDeclaration\20const&\2c\20bool\29
+5039:SkSL::GLSLCodeGenerator::writeProgramElement\28SkSL::ProgramElement\20const&\29
+5040:SkSL::GLSLCodeGenerator::writeMinAbsHack\28SkSL::Expression&\2c\20SkSL::Expression&\29
+5041:SkSL::GLSLCodeGenerator::generateCode\28\29
+5042:SkSL::FunctionDefinition::~FunctionDefinition\28\29.1
+5043:SkSL::FunctionDefinition::~FunctionDefinition\28\29
+5044:SkSL::FunctionDefinition::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20bool\29::Finalizer::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\29
+5045:SkSL::FunctionDefinition::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20bool\29::Finalizer::addLocalVariable\28SkSL::Variable\20const*\2c\20SkSL::Position\29
+5046:SkSL::FunctionDeclaration::~FunctionDeclaration\28\29.1
+5047:SkSL::FunctionDeclaration::~FunctionDeclaration\28\29
+5048:SkSL::FunctionDeclaration::mangledName\28\29\20const
+5049:SkSL::FunctionDeclaration::determineFinalTypes\28SkSL::ExpressionArray\20const&\2c\20skia_private::STArray<8\2c\20SkSL::Type\20const*\2c\20true>*\2c\20SkSL::Type\20const**\29\20const
+5050:SkSL::FunctionDeclaration::FunctionDeclaration\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ModifierFlags\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::TArray<SkSL::Variable*\2c\20true>\2c\20SkSL::Type\20const*\2c\20SkSL::IntrinsicKind\29
+5051:SkSL::FunctionCall::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::FunctionDeclaration\20const&\2c\20SkSL::ExpressionArray\29
+5052:SkSL::FunctionCall::FindBestFunctionForCall\28SkSL::Context\20const&\2c\20SkSL::FunctionDeclaration\20const*\2c\20SkSL::ExpressionArray\20const&\29
+5053:SkSL::FunctionCall::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20SkSL::ExpressionArray\29
+5054:SkSL::ForStatement::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ForLoopPositions\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+5055:SkSL::FindIntrinsicKind\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5056:SkSL::FieldAccess::~FieldAccess\28\29.1
+5057:SkSL::FieldAccess::~FieldAccess\28\29
+5058:SkSL::ExtendedVariable::layout\28\29\20const
+5059:SkSL::ExpressionStatement::Convert\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+5060:SkSL::ConstructorScalarCast::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+5061:SkSL::ConstructorMatrixResize::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+5062:SkSL::Constructor::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+5063:SkSL::Compiler::writeErrorCount\28\29
+5064:SkSL::Compiler::toGLSL\28SkSL::Program&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\29
+5065:SkSL::ChildCall::~ChildCall\28\29.1
+5066:SkSL::ChildCall::~ChildCall\28\29
+5067:SkSL::ChildCall::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::Variable\20const&\2c\20SkSL::ExpressionArray\29
+5068:SkSL::BinaryExpression::isAssignmentIntoVariable\28\29
+5069:SkSL::Analysis::\28anonymous\20namespace\29::LoopControlFlowVisitor::visitStatement\28SkSL::Statement\20const&\29
+5070:SkSL::Analysis::IsDynamicallyUniformExpression\28SkSL::Expression\20const&\29
+5071:SkSL::Analysis::IsConstantExpression\28SkSL::Expression\20const&\29
+5072:SkSL::Analysis::IsAssignable\28SkSL::Expression&\2c\20SkSL::Analysis::AssignmentInfo*\2c\20SkSL::ErrorReporter*\29
+5073:SkSL::Analysis::GetLoopUnrollInfo\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ForLoopPositions\20const&\2c\20SkSL::Statement\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>*\2c\20SkSL::Expression\20const*\2c\20SkSL::Statement\20const*\2c\20SkSL::ErrorReporter*\29
+5074:SkSL::Analysis::GetLoopControlFlowInfo\28SkSL::Statement\20const&\29
+5075:SkSL::AliasType::numberKind\28\29\20const
+5076:SkSL::AliasType::isAllowedInES2\28\29\20const
+5077:SkRuntimeShader::~SkRuntimeShader\28\29
+5078:SkRuntimeEffectPriv::WriteChildEffects\28SkWriteBuffer&\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\29
+5079:SkRuntimeEffect::~SkRuntimeEffect\28\29
+5080:SkRuntimeEffect::source\28\29\20const
+5081:SkRuntimeEffect::makeShader\28sk_sp<SkData\20const>\2c\20sk_sp<SkShader>*\2c\20unsigned\20long\2c\20SkMatrix\20const*\29\20const
+5082:SkRuntimeEffect::makeColorFilter\28sk_sp<SkData\20const>\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\29\20const
+5083:SkRuntimeEffect::MakeForBlender\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+5084:SkRuntimeEffect::ChildPtr&\20skia_private::TArray<SkRuntimeEffect::ChildPtr\2c\20true>::emplace_back<sk_sp<SkShader>&>\28sk_sp<SkShader>&\29
+5085:SkRuntimeBlender::flatten\28SkWriteBuffer&\29\20const
+5086:SkRgnBuilder::~SkRgnBuilder\28\29
+5087:SkResourceCache::PostPurgeSharedID\28unsigned\20long\20long\29
+5088:SkResourceCache::GetDiscardableFactory\28\29
+5089:SkRescaleAndReadPixels\28SkBitmap\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::Result::rowBytes\28int\29\20const
+5090:SkRescaleAndReadPixels\28SkBitmap\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+5091:SkRegion::Spanerator::Spanerator\28SkRegion\20const&\2c\20int\2c\20int\2c\20int\29
+5092:SkRegion::Oper\28SkRegion\20const&\2c\20SkRegion\20const&\2c\20SkRegion::Op\2c\20SkRegion*\29
+5093:SkRefCntSet::~SkRefCntSet\28\29
+5094:SkRefCntBase::internal_dispose\28\29\20const
+5095:SkReduceOrder::reduce\28SkDQuad\20const&\29
+5096:SkReduceOrder::Conic\28SkConic\20const&\2c\20SkPoint*\29
+5097:SkRectClipBlitter::requestRowsPreserved\28\29\20const
+5098:SkRectClipBlitter::allocBlitMemory\28unsigned\20long\29
+5099:SkRect::intersect\28SkRect\20const&\2c\20SkRect\20const&\29
+5100:SkRecords::TypedMatrix::TypedMatrix\28SkMatrix\20const&\29
+5101:SkRecords::FillBounds::popSaveBlock\28\29
+5102:SkRecordOptimize\28SkRecord*\29
+5103:SkRecordFillBounds\28SkRect\20const&\2c\20SkRecord\20const&\2c\20SkRect*\2c\20SkBBoxHierarchy::Metadata*\29
+5104:SkRecord::bytesUsed\28\29\20const
+5105:SkReadPixelsRec::trim\28int\2c\20int\29
+5106:SkReadBuffer::readString\28unsigned\20long*\29
+5107:SkReadBuffer::readRegion\28SkRegion*\29
+5108:SkReadBuffer::readPoint3\28SkPoint3*\29
+5109:SkRasterPipeline_<256ul>::SkRasterPipeline_\28\29
+5110:SkRasterPipeline::append_set_rgb\28SkArenaAlloc*\2c\20float\20const*\29
+5111:SkRasterClipStack::SkRasterClipStack\28int\2c\20int\29
+5112:SkRTreeFactory::operator\28\29\28\29\20const
+5113:SkRTree::search\28SkRTree::Node*\2c\20SkRect\20const&\2c\20std::__2::vector<int\2c\20std::__2::allocator<int>>*\29\20const
+5114:SkRTree::bulkLoad\28std::__2::vector<SkRTree::Branch\2c\20std::__2::allocator<SkRTree::Branch>>*\2c\20int\29
+5115:SkRTree::allocateNodeAtLevel\28unsigned\20short\29
+5116:SkRSXform::toQuad\28float\2c\20float\2c\20SkPoint*\29\20const
+5117:SkRRect::isValid\28\29\20const
+5118:SkRRect::computeType\28\29
+5119:SkRGBA4f<\28SkAlphaType\292>\20skgpu::Swizzle::applyTo<\28SkAlphaType\292>\28SkRGBA4f<\28SkAlphaType\292>\29\20const
+5120:SkRBuffer::skipToAlign4\28\29
+5121:SkQuads::EvalAt\28double\2c\20double\2c\20double\2c\20double\29
+5122:SkQuadraticEdge::setQuadraticWithoutUpdate\28SkPoint\20const*\2c\20int\29
+5123:SkPtrSet::reset\28\29
+5124:SkPtrSet::copyToArray\28void**\29\20const
+5125:SkPtrSet::add\28void*\29
+5126:SkPoint::Normalize\28SkPoint*\29
+5127:SkPngEncoder::Make\28SkWStream*\2c\20SkPixmap\20const&\2c\20SkPngEncoder::Options\20const&\29
+5128:SkPngCodec::initializeXforms\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+5129:SkPngCodec::initializeSwizzler\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20bool\29
+5130:SkPngCodec::allocateStorage\28SkImageInfo\20const&\29
+5131:SkPngCodec::IsPng\28void\20const*\2c\20unsigned\20long\29
+5132:SkPixmap::erase\28unsigned\20int\2c\20SkIRect\20const&\29\20const
+5133:SkPixmap::erase\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkIRect\20const*\29\20const
+5134:SkPixelRef::getGenerationID\28\29\20const
+5135:SkPixelRef::addGenIDChangeListener\28sk_sp<SkIDChangeListener>\29
+5136:SkPixelRef::SkPixelRef\28int\2c\20int\2c\20void*\2c\20unsigned\20long\29
+5137:SkPictureShader::CachedImageInfo::makeImage\28sk_sp<SkSurface>\2c\20SkPicture\20const*\29\20const
+5138:SkPictureShader::CachedImageInfo::Make\28SkRect\20const&\2c\20SkMatrix\20const&\2c\20SkColorType\2c\20SkColorSpace*\2c\20int\2c\20SkSurfaceProps\20const&\29
+5139:SkPictureRecord::endRecording\28\29
+5140:SkPictureRecord::beginRecording\28\29
+5141:SkPicturePriv::Flatten\28sk_sp<SkPicture\20const>\2c\20SkWriteBuffer&\29
+5142:SkPicturePlayback::draw\28SkCanvas*\2c\20SkPicture::AbortCallback*\2c\20SkReadBuffer*\29
+5143:SkPictureData::parseBufferTag\28SkReadBuffer&\2c\20unsigned\20int\2c\20unsigned\20int\29
+5144:SkPictureData::getPicture\28SkReadBuffer*\29\20const
+5145:SkPictureData::getDrawable\28SkReadBuffer*\29\20const
+5146:SkPictureData::flatten\28SkWriteBuffer&\29\20const
+5147:SkPictureData::flattenToBuffer\28SkWriteBuffer&\2c\20bool\29\20const
+5148:SkPictureData::SkPictureData\28SkPictureRecord\20const&\2c\20SkPictInfo\20const&\29
+5149:SkPicture::backport\28\29\20const
+5150:SkPicture::SkPicture\28\29
+5151:SkPicture::MakeFromStreamPriv\28SkStream*\2c\20SkDeserialProcs\20const*\2c\20SkTypefacePlayback*\2c\20int\29
+5152:SkPathWriter::assemble\28\29
+5153:SkPathWriter::SkPathWriter\28SkPath&\29
+5154:SkPathRef::resetToSize\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+5155:SkPathPriv::IsNestedFillRects\28SkPath\20const&\2c\20SkRect*\2c\20SkPathDirection*\29
+5156:SkPathPriv::CreateDrawArcPath\28SkPath*\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20bool\29
+5157:SkPathEffectBase::PointData::~PointData\28\29
+5158:SkPathEffect::filterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+5159:SkPathBuilder::addOval\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+5160:SkPath::writeToMemoryAsRRect\28void*\29\20const
+5161:SkPath::setLastPt\28float\2c\20float\29
+5162:SkPath::reverseAddPath\28SkPath\20const&\29
+5163:SkPath::readFromMemory\28void\20const*\2c\20unsigned\20long\29
+5164:SkPath::offset\28float\2c\20float\2c\20SkPath*\29\20const
+5165:SkPath::isZeroLengthSincePoint\28int\29\20const
+5166:SkPath::isRRect\28SkRRect*\29\20const
+5167:SkPath::isOval\28SkRect*\29\20const
+5168:SkPath::conservativelyContainsRect\28SkRect\20const&\29\20const
+5169:SkPath::computeConvexity\28\29\20const
+5170:SkPath::addPath\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath::AddPathMode\29
+5171:SkPath::Polygon\28SkPoint\20const*\2c\20int\2c\20bool\2c\20SkPathFillType\2c\20bool\29
+5172:SkPath2DPathEffect::Make\28SkMatrix\20const&\2c\20SkPath\20const&\29
+5173:SkPath1DPathEffect::Make\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style\29
+5174:SkParseEncodedOrigin\28void\20const*\2c\20unsigned\20long\2c\20SkEncodedOrigin*\29
+5175:SkPaintPriv::Unflatten\28SkReadBuffer&\29
+5176:SkPaintPriv::ShouldDither\28SkPaint\20const&\2c\20SkColorType\29
+5177:SkPaintPriv::Overwrites\28SkPaint\20const*\2c\20SkPaintPriv::ShaderOverrideOpacity\29
+5178:SkPaintPriv::Flatten\28SkPaint\20const&\2c\20SkWriteBuffer&\29
+5179:SkPaint::setStroke\28bool\29
+5180:SkPaint::reset\28\29
+5181:SkPaint::refImageFilter\28\29\20const
+5182:SkPaint::refColorFilter\28\29\20const
+5183:SkOpSpanBase::merge\28SkOpSpan*\29
+5184:SkOpSpanBase::globalState\28\29\20const
+5185:SkOpSpan::sortableTop\28SkOpContour*\29
+5186:SkOpSpan::release\28SkOpPtT\20const*\29
+5187:SkOpSpan::insertCoincidence\28SkOpSegment\20const*\2c\20bool\2c\20bool\29
+5188:SkOpSpan::init\28SkOpSegment*\2c\20SkOpSpan*\2c\20double\2c\20SkPoint\20const&\29
+5189:SkOpSegment::updateWindingReverse\28SkOpAngle\20const*\29
+5190:SkOpSegment::oppXor\28\29\20const
+5191:SkOpSegment::moveMultiples\28\29
+5192:SkOpSegment::isXor\28\29\20const
+5193:SkOpSegment::findNextWinding\28SkTDArray<SkOpSpanBase*>*\2c\20SkOpSpanBase**\2c\20SkOpSpanBase**\2c\20bool*\29
+5194:SkOpSegment::findNextOp\28SkTDArray<SkOpSpanBase*>*\2c\20SkOpSpanBase**\2c\20SkOpSpanBase**\2c\20bool*\2c\20bool*\2c\20SkPathOp\2c\20int\2c\20int\29
+5195:SkOpSegment::computeSum\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20SkOpAngle::IncludeType\29
+5196:SkOpSegment::collapsed\28double\2c\20double\29\20const
+5197:SkOpSegment::addExpanded\28double\2c\20SkOpSpanBase\20const*\2c\20bool*\29
+5198:SkOpSegment::activeAngle\28SkOpSpanBase*\2c\20SkOpSpanBase**\2c\20SkOpSpanBase**\2c\20bool*\29
+5199:SkOpSegment::UseInnerWinding\28int\2c\20int\29
+5200:SkOpPtT::ptAlreadySeen\28SkOpPtT\20const*\29\20const
+5201:SkOpPtT::contains\28SkOpSegment\20const*\2c\20double\29\20const
+5202:SkOpGlobalState::SkOpGlobalState\28SkOpContourHead*\2c\20SkArenaAlloc*\29
+5203:SkOpEdgeBuilder::preFetch\28\29
+5204:SkOpEdgeBuilder::init\28\29
+5205:SkOpEdgeBuilder::finish\28\29
+5206:SkOpContourBuilder::addConic\28SkPoint*\2c\20float\29
+5207:SkOpContour::addQuad\28SkPoint*\29
+5208:SkOpContour::addCubic\28SkPoint*\29
+5209:SkOpContour::addConic\28SkPoint*\2c\20float\29
+5210:SkOpCoincidence::release\28SkOpSegment\20const*\29
+5211:SkOpCoincidence::mark\28\29
+5212:SkOpCoincidence::markCollapsed\28SkCoincidentSpans*\2c\20SkOpPtT*\29
+5213:SkOpCoincidence::fixUp\28SkCoincidentSpans*\2c\20SkOpPtT*\2c\20SkOpPtT\20const*\29
+5214:SkOpCoincidence::contains\28SkCoincidentSpans\20const*\2c\20SkOpSegment\20const*\2c\20SkOpSegment\20const*\2c\20double\29\20const
+5215:SkOpCoincidence::checkOverlap\28SkCoincidentSpans*\2c\20SkOpSegment\20const*\2c\20SkOpSegment\20const*\2c\20double\2c\20double\2c\20double\2c\20double\2c\20SkTDArray<SkCoincidentSpans*>*\29\20const
+5216:SkOpCoincidence::addOrOverlap\28SkOpSegment*\2c\20SkOpSegment*\2c\20double\2c\20double\2c\20double\2c\20double\2c\20bool*\29
+5217:SkOpAngle::tangentsDiverge\28SkOpAngle\20const*\2c\20double\29
+5218:SkOpAngle::setSpans\28\29
+5219:SkOpAngle::setSector\28\29
+5220:SkOpAngle::previous\28\29\20const
+5221:SkOpAngle::midToSide\28SkOpAngle\20const*\2c\20bool*\29\20const
+5222:SkOpAngle::loopCount\28\29\20const
+5223:SkOpAngle::loopContains\28SkOpAngle\20const*\29\20const
+5224:SkOpAngle::lastMarked\28\29\20const
+5225:SkOpAngle::endToSide\28SkOpAngle\20const*\2c\20bool*\29\20const
+5226:SkOpAngle::alignmentSameSide\28SkOpAngle\20const*\2c\20int*\29\20const
+5227:SkOpAngle::after\28SkOpAngle*\29
+5228:SkOffsetSimplePolygon\28SkPoint\20const*\2c\20int\2c\20SkRect\20const&\2c\20float\2c\20SkTDArray<SkPoint>*\2c\20SkTDArray<int>*\29
+5229:SkNoDrawCanvas::onDrawEdgeAAImageSet2\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+5230:SkNoDrawCanvas::onDrawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+5231:SkMipmapBuilder::countLevels\28\29\20const
+5232:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29.1
+5233:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29
+5234:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\28\29\20const
+5235:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::peek\28\29\20const
+5236:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\28GrDirectContext*\2c\20void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\29
+5237:SkMatrix::setRotate\28float\2c\20float\2c\20float\29
+5238:SkMatrix::mapRectScaleTranslate\28SkRect*\2c\20SkRect\20const&\29\20const
+5239:SkMatrix::isFinite\28\29\20const
+5240:SkMatrix::getMinMaxScales\28float*\29\20const
+5241:SkMatrix::Translate\28float\2c\20float\29
+5242:SkMatrix::Translate\28SkIPoint\29
+5243:SkMatrix::RotTrans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+5244:SkMaskSwizzler::swizzle\28void*\2c\20unsigned\20char\20const*\29
+5245:SkMaskFilterBase::NinePatch::~NinePatch\28\29
+5246:SkMask::computeTotalImageSize\28\29\20const
+5247:SkMakeResourceCacheSharedIDForBitmap\28unsigned\20int\29
+5248:SkMakeCachedRuntimeEffect\28SkRuntimeEffect::Result\20\28*\29\28SkString\2c\20SkRuntimeEffect::Options\20const&\29\2c\20char\20const*\29
+5249:SkM44::preTranslate\28float\2c\20float\2c\20float\29
+5250:SkM44::postTranslate\28float\2c\20float\2c\20float\29
+5251:SkLocalMatrixShader::type\28\29\20const
+5252:SkLinearColorSpaceLuminance::toLuma\28float\2c\20float\29\20const
+5253:SkLineParameters::cubicEndPoints\28SkDCubic\20const&\29
+5254:SkLatticeIter::SkLatticeIter\28SkCanvas::Lattice\20const&\2c\20SkRect\20const&\29
+5255:SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::find\28unsigned\20long\20long\20const&\29
+5256:SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::~SkLRUCache\28\29
+5257:SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::reset\28\29
+5258:SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::insert\28GrProgramDesc\20const&\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\29
+5259:SkJpegCodec::readRows\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20SkCodec::Options\20const&\29
+5260:SkJpegCodec::initializeSwizzler\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20bool\29
+5261:SkJpegCodec::ReadHeader\28SkStream*\2c\20SkCodec**\2c\20JpegDecoderMgr**\2c\20std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>\29
+5262:SkJSONWriter::appendString\28char\20const*\2c\20unsigned\20long\29
+5263:SkIsSimplePolygon\28SkPoint\20const*\2c\20int\29
+5264:SkIsConvexPolygon\28SkPoint\20const*\2c\20int\29
+5265:SkInvert4x4Matrix\28float\20const*\2c\20float*\29
+5266:SkInvert3x3Matrix\28float\20const*\2c\20float*\29
+5267:SkInvert2x2Matrix\28float\20const*\2c\20float*\29
+5268:SkIntersections::vertical\28SkDQuad\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5269:SkIntersections::vertical\28SkDLine\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5270:SkIntersections::vertical\28SkDCubic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5271:SkIntersections::vertical\28SkDConic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5272:SkIntersections::mostOutside\28double\2c\20double\2c\20SkDPoint\20const&\29\20const
+5273:SkIntersections::intersect\28SkDQuad\20const&\2c\20SkDLine\20const&\29
+5274:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDQuad\20const&\29
+5275:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDLine\20const&\29
+5276:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDConic\20const&\29
+5277:SkIntersections::intersect\28SkDConic\20const&\2c\20SkDQuad\20const&\29
+5278:SkIntersections::intersect\28SkDConic\20const&\2c\20SkDLine\20const&\29
+5279:SkIntersections::insertCoincident\28double\2c\20double\2c\20SkDPoint\20const&\29
+5280:SkIntersections::horizontal\28SkDQuad\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5281:SkIntersections::horizontal\28SkDLine\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5282:SkIntersections::horizontal\28SkDCubic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5283:SkIntersections::horizontal\28SkDConic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+5284:SkImages::RasterFromPixmap\28SkPixmap\20const&\2c\20void\20\28*\29\28void\20const*\2c\20void*\29\2c\20void*\29
+5285:SkImages::RasterFromData\28SkImageInfo\20const&\2c\20sk_sp<SkData>\2c\20unsigned\20long\29
+5286:SkImages::DeferredFromGenerator\28std::__2::unique_ptr<SkImageGenerator\2c\20std::__2::default_delete<SkImageGenerator>>\29
+5287:SkImages::DeferredFromEncodedData\28sk_sp<SkData>\2c\20std::__2::optional<SkAlphaType>\29
+5288:SkImage_Raster::onPeekMips\28\29\20const
+5289:SkImage_Raster::onPeekBitmap\28\29\20const
+5290:SkImage_Lazy::~SkImage_Lazy\28\29.1
+5291:SkImage_GaneshBase::onMakeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+5292:SkImage_Base::onAsyncRescaleAndReadPixelsYUV420\28SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29\20const
+5293:SkImage_Base::onAsLegacyBitmap\28GrDirectContext*\2c\20SkBitmap*\29\20const
+5294:SkImageShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::$_1::operator\28\29\28\28anonymous\20namespace\29::MipLevelHelper\20const*\29\20const
+5295:SkImageShader::Make\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const*\2c\20bool\29
+5296:SkImageInfo::validRowBytes\28unsigned\20long\29\20const
+5297:SkImageInfo::MakeN32Premul\28int\2c\20int\29
+5298:SkImageGenerator::~SkImageGenerator\28\29.1
+5299:SkImageFilters::ColorFilter\28sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+5300:SkImageFilter_Base::getInputBounds\28skif::Mapping\20const&\2c\20skif::DeviceSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::ParameterSpace<SkRect>>\29\20const
+5301:SkImageFilter_Base::getCTMCapability\28\29\20const
+5302:SkImageFilter_Base::filterImage\28skif::Context\20const&\29\20const
+5303:SkImageFilterCache::Get\28\29
+5304:SkImage::withMipmaps\28sk_sp<SkMipmap>\29\20const
+5305:SkImage::peekPixels\28SkPixmap*\29\20const
+5306:SkIcuBreakIteratorCache::purgeIfNeeded\28\29
+5307:SkGradientBaseShader::~SkGradientBaseShader\28\29
+5308:SkGradientBaseShader::AppendGradientFillStages\28SkRasterPipeline*\2c\20SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const*\2c\20float\20const*\2c\20int\29
+5309:SkGlyphRunListPainterCPU::SkGlyphRunListPainterCPU\28SkSurfaceProps\20const&\2c\20SkColorType\2c\20SkColorSpace*\29
+5310:SkGlyph::setImage\28SkArenaAlloc*\2c\20SkScalerContext*\29
+5311:SkGlyph::setDrawable\28SkArenaAlloc*\2c\20SkScalerContext*\29
+5312:SkGlyph::pathIsHairline\28\29\20const
+5313:SkGlyph::mask\28SkPoint\29\20const
+5314:SkGlyph::SkGlyph\28SkGlyph&&\29
+5315:SkGenerateDistanceFieldFromA8Image\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20unsigned\20long\29
+5316:SkGaussFilter::SkGaussFilter\28double\29
+5317:SkFrameHolder::setAlphaAndRequiredFrame\28SkFrame*\29
+5318:SkFrame::fillIn\28SkCodec::FrameInfo*\2c\20bool\29\20const
+5319:SkFontPriv::GetFontBounds\28SkFont\20const&\29
+5320:SkFontMgr_Custom::SkFontMgr_Custom\28SkFontMgr_Custom::SystemFontLoader\20const&\29
+5321:SkFontMgr::matchFamily\28char\20const*\29\20const
+5322:SkFontMgr::makeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20int\29\20const
+5323:SkFontMgr::makeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29\20const
+5324:SkFontDescriptor::SkFontDescriptor\28\29
+5325:SkFont::setupForAsPaths\28SkPaint*\29
+5326:SkFont::setSkewX\28float\29
+5327:SkFont::setLinearMetrics\28bool\29
+5328:SkFont::setEmbolden\28bool\29
+5329:SkFont::operator==\28SkFont\20const&\29\20const
+5330:SkFont::getPaths\28unsigned\20short\20const*\2c\20int\2c\20void\20\28*\29\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29\2c\20void*\29\20const
+5331:SkFlattenable::RegisterFlattenablesIfNeeded\28\29
+5332:SkFlattenable::PrivateInitializer::InitEffects\28\29
+5333:SkFlattenable::NameToFactory\28char\20const*\29
+5334:SkFlattenable::FactoryToName\28sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\29
+5335:SkFindQuadExtrema\28float\2c\20float\2c\20float\2c\20float*\29
+5336:SkFindCubicExtrema\28float\2c\20float\2c\20float\2c\20float\2c\20float*\29
+5337:SkFactorySet::~SkFactorySet\28\29
+5338:SkExifMetadata::parseIfd\28unsigned\20int\2c\20bool\2c\20bool\29
+5339:SkEncoder::encodeRows\28int\29
+5340:SkEmptyPicture::approximateBytesUsed\28\29\20const
+5341:SkEdgeClipper::clipQuad\28SkPoint\20const*\2c\20SkRect\20const&\29
+5342:SkEdgeClipper::ClipPath\28SkPath\20const&\2c\20SkRect\20const&\2c\20bool\2c\20void\20\28*\29\28SkEdgeClipper*\2c\20bool\2c\20void*\29\2c\20void*\29
+5343:SkEdgeBuilder::buildEdges\28SkPath\20const&\2c\20SkIRect\20const*\29
+5344:SkDynamicMemoryWStream::bytesWritten\28\29\20const
+5345:SkDrawableList::newDrawableSnapshot\28\29
+5346:SkDrawTreatAAStrokeAsHairline\28float\2c\20SkMatrix\20const&\2c\20float*\29
+5347:SkDrawShadowMetrics::GetSpotShadowTransform\28SkPoint3\20const&\2c\20float\2c\20SkMatrix\20const&\2c\20SkPoint3\20const&\2c\20SkRect\20const&\2c\20bool\2c\20SkMatrix*\2c\20float*\29
+5348:SkDrawShadowMetrics::GetLocalBounds\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\2c\20SkMatrix\20const&\2c\20SkRect*\29
+5349:SkDrawBase::drawPaint\28SkPaint\20const&\29\20const
+5350:SkDrawBase::DrawToMask\28SkPath\20const&\2c\20SkIRect\20const&\2c\20SkMaskFilter\20const*\2c\20SkMatrix\20const*\2c\20SkMaskBuilder*\2c\20SkMaskBuilder::CreateMode\2c\20SkStrokeRec::InitStyle\29
+5351:SkDraw::drawSprite\28SkBitmap\20const&\2c\20int\2c\20int\2c\20SkPaint\20const&\29\20const
+5352:SkDiscretePathEffectImpl::flatten\28SkWriteBuffer&\29\20const
+5353:SkDiscretePathEffect::Make\28float\2c\20float\2c\20unsigned\20int\29
+5354:SkDevice::getRelativeTransform\28SkDevice\20const&\29\20const
+5355:SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+5356:SkDevice::drawDrawable\28SkCanvas*\2c\20SkDrawable*\2c\20SkMatrix\20const*\29
+5357:SkDevice::drawDevice\28SkDevice*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+5358:SkDevice::drawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+5359:SkDevice::convertGlyphRunListToSlug\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+5360:SkDescriptor::findEntry\28unsigned\20int\2c\20unsigned\20int*\29\20const
+5361:SkDescriptor::computeChecksum\28\29
+5362:SkDescriptor::addEntry\28unsigned\20int\2c\20unsigned\20long\2c\20void\20const*\29
+5363:SkDeque::Iter::next\28\29
+5364:SkDeque::Iter::Iter\28SkDeque\20const&\2c\20SkDeque::Iter::IterStart\29
+5365:SkData::MakeFromStream\28SkStream*\2c\20unsigned\20long\29
+5366:SkDashPath::InternalFilter\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20float\20const*\2c\20int\2c\20float\2c\20int\2c\20float\2c\20float\2c\20SkDashPath::StrokeRecApplication\29
+5367:SkDashPath::CalcDashParameters\28float\2c\20float\20const*\2c\20int\2c\20float*\2c\20int*\2c\20float*\2c\20float*\29
+5368:SkDRect::setBounds\28SkDQuad\20const&\2c\20SkDQuad\20const&\2c\20double\2c\20double\29
+5369:SkDRect::setBounds\28SkDCubic\20const&\2c\20SkDCubic\20const&\2c\20double\2c\20double\29
+5370:SkDRect::setBounds\28SkDConic\20const&\2c\20SkDConic\20const&\2c\20double\2c\20double\29
+5371:SkDQuad::subDivide\28double\2c\20double\29\20const
+5372:SkDQuad::monotonicInY\28\29\20const
+5373:SkDQuad::isLinear\28int\2c\20int\29\20const
+5374:SkDQuad::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+5375:SkDPoint::approximatelyDEqual\28SkDPoint\20const&\29\20const
+5376:SkDCurveSweep::setCurveHullSweep\28SkPath::Verb\29
+5377:SkDCurve::nearPoint\28SkPath::Verb\2c\20SkDPoint\20const&\2c\20SkDPoint\20const&\29\20const
+5378:SkDCubic::monotonicInX\28\29\20const
+5379:SkDCubic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+5380:SkDCubic::hullIntersects\28SkDPoint\20const*\2c\20int\2c\20bool*\29\20const
+5381:SkDConic::subDivide\28double\2c\20double\29\20const
+5382:SkCubics::RootsReal\28double\2c\20double\2c\20double\2c\20double\2c\20double*\29
+5383:SkCubicEdge::setCubicWithoutUpdate\28SkPoint\20const*\2c\20int\2c\20bool\29
+5384:SkCubicClipper::ChopMonoAtY\28SkPoint\20const*\2c\20float\2c\20float*\29
+5385:SkCreateRasterPipelineBlitter\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20SkArenaAlloc*\2c\20sk_sp<SkShader>\29
+5386:SkCreateRasterPipelineBlitter\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20SkArenaAlloc*\2c\20sk_sp<SkShader>\2c\20SkSurfaceProps\20const&\29
+5387:SkContourMeasureIter::~SkContourMeasureIter\28\29
+5388:SkContourMeasureIter::SkContourMeasureIter\28SkPath\20const&\2c\20bool\2c\20float\29
+5389:SkContourMeasure::length\28\29\20const
+5390:SkContourMeasure::isClosed\28\29\20const
+5391:SkContourMeasure::getSegment\28float\2c\20float\2c\20SkPath*\2c\20bool\29\20const
+5392:SkConic::BuildUnitArc\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkRotationDirection\2c\20SkMatrix\20const*\2c\20SkConic*\29
+5393:SkComputeRadialSteps\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20float*\2c\20float*\2c\20int*\29
+5394:SkCompressedDataSize\28SkTextureCompressionType\2c\20SkISize\2c\20skia_private::TArray<unsigned\20long\2c\20true>*\2c\20bool\29
+5395:SkColorTypeValidateAlphaType\28SkColorType\2c\20SkAlphaType\2c\20SkAlphaType*\29
+5396:SkColorSpaceSingletonFactory::Make\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+5397:SkColorSpace::toProfile\28skcms_ICCProfile*\29\20const
+5398:SkColorSpace::makeLinearGamma\28\29\20const
+5399:SkColorSpace::isSRGB\28\29\20const
+5400:SkColorMatrix_RGB2YUV\28SkYUVColorSpace\2c\20float*\29
+5401:SkColorFilterShader::SkColorFilterShader\28sk_sp<SkShader>\2c\20float\2c\20sk_sp<SkColorFilter>\29
+5402:SkColorFilter::filterColor4f\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkColorSpace*\2c\20SkColorSpace*\29\20const
+5403:SkColor4fXformer::SkColor4fXformer\28SkGradientBaseShader\20const*\2c\20SkColorSpace*\2c\20bool\29
+5404:SkCoincidentSpans::extend\28SkOpPtT\20const*\2c\20SkOpPtT\20const*\2c\20SkOpPtT\20const*\2c\20SkOpPtT\20const*\29
+5405:SkCodecs::get_decoders_for_editing\28\29
+5406:SkCodec::outputScanline\28int\29\20const
+5407:SkCodec::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+5408:SkCodec::initializeColorXform\28SkImageInfo\20const&\2c\20SkEncodedInfo::Alpha\2c\20bool\29
+5409:SkCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20SkPngChunkReader*\2c\20SkCodec::SelectionPolicy\29
+5410:SkChopQuadAtMaxCurvature\28SkPoint\20const*\2c\20SkPoint*\29
+5411:SkChopQuadAtHalf\28SkPoint\20const*\2c\20SkPoint*\29
+5412:SkChopMonoCubicAtX\28SkPoint\20const*\2c\20float\2c\20SkPoint*\29
+5413:SkChopCubicAtInflections\28SkPoint\20const*\2c\20SkPoint*\29
+5414:SkCharToGlyphCache::findGlyphIndex\28int\29\20const
+5415:SkCanvasPriv::WriteLattice\28void*\2c\20SkCanvas::Lattice\20const&\29
+5416:SkCanvasPriv::ReadLattice\28SkReadBuffer&\2c\20SkCanvas::Lattice*\29
+5417:SkCanvasPriv::ImageToColorFilter\28SkPaint*\29
+5418:SkCanvasPriv::GetDstClipAndMatrixCounts\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20int*\2c\20int*\29
+5419:SkCanvas::~SkCanvas\28\29
+5420:SkCanvas::wouldOverwriteEntireSurface\28SkRect\20const*\2c\20SkPaint\20const*\2c\20SkCanvas::ShaderOverrideOpacity\29\20const
+5421:SkCanvas::skew\28float\2c\20float\29
+5422:SkCanvas::only_axis_aligned_saveBehind\28SkRect\20const*\29
+5423:SkCanvas::internalDrawPaint\28SkPaint\20const&\29
+5424:SkCanvas::internalDrawDeviceWithFilter\28SkDevice*\2c\20SkDevice*\2c\20SkImageFilter\20const*\2c\20SkPaint\20const&\2c\20SkCanvas::DeviceCompatibleWithFilter\2c\20float\2c\20bool\29
+5425:SkCanvas::getDeviceClipBounds\28\29\20const
+5426:SkCanvas::experimental_DrawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+5427:SkCanvas::drawVertices\28sk_sp<SkVertices>\20const&\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+5428:SkCanvas::drawSlug\28sktext::gpu::Slug\20const*\29
+5429:SkCanvas::drawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+5430:SkCanvas::drawLine\28float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+5431:SkCanvas::drawImageNine\28SkImage\20const*\2c\20SkIRect\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+5432:SkCanvas::drawClippedToSaveBehind\28SkPaint\20const&\29
+5433:SkCanvas::drawAnnotation\28SkRect\20const&\2c\20char\20const*\2c\20SkData*\29
+5434:SkCanvas::didTranslate\28float\2c\20float\29
+5435:SkCanvas::clipShader\28sk_sp<SkShader>\2c\20SkClipOp\29
+5436:SkCanvas::clipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+5437:SkCanvas::SkCanvas\28sk_sp<SkDevice>\29
+5438:SkCanvas::ImageSetEntry::ImageSetEntry\28\29
+5439:SkCachedData::SkCachedData\28void*\2c\20unsigned\20long\29
+5440:SkCachedData::SkCachedData\28unsigned\20long\2c\20SkDiscardableMemory*\29
+5441:SkBulkGlyphMetricsAndPaths::glyphs\28SkSpan<unsigned\20short\20const>\29
+5442:SkBmpStandardCodec::decodeIcoMask\28SkStream*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\29
+5443:SkBmpMaskCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+5444:SkBmpCodec::SkBmpCodec\28SkEncodedInfo&&\2c\20std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20unsigned\20short\2c\20SkCodec::SkScanlineOrder\29
+5445:SkBmpBaseCodec::SkBmpBaseCodec\28SkEncodedInfo&&\2c\20std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20unsigned\20short\2c\20SkCodec::SkScanlineOrder\29
+5446:SkBlurMask::ConvertRadiusToSigma\28float\29
+5447:SkBlurMask::ComputeBlurredScanline\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20unsigned\20int\2c\20float\29
+5448:SkBlurMask::BlurRect\28float\2c\20SkMaskBuilder*\2c\20SkRect\20const&\2c\20SkBlurStyle\2c\20SkIPoint*\2c\20SkMaskBuilder::CreateMode\29
+5449:SkBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+5450:SkBlitter::Choose\28SkPixmap\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkArenaAlloc*\2c\20bool\2c\20sk_sp<SkShader>\2c\20SkSurfaceProps\20const&\29
+5451:SkBlitter::ChooseSprite\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkPixmap\20const&\2c\20int\2c\20int\2c\20SkArenaAlloc*\2c\20sk_sp<SkShader>\29
+5452:SkBlendShader::~SkBlendShader\28\29.1
+5453:SkBlendShader::~SkBlendShader\28\29
+5454:SkBitmapImageGetPixelRef\28SkImage\20const*\29
+5455:SkBitmapDevice::SkBitmapDevice\28SkBitmap\20const&\2c\20SkSurfaceProps\20const&\2c\20void*\29
+5456:SkBitmapDevice::Create\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\2c\20SkRasterHandleAllocator*\29
+5457:SkBitmapCache::Rec::install\28SkBitmap*\29
+5458:SkBitmapCache::Rec::diagnostic_only_getDiscardable\28\29\20const
+5459:SkBitmapCache::Find\28SkBitmapCacheDesc\20const&\2c\20SkBitmap*\29
+5460:SkBitmapCache::Alloc\28SkBitmapCacheDesc\20const&\2c\20SkImageInfo\20const&\2c\20SkPixmap*\29
+5461:SkBitmapCache::Add\28std::__2::unique_ptr<SkBitmapCache::Rec\2c\20SkBitmapCache::RecDeleter>\2c\20SkBitmap*\29
+5462:SkBitmap::setPixelRef\28sk_sp<SkPixelRef>\2c\20int\2c\20int\29
+5463:SkBitmap::setAlphaType\28SkAlphaType\29
+5464:SkBitmap::reset\28\29
+5465:SkBitmap::getAddr\28int\2c\20int\29\20const
+5466:SkBitmap::allocPixels\28SkImageInfo\20const&\2c\20unsigned\20long\29::$_0::operator\28\29\28\29\20const
+5467:SkBitmap::HeapAllocator::allocPixelRef\28SkBitmap*\29
+5468:SkBinaryWriteBuffer::writeFlattenable\28SkFlattenable\20const*\29
+5469:SkBinaryWriteBuffer::writeColor4f\28SkRGBA4f<\28SkAlphaType\293>\20const&\29
+5470:SkBigPicture::SkBigPicture\28SkRect\20const&\2c\20sk_sp<SkRecord>\2c\20std::__2::unique_ptr<SkBigPicture::SnapshotArray\2c\20std::__2::default_delete<SkBigPicture::SnapshotArray>>\2c\20sk_sp<SkBBoxHierarchy>\2c\20unsigned\20long\29
+5471:SkBezierQuad::IntersectWithHorizontalLine\28SkSpan<SkPoint\20const>\2c\20float\2c\20float*\29
+5472:SkBezierCubic::IntersectWithHorizontalLine\28SkSpan<SkPoint\20const>\2c\20float\2c\20float*\29
+5473:SkBasicEdgeBuilder::~SkBasicEdgeBuilder\28\29
+5474:SkBaseShadowTessellator::finishPathPolygon\28\29
+5475:SkBaseShadowTessellator::computeConvexShadow\28float\2c\20float\2c\20bool\29
+5476:SkBaseShadowTessellator::computeConcaveShadow\28float\2c\20float\29
+5477:SkBaseShadowTessellator::clipUmbraPoint\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint*\29
+5478:SkBaseShadowTessellator::addInnerPoint\28SkPoint\20const&\2c\20unsigned\20int\2c\20SkTDArray<SkPoint>\20const&\2c\20int*\29
+5479:SkBaseShadowTessellator::addEdge\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20int\2c\20SkTDArray<SkPoint>\20const&\2c\20bool\2c\20bool\29
+5480:SkBaseShadowTessellator::addArc\28SkPoint\20const&\2c\20float\2c\20bool\29
+5481:SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint\28\29
+5482:SkAutoCanvasMatrixPaint::SkAutoCanvasMatrixPaint\28SkCanvas*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\2c\20SkRect\20const&\29
+5483:SkAndroidCodecAdapter::~SkAndroidCodecAdapter\28\29
+5484:SkAndroidCodecAdapter::SkAndroidCodecAdapter\28SkCodec*\29
+5485:SkAndroidCodec::~SkAndroidCodec\28\29
+5486:SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29
+5487:SkAndroidCodec::SkAndroidCodec\28SkCodec*\29
+5488:SkAnalyticEdge::update\28int\2c\20bool\29
+5489:SkAnalyticEdge::updateLine\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+5490:SkAnalyticEdge::setLine\28SkPoint\20const&\2c\20SkPoint\20const&\29
+5491:SkAAClip::operator=\28SkAAClip\20const&\29
+5492:SkAAClip::op\28SkIRect\20const&\2c\20SkClipOp\29
+5493:SkAAClip::Builder::flushRow\28bool\29
+5494:SkAAClip::Builder::finish\28SkAAClip*\29
+5495:SkAAClip::Builder::Blitter::~Blitter\28\29
+5496:SkAAClip::Builder::Blitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+5497:Sk2DPathEffect::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+5498:SimpleImageInfo*\20emscripten::internal::raw_constructor<SimpleImageInfo>\28\29
+5499:SimpleFontStyle*\20emscripten::internal::MemberAccess<SimpleStrutStyle\2c\20SimpleFontStyle>::getWire<SimpleStrutStyle>\28SimpleFontStyle\20SimpleStrutStyle::*\20const&\2c\20SimpleStrutStyle\20const&\29
+5500:SharedGenerator::isTextureGenerator\28\29
+5501:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\28\29.1
+5502:RgnOper::addSpan\28int\2c\20int\20const*\2c\20int\20const*\29
+5503:PorterDuffXferProcessor::onIsEqual\28GrXferProcessor\20const&\29\20const
+5504:PathSegment::init\28\29
+5505:PathAddVerbsPointsWeights\28SkPath&\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+5506:ParseSingleImage
+5507:ParseHeadersInternal
+5508:PS_Conv_ASCIIHexDecode
+5509:Op\28SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp\2c\20SkPath*\29
+5510:OpAsWinding::markReverse\28Contour*\2c\20Contour*\29
+5511:OpAsWinding::getDirection\28Contour&\29
+5512:OpAsWinding::checkContainerChildren\28Contour*\2c\20Contour*\29
+5513:OffsetEdge::computeCrossingDistance\28OffsetEdge\20const*\29
+5514:OT::sbix::accelerator_t::get_png_extents\28hb_font_t*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20bool\29\20const
+5515:OT::sbix::accelerator_t::choose_strike\28hb_font_t*\29\20const
+5516:OT::hmtxvmtx<OT::vmtx\2c\20OT::vhea\2c\20OT::VVAR>::accelerator_t::accelerator_t\28hb_face_t*\29
+5517:OT::hmtxvmtx<OT::hmtx\2c\20OT::hhea\2c\20OT::HVAR>::accelerator_t::get_advance_with_var_unscaled\28unsigned\20int\2c\20hb_font_t*\2c\20float*\29\20const
+5518:OT::hmtxvmtx<OT::hmtx\2c\20OT::hhea\2c\20OT::HVAR>::accelerator_t::accelerator_t\28hb_face_t*\29
+5519:OT::hb_ot_layout_lookup_accelerator_t*\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GPOS_impl::PosLookup>\28OT::Layout::GPOS_impl::PosLookup\20const&\29
+5520:OT::hb_kern_machine_t<hb_ot_shape_fallback_kern_driver_t>::kern\28hb_font_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20bool\29\20const
+5521:OT::hb_accelerate_subtables_context_t::return_t\20OT::Context::dispatch<OT::hb_accelerate_subtables_context_t>\28OT::hb_accelerate_subtables_context_t*\29\20const
+5522:OT::hb_accelerate_subtables_context_t::return_t\20OT::ChainContext::dispatch<OT::hb_accelerate_subtables_context_t>\28OT::hb_accelerate_subtables_context_t*\29\20const
+5523:OT::glyf_accelerator_t::get_extents\28hb_font_t*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\29\20const
+5524:OT::glyf_accelerator_t::get_advance_with_var_unscaled\28hb_font_t*\2c\20unsigned\20int\2c\20bool\29\20const
+5525:OT::cmap::accelerator_t::get_variation_glyph\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20hb_cache_t<21u\2c\2016u\2c\208u\2c\20true>*\29\20const
+5526:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\2c\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::accelerator_templ_t\28hb_face_t*\29
+5527:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\2c\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::_fini\28\29
+5528:OT::cff1::lookup_expert_subset_charset_for_sid\28unsigned\20int\29
+5529:OT::cff1::lookup_expert_charset_for_sid\28unsigned\20int\29
+5530:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\2c\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\28\29
+5531:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\2c\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::_fini\28\29
+5532:OT::TupleVariationData::unpack_points\28OT::IntType<unsigned\20char\2c\201u>\20const*&\2c\20hb_vector_t<unsigned\20int\2c\20false>&\2c\20OT::IntType<unsigned\20char\2c\201u>\20const*\29
+5533:OT::SBIXStrike::get_glyph_blob\28unsigned\20int\2c\20hb_blob_t*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20unsigned\20int\2c\20unsigned\20int*\29\20const
+5534:OT::RuleSet<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5535:OT::RuleSet<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ContextApplyLookupContext\20const&\29\20const
+5536:OT::RecordListOf<OT::Script>::sanitize\28hb_sanitize_context_t*\29\20const
+5537:OT::RecordListOf<OT::Feature>::sanitize\28hb_sanitize_context_t*\29\20const
+5538:OT::PaintTranslate::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5539:OT::PaintSolid::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5540:OT::PaintSkewAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5541:OT::PaintSkew::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5542:OT::PaintScaleUniformAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5543:OT::PaintScaleUniform::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5544:OT::PaintScaleAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5545:OT::PaintScale::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5546:OT::PaintRotateAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5547:OT::PaintLinearGradient<OT::Variable>::sanitize\28hb_sanitize_context_t*\29\20const
+5548:OT::PaintLinearGradient<OT::NoVariable>::sanitize\28hb_sanitize_context_t*\29\20const
+5549:OT::Lookup::serialize\28hb_serialize_context_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+5550:OT::Layout::propagate_attachment_offsets\28hb_glyph_position_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20hb_direction_t\2c\20unsigned\20int\29
+5551:OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5552:OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\29\20const
+5553:OT::Layout::GPOS_impl::reverse_cursive_minor_offset\28hb_glyph_position_t*\2c\20unsigned\20int\2c\20hb_direction_t\2c\20unsigned\20int\29
+5554:OT::Layout::GPOS_impl::MarkRecord::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+5555:OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5556:OT::Layout::GPOS_impl::AnchorMatrix::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int\29\20const
+5557:OT::IndexSubtableRecord::get_image_data\28unsigned\20int\2c\20void\20const*\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20unsigned\20int*\29\20const
+5558:OT::FeatureVariationRecord::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+5559:OT::FeatureParams::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int\29\20const
+5560:OT::ContextFormat3::sanitize\28hb_sanitize_context_t*\29\20const
+5561:OT::ContextFormat2_5<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5562:OT::ContextFormat2_5<OT::Layout::SmallTypes>::_apply\28OT::hb_ot_apply_context_t*\2c\20bool\29\20const
+5563:OT::ContextFormat1_4<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5564:OT::ColorStop::get_color_stop\28OT::hb_paint_context_t*\2c\20hb_color_stop_t*\2c\20unsigned\20int\2c\20OT::VarStoreInstancer\20const&\29\20const
+5565:OT::ColorLine<OT::NoVariable>::static_get_extend\28hb_color_line_t*\2c\20void*\2c\20void*\29
+5566:OT::ChainRuleSet<OT::Layout::SmallTypes>::would_apply\28OT::hb_would_apply_context_t*\2c\20OT::ChainContextApplyLookupContext\20const&\29\20const
+5567:OT::ChainRuleSet<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5568:OT::ChainRuleSet<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ChainContextApplyLookupContext\20const&\29\20const
+5569:OT::ChainContextFormat3::sanitize\28hb_sanitize_context_t*\29\20const
+5570:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5571:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::_apply\28OT::hb_ot_apply_context_t*\2c\20bool\29\20const
+5572:OT::ChainContextFormat1_4<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5573:OT::CBDT::accelerator_t::get_extents\28hb_font_t*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20bool\29\20const
+5574:OT::Affine2x3::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5575:MakeOnScreenGLSurface\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int\29
+5576:Load_SBit_Png
+5577:LineCubicIntersections::intersectRay\28double*\29
+5578:LineCubicIntersections::VerticalIntersect\28SkDCubic\20const&\2c\20double\2c\20double*\29
+5579:LineCubicIntersections::HorizontalIntersect\28SkDCubic\20const&\2c\20double\2c\20double*\29
+5580:Launch
+5581:JpegDecoderMgr::returnFalse\28char\20const*\29
+5582:JpegDecoderMgr::getEncodedColor\28SkEncodedInfo::Color*\29
+5583:JSObjectFromLineMetrics\28skia::textlayout::LineMetrics&\29
+5584:JSObjectFromGlyphInfo\28skia::textlayout::Paragraph::GlyphInfo&\29
+5585:Ins_DELTAP
+5586:HandleCoincidence\28SkOpContourHead*\2c\20SkOpCoincidence*\29
+5587:GrWritePixelsTask::~GrWritePixelsTask\28\29
+5588:GrWaitRenderTask::~GrWaitRenderTask\28\29
+5589:GrVertexBufferAllocPool::makeSpace\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+5590:GrVertexBufferAllocPool::makeSpaceAtLeast\28unsigned\20long\2c\20int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+5591:GrTriangulator::polysToTriangles\28GrTriangulator::Poly*\2c\20SkPathFillType\2c\20skgpu::VertexWriter\29\20const
+5592:GrTriangulator::polysToTriangles\28GrTriangulator::Poly*\2c\20GrEagerVertexAllocator*\29\20const
+5593:GrTriangulator::mergeEdgesBelow\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+5594:GrTriangulator::mergeEdgesAbove\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+5595:GrTriangulator::makeSortedVertex\28SkPoint\20const&\2c\20unsigned\20char\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29\20const
+5596:GrTriangulator::makeEdge\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeType\2c\20GrTriangulator::Comparator\20const&\29
+5597:GrTriangulator::computeBisector\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\29\20const
+5598:GrTriangulator::appendQuadraticToContour\28SkPoint\20const*\2c\20float\2c\20GrTriangulator::VertexList*\29\20const
+5599:GrTriangulator::SortMesh\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29
+5600:GrTriangulator::FindEnclosingEdges\28GrTriangulator::Vertex\20const&\2c\20GrTriangulator::EdgeList\20const&\2c\20GrTriangulator::Edge**\2c\20GrTriangulator::Edge**\29
+5601:GrTriangulator::Edge::intersect\28GrTriangulator::Edge\20const&\2c\20SkPoint*\2c\20unsigned\20char*\29\20const
+5602:GrTransferFromRenderTask::~GrTransferFromRenderTask\28\29
+5603:GrThreadSafeCache::~GrThreadSafeCache\28\29
+5604:GrThreadSafeCache::findVertsWithData\28skgpu::UniqueKey\20const&\29
+5605:GrThreadSafeCache::addVertsWithData\28skgpu::UniqueKey\20const&\2c\20sk_sp<GrThreadSafeCache::VertexData>\2c\20bool\20\28*\29\28SkData*\2c\20SkData*\29\29
+5606:GrThreadSafeCache::Entry::set\28skgpu::UniqueKey\20const&\2c\20sk_sp<GrThreadSafeCache::VertexData>\29
+5607:GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29
+5608:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\28\29
+5609:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\28sk_sp<GrSurface>\2c\20GrSurfaceProxy::UseAllocator\2c\20GrDDLProvider\29
+5610:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\28GrCaps\20const&\2c\20std::__2::function<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>&&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20int\2c\20skgpu::Mipmapped\2c\20GrMipmapStatus\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\2c\20GrDDLProvider\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5611:GrTextureProxyPriv::setDeferredUploader\28std::__2::unique_ptr<GrDeferredProxyUploader\2c\20std::__2::default_delete<GrDeferredProxyUploader>>\29
+5612:GrTextureProxy::setUniqueKey\28GrProxyProvider*\2c\20skgpu::UniqueKey\20const&\29
+5613:GrTextureProxy::clearUniqueKey\28\29
+5614:GrTextureProxy::ProxiesAreCompatibleAsDynamicState\28GrSurfaceProxy\20const*\2c\20GrSurfaceProxy\20const*\29
+5615:GrTextureProxy::GrTextureProxy\28sk_sp<GrSurface>\2c\20GrSurfaceProxy::UseAllocator\2c\20GrDDLProvider\29.1
+5616:GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29::$_1::operator\28\29\28int\2c\20GrSamplerState::WrapMode\2c\20GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29::Span\2c\20GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29::Span\2c\20float\29\20const
+5617:GrTextureEffect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::$_2::operator\28\29\28GrTextureEffect::ShaderMode\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29\20const
+5618:GrTexture::markMipmapsDirty\28\29
+5619:GrTexture::computeScratchKey\28skgpu::ScratchKey*\29\20const
+5620:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\2c\20true>>::~GrTDeferredProxyUploader\28\29
+5621:GrSurfaceProxyPriv::exactify\28bool\29
+5622:GrSurfaceProxy::GrSurfaceProxy\28GrBackendFormat\20const&\2c\20SkISize\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5623:GrStyledShape::~GrStyledShape\28\29
+5624:GrStyledShape::setInheritedKey\28GrStyledShape\20const&\2c\20GrStyle::Apply\2c\20float\29
+5625:GrStyledShape::asRRect\28SkRRect*\2c\20SkPathDirection*\2c\20unsigned\20int*\2c\20bool*\29\20const
+5626:GrStyledShape::GrStyledShape\28SkPath\20const&\2c\20SkPaint\20const&\2c\20GrStyledShape::DoSimplify\29
+5627:GrStyle::~GrStyle\28\29
+5628:GrStyle::applyToPath\28SkPath*\2c\20SkStrokeRec::InitStyle*\2c\20SkPath\20const&\2c\20float\29\20const
+5629:GrStyle::applyPathEffect\28SkPath*\2c\20SkStrokeRec*\2c\20SkPath\20const&\29\20const
+5630:GrStencilSettings::SetClipBitSettings\28bool\29
+5631:GrStagingBufferManager::detachBuffers\28\29
+5632:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::defineStruct\28char\20const*\29
+5633:GrShape::simplify\28unsigned\20int\29
+5634:GrShape::segmentMask\28\29\20const
+5635:GrShape::conservativeContains\28SkRect\20const&\29\20const
+5636:GrShape::closed\28\29\20const
+5637:GrSWMaskHelper::toTextureView\28GrRecordingContext*\2c\20SkBackingFit\29
+5638:GrSWMaskHelper::drawShape\28GrStyledShape\20const&\2c\20SkMatrix\20const&\2c\20GrAA\2c\20unsigned\20char\29
+5639:GrSWMaskHelper::drawShape\28GrShape\20const&\2c\20SkMatrix\20const&\2c\20GrAA\2c\20unsigned\20char\29
+5640:GrResourceProvider::writePixels\28sk_sp<GrTexture>\2c\20GrColorType\2c\20SkISize\2c\20GrMipLevel\20const*\2c\20int\29\20const
+5641:GrResourceProvider::wrapBackendSemaphore\28GrBackendSemaphore\20const&\2c\20GrSemaphoreWrapType\2c\20GrWrapOwnership\29
+5642:GrResourceProvider::prepareLevels\28GrBackendFormat\20const&\2c\20GrColorType\2c\20SkISize\2c\20GrMipLevel\20const*\2c\20int\2c\20skia_private::AutoSTArray<14\2c\20GrMipLevel>*\2c\20skia_private::AutoSTArray<14\2c\20std::__2::unique_ptr<char\20\5b\5d\2c\20std::__2::default_delete<char\20\5b\5d>>>*\29\20const
+5643:GrResourceProvider::getExactScratch\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5644:GrResourceProvider::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5645:GrResourceProvider::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20GrColorType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrMipLevel\20const*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5646:GrResourceProvider::createApproxTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5647:GrResourceCache::~GrResourceCache\28\29
+5648:GrResourceCache::removeResource\28GrGpuResource*\29
+5649:GrResourceCache::processFreedGpuResources\28\29
+5650:GrResourceCache::insertResource\28GrGpuResource*\29
+5651:GrResourceCache::didChangeBudgetStatus\28GrGpuResource*\29
+5652:GrResourceAllocator::~GrResourceAllocator\28\29
+5653:GrResourceAllocator::planAssignment\28\29
+5654:GrResourceAllocator::expire\28unsigned\20int\29
+5655:GrRenderTask::makeSkippable\28\29
+5656:GrRenderTask::isInstantiated\28\29\20const
+5657:GrRenderTarget::GrRenderTarget\28GrGpu*\2c\20SkISize\20const&\2c\20int\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20sk_sp<GrAttachment>\29
+5658:GrRecordingContextPriv::createDevice\28skgpu::Budgeted\2c\20SkImageInfo\20const&\2c\20SkBackingFit\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const&\2c\20skgpu::ganesh::Device::InitContents\29
+5659:GrRecordingContext::init\28\29
+5660:GrRRectEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrClipEdgeType\2c\20SkRRect\20const&\2c\20GrShaderCaps\20const&\29
+5661:GrQuadUtils::TessellationHelper::reset\28GrQuad\20const&\2c\20GrQuad\20const*\29
+5662:GrQuadUtils::TessellationHelper::outset\28skvx::Vec<4\2c\20float>\20const&\2c\20GrQuad*\2c\20GrQuad*\29
+5663:GrQuadUtils::TessellationHelper::adjustDegenerateVertices\28skvx::Vec<4\2c\20float>\20const&\2c\20GrQuadUtils::TessellationHelper::Vertices*\29
+5664:GrQuadUtils::TessellationHelper::OutsetRequest::reset\28GrQuadUtils::TessellationHelper::EdgeVectors\20const&\2c\20GrQuad::Type\2c\20skvx::Vec<4\2c\20float>\20const&\29
+5665:GrQuadUtils::TessellationHelper::EdgeVectors::reset\28skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20GrQuad::Type\29
+5666:GrQuadUtils::ClipToW0\28DrawQuad*\2c\20DrawQuad*\29
+5667:GrQuad::bounds\28\29\20const
+5668:GrProxyProvider::~GrProxyProvider\28\29
+5669:GrProxyProvider::wrapBackendTexture\28GrBackendTexture\20const&\2c\20GrWrapOwnership\2c\20GrWrapCacheable\2c\20GrIOType\2c\20sk_sp<skgpu::RefCntedCallback>\29
+5670:GrProxyProvider::removeUniqueKeyFromProxy\28GrTextureProxy*\29
+5671:GrProxyProvider::processInvalidUniqueKeyImpl\28skgpu::UniqueKey\20const&\2c\20GrTextureProxy*\2c\20GrProxyProvider::InvalidateGPUResource\2c\20GrProxyProvider::RemoveTableEntry\29
+5672:GrProxyProvider::createLazyProxy\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>&&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20skgpu::Mipmapped\2c\20GrMipmapStatus\2c\20GrInternalSurfaceFlags\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrSurfaceProxy::UseAllocator\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5673:GrProxyProvider::contextID\28\29\20const
+5674:GrProxyProvider::adoptUniqueKeyFromSurface\28GrTextureProxy*\2c\20GrSurface\20const*\29
+5675:GrPixmapBase<void\2c\20GrPixmap>::clip\28SkISize\2c\20SkIPoint*\29
+5676:GrPixmap::GrPixmap\28GrImageInfo\2c\20sk_sp<SkData>\2c\20unsigned\20long\29
+5677:GrPipeline::GrPipeline\28GrPipeline::InitArgs\20const&\2c\20sk_sp<GrXferProcessor\20const>\2c\20GrAppliedHardClip\20const&\29
+5678:GrPersistentCacheUtils::GetType\28SkReadBuffer*\29
+5679:GrPathUtils::QuadUVMatrix::set\28SkPoint\20const*\29
+5680:GrPathTessellationShader::MakeStencilOnlyPipeline\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAAType\2c\20GrAppliedHardClip\20const&\2c\20GrPipeline::InputFlags\29
+5681:GrPaint::setCoverageSetOpXPFactory\28SkRegion::Op\2c\20bool\29
+5682:GrOvalOpFactory::MakeOvalOp\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrStyle\20const&\2c\20GrShaderCaps\20const*\29
+5683:GrOpsRenderPass::drawIndexed\28int\2c\20int\2c\20unsigned\20short\2c\20unsigned\20short\2c\20int\29
+5684:GrOpsRenderPass::drawIndexedInstanced\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+5685:GrOpsRenderPass::drawIndexPattern\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+5686:GrOpFlushState::reset\28\29
+5687:GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp\28GrOp\20const*\2c\20SkRect\20const&\2c\20GrPipeline\20const*\2c\20GrUserStencilSettings\20const*\29
+5688:GrOpFlushState::addASAPUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\29
+5689:GrOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+5690:GrOp::combineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+5691:GrOnFlushResourceProvider::instantiateProxy\28GrSurfaceProxy*\29
+5692:GrMeshDrawTarget::allocMesh\28\29
+5693:GrMeshDrawOp::PatternHelper::init\28GrMeshDrawTarget*\2c\20GrPrimitiveType\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>\2c\20int\2c\20int\2c\20int\2c\20int\29
+5694:GrMeshDrawOp::CombinedQuadCountWillOverflow\28GrAAType\2c\20bool\2c\20int\29
+5695:GrMemoryPool::allocate\28unsigned\20long\29
+5696:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::changed\28\29
+5697:GrIndexBufferAllocPool::makeSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+5698:GrIndexBufferAllocPool::makeSpaceAtLeast\28int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+5699:GrImageInfo::refColorSpace\28\29\20const
+5700:GrImageInfo::minRowBytes\28\29\20const
+5701:GrImageInfo::makeDimensions\28SkISize\29\20const
+5702:GrImageInfo::bpp\28\29\20const
+5703:GrImageInfo::GrImageInfo\28GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int\29
+5704:GrImageContext::abandonContext\28\29
+5705:GrGpuResource::makeBudgeted\28\29
+5706:GrGpuResource::getResourceName\28\29\20const
+5707:GrGpuResource::abandon\28\29
+5708:GrGpuResource::CreateUniqueID\28\29
+5709:GrGpu::~GrGpu\28\29
+5710:GrGpu::regenerateMipMapLevels\28GrTexture*\29
+5711:GrGpu::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5712:GrGpu::createTextureCommon\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5713:GrGeometryProcessor::AttributeSet::addToKey\28skgpu::KeyBuilder*\29\20const
+5714:GrGLTextureParameters::invalidate\28\29
+5715:GrGLTexture::MakeWrapped\28GrGLGpu*\2c\20GrMipmapStatus\2c\20GrGLTexture::Desc\20const&\2c\20sk_sp<GrGLTextureParameters>\2c\20GrWrapCacheable\2c\20GrIOType\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5716:GrGLTexture::GrGLTexture\28GrGLGpu*\2c\20skgpu::Budgeted\2c\20GrGLTexture::Desc\20const&\2c\20GrMipmapStatus\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5717:GrGLTexture::GrGLTexture\28GrGLGpu*\2c\20GrGLTexture::Desc\20const&\2c\20sk_sp<GrGLTextureParameters>\2c\20GrMipmapStatus\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5718:GrGLSLVaryingHandler::getFragDecls\28SkString*\2c\20SkString*\29\20const
+5719:GrGLSLVaryingHandler::addAttribute\28GrShaderVar\20const&\29
+5720:GrGLSLUniformHandler::liftUniformToVertexShader\28GrProcessor\20const&\2c\20SkString\29
+5721:GrGLSLShaderBuilder::finalize\28unsigned\20int\29
+5722:GrGLSLShaderBuilder::emitFunction\28char\20const*\2c\20char\20const*\29
+5723:GrGLSLShaderBuilder::emitFunctionPrototype\28char\20const*\29
+5724:GrGLSLShaderBuilder::appendTextureLookupAndBlend\28char\20const*\2c\20SkBlendMode\2c\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+5725:GrGLSLShaderBuilder::appendColorGamutXform\28SkString*\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29::$_0::operator\28\29\28char\20const*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20skcms_TFType\29\20const
+5726:GrGLSLShaderBuilder::addLayoutQualifier\28char\20const*\2c\20GrGLSLShaderBuilder::InterfaceQualifier\29
+5727:GrGLSLShaderBuilder::GrGLSLShaderBuilder\28GrGLSLProgramBuilder*\29
+5728:GrGLSLProgramDataManager::setRuntimeEffectUniforms\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20SkSpan<GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\20const>\2c\20SkSpan<GrGLSLProgramDataManager::Specialized\20const>\2c\20void\20const*\29\20const
+5729:GrGLSLProgramBuilder::~GrGLSLProgramBuilder\28\29
+5730:GrGLSLBlend::SetBlendModeUniformData\28GrGLSLProgramDataManager\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20SkBlendMode\29
+5731:GrGLSLBlend::BlendExpression\28GrProcessor\20const*\2c\20GrGLSLUniformHandler*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\2c\20char\20const*\2c\20char\20const*\2c\20SkBlendMode\29
+5732:GrGLRenderTarget::GrGLRenderTarget\28GrGLGpu*\2c\20SkISize\20const&\2c\20GrGLFormat\2c\20int\2c\20GrGLRenderTarget::IDs\20const&\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5733:GrGLProgramDataManager::set4fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+5734:GrGLProgramDataManager::set2fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+5735:GrGLProgramBuilder::uniformHandler\28\29
+5736:GrGLProgramBuilder::CreateProgram\28GrDirectContext*\2c\20GrProgramDesc\20const&\2c\20GrProgramInfo\20const&\2c\20GrGLPrecompiledProgram\20const*\29
+5737:GrGLProgram::~GrGLProgram\28\29
+5738:GrGLMakeAssembledInterface\28void*\2c\20void\20\28*\20\28*\29\28void*\2c\20char\20const*\29\29\28\29\29
+5739:GrGLGpu::~GrGLGpu\28\29
+5740:GrGLGpu::uploadTexData\28SkISize\2c\20unsigned\20int\2c\20SkIRect\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20long\2c\20GrMipLevel\20const*\2c\20int\29
+5741:GrGLGpu::uploadCompressedTexData\28SkTextureCompressionType\2c\20GrGLFormat\2c\20SkISize\2c\20skgpu::Mipmapped\2c\20unsigned\20int\2c\20void\20const*\2c\20unsigned\20long\29
+5742:GrGLGpu::uploadColorToTex\28GrGLFormat\2c\20SkISize\2c\20unsigned\20int\2c\20std::__2::array<float\2c\204ul>\2c\20unsigned\20int\29
+5743:GrGLGpu::readOrTransferPixelsFrom\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20void*\2c\20int\29
+5744:GrGLGpu::getCompatibleStencilIndex\28GrGLFormat\29
+5745:GrGLGpu::deleteSync\28__GLsync*\29
+5746:GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29
+5747:GrGLGpu::createCompressedTexture2D\28SkISize\2c\20SkTextureCompressionType\2c\20GrGLFormat\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrGLTextureParameters::SamplerOverriddenState*\29
+5748:GrGLGpu::bindFramebuffer\28unsigned\20int\2c\20unsigned\20int\29
+5749:GrGLGpu::ProgramCache::reset\28\29
+5750:GrGLGpu::ProgramCache::findOrCreateProgramImpl\28GrDirectContext*\2c\20GrProgramDesc\20const&\2c\20GrProgramInfo\20const&\2c\20GrThreadSafePipelineBuilder::Stats::ProgramCacheResult*\29
+5751:GrGLFunction<void\20\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29>::GrGLFunction\28void\20\28*\29\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29\29::'lambda'\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29::__invoke\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29
+5752:GrGLFunction<void\20\28int\2c\20float\29>::GrGLFunction\28void\20\28*\29\28int\2c\20float\29\29::'lambda'\28void\20const*\2c\20int\2c\20float\29::__invoke\28void\20const*\2c\20int\2c\20float\29
+5753:GrGLFormatIsCompressed\28GrGLFormat\29
+5754:GrGLContext::~GrGLContext\28\29.1
+5755:GrGLContext::~GrGLContext\28\29
+5756:GrGLCaps::~GrGLCaps\28\29
+5757:GrGLCaps::getTexSubImageExternalFormatAndType\28GrGLFormat\2c\20GrColorType\2c\20GrColorType\2c\20unsigned\20int*\2c\20unsigned\20int*\29\20const
+5758:GrGLCaps::getTexSubImageDefaultFormatTypeAndColorType\28GrGLFormat\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20GrColorType*\29\20const
+5759:GrGLCaps::getRenderTargetSampleCount\28int\2c\20GrGLFormat\29\20const
+5760:GrGLCaps::formatSupportsTexStorage\28GrGLFormat\29\20const
+5761:GrGLCaps::canCopyAsDraw\28GrGLFormat\2c\20bool\2c\20bool\29\20const
+5762:GrGLCaps::canCopyAsBlit\28GrGLFormat\2c\20int\2c\20GrTextureType\20const*\2c\20GrGLFormat\2c\20int\2c\20GrTextureType\20const*\2c\20SkRect\20const&\2c\20bool\2c\20SkIRect\20const&\2c\20SkIRect\20const&\29\20const
+5763:GrFragmentProcessor::~GrFragmentProcessor\28\29
+5764:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29
+5765:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29
+5766:GrFragmentProcessor::ProgramImpl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+5767:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+5768:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+5769:GrFragmentProcessor::ClampOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+5770:GrFixedClip::preApply\28SkRect\20const&\2c\20GrAA\29\20const
+5771:GrFixedClip::getConservativeBounds\28\29\20const
+5772:GrFixedClip::apply\28GrAppliedHardClip*\2c\20SkIRect*\29\20const
+5773:GrFinishCallbacks::check\28\29
+5774:GrEagerDynamicVertexAllocator::unlock\28int\29
+5775:GrDynamicAtlas::readView\28GrCaps\20const&\29\20const
+5776:GrDynamicAtlas::instantiate\28GrOnFlushResourceProvider*\2c\20sk_sp<GrTexture>\29
+5777:GrDriverBugWorkarounds::GrDriverBugWorkarounds\28\29
+5778:GrDrawingManager::getLastRenderTask\28GrSurfaceProxy\20const*\29\20const
+5779:GrDrawingManager::flush\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+5780:GrDrawOpAtlasConfig::atlasDimensions\28skgpu::MaskFormat\29\20const
+5781:GrDrawOpAtlasConfig::GrDrawOpAtlasConfig\28int\2c\20unsigned\20long\29
+5782:GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29
+5783:GrDrawOpAtlas::Make\28GrProxyProvider*\2c\20GrBackendFormat\20const&\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20int\2c\20int\2c\20int\2c\20skgpu::AtlasGenerationCounter*\2c\20GrDrawOpAtlas::AllowMultitexturing\2c\20skgpu::PlotEvictionCallback*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5784:GrDistanceFieldA8TextGeoProc::onTextureSampler\28int\29\20const
+5785:GrDistanceFieldA8TextGeoProc::addNewViews\28GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\29
+5786:GrDisableColorXPFactory::MakeXferProcessor\28\29
+5787:GrDirectContextPriv::validPMUPMConversionExists\28\29
+5788:GrDirectContext::~GrDirectContext\28\29
+5789:GrDirectContext::onGetSmallPathAtlasMgr\28\29
+5790:GrDirectContext::getResourceCacheLimits\28int*\2c\20unsigned\20long*\29\20const
+5791:GrCopyRenderTask::~GrCopyRenderTask\28\29
+5792:GrCopyRenderTask::onIsUsed\28GrSurfaceProxy*\29\20const
+5793:GrCopyBaseMipMapToView\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20skgpu::Budgeted\29
+5794:GrContext_Base::threadSafeProxy\28\29
+5795:GrContext_Base::maxSurfaceSampleCountForColorType\28SkColorType\29\20const
+5796:GrContext_Base::backend\28\29\20const
+5797:GrColorInfo::makeColorType\28GrColorType\29\20const
+5798:GrColorInfo::isLinearlyBlended\28\29\20const
+5799:GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis\28GrProcessorAnalysisColor\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\20const*\2c\20int\29
+5800:GrClip::IsPixelAligned\28SkRect\20const&\29
+5801:GrCaps::surfaceSupportsWritePixels\28GrSurface\20const*\29\20const
+5802:GrCaps::getDstSampleFlagsForProxy\28GrRenderTargetProxy\20const*\2c\20bool\29\20const
+5803:GrCPixmap::GrCPixmap\28GrPixmap\20const&\29
+5804:GrBufferAllocPool::makeSpaceAtLeast\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\2c\20unsigned\20long*\29
+5805:GrBufferAllocPool::createBlock\28unsigned\20long\29
+5806:GrBufferAllocPool::CpuBufferCache::makeBuffer\28unsigned\20long\2c\20bool\29
+5807:GrBlurUtils::draw_shape_with_mask_filter\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrClip\20const*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkMaskFilterBase\20const*\2c\20GrStyledShape\20const&\29
+5808:GrBlurUtils::draw_mask\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20GrPaint&&\2c\20GrSurfaceProxyView\29
+5809:GrBlurUtils::create_integral_table\28float\2c\20SkBitmap*\29
+5810:GrBlurUtils::convolve_gaussian\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20SkAlphaType\2c\20SkIRect\2c\20SkIRect\2c\20GrBlurUtils::\28anonymous\20namespace\29::Direction\2c\20int\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkColorSpace>\2c\20SkBackingFit\29
+5811:GrBlurUtils::\28anonymous\20namespace\29::make_texture_effect\28GrCaps\20const*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20GrSamplerState\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkISize\20const&\29
+5812:GrBitmapTextGeoProc::addNewViews\28GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\29
+5813:GrBicubicEffect::Make\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState::WrapMode\2c\20GrSamplerState::WrapMode\2c\20SkCubicResampler\2c\20GrBicubicEffect::Direction\2c\20GrCaps\20const&\29
+5814:GrBicubicEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState::WrapMode\2c\20GrSamplerState::WrapMode\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkCubicResampler\2c\20GrBicubicEffect::Direction\2c\20GrCaps\20const&\29
+5815:GrBackendTextures::MakeGL\28int\2c\20int\2c\20skgpu::Mipmapped\2c\20GrGLTextureInfo\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5816:GrBackendTexture::operator=\28GrBackendTexture\20const&\29
+5817:GrBackendRenderTargets::MakeGL\28int\2c\20int\2c\20int\2c\20int\2c\20GrGLFramebufferInfo\20const&\29
+5818:GrBackendRenderTargets::GetGLFramebufferInfo\28GrBackendRenderTarget\20const&\2c\20GrGLFramebufferInfo*\29
+5819:GrBackendRenderTarget::~GrBackendRenderTarget\28\29
+5820:GrBackendRenderTarget::isProtected\28\29\20const
+5821:GrBackendFormatBytesPerBlock\28GrBackendFormat\20const&\29
+5822:GrBackendFormat::makeTexture2D\28\29\20const
+5823:GrBackendFormat::isMockStencilFormat\28\29\20const
+5824:GrBackendFormat::MakeMock\28GrColorType\2c\20SkTextureCompressionType\2c\20bool\29
+5825:GrAuditTrail::opsCombined\28GrOp\20const*\2c\20GrOp\20const*\29
+5826:GrAttachment::ComputeSharedAttachmentUniqueKey\28GrCaps\20const&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20GrAttachment::UsageFlags\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrMemoryless\2c\20skgpu::UniqueKey*\29
+5827:GrAtlasManager::~GrAtlasManager\28\29
+5828:GrAtlasManager::getViews\28skgpu::MaskFormat\2c\20unsigned\20int*\29
+5829:GrAtlasManager::freeAll\28\29
+5830:GrAATriangulator::makeEvent\28GrAATriangulator::SSEdge*\2c\20GrTriangulator::Vertex*\2c\20GrAATriangulator::SSEdge*\2c\20GrTriangulator::Vertex*\2c\20GrAATriangulator::EventList*\2c\20GrTriangulator::Comparator\20const&\29\20const
+5831:GrAATriangulator::collapseOverlapRegions\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\2c\20GrAATriangulator::EventComparator\29
+5832:GrAAConvexTessellator::quadTo\28SkPoint\20const*\29
+5833:GetVariationDesignPosition\28AutoFTAccess&\2c\20SkFontArguments::VariationPosition::Coordinate*\2c\20int\29
+5834:GetShapedLines\28skia::textlayout::Paragraph&\29
+5835:GetLargeValue
+5836:FontMgrRunIterator::endOfCurrentRun\28\29\20const
+5837:FontMgrRunIterator::atEnd\28\29\20const
+5838:FinishRow
+5839:FindUndone\28SkOpContourHead*\29
+5840:FT_Stream_Close
+5841:FT_Sfnt_Table_Info
+5842:FT_Render_Glyph_Internal
+5843:FT_Remove_Module
+5844:FT_Outline_Get_Orientation
+5845:FT_Outline_EmboldenXY
+5846:FT_New_Library
+5847:FT_New_GlyphSlot
+5848:FT_List_Iterate
+5849:FT_List_Find
+5850:FT_List_Finalize
+5851:FT_GlyphLoader_CheckSubGlyphs
+5852:FT_Get_Postscript_Name
+5853:FT_Get_Paint_Layers
+5854:FT_Get_PS_Font_Info
+5855:FT_Get_Kerning
+5856:FT_Get_Glyph_Name
+5857:FT_Get_FSType_Flags
+5858:FT_Get_Colorline_Stops
+5859:FT_Get_Color_Glyph_ClipBox
+5860:FT_Bitmap_Convert
+5861:FT_Add_Default_Modules
+5862:EllipticalRRectOp::~EllipticalRRectOp\28\29.1
+5863:EllipticalRRectOp::~EllipticalRRectOp\28\29
+5864:EllipticalRRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+5865:EllipticalRRectOp::RRect&\20skia_private::TArray<EllipticalRRectOp::RRect\2c\20true>::emplace_back<EllipticalRRectOp::RRect>\28EllipticalRRectOp::RRect&&\29
+5866:EllipticalRRectOp::EllipticalRRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20SkPoint\2c\20bool\29
+5867:EllipseOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkStrokeRec\20const&\29
+5868:EllipseOp::EllipseOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20EllipseOp::DeviceSpaceParams\20const&\2c\20SkStrokeRec\20const&\29
+5869:EllipseGeometryProcessor::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+5870:DIEllipseOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkStrokeRec\20const&\29
+5871:DIEllipseOp::DIEllipseOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20DIEllipseOp::DeviceSpaceParams\20const&\2c\20SkMatrix\20const&\29
+5872:CustomXP::makeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrXferProcessor\20const&\29
+5873:CustomXP::makeProgramImpl\28\29\20const::Impl::emitBlendCodeForDstRead\28GrGLSLXPFragmentBuilder*\2c\20GrGLSLUniformHandler*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20GrXferProcessor\20const&\29
+5874:Cr_z_deflateReset
+5875:Cr_z_deflate
+5876:Cr_z_crc32_z
+5877:CoverageSetOpXP::onIsEqual\28GrXferProcessor\20const&\29\20const
+5878:CircularRRectOp::~CircularRRectOp\28\29.1
+5879:CircularRRectOp::~CircularRRectOp\28\29
+5880:CircularRRectOp::CircularRRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20bool\29
+5881:CircleOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20float\2c\20GrStyle\20const&\2c\20CircleOp::ArcParams\20const*\29
+5882:CircleOp::CircleOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20float\2c\20GrStyle\20const&\2c\20CircleOp::ArcParams\20const*\29
+5883:CircleGeometryProcessor::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+5884:CheckDecBuffer
+5885:CFF::path_procs_t<cff1_path_procs_extents_t\2c\20CFF::cff1_cs_interp_env_t\2c\20cff1_extents_param_t>::rlineto\28CFF::cff1_cs_interp_env_t&\2c\20cff1_extents_param_t&\29
+5886:CFF::dict_interpreter_t<CFF::cff1_private_dict_opset_t\2c\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\2c\20CFF::interp_env_t<CFF::number_t>>::interpret\28CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>&\29
+5887:CFF::cff2_cs_opset_t<cff2_cs_opset_extents_t\2c\20cff2_extents_param_t\2c\20CFF::number_t\2c\20cff2_path_procs_extents_t>::process_blend\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\2c\20cff2_extents_param_t&\29
+5888:CFF::FDSelect3_4<OT::IntType<unsigned\20short\2c\202u>\2c\20OT::IntType<unsigned\20char\2c\201u>>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int\29\20const
+5889:CFF::Charset::get_sid\28unsigned\20int\2c\20unsigned\20int\2c\20CFF::code_pair_t*\29\20const
+5890:CFF::CFFIndex<OT::IntType<unsigned\20short\2c\202u>>::get_size\28\29\20const
+5891:CFF::CFF2FDSelect::get_fd\28unsigned\20int\29\20const
+5892:ButtCapDashedCircleOp::ButtCapDashedCircleOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+5893:BuildHuffmanTable
+5894:AsWinding\28SkPath\20const&\2c\20SkPath*\29
+5895:AngleWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20int*\2c\20bool*\29
+5896:AddIntersectTs\28SkOpContour*\2c\20SkOpContour*\2c\20SkOpCoincidence*\29
+5897:ActiveEdgeList::replace\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\2c\20unsigned\20short\29
+5898:ActiveEdgeList::remove\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\29
+5899:ActiveEdgeList::insert\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\29
+5900:AAT::hb_aat_apply_context_t::return_t\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<AAT::hb_aat_apply_context_t>\28AAT::hb_aat_apply_context_t*\29\20const
+5901:AAT::hb_aat_apply_context_t::return_t\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<AAT::hb_aat_apply_context_t>\28AAT::hb_aat_apply_context_t*\29\20const
+5902:AAT::TrackData::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+5903:AAT::TrackData::get_tracking\28void\20const*\2c\20float\29\20const
+5904:AAT::StateTable<AAT::ObsoleteTypes\2c\20AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+5905:AAT::StateTable<AAT::ExtendedTypes\2c\20AAT::LigatureEntry<true>::EntryData>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+5906:AAT::StateTable<AAT::ExtendedTypes\2c\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+5907:AAT::RearrangementSubtable<AAT::ExtendedTypes>::driver_context_t::transition\28AAT::StateTableDriver<AAT::ExtendedTypes\2c\20void>*\2c\20AAT::Entry<void>\20const&\29
+5908:AAT::NoncontextualSubtable<AAT::ExtendedTypes>::apply\28AAT::hb_aat_apply_context_t*\29\20const
+5909:AAT::Lookup<OT::IntType<unsigned\20int\2c\204u>>::sanitize\28hb_sanitize_context_t*\29\20const
+5910:AAT::Lookup<OT::IntType<unsigned\20int\2c\204u>>::get_value\28unsigned\20int\2c\20unsigned\20int\29\20const
+5911:AAT::InsertionSubtable<AAT::ExtendedTypes>::driver_context_t::transition\28AAT::StateTableDriver<AAT::ExtendedTypes\2c\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>*\2c\20AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>\20const&\29
+5912:ycck_cmyk_convert
+5913:ycc_rgb_convert
+5914:ycc_rgb565_convert
+5915:ycc_rgb565D_convert
+5916:xyzd50_to_lab\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+5917:xyzd50_to_hcl\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+5918:wuffs_gif__decoder__tell_me_more
+5919:wuffs_gif__decoder__set_report_metadata
+5920:wuffs_gif__decoder__num_decoded_frame_configs
+5921:wuffs_base__pixel_swizzler__xxxxxxxx__index_binary_alpha__src_over
+5922:wuffs_base__pixel_swizzler__xxxxxxxx__index__src
+5923:wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over
+5924:wuffs_base__pixel_swizzler__xxxx__index__src
+5925:wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over
+5926:wuffs_base__pixel_swizzler__xxx__index__src
+5927:wuffs_base__pixel_swizzler__transparent_black_src_over
+5928:wuffs_base__pixel_swizzler__transparent_black_src
+5929:wuffs_base__pixel_swizzler__copy_1_1
+5930:wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over
+5931:wuffs_base__pixel_swizzler__bgr_565__index__src
+5932:void\20std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\20const*&\2c\20int>\28char\20const*&\2c\20int&&\29
+5933:void\20std::__2::vector<SkJpegMetadataDecoder::Segment\2c\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>::__emplace_back_slow_path<unsigned\20char\20const&\2c\20sk_sp<SkData>\20const&>\28unsigned\20char\20const&\2c\20sk_sp<SkData>\20const&\29
+5934:void\20std::__2::__call_once_proxy\5babi:v160004\5d<std::__2::tuple<void\20\28&\29\28\29>>\28void*\29
+5935:void\20std::__2::__call_once_proxy\5babi:v160004\5d<std::__2::tuple<std::__2::\28anonymous\20namespace\29::__fake_bind&&>>\28void*\29
+5936:void\20mergeT<unsigned\20short>\28void\20const*\2c\20int\2c\20unsigned\20char\20const*\2c\20int\2c\20void*\29
+5937:void\20mergeT<unsigned\20char>\28void\20const*\2c\20int\2c\20unsigned\20char\20const*\2c\20int\2c\20void*\29
+5938:void\20emscripten::internal::raw_destructor<sk_sp<SkTextBlob>>\28sk_sp<SkTextBlob>*\29
+5939:void\20emscripten::internal::raw_destructor<SkVertices::Builder>\28SkVertices::Builder*\29
+5940:void\20emscripten::internal::raw_destructor<SkPictureRecorder>\28SkPictureRecorder*\29
+5941:void\20emscripten::internal::raw_destructor<SkPath>\28SkPath*\29
+5942:void\20emscripten::internal::raw_destructor<SkPaint>\28SkPaint*\29
+5943:void\20emscripten::internal::raw_destructor<SkContourMeasureIter>\28SkContourMeasureIter*\29
+5944:void\20emscripten::internal::raw_destructor<SimpleImageInfo>\28SimpleImageInfo*\29
+5945:void\20emscripten::internal::MemberAccess<SimpleParagraphStyle\2c\20SimpleTextStyle>::setWire<SimpleParagraphStyle>\28SimpleTextStyle\20SimpleParagraphStyle::*\20const&\2c\20SimpleParagraphStyle&\2c\20SimpleTextStyle*\29
+5946:void\20emscripten::internal::MemberAccess<SimpleParagraphStyle\2c\20SimpleStrutStyle>::setWire<SimpleParagraphStyle>\28SimpleStrutStyle\20SimpleParagraphStyle::*\20const&\2c\20SimpleParagraphStyle&\2c\20SimpleStrutStyle*\29
+5947:void\20emscripten::internal::MemberAccess<SimpleImageInfo\2c\20sk_sp<SkColorSpace>>::setWire<SimpleImageInfo>\28sk_sp<SkColorSpace>\20SimpleImageInfo::*\20const&\2c\20SimpleImageInfo&\2c\20sk_sp<SkColorSpace>*\29
+5948:void\20const*\20emscripten::internal::getActualType<skia::textlayout::TypefaceFontProvider>\28skia::textlayout::TypefaceFontProvider*\29
+5949:void\20const*\20emscripten::internal::getActualType<skia::textlayout::ParagraphBuilderImpl>\28skia::textlayout::ParagraphBuilderImpl*\29
+5950:void\20const*\20emscripten::internal::getActualType<skia::textlayout::Paragraph>\28skia::textlayout::Paragraph*\29
+5951:void\20const*\20emscripten::internal::getActualType<skia::textlayout::FontCollection>\28skia::textlayout::FontCollection*\29
+5952:void\20const*\20emscripten::internal::getActualType<SkVertices>\28SkVertices*\29
+5953:void\20const*\20emscripten::internal::getActualType<SkVertices::Builder>\28SkVertices::Builder*\29
+5954:void\20const*\20emscripten::internal::getActualType<SkTypeface>\28SkTypeface*\29
+5955:void\20const*\20emscripten::internal::getActualType<SkTextBlob>\28SkTextBlob*\29
+5956:void\20const*\20emscripten::internal::getActualType<SkSurface>\28SkSurface*\29
+5957:void\20const*\20emscripten::internal::getActualType<SkShader>\28SkShader*\29
+5958:void\20const*\20emscripten::internal::getActualType<SkRuntimeEffect>\28SkRuntimeEffect*\29
+5959:void\20const*\20emscripten::internal::getActualType<SkPictureRecorder>\28SkPictureRecorder*\29
+5960:void\20const*\20emscripten::internal::getActualType<SkPicture>\28SkPicture*\29
+5961:void\20const*\20emscripten::internal::getActualType<SkPathEffect>\28SkPathEffect*\29
+5962:void\20const*\20emscripten::internal::getActualType<SkPath>\28SkPath*\29
+5963:void\20const*\20emscripten::internal::getActualType<SkPaint>\28SkPaint*\29
+5964:void\20const*\20emscripten::internal::getActualType<SkMaskFilter>\28SkMaskFilter*\29
+5965:void\20const*\20emscripten::internal::getActualType<SkImageFilter>\28SkImageFilter*\29
+5966:void\20const*\20emscripten::internal::getActualType<SkImage>\28SkImage*\29
+5967:void\20const*\20emscripten::internal::getActualType<SkFontMgr>\28SkFontMgr*\29
+5968:void\20const*\20emscripten::internal::getActualType<SkFont>\28SkFont*\29
+5969:void\20const*\20emscripten::internal::getActualType<SkContourMeasureIter>\28SkContourMeasureIter*\29
+5970:void\20const*\20emscripten::internal::getActualType<SkContourMeasure>\28SkContourMeasure*\29
+5971:void\20const*\20emscripten::internal::getActualType<SkColorSpace>\28SkColorSpace*\29
+5972:void\20const*\20emscripten::internal::getActualType<SkColorFilter>\28SkColorFilter*\29
+5973:void\20const*\20emscripten::internal::getActualType<SkCanvas>\28SkCanvas*\29
+5974:void\20const*\20emscripten::internal::getActualType<SkBlender>\28SkBlender*\29
+5975:void\20const*\20emscripten::internal::getActualType<SkAnimatedImage>\28SkAnimatedImage*\29
+5976:void\20const*\20emscripten::internal::getActualType<GrDirectContext>\28GrDirectContext*\29
+5977:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5978:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5979:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5980:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5981:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5982:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5983:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5984:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5985:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5986:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5987:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5988:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5989:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5990:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5991:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5992:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5993:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5994:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5995:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5996:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5997:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5998:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5999:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6000:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6001:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6002:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6003:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6004:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6005:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6006:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6007:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6008:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6009:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6010:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6011:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6012:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6013:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6014:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6015:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6016:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6017:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6018:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6019:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6020:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6021:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6022:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6023:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6024:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6025:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6026:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6027:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6028:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6029:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6030:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6031:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6032:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6033:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6034:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6035:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6036:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6037:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6038:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6039:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6040:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6041:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6042:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6043:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6044:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6045:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6046:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6047:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6048:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6049:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6050:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6051:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6052:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6053:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6054:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6055:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6056:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6057:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6058:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6059:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6060:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6061:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6062:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6063:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6064:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6065:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6066:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6067:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6068:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6069:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6070:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6071:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6072:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+6073:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6074:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6075:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6076:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6077:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6078:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6079:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6080:void\20SkSwizzler::SkipLeading8888ZerosThen<&sample4\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6081:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6082:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6083:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6084:void\20SkSwizzler::SkipLeading8888ZerosThen<©\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6085:virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29.1
+6086:virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29
+6087:virtual\20thunk\20to\20std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29.1
+6088:virtual\20thunk\20to\20std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29
+6089:virtual\20thunk\20to\20std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29.1
+6090:virtual\20thunk\20to\20std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29
+6091:virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.1
+6092:virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29
+6093:virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29.1
+6094:virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29
+6095:virtual\20thunk\20to\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+6096:virtual\20thunk\20to\20GrTextureRenderTargetProxy::instantiate\28GrResourceProvider*\29
+6097:virtual\20thunk\20to\20GrTextureRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+6098:virtual\20thunk\20to\20GrTextureRenderTargetProxy::callbackDesc\28\29\20const
+6099:virtual\20thunk\20to\20GrTextureProxy::~GrTextureProxy\28\29.1
+6100:virtual\20thunk\20to\20GrTextureProxy::~GrTextureProxy\28\29
+6101:virtual\20thunk\20to\20GrTextureProxy::onUninstantiatedGpuMemorySize\28\29\20const
+6102:virtual\20thunk\20to\20GrTextureProxy::instantiate\28GrResourceProvider*\29
+6103:virtual\20thunk\20to\20GrTextureProxy::getUniqueKey\28\29\20const
+6104:virtual\20thunk\20to\20GrTextureProxy::createSurface\28GrResourceProvider*\29\20const
+6105:virtual\20thunk\20to\20GrTextureProxy::callbackDesc\28\29\20const
+6106:virtual\20thunk\20to\20GrTextureProxy::asTextureProxy\28\29\20const
+6107:virtual\20thunk\20to\20GrTextureProxy::asTextureProxy\28\29
+6108:virtual\20thunk\20to\20GrTexture::onGpuMemorySize\28\29\20const
+6109:virtual\20thunk\20to\20GrTexture::computeScratchKey\28skgpu::ScratchKey*\29\20const
+6110:virtual\20thunk\20to\20GrTexture::asTexture\28\29\20const
+6111:virtual\20thunk\20to\20GrTexture::asTexture\28\29
+6112:virtual\20thunk\20to\20GrRenderTargetProxy::~GrRenderTargetProxy\28\29.1
+6113:virtual\20thunk\20to\20GrRenderTargetProxy::~GrRenderTargetProxy\28\29
+6114:virtual\20thunk\20to\20GrRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+6115:virtual\20thunk\20to\20GrRenderTargetProxy::instantiate\28GrResourceProvider*\29
+6116:virtual\20thunk\20to\20GrRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+6117:virtual\20thunk\20to\20GrRenderTargetProxy::callbackDesc\28\29\20const
+6118:virtual\20thunk\20to\20GrRenderTargetProxy::asRenderTargetProxy\28\29\20const
+6119:virtual\20thunk\20to\20GrRenderTargetProxy::asRenderTargetProxy\28\29
+6120:virtual\20thunk\20to\20GrRenderTarget::onRelease\28\29
+6121:virtual\20thunk\20to\20GrRenderTarget::onAbandon\28\29
+6122:virtual\20thunk\20to\20GrRenderTarget::asRenderTarget\28\29\20const
+6123:virtual\20thunk\20to\20GrRenderTarget::asRenderTarget\28\29
+6124:virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29.1
+6125:virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29
+6126:virtual\20thunk\20to\20GrGLTextureRenderTarget::onRelease\28\29
+6127:virtual\20thunk\20to\20GrGLTextureRenderTarget::onGpuMemorySize\28\29\20const
+6128:virtual\20thunk\20to\20GrGLTextureRenderTarget::onAbandon\28\29
+6129:virtual\20thunk\20to\20GrGLTextureRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+6130:virtual\20thunk\20to\20GrGLTexture::~GrGLTexture\28\29.1
+6131:virtual\20thunk\20to\20GrGLTexture::~GrGLTexture\28\29
+6132:virtual\20thunk\20to\20GrGLTexture::onRelease\28\29
+6133:virtual\20thunk\20to\20GrGLTexture::onAbandon\28\29
+6134:virtual\20thunk\20to\20GrGLTexture::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+6135:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+6136:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+6137:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::onFinalize\28\29
+6138:virtual\20thunk\20to\20GrGLRenderTarget::~GrGLRenderTarget\28\29.1
+6139:virtual\20thunk\20to\20GrGLRenderTarget::~GrGLRenderTarget\28\29
+6140:virtual\20thunk\20to\20GrGLRenderTarget::onRelease\28\29
+6141:virtual\20thunk\20to\20GrGLRenderTarget::onGpuMemorySize\28\29\20const
+6142:virtual\20thunk\20to\20GrGLRenderTarget::onAbandon\28\29
+6143:virtual\20thunk\20to\20GrGLRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+6144:virtual\20thunk\20to\20GrGLRenderTarget::backendFormat\28\29\20const
+6145:utf8TextMapOffsetToNative\28UText\20const*\29
+6146:utf8TextMapIndexToUTF16\28UText\20const*\2c\20long\20long\29
+6147:utf8TextLength\28UText*\29
+6148:utf8TextExtract\28UText*\2c\20long\20long\2c\20long\20long\2c\20char16_t*\2c\20int\2c\20UErrorCode*\29
+6149:utf8TextClone\28UText*\2c\20UText\20const*\2c\20signed\20char\2c\20UErrorCode*\29
+6150:utext_openUTF8_73
+6151:ures_loc_resetLocales\28UEnumeration*\2c\20UErrorCode*\29
+6152:ures_loc_nextLocale\28UEnumeration*\2c\20int*\2c\20UErrorCode*\29
+6153:ures_loc_countLocales\28UEnumeration*\2c\20UErrorCode*\29
+6154:ures_loc_closeLocales\28UEnumeration*\29
+6155:ures_cleanup\28\29
+6156:unistrTextReplace\28UText*\2c\20long\20long\2c\20long\20long\2c\20char16_t\20const*\2c\20int\2c\20UErrorCode*\29
+6157:unistrTextLength\28UText*\29
+6158:unistrTextExtract\28UText*\2c\20long\20long\2c\20long\20long\2c\20char16_t*\2c\20int\2c\20UErrorCode*\29
+6159:unistrTextCopy\28UText*\2c\20long\20long\2c\20long\20long\2c\20long\20long\2c\20signed\20char\2c\20UErrorCode*\29
+6160:unistrTextClose\28UText*\29
+6161:unistrTextClone\28UText*\2c\20UText\20const*\2c\20signed\20char\2c\20UErrorCode*\29
+6162:unistrTextAccess\28UText*\2c\20long\20long\2c\20signed\20char\29
+6163:uloc_kw_resetKeywords\28UEnumeration*\2c\20UErrorCode*\29
+6164:uloc_kw_nextKeyword\28UEnumeration*\2c\20int*\2c\20UErrorCode*\29
+6165:uloc_kw_countKeywords\28UEnumeration*\2c\20UErrorCode*\29
+6166:uloc_kw_closeKeywords\28UEnumeration*\29
+6167:uloc_key_type_cleanup\28\29
+6168:uloc_getDefault_73
+6169:uhash_hashUnicodeString_73
+6170:uhash_hashUChars_73
+6171:uhash_hashIChars_73
+6172:uhash_deleteHashtable_73
+6173:uhash_compareUnicodeString_73
+6174:uhash_compareUChars_73
+6175:uhash_compareLong_73
+6176:uhash_compareIChars_73
+6177:uenum_unextDefault_73
+6178:udata_cleanup\28\29
+6179:ucstrTextLength\28UText*\29
+6180:ucstrTextExtract\28UText*\2c\20long\20long\2c\20long\20long\2c\20char16_t*\2c\20int\2c\20UErrorCode*\29
+6181:ucstrTextClone\28UText*\2c\20UText\20const*\2c\20signed\20char\2c\20UErrorCode*\29
+6182:ubrk_setUText_73
+6183:ubrk_setText_73
+6184:ubrk_preceding_73
+6185:ubrk_open_73
+6186:ubrk_next_73
+6187:ubrk_getRuleStatus_73
+6188:ubrk_following_73
+6189:ubrk_first_73
+6190:ubrk_current_73
+6191:ubidi_reorderVisual_73
+6192:ubidi_openSized_73
+6193:ubidi_getLevelAt_73
+6194:ubidi_getLength_73
+6195:ubidi_getDirection_73
+6196:u_strToUpper_73
+6197:u_isspace_73
+6198:u_iscntrl_73
+6199:u_isWhitespace_73
+6200:u_errorName_73
+6201:tt_vadvance_adjust
+6202:tt_slot_init
+6203:tt_size_select
+6204:tt_size_reset_iterator
+6205:tt_size_request
+6206:tt_size_init
+6207:tt_size_done
+6208:tt_sbit_decoder_load_png
+6209:tt_sbit_decoder_load_compound
+6210:tt_sbit_decoder_load_byte_aligned
+6211:tt_sbit_decoder_load_bit_aligned
+6212:tt_property_set
+6213:tt_property_get
+6214:tt_name_ascii_from_utf16
+6215:tt_name_ascii_from_other
+6216:tt_hadvance_adjust
+6217:tt_glyph_load
+6218:tt_get_var_blend
+6219:tt_get_interface
+6220:tt_get_glyph_name
+6221:tt_get_cmap_info
+6222:tt_get_advances
+6223:tt_face_set_sbit_strike
+6224:tt_face_load_strike_metrics
+6225:tt_face_load_sbit_image
+6226:tt_face_load_sbit
+6227:tt_face_load_post
+6228:tt_face_load_pclt
+6229:tt_face_load_os2
+6230:tt_face_load_name
+6231:tt_face_load_maxp
+6232:tt_face_load_kern
+6233:tt_face_load_hmtx
+6234:tt_face_load_hhea
+6235:tt_face_load_head
+6236:tt_face_load_gasp
+6237:tt_face_load_font_dir
+6238:tt_face_load_cpal
+6239:tt_face_load_colr
+6240:tt_face_load_cmap
+6241:tt_face_load_bhed
+6242:tt_face_load_any
+6243:tt_face_init
+6244:tt_face_goto_table
+6245:tt_face_get_paint_layers
+6246:tt_face_get_paint
+6247:tt_face_get_kerning
+6248:tt_face_get_colr_layer
+6249:tt_face_get_colr_glyph_paint
+6250:tt_face_get_colorline_stops
+6251:tt_face_get_color_glyph_clipbox
+6252:tt_face_free_sbit
+6253:tt_face_free_ps_names
+6254:tt_face_free_name
+6255:tt_face_free_cpal
+6256:tt_face_free_colr
+6257:tt_face_done
+6258:tt_face_colr_blend_layer
+6259:tt_driver_init
+6260:tt_cvt_ready_iterator
+6261:tt_cmap_unicode_init
+6262:tt_cmap_unicode_char_next
+6263:tt_cmap_unicode_char_index
+6264:tt_cmap_init
+6265:tt_cmap8_validate
+6266:tt_cmap8_get_info
+6267:tt_cmap8_char_next
+6268:tt_cmap8_char_index
+6269:tt_cmap6_validate
+6270:tt_cmap6_get_info
+6271:tt_cmap6_char_next
+6272:tt_cmap6_char_index
+6273:tt_cmap4_validate
+6274:tt_cmap4_init
+6275:tt_cmap4_get_info
+6276:tt_cmap4_char_next
+6277:tt_cmap4_char_index
+6278:tt_cmap2_validate
+6279:tt_cmap2_get_info
+6280:tt_cmap2_char_next
+6281:tt_cmap2_char_index
+6282:tt_cmap14_variants
+6283:tt_cmap14_variant_chars
+6284:tt_cmap14_validate
+6285:tt_cmap14_init
+6286:tt_cmap14_get_info
+6287:tt_cmap14_done
+6288:tt_cmap14_char_variants
+6289:tt_cmap14_char_var_isdefault
+6290:tt_cmap14_char_var_index
+6291:tt_cmap14_char_next
+6292:tt_cmap13_validate
+6293:tt_cmap13_get_info
+6294:tt_cmap13_char_next
+6295:tt_cmap13_char_index
+6296:tt_cmap12_validate
+6297:tt_cmap12_get_info
+6298:tt_cmap12_char_next
+6299:tt_cmap12_char_index
+6300:tt_cmap10_validate
+6301:tt_cmap10_get_info
+6302:tt_cmap10_char_next
+6303:tt_cmap10_char_index
+6304:tt_cmap0_validate
+6305:tt_cmap0_get_info
+6306:tt_cmap0_char_next
+6307:tt_cmap0_char_index
+6308:transform_scanline_rgbA\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6309:transform_scanline_memcpy\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6310:transform_scanline_bgra_1010102_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6311:transform_scanline_bgra_1010102\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6312:transform_scanline_bgr_101010x_xr\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6313:transform_scanline_bgr_101010x\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6314:transform_scanline_bgrA\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6315:transform_scanline_RGBX\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6316:transform_scanline_F32_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6317:transform_scanline_F32\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6318:transform_scanline_F16_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6319:transform_scanline_F16\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6320:transform_scanline_BGRX\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6321:transform_scanline_BGRA\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6322:transform_scanline_A8_to_GrayAlpha\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6323:transform_scanline_565\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6324:transform_scanline_444\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6325:transform_scanline_4444\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6326:transform_scanline_101010x\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6327:transform_scanline_1010102_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6328:transform_scanline_1010102\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+6329:t2_hints_stems
+6330:t2_hints_open
+6331:t1_make_subfont
+6332:t1_hints_stem
+6333:t1_hints_open
+6334:t1_decrypt
+6335:t1_decoder_parse_metrics
+6336:t1_decoder_init
+6337:t1_decoder_done
+6338:t1_cmap_unicode_init
+6339:t1_cmap_unicode_char_next
+6340:t1_cmap_unicode_char_index
+6341:t1_cmap_std_done
+6342:t1_cmap_std_char_next
+6343:t1_cmap_std_char_index
+6344:t1_cmap_standard_init
+6345:t1_cmap_expert_init
+6346:t1_cmap_custom_init
+6347:t1_cmap_custom_done
+6348:t1_cmap_custom_char_next
+6349:t1_cmap_custom_char_index
+6350:t1_builder_start_point
+6351:t1_builder_init
+6352:t1_builder_add_point1
+6353:t1_builder_add_point
+6354:t1_builder_add_contour
+6355:swizzle_small_index_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6356:swizzle_small_index_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6357:swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6358:swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6359:swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6360:swizzle_rgba16_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6361:swizzle_rgba16_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6362:swizzle_rgba16_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6363:swizzle_rgba16_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6364:swizzle_rgb_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6365:swizzle_rgb_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6366:swizzle_rgb_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6367:swizzle_rgb16_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6368:swizzle_rgb16_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6369:swizzle_rgb16_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6370:swizzle_mask32_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6371:swizzle_mask32_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6372:swizzle_mask32_to_rgba_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6373:swizzle_mask32_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6374:swizzle_mask32_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6375:swizzle_mask32_to_bgra_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6376:swizzle_mask32_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6377:swizzle_mask24_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6378:swizzle_mask24_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6379:swizzle_mask24_to_rgba_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6380:swizzle_mask24_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6381:swizzle_mask24_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6382:swizzle_mask24_to_bgra_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6383:swizzle_mask24_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6384:swizzle_mask16_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6385:swizzle_mask16_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6386:swizzle_mask16_to_rgba_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6387:swizzle_mask16_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6388:swizzle_mask16_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6389:swizzle_mask16_to_bgra_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6390:swizzle_mask16_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6391:swizzle_index_to_n32_skipZ\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6392:swizzle_index_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6393:swizzle_index_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6394:swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6395:swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6396:swizzle_grayalpha_to_a8\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6397:swizzle_gray_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6398:swizzle_gray_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6399:swizzle_cmyk_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6400:swizzle_cmyk_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6401:swizzle_cmyk_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6402:swizzle_bit_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6403:swizzle_bit_to_grayscale\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6404:swizzle_bit_to_f16\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6405:swizzle_bit_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6406:swizzle_bgr_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6407:string_read
+6408:std::exception::what\28\29\20const
+6409:std::bad_variant_access::what\28\29\20const
+6410:std::bad_optional_access::what\28\29\20const
+6411:std::bad_array_new_length::what\28\29\20const
+6412:std::bad_alloc::what\28\29\20const
+6413:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::~unique_ptr\5babi:v160004\5d\28\29
+6414:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\5babi:v160004\5d\28std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>&&\29
+6415:std::__2::time_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20tm\20const*\2c\20char\2c\20char\29\20const
+6416:std::__2::time_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20tm\20const*\2c\20char\2c\20char\29\20const
+6417:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_year\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6418:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_weekday\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6419:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_time\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6420:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_monthname\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6421:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_date\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6422:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\2c\20char\29\20const
+6423:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_year\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6424:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_weekday\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6425:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_time\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6426:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_monthname\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6427:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_date\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+6428:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\2c\20char\29\20const
+6429:std::__2::numpunct<wchar_t>::~numpunct\28\29.1
+6430:std::__2::numpunct<wchar_t>::do_truename\28\29\20const
+6431:std::__2::numpunct<wchar_t>::do_grouping\28\29\20const
+6432:std::__2::numpunct<wchar_t>::do_falsename\28\29\20const
+6433:std::__2::numpunct<char>::~numpunct\28\29.1
+6434:std::__2::numpunct<char>::do_truename\28\29\20const
+6435:std::__2::numpunct<char>::do_thousands_sep\28\29\20const
+6436:std::__2::numpunct<char>::do_grouping\28\29\20const
+6437:std::__2::numpunct<char>::do_falsename\28\29\20const
+6438:std::__2::numpunct<char>::do_decimal_point\28\29\20const
+6439:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20void\20const*\29\20const
+6440:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20unsigned\20long\29\20const
+6441:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20unsigned\20long\20long\29\20const
+6442:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\29\20const
+6443:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20long\29\20const
+6444:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20double\29\20const
+6445:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20double\29\20const
+6446:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20bool\29\20const
+6447:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20void\20const*\29\20const
+6448:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20unsigned\20long\29\20const
+6449:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20unsigned\20long\20long\29\20const
+6450:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\29\20const
+6451:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\20long\29\20const
+6452:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\20double\29\20const
+6453:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20double\29\20const
+6454:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20bool\29\20const
+6455:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20void*&\29\20const
+6456:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20short&\29\20const
+6457:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20long\20long&\29\20const
+6458:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20long&\29\20const
+6459:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+6460:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long&\29\20const
+6461:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20float&\29\20const
+6462:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20double&\29\20const
+6463:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20bool&\29\20const
+6464:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20void*&\29\20const
+6465:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20short&\29\20const
+6466:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20long\20long&\29\20const
+6467:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20long&\29\20const
+6468:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+6469:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long&\29\20const
+6470:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20float&\29\20const
+6471:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20double&\29\20const
+6472:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20bool&\29\20const
+6473:std::__2::money_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\29\20const
+6474:std::__2::money_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20double\29\20const
+6475:std::__2::money_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29\20const
+6476:std::__2::money_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20char\2c\20long\20double\29\20const
+6477:std::__2::money_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&\29\20const
+6478:std::__2::money_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+6479:std::__2::money_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\29\20const
+6480:std::__2::money_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+6481:std::__2::messages<wchar_t>::do_get\28long\2c\20int\2c\20int\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\29\20const
+6482:std::__2::messages<char>::do_get\28long\2c\20int\2c\20int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29\20const
+6483:std::__2::locale::id::__init\28\29
+6484:std::__2::locale::__imp::~__imp\28\29.1
+6485:std::__2::ios_base::~ios_base\28\29.1
+6486:std::__2::ctype<wchar_t>::do_widen\28char\20const*\2c\20char\20const*\2c\20wchar_t*\29\20const
+6487:std::__2::ctype<wchar_t>::do_toupper\28wchar_t\29\20const
+6488:std::__2::ctype<wchar_t>::do_toupper\28wchar_t*\2c\20wchar_t\20const*\29\20const
+6489:std::__2::ctype<wchar_t>::do_tolower\28wchar_t\29\20const
+6490:std::__2::ctype<wchar_t>::do_tolower\28wchar_t*\2c\20wchar_t\20const*\29\20const
+6491:std::__2::ctype<wchar_t>::do_scan_not\28unsigned\20long\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+6492:std::__2::ctype<wchar_t>::do_scan_is\28unsigned\20long\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+6493:std::__2::ctype<wchar_t>::do_narrow\28wchar_t\2c\20char\29\20const
+6494:std::__2::ctype<wchar_t>::do_narrow\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20char\2c\20char*\29\20const
+6495:std::__2::ctype<wchar_t>::do_is\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20unsigned\20long*\29\20const
+6496:std::__2::ctype<wchar_t>::do_is\28unsigned\20long\2c\20wchar_t\29\20const
+6497:std::__2::ctype<char>::~ctype\28\29.1
+6498:std::__2::ctype<char>::do_widen\28char\20const*\2c\20char\20const*\2c\20char*\29\20const
+6499:std::__2::ctype<char>::do_toupper\28char\29\20const
+6500:std::__2::ctype<char>::do_toupper\28char*\2c\20char\20const*\29\20const
+6501:std::__2::ctype<char>::do_tolower\28char\29\20const
+6502:std::__2::ctype<char>::do_tolower\28char*\2c\20char\20const*\29\20const
+6503:std::__2::ctype<char>::do_narrow\28char\2c\20char\29\20const
+6504:std::__2::ctype<char>::do_narrow\28char\20const*\2c\20char\20const*\2c\20char\2c\20char*\29\20const
+6505:std::__2::collate<wchar_t>::do_transform\28wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+6506:std::__2::collate<wchar_t>::do_hash\28wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+6507:std::__2::collate<wchar_t>::do_compare\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+6508:std::__2::collate<char>::do_transform\28char\20const*\2c\20char\20const*\29\20const
+6509:std::__2::collate<char>::do_hash\28char\20const*\2c\20char\20const*\29\20const
+6510:std::__2::collate<char>::do_compare\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29\20const
+6511:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::~codecvt\28\29.1
+6512:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_unshift\28__mbstate_t&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+6513:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+6514:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_max_length\28\29\20const
+6515:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+6516:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_in\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20wchar_t*\2c\20wchar_t*\2c\20wchar_t*&\29\20const
+6517:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_encoding\28\29\20const
+6518:std::__2::codecvt<char\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+6519:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringbuf\28\29.1
+6520:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::underflow\28\29
+6521:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::seekpos\28std::__2::fpos<__mbstate_t>\2c\20unsigned\20int\29
+6522:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::seekoff\28long\20long\2c\20std::__2::ios_base::seekdir\2c\20unsigned\20int\29
+6523:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::pbackfail\28int\29
+6524:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::overflow\28int\29
+6525:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::~basic_streambuf\28\29.1
+6526:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::xsputn\28char\20const*\2c\20long\29
+6527:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::xsgetn\28char*\2c\20long\29
+6528:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::uflow\28\29
+6529:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::setbuf\28char*\2c\20long\29
+6530:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::seekpos\28std::__2::fpos<__mbstate_t>\2c\20unsigned\20int\29
+6531:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::seekoff\28long\20long\2c\20std::__2::ios_base::seekdir\2c\20unsigned\20int\29
+6532:std::__2::bad_function_call::what\28\29\20const
+6533:std::__2::__time_get_c_storage<wchar_t>::__x\28\29\20const
+6534:std::__2::__time_get_c_storage<wchar_t>::__weeks\28\29\20const
+6535:std::__2::__time_get_c_storage<wchar_t>::__r\28\29\20const
+6536:std::__2::__time_get_c_storage<wchar_t>::__months\28\29\20const
+6537:std::__2::__time_get_c_storage<wchar_t>::__c\28\29\20const
+6538:std::__2::__time_get_c_storage<wchar_t>::__am_pm\28\29\20const
+6539:std::__2::__time_get_c_storage<wchar_t>::__X\28\29\20const
+6540:std::__2::__time_get_c_storage<char>::__x\28\29\20const
+6541:std::__2::__time_get_c_storage<char>::__weeks\28\29\20const
+6542:std::__2::__time_get_c_storage<char>::__r\28\29\20const
+6543:std::__2::__time_get_c_storage<char>::__months\28\29\20const
+6544:std::__2::__time_get_c_storage<char>::__c\28\29\20const
+6545:std::__2::__time_get_c_storage<char>::__am_pm\28\29\20const
+6546:std::__2::__time_get_c_storage<char>::__X\28\29\20const
+6547:std::__2::__shared_ptr_pointer<_IO_FILE*\2c\20void\20\28*\29\28_IO_FILE*\29\2c\20std::__2::allocator<_IO_FILE>>::__on_zero_shared\28\29
+6548:std::__2::__shared_ptr_pointer<SkUnicode*\2c\20std::__2::default_delete<SkUnicode>\2c\20std::__2::allocator<SkUnicode>>::__on_zero_shared\28\29
+6549:std::__2::__shared_ptr_emplace<skia::textlayout::Run\2c\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\28\29.1
+6550:std::__2::__shared_ptr_emplace<skia::textlayout::Run\2c\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\28\29
+6551:std::__2::__shared_ptr_emplace<skia::textlayout::Run\2c\20std::__2::allocator<skia::textlayout::Run>>::__on_zero_shared\28\29
+6552:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\2c\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\28\29.1
+6553:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\2c\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\28\29
+6554:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\2c\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::__on_zero_shared\28\29
+6555:std::__2::__shared_ptr_emplace<SkSL::SymbolTable\2c\20std::__2::allocator<SkSL::SymbolTable>>::~__shared_ptr_emplace\28\29.1
+6556:std::__2::__shared_ptr_emplace<SkSL::SymbolTable\2c\20std::__2::allocator<SkSL::SymbolTable>>::~__shared_ptr_emplace\28\29
+6557:std::__2::__shared_ptr_emplace<SkSL::SymbolTable\2c\20std::__2::allocator<SkSL::SymbolTable>>::__on_zero_shared\28\29
+6558:std::__2::__shared_ptr_emplace<SkSL::Context\2c\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\28\29.1
+6559:std::__2::__shared_ptr_emplace<SkSL::Context\2c\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\28\29
+6560:std::__2::__shared_ptr_emplace<SkSL::Context\2c\20std::__2::allocator<SkSL::Context>>::__on_zero_shared\28\29
+6561:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6562:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6563:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6564:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6565:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6566:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6567:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6568:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6569:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6570:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6571:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6572:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6573:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6574:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6575:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6576:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6577:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6578:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6579:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::operator\28\29\28skia::textlayout::Cluster\20const*&&\2c\20unsigned\20long&&\2c\20bool&&\29
+6580:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>*\29\20const
+6581:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28\29\20const
+6582:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::operator\28\29\28skia::textlayout::Cluster\20const*&&\2c\20unsigned\20long&&\2c\20bool&&\29
+6583:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>*\29\20const
+6584:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28\29\20const
+6585:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6586:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6587:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6588:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6589:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6590:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6591:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6592:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6593:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6594:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6595:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6596:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6597:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6598:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6599:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6600:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6601:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6602:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6603:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6604:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6605:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6606:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6607:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6608:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6609:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6610:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6611:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6612:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6613:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6614:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6615:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6616:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6617:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6618:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6619:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6620:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6621:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6622:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6623:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6624:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\2c\20SkPoint&&\2c\20SkPoint&&\2c\20skia::textlayout::InternalLineMetrics&&\2c\20bool&&\29
+6625:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>*\29\20const
+6626:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>::__clone\28\29\20const
+6627:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0>\2c\20void\20\28skia::textlayout::Cluster*\29>::operator\28\29\28skia::textlayout::Cluster*&&\29
+6628:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0>\2c\20void\20\28skia::textlayout::Cluster*\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::Cluster*\29>*\29\20const
+6629:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0>\2c\20void\20\28skia::textlayout::Cluster*\29>::__clone\28\29\20const
+6630:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0>\2c\20void\20\28skia::textlayout::ParagraphImpl*\2c\20char\20const*\2c\20bool\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::ParagraphImpl*\2c\20char\20const*\2c\20bool\29>*\29\20const
+6631:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0>\2c\20void\20\28skia::textlayout::ParagraphImpl*\2c\20char\20const*\2c\20bool\29>::__clone\28\29\20const
+6632:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0>\2c\20float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20SkSpan<skia::textlayout::Block>&&\2c\20float&\2c\20unsigned\20long&&\2c\20unsigned\20char&&\29
+6633:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0>\2c\20float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>::__clone\28std::__2::__function::__base<float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>*\29\20const
+6634:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0>\2c\20float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>::__clone\28\29\20const
+6635:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::operator\28\29\28skia::textlayout::Block&&\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>&&\29
+6636:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>*\29\20const
+6637:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28\29\20const
+6638:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29>\2c\20skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>::operator\28\29\28sk_sp<SkTypeface>&&\29
+6639:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29>\2c\20skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>::__clone\28std::__2::__function::__base<skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>*\29\20const
+6640:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29>\2c\20skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>::__clone\28\29\20const
+6641:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\29
+6642:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\29>*\29\20const
+6643:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\29>::__clone\28\29\20const
+6644:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::operator\28\29\28sktext::gpu::AtlasSubRun\20const*&&\2c\20SkPoint&&\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20sktext::gpu::RendererData&&\29
+6645:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28std::__2::__function::__base<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>*\29\20const
+6646:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28\29\20const
+6647:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::~__func\28\29.1
+6648:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::~__func\28\29
+6649:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::operator\28\29\28void*&&\2c\20void\20const*&&\29
+6650:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::destroy_deallocate\28\29
+6651:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::destroy\28\29
+6652:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::__clone\28std::__2::__function::__base<void\20\28void*\2c\20void\20const*\29>*\29\20const
+6653:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::__clone\28\29\20const
+6654:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6655:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6656:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6657:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6658:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6659:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6660:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+6661:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6662:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6663:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+6664:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6665:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6666:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+6667:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6668:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6669:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::operator\28\29\28sktext::gpu::AtlasSubRun\20const*&&\2c\20SkPoint&&\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20sktext::gpu::RendererData&&\29
+6670:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28std::__2::__function::__base<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>*\29\20const
+6671:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28\29\20const
+6672:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1\2c\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1>\2c\20std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>::operator\28\29\28sktext::gpu::GlyphVector*&&\2c\20int&&\2c\20int&&\2c\20skgpu::MaskFormat&&\2c\20int&&\29
+6673:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1\2c\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1>\2c\20std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>::__clone\28std::__2::__function::__base<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>*\29\20const
+6674:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1\2c\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1>\2c\20std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>::__clone\28\29\20const
+6675:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0>\2c\20bool\20\28GrSurfaceProxy\20const*\29>::operator\28\29\28GrSurfaceProxy\20const*&&\29
+6676:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0>\2c\20bool\20\28GrSurfaceProxy\20const*\29>::__clone\28std::__2::__function::__base<bool\20\28GrSurfaceProxy\20const*\29>*\29\20const
+6677:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0>\2c\20bool\20\28GrSurfaceProxy\20const*\29>::__clone\28\29\20const
+6678:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29\2c\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29>\2c\20void\20\28int\2c\20char\20const*\29>::operator\28\29\28int&&\2c\20char\20const*&&\29
+6679:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29\2c\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20char\20const*\29>*\29\20const
+6680:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29\2c\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28\29\20const
+6681:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6682:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6683:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6684:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6685:std::__2::__function::__func<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6686:std::__2::__function::__func<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6687:std::__2::__function::__func<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6688:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1>\2c\20void\20\28\29>::operator\28\29\28\29
+6689:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6690:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1>\2c\20void\20\28\29>::__clone\28\29\20const
+6691:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6692:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6693:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6694:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6695:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6696:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6697:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6698:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6699:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6700:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6701:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6702:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6703:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6704:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6705:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6706:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6707:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6708:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6709:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6710:std::__2::__function::__func<SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29::'lambda'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29::'lambda'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::operator\28\29\28int&&\2c\20int&&\29
+6711:std::__2::__function::__func<SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29::'lambda'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29::'lambda'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20int\29>*\29\20const
+6712:std::__2::__function::__func<SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29::'lambda'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29::'lambda'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::__clone\28\29\20const
+6713:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda0'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda0'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::operator\28\29\28int&&\2c\20int&&\29
+6714:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda0'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda0'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20int\29>*\29\20const
+6715:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda0'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda0'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::__clone\28\29\20const
+6716:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::operator\28\29\28int&&\2c\20int&&\29
+6717:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20int\29>*\29\20const
+6718:std::__2::__function::__func<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda'\28int\2c\20int\29\2c\20std::__2::allocator<SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29::'lambda'\28int\2c\20int\29>\2c\20void\20\28int\2c\20int\29>::__clone\28\29\20const
+6719:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::~__func\28\29.1
+6720:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::~__func\28\29
+6721:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6722:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::destroy_deallocate\28\29
+6723:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::destroy\28\29
+6724:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6725:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6726:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0\2c\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0>\2c\20void\20\28int\2c\20char\20const*\29>::operator\28\29\28int&&\2c\20char\20const*&&\29
+6727:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0\2c\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20char\20const*\29>*\29\20const
+6728:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0\2c\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28\29\20const
+6729:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::operator\28\29\28unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\29
+6730:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base<void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>*\29\20const
+6731:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+6732:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_0\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_0>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base<void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>*\29\20const
+6733:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_0\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_0>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+6734:std::__2::__function::__func<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0\2c\20std::__2::allocator<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0>\2c\20void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>::operator\28\29\28SkVertices\20const*&&\2c\20SkBlendMode&&\2c\20SkPaint\20const&\2c\20float&&\2c\20float&&\2c\20bool&&\29
+6735:std::__2::__function::__func<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0\2c\20std::__2::allocator<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0>\2c\20void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>::__clone\28std::__2::__function::__base<void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>*\29\20const
+6736:std::__2::__function::__func<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0\2c\20std::__2::allocator<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0>\2c\20void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>::__clone\28\29\20const
+6737:std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::operator\28\29\28SkIRect\20const&\29
+6738:std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28SkIRect\20const&\29>*\29\20const
+6739:std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::__clone\28\29\20const
+6740:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0\2c\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0>\2c\20SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>::operator\28\29\28SkImageInfo\20const&\2c\20void*&&\2c\20unsigned\20long&&\2c\20SkCodec::Options\20const&\2c\20int&&\29
+6741:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0\2c\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0>\2c\20SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>::__clone\28std::__2::__function::__base<SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>*\29\20const
+6742:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0\2c\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0>\2c\20SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>::__clone\28\29\20const
+6743:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29.1
+6744:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29
+6745:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6746:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy_deallocate\28\29
+6747:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy\28\29
+6748:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6749:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6750:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29.1
+6751:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29
+6752:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6753:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy_deallocate\28\29
+6754:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy\28\29
+6755:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6756:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6757:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29.1
+6758:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29
+6759:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6760:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy_deallocate\28\29
+6761:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy\28\29
+6762:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6763:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6764:std::__2::__function::__func<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0\2c\20std::__2::allocator<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0>\2c\20bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>::operator\28\29\28GrTextureProxy*&&\2c\20SkIRect&&\2c\20GrColorType&&\2c\20void\20const*&&\2c\20unsigned\20long&&\29
+6765:std::__2::__function::__func<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0\2c\20std::__2::allocator<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0>\2c\20bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>*\29\20const
+6766:std::__2::__function::__func<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0\2c\20std::__2::allocator<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0>\2c\20bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>::__clone\28\29\20const
+6767:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0\2c\20std::__2::allocator<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0>\2c\20void\20\28GrBackendTexture\29>::operator\28\29\28GrBackendTexture&&\29
+6768:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0\2c\20std::__2::allocator<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0>\2c\20void\20\28GrBackendTexture\29>::__clone\28std::__2::__function::__base<void\20\28GrBackendTexture\29>*\29\20const
+6769:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0\2c\20std::__2::allocator<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0>\2c\20void\20\28GrBackendTexture\29>::__clone\28\29\20const
+6770:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0\2c\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6771:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0\2c\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6772:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0\2c\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6773:std::__2::__function::__func<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6774:std::__2::__function::__func<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6775:std::__2::__function::__func<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6776:std::__2::__function::__func<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6777:std::__2::__function::__func<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6778:std::__2::__function::__func<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6779:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0\2c\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6780:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0\2c\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6781:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0\2c\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6782:std::__2::__function::__func<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0\2c\20std::__2::allocator<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6783:std::__2::__function::__func<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0\2c\20std::__2::allocator<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6784:std::__2::__function::__func<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0\2c\20std::__2::allocator<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6785:std::__2::__function::__func<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6786:std::__2::__function::__func<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6787:std::__2::__function::__func<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6788:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29.1
+6789:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29
+6790:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+6791:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+6792:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29.1
+6793:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29
+6794:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+6795:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+6796:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::operator\28\29\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29
+6797:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+6798:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+6799:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::operator\28\29\28int&&\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*&&\29
+6800:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>*\29\20const
+6801:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28\29\20const
+6802:start_pass_upsample
+6803:start_pass_phuff_decoder
+6804:start_pass_merged_upsample
+6805:start_pass_main
+6806:start_pass_huff_decoder
+6807:start_pass_dpost
+6808:start_pass_2_quant
+6809:start_pass_1_quant
+6810:start_pass
+6811:start_output_pass
+6812:start_input_pass.1
+6813:stackSave
+6814:stackRestore
+6815:srgb_to_hwb\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+6816:srgb_to_hsl\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+6817:srcover_p\28unsigned\20char\2c\20unsigned\20char\29
+6818:sn_write
+6819:sktext::gpu::post_purge_blob_message\28unsigned\20int\2c\20unsigned\20int\29
+6820:sktext::gpu::VertexFiller::isLCD\28\29\20const
+6821:sktext::gpu::TextBlob::~TextBlob\28\29.1
+6822:sktext::gpu::TextBlob::~TextBlob\28\29
+6823:sktext::gpu::SubRun::~SubRun\28\29
+6824:sktext::gpu::SlugImpl::~SlugImpl\28\29.1
+6825:sktext::gpu::SlugImpl::~SlugImpl\28\29
+6826:sktext::gpu::SlugImpl::sourceBounds\28\29\20const
+6827:sktext::gpu::SlugImpl::sourceBoundsWithOrigin\28\29\20const
+6828:sktext::gpu::SlugImpl::doFlatten\28SkWriteBuffer&\29\20const
+6829:sktext::gpu::SDFMaskFilterImpl::getTypeName\28\29\20const
+6830:sktext::gpu::SDFMaskFilterImpl::filterMask\28SkMaskBuilder*\2c\20SkMask\20const&\2c\20SkMatrix\20const&\2c\20SkIPoint*\29\20const
+6831:sktext::gpu::SDFMaskFilterImpl::computeFastBounds\28SkRect\20const&\2c\20SkRect*\29\20const
+6832:skip_variable
+6833:skif::\28anonymous\20namespace\29::RasterBackend::~RasterBackend\28\29
+6834:skif::\28anonymous\20namespace\29::RasterBackend::makeImage\28SkIRect\20const&\2c\20sk_sp<SkImage>\29\20const
+6835:skif::\28anonymous\20namespace\29::RasterBackend::makeDevice\28SkISize\2c\20sk_sp<SkColorSpace>\2c\20SkSurfaceProps\20const*\29\20const
+6836:skif::\28anonymous\20namespace\29::RasterBackend::getCachedBitmap\28SkBitmap\20const&\29\20const
+6837:skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.1
+6838:skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29
+6839:skif::\28anonymous\20namespace\29::GaneshBackend::makeImage\28SkIRect\20const&\2c\20sk_sp<SkImage>\29\20const
+6840:skif::\28anonymous\20namespace\29::GaneshBackend::makeDevice\28SkISize\2c\20sk_sp<SkColorSpace>\2c\20SkSurfaceProps\20const*\29\20const
+6841:skif::\28anonymous\20namespace\29::GaneshBackend::getCachedBitmap\28SkBitmap\20const&\29\20const
+6842:skif::\28anonymous\20namespace\29::GaneshBackend::findAlgorithm\28SkSize\2c\20SkTileMode\2c\20SkColorType\29\20const
+6843:skia_png_zalloc
+6844:skia_png_write_rows
+6845:skia_png_write_info
+6846:skia_png_write_end
+6847:skia_png_user_version_check
+6848:skia_png_set_text
+6849:skia_png_set_sRGB
+6850:skia_png_set_keep_unknown_chunks
+6851:skia_png_set_iCCP
+6852:skia_png_set_gray_to_rgb
+6853:skia_png_set_filter
+6854:skia_png_set_filler
+6855:skia_png_read_update_info
+6856:skia_png_read_info
+6857:skia_png_read_image
+6858:skia_png_read_end
+6859:skia_png_push_fill_buffer
+6860:skia_png_process_data
+6861:skia_png_default_write_data
+6862:skia_png_default_read_data
+6863:skia_png_default_flush
+6864:skia_png_create_read_struct
+6865:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\28\29.1
+6866:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\28\29
+6867:skia::textlayout::TypefaceFontStyleSet::getStyle\28int\2c\20SkFontStyle*\2c\20SkString*\29
+6868:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\28\29.1
+6869:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\28\29
+6870:skia::textlayout::TypefaceFontProvider::onMatchFamily\28char\20const*\29\20const
+6871:skia::textlayout::TypefaceFontProvider::onGetFamilyName\28int\2c\20SkString*\29\20const
+6872:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::~ShapeHandler\28\29.1
+6873:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::~ShapeHandler\28\29
+6874:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::runBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6875:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6876:skia::textlayout::SkRange<unsigned\20long>*\20emscripten::internal::raw_constructor<skia::textlayout::SkRange<unsigned\20long>>\28\29
+6877:skia::textlayout::PositionWithAffinity*\20emscripten::internal::raw_constructor<skia::textlayout::PositionWithAffinity>\28\29
+6878:skia::textlayout::ParagraphImpl::~ParagraphImpl\28\29.1
+6879:skia::textlayout::ParagraphImpl::visit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>\20const&\29
+6880:skia::textlayout::ParagraphImpl::updateTextAlign\28skia::textlayout::TextAlign\29
+6881:skia::textlayout::ParagraphImpl::updateForegroundPaint\28unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\29
+6882:skia::textlayout::ParagraphImpl::updateFontSize\28unsigned\20long\2c\20unsigned\20long\2c\20float\29
+6883:skia::textlayout::ParagraphImpl::updateBackgroundPaint\28unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\29
+6884:skia::textlayout::ParagraphImpl::unresolvedGlyphs\28\29
+6885:skia::textlayout::ParagraphImpl::unresolvedCodepoints\28\29
+6886:skia::textlayout::ParagraphImpl::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29
+6887:skia::textlayout::ParagraphImpl::paint\28SkCanvas*\2c\20float\2c\20float\29
+6888:skia::textlayout::ParagraphImpl::markDirty\28\29
+6889:skia::textlayout::ParagraphImpl::lineNumber\28\29
+6890:skia::textlayout::ParagraphImpl::layout\28float\29
+6891:skia::textlayout::ParagraphImpl::getWordBoundary\28unsigned\20int\29
+6892:skia::textlayout::ParagraphImpl::getRectsForRange\28unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29
+6893:skia::textlayout::ParagraphImpl::getRectsForPlaceholders\28\29
+6894:skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\20const::'lambda'\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29::__invoke\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29
+6895:skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29
+6896:skia::textlayout::ParagraphImpl::getLineNumberAt\28unsigned\20long\29\20const
+6897:skia::textlayout::ParagraphImpl::getLineNumberAtUTF16Offset\28unsigned\20long\29
+6898:skia::textlayout::ParagraphImpl::getLineMetrics\28std::__2::vector<skia::textlayout::LineMetrics\2c\20std::__2::allocator<skia::textlayout::LineMetrics>>&\29
+6899:skia::textlayout::ParagraphImpl::getLineMetricsAt\28int\2c\20skia::textlayout::LineMetrics*\29\20const
+6900:skia::textlayout::ParagraphImpl::getGlyphPositionAtCoordinate\28float\2c\20float\29
+6901:skia::textlayout::ParagraphImpl::getFonts\28\29\20const
+6902:skia::textlayout::ParagraphImpl::getFontAt\28unsigned\20long\29\20const
+6903:skia::textlayout::ParagraphImpl::getFontAtUTF16Offset\28unsigned\20long\29
+6904:skia::textlayout::ParagraphImpl::getClosestUTF16GlyphInfoAt\28float\2c\20float\2c\20skia::textlayout::Paragraph::GlyphInfo*\29
+6905:skia::textlayout::ParagraphImpl::getClosestGlyphClusterAt\28float\2c\20float\2c\20skia::textlayout::Paragraph::GlyphClusterInfo*\29
+6906:skia::textlayout::ParagraphImpl::getActualTextRange\28int\2c\20bool\29\20const
+6907:skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29
+6908:skia::textlayout::ParagraphImpl::containsEmoji\28SkTextBlob*\29
+6909:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\28SkTextBlob*\29::$_0::__invoke\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29
+6910:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\28SkTextBlob*\29
+6911:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\28\29.1
+6912:skia::textlayout::ParagraphBuilderImpl::pushStyle\28skia::textlayout::TextStyle\20const&\29
+6913:skia::textlayout::ParagraphBuilderImpl::pop\28\29
+6914:skia::textlayout::ParagraphBuilderImpl::peekStyle\28\29
+6915:skia::textlayout::ParagraphBuilderImpl::getText\28\29
+6916:skia::textlayout::ParagraphBuilderImpl::getParagraphStyle\28\29\20const
+6917:skia::textlayout::ParagraphBuilderImpl::addText\28std::__2::basic_string<char16_t\2c\20std::__2::char_traits<char16_t>\2c\20std::__2::allocator<char16_t>>\20const&\29
+6918:skia::textlayout::ParagraphBuilderImpl::addText\28char\20const*\2c\20unsigned\20long\29
+6919:skia::textlayout::ParagraphBuilderImpl::addText\28char\20const*\29
+6920:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\28skia::textlayout::PlaceholderStyle\20const&\29
+6921:skia::textlayout::ParagraphBuilderImpl::SetUnicode\28std::__2::unique_ptr<SkUnicode\2c\20std::__2::default_delete<SkUnicode>>\29
+6922:skia::textlayout::ParagraphBuilderImpl::Reset\28\29
+6923:skia::textlayout::ParagraphBuilderImpl::RequiresClientICU\28\29
+6924:skia::textlayout::ParagraphBuilderImpl::Build\28\29
+6925:skia::textlayout::Paragraph::getMinIntrinsicWidth\28\29
+6926:skia::textlayout::Paragraph::getMaxWidth\28\29
+6927:skia::textlayout::Paragraph::getMaxIntrinsicWidth\28\29
+6928:skia::textlayout::Paragraph::getLongestLine\28\29
+6929:skia::textlayout::Paragraph::getIdeographicBaseline\28\29
+6930:skia::textlayout::Paragraph::getHeight\28\29
+6931:skia::textlayout::Paragraph::getAlphabeticBaseline\28\29
+6932:skia::textlayout::Paragraph::didExceedMaxLines\28\29
+6933:skia::textlayout::Paragraph::FontInfo::~FontInfo\28\29.1
+6934:skia::textlayout::Paragraph::FontInfo::~FontInfo\28\29
+6935:skia::textlayout::OneLineShaper::~OneLineShaper\28\29.1
+6936:skia::textlayout::OneLineShaper::runBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6937:skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6938:skia::textlayout::LangIterator::~LangIterator\28\29.1
+6939:skia::textlayout::LangIterator::~LangIterator\28\29
+6940:skia::textlayout::LangIterator::endOfCurrentRun\28\29\20const
+6941:skia::textlayout::LangIterator::currentLanguage\28\29\20const
+6942:skia::textlayout::LangIterator::consume\28\29
+6943:skia::textlayout::LangIterator::atEnd\28\29\20const
+6944:skia::textlayout::FontCollection::~FontCollection\28\29.1
+6945:skia::textlayout::CanvasParagraphPainter::translate\28float\2c\20float\29
+6946:skia::textlayout::CanvasParagraphPainter::save\28\29
+6947:skia::textlayout::CanvasParagraphPainter::restore\28\29
+6948:skia::textlayout::CanvasParagraphPainter::drawTextShadow\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20unsigned\20int\2c\20float\29
+6949:skia::textlayout::CanvasParagraphPainter::drawTextBlob\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20std::__2::variant<SkPaint\2c\20int>\20const&\29
+6950:skia::textlayout::CanvasParagraphPainter::drawRect\28SkRect\20const&\2c\20std::__2::variant<SkPaint\2c\20int>\20const&\29
+6951:skia::textlayout::CanvasParagraphPainter::drawPath\28SkPath\20const&\2c\20skia::textlayout::ParagraphPainter::DecorationStyle\20const&\29
+6952:skia::textlayout::CanvasParagraphPainter::drawLine\28float\2c\20float\2c\20float\2c\20float\2c\20skia::textlayout::ParagraphPainter::DecorationStyle\20const&\29
+6953:skia::textlayout::CanvasParagraphPainter::drawFilledRect\28SkRect\20const&\2c\20skia::textlayout::ParagraphPainter::DecorationStyle\20const&\29
+6954:skia::textlayout::CanvasParagraphPainter::clipRect\28SkRect\20const&\29
+6955:skgpu::tess::FixedCountWedges::WriteVertexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6956:skgpu::tess::FixedCountWedges::WriteIndexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6957:skgpu::tess::FixedCountStrokes::WriteVertexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6958:skgpu::tess::FixedCountCurves::WriteVertexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6959:skgpu::tess::FixedCountCurves::WriteIndexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6960:skgpu::ganesh::texture_proxy_view_from_planes\28GrRecordingContext*\2c\20SkImage_Lazy\20const*\2c\20skgpu::Budgeted\29::$_0::__invoke\28void*\2c\20void*\29
+6961:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::~SmallPathOp\28\29.1
+6962:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6963:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6964:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6965:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6966:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::name\28\29\20const
+6967:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::fixedFunctionFlags\28\29\20const
+6968:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6969:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::name\28\29\20const
+6970:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+6971:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6972:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6973:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+6974:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::~HullShader\28\29.1
+6975:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::~HullShader\28\29
+6976:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::name\28\29\20const
+6977:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::emitVertexCode\28GrShaderCaps\20const&\2c\20GrPathTessellationShader\20const&\2c\20GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6978:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6979:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\28\29.1
+6980:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\28\29
+6981:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6982:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6983:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6984:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6985:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6986:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::name\28\29\20const
+6987:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::fixedFunctionFlags\28\29\20const
+6988:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6989:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::~AAConvexPathOp\28\29.1
+6990:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::~AAConvexPathOp\28\29
+6991:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6992:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6993:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6994:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6995:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6996:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::name\28\29\20const
+6997:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6998:skgpu::ganesh::TriangulatingPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6999:skgpu::ganesh::TriangulatingPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7000:skgpu::ganesh::TriangulatingPathRenderer::name\28\29\20const
+7001:skgpu::ganesh::TessellationPathRenderer::onStencilPath\28skgpu::ganesh::PathRenderer::StencilPathArgs\20const&\29
+7002:skgpu::ganesh::TessellationPathRenderer::onGetStencilSupport\28GrStyledShape\20const&\29\20const
+7003:skgpu::ganesh::TessellationPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7004:skgpu::ganesh::TessellationPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7005:skgpu::ganesh::TessellationPathRenderer::name\28\29\20const
+7006:skgpu::ganesh::SurfaceDrawContext::willReplaceOpsTask\28skgpu::ganesh::OpsTask*\2c\20skgpu::ganesh::OpsTask*\29
+7007:skgpu::ganesh::SurfaceDrawContext::canDiscardPreviousOpsOnFullClear\28\29\20const
+7008:skgpu::ganesh::SurfaceContext::~SurfaceContext\28\29.1
+7009:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\28GrDirectContext*\2c\20SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\20const&\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::$_0::__invoke\28void*\29
+7010:skgpu::ganesh::SurfaceContext::asyncReadPixels\28GrDirectContext*\2c\20SkIRect\20const&\2c\20SkColorType\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::$_0::__invoke\28void*\29
+7011:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\28\29.1
+7012:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\28\29
+7013:skgpu::ganesh::StrokeTessellateOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7014:skgpu::ganesh::StrokeTessellateOp::usesStencil\28\29\20const
+7015:skgpu::ganesh::StrokeTessellateOp::onPrepare\28GrOpFlushState*\29
+7016:skgpu::ganesh::StrokeTessellateOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7017:skgpu::ganesh::StrokeTessellateOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7018:skgpu::ganesh::StrokeTessellateOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7019:skgpu::ganesh::StrokeTessellateOp::name\28\29\20const
+7020:skgpu::ganesh::StrokeTessellateOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7021:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\28\29.1
+7022:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\28\29
+7023:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7024:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::programInfo\28\29
+7025:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+7026:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7027:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7028:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::name\28\29\20const
+7029:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7030:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::~AAStrokeRectOp\28\29.1
+7031:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::~AAStrokeRectOp\28\29
+7032:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7033:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::programInfo\28\29
+7034:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+7035:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7036:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7037:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7038:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::name\28\29\20const
+7039:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7040:skgpu::ganesh::StencilClip::~StencilClip\28\29.1
+7041:skgpu::ganesh::StencilClip::~StencilClip\28\29
+7042:skgpu::ganesh::StencilClip::preApply\28SkRect\20const&\2c\20GrAA\29\20const
+7043:skgpu::ganesh::StencilClip::getConservativeBounds\28\29\20const
+7044:skgpu::ganesh::StencilClip::apply\28GrAppliedHardClip*\2c\20SkIRect*\29\20const
+7045:skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7046:skgpu::ganesh::SoftwarePathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7047:skgpu::ganesh::SoftwarePathRenderer::name\28\29\20const
+7048:skgpu::ganesh::SmallPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7049:skgpu::ganesh::SmallPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7050:skgpu::ganesh::SmallPathRenderer::name\28\29\20const
+7051:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29.1
+7052:skgpu::ganesh::SmallPathAtlasMgr::preFlush\28GrOnFlushResourceProvider*\29
+7053:skgpu::ganesh::SmallPathAtlasMgr::postFlush\28skgpu::AtlasToken\29
+7054:skgpu::ganesh::SmallPathAtlasMgr::evict\28skgpu::PlotLocator\29
+7055:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::~RegionOpImpl\28\29.1
+7056:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::~RegionOpImpl\28\29
+7057:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7058:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::programInfo\28\29
+7059:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+7060:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7061:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7062:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7063:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::name\28\29\20const
+7064:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7065:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_quad_generic\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7066:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_uv_strict\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7067:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_uv\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7068:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_cov_uv_strict\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7069:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_cov_uv\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7070:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_color_uv_strict\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7071:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_color_uv\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7072:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_color\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+7073:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\28\29.1
+7074:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\28\29
+7075:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::onTextureSampler\28int\29\20const
+7076:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::name\28\29\20const
+7077:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+7078:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+7079:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+7080:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+7081:skgpu::ganesh::PathWedgeTessellator::prepare\28GrMeshDrawTarget*\2c\20SkMatrix\20const&\2c\20skgpu::ganesh::PathTessellator::PathDrawList\20const&\2c\20int\29
+7082:skgpu::ganesh::PathTessellator::~PathTessellator\28\29
+7083:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\28\29.1
+7084:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\28\29
+7085:skgpu::ganesh::PathTessellateOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7086:skgpu::ganesh::PathTessellateOp::usesStencil\28\29\20const
+7087:skgpu::ganesh::PathTessellateOp::onPrepare\28GrOpFlushState*\29
+7088:skgpu::ganesh::PathTessellateOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7089:skgpu::ganesh::PathTessellateOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7090:skgpu::ganesh::PathTessellateOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7091:skgpu::ganesh::PathTessellateOp::name\28\29\20const
+7092:skgpu::ganesh::PathTessellateOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7093:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\28\29.1
+7094:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\28\29
+7095:skgpu::ganesh::PathStencilCoverOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7096:skgpu::ganesh::PathStencilCoverOp::onPrepare\28GrOpFlushState*\29
+7097:skgpu::ganesh::PathStencilCoverOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7098:skgpu::ganesh::PathStencilCoverOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7099:skgpu::ganesh::PathStencilCoverOp::name\28\29\20const
+7100:skgpu::ganesh::PathStencilCoverOp::fixedFunctionFlags\28\29\20const
+7101:skgpu::ganesh::PathStencilCoverOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7102:skgpu::ganesh::PathRenderer::onStencilPath\28skgpu::ganesh::PathRenderer::StencilPathArgs\20const&\29
+7103:skgpu::ganesh::PathRenderer::onGetStencilSupport\28GrStyledShape\20const&\29\20const
+7104:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\28\29.1
+7105:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\28\29
+7106:skgpu::ganesh::PathInnerTriangulateOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7107:skgpu::ganesh::PathInnerTriangulateOp::onPrepare\28GrOpFlushState*\29
+7108:skgpu::ganesh::PathInnerTriangulateOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7109:skgpu::ganesh::PathInnerTriangulateOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7110:skgpu::ganesh::PathInnerTriangulateOp::name\28\29\20const
+7111:skgpu::ganesh::PathInnerTriangulateOp::fixedFunctionFlags\28\29\20const
+7112:skgpu::ganesh::PathInnerTriangulateOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7113:skgpu::ganesh::PathCurveTessellator::prepare\28GrMeshDrawTarget*\2c\20SkMatrix\20const&\2c\20skgpu::ganesh::PathTessellator::PathDrawList\20const&\2c\20int\29
+7114:skgpu::ganesh::OpsTask::~OpsTask\28\29.1
+7115:skgpu::ganesh::OpsTask::onPrepare\28GrOpFlushState*\29
+7116:skgpu::ganesh::OpsTask::onPrePrepare\28GrRecordingContext*\29
+7117:skgpu::ganesh::OpsTask::onMakeSkippable\28\29
+7118:skgpu::ganesh::OpsTask::onIsUsed\28GrSurfaceProxy*\29\20const
+7119:skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+7120:skgpu::ganesh::OpsTask::endFlush\28GrDrawingManager*\29
+7121:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::~NonAALatticeOp\28\29.1
+7122:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7123:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onPrepareDraws\28GrMeshDrawTarget*\29
+7124:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7125:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7126:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7127:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::name\28\29\20const
+7128:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7129:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::~LatticeGP\28\29.1
+7130:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::~LatticeGP\28\29
+7131:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::onTextureSampler\28int\29\20const
+7132:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::name\28\29\20const
+7133:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+7134:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+7135:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+7136:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+7137:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::~FillRRectOpImpl\28\29.1
+7138:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::~FillRRectOpImpl\28\29
+7139:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7140:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+7141:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7142:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7143:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7144:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::name\28\29\20const
+7145:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7146:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::clipToShape\28skgpu::ganesh::SurfaceDrawContext*\2c\20SkClipOp\2c\20SkMatrix\20const&\2c\20GrShape\20const&\2c\20GrAA\29
+7147:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::~Processor\28\29.1
+7148:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::~Processor\28\29
+7149:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::name\28\29\20const
+7150:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+7151:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+7152:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+7153:skgpu::ganesh::DrawableOp::~DrawableOp\28\29.1
+7154:skgpu::ganesh::DrawableOp::~DrawableOp\28\29
+7155:skgpu::ganesh::DrawableOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7156:skgpu::ganesh::DrawableOp::name\28\29\20const
+7157:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\28\29.1
+7158:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\28\29
+7159:skgpu::ganesh::DrawAtlasPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7160:skgpu::ganesh::DrawAtlasPathOp::onPrepare\28GrOpFlushState*\29
+7161:skgpu::ganesh::DrawAtlasPathOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7162:skgpu::ganesh::DrawAtlasPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7163:skgpu::ganesh::DrawAtlasPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7164:skgpu::ganesh::DrawAtlasPathOp::name\28\29\20const
+7165:skgpu::ganesh::DrawAtlasPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7166:skgpu::ganesh::Device::~Device\28\29.1
+7167:skgpu::ganesh::Device::~Device\28\29
+7168:skgpu::ganesh::Device::strikeDeviceInfo\28\29\20const
+7169:skgpu::ganesh::Device::snapSpecial\28SkIRect\20const&\2c\20bool\29
+7170:skgpu::ganesh::Device::snapSpecialScaled\28SkIRect\20const&\2c\20SkISize\20const&\29
+7171:skgpu::ganesh::Device::replaceClip\28SkIRect\20const&\29
+7172:skgpu::ganesh::Device::recordingContext\28\29\20const
+7173:skgpu::ganesh::Device::pushClipStack\28\29
+7174:skgpu::ganesh::Device::popClipStack\28\29
+7175:skgpu::ganesh::Device::onWritePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+7176:skgpu::ganesh::Device::onReadPixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+7177:skgpu::ganesh::Device::onDrawGlyphRunList\28SkCanvas*\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+7178:skgpu::ganesh::Device::onClipShader\28sk_sp<SkShader>\29
+7179:skgpu::ganesh::Device::makeSurface\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\29
+7180:skgpu::ganesh::Device::makeSpecial\28SkImage\20const*\29
+7181:skgpu::ganesh::Device::isClipWideOpen\28\29\20const
+7182:skgpu::ganesh::Device::isClipRect\28\29\20const
+7183:skgpu::ganesh::Device::isClipEmpty\28\29\20const
+7184:skgpu::ganesh::Device::isClipAntiAliased\28\29\20const
+7185:skgpu::ganesh::Device::drawVertices\28SkVertices\20const*\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\2c\20bool\29
+7186:skgpu::ganesh::Device::drawSpecial\28SkSpecialImage*\2c\20SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+7187:skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29
+7188:skgpu::ganesh::Device::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+7189:skgpu::ganesh::Device::drawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+7190:skgpu::ganesh::Device::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+7191:skgpu::ganesh::Device::drawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+7192:skgpu::ganesh::Device::drawPaint\28SkPaint\20const&\29
+7193:skgpu::ganesh::Device::drawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+7194:skgpu::ganesh::Device::drawMesh\28SkMesh\20const&\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+7195:skgpu::ganesh::Device::drawImageRect\28SkImage\20const*\2c\20SkRect\20const*\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+7196:skgpu::ganesh::Device::drawImageLattice\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const&\29
+7197:skgpu::ganesh::Device::drawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+7198:skgpu::ganesh::Device::drawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+7199:skgpu::ganesh::Device::drawDrawable\28SkCanvas*\2c\20SkDrawable*\2c\20SkMatrix\20const*\29
+7200:skgpu::ganesh::Device::drawDevice\28SkDevice*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+7201:skgpu::ganesh::Device::drawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+7202:skgpu::ganesh::Device::drawAtlas\28SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+7203:skgpu::ganesh::Device::drawAsTiledImageRect\28SkCanvas*\2c\20SkImage\20const*\2c\20SkRect\20const*\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+7204:skgpu::ganesh::Device::drawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+7205:skgpu::ganesh::Device::devClipBounds\28\29\20const
+7206:skgpu::ganesh::Device::createImageFilteringBackend\28SkSurfaceProps\20const&\2c\20SkColorType\29\20const
+7207:skgpu::ganesh::Device::createDevice\28SkDevice::CreateInfo\20const&\2c\20SkPaint\20const*\29
+7208:skgpu::ganesh::Device::convertGlyphRunListToSlug\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+7209:skgpu::ganesh::Device::clipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+7210:skgpu::ganesh::Device::clipRect\28SkRect\20const&\2c\20SkClipOp\2c\20bool\29
+7211:skgpu::ganesh::Device::clipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20bool\29
+7212:skgpu::ganesh::Device::clipPath\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29
+7213:skgpu::ganesh::Device::android_utils_clipWithStencil\28\29
+7214:skgpu::ganesh::DefaultPathRenderer::onStencilPath\28skgpu::ganesh::PathRenderer::StencilPathArgs\20const&\29
+7215:skgpu::ganesh::DefaultPathRenderer::onGetStencilSupport\28GrStyledShape\20const&\29\20const
+7216:skgpu::ganesh::DefaultPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7217:skgpu::ganesh::DefaultPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7218:skgpu::ganesh::DefaultPathRenderer::name\28\29\20const
+7219:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::name\28\29\20const
+7220:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+7221:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+7222:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+7223:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::name\28\29\20const
+7224:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+7225:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+7226:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+7227:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::~DashOpImpl\28\29.1
+7228:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::~DashOpImpl\28\29
+7229:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7230:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::programInfo\28\29
+7231:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+7232:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7233:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+7234:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7235:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::name\28\29\20const
+7236:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::fixedFunctionFlags\28\29\20const
+7237:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7238:skgpu::ganesh::DashLinePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7239:skgpu::ganesh::DashLinePathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7240:skgpu::ganesh::DashLinePathRenderer::name\28\29\20const
+7241:skgpu::ganesh::ClipStack::~ClipStack\28\29.1
+7242:skgpu::ganesh::ClipStack::preApply\28SkRect\20const&\2c\20GrAA\29\20const
+7243:skgpu::ganesh::ClipStack::apply\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrDrawOp*\2c\20GrAAType\2c\20GrAppliedClip*\2c\20SkRect*\29\20const
+7244:skgpu::ganesh::ClearOp::~ClearOp\28\29
+7245:skgpu::ganesh::ClearOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7246:skgpu::ganesh::ClearOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7247:skgpu::ganesh::ClearOp::name\28\29\20const
+7248:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\28\29.1
+7249:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\28\29
+7250:skgpu::ganesh::AtlasTextOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+7251:skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29
+7252:skgpu::ganesh::AtlasTextOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+7253:skgpu::ganesh::AtlasTextOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+7254:skgpu::ganesh::AtlasTextOp::name\28\29\20const
+7255:skgpu::ganesh::AtlasTextOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+7256:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\28\29.1
+7257:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\28\29
+7258:skgpu::ganesh::AtlasRenderTask::onMakeClosed\28GrRecordingContext*\2c\20SkIRect*\29
+7259:skgpu::ganesh::AtlasRenderTask::onExecute\28GrOpFlushState*\29
+7260:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29.1
+7261:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29
+7262:skgpu::ganesh::AtlasPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7263:skgpu::ganesh::AtlasPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7264:skgpu::ganesh::AtlasPathRenderer::name\28\29\20const
+7265:skgpu::ganesh::AALinearizingConvexPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7266:skgpu::ganesh::AALinearizingConvexPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7267:skgpu::ganesh::AALinearizingConvexPathRenderer::name\28\29\20const
+7268:skgpu::ganesh::AAHairLinePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7269:skgpu::ganesh::AAHairLinePathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7270:skgpu::ganesh::AAHairLinePathRenderer::name\28\29\20const
+7271:skgpu::ganesh::AAConvexPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+7272:skgpu::ganesh::AAConvexPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+7273:skgpu::ganesh::AAConvexPathRenderer::name\28\29\20const
+7274:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\28\29.1
+7275:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::rowBytes\28int\29\20const
+7276:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::data\28int\29\20const
+7277:skgpu::StringKeyBuilder::~StringKeyBuilder\28\29.1
+7278:skgpu::StringKeyBuilder::~StringKeyBuilder\28\29
+7279:skgpu::StringKeyBuilder::appendComment\28char\20const*\29
+7280:skgpu::StringKeyBuilder::addBits\28unsigned\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+7281:skgpu::RectanizerSkyline::~RectanizerSkyline\28\29.1
+7282:skgpu::RectanizerSkyline::~RectanizerSkyline\28\29
+7283:skgpu::RectanizerSkyline::reset\28\29
+7284:skgpu::RectanizerSkyline::percentFull\28\29\20const
+7285:skgpu::RectanizerPow2::reset\28\29
+7286:skgpu::RectanizerPow2::percentFull\28\29\20const
+7287:skgpu::RectanizerPow2::addRect\28int\2c\20int\2c\20SkIPoint16*\29
+7288:skgpu::Plot::~Plot\28\29.1
+7289:skgpu::Plot::~Plot\28\29
+7290:skgpu::KeyBuilder::~KeyBuilder\28\29
+7291:skgpu::KeyBuilder::addBits\28unsigned\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+7292:skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29
+7293:sk_write_fn\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20long\29
+7294:sk_sp<SkColorSpace>*\20emscripten::internal::MemberAccess<SimpleImageInfo\2c\20sk_sp<SkColorSpace>>::getWire<SimpleImageInfo>\28sk_sp<SkColorSpace>\20SimpleImageInfo::*\20const&\2c\20SimpleImageInfo\20const&\29
+7295:sk_read_user_chunk\28png_struct_def*\2c\20png_unknown_chunk_t*\29
+7296:sk_mmap_releaseproc\28void\20const*\2c\20void*\29
+7297:sk_ft_stream_io\28FT_StreamRec_*\2c\20unsigned\20long\2c\20unsigned\20char*\2c\20unsigned\20long\29
+7298:sk_ft_realloc\28FT_MemoryRec_*\2c\20long\2c\20long\2c\20void*\29
+7299:sk_ft_free\28FT_MemoryRec_*\2c\20void*\29
+7300:sk_ft_alloc\28FT_MemoryRec_*\2c\20long\29
+7301:sk_dataref_releaseproc\28void\20const*\2c\20void*\29
+7302:sfnt_table_info
+7303:sfnt_stream_close
+7304:sfnt_load_face
+7305:sfnt_is_postscript
+7306:sfnt_is_alphanumeric
+7307:sfnt_init_face
+7308:sfnt_get_ps_name
+7309:sfnt_get_name_index
+7310:sfnt_get_name_id
+7311:sfnt_get_interface
+7312:sfnt_get_glyph_name
+7313:sfnt_get_charset_id
+7314:sfnt_done_face
+7315:setup_syllables_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7316:setup_syllables_myanmar\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7317:setup_syllables_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7318:setup_syllables_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7319:setup_masks_use\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7320:setup_masks_myanmar\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7321:setup_masks_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7322:setup_masks_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7323:setup_masks_hangul\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7324:setup_masks_arabic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7325:service_cleanup\28\29
+7326:sep_upsample
+7327:self_destruct
+7328:scriptGetMaxValue\28IntProperty\20const&\2c\20UProperty\29
+7329:save_marker
+7330:sample8\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7331:sample6\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7332:sample4\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7333:sample2\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7334:sample1\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7335:rgb_rgb_convert
+7336:rgb_rgb565_convert
+7337:rgb_rgb565D_convert
+7338:rgb_gray_convert
+7339:reverse_hit_compare_y\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+7340:reverse_hit_compare_x\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+7341:reset_marker_reader
+7342:reset_input_controller
+7343:reset_error_mgr
+7344:request_virt_sarray
+7345:request_virt_barray
+7346:reorder_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7347:reorder_myanmar\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7348:reorder_marks_hebrew\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\29
+7349:reorder_marks_arabic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\29
+7350:reorder_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7351:release_data\28void*\2c\20void*\29
+7352:record_stch\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7353:record_rphf_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7354:record_pref_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7355:realize_virt_arrays
+7356:read_restart_marker
+7357:read_markers
+7358:read_data_from_FT_Stream
+7359:rbbi_cleanup_73
+7360:quantize_ord_dither
+7361:quantize_fs_dither
+7362:quantize3_ord_dither
+7363:putil_cleanup\28\29
+7364:psnames_get_service
+7365:pshinter_get_t2_funcs
+7366:pshinter_get_t1_funcs
+7367:pshinter_get_globals_funcs
+7368:psh_globals_new
+7369:psh_globals_destroy
+7370:psaux_get_glyph_name
+7371:ps_table_release
+7372:ps_table_new
+7373:ps_table_done
+7374:ps_table_add
+7375:ps_property_set
+7376:ps_property_get
+7377:ps_parser_to_token_array
+7378:ps_parser_to_int
+7379:ps_parser_to_fixed_array
+7380:ps_parser_to_fixed
+7381:ps_parser_to_coord_array
+7382:ps_parser_to_bytes
+7383:ps_parser_skip_spaces
+7384:ps_parser_load_field_table
+7385:ps_parser_init
+7386:ps_hints_t2mask
+7387:ps_hints_t2counter
+7388:ps_hints_t1stem3
+7389:ps_hints_t1reset
+7390:ps_hints_close
+7391:ps_hints_apply
+7392:ps_hinter_init
+7393:ps_hinter_done
+7394:ps_get_standard_strings
+7395:ps_get_macintosh_name
+7396:ps_decoder_init
+7397:ps_builder_init
+7398:progress_monitor\28jpeg_common_struct*\29
+7399:process_data_simple_main
+7400:process_data_crank_post
+7401:process_data_context_main
+7402:prescan_quantize
+7403:preprocess_text_use\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7404:preprocess_text_thai\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7405:preprocess_text_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7406:preprocess_text_hangul\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7407:prepare_for_output_pass
+7408:premultiply_data
+7409:premul_rgb\28SkRGBA4f<\28SkAlphaType\292>\29
+7410:premul_polar\28SkRGBA4f<\28SkAlphaType\292>\29
+7411:postprocess_glyphs_arabic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+7412:post_process_prepass
+7413:post_process_2pass
+7414:post_process_1pass
+7415:portable::xy_to_unit_angle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7416:portable::xy_to_radius\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7417:portable::xy_to_2pt_conical_well_behaved\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7418:portable::xy_to_2pt_conical_strip\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7419:portable::xy_to_2pt_conical_smaller\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7420:portable::xy_to_2pt_conical_greater\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7421:portable::xy_to_2pt_conical_focal_on_circle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7422:portable::xor_\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7423:portable::white_color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7424:portable::unpremul_polar\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7425:portable::unpremul\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7426:portable::trace_var\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7427:portable::trace_scope\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7428:portable::trace_line\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7429:portable::trace_exit\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7430:portable::trace_enter\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7431:portable::tan_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7432:portable::swizzle_copy_to_indirect_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7433:portable::swizzle_copy_slot_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7434:portable::swizzle_copy_4_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7435:portable::swizzle_copy_3_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7436:portable::swizzle_copy_2_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7437:portable::swizzle_4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7438:portable::swizzle_3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7439:portable::swizzle_2\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7440:portable::swizzle_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7441:portable::swizzle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7442:portable::swap_src_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7443:portable::swap_rb_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7444:portable::swap_rb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7445:portable::sub_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7446:portable::sub_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7447:portable::sub_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7448:portable::sub_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7449:portable::sub_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7450:portable::sub_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7451:portable::sub_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7452:portable::sub_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7453:portable::sub_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7454:portable::sub_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7455:portable::store_u16_be\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7456:portable::store_src_rg\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7457:portable::store_src_a\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7458:portable::store_src\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7459:portable::store_rgf32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7460:portable::store_rgf16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7461:portable::store_rg88\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7462:portable::store_rg1616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7463:portable::store_return_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7464:portable::store_r8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7465:portable::store_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7466:portable::store_f32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7467:portable::store_f16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7468:portable::store_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7469:portable::store_device_xy01\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7470:portable::store_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7471:portable::store_af16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7472:portable::store_a8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7473:portable::store_a16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7474:portable::store_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7475:portable::store_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7476:portable::store_4444\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7477:portable::store_16161616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7478:portable::store_10x6\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7479:portable::store_1010102_xr\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7480:portable::store_1010102\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7481:portable::start_pipeline\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkRasterPipelineStage*\29
+7482:portable::stack_rewind\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7483:portable::stack_checkpoint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7484:portable::srcover_rgba_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7485:portable::srcover\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7486:portable::srcout\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7487:portable::srcin\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7488:portable::srcatop\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7489:portable::sqrt_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7490:portable::splat_4_constants\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7491:portable::splat_3_constants\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7492:portable::splat_2_constants\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7493:portable::softlight\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7494:portable::smoothstep_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7495:portable::sin_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7496:portable::shuffle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7497:portable::set_base_pointer\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7498:portable::seed_shader\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7499:portable::screen\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7500:portable::scale_u8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7501:portable::scale_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7502:portable::saturation\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7503:portable::rgb_to_hsl\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7504:portable::repeat_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7505:portable::repeat_x_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7506:portable::repeat_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7507:portable::refract_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7508:portable::reenable_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7509:portable::rect_memset64\28unsigned\20long\20long*\2c\20unsigned\20long\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+7510:portable::rect_memset32\28unsigned\20int*\2c\20unsigned\20int\2c\20int\2c\20unsigned\20long\2c\20int\29
+7511:portable::rect_memset16\28unsigned\20short*\2c\20unsigned\20short\2c\20int\2c\20unsigned\20long\2c\20int\29
+7512:portable::premul_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7513:portable::premul\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7514:portable::pow_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7515:portable::plus_\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7516:portable::parametric\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7517:portable::overlay\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7518:portable::negate_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7519:portable::multiply\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7520:portable::mul_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7521:portable::mul_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7522:portable::mul_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7523:portable::mul_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7524:portable::mul_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7525:portable::mul_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7526:portable::mul_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7527:portable::mul_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7528:portable::mul_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7529:portable::mul_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7530:portable::mul_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7531:portable::mul_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7532:portable::move_src_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7533:portable::move_dst_src\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7534:portable::modulate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7535:portable::mod_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7536:portable::mod_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7537:portable::mod_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7538:portable::mod_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7539:portable::mod_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7540:portable::mix_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7541:portable::mix_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7542:portable::mix_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7543:portable::mix_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7544:portable::mix_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7545:portable::mix_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7546:portable::mix_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7547:portable::mix_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7548:portable::mix_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7549:portable::mix_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7550:portable::mirror_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7551:portable::mirror_x_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7552:portable::mirror_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7553:portable::mipmap_linear_update\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7554:portable::mipmap_linear_init\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7555:portable::mipmap_linear_finish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7556:portable::min_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7557:portable::min_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7558:portable::min_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7559:portable::min_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7560:portable::min_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7561:portable::min_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7562:portable::min_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7563:portable::min_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7564:portable::min_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7565:portable::min_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7566:portable::min_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7567:portable::min_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7568:portable::min_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7569:portable::min_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7570:portable::min_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7571:portable::min_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7572:portable::merge_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7573:portable::merge_inv_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7574:portable::merge_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7575:portable::memset32\28unsigned\20int*\2c\20unsigned\20int\2c\20int\29
+7576:portable::memset16\28unsigned\20short*\2c\20unsigned\20short\2c\20int\29
+7577:portable::max_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7578:portable::max_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7579:portable::max_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7580:portable::max_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7581:portable::max_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7582:portable::max_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7583:portable::max_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7584:portable::max_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7585:portable::max_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7586:portable::max_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7587:portable::max_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7588:portable::max_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7589:portable::max_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7590:portable::max_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7591:portable::max_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7592:portable::max_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7593:portable::matrix_translate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7594:portable::matrix_scale_translate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7595:portable::matrix_perspective\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7596:portable::matrix_multiply_4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7597:portable::matrix_multiply_3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7598:portable::matrix_multiply_2\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7599:portable::matrix_4x5\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7600:portable::matrix_4x3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7601:portable::matrix_3x4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7602:portable::matrix_3x3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7603:portable::matrix_2x3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7604:portable::mask_off_return_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7605:portable::mask_off_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7606:portable::mask_2pt_conical_nan\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7607:portable::mask_2pt_conical_degenerates\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7608:portable::luminosity\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7609:portable::log_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7610:portable::log2_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7611:portable::load_src_rg\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7612:portable::load_rgf32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7613:portable::load_rgf16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7614:portable::load_rgf16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7615:portable::load_rg88_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7616:portable::load_rg88\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7617:portable::load_rg1616_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7618:portable::load_rg1616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7619:portable::load_return_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7620:portable::load_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7621:portable::load_f32_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7622:portable::load_f32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7623:portable::load_f16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7624:portable::load_f16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7625:portable::load_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7626:portable::load_af16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7627:portable::load_af16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7628:portable::load_a8_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7629:portable::load_a8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7630:portable::load_a16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7631:portable::load_a16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7632:portable::load_8888_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7633:portable::load_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7634:portable::load_565_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7635:portable::load_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7636:portable::load_4444_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7637:portable::load_4444\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7638:portable::load_16161616_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7639:portable::load_16161616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7640:portable::load_10x6_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7641:portable::load_10x6\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7642:portable::load_1010102_xr_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7643:portable::load_1010102_xr\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7644:portable::load_1010102_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7645:portable::load_1010102\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7646:portable::lighten\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7647:portable::lerp_u8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7648:portable::lerp_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7649:portable::just_return\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7650:portable::jump\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7651:portable::invsqrt_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7652:portable::invsqrt_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7653:portable::invsqrt_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7654:portable::invsqrt_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7655:portable::inverted_CMYK_to_RGB1\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7656:portable::inverted_CMYK_to_BGR1\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7657:portable::inverse_mat4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7658:portable::inverse_mat3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7659:portable::inverse_mat2\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7660:portable::init_lane_masks\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7661:portable::hue\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7662:portable::hsl_to_rgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7663:portable::hardlight\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7664:portable::gray_to_RGB1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7665:portable::grayA_to_rgbA\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7666:portable::grayA_to_RGBA\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7667:portable::gradient\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7668:portable::gauss_a_to_rgba\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7669:portable::gather_rgf16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7670:portable::gather_rg88\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7671:portable::gather_rg1616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7672:portable::gather_f32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7673:portable::gather_f16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7674:portable::gather_af16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7675:portable::gather_a8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7676:portable::gather_a16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7677:portable::gather_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7678:portable::gather_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7679:portable::gather_4444\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7680:portable::gather_16161616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7681:portable::gather_10x6\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7682:portable::gather_1010102_xr\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7683:portable::gather_1010102\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7684:portable::gamma_\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7685:portable::force_opaque_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7686:portable::force_opaque\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7687:portable::floor_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7688:portable::floor_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7689:portable::floor_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7690:portable::floor_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7691:portable::exp_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7692:portable::exp2_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7693:portable::exclusion\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7694:portable::exchange_src\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7695:portable::evenly_spaced_gradient\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7696:portable::evenly_spaced_2_stop_gradient\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7697:portable::emboss\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7698:portable::dstover\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7699:portable::dstout\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7700:portable::dstin\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7701:portable::dstatop\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7702:portable::dot_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7703:portable::dot_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7704:portable::dot_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7705:portable::div_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7706:portable::div_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7707:portable::div_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7708:portable::div_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7709:portable::div_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7710:portable::div_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7711:portable::div_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7712:portable::div_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7713:portable::div_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7714:portable::div_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7715:portable::div_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7716:portable::div_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7717:portable::div_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7718:portable::div_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7719:portable::div_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7720:portable::dither\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7721:portable::difference\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7722:portable::decal_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7723:portable::decal_x_and_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7724:portable::decal_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7725:portable::darken\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7726:portable::css_oklab_to_linear_srgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7727:portable::css_lab_to_xyz\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7728:portable::css_hwb_to_srgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7729:portable::css_hsl_to_srgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7730:portable::css_hcl_to_lab\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7731:portable::cos_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7732:portable::copy_uniform\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7733:portable::copy_to_indirect_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7734:portable::copy_slot_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7735:portable::copy_slot_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7736:portable::copy_immutable_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7737:portable::copy_constant\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7738:portable::copy_4_uniforms\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7739:portable::copy_4_slots_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7740:portable::copy_4_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7741:portable::copy_4_immutables_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7742:portable::copy_3_uniforms\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7743:portable::copy_3_slots_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7744:portable::copy_3_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7745:portable::copy_3_immutables_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7746:portable::copy_2_uniforms\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7747:portable::copy_2_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7748:portable::continue_op\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7749:portable::colordodge\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7750:portable::colorburn\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7751:portable::color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7752:portable::cmpne_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7753:portable::cmpne_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7754:portable::cmpne_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7755:portable::cmpne_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7756:portable::cmpne_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7757:portable::cmpne_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7758:portable::cmpne_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7759:portable::cmpne_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7760:portable::cmpne_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7761:portable::cmpne_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7762:portable::cmpne_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7763:portable::cmpne_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7764:portable::cmplt_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7765:portable::cmplt_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7766:portable::cmplt_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7767:portable::cmplt_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7768:portable::cmplt_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7769:portable::cmplt_imm_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7770:portable::cmplt_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7771:portable::cmplt_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7772:portable::cmplt_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7773:portable::cmplt_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7774:portable::cmplt_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7775:portable::cmplt_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7776:portable::cmplt_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7777:portable::cmplt_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7778:portable::cmplt_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7779:portable::cmplt_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7780:portable::cmplt_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7781:portable::cmplt_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7782:portable::cmple_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7783:portable::cmple_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7784:portable::cmple_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7785:portable::cmple_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7786:portable::cmple_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7787:portable::cmple_imm_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7788:portable::cmple_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7789:portable::cmple_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7790:portable::cmple_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7791:portable::cmple_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7792:portable::cmple_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7793:portable::cmple_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7794:portable::cmple_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7795:portable::cmple_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7796:portable::cmple_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7797:portable::cmple_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7798:portable::cmple_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7799:portable::cmple_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7800:portable::cmpeq_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7801:portable::cmpeq_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7802:portable::cmpeq_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7803:portable::cmpeq_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7804:portable::cmpeq_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7805:portable::cmpeq_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7806:portable::cmpeq_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7807:portable::cmpeq_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7808:portable::cmpeq_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7809:portable::cmpeq_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7810:portable::cmpeq_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7811:portable::cmpeq_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7812:portable::clear\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7813:portable::clamp_x_and_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7814:portable::clamp_x_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7815:portable::clamp_gamut\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7816:portable::clamp_01\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7817:portable::ceil_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7818:portable::ceil_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7819:portable::ceil_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7820:portable::ceil_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7821:portable::cast_to_uint_from_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7822:portable::cast_to_uint_from_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7823:portable::cast_to_uint_from_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7824:portable::cast_to_uint_from_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7825:portable::cast_to_int_from_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7826:portable::cast_to_int_from_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7827:portable::cast_to_int_from_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7828:portable::cast_to_int_from_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7829:portable::cast_to_float_from_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7830:portable::cast_to_float_from_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7831:portable::cast_to_float_from_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7832:portable::cast_to_float_from_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7833:portable::cast_to_float_from_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7834:portable::cast_to_float_from_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7835:portable::cast_to_float_from_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7836:portable::cast_to_float_from_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7837:portable::case_op\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7838:portable::callback\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7839:portable::byte_tables\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7840:portable::bt709_luminance_or_luma_to_rgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7841:portable::bt709_luminance_or_luma_to_alpha\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7842:portable::branch_if_no_lanes_active\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7843:portable::branch_if_no_active_lanes_eq\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7844:portable::blit_row_s32a_opaque\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+7845:portable::black_color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7846:portable::bitwise_xor_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7847:portable::bitwise_xor_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7848:portable::bitwise_xor_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7849:portable::bitwise_xor_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7850:portable::bitwise_xor_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7851:portable::bitwise_xor_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7852:portable::bitwise_or_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7853:portable::bitwise_or_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7854:portable::bitwise_or_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7855:portable::bitwise_or_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7856:portable::bitwise_or_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7857:portable::bitwise_and_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7858:portable::bitwise_and_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7859:portable::bitwise_and_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7860:portable::bitwise_and_imm_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7861:portable::bitwise_and_imm_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7862:portable::bitwise_and_imm_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7863:portable::bitwise_and_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7864:portable::bitwise_and_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7865:portable::bitwise_and_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7866:portable::bilinear_setup\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7867:portable::bilinear_py\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7868:portable::bilinear_px\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7869:portable::bilinear_ny\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7870:portable::bilinear_nx\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7871:portable::bilerp_clamp_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7872:portable::bicubic_setup\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7873:portable::bicubic_p3y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7874:portable::bicubic_p3x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7875:portable::bicubic_p1y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7876:portable::bicubic_p1x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7877:portable::bicubic_n3y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7878:portable::bicubic_n3x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7879:portable::bicubic_n1y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7880:portable::bicubic_n1x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7881:portable::bicubic_clamp_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7882:portable::atan_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7883:portable::atan2_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7884:portable::asin_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7885:portable::alter_2pt_conical_unswap\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7886:portable::alter_2pt_conical_compensate_focal\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7887:portable::alpha_to_red_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7888:portable::alpha_to_red\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7889:portable::alpha_to_gray_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7890:portable::alpha_to_gray\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7891:portable::add_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7892:portable::add_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7893:portable::add_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7894:portable::add_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7895:portable::add_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7896:portable::add_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7897:portable::add_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7898:portable::add_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7899:portable::add_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7900:portable::add_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7901:portable::add_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7902:portable::add_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7903:portable::acos_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7904:portable::accumulate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7905:portable::abs_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7906:portable::abs_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7907:portable::abs_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7908:portable::abs_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7909:portable::RGB_to_RGB1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7910:portable::RGB_to_BGR1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7911:portable::RGBA_to_rgbA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7912:portable::RGBA_to_bgrA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7913:portable::RGBA_to_BGRA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7914:portable::PQish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7915:portable::HLGish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7916:portable::HLGinvish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7917:pop_arg_long_double
+7918:pointerTOCLookupFn\28UDataMemory\20const*\2c\20char\20const*\2c\20int*\2c\20UErrorCode*\29
+7919:png_read_filter_row_up
+7920:png_read_filter_row_sub
+7921:png_read_filter_row_paeth_multibyte_pixel
+7922:png_read_filter_row_paeth_1byte_pixel
+7923:png_read_filter_row_avg
+7924:pass2_no_dither
+7925:pass2_fs_dither
+7926:override_features_khmer\28hb_ot_shape_planner_t*\29
+7927:override_features_indic\28hb_ot_shape_planner_t*\29
+7928:override_features_hangul\28hb_ot_shape_planner_t*\29
+7929:output_message\28jpeg_common_struct*\29
+7930:output_message
+7931:offsetTOCLookupFn\28UDataMemory\20const*\2c\20char\20const*\2c\20int*\2c\20UErrorCode*\29
+7932:null_convert
+7933:noop_upsample
+7934:non-virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29.1
+7935:non-virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29
+7936:non-virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.1
+7937:non-virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29
+7938:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.3
+7939:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.2
+7940:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.1
+7941:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29
+7942:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::findAlgorithm\28SkSize\2c\20SkTileMode\2c\20SkColorType\29\20const
+7943:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::blur\28SkSize\2c\20sk_sp<SkSpecialImage>\2c\20SkIRect\20const&\2c\20SkTileMode\2c\20SkIRect\20const&\29\20const
+7944:non-virtual\20thunk\20to\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29.1
+7945:non-virtual\20thunk\20to\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29
+7946:non-virtual\20thunk\20to\20skgpu::ganesh::SmallPathAtlasMgr::evict\28skgpu::PlotLocator\29
+7947:non-virtual\20thunk\20to\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29.1
+7948:non-virtual\20thunk\20to\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29
+7949:non-virtual\20thunk\20to\20skgpu::ganesh::AtlasPathRenderer::preFlush\28GrOnFlushResourceProvider*\29
+7950:non-virtual\20thunk\20to\20icu_73::UnicodeSet::~UnicodeSet\28\29.1
+7951:non-virtual\20thunk\20to\20icu_73::UnicodeSet::~UnicodeSet\28\29
+7952:non-virtual\20thunk\20to\20icu_73::UnicodeSet::toPattern\28icu_73::UnicodeString&\2c\20signed\20char\29\20const
+7953:non-virtual\20thunk\20to\20icu_73::UnicodeSet::matches\28icu_73::Replaceable\20const&\2c\20int&\2c\20int\2c\20signed\20char\29
+7954:non-virtual\20thunk\20to\20icu_73::UnicodeSet::matchesIndexValue\28unsigned\20char\29\20const
+7955:non-virtual\20thunk\20to\20icu_73::UnicodeSet::addMatchSetTo\28icu_73::UnicodeSet&\29\20const
+7956:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::vertexStride\28SkMatrix\20const&\29\20const
+7957:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+7958:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+7959:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::instanceFlags\28\29\20const
+7960:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+7961:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29.1
+7962:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29
+7963:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+7964:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+7965:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::glyphCount\28\29\20const
+7966:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+7967:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::vertexStride\28SkMatrix\20const&\29\20const
+7968:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+7969:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+7970:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::instanceFlags\28\29\20const
+7971:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+7972:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29.1
+7973:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29
+7974:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+7975:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::instantiate\28GrResourceProvider*\29
+7976:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+7977:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::callbackDesc\28\29\20const
+7978:non-virtual\20thunk\20to\20GrOpFlushState::~GrOpFlushState\28\29.1
+7979:non-virtual\20thunk\20to\20GrOpFlushState::~GrOpFlushState\28\29
+7980:non-virtual\20thunk\20to\20GrOpFlushState::writeView\28\29\20const
+7981:non-virtual\20thunk\20to\20GrOpFlushState::usesMSAASurface\28\29\20const
+7982:non-virtual\20thunk\20to\20GrOpFlushState::threadSafeCache\28\29\20const
+7983:non-virtual\20thunk\20to\20GrOpFlushState::strikeCache\28\29\20const
+7984:non-virtual\20thunk\20to\20GrOpFlushState::smallPathAtlasManager\28\29\20const
+7985:non-virtual\20thunk\20to\20GrOpFlushState::sampledProxyArray\28\29
+7986:non-virtual\20thunk\20to\20GrOpFlushState::rtProxy\28\29\20const
+7987:non-virtual\20thunk\20to\20GrOpFlushState::resourceProvider\28\29\20const
+7988:non-virtual\20thunk\20to\20GrOpFlushState::renderPassBarriers\28\29\20const
+7989:non-virtual\20thunk\20to\20GrOpFlushState::recordDraw\28GrGeometryProcessor\20const*\2c\20GrSimpleMesh\20const*\2c\20int\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPrimitiveType\29
+7990:non-virtual\20thunk\20to\20GrOpFlushState::putBackVertices\28int\2c\20unsigned\20long\29
+7991:non-virtual\20thunk\20to\20GrOpFlushState::putBackIndirectDraws\28int\29
+7992:non-virtual\20thunk\20to\20GrOpFlushState::putBackIndices\28int\29
+7993:non-virtual\20thunk\20to\20GrOpFlushState::putBackIndexedIndirectDraws\28int\29
+7994:non-virtual\20thunk\20to\20GrOpFlushState::makeVertexSpace\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+7995:non-virtual\20thunk\20to\20GrOpFlushState::makeVertexSpaceAtLeast\28unsigned\20long\2c\20int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+7996:non-virtual\20thunk\20to\20GrOpFlushState::makeIndexSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+7997:non-virtual\20thunk\20to\20GrOpFlushState::makeIndexSpaceAtLeast\28int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+7998:non-virtual\20thunk\20to\20GrOpFlushState::makeDrawIndirectSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+7999:non-virtual\20thunk\20to\20GrOpFlushState::makeDrawIndexedIndirectSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+8000:non-virtual\20thunk\20to\20GrOpFlushState::dstProxyView\28\29\20const
+8001:non-virtual\20thunk\20to\20GrOpFlushState::detachAppliedClip\28\29
+8002:non-virtual\20thunk\20to\20GrOpFlushState::deferredUploadTarget\28\29
+8003:non-virtual\20thunk\20to\20GrOpFlushState::colorLoadOp\28\29\20const
+8004:non-virtual\20thunk\20to\20GrOpFlushState::caps\28\29\20const
+8005:non-virtual\20thunk\20to\20GrOpFlushState::atlasManager\28\29\20const
+8006:non-virtual\20thunk\20to\20GrOpFlushState::appliedClip\28\29\20const
+8007:non-virtual\20thunk\20to\20GrGpuBuffer::~GrGpuBuffer\28\29
+8008:non-virtual\20thunk\20to\20GrGpuBuffer::unref\28\29\20const
+8009:non-virtual\20thunk\20to\20GrGpuBuffer::ref\28\29\20const
+8010:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29.1
+8011:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29
+8012:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onSetLabel\28\29
+8013:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onRelease\28\29
+8014:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onGpuMemorySize\28\29\20const
+8015:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onAbandon\28\29
+8016:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+8017:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::backendFormat\28\29\20const
+8018:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+8019:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+8020:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::hasSecondaryOutput\28\29\20const
+8021:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\28skgpu::BlendEquation\29
+8022:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::dstColor\28\29
+8023:non-virtual\20thunk\20to\20GrGLBuffer::~GrGLBuffer\28\29.1
+8024:non-virtual\20thunk\20to\20GrGLBuffer::~GrGLBuffer\28\29
+8025:new_color_map_2_quant
+8026:new_color_map_1_quant
+8027:merged_2v_upsample
+8028:merged_1v_upsample
+8029:locale_cleanup\28\29
+8030:lin_srgb_to_oklab\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+8031:lin_srgb_to_okhcl\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+8032:legalstub$dynCall_vijjjii
+8033:legalstub$dynCall_vijiii
+8034:legalstub$dynCall_viji
+8035:legalstub$dynCall_vij
+8036:legalstub$dynCall_viijii
+8037:legalstub$dynCall_viij
+8038:legalstub$dynCall_viiij
+8039:legalstub$dynCall_viiiiij
+8040:legalstub$dynCall_jiji
+8041:legalstub$dynCall_jiiiiji
+8042:legalstub$dynCall_jiiiiii
+8043:legalstub$dynCall_jii
+8044:legalstub$dynCall_ji
+8045:legalstub$dynCall_iijjiii
+8046:legalstub$dynCall_iijj
+8047:legalstub$dynCall_iiji
+8048:legalstub$dynCall_iij
+8049:legalstub$dynCall_iiiji
+8050:legalstub$dynCall_iiij
+8051:legalstub$dynCall_iiiij
+8052:legalstub$dynCall_iiiiijj
+8053:legalstub$dynCall_iiiiij
+8054:legalstub$dynCall_iiiiiijj
+8055:legalfunc$glWaitSync
+8056:legalfunc$glClientWaitSync
+8057:lcd_to_a8\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29
+8058:layoutGetMaxValue\28IntProperty\20const&\2c\20UProperty\29
+8059:jpeg_start_decompress
+8060:jpeg_skip_scanlines
+8061:jpeg_save_markers
+8062:jpeg_resync_to_restart
+8063:jpeg_read_scanlines
+8064:jpeg_read_raw_data
+8065:jpeg_read_header
+8066:jpeg_idct_islow
+8067:jpeg_idct_ifast
+8068:jpeg_idct_float
+8069:jpeg_idct_9x9
+8070:jpeg_idct_7x7
+8071:jpeg_idct_6x6
+8072:jpeg_idct_5x5
+8073:jpeg_idct_4x4
+8074:jpeg_idct_3x3
+8075:jpeg_idct_2x2
+8076:jpeg_idct_1x1
+8077:jpeg_idct_16x16
+8078:jpeg_idct_15x15
+8079:jpeg_idct_14x14
+8080:jpeg_idct_13x13
+8081:jpeg_idct_12x12
+8082:jpeg_idct_11x11
+8083:jpeg_idct_10x10
+8084:jpeg_crop_scanline
+8085:is_deleted_glyph\28hb_glyph_info_t\20const*\29
+8086:isRegionalIndicator\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8087:isPOSIX_xdigit\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8088:isPOSIX_print\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8089:isPOSIX_graph\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8090:isPOSIX_blank\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8091:isPOSIX_alnum\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8092:isNormInert\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8093:isMirrored\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8094:isJoinControl\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8095:isCanonSegmentStarter\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8096:isBidiControl\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8097:isAcceptable\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29
+8098:int_upsample
+8099:initial_reordering_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+8100:icu_73::uprv_normalizer2_cleanup\28\29
+8101:icu_73::uprv_loaded_normalizer2_cleanup\28\29
+8102:icu_73::unames_cleanup\28\29
+8103:icu_73::umtx_init\28\29
+8104:icu_73::umtx_cleanup\28\29
+8105:icu_73::sortComparator\28void\20const*\2c\20void\20const*\2c\20void\20const*\29
+8106:icu_73::segmentStarterMapper\28void\20const*\2c\20unsigned\20int\29
+8107:icu_73::isAcceptable\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29
+8108:icu_73::compareElementStrings\28void\20const*\2c\20void\20const*\2c\20void\20const*\29
+8109:icu_73::cacheDeleter\28void*\29
+8110:icu_73::\28anonymous\20namespace\29::versionFilter\28int\2c\20void*\29
+8111:icu_73::\28anonymous\20namespace\29::utf16_caseContextIterator\28void*\2c\20signed\20char\29
+8112:icu_73::\28anonymous\20namespace\29::numericValueFilter\28int\2c\20void*\29
+8113:icu_73::\28anonymous\20namespace\29::intPropertyFilter\28int\2c\20void*\29
+8114:icu_73::\28anonymous\20namespace\29::emojiprops_cleanup\28\29
+8115:icu_73::\28anonymous\20namespace\29::cleanupKnownCanonicalized\28\29
+8116:icu_73::\28anonymous\20namespace\29::AliasReplacer::replace\28icu_73::Locale\20const&\2c\20icu_73::CharString&\2c\20UErrorCode&\29::$_1::__invoke\28void*\29
+8117:icu_73::\28anonymous\20namespace\29::AliasData::cleanup\28\29
+8118:icu_73::UnicodeString::~UnicodeString\28\29.1
+8119:icu_73::UnicodeString::handleReplaceBetween\28int\2c\20int\2c\20icu_73::UnicodeString\20const&\29
+8120:icu_73::UnicodeString::getLength\28\29\20const
+8121:icu_73::UnicodeString::getDynamicClassID\28\29\20const
+8122:icu_73::UnicodeString::getCharAt\28int\29\20const
+8123:icu_73::UnicodeString::extractBetween\28int\2c\20int\2c\20icu_73::UnicodeString&\29\20const
+8124:icu_73::UnicodeString::copy\28int\2c\20int\2c\20int\29
+8125:icu_73::UnicodeString::clone\28\29\20const
+8126:icu_73::UnicodeSet::~UnicodeSet\28\29.1
+8127:icu_73::UnicodeSet::toPattern\28icu_73::UnicodeString&\2c\20signed\20char\29\20const
+8128:icu_73::UnicodeSet::size\28\29\20const
+8129:icu_73::UnicodeSet::retain\28int\2c\20int\29
+8130:icu_73::UnicodeSet::operator==\28icu_73::UnicodeSet\20const&\29\20const
+8131:icu_73::UnicodeSet::isEmpty\28\29\20const
+8132:icu_73::UnicodeSet::hashCode\28\29\20const
+8133:icu_73::UnicodeSet::getDynamicClassID\28\29\20const
+8134:icu_73::UnicodeSet::contains\28int\2c\20int\29\20const
+8135:icu_73::UnicodeSet::containsAll\28icu_73::UnicodeSet\20const&\29\20const
+8136:icu_73::UnicodeSet::complement\28int\2c\20int\29
+8137:icu_73::UnicodeSet::complementAll\28icu_73::UnicodeSet\20const&\29
+8138:icu_73::UnicodeSet::addMatchSetTo\28icu_73::UnicodeSet&\29\20const
+8139:icu_73::UnhandledEngine::~UnhandledEngine\28\29.1
+8140:icu_73::UnhandledEngine::~UnhandledEngine\28\29
+8141:icu_73::UnhandledEngine::handles\28int\29\20const
+8142:icu_73::UnhandledEngine::handleCharacter\28int\29
+8143:icu_73::UnhandledEngine::findBreaks\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+8144:icu_73::UVector::~UVector\28\29.1
+8145:icu_73::UVector::getDynamicClassID\28\29\20const
+8146:icu_73::UVector32::~UVector32\28\29.1
+8147:icu_73::UVector32::getDynamicClassID\28\29\20const
+8148:icu_73::UStack::getDynamicClassID\28\29\20const
+8149:icu_73::UCharsTrieBuilder::~UCharsTrieBuilder\28\29.1
+8150:icu_73::UCharsTrieBuilder::~UCharsTrieBuilder\28\29
+8151:icu_73::UCharsTrieBuilder::write\28int\29
+8152:icu_73::UCharsTrieBuilder::writeValueAndType\28signed\20char\2c\20int\2c\20int\29
+8153:icu_73::UCharsTrieBuilder::writeValueAndFinal\28int\2c\20signed\20char\29
+8154:icu_73::UCharsTrieBuilder::writeElementUnits\28int\2c\20int\2c\20int\29
+8155:icu_73::UCharsTrieBuilder::writeDeltaTo\28int\29
+8156:icu_73::UCharsTrieBuilder::skipElementsBySomeUnits\28int\2c\20int\2c\20int\29\20const
+8157:icu_73::UCharsTrieBuilder::indexOfElementWithNextUnit\28int\2c\20int\2c\20char16_t\29\20const
+8158:icu_73::UCharsTrieBuilder::getMinLinearMatch\28\29\20const
+8159:icu_73::UCharsTrieBuilder::getLimitOfLinearMatch\28int\2c\20int\2c\20int\29\20const
+8160:icu_73::UCharsTrieBuilder::getElementValue\28int\29\20const
+8161:icu_73::UCharsTrieBuilder::getElementUnit\28int\2c\20int\29\20const
+8162:icu_73::UCharsTrieBuilder::getElementStringLength\28int\29\20const
+8163:icu_73::UCharsTrieBuilder::createLinearMatchNode\28int\2c\20int\2c\20int\2c\20icu_73::StringTrieBuilder::Node*\29\20const
+8164:icu_73::UCharsTrieBuilder::countElementUnits\28int\2c\20int\2c\20int\29\20const
+8165:icu_73::UCharsTrieBuilder::UCTLinearMatchNode::write\28icu_73::StringTrieBuilder&\29
+8166:icu_73::UCharsTrieBuilder::UCTLinearMatchNode::operator==\28icu_73::StringTrieBuilder::Node\20const&\29\20const
+8167:icu_73::UCharsDictionaryMatcher::~UCharsDictionaryMatcher\28\29.1
+8168:icu_73::UCharsDictionaryMatcher::~UCharsDictionaryMatcher\28\29
+8169:icu_73::UCharsDictionaryMatcher::matches\28UText*\2c\20int\2c\20int\2c\20int*\2c\20int*\2c\20int*\2c\20int*\29\20const
+8170:icu_73::UCharCharacterIterator::setIndex\28int\29
+8171:icu_73::UCharCharacterIterator::setIndex32\28int\29
+8172:icu_73::UCharCharacterIterator::previous\28\29
+8173:icu_73::UCharCharacterIterator::previous32\28\29
+8174:icu_73::UCharCharacterIterator::operator==\28icu_73::ForwardCharacterIterator\20const&\29\20const
+8175:icu_73::UCharCharacterIterator::next\28\29
+8176:icu_73::UCharCharacterIterator::nextPostInc\28\29
+8177:icu_73::UCharCharacterIterator::next32\28\29
+8178:icu_73::UCharCharacterIterator::next32PostInc\28\29
+8179:icu_73::UCharCharacterIterator::move\28int\2c\20icu_73::CharacterIterator::EOrigin\29
+8180:icu_73::UCharCharacterIterator::move32\28int\2c\20icu_73::CharacterIterator::EOrigin\29
+8181:icu_73::UCharCharacterIterator::last\28\29
+8182:icu_73::UCharCharacterIterator::last32\28\29
+8183:icu_73::UCharCharacterIterator::hashCode\28\29\20const
+8184:icu_73::UCharCharacterIterator::hasPrevious\28\29
+8185:icu_73::UCharCharacterIterator::hasNext\28\29
+8186:icu_73::UCharCharacterIterator::getText\28icu_73::UnicodeString&\29
+8187:icu_73::UCharCharacterIterator::getDynamicClassID\28\29\20const
+8188:icu_73::UCharCharacterIterator::first\28\29
+8189:icu_73::UCharCharacterIterator::firstPostInc\28\29
+8190:icu_73::UCharCharacterIterator::first32\28\29
+8191:icu_73::UCharCharacterIterator::first32PostInc\28\29
+8192:icu_73::UCharCharacterIterator::current\28\29\20const
+8193:icu_73::UCharCharacterIterator::current32\28\29\20const
+8194:icu_73::UCharCharacterIterator::clone\28\29\20const
+8195:icu_73::ThaiBreakEngine::~ThaiBreakEngine\28\29.1
+8196:icu_73::ThaiBreakEngine::~ThaiBreakEngine\28\29
+8197:icu_73::ThaiBreakEngine::divideUpDictionaryRange\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+8198:icu_73::StringTrieBuilder::SplitBranchNode::write\28icu_73::StringTrieBuilder&\29
+8199:icu_73::StringTrieBuilder::SplitBranchNode::operator==\28icu_73::StringTrieBuilder::Node\20const&\29\20const
+8200:icu_73::StringTrieBuilder::SplitBranchNode::markRightEdgesFirst\28int\29
+8201:icu_73::StringTrieBuilder::Node::markRightEdgesFirst\28int\29
+8202:icu_73::StringTrieBuilder::ListBranchNode::write\28icu_73::StringTrieBuilder&\29
+8203:icu_73::StringTrieBuilder::ListBranchNode::operator==\28icu_73::StringTrieBuilder::Node\20const&\29\20const
+8204:icu_73::StringTrieBuilder::ListBranchNode::markRightEdgesFirst\28int\29
+8205:icu_73::StringTrieBuilder::IntermediateValueNode::write\28icu_73::StringTrieBuilder&\29
+8206:icu_73::StringTrieBuilder::IntermediateValueNode::operator==\28icu_73::StringTrieBuilder::Node\20const&\29\20const
+8207:icu_73::StringTrieBuilder::IntermediateValueNode::markRightEdgesFirst\28int\29
+8208:icu_73::StringTrieBuilder::FinalValueNode::write\28icu_73::StringTrieBuilder&\29
+8209:icu_73::StringTrieBuilder::FinalValueNode::operator==\28icu_73::StringTrieBuilder::Node\20const&\29\20const
+8210:icu_73::StringTrieBuilder::BranchHeadNode::write\28icu_73::StringTrieBuilder&\29
+8211:icu_73::StringEnumeration::unext\28int*\2c\20UErrorCode&\29
+8212:icu_73::StringEnumeration::snext\28UErrorCode&\29
+8213:icu_73::StringEnumeration::operator==\28icu_73::StringEnumeration\20const&\29\20const
+8214:icu_73::StringEnumeration::operator!=\28icu_73::StringEnumeration\20const&\29\20const
+8215:icu_73::StringEnumeration::next\28int*\2c\20UErrorCode&\29
+8216:icu_73::SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory\28\29.1
+8217:icu_73::SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory\28\29
+8218:icu_73::SimpleLocaleKeyFactory::updateVisibleIDs\28icu_73::Hashtable&\2c\20UErrorCode&\29\20const
+8219:icu_73::SimpleLocaleKeyFactory::getDynamicClassID\28\29\20const
+8220:icu_73::SimpleLocaleKeyFactory::create\28icu_73::ICUServiceKey\20const&\2c\20icu_73::ICUService\20const*\2c\20UErrorCode&\29\20const
+8221:icu_73::SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator\28\29.1
+8222:icu_73::SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator\28\29
+8223:icu_73::SimpleFilteredSentenceBreakIterator::setText\28icu_73::UnicodeString\20const&\29
+8224:icu_73::SimpleFilteredSentenceBreakIterator::setText\28UText*\2c\20UErrorCode&\29
+8225:icu_73::SimpleFilteredSentenceBreakIterator::refreshInputText\28UText*\2c\20UErrorCode&\29
+8226:icu_73::SimpleFilteredSentenceBreakIterator::previous\28\29
+8227:icu_73::SimpleFilteredSentenceBreakIterator::preceding\28int\29
+8228:icu_73::SimpleFilteredSentenceBreakIterator::next\28int\29
+8229:icu_73::SimpleFilteredSentenceBreakIterator::next\28\29
+8230:icu_73::SimpleFilteredSentenceBreakIterator::last\28\29
+8231:icu_73::SimpleFilteredSentenceBreakIterator::isBoundary\28int\29
+8232:icu_73::SimpleFilteredSentenceBreakIterator::getUText\28UText*\2c\20UErrorCode&\29\20const
+8233:icu_73::SimpleFilteredSentenceBreakIterator::getText\28\29\20const
+8234:icu_73::SimpleFilteredSentenceBreakIterator::following\28int\29
+8235:icu_73::SimpleFilteredSentenceBreakIterator::first\28\29
+8236:icu_73::SimpleFilteredSentenceBreakIterator::current\28\29\20const
+8237:icu_73::SimpleFilteredSentenceBreakIterator::createBufferClone\28void*\2c\20int&\2c\20UErrorCode&\29
+8238:icu_73::SimpleFilteredSentenceBreakIterator::clone\28\29\20const
+8239:icu_73::SimpleFilteredSentenceBreakIterator::adoptText\28icu_73::CharacterIterator*\29
+8240:icu_73::SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData\28\29.1
+8241:icu_73::SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData\28\29
+8242:icu_73::SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder\28\29.1
+8243:icu_73::SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder\28\29
+8244:icu_73::SimpleFilteredBreakIteratorBuilder::unsuppressBreakAfter\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29
+8245:icu_73::SimpleFilteredBreakIteratorBuilder::suppressBreakAfter\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29
+8246:icu_73::SimpleFilteredBreakIteratorBuilder::build\28icu_73::BreakIterator*\2c\20UErrorCode&\29
+8247:icu_73::SimpleFactory::~SimpleFactory\28\29.1
+8248:icu_73::SimpleFactory::~SimpleFactory\28\29
+8249:icu_73::SimpleFactory::updateVisibleIDs\28icu_73::Hashtable&\2c\20UErrorCode&\29\20const
+8250:icu_73::SimpleFactory::getDynamicClassID\28\29\20const
+8251:icu_73::SimpleFactory::getDisplayName\28icu_73::UnicodeString\20const&\2c\20icu_73::Locale\20const&\2c\20icu_73::UnicodeString&\29\20const
+8252:icu_73::SimpleFactory::create\28icu_73::ICUServiceKey\20const&\2c\20icu_73::ICUService\20const*\2c\20UErrorCode&\29\20const
+8253:icu_73::ServiceEnumeration::~ServiceEnumeration\28\29.1
+8254:icu_73::ServiceEnumeration::~ServiceEnumeration\28\29
+8255:icu_73::ServiceEnumeration::snext\28UErrorCode&\29
+8256:icu_73::ServiceEnumeration::reset\28UErrorCode&\29
+8257:icu_73::ServiceEnumeration::getDynamicClassID\28\29\20const
+8258:icu_73::ServiceEnumeration::count\28UErrorCode&\29\20const
+8259:icu_73::ServiceEnumeration::clone\28\29\20const
+8260:icu_73::RuleBasedBreakIterator::~RuleBasedBreakIterator\28\29.1
+8261:icu_73::RuleBasedBreakIterator::setText\28icu_73::UnicodeString\20const&\29
+8262:icu_73::RuleBasedBreakIterator::setText\28UText*\2c\20UErrorCode&\29
+8263:icu_73::RuleBasedBreakIterator::refreshInputText\28UText*\2c\20UErrorCode&\29
+8264:icu_73::RuleBasedBreakIterator::previous\28\29
+8265:icu_73::RuleBasedBreakIterator::preceding\28int\29
+8266:icu_73::RuleBasedBreakIterator::operator==\28icu_73::BreakIterator\20const&\29\20const
+8267:icu_73::RuleBasedBreakIterator::next\28int\29
+8268:icu_73::RuleBasedBreakIterator::next\28\29
+8269:icu_73::RuleBasedBreakIterator::last\28\29
+8270:icu_73::RuleBasedBreakIterator::isBoundary\28int\29
+8271:icu_73::RuleBasedBreakIterator::hashCode\28\29\20const
+8272:icu_73::RuleBasedBreakIterator::getUText\28UText*\2c\20UErrorCode&\29\20const
+8273:icu_73::RuleBasedBreakIterator::getText\28\29\20const
+8274:icu_73::RuleBasedBreakIterator::getRules\28\29\20const
+8275:icu_73::RuleBasedBreakIterator::getRuleStatus\28\29\20const
+8276:icu_73::RuleBasedBreakIterator::getRuleStatusVec\28int*\2c\20int\2c\20UErrorCode&\29
+8277:icu_73::RuleBasedBreakIterator::getDynamicClassID\28\29\20const
+8278:icu_73::RuleBasedBreakIterator::getBinaryRules\28unsigned\20int&\29
+8279:icu_73::RuleBasedBreakIterator::following\28int\29
+8280:icu_73::RuleBasedBreakIterator::first\28\29
+8281:icu_73::RuleBasedBreakIterator::current\28\29\20const
+8282:icu_73::RuleBasedBreakIterator::createBufferClone\28void*\2c\20int&\2c\20UErrorCode&\29
+8283:icu_73::RuleBasedBreakIterator::clone\28\29\20const
+8284:icu_73::RuleBasedBreakIterator::adoptText\28icu_73::CharacterIterator*\29
+8285:icu_73::RuleBasedBreakIterator::BreakCache::~BreakCache\28\29.1
+8286:icu_73::RuleBasedBreakIterator::BreakCache::~BreakCache\28\29
+8287:icu_73::ResourceDataValue::~ResourceDataValue\28\29.1
+8288:icu_73::ResourceDataValue::isNoInheritanceMarker\28\29\20const
+8289:icu_73::ResourceDataValue::getUInt\28UErrorCode&\29\20const
+8290:icu_73::ResourceDataValue::getType\28\29\20const
+8291:icu_73::ResourceDataValue::getTable\28UErrorCode&\29\20const
+8292:icu_73::ResourceDataValue::getStringOrFirstOfArray\28UErrorCode&\29\20const
+8293:icu_73::ResourceDataValue::getStringArray\28icu_73::UnicodeString*\2c\20int\2c\20UErrorCode&\29\20const
+8294:icu_73::ResourceDataValue::getStringArrayOrStringAsArray\28icu_73::UnicodeString*\2c\20int\2c\20UErrorCode&\29\20const
+8295:icu_73::ResourceDataValue::getInt\28UErrorCode&\29\20const
+8296:icu_73::ResourceDataValue::getIntVector\28int&\2c\20UErrorCode&\29\20const
+8297:icu_73::ResourceDataValue::getBinary\28int&\2c\20UErrorCode&\29\20const
+8298:icu_73::ResourceDataValue::getAliasString\28int&\2c\20UErrorCode&\29\20const
+8299:icu_73::ResourceBundle::~ResourceBundle\28\29.1
+8300:icu_73::ResourceBundle::~ResourceBundle\28\29
+8301:icu_73::ResourceBundle::getDynamicClassID\28\29\20const
+8302:icu_73::ParsePosition::getDynamicClassID\28\29\20const
+8303:icu_73::Normalizer2WithImpl::spanQuickCheckYes\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+8304:icu_73::Normalizer2WithImpl::normalize\28icu_73::UnicodeString\20const&\2c\20icu_73::UnicodeString&\2c\20UErrorCode&\29\20const
+8305:icu_73::Normalizer2WithImpl::normalizeSecondAndAppend\28icu_73::UnicodeString&\2c\20icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+8306:icu_73::Normalizer2WithImpl::getRawDecomposition\28int\2c\20icu_73::UnicodeString&\29\20const
+8307:icu_73::Normalizer2WithImpl::getDecomposition\28int\2c\20icu_73::UnicodeString&\29\20const
+8308:icu_73::Normalizer2WithImpl::getCombiningClass\28int\29\20const
+8309:icu_73::Normalizer2WithImpl::composePair\28int\2c\20int\29\20const
+8310:icu_73::Normalizer2WithImpl::append\28icu_73::UnicodeString&\2c\20icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+8311:icu_73::Normalizer2Impl::~Normalizer2Impl\28\29.1
+8312:icu_73::Normalizer2::normalizeUTF8\28unsigned\20int\2c\20icu_73::StringPiece\2c\20icu_73::ByteSink&\2c\20icu_73::Edits*\2c\20UErrorCode&\29\20const
+8313:icu_73::Normalizer2::isNormalizedUTF8\28icu_73::StringPiece\2c\20UErrorCode&\29\20const
+8314:icu_73::NoopNormalizer2::spanQuickCheckYes\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+8315:icu_73::NoopNormalizer2::normalize\28icu_73::UnicodeString\20const&\2c\20icu_73::UnicodeString&\2c\20UErrorCode&\29\20const
+8316:icu_73::NoopNormalizer2::normalizeUTF8\28unsigned\20int\2c\20icu_73::StringPiece\2c\20icu_73::ByteSink&\2c\20icu_73::Edits*\2c\20UErrorCode&\29\20const
+8317:icu_73::MlBreakEngine::~MlBreakEngine\28\29.1
+8318:icu_73::LocaleKeyFactory::~LocaleKeyFactory\28\29.1
+8319:icu_73::LocaleKeyFactory::updateVisibleIDs\28icu_73::Hashtable&\2c\20UErrorCode&\29\20const
+8320:icu_73::LocaleKeyFactory::handlesKey\28icu_73::ICUServiceKey\20const&\2c\20UErrorCode&\29\20const
+8321:icu_73::LocaleKeyFactory::getDynamicClassID\28\29\20const
+8322:icu_73::LocaleKeyFactory::getDisplayName\28icu_73::UnicodeString\20const&\2c\20icu_73::Locale\20const&\2c\20icu_73::UnicodeString&\29\20const
+8323:icu_73::LocaleKeyFactory::create\28icu_73::ICUServiceKey\20const&\2c\20icu_73::ICUService\20const*\2c\20UErrorCode&\29\20const
+8324:icu_73::LocaleKey::~LocaleKey\28\29.1
+8325:icu_73::LocaleKey::~LocaleKey\28\29
+8326:icu_73::LocaleKey::prefix\28icu_73::UnicodeString&\29\20const
+8327:icu_73::LocaleKey::isFallbackOf\28icu_73::UnicodeString\20const&\29\20const
+8328:icu_73::LocaleKey::getDynamicClassID\28\29\20const
+8329:icu_73::LocaleKey::fallback\28\29
+8330:icu_73::LocaleKey::currentLocale\28icu_73::Locale&\29\20const
+8331:icu_73::LocaleKey::currentID\28icu_73::UnicodeString&\29\20const
+8332:icu_73::LocaleKey::currentDescriptor\28icu_73::UnicodeString&\29\20const
+8333:icu_73::LocaleKey::canonicalLocale\28icu_73::Locale&\29\20const
+8334:icu_73::LocaleKey::canonicalID\28icu_73::UnicodeString&\29\20const
+8335:icu_73::LocaleBuilder::~LocaleBuilder\28\29.1
+8336:icu_73::Locale::~Locale\28\29.1
+8337:icu_73::Locale::getDynamicClassID\28\29\20const
+8338:icu_73::LoadedNormalizer2Impl::~LoadedNormalizer2Impl\28\29.1
+8339:icu_73::LoadedNormalizer2Impl::~LoadedNormalizer2Impl\28\29
+8340:icu_73::LoadedNormalizer2Impl::isAcceptable\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29
+8341:icu_73::LaoBreakEngine::~LaoBreakEngine\28\29.1
+8342:icu_73::LaoBreakEngine::~LaoBreakEngine\28\29
+8343:icu_73::LSTMBreakEngine::~LSTMBreakEngine\28\29.1
+8344:icu_73::LSTMBreakEngine::~LSTMBreakEngine\28\29
+8345:icu_73::LSTMBreakEngine::name\28\29\20const
+8346:icu_73::LSTMBreakEngine::divideUpDictionaryRange\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+8347:icu_73::KhmerBreakEngine::~KhmerBreakEngine\28\29.1
+8348:icu_73::KhmerBreakEngine::~KhmerBreakEngine\28\29
+8349:icu_73::KhmerBreakEngine::divideUpDictionaryRange\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+8350:icu_73::KeywordEnumeration::~KeywordEnumeration\28\29.1
+8351:icu_73::KeywordEnumeration::~KeywordEnumeration\28\29
+8352:icu_73::KeywordEnumeration::snext\28UErrorCode&\29
+8353:icu_73::KeywordEnumeration::reset\28UErrorCode&\29
+8354:icu_73::KeywordEnumeration::next\28int*\2c\20UErrorCode&\29
+8355:icu_73::KeywordEnumeration::getDynamicClassID\28\29\20const
+8356:icu_73::KeywordEnumeration::count\28UErrorCode&\29\20const
+8357:icu_73::KeywordEnumeration::clone\28\29\20const
+8358:icu_73::ICUServiceKey::~ICUServiceKey\28\29.1
+8359:icu_73::ICUServiceKey::isFallbackOf\28icu_73::UnicodeString\20const&\29\20const
+8360:icu_73::ICUServiceKey::getDynamicClassID\28\29\20const
+8361:icu_73::ICUServiceKey::currentDescriptor\28icu_73::UnicodeString&\29\20const
+8362:icu_73::ICUServiceKey::canonicalID\28icu_73::UnicodeString&\29\20const
+8363:icu_73::ICUService::unregister\28void\20const*\2c\20UErrorCode&\29
+8364:icu_73::ICUService::reset\28\29
+8365:icu_73::ICUService::registerInstance\28icu_73::UObject*\2c\20icu_73::UnicodeString\20const&\2c\20signed\20char\2c\20UErrorCode&\29
+8366:icu_73::ICUService::registerFactory\28icu_73::ICUServiceFactory*\2c\20UErrorCode&\29
+8367:icu_73::ICUService::reInitializeFactories\28\29
+8368:icu_73::ICUService::notifyListener\28icu_73::EventListener&\29\20const
+8369:icu_73::ICUService::isDefault\28\29\20const
+8370:icu_73::ICUService::getKey\28icu_73::ICUServiceKey&\2c\20icu_73::UnicodeString*\2c\20UErrorCode&\29\20const
+8371:icu_73::ICUService::createSimpleFactory\28icu_73::UObject*\2c\20icu_73::UnicodeString\20const&\2c\20signed\20char\2c\20UErrorCode&\29
+8372:icu_73::ICUService::createKey\28icu_73::UnicodeString\20const*\2c\20UErrorCode&\29\20const
+8373:icu_73::ICUService::clearCaches\28\29
+8374:icu_73::ICUService::acceptsListener\28icu_73::EventListener\20const&\29\20const
+8375:icu_73::ICUResourceBundleFactory::~ICUResourceBundleFactory\28\29.1
+8376:icu_73::ICUResourceBundleFactory::handleCreate\28icu_73::Locale\20const&\2c\20int\2c\20icu_73::ICUService\20const*\2c\20UErrorCode&\29\20const
+8377:icu_73::ICUResourceBundleFactory::getSupportedIDs\28UErrorCode&\29\20const
+8378:icu_73::ICUResourceBundleFactory::getDynamicClassID\28\29\20const
+8379:icu_73::ICUNotifier::removeListener\28icu_73::EventListener\20const*\2c\20UErrorCode&\29
+8380:icu_73::ICUNotifier::notifyChanged\28\29
+8381:icu_73::ICUNotifier::addListener\28icu_73::EventListener\20const*\2c\20UErrorCode&\29
+8382:icu_73::ICULocaleService::registerInstance\28icu_73::UObject*\2c\20icu_73::UnicodeString\20const&\2c\20signed\20char\2c\20UErrorCode&\29
+8383:icu_73::ICULocaleService::registerInstance\28icu_73::UObject*\2c\20icu_73::Locale\20const&\2c\20int\2c\20int\2c\20UErrorCode&\29
+8384:icu_73::ICULocaleService::registerInstance\28icu_73::UObject*\2c\20icu_73::Locale\20const&\2c\20int\2c\20UErrorCode&\29
+8385:icu_73::ICULocaleService::registerInstance\28icu_73::UObject*\2c\20icu_73::Locale\20const&\2c\20UErrorCode&\29
+8386:icu_73::ICULocaleService::getAvailableLocales\28\29\20const
+8387:icu_73::ICULocaleService::createKey\28icu_73::UnicodeString\20const*\2c\20int\2c\20UErrorCode&\29\20const
+8388:icu_73::ICULocaleService::createKey\28icu_73::UnicodeString\20const*\2c\20UErrorCode&\29\20const
+8389:icu_73::ICULanguageBreakFactory::~ICULanguageBreakFactory\28\29.1
+8390:icu_73::ICULanguageBreakFactory::~ICULanguageBreakFactory\28\29
+8391:icu_73::ICULanguageBreakFactory::loadEngineFor\28int\29
+8392:icu_73::ICULanguageBreakFactory::loadDictionaryMatcherFor\28UScriptCode\29
+8393:icu_73::ICULanguageBreakFactory::getEngineFor\28int\29
+8394:icu_73::ICUBreakIteratorService::~ICUBreakIteratorService\28\29.1
+8395:icu_73::ICUBreakIteratorService::~ICUBreakIteratorService\28\29
+8396:icu_73::ICUBreakIteratorService::isDefault\28\29\20const
+8397:icu_73::ICUBreakIteratorService::handleDefault\28icu_73::ICUServiceKey\20const&\2c\20icu_73::UnicodeString*\2c\20UErrorCode&\29\20const
+8398:icu_73::ICUBreakIteratorService::cloneInstance\28icu_73::UObject*\29\20const
+8399:icu_73::ICUBreakIteratorFactory::~ICUBreakIteratorFactory\28\29.1
+8400:icu_73::ICUBreakIteratorFactory::~ICUBreakIteratorFactory\28\29
+8401:icu_73::ICUBreakIteratorFactory::handleCreate\28icu_73::Locale\20const&\2c\20int\2c\20icu_73::ICUService\20const*\2c\20UErrorCode&\29\20const
+8402:icu_73::GraphemeClusterVectorizer::vectorize\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20icu_73::UVector32&\2c\20UErrorCode&\29\20const
+8403:icu_73::FCDNormalizer2::spanQuickCheckYes\28char16_t\20const*\2c\20char16_t\20const*\2c\20UErrorCode&\29\20const
+8404:icu_73::FCDNormalizer2::normalize\28char16_t\20const*\2c\20char16_t\20const*\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+8405:icu_73::FCDNormalizer2::normalizeAndAppend\28char16_t\20const*\2c\20char16_t\20const*\2c\20signed\20char\2c\20icu_73::UnicodeString&\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+8406:icu_73::FCDNormalizer2::isInert\28int\29\20const
+8407:icu_73::EmojiProps::isAcceptable\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29
+8408:icu_73::DictionaryBreakEngine::setCharacters\28icu_73::UnicodeSet\20const&\29
+8409:icu_73::DictionaryBreakEngine::handles\28int\29\20const
+8410:icu_73::DictionaryBreakEngine::findBreaks\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+8411:icu_73::DecomposeNormalizer2::spanQuickCheckYes\28char16_t\20const*\2c\20char16_t\20const*\2c\20UErrorCode&\29\20const
+8412:icu_73::DecomposeNormalizer2::normalize\28char16_t\20const*\2c\20char16_t\20const*\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+8413:icu_73::DecomposeNormalizer2::normalizeUTF8\28unsigned\20int\2c\20icu_73::StringPiece\2c\20icu_73::ByteSink&\2c\20icu_73::Edits*\2c\20UErrorCode&\29\20const
+8414:icu_73::DecomposeNormalizer2::normalizeAndAppend\28char16_t\20const*\2c\20char16_t\20const*\2c\20signed\20char\2c\20icu_73::UnicodeString&\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+8415:icu_73::DecomposeNormalizer2::isNormalizedUTF8\28icu_73::StringPiece\2c\20UErrorCode&\29\20const
+8416:icu_73::DecomposeNormalizer2::isInert\28int\29\20const
+8417:icu_73::DecomposeNormalizer2::getQuickCheck\28int\29\20const
+8418:icu_73::ConstArray2D::get\28int\2c\20int\29\20const
+8419:icu_73::ConstArray1D::get\28int\29\20const
+8420:icu_73::ComposeNormalizer2::spanQuickCheckYes\28char16_t\20const*\2c\20char16_t\20const*\2c\20UErrorCode&\29\20const
+8421:icu_73::ComposeNormalizer2::quickCheck\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+8422:icu_73::ComposeNormalizer2::normalize\28char16_t\20const*\2c\20char16_t\20const*\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+8423:icu_73::ComposeNormalizer2::normalizeUTF8\28unsigned\20int\2c\20icu_73::StringPiece\2c\20icu_73::ByteSink&\2c\20icu_73::Edits*\2c\20UErrorCode&\29\20const
+8424:icu_73::ComposeNormalizer2::normalizeAndAppend\28char16_t\20const*\2c\20char16_t\20const*\2c\20signed\20char\2c\20icu_73::UnicodeString&\2c\20icu_73::ReorderingBuffer&\2c\20UErrorCode&\29\20const
+8425:icu_73::ComposeNormalizer2::isNormalized\28icu_73::UnicodeString\20const&\2c\20UErrorCode&\29\20const
+8426:icu_73::ComposeNormalizer2::isNormalizedUTF8\28icu_73::StringPiece\2c\20UErrorCode&\29\20const
+8427:icu_73::ComposeNormalizer2::isInert\28int\29\20const
+8428:icu_73::ComposeNormalizer2::hasBoundaryBefore\28int\29\20const
+8429:icu_73::ComposeNormalizer2::hasBoundaryAfter\28int\29\20const
+8430:icu_73::ComposeNormalizer2::getQuickCheck\28int\29\20const
+8431:icu_73::CodePointsVectorizer::vectorize\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20icu_73::UVector32&\2c\20UErrorCode&\29\20const
+8432:icu_73::CjkBreakEngine::~CjkBreakEngine\28\29.1
+8433:icu_73::CjkBreakEngine::divideUpDictionaryRange\28UText*\2c\20int\2c\20int\2c\20icu_73::UVector32&\2c\20signed\20char\2c\20UErrorCode&\29\20const
+8434:icu_73::CheckedArrayByteSink::Reset\28\29
+8435:icu_73::CheckedArrayByteSink::GetAppendBuffer\28int\2c\20int\2c\20char*\2c\20int\2c\20int*\29
+8436:icu_73::CheckedArrayByteSink::Append\28char\20const*\2c\20int\29
+8437:icu_73::CharacterIterator::firstPostInc\28\29
+8438:icu_73::CharacterIterator::first32PostInc\28\29
+8439:icu_73::CharStringByteSink::GetAppendBuffer\28int\2c\20int\2c\20char*\2c\20int\2c\20int*\29
+8440:icu_73::CharStringByteSink::Append\28char\20const*\2c\20int\29
+8441:icu_73::BytesDictionaryMatcher::~BytesDictionaryMatcher\28\29.1
+8442:icu_73::BytesDictionaryMatcher::~BytesDictionaryMatcher\28\29
+8443:icu_73::BytesDictionaryMatcher::matches\28UText*\2c\20int\2c\20int\2c\20int*\2c\20int*\2c\20int*\2c\20int*\29\20const
+8444:icu_73::BurmeseBreakEngine::~BurmeseBreakEngine\28\29.1
+8445:icu_73::BurmeseBreakEngine::~BurmeseBreakEngine\28\29
+8446:icu_73::BreakIterator::getRuleStatusVec\28int*\2c\20int\2c\20UErrorCode&\29
+8447:icu_73::BMPSet::contains\28int\29\20const
+8448:icu_73::Array1D::~Array1D\28\29.1
+8449:icu_73::Array1D::~Array1D\28\29
+8450:icu_73::Array1D::get\28int\29\20const
+8451:hit_compare_y\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+8452:hit_compare_x\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+8453:hb_unicode_script_nil\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+8454:hb_unicode_general_category_nil\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+8455:hb_ucd_script\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+8456:hb_ucd_mirroring\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+8457:hb_ucd_general_category\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+8458:hb_ucd_decompose\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20void*\29
+8459:hb_ucd_compose\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8460:hb_ucd_combining_class\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+8461:hb_syllabic_clear_var\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+8462:hb_paint_sweep_gradient_nil\28hb_paint_funcs_t*\2c\20void*\2c\20hb_color_line_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8463:hb_paint_push_transform_nil\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8464:hb_paint_push_clip_rectangle_nil\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8465:hb_paint_image_nil\28hb_paint_funcs_t*\2c\20void*\2c\20hb_blob_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20float\2c\20hb_glyph_extents_t*\2c\20void*\29
+8466:hb_paint_extents_push_transform\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8467:hb_paint_extents_push_group\28hb_paint_funcs_t*\2c\20void*\2c\20void*\29
+8468:hb_paint_extents_push_clip_rectangle\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8469:hb_paint_extents_push_clip_glyph\28hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_font_t*\2c\20void*\29
+8470:hb_paint_extents_pop_transform\28hb_paint_funcs_t*\2c\20void*\2c\20void*\29
+8471:hb_paint_extents_pop_group\28hb_paint_funcs_t*\2c\20void*\2c\20hb_paint_composite_mode_t\2c\20void*\29
+8472:hb_paint_extents_pop_clip\28hb_paint_funcs_t*\2c\20void*\2c\20void*\29
+8473:hb_paint_extents_paint_sweep_gradient\28hb_paint_funcs_t*\2c\20void*\2c\20hb_color_line_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8474:hb_paint_extents_paint_image\28hb_paint_funcs_t*\2c\20void*\2c\20hb_blob_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20float\2c\20hb_glyph_extents_t*\2c\20void*\29
+8475:hb_paint_extents_paint_color\28hb_paint_funcs_t*\2c\20void*\2c\20int\2c\20unsigned\20int\2c\20void*\29
+8476:hb_outline_recording_pen_quadratic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8477:hb_outline_recording_pen_move_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+8478:hb_outline_recording_pen_line_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+8479:hb_outline_recording_pen_cubic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8480:hb_outline_recording_pen_close_path\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20void*\29
+8481:hb_ot_paint_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+8482:hb_ot_map_t::lookup_map_t::cmp\28void\20const*\2c\20void\20const*\29
+8483:hb_ot_map_t::feature_map_t::cmp\28void\20const*\2c\20void\20const*\29
+8484:hb_ot_map_builder_t::feature_info_t::cmp\28void\20const*\2c\20void\20const*\29
+8485:hb_ot_get_variation_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8486:hb_ot_get_nominal_glyphs\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20void*\29
+8487:hb_ot_get_nominal_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8488:hb_ot_get_glyph_v_origin\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8489:hb_ot_get_glyph_v_advances\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+8490:hb_ot_get_glyph_name\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20char*\2c\20unsigned\20int\2c\20void*\29
+8491:hb_ot_get_glyph_h_advances\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+8492:hb_ot_get_glyph_from_name\28hb_font_t*\2c\20void*\2c\20char\20const*\2c\20int\2c\20unsigned\20int*\2c\20void*\29
+8493:hb_ot_get_glyph_extents\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+8494:hb_ot_get_font_v_extents\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+8495:hb_ot_get_font_h_extents\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+8496:hb_ot_draw_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_draw_funcs_t*\2c\20void*\2c\20void*\29
+8497:hb_font_paint_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+8498:hb_font_get_variation_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8499:hb_font_get_nominal_glyphs_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20void*\29
+8500:hb_font_get_nominal_glyph_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8501:hb_font_get_nominal_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8502:hb_font_get_glyph_v_origin_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8503:hb_font_get_glyph_v_origin_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8504:hb_font_get_glyph_v_kerning_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+8505:hb_font_get_glyph_v_advances_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+8506:hb_font_get_glyph_v_advance_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+8507:hb_font_get_glyph_v_advance_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+8508:hb_font_get_glyph_name_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20char*\2c\20unsigned\20int\2c\20void*\29
+8509:hb_font_get_glyph_name_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20char*\2c\20unsigned\20int\2c\20void*\29
+8510:hb_font_get_glyph_h_origin_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8511:hb_font_get_glyph_h_origin_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8512:hb_font_get_glyph_h_kerning_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+8513:hb_font_get_glyph_h_advances_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+8514:hb_font_get_glyph_h_advance_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+8515:hb_font_get_glyph_h_advance_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+8516:hb_font_get_glyph_from_name_default\28hb_font_t*\2c\20void*\2c\20char\20const*\2c\20int\2c\20unsigned\20int*\2c\20void*\29
+8517:hb_font_get_glyph_extents_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+8518:hb_font_get_glyph_extents_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+8519:hb_font_get_glyph_contour_point_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8520:hb_font_get_glyph_contour_point_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+8521:hb_font_get_font_v_extents_default\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+8522:hb_font_get_font_h_extents_default\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+8523:hb_font_draw_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_draw_funcs_t*\2c\20void*\2c\20void*\29
+8524:hb_draw_quadratic_to_nil\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8525:hb_draw_quadratic_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8526:hb_draw_move_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+8527:hb_draw_line_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+8528:hb_draw_extents_quadratic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8529:hb_draw_extents_cubic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8530:hb_draw_cubic_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+8531:hb_draw_close_path_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20void*\29
+8532:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<OT::hhea>\28hb_blob_t*\29
+8533:hb_aat_map_builder_t::feature_info_t::cmp\28void\20const*\2c\20void\20const*\29
+8534:hb_aat_map_builder_t::feature_event_t::cmp\28void\20const*\2c\20void\20const*\29
+8535:hashStringTrieNode\28UElement\29
+8536:hashEntry\28UElement\29
+8537:hasFullCompositionExclusion\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8538:hasEmojiProperty\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8539:h2v2_upsample
+8540:h2v2_merged_upsample_565D
+8541:h2v2_merged_upsample_565
+8542:h2v2_merged_upsample
+8543:h2v2_fancy_upsample
+8544:h2v1_upsample
+8545:h2v1_merged_upsample_565D
+8546:h2v1_merged_upsample_565
+8547:h2v1_merged_upsample
+8548:h2v1_fancy_upsample
+8549:grayscale_convert
+8550:gray_rgb_convert
+8551:gray_rgb565_convert
+8552:gray_rgb565D_convert
+8553:gray_raster_render
+8554:gray_raster_new
+8555:gray_raster_done
+8556:gray_move_to
+8557:gray_line_to
+8558:gray_cubic_to
+8559:gray_conic_to
+8560:get_sk_marker_list\28jpeg_decompress_struct*\29
+8561:get_sfnt_table
+8562:get_interesting_appn
+8563:getVo\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8564:getTrailCombiningClass\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8565:getScript\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8566:getNumericType\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8567:getNormQuickCheck\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8568:getLeadCombiningClass\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8569:getJoiningType\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8570:getJoiningGroup\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8571:getInSC\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8572:getInPC\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8573:getHangulSyllableType\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8574:getGeneralCategory\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8575:getCombiningClass\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8576:getBiDiPairedBracketType\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8577:getBiDiClass\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8578:fullsize_upsample
+8579:ft_smooth_transform
+8580:ft_smooth_set_mode
+8581:ft_smooth_render
+8582:ft_smooth_overlap_spans
+8583:ft_smooth_lcd_spans
+8584:ft_smooth_init
+8585:ft_smooth_get_cbox
+8586:ft_gzip_free
+8587:ft_gzip_alloc
+8588:ft_ansi_stream_io
+8589:ft_ansi_stream_close
+8590:fquad_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+8591:format_message
+8592:fmt_fp
+8593:fline_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+8594:first_axis_intersection\28double\20const*\2c\20bool\2c\20double\2c\20double*\29
+8595:finish_pass1
+8596:finish_output_pass
+8597:finish_input_pass
+8598:final_reordering_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+8599:fcubic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+8600:fconic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+8601:fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8602:fast_swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8603:fast_swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8604:fast_swizzle_rgb_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8605:fast_swizzle_rgb_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8606:fast_swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8607:fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8608:fast_swizzle_gray_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8609:fast_swizzle_cmyk_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8610:fast_swizzle_cmyk_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8611:error_exit
+8612:error_callback
+8613:equalStringTrieNodes\28UElement\2c\20UElement\29
+8614:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20sk_sp<SkTextBlob>*\2c\20float\2c\20float\2c\20SkPaint*\29
+8615:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint*\29
+8616:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20SkPaint*\29
+8617:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\2c\20float\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\2c\20float\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\29
+8618:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\29\2c\20SkCanvas*\2c\20float\2c\20float\29
+8619:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28SkPath\20const&\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20SkPath\20const&\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28SkPath\20const&\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20SkPath*\2c\20SkPaint*\29
+8620:emscripten::internal::MethodInvoker<skia::textlayout::SkRange<unsigned\20long>\20\28skia::textlayout::Paragraph::*\29\28unsigned\20int\29\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::Paragraph*\2c\20unsigned\20int>::invoke\28skia::textlayout::SkRange<unsigned\20long>\20\28skia::textlayout::Paragraph::*\20const&\29\28unsigned\20int\29\2c\20skia::textlayout::Paragraph*\2c\20unsigned\20int\29
+8621:emscripten::internal::MethodInvoker<skia::textlayout::PositionWithAffinity\20\28skia::textlayout::Paragraph::*\29\28float\2c\20float\29\2c\20skia::textlayout::PositionWithAffinity\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float>::invoke\28skia::textlayout::PositionWithAffinity\20\28skia::textlayout::Paragraph::*\20const&\29\28float\2c\20float\29\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+8622:emscripten::internal::MethodInvoker<int\20\28skia::textlayout::Paragraph::*\29\28unsigned\20long\29\20const\2c\20int\2c\20skia::textlayout::Paragraph\20const*\2c\20unsigned\20long>::invoke\28int\20\28skia::textlayout::Paragraph::*\20const&\29\28unsigned\20long\29\20const\2c\20skia::textlayout::Paragraph\20const*\2c\20unsigned\20long\29
+8623:emscripten::internal::MethodInvoker<bool\20\28SkPath::*\29\28float\2c\20float\29\20const\2c\20bool\2c\20SkPath\20const*\2c\20float\2c\20float>::invoke\28bool\20\28SkPath::*\20const&\29\28float\2c\20float\29\20const\2c\20SkPath\20const*\2c\20float\2c\20float\29
+8624:emscripten::internal::MethodInvoker<SkPath&\20\28SkPath::*\29\28bool\29\2c\20SkPath&\2c\20SkPath*\2c\20bool>::invoke\28SkPath&\20\28SkPath::*\20const&\29\28bool\29\2c\20SkPath*\2c\20bool\29
+8625:emscripten::internal::Invoker<void\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28void\20\28*\29\28unsigned\20long\2c\20unsigned\20long\29\2c\20unsigned\20long\2c\20unsigned\20long\29
+8626:emscripten::internal::Invoker<void\2c\20emscripten::val>::invoke\28void\20\28*\29\28emscripten::val\29\2c\20emscripten::_EM_VAL*\29
+8627:emscripten::internal::Invoker<unsigned\20long\2c\20unsigned\20long>::invoke\28unsigned\20long\20\28*\29\28unsigned\20long\29\2c\20unsigned\20long\29
+8628:emscripten::internal::Invoker<sk_sp<SkTextBlob>\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&>::invoke\28sk_sp<SkTextBlob>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont*\29
+8629:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int\29\2c\20sk_sp<GrDirectContext>*\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>*\2c\20int\2c\20int\29
+8630:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\29\2c\20sk_sp<GrDirectContext>*\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>*\29
+8631:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20int\2c\20int>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20int\2c\20int\29\2c\20sk_sp<GrDirectContext>*\2c\20int\2c\20int\29
+8632:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20SimpleImageInfo>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20SimpleImageInfo\29\2c\20sk_sp<GrDirectContext>*\2c\20SimpleImageInfo*\29
+8633:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkSurface>\20\28*\29\28SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\29
+8634:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+8635:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+8636:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+8637:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+8638:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int>::invoke\28sk_sp<SkShader>\20\28*\29\28float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29\2c\20float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29
+8639:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+8640:emscripten::internal::Invoker<sk_sp<SkRuntimeEffect>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val>::invoke\28sk_sp<SkRuntimeEffect>\20\28*\29\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\2c\20emscripten::_EM_VAL*\29
+8641:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20unsigned\20long\2c\20int\2c\20float>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28unsigned\20long\2c\20int\2c\20float\29\2c\20unsigned\20long\2c\20int\2c\20float\29
+8642:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20unsigned\20long\2c\20SkPath>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28unsigned\20long\2c\20SkPath\29\2c\20unsigned\20long\2c\20SkPath*\29
+8643:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20float\2c\20unsigned\20long>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28float\2c\20unsigned\20long\29\2c\20float\2c\20unsigned\20long\29
+8644:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20float\2c\20float\2c\20unsigned\20int>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28float\2c\20float\2c\20unsigned\20int\29\2c\20float\2c\20float\2c\20unsigned\20int\29
+8645:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20float>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28float\29\2c\20float\29
+8646:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style\29\2c\20SkPath*\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style\29
+8647:emscripten::internal::Invoker<sk_sp<SkMaskFilter>\2c\20SkBlurStyle\2c\20float\2c\20bool>::invoke\28sk_sp<SkMaskFilter>\20\28*\29\28SkBlurStyle\2c\20float\2c\20bool\29\2c\20SkBlurStyle\2c\20float\2c\20bool\29
+8648:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>\29\2c\20unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>*\29
+8649:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>\29\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>*\29
+8650:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkShader>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkShader>\29\2c\20sk_sp<SkShader>*\29
+8651:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkImage>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkImage>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\29
+8652:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkImage>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkImage>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+8653:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>*\29
+8654:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29\2c\20float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>*\29
+8655:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\29\2c\20float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>*\29
+8656:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29\2c\20SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>*\2c\20sk_sp<SkImageFilter>*\29
+8657:emscripten::internal::Invoker<sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long>::invoke\28sk_sp<SkImage>\20\28*\29\28SimpleImageInfo\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\29\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\29
+8658:emscripten::internal::Invoker<sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20emscripten::val>::invoke\28sk_sp<SkImage>\20\28*\29\28SimpleImageInfo\2c\20emscripten::val\29\2c\20SimpleImageInfo*\2c\20emscripten::_EM_VAL*\29
+8659:emscripten::internal::Invoker<sk_sp<SkColorFilter>\2c\20unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkColorFilter>\20\28*\29\28unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>*\29
+8660:emscripten::internal::Invoker<sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>\20const&\2c\20sk_sp<SkColorFilter>>::invoke\28sk_sp<SkColorFilter>\20\28*\29\28sk_sp<SkColorFilter>\20const&\2c\20sk_sp<SkColorFilter>\29\2c\20sk_sp<SkColorFilter>*\2c\20sk_sp<SkColorFilter>*\29
+8661:emscripten::internal::Invoker<sk_sp<SkColorFilter>\2c\20float\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>>::invoke\28sk_sp<SkColorFilter>\20\28*\29\28float\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>\29\2c\20float\2c\20sk_sp<SkColorFilter>*\2c\20sk_sp<SkColorFilter>*\29
+8662:emscripten::internal::Invoker<emscripten::val\2c\20unsigned\20long\2c\20int>::invoke\28emscripten::val\20\28*\29\28unsigned\20long\2c\20int\29\2c\20unsigned\20long\2c\20int\29
+8663:emscripten::internal::Invoker<emscripten::val\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>>::invoke\28emscripten::val\20\28*\29\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\29
+8664:emscripten::internal::Invoker<emscripten::val\2c\20emscripten::val\2c\20emscripten::val\2c\20float>::invoke\28emscripten::val\20\28*\29\28emscripten::val\2c\20emscripten::val\2c\20float\29\2c\20emscripten::_EM_VAL*\2c\20emscripten::_EM_VAL*\2c\20float\29
+8665:emscripten::internal::Invoker<emscripten::val\2c\20SkPath\20const&\2c\20SkPath\20const&\2c\20float>::invoke\28emscripten::val\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\2c\20float\29\2c\20SkPath*\2c\20SkPath*\2c\20float\29
+8666:emscripten::internal::Invoker<emscripten::val\2c\20SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp>::invoke\28emscripten::val\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp\29\2c\20SkPath*\2c\20SkPath*\2c\20SkPathOp\29
+8667:emscripten::internal::Invoker<bool\2c\20unsigned\20long\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long>::invoke\28bool\20\28*\29\28unsigned\20long\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\29\2c\20unsigned\20long\2c\20SkPath*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\29
+8668:emscripten::internal::Invoker<bool\2c\20sk_sp<SkColorSpace>\2c\20sk_sp<SkColorSpace>>::invoke\28bool\20\28*\29\28sk_sp<SkColorSpace>\2c\20sk_sp<SkColorSpace>\29\2c\20sk_sp<SkColorSpace>*\2c\20sk_sp<SkColorSpace>*\29
+8669:emscripten::internal::Invoker<bool\2c\20SkPath\20const&\2c\20SkPath\20const&>::invoke\28bool\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\29\2c\20SkPath*\2c\20SkPath*\29
+8670:emscripten::internal::Invoker<SkVertices::Builder*\2c\20SkVertices::VertexMode&&\2c\20int&&\2c\20int&&\2c\20unsigned\20int&&>::invoke\28SkVertices::Builder*\20\28*\29\28SkVertices::VertexMode&&\2c\20int&&\2c\20int&&\2c\20unsigned\20int&&\29\2c\20SkVertices::VertexMode\2c\20int\2c\20int\2c\20unsigned\20int\29
+8671:emscripten::internal::Invoker<SkPath\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int>::invoke\28SkPath\20\28*\29\28unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+8672:emscripten::internal::Invoker<SkFont*\2c\20sk_sp<SkTypeface>&&\2c\20float&&\2c\20float&&\2c\20float&&>::invoke\28SkFont*\20\28*\29\28sk_sp<SkTypeface>&&\2c\20float&&\2c\20float&&\2c\20float&&\29\2c\20sk_sp<SkTypeface>*\2c\20float\2c\20float\2c\20float\29
+8673:emscripten::internal::Invoker<SkFont*\2c\20sk_sp<SkTypeface>&&\2c\20float&&>::invoke\28SkFont*\20\28*\29\28sk_sp<SkTypeface>&&\2c\20float&&\29\2c\20sk_sp<SkTypeface>*\2c\20float\29
+8674:emscripten::internal::Invoker<SkFont*\2c\20sk_sp<SkTypeface>&&>::invoke\28SkFont*\20\28*\29\28sk_sp<SkTypeface>&&\29\2c\20sk_sp<SkTypeface>*\29
+8675:emscripten::internal::Invoker<SkContourMeasureIter*\2c\20SkPath\20const&\2c\20bool&&\2c\20float&&>::invoke\28SkContourMeasureIter*\20\28*\29\28SkPath\20const&\2c\20bool&&\2c\20float&&\29\2c\20SkPath*\2c\20bool\2c\20float\29
+8676:emscripten::internal::Invoker<SkCanvas*\2c\20float&&\2c\20float&&>::invoke\28SkCanvas*\20\28*\29\28float&&\2c\20float&&\29\2c\20float\2c\20float\29
+8677:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long\29\2c\20void\2c\20skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long>::invoke\28void\20\28**\29\28skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long\29\2c\20skia::textlayout::TypefaceFontProvider*\2c\20sk_sp<SkTypeface>*\2c\20unsigned\20long\29
+8678:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\29
+8679:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29
+8680:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20SimpleTextStyle*\2c\20SkPaint*\2c\20SkPaint*\29
+8681:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20SimpleTextStyle*\29
+8682:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+8683:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+8684:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+8685:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29
+8686:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20bool\29
+8687:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20void\2c\20SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool>::invoke\28void\20\28**\29\28SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath*\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29
+8688:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkContourMeasure&\2c\20float\2c\20unsigned\20long\29\2c\20void\2c\20SkContourMeasure&\2c\20float\2c\20unsigned\20long>::invoke\28void\20\28**\29\28SkContourMeasure&\2c\20float\2c\20unsigned\20long\29\2c\20SkContourMeasure*\2c\20float\2c\20unsigned\20long\29
+8689:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont*\2c\20SkPaint*\29
+8690:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint*\29
+8691:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8692:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8693:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8694:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+8695:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont*\2c\20SkPaint*\29
+8696:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint*\29
+8697:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29\2c\20void\2c\20SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int>::invoke\28void\20\28**\29\28SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29\2c\20SkCanvas*\2c\20SkPath*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29
+8698:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\20\28*\29\28SkFontMgr&\2c\20unsigned\20long\2c\20int\29\2c\20sk_sp<SkTypeface>\2c\20SkFontMgr&\2c\20unsigned\20long\2c\20int>::invoke\28sk_sp<SkTypeface>\20\28**\29\28SkFontMgr&\2c\20unsigned\20long\2c\20int\29\2c\20SkFontMgr*\2c\20unsigned\20long\2c\20int\29
+8699:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\20\28*\29\28SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29\2c\20sk_sp<SkTypeface>\2c\20SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val>::invoke\28sk_sp<SkTypeface>\20\28**\29\28SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29\2c\20SkFontMgr*\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\2c\20emscripten::_EM_VAL*\29
+8700:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29
+8701:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29
+8702:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20SkRuntimeEffect*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+8703:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29\2c\20SkRuntimeEffect*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29
+8704:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20SkPicture*\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+8705:emscripten::internal::FunctionInvoker<sk_sp<SkPicture>\20\28*\29\28SkPictureRecorder&\29\2c\20sk_sp<SkPicture>\2c\20SkPictureRecorder&>::invoke\28sk_sp<SkPicture>\20\28**\29\28SkPictureRecorder&\29\2c\20SkPictureRecorder*\29
+8706:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\20\28*\29\28SkSurface&\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>\2c\20SkSurface&\2c\20unsigned\20long>::invoke\28sk_sp<SkImage>\20\28**\29\28SkSurface&\2c\20unsigned\20long\29\2c\20SkSurface*\2c\20unsigned\20long\29
+8707:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\20\28*\29\28SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo\29\2c\20sk_sp<SkImage>\2c\20SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo>::invoke\28sk_sp<SkImage>\20\28**\29\28SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo\29\2c\20SkSurface*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo*\29
+8708:emscripten::internal::FunctionInvoker<sk_sp<SkBlender>\20\28*\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29\2c\20sk_sp<SkBlender>\2c\20SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool>::invoke\28sk_sp<SkBlender>\20\28**\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29\2c\20SkRuntimeEffect*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+8709:emscripten::internal::FunctionInvoker<int\20\28*\29\28SkCanvas&\2c\20SkPaint\29\2c\20int\2c\20SkCanvas&\2c\20SkPaint>::invoke\28int\20\28**\29\28SkCanvas&\2c\20SkPaint\29\2c\20SkCanvas*\2c\20SkPaint*\29
+8710:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29\2c\20emscripten::val\2c\20skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle>::invoke\28emscripten::val\20\28**\29\28skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29\2c\20skia::textlayout::Paragraph*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29
+8711:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28skia::textlayout::Paragraph&\2c\20float\2c\20float\29\2c\20emscripten::val\2c\20skia::textlayout::Paragraph&\2c\20float\2c\20float>::invoke\28emscripten::val\20\28**\29\28skia::textlayout::Paragraph&\2c\20float\2c\20float\29\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+8712:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29\2c\20emscripten::val\2c\20sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*>::invoke\28emscripten::val\20\28**\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29\2c\20sk_sp<SkImage>*\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29
+8713:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29\2c\20emscripten::val\2c\20sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int>::invoke\28emscripten::val\20\28**\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29\2c\20sk_sp<SkImage>*\2c\20SkEncodedImageFormat\2c\20int\29
+8714:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28sk_sp<SkImage>\29\2c\20emscripten::val\2c\20sk_sp<SkImage>>::invoke\28emscripten::val\20\28**\29\28sk_sp<SkImage>\29\2c\20sk_sp<SkImage>*\29
+8715:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29\2c\20emscripten::val\2c\20SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float>::invoke\28emscripten::val\20\28**\29\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29\2c\20SkFont*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29
+8716:emscripten::internal::FunctionInvoker<bool\20\28*\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29\2c\20bool\2c\20sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*>::invoke\28bool\20\28**\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29\2c\20sk_sp<SkImage>*\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29
+8717:emscripten::internal::FunctionInvoker<bool\20\28*\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20bool\2c\20sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int>::invoke\28bool\20\28**\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20sk_sp<SkImage>*\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+8718:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\29\2c\20bool\2c\20SkPath&\2c\20float\2c\20float\2c\20float>::invoke\28bool\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\29
+8719:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20bool\29\2c\20bool\2c\20SkPath&\2c\20float\2c\20float\2c\20bool>::invoke\28bool\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath*\2c\20float\2c\20float\2c\20bool\29
+8720:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20StrokeOpts\29\2c\20bool\2c\20SkPath&\2c\20StrokeOpts>::invoke\28bool\20\28**\29\28SkPath&\2c\20StrokeOpts\29\2c\20SkPath*\2c\20StrokeOpts*\29
+8721:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20bool\2c\20SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int>::invoke\28bool\20\28**\29\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20SkCanvas*\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+8722:emscripten::internal::FunctionInvoker<SkPath\20\28*\29\28SkPath\20const&\29\2c\20SkPath\2c\20SkPath\20const&>::invoke\28SkPath\20\28**\29\28SkPath\20const&\29\2c\20SkPath*\29
+8723:emscripten::internal::FunctionInvoker<SkPath\20\28*\29\28SkContourMeasure&\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath\2c\20SkContourMeasure&\2c\20float\2c\20float\2c\20bool>::invoke\28SkPath\20\28**\29\28SkContourMeasure&\2c\20float\2c\20float\2c\20bool\29\2c\20SkContourMeasure*\2c\20float\2c\20float\2c\20bool\29
+8724:emscripten::internal::FunctionInvoker<SkPaint\20\28*\29\28SkPaint\20const&\29\2c\20SkPaint\2c\20SkPaint\20const&>::invoke\28SkPaint\20\28**\29\28SkPaint\20const&\29\2c\20SkPaint*\29
+8725:emscripten::internal::FunctionInvoker<SimpleImageInfo\20\28*\29\28SkSurface&\29\2c\20SimpleImageInfo\2c\20SkSurface&>::invoke\28SimpleImageInfo\20\28**\29\28SkSurface&\29\2c\20SkSurface*\29
+8726:emscripten::internal::FunctionInvoker<RuntimeEffectUniform\20\28*\29\28SkRuntimeEffect&\2c\20int\29\2c\20RuntimeEffectUniform\2c\20SkRuntimeEffect&\2c\20int>::invoke\28RuntimeEffectUniform\20\28**\29\28SkRuntimeEffect&\2c\20int\29\2c\20SkRuntimeEffect*\2c\20int\29
+8727:emit_message
+8728:embind_init_Skia\28\29::$_9::__invoke\28SkAnimatedImage&\29
+8729:embind_init_Skia\28\29::$_99::__invoke\28SkPath&\2c\20unsigned\20long\2c\20bool\29
+8730:embind_init_Skia\28\29::$_98::__invoke\28SkPath&\2c\20unsigned\20long\2c\20int\2c\20bool\29
+8731:embind_init_Skia\28\29::$_97::__invoke\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\29
+8732:embind_init_Skia\28\29::$_96::__invoke\28SkPath&\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20int\29
+8733:embind_init_Skia\28\29::$_95::__invoke\28SkPath&\2c\20unsigned\20long\2c\20float\2c\20float\29
+8734:embind_init_Skia\28\29::$_94::__invoke\28unsigned\20long\2c\20SkPath\29
+8735:embind_init_Skia\28\29::$_93::__invoke\28float\2c\20unsigned\20long\29
+8736:embind_init_Skia\28\29::$_92::__invoke\28unsigned\20long\2c\20int\2c\20float\29
+8737:embind_init_Skia\28\29::$_91::__invoke\28\29
+8738:embind_init_Skia\28\29::$_90::__invoke\28\29
+8739:embind_init_Skia\28\29::$_8::__invoke\28emscripten::val\29
+8740:embind_init_Skia\28\29::$_89::__invoke\28sk_sp<SkColorSpace>\2c\20sk_sp<SkColorSpace>\29
+8741:embind_init_Skia\28\29::$_88::__invoke\28SkPaint&\2c\20unsigned\20int\2c\20sk_sp<SkColorSpace>\29
+8742:embind_init_Skia\28\29::$_87::__invoke\28SkPaint&\2c\20unsigned\20int\29
+8743:embind_init_Skia\28\29::$_86::__invoke\28SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+8744:embind_init_Skia\28\29::$_85::__invoke\28SkPaint&\2c\20unsigned\20long\29
+8745:embind_init_Skia\28\29::$_84::__invoke\28SkPaint\20const&\29
+8746:embind_init_Skia\28\29::$_83::__invoke\28SkBlurStyle\2c\20float\2c\20bool\29
+8747:embind_init_Skia\28\29::$_82::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+8748:embind_init_Skia\28\29::$_81::__invoke\28unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>\29
+8749:embind_init_Skia\28\29::$_80::__invoke\28unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+8750:embind_init_Skia\28\29::$_7::__invoke\28GrDirectContext&\2c\20unsigned\20long\29
+8751:embind_init_Skia\28\29::$_79::__invoke\28sk_sp<SkImage>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+8752:embind_init_Skia\28\29::$_78::__invoke\28sk_sp<SkImage>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\29
+8753:embind_init_Skia\28\29::$_77::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+8754:embind_init_Skia\28\29::$_76::__invoke\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29
+8755:embind_init_Skia\28\29::$_75::__invoke\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29
+8756:embind_init_Skia\28\29::$_74::__invoke\28sk_sp<SkShader>\29
+8757:embind_init_Skia\28\29::$_73::__invoke\28SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29
+8758:embind_init_Skia\28\29::$_72::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+8759:embind_init_Skia\28\29::$_71::__invoke\28sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>\29
+8760:embind_init_Skia\28\29::$_70::__invoke\28float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\29
+8761:embind_init_Skia\28\29::$_6::__invoke\28GrDirectContext&\29
+8762:embind_init_Skia\28\29::$_69::__invoke\28SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29
+8763:embind_init_Skia\28\29::$_68::__invoke\28SkImageFilter\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+8764:embind_init_Skia\28\29::$_67::__invoke\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+8765:embind_init_Skia\28\29::$_66::__invoke\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29
+8766:embind_init_Skia\28\29::$_65::__invoke\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29
+8767:embind_init_Skia\28\29::$_64::__invoke\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29
+8768:embind_init_Skia\28\29::$_63::__invoke\28sk_sp<SkImage>\29
+8769:embind_init_Skia\28\29::$_62::__invoke\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29
+8770:embind_init_Skia\28\29::$_61::__invoke\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29
+8771:embind_init_Skia\28\29::$_60::__invoke\28sk_sp<SkImage>\29
+8772:embind_init_Skia\28\29::$_5::__invoke\28GrDirectContext&\29
+8773:embind_init_Skia\28\29::$_59::__invoke\28sk_sp<SkImage>\29
+8774:embind_init_Skia\28\29::$_58::__invoke\28SkFontMgr&\2c\20unsigned\20long\2c\20int\29
+8775:embind_init_Skia\28\29::$_57::__invoke\28SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29
+8776:embind_init_Skia\28\29::$_56::__invoke\28SkFontMgr&\2c\20int\29
+8777:embind_init_Skia\28\29::$_55::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20int\29
+8778:embind_init_Skia\28\29::$_54::__invoke\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29
+8779:embind_init_Skia\28\29::$_53::__invoke\28SkFont&\29
+8780:embind_init_Skia\28\29::$_52::__invoke\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+8781:embind_init_Skia\28\29::$_51::__invoke\28SkFont&\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPaint*\29
+8782:embind_init_Skia\28\29::$_50::__invoke\28SkContourMeasure&\2c\20float\2c\20float\2c\20bool\29
+8783:embind_init_Skia\28\29::$_4::__invoke\28unsigned\20long\2c\20unsigned\20long\29
+8784:embind_init_Skia\28\29::$_49::__invoke\28SkContourMeasure&\2c\20float\2c\20unsigned\20long\29
+8785:embind_init_Skia\28\29::$_48::__invoke\28unsigned\20long\29
+8786:embind_init_Skia\28\29::$_47::__invoke\28unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>\29
+8787:embind_init_Skia\28\29::$_46::__invoke\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+8788:embind_init_Skia\28\29::$_45::__invoke\28SkCanvas&\2c\20SkPaint\29
+8789:embind_init_Skia\28\29::$_44::__invoke\28SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29
+8790:embind_init_Skia\28\29::$_43::__invoke\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+8791:embind_init_Skia\28\29::$_42::__invoke\28SkCanvas&\2c\20SimpleImageInfo\29
+8792:embind_init_Skia\28\29::$_41::__invoke\28SkCanvas\20const&\2c\20unsigned\20long\29
+8793:embind_init_Skia\28\29::$_40::__invoke\28SkCanvas\20const&\2c\20unsigned\20long\29
+8794:embind_init_Skia\28\29::$_3::__invoke\28unsigned\20long\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\29
+8795:embind_init_Skia\28\29::$_39::__invoke\28SkCanvas\20const&\2c\20unsigned\20long\29
+8796:embind_init_Skia\28\29::$_38::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29
+8797:embind_init_Skia\28\29::$_37::__invoke\28SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29
+8798:embind_init_Skia\28\29::$_36::__invoke\28SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+8799:embind_init_Skia\28\29::$_35::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+8800:embind_init_Skia\28\29::$_34::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+8801:embind_init_Skia\28\29::$_33::__invoke\28SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&\29
+8802:embind_init_Skia\28\29::$_32::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+8803:embind_init_Skia\28\29::$_31::__invoke\28SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+8804:embind_init_Skia\28\29::$_30::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+8805:embind_init_Skia\28\29::$_2::__invoke\28SimpleImageInfo\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\29
+8806:embind_init_Skia\28\29::$_29::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+8807:embind_init_Skia\28\29::$_28::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8808:embind_init_Skia\28\29::$_27::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\20const*\2c\20bool\29
+8809:embind_init_Skia\28\29::$_26::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+8810:embind_init_Skia\28\29::$_25::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+8811:embind_init_Skia\28\29::$_24::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8812:embind_init_Skia\28\29::$_23::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8813:embind_init_Skia\28\29::$_22::__invoke\28SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29
+8814:embind_init_Skia\28\29::$_21::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+8815:embind_init_Skia\28\29::$_20::__invoke\28SkCanvas&\2c\20unsigned\20int\2c\20SkBlendMode\29
+8816:embind_init_Skia\28\29::$_1::__invoke\28unsigned\20long\2c\20unsigned\20long\29
+8817:embind_init_Skia\28\29::$_19::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode\29
+8818:embind_init_Skia\28\29::$_18::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+8819:embind_init_Skia\28\29::$_17::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+8820:embind_init_Skia\28\29::$_16::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+8821:embind_init_Skia\28\29::$_15::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+8822:embind_init_Skia\28\29::$_14::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+8823:embind_init_Skia\28\29::$_146::__invoke\28SkVertices::Builder&\29
+8824:embind_init_Skia\28\29::$_145::__invoke\28SkVertices::Builder&\29
+8825:embind_init_Skia\28\29::$_144::__invoke\28SkVertices::Builder&\29
+8826:embind_init_Skia\28\29::$_143::__invoke\28SkVertices::Builder&\29
+8827:embind_init_Skia\28\29::$_142::__invoke\28SkVertices&\2c\20unsigned\20long\29
+8828:embind_init_Skia\28\29::$_141::__invoke\28SkTypeface&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+8829:embind_init_Skia\28\29::$_140::__invoke\28unsigned\20long\2c\20int\29
+8830:embind_init_Skia\28\29::$_13::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29
+8831:embind_init_Skia\28\29::$_139::__invoke\28\29
+8832:embind_init_Skia\28\29::$_138::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+8833:embind_init_Skia\28\29::$_137::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+8834:embind_init_Skia\28\29::$_136::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+8835:embind_init_Skia\28\29::$_135::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+8836:embind_init_Skia\28\29::$_134::__invoke\28SkSurface&\29
+8837:embind_init_Skia\28\29::$_133::__invoke\28SkSurface&\29
+8838:embind_init_Skia\28\29::$_132::__invoke\28SkSurface&\29
+8839:embind_init_Skia\28\29::$_131::__invoke\28SkSurface&\2c\20SimpleImageInfo\29
+8840:embind_init_Skia\28\29::$_130::__invoke\28SkSurface&\2c\20unsigned\20long\29
+8841:embind_init_Skia\28\29::$_12::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29
+8842:embind_init_Skia\28\29::$_129::__invoke\28SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo\29
+8843:embind_init_Skia\28\29::$_128::__invoke\28SkSurface&\29
+8844:embind_init_Skia\28\29::$_127::__invoke\28SkSurface&\29
+8845:embind_init_Skia\28\29::$_126::__invoke\28SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\29
+8846:embind_init_Skia\28\29::$_125::__invoke\28SkRuntimeEffect&\2c\20int\29
+8847:embind_init_Skia\28\29::$_124::__invoke\28SkRuntimeEffect&\2c\20int\29
+8848:embind_init_Skia\28\29::$_123::__invoke\28SkRuntimeEffect&\29
+8849:embind_init_Skia\28\29::$_122::__invoke\28SkRuntimeEffect&\29
+8850:embind_init_Skia\28\29::$_121::__invoke\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+8851:embind_init_Skia\28\29::$_120::__invoke\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+8852:embind_init_Skia\28\29::$_11::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+8853:embind_init_Skia\28\29::$_119::__invoke\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29
+8854:embind_init_Skia\28\29::$_118::__invoke\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29
+8855:embind_init_Skia\28\29::$_117::__invoke\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29
+8856:embind_init_Skia\28\29::$_116::__invoke\28unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+8857:embind_init_Skia\28\29::$_115::__invoke\28float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29
+8858:embind_init_Skia\28\29::$_114::__invoke\28float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+8859:embind_init_Skia\28\29::$_113::__invoke\28float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+8860:embind_init_Skia\28\29::$_112::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+8861:embind_init_Skia\28\29::$_111::__invoke\28float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29
+8862:embind_init_Skia\28\29::$_110::__invoke\28unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+8863:embind_init_Skia\28\29::$_10::__invoke\28SkAnimatedImage&\29
+8864:embind_init_Skia\28\29::$_109::__invoke\28SkPicture&\29
+8865:embind_init_Skia\28\29::$_108::__invoke\28SkPicture&\2c\20unsigned\20long\29
+8866:embind_init_Skia\28\29::$_107::__invoke\28SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+8867:embind_init_Skia\28\29::$_106::__invoke\28SkPictureRecorder&\29
+8868:embind_init_Skia\28\29::$_105::__invoke\28SkPictureRecorder&\2c\20unsigned\20long\2c\20bool\29
+8869:embind_init_Skia\28\29::$_104::__invoke\28SkPath&\2c\20unsigned\20long\29
+8870:embind_init_Skia\28\29::$_103::__invoke\28SkPath&\2c\20unsigned\20long\29
+8871:embind_init_Skia\28\29::$_102::__invoke\28SkPath&\2c\20int\2c\20unsigned\20long\29
+8872:embind_init_Skia\28\29::$_101::__invoke\28SkPath&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\29
+8873:embind_init_Skia\28\29::$_100::__invoke\28SkPath&\2c\20unsigned\20long\2c\20bool\29
+8874:embind_init_Skia\28\29::$_0::__invoke\28unsigned\20long\2c\20unsigned\20long\29
+8875:embind_init_Paragraph\28\29::$_9::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+8876:embind_init_Paragraph\28\29::$_8::__invoke\28skia::textlayout::ParagraphBuilderImpl&\29
+8877:embind_init_Paragraph\28\29::$_7::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29
+8878:embind_init_Paragraph\28\29::$_6::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint\29
+8879:embind_init_Paragraph\28\29::$_5::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\29
+8880:embind_init_Paragraph\28\29::$_4::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+8881:embind_init_Paragraph\28\29::$_3::__invoke\28emscripten::val\2c\20emscripten::val\2c\20float\29
+8882:embind_init_Paragraph\28\29::$_2::__invoke\28SimpleParagraphStyle\2c\20sk_sp<skia::textlayout::FontCollection>\29
+8883:embind_init_Paragraph\28\29::$_18::__invoke\28skia::textlayout::FontCollection&\2c\20sk_sp<skia::textlayout::TypefaceFontProvider>\20const&\29
+8884:embind_init_Paragraph\28\29::$_17::__invoke\28\29
+8885:embind_init_Paragraph\28\29::$_16::__invoke\28skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long\29
+8886:embind_init_Paragraph\28\29::$_15::__invoke\28\29
+8887:embind_init_Paragraph\28\29::$_14::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+8888:embind_init_Paragraph\28\29::$_13::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+8889:embind_init_Paragraph\28\29::$_12::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+8890:embind_init_Paragraph\28\29::$_11::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+8891:embind_init_Paragraph\28\29::$_10::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+8892:dispose_external_texture\28void*\29
+8893:deleteJSTexture\28void*\29
+8894:deflate_slow
+8895:deflate_fast
+8896:defaultGetValue\28IntProperty\20const&\2c\20int\2c\20UProperty\29
+8897:defaultGetMaxValue\28IntProperty\20const&\2c\20UProperty\29
+8898:defaultContains\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+8899:decompress_smooth_data
+8900:decompress_onepass
+8901:decompress_data
+8902:decompose_unicode\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\29
+8903:decompose_khmer\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\29
+8904:decompose_indic\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\29
+8905:decode_mcu_DC_refine
+8906:decode_mcu_DC_first
+8907:decode_mcu_AC_refine
+8908:decode_mcu_AC_first
+8909:decode_mcu
+8910:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::Make\28SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20bool\2c\20bool\29::'lambda'\28void*\29>\28skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::Make\28SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20bool\2c\20bool\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8911:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::\28anonymous\20namespace\29::HullShader*\20SkArenaAlloc::make<skgpu::ganesh::\28anonymous\20namespace\29::HullShader\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&>\28SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&\29::'lambda'\28void*\29>\28skgpu::ganesh::\28anonymous\20namespace\29::HullShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8912:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList*\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList\2c\20skgpu::ganesh::StrokeTessellator::PathStrokeList>\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\29::'lambda'\28void*\29>\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8913:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator*\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator\2c\20skgpu::tess::PatchAttribs&>\28skgpu::tess::PatchAttribs&\29::'lambda'\28void*\29>\28skgpu::ganesh::StrokeTessellator&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8914:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList*\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&>\28SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29::'lambda'\28void*\29>\28skgpu::ganesh::PathTessellator::PathDrawList&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8915:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::Make\28SkArenaAlloc*\2c\20GrAAType\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::ProcessorFlags\29::'lambda'\28void*\29>\28skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::Make\28SkArenaAlloc*\2c\20GrAAType\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::ProcessorFlags\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8916:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::RectanizerSkyline*\20SkArenaAlloc::make<skgpu::RectanizerSkyline\2c\20int&\2c\20int&>\28int&\2c\20int&\29::'lambda'\28void*\29>\28skgpu::RectanizerSkyline&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8917:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::RectanizerPow2*\20SkArenaAlloc::make<skgpu::RectanizerPow2\2c\20int&\2c\20int&>\28int&\2c\20int&\29::'lambda'\28void*\29>\28skgpu::RectanizerPow2&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8918:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<sk_sp<SkShader>*\20SkArenaAlloc::make<sk_sp<SkShader>>\28\29::'lambda'\28void*\29>\28sk_sp<SkShader>&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8919:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::TextureOpImpl::Desc*\20SkArenaAlloc::make<\28anonymous\20namespace\29::TextureOpImpl::Desc>\28\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::TextureOpImpl::Desc&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8920:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::TentPass*\20SkArenaAlloc::make<\28anonymous\20namespace\29::TentPass\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&>\28skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::TentPass&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8921:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::SimpleTriangleShader*\20SkArenaAlloc::make<\28anonymous\20namespace\29::SimpleTriangleShader\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&>\28SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::SimpleTriangleShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8922:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass*\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&>\28skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::GaussPass&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8923:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::DrawAtlasPathShader*\20SkArenaAlloc::make<\28anonymous\20namespace\29::DrawAtlasPathShader\2c\20bool&\2c\20skgpu::ganesh::AtlasInstancedHelper*\2c\20GrShaderCaps\20const&>\28bool&\2c\20skgpu::ganesh::AtlasInstancedHelper*&&\2c\20GrShaderCaps\20const&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::DrawAtlasPathShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8924:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::BoundingBoxShader*\20SkArenaAlloc::make<\28anonymous\20namespace\29::BoundingBoxShader\2c\20SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&>\28SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::BoundingBoxShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8925:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<Sprite_D32_S32*\20SkArenaAlloc::make<Sprite_D32_S32\2c\20SkPixmap\20const&\2c\20unsigned\20char>\28SkPixmap\20const&\2c\20unsigned\20char&&\29::'lambda'\28void*\29>\28Sprite_D32_S32&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8926:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTriColorShader*\20SkArenaAlloc::make<SkTriColorShader\2c\20bool\2c\20bool\20const&>\28bool&&\2c\20bool\20const&\29::'lambda'\28void*\29>\28SkTriColorShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8927:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTCubic*\20SkArenaAlloc::make<SkTCubic>\28\29::'lambda'\28void*\29>\28SkTCubic&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8928:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTConic*\20SkArenaAlloc::make<SkTConic>\28\29::'lambda'\28void*\29>\28SkTConic&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8929:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy*\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy\2c\20SkPixmap\20const&>\28SkPixmap\20const&\29::'lambda'\28void*\29>\28SkSpriteBlitter_Memcpy&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8930:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::CallbackCtx*\20SkArenaAlloc::make<SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::CallbackCtx>\28\29::'lambda'\28void*\29>\28SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::CallbackCtx&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8931:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter*\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter\2c\20SkPixmap\20const&\2c\20SkArenaAlloc*&\2c\20sk_sp<SkShader>&>\28SkPixmap\20const&\2c\20SkArenaAlloc*&\2c\20sk_sp<SkShader>&\29::'lambda'\28void*\29>\28SkRasterPipelineSpriteBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8932:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkRasterPipelineBlitter*\20SkArenaAlloc::make<SkRasterPipelineBlitter\2c\20SkPixmap\20const&\2c\20SkArenaAlloc*&>\28SkPixmap\20const&\2c\20SkArenaAlloc*&\29::'lambda'\28void*\29>\28SkRasterPipelineBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8933:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkNullBlitter*\20SkArenaAlloc::make<SkNullBlitter>\28\29::'lambda'\28void*\29>\28SkNullBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8934:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkMipmapAccessor*\20SkArenaAlloc::make<SkMipmapAccessor\2c\20SkImage_Base\20const*\2c\20SkMatrix\20const&\2c\20SkMipmapMode&>\28SkImage_Base\20const*&&\2c\20SkMatrix\20const&\2c\20SkMipmapMode&\29::'lambda'\28void*\29>\28SkMipmapAccessor&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8935:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph::PathData*\20SkArenaAlloc::make<SkGlyph::PathData>\28\29::'lambda'\28void*\29>\28SkGlyph::PathData&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8936:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph::DrawableData*\20SkArenaAlloc::make<SkGlyph::DrawableData>\28\29::'lambda'\28void*\29>\28SkGlyph::DrawableData&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8937:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph*\20SkArenaAlloc::make<SkGlyph\2c\20SkGlyph>\28SkGlyph&&\29::'lambda'\28void*\29>\28SkGlyph&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8938:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>::Node*\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>::Node\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\29::'lambda'\28void*\29>\28SkArenaAllocList<std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8939:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20skgpu::AtlasToken>\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\2c\20skgpu::AtlasToken&&\29::'lambda'\28void*\29>\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8940:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node*\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node>\28\29::'lambda'\28void*\29>\28SkArenaAllocList<GrOpFlushState::Draw>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8941:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkA8_Coverage_Blitter*\20SkArenaAlloc::make<SkA8_Coverage_Blitter\2c\20SkPixmap\20const&\2c\20SkPaint\20const&>\28SkPixmap\20const&\2c\20SkPaint\20const&\29::'lambda'\28void*\29>\28SkA8_Coverage_Blitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8942:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrSimpleMesh*\20SkArenaAlloc::make<GrSimpleMesh>\28\29::'lambda'\28void*\29>\28GrSimpleMesh&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8943:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrResourceAllocator::Register*\20SkArenaAlloc::make<GrResourceAllocator::Register\2c\20GrSurfaceProxy*&\2c\20skgpu::ScratchKey\2c\20GrResourceProvider*&>\28GrSurfaceProxy*&\2c\20skgpu::ScratchKey&&\2c\20GrResourceProvider*&\29::'lambda'\28void*\29>\28GrResourceAllocator::Register&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8944:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrInnerFanTriangulator*\20SkArenaAlloc::make<GrInnerFanTriangulator\2c\20SkPath\20const&\2c\20SkArenaAlloc*\20const&>\28SkPath\20const&\2c\20SkArenaAlloc*\20const&\29::'lambda'\28void*\29>\28GrInnerFanTriangulator&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8945:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrDistanceFieldLCDTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28GrDistanceFieldLCDTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8946:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29>\28GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8947:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrAppliedClip*\20SkArenaAlloc::make<GrAppliedClip\2c\20GrAppliedClip>\28GrAppliedClip&&\29::'lambda'\28void*\29>\28GrAppliedClip&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8948:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<EllipseGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28EllipseGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+8949:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_construct\5babi:v160004\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>&\2c\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8950:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&&\29::'lambda'\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&\29
+8951:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8952:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8953:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\29
+8954:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_construct\5babi:v160004\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>&\2c\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8955:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&&\29::'lambda'\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&\29
+8956:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8957:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8958:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+8959:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\29
+8960:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\29
+8961:deallocate_buffer_var\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+8962:ddquad_xy_at_t\28SkDCurve\20const&\2c\20double\29
+8963:ddquad_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+8964:ddline_xy_at_t\28SkDCurve\20const&\2c\20double\29
+8965:ddline_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+8966:ddcubic_xy_at_t\28SkDCurve\20const&\2c\20double\29
+8967:ddcubic_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+8968:ddconic_xy_at_t\28SkDCurve\20const&\2c\20double\29
+8969:ddconic_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+8970:data_destroy_use\28void*\29
+8971:data_create_use\28hb_ot_shape_plan_t\20const*\29
+8972:data_create_khmer\28hb_ot_shape_plan_t\20const*\29
+8973:data_create_indic\28hb_ot_shape_plan_t\20const*\29
+8974:data_create_hangul\28hb_ot_shape_plan_t\20const*\29
+8975:copy\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+8976:convert_bytes_to_data
+8977:consume_markers
+8978:consume_data
+8979:computeTonalColors\28unsigned\20long\2c\20unsigned\20long\29
+8980:compose_unicode\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8981:compose_indic\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8982:compose_hebrew\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8983:compare_ppem
+8984:compare_offsets
+8985:compare_myanmar_order\28hb_glyph_info_t\20const*\2c\20hb_glyph_info_t\20const*\29
+8986:compare_combining_class\28hb_glyph_info_t\20const*\2c\20hb_glyph_info_t\20const*\29
+8987:compareKeywordStructs\28void\20const*\2c\20void\20const*\2c\20void\20const*\29
+8988:compareEntries\28UElement\2c\20UElement\29
+8989:color_quantize3
+8990:color_quantize
+8991:collect_features_use\28hb_ot_shape_planner_t*\29
+8992:collect_features_myanmar\28hb_ot_shape_planner_t*\29
+8993:collect_features_khmer\28hb_ot_shape_planner_t*\29
+8994:collect_features_indic\28hb_ot_shape_planner_t*\29
+8995:collect_features_hangul\28hb_ot_shape_planner_t*\29
+8996:collect_features_arabic\28hb_ot_shape_planner_t*\29
+8997:clip\28SkPath\20const&\2c\20SkHalfPlane\20const&\29::$_0::__invoke\28SkEdgeClipper*\2c\20bool\2c\20void*\29
+8998:check_for_passthrough_local_coords_and_dead_varyings\28SkSL::Program\20const&\2c\20unsigned\20int*\29::Visitor::visitStatement\28SkSL::Statement\20const&\29
+8999:check_for_passthrough_local_coords_and_dead_varyings\28SkSL::Program\20const&\2c\20unsigned\20int*\29::Visitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+9000:check_for_passthrough_local_coords_and_dead_varyings\28SkSL::Program\20const&\2c\20unsigned\20int*\29::Visitor::visitExpression\28SkSL::Expression\20const&\29
+9001:charIterTextLength\28UText*\29
+9002:charIterTextExtract\28UText*\2c\20long\20long\2c\20long\20long\2c\20char16_t*\2c\20int\2c\20UErrorCode*\29
+9003:charIterTextClose\28UText*\29
+9004:charIterTextClone\28UText*\2c\20UText\20const*\2c\20signed\20char\2c\20UErrorCode*\29
+9005:changesWhenNFKC_Casefolded\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+9006:changesWhenCasefolded\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+9007:cff_slot_init
+9008:cff_slot_done
+9009:cff_size_request
+9010:cff_size_init
+9011:cff_size_done
+9012:cff_sid_to_glyph_name
+9013:cff_set_var_design
+9014:cff_set_mm_weightvector
+9015:cff_set_mm_blend
+9016:cff_set_instance
+9017:cff_random
+9018:cff_ps_has_glyph_names
+9019:cff_ps_get_font_info
+9020:cff_ps_get_font_extra
+9021:cff_parse_vsindex
+9022:cff_parse_private_dict
+9023:cff_parse_multiple_master
+9024:cff_parse_maxstack
+9025:cff_parse_font_matrix
+9026:cff_parse_font_bbox
+9027:cff_parse_cid_ros
+9028:cff_parse_blend
+9029:cff_metrics_adjust
+9030:cff_hadvance_adjust
+9031:cff_glyph_load
+9032:cff_get_var_design
+9033:cff_get_var_blend
+9034:cff_get_standard_encoding
+9035:cff_get_ros
+9036:cff_get_ps_name
+9037:cff_get_name_index
+9038:cff_get_mm_weightvector
+9039:cff_get_mm_var
+9040:cff_get_mm_blend
+9041:cff_get_is_cid
+9042:cff_get_interface
+9043:cff_get_glyph_name
+9044:cff_get_glyph_data
+9045:cff_get_cmap_info
+9046:cff_get_cid_from_glyph_index
+9047:cff_get_advances
+9048:cff_free_glyph_data
+9049:cff_fd_select_get
+9050:cff_face_init
+9051:cff_face_done
+9052:cff_driver_init
+9053:cff_done_blend
+9054:cff_decoder_prepare
+9055:cff_decoder_init
+9056:cff_cmap_unicode_init
+9057:cff_cmap_unicode_char_next
+9058:cff_cmap_unicode_char_index
+9059:cff_cmap_encoding_init
+9060:cff_cmap_encoding_done
+9061:cff_cmap_encoding_char_next
+9062:cff_cmap_encoding_char_index
+9063:cff_builder_start_point
+9064:cff_builder_init
+9065:cff_builder_add_point1
+9066:cff_builder_add_point
+9067:cff_builder_add_contour
+9068:cff_blend_check_vector
+9069:cf2_free_instance
+9070:cf2_decoder_parse_charstrings
+9071:cf2_builder_moveTo
+9072:cf2_builder_lineTo
+9073:cf2_builder_cubeTo
+9074:caseBinaryPropertyContains\28BinaryProperty\20const&\2c\20int\2c\20UProperty\29
+9075:bw_to_a8\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29
+9076:bw_square_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9077:bw_pt_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9078:bw_poly_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9079:bw_line_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9080:breakiterator_cleanup\28\29
+9081:bool\20\28anonymous\20namespace\29::FindVisitor<\28anonymous\20namespace\29::SpotVerticesFactory>\28SkResourceCache::Rec\20const&\2c\20void*\29
+9082:bool\20\28anonymous\20namespace\29::FindVisitor<\28anonymous\20namespace\29::AmbientVerticesFactory>\28SkResourceCache::Rec\20const&\2c\20void*\29
+9083:bool\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+9084:bool\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+9085:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+9086:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+9087:bool\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\2c\20&_hb_arabic_pua_trad_map\28unsigned\20int\29>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+9088:bool\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\2c\20&_hb_arabic_pua_simp_map\28unsigned\20int\29>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+9089:bool\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\2c\20&OT::_hb_symbol_pua_map\28unsigned\20int\29>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+9090:bool\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtableFormat12>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+9091:bool\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtable>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+9092:blur_y_radius_4\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9093:blur_y_radius_3\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9094:blur_y_radius_2\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9095:blur_y_radius_1\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9096:blur_x_radius_4\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9097:blur_x_radius_3\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9098:blur_x_radius_2\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9099:blur_x_radius_1\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+9100:blit_row_s32a_blend\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+9101:blit_row_s32_opaque\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+9102:blit_row_s32_blend\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+9103:biDiGetMaxValue\28IntProperty\20const&\2c\20UProperty\29
+9104:argb32_to_a8\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29
+9105:arabic_fallback_shape\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+9106:alwaysSaveTypefaceBytes\28SkTypeface*\2c\20void*\29
+9107:alloc_sarray
+9108:alloc_barray
+9109:afm_parser_parse
+9110:afm_parser_init
+9111:afm_parser_done
+9112:afm_compare_kern_pairs
+9113:af_property_set
+9114:af_property_get
+9115:af_latin_metrics_scale
+9116:af_latin_metrics_init
+9117:af_latin_hints_init
+9118:af_latin_hints_apply
+9119:af_latin_get_standard_widths
+9120:af_indic_metrics_init
+9121:af_indic_hints_apply
+9122:af_get_interface
+9123:af_face_globals_free
+9124:af_dummy_hints_init
+9125:af_dummy_hints_apply
+9126:af_cjk_metrics_init
+9127:af_autofitter_load_glyph
+9128:af_autofitter_init
+9129:access_virt_sarray
+9130:access_virt_barray
+9131:aa_square_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9132:aa_poly_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9133:aa_line_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+9134:_hb_ot_font_destroy\28void*\29
+9135:_hb_glyph_info_is_default_ignorable\28hb_glyph_info_t\20const*\29
+9136:_hb_face_for_data_reference_table\28hb_face_t*\2c\20unsigned\20int\2c\20void*\29
+9137:_hb_face_for_data_closure_destroy\28void*\29
+9138:_hb_clear_substitution_flags\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+9139:_embind_initialize_bindings
+9140:__wasm_call_ctors
+9141:__stdio_write
+9142:__stdio_seek
+9143:__stdio_read
+9144:__stdio_close
+9145:__getTypeName
+9146:__cxxabiv1::__vmi_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+9147:__cxxabiv1::__vmi_class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+9148:__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+9149:__cxxabiv1::__si_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+9150:__cxxabiv1::__si_class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+9151:__cxxabiv1::__si_class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+9152:__cxxabiv1::__class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+9153:__cxxabiv1::__class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+9154:__cxxabiv1::__class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+9155:__cxxabiv1::__class_type_info::can_catch\28__cxxabiv1::__shim_type_info\20const*\2c\20void*&\29\20const
+9156:__cxx_global_array_dtor.87
+9157:__cxx_global_array_dtor.72
+9158:__cxx_global_array_dtor.7
+9159:__cxx_global_array_dtor.6
+9160:__cxx_global_array_dtor.57
+9161:__cxx_global_array_dtor.5
+9162:__cxx_global_array_dtor.44
+9163:__cxx_global_array_dtor.42
+9164:__cxx_global_array_dtor.40
+9165:__cxx_global_array_dtor.38
+9166:__cxx_global_array_dtor.36
+9167:__cxx_global_array_dtor.34
+9168:__cxx_global_array_dtor.32
+9169:__cxx_global_array_dtor.3.1
+9170:__cxx_global_array_dtor.3
+9171:__cxx_global_array_dtor.2
+9172:__cxx_global_array_dtor.18
+9173:__cxx_global_array_dtor.17
+9174:__cxx_global_array_dtor.16
+9175:__cxx_global_array_dtor.138
+9176:__cxx_global_array_dtor.135
+9177:__cxx_global_array_dtor.12
+9178:__cxx_global_array_dtor.111
+9179:__cxx_global_array_dtor.11
+9180:__cxx_global_array_dtor.1.2
+9181:__cxx_global_array_dtor.1.1
+9182:__cxx_global_array_dtor.1
+9183:__cxx_global_array_dtor
+9184:__cxa_pure_virtual
+9185:__cxa_is_pointer_type
+9186:\28anonymous\20namespace\29::uprops_cleanup\28\29
+9187:\28anonymous\20namespace\29::ulayout_isAcceptable\28void*\2c\20char\20const*\2c\20char\20const*\2c\20UDataInfo\20const*\29
+9188:\28anonymous\20namespace\29::skhb_nominal_glyphs\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20void*\29
+9189:\28anonymous\20namespace\29::skhb_nominal_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+9190:\28anonymous\20namespace\29::skhb_glyph_h_advances\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+9191:\28anonymous\20namespace\29::skhb_glyph_h_advance\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+9192:\28anonymous\20namespace\29::skhb_glyph_extents\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+9193:\28anonymous\20namespace\29::skhb_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+9194:\28anonymous\20namespace\29::skhb_get_table\28hb_face_t*\2c\20unsigned\20int\2c\20void*\29::$_0::__invoke\28void*\29
+9195:\28anonymous\20namespace\29::skhb_get_table\28hb_face_t*\2c\20unsigned\20int\2c\20void*\29
+9196:\28anonymous\20namespace\29::make_morphology\28\28anonymous\20namespace\29::MorphType\2c\20SkSize\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+9197:\28anonymous\20namespace\29::make_drop_shadow_graph\28SkPoint\2c\20SkSize\2c\20unsigned\20int\2c\20bool\2c\20sk_sp<SkImageFilter>\2c\20std::__2::optional<SkRect>\20const&\29
+9198:\28anonymous\20namespace\29::extension_compare\28SkString\20const&\2c\20SkString\20const&\29
+9199:\28anonymous\20namespace\29::characterproperties_cleanup\28\29
+9200:\28anonymous\20namespace\29::_set_add\28USet*\2c\20int\29
+9201:\28anonymous\20namespace\29::_set_addString\28USet*\2c\20char16_t\20const*\2c\20int\29
+9202:\28anonymous\20namespace\29::_set_addRange\28USet*\2c\20int\2c\20int\29
+9203:\28anonymous\20namespace\29::YUVPlanesRec::~YUVPlanesRec\28\29.1
+9204:\28anonymous\20namespace\29::YUVPlanesRec::getCategory\28\29\20const
+9205:\28anonymous\20namespace\29::YUVPlanesRec::diagnostic_only_getDiscardable\28\29\20const
+9206:\28anonymous\20namespace\29::YUVPlanesRec::bytesUsed\28\29\20const
+9207:\28anonymous\20namespace\29::YUVPlanesRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+9208:\28anonymous\20namespace\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\28\29.1
+9209:\28anonymous\20namespace\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\28\29
+9210:\28anonymous\20namespace\29::TriangulatingPathOp::~TriangulatingPathOp\28\29.1
+9211:\28anonymous\20namespace\29::TriangulatingPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9212:\28anonymous\20namespace\29::TriangulatingPathOp::programInfo\28\29
+9213:\28anonymous\20namespace\29::TriangulatingPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+9214:\28anonymous\20namespace\29::TriangulatingPathOp::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9215:\28anonymous\20namespace\29::TriangulatingPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9216:\28anonymous\20namespace\29::TriangulatingPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9217:\28anonymous\20namespace\29::TriangulatingPathOp::name\28\29\20const
+9218:\28anonymous\20namespace\29::TriangulatingPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9219:\28anonymous\20namespace\29::TransformedMaskSubRun::unflattenSize\28\29\20const
+9220:\28anonymous\20namespace\29::TransformedMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+9221:\28anonymous\20namespace\29::TransformedMaskSubRun::instanceFlags\28\29\20const
+9222:\28anonymous\20namespace\29::TransformedMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+9223:\28anonymous\20namespace\29::TransformedMaskSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+9224:\28anonymous\20namespace\29::TransformedMaskSubRun::doFlatten\28SkWriteBuffer&\29\20const
+9225:\28anonymous\20namespace\29::TransformedMaskSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+9226:\28anonymous\20namespace\29::TransformedMaskSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+9227:\28anonymous\20namespace\29::TextureOpImpl::~TextureOpImpl\28\29.1
+9228:\28anonymous\20namespace\29::TextureOpImpl::~TextureOpImpl\28\29
+9229:\28anonymous\20namespace\29::TextureOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9230:\28anonymous\20namespace\29::TextureOpImpl::programInfo\28\29
+9231:\28anonymous\20namespace\29::TextureOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+9232:\28anonymous\20namespace\29::TextureOpImpl::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9233:\28anonymous\20namespace\29::TextureOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9234:\28anonymous\20namespace\29::TextureOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9235:\28anonymous\20namespace\29::TextureOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9236:\28anonymous\20namespace\29::TextureOpImpl::name\28\29\20const
+9237:\28anonymous\20namespace\29::TextureOpImpl::fixedFunctionFlags\28\29\20const
+9238:\28anonymous\20namespace\29::TextureOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9239:\28anonymous\20namespace\29::TentPass::startBlur\28\29
+9240:\28anonymous\20namespace\29::TentPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29
+9241:\28anonymous\20namespace\29::TentPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker::makePass\28void*\2c\20SkArenaAlloc*\29\20const
+9242:\28anonymous\20namespace\29::TentPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker::bufferSizeBytes\28\29\20const
+9243:\28anonymous\20namespace\29::StaticVertexAllocator::~StaticVertexAllocator\28\29.1
+9244:\28anonymous\20namespace\29::StaticVertexAllocator::~StaticVertexAllocator\28\29
+9245:\28anonymous\20namespace\29::StaticVertexAllocator::unlock\28int\29
+9246:\28anonymous\20namespace\29::StaticVertexAllocator::lock\28unsigned\20long\2c\20int\29
+9247:\28anonymous\20namespace\29::SkUnicodeHbScriptRunIterator::currentScript\28\29\20const
+9248:\28anonymous\20namespace\29::SkUnicodeHbScriptRunIterator::consume\28\29
+9249:\28anonymous\20namespace\29::SkUbrkGetLocaleByType<UBreakIterator\20const*\2c\20void>::getLocaleByType\28UBreakIterator\20const*\2c\20ULocDataLocaleType\2c\20UErrorCode*\29
+9250:\28anonymous\20namespace\29::SkUbrkClone<UBreakIterator\20const*\2c\20void>::clone\28UBreakIterator\20const*\2c\20UErrorCode*\29
+9251:\28anonymous\20namespace\29::SkShaderImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9252:\28anonymous\20namespace\29::SkShaderImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9253:\28anonymous\20namespace\29::SkShaderImageFilter::getTypeName\28\29\20const
+9254:\28anonymous\20namespace\29::SkShaderImageFilter::flatten\28SkWriteBuffer&\29\20const
+9255:\28anonymous\20namespace\29::SkShaderImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9256:\28anonymous\20namespace\29::SkMorphologyImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9257:\28anonymous\20namespace\29::SkMorphologyImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9258:\28anonymous\20namespace\29::SkMorphologyImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9259:\28anonymous\20namespace\29::SkMorphologyImageFilter::getTypeName\28\29\20const
+9260:\28anonymous\20namespace\29::SkMorphologyImageFilter::flatten\28SkWriteBuffer&\29\20const
+9261:\28anonymous\20namespace\29::SkMorphologyImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9262:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9263:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9264:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9265:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::getTypeName\28\29\20const
+9266:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::flatten\28SkWriteBuffer&\29\20const
+9267:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9268:\28anonymous\20namespace\29::SkImageImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9269:\28anonymous\20namespace\29::SkImageImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9270:\28anonymous\20namespace\29::SkImageImageFilter::getTypeName\28\29\20const
+9271:\28anonymous\20namespace\29::SkImageImageFilter::flatten\28SkWriteBuffer&\29\20const
+9272:\28anonymous\20namespace\29::SkImageImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9273:\28anonymous\20namespace\29::SkFTGeometrySink::Quad\28FT_Vector_\20const*\2c\20FT_Vector_\20const*\2c\20void*\29
+9274:\28anonymous\20namespace\29::SkFTGeometrySink::Move\28FT_Vector_\20const*\2c\20void*\29
+9275:\28anonymous\20namespace\29::SkFTGeometrySink::Line\28FT_Vector_\20const*\2c\20void*\29
+9276:\28anonymous\20namespace\29::SkFTGeometrySink::Cubic\28FT_Vector_\20const*\2c\20FT_Vector_\20const*\2c\20FT_Vector_\20const*\2c\20void*\29
+9277:\28anonymous\20namespace\29::SkEmptyTypeface::onGetFontDescriptor\28SkFontDescriptor*\2c\20bool*\29\20const
+9278:\28anonymous\20namespace\29::SkEmptyTypeface::onGetFamilyName\28SkString*\29\20const
+9279:\28anonymous\20namespace\29::SkEmptyTypeface::onCreateScalerContext\28SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29\20const
+9280:\28anonymous\20namespace\29::SkEmptyTypeface::onCreateFamilyNameIterator\28\29\20const
+9281:\28anonymous\20namespace\29::SkEmptyTypeface::onCharsToGlyphs\28int\20const*\2c\20int\2c\20unsigned\20short*\29\20const
+9282:\28anonymous\20namespace\29::SkEmptyTypeface::MakeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29
+9283:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9284:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9285:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9286:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::getTypeName\28\29\20const
+9287:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::flatten\28SkWriteBuffer&\29\20const
+9288:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9289:\28anonymous\20namespace\29::SkCropImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9290:\28anonymous\20namespace\29::SkCropImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9291:\28anonymous\20namespace\29::SkCropImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9292:\28anonymous\20namespace\29::SkCropImageFilter::onAffectsTransparentBlack\28\29\20const
+9293:\28anonymous\20namespace\29::SkCropImageFilter::getTypeName\28\29\20const
+9294:\28anonymous\20namespace\29::SkCropImageFilter::flatten\28SkWriteBuffer&\29\20const
+9295:\28anonymous\20namespace\29::SkCropImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9296:\28anonymous\20namespace\29::SkComposeImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9297:\28anonymous\20namespace\29::SkComposeImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9298:\28anonymous\20namespace\29::SkComposeImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9299:\28anonymous\20namespace\29::SkComposeImageFilter::getTypeName\28\29\20const
+9300:\28anonymous\20namespace\29::SkComposeImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9301:\28anonymous\20namespace\29::SkColorFilterImageFilter::onIsColorFilterNode\28SkColorFilter**\29\20const
+9302:\28anonymous\20namespace\29::SkColorFilterImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9303:\28anonymous\20namespace\29::SkColorFilterImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9304:\28anonymous\20namespace\29::SkColorFilterImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9305:\28anonymous\20namespace\29::SkColorFilterImageFilter::onAffectsTransparentBlack\28\29\20const
+9306:\28anonymous\20namespace\29::SkColorFilterImageFilter::getTypeName\28\29\20const
+9307:\28anonymous\20namespace\29::SkColorFilterImageFilter::flatten\28SkWriteBuffer&\29\20const
+9308:\28anonymous\20namespace\29::SkColorFilterImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9309:\28anonymous\20namespace\29::SkBlurImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9310:\28anonymous\20namespace\29::SkBlurImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9311:\28anonymous\20namespace\29::SkBlurImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9312:\28anonymous\20namespace\29::SkBlurImageFilter::getTypeName\28\29\20const
+9313:\28anonymous\20namespace\29::SkBlurImageFilter::flatten\28SkWriteBuffer&\29\20const
+9314:\28anonymous\20namespace\29::SkBlurImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9315:\28anonymous\20namespace\29::SkBlendImageFilter::~SkBlendImageFilter\28\29.1
+9316:\28anonymous\20namespace\29::SkBlendImageFilter::~SkBlendImageFilter\28\29
+9317:\28anonymous\20namespace\29::SkBlendImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9318:\28anonymous\20namespace\29::SkBlendImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+9319:\28anonymous\20namespace\29::SkBlendImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+9320:\28anonymous\20namespace\29::SkBlendImageFilter::onAffectsTransparentBlack\28\29\20const
+9321:\28anonymous\20namespace\29::SkBlendImageFilter::getTypeName\28\29\20const
+9322:\28anonymous\20namespace\29::SkBlendImageFilter::flatten\28SkWriteBuffer&\29\20const
+9323:\28anonymous\20namespace\29::SkBlendImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+9324:\28anonymous\20namespace\29::SkBidiIterator_icu::~SkBidiIterator_icu\28\29.1
+9325:\28anonymous\20namespace\29::SkBidiIterator_icu::~SkBidiIterator_icu\28\29
+9326:\28anonymous\20namespace\29::SkBidiIterator_icu::getLevelAt\28int\29
+9327:\28anonymous\20namespace\29::SkBidiIterator_icu::getLength\28\29
+9328:\28anonymous\20namespace\29::SimpleTriangleShader::name\28\29\20const
+9329:\28anonymous\20namespace\29::SimpleTriangleShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::emitVertexCode\28GrShaderCaps\20const&\2c\20GrPathTessellationShader\20const&\2c\20GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+9330:\28anonymous\20namespace\29::SimpleTriangleShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+9331:\28anonymous\20namespace\29::ShaperHarfBuzz::~ShaperHarfBuzz\28\29.1
+9332:\28anonymous\20namespace\29::ShaperHarfBuzz::shape\28char\20const*\2c\20unsigned\20long\2c\20SkShaper::FontRunIterator&\2c\20SkShaper::BiDiRunIterator&\2c\20SkShaper::ScriptRunIterator&\2c\20SkShaper::LanguageRunIterator&\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+9333:\28anonymous\20namespace\29::ShaperHarfBuzz::shape\28char\20const*\2c\20unsigned\20long\2c\20SkShaper::FontRunIterator&\2c\20SkShaper::BiDiRunIterator&\2c\20SkShaper::ScriptRunIterator&\2c\20SkShaper::LanguageRunIterator&\2c\20SkShaper::Feature\20const*\2c\20unsigned\20long\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+9334:\28anonymous\20namespace\29::ShaperHarfBuzz::shape\28char\20const*\2c\20unsigned\20long\2c\20SkFont\20const&\2c\20bool\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+9335:\28anonymous\20namespace\29::ShapeDontWrapOrReorder::~ShapeDontWrapOrReorder\28\29
+9336:\28anonymous\20namespace\29::ShapeDontWrapOrReorder::wrap\28char\20const*\2c\20unsigned\20long\2c\20SkShaper::BiDiRunIterator\20const&\2c\20SkShaper::LanguageRunIterator\20const&\2c\20SkShaper::ScriptRunIterator\20const&\2c\20SkShaper::FontRunIterator\20const&\2c\20\28anonymous\20namespace\29::RunIteratorQueue&\2c\20SkShaper::Feature\20const*\2c\20unsigned\20long\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+9337:\28anonymous\20namespace\29::ShadowInvalidator::~ShadowInvalidator\28\29.1
+9338:\28anonymous\20namespace\29::ShadowInvalidator::~ShadowInvalidator\28\29
+9339:\28anonymous\20namespace\29::ShadowInvalidator::changed\28\29
+9340:\28anonymous\20namespace\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\28\29.1
+9341:\28anonymous\20namespace\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\28\29
+9342:\28anonymous\20namespace\29::ShadowCircularRRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9343:\28anonymous\20namespace\29::ShadowCircularRRectOp::programInfo\28\29
+9344:\28anonymous\20namespace\29::ShadowCircularRRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+9345:\28anonymous\20namespace\29::ShadowCircularRRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9346:\28anonymous\20namespace\29::ShadowCircularRRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9347:\28anonymous\20namespace\29::ShadowCircularRRectOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9348:\28anonymous\20namespace\29::ShadowCircularRRectOp::name\28\29\20const
+9349:\28anonymous\20namespace\29::ShadowCircularRRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9350:\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29.1
+9351:\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29
+9352:\28anonymous\20namespace\29::SDFTSubRun::vertexStride\28SkMatrix\20const&\29\20const
+9353:\28anonymous\20namespace\29::SDFTSubRun::unflattenSize\28\29\20const
+9354:\28anonymous\20namespace\29::SDFTSubRun::testingOnly_packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29\20const
+9355:\28anonymous\20namespace\29::SDFTSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+9356:\28anonymous\20namespace\29::SDFTSubRun::glyphs\28\29\20const
+9357:\28anonymous\20namespace\29::SDFTSubRun::glyphCount\28\29\20const
+9358:\28anonymous\20namespace\29::SDFTSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+9359:\28anonymous\20namespace\29::SDFTSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+9360:\28anonymous\20namespace\29::SDFTSubRun::doFlatten\28SkWriteBuffer&\29\20const
+9361:\28anonymous\20namespace\29::SDFTSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+9362:\28anonymous\20namespace\29::SDFTSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+9363:\28anonymous\20namespace\29::RectsBlurRec::~RectsBlurRec\28\29.1
+9364:\28anonymous\20namespace\29::RectsBlurRec::~RectsBlurRec\28\29
+9365:\28anonymous\20namespace\29::RectsBlurRec::getCategory\28\29\20const
+9366:\28anonymous\20namespace\29::RectsBlurRec::diagnostic_only_getDiscardable\28\29\20const
+9367:\28anonymous\20namespace\29::RectsBlurRec::bytesUsed\28\29\20const
+9368:\28anonymous\20namespace\29::RectsBlurRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+9369:\28anonymous\20namespace\29::RRectBlurRec::~RRectBlurRec\28\29.1
+9370:\28anonymous\20namespace\29::RRectBlurRec::~RRectBlurRec\28\29
+9371:\28anonymous\20namespace\29::RRectBlurRec::getCategory\28\29\20const
+9372:\28anonymous\20namespace\29::RRectBlurRec::diagnostic_only_getDiscardable\28\29\20const
+9373:\28anonymous\20namespace\29::RRectBlurRec::bytesUsed\28\29\20const
+9374:\28anonymous\20namespace\29::RRectBlurRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+9375:\28anonymous\20namespace\29::PathSubRun::~PathSubRun\28\29.1
+9376:\28anonymous\20namespace\29::PathSubRun::~PathSubRun\28\29
+9377:\28anonymous\20namespace\29::PathSubRun::unflattenSize\28\29\20const
+9378:\28anonymous\20namespace\29::PathSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+9379:\28anonymous\20namespace\29::PathSubRun::doFlatten\28SkWriteBuffer&\29\20const
+9380:\28anonymous\20namespace\29::PathSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+9381:\28anonymous\20namespace\29::MipMapRec::~MipMapRec\28\29.1
+9382:\28anonymous\20namespace\29::MipMapRec::~MipMapRec\28\29
+9383:\28anonymous\20namespace\29::MipMapRec::getCategory\28\29\20const
+9384:\28anonymous\20namespace\29::MipMapRec::diagnostic_only_getDiscardable\28\29\20const
+9385:\28anonymous\20namespace\29::MipMapRec::bytesUsed\28\29\20const
+9386:\28anonymous\20namespace\29::MipMapRec::Finder\28SkResourceCache::Rec\20const&\2c\20void*\29
+9387:\28anonymous\20namespace\29::MiddleOutShader::~MiddleOutShader\28\29.1
+9388:\28anonymous\20namespace\29::MiddleOutShader::~MiddleOutShader\28\29
+9389:\28anonymous\20namespace\29::MiddleOutShader::name\28\29\20const
+9390:\28anonymous\20namespace\29::MiddleOutShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::emitVertexCode\28GrShaderCaps\20const&\2c\20GrPathTessellationShader\20const&\2c\20GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+9391:\28anonymous\20namespace\29::MiddleOutShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+9392:\28anonymous\20namespace\29::MiddleOutShader::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+9393:\28anonymous\20namespace\29::MeshOp::~MeshOp\28\29.1
+9394:\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9395:\28anonymous\20namespace\29::MeshOp::programInfo\28\29
+9396:\28anonymous\20namespace\29::MeshOp::onPrepareDraws\28GrMeshDrawTarget*\29
+9397:\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9398:\28anonymous\20namespace\29::MeshOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9399:\28anonymous\20namespace\29::MeshOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9400:\28anonymous\20namespace\29::MeshOp::name\28\29\20const
+9401:\28anonymous\20namespace\29::MeshOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9402:\28anonymous\20namespace\29::MeshGP::~MeshGP\28\29.1
+9403:\28anonymous\20namespace\29::MeshGP::onTextureSampler\28int\29\20const
+9404:\28anonymous\20namespace\29::MeshGP::name\28\29\20const
+9405:\28anonymous\20namespace\29::MeshGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+9406:\28anonymous\20namespace\29::MeshGP::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+9407:\28anonymous\20namespace\29::MeshGP::Impl::~Impl\28\29.1
+9408:\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+9409:\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+9410:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::toLinearSrgb\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+9411:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::sampleShader\28int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+9412:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::sampleColorFilter\28int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+9413:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::sampleBlender\28int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+9414:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::getMangledName\28char\20const*\29
+9415:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::getMainName\28\29
+9416:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::fromLinearSrgb\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+9417:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::defineFunction\28char\20const*\2c\20char\20const*\2c\20bool\29
+9418:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::declareUniform\28SkSL::VarDeclaration\20const*\29
+9419:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::declareFunction\28char\20const*\29
+9420:\28anonymous\20namespace\29::ImageFromPictureRec::~ImageFromPictureRec\28\29.1
+9421:\28anonymous\20namespace\29::ImageFromPictureRec::~ImageFromPictureRec\28\29
+9422:\28anonymous\20namespace\29::ImageFromPictureRec::getCategory\28\29\20const
+9423:\28anonymous\20namespace\29::ImageFromPictureRec::bytesUsed\28\29\20const
+9424:\28anonymous\20namespace\29::ImageFromPictureRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+9425:\28anonymous\20namespace\29::HQDownSampler::buildLevel\28SkPixmap\20const&\2c\20SkPixmap\20const&\29
+9426:\28anonymous\20namespace\29::GaussPass::startBlur\28\29
+9427:\28anonymous\20namespace\29::GaussPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29
+9428:\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker::makePass\28void*\2c\20SkArenaAlloc*\29\20const
+9429:\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker::bufferSizeBytes\28\29\20const
+9430:\28anonymous\20namespace\29::FillRectOpImpl::~FillRectOpImpl\28\29.1
+9431:\28anonymous\20namespace\29::FillRectOpImpl::~FillRectOpImpl\28\29
+9432:\28anonymous\20namespace\29::FillRectOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9433:\28anonymous\20namespace\29::FillRectOpImpl::programInfo\28\29
+9434:\28anonymous\20namespace\29::FillRectOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+9435:\28anonymous\20namespace\29::FillRectOpImpl::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9436:\28anonymous\20namespace\29::FillRectOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9437:\28anonymous\20namespace\29::FillRectOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9438:\28anonymous\20namespace\29::FillRectOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9439:\28anonymous\20namespace\29::FillRectOpImpl::name\28\29\20const
+9440:\28anonymous\20namespace\29::FillRectOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9441:\28anonymous\20namespace\29::EllipticalRRectEffect::onMakeProgramImpl\28\29\20const
+9442:\28anonymous\20namespace\29::EllipticalRRectEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+9443:\28anonymous\20namespace\29::EllipticalRRectEffect::name\28\29\20const
+9444:\28anonymous\20namespace\29::EllipticalRRectEffect::clone\28\29\20const
+9445:\28anonymous\20namespace\29::EllipticalRRectEffect::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+9446:\28anonymous\20namespace\29::EllipticalRRectEffect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+9447:\28anonymous\20namespace\29::DrawableSubRun::~DrawableSubRun\28\29.1
+9448:\28anonymous\20namespace\29::DrawableSubRun::~DrawableSubRun\28\29
+9449:\28anonymous\20namespace\29::DrawableSubRun::unflattenSize\28\29\20const
+9450:\28anonymous\20namespace\29::DrawableSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+9451:\28anonymous\20namespace\29::DrawableSubRun::doFlatten\28SkWriteBuffer&\29\20const
+9452:\28anonymous\20namespace\29::DrawableSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+9453:\28anonymous\20namespace\29::DrawAtlasPathShader::~DrawAtlasPathShader\28\29.1
+9454:\28anonymous\20namespace\29::DrawAtlasPathShader::~DrawAtlasPathShader\28\29
+9455:\28anonymous\20namespace\29::DrawAtlasPathShader::onTextureSampler\28int\29\20const
+9456:\28anonymous\20namespace\29::DrawAtlasPathShader::name\28\29\20const
+9457:\28anonymous\20namespace\29::DrawAtlasPathShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+9458:\28anonymous\20namespace\29::DrawAtlasPathShader::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+9459:\28anonymous\20namespace\29::DrawAtlasPathShader::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+9460:\28anonymous\20namespace\29::DrawAtlasPathShader::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+9461:\28anonymous\20namespace\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\28\29.1
+9462:\28anonymous\20namespace\29::DrawAtlasOpImpl::~DrawAtlasOpImpl\28\29
+9463:\28anonymous\20namespace\29::DrawAtlasOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+9464:\28anonymous\20namespace\29::DrawAtlasOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9465:\28anonymous\20namespace\29::DrawAtlasOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9466:\28anonymous\20namespace\29::DrawAtlasOpImpl::name\28\29\20const
+9467:\28anonymous\20namespace\29::DrawAtlasOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9468:\28anonymous\20namespace\29::DirectMaskSubRun::vertexStride\28SkMatrix\20const&\29\20const
+9469:\28anonymous\20namespace\29::DirectMaskSubRun::unflattenSize\28\29\20const
+9470:\28anonymous\20namespace\29::DirectMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+9471:\28anonymous\20namespace\29::DirectMaskSubRun::instanceFlags\28\29\20const
+9472:\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+9473:\28anonymous\20namespace\29::DirectMaskSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+9474:\28anonymous\20namespace\29::DirectMaskSubRun::doFlatten\28SkWriteBuffer&\29\20const
+9475:\28anonymous\20namespace\29::DirectMaskSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+9476:\28anonymous\20namespace\29::DirectMaskSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+9477:\28anonymous\20namespace\29::DefaultPathOp::~DefaultPathOp\28\29.1
+9478:\28anonymous\20namespace\29::DefaultPathOp::~DefaultPathOp\28\29
+9479:\28anonymous\20namespace\29::DefaultPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9480:\28anonymous\20namespace\29::DefaultPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+9481:\28anonymous\20namespace\29::DefaultPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9482:\28anonymous\20namespace\29::DefaultPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9483:\28anonymous\20namespace\29::DefaultPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9484:\28anonymous\20namespace\29::DefaultPathOp::name\28\29\20const
+9485:\28anonymous\20namespace\29::DefaultPathOp::fixedFunctionFlags\28\29\20const
+9486:\28anonymous\20namespace\29::DefaultPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9487:\28anonymous\20namespace\29::CircularRRectEffect::onMakeProgramImpl\28\29\20const
+9488:\28anonymous\20namespace\29::CircularRRectEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+9489:\28anonymous\20namespace\29::CircularRRectEffect::name\28\29\20const
+9490:\28anonymous\20namespace\29::CircularRRectEffect::clone\28\29\20const
+9491:\28anonymous\20namespace\29::CircularRRectEffect::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+9492:\28anonymous\20namespace\29::CircularRRectEffect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+9493:\28anonymous\20namespace\29::CachedTessellationsRec::~CachedTessellationsRec\28\29.1
+9494:\28anonymous\20namespace\29::CachedTessellationsRec::~CachedTessellationsRec\28\29
+9495:\28anonymous\20namespace\29::CachedTessellationsRec::getCategory\28\29\20const
+9496:\28anonymous\20namespace\29::CachedTessellationsRec::bytesUsed\28\29\20const
+9497:\28anonymous\20namespace\29::CachedTessellations::~CachedTessellations\28\29.1
+9498:\28anonymous\20namespace\29::CacheImpl::~CacheImpl\28\29.1
+9499:\28anonymous\20namespace\29::CacheImpl::set\28SkImageFilterCacheKey\20const&\2c\20SkImageFilter\20const*\2c\20skif::FilterResult\20const&\29
+9500:\28anonymous\20namespace\29::CacheImpl::purge\28\29
+9501:\28anonymous\20namespace\29::CacheImpl::purgeByImageFilter\28SkImageFilter\20const*\29
+9502:\28anonymous\20namespace\29::CacheImpl::get\28SkImageFilterCacheKey\20const&\2c\20skif::FilterResult*\29\20const
+9503:\28anonymous\20namespace\29::BoundingBoxShader::name\28\29\20const
+9504:\28anonymous\20namespace\29::BoundingBoxShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+9505:\28anonymous\20namespace\29::BoundingBoxShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+9506:\28anonymous\20namespace\29::BoundingBoxShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+9507:\28anonymous\20namespace\29::AAHairlineOp::~AAHairlineOp\28\29.1
+9508:\28anonymous\20namespace\29::AAHairlineOp::~AAHairlineOp\28\29
+9509:\28anonymous\20namespace\29::AAHairlineOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+9510:\28anonymous\20namespace\29::AAHairlineOp::onPrepareDraws\28GrMeshDrawTarget*\29
+9511:\28anonymous\20namespace\29::AAHairlineOp::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9512:\28anonymous\20namespace\29::AAHairlineOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+9513:\28anonymous\20namespace\29::AAHairlineOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+9514:\28anonymous\20namespace\29::AAHairlineOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+9515:\28anonymous\20namespace\29::AAHairlineOp::name\28\29\20const
+9516:\28anonymous\20namespace\29::AAHairlineOp::fixedFunctionFlags\28\29\20const
+9517:\28anonymous\20namespace\29::AAHairlineOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+9518:YuvToRgbaRow
+9519:YuvToRgba4444Row
+9520:YuvToRgbRow
+9521:YuvToRgb565Row
+9522:YuvToBgraRow
+9523:YuvToBgrRow
+9524:YuvToArgbRow
+9525:Write_CVT_Stretched
+9526:Write_CVT
+9527:WebPYuv444ToRgba_C
+9528:WebPYuv444ToRgba4444_C
+9529:WebPYuv444ToRgb_C
+9530:WebPYuv444ToRgb565_C
+9531:WebPYuv444ToBgra_C
+9532:WebPYuv444ToBgr_C
+9533:WebPYuv444ToArgb_C
+9534:WebPRescalerImportRowShrink_C
+9535:WebPRescalerImportRowExpand_C
+9536:WebPRescalerExportRowShrink_C
+9537:WebPRescalerExportRowExpand_C
+9538:WebPMultRow_C
+9539:WebPMultARGBRow_C
+9540:WebPConvertRGBA32ToUV_C
+9541:WebPConvertARGBToUV_C
+9542:WebGLTextureImageGenerator::~WebGLTextureImageGenerator\28\29.1
+9543:WebGLTextureImageGenerator::~WebGLTextureImageGenerator\28\29
+9544:WebGLTextureImageGenerator::generateExternalTexture\28GrRecordingContext*\2c\20skgpu::Mipmapped\29
+9545:Vertish_SkAntiHairBlitter::drawLine\28int\2c\20int\2c\20int\2c\20int\29
+9546:Vertish_SkAntiHairBlitter::drawCap\28int\2c\20int\2c\20int\2c\20int\29
+9547:VerticalUnfilter_C
+9548:VerticalFilter_C
+9549:VertState::Triangles\28VertState*\29
+9550:VertState::TrianglesX\28VertState*\29
+9551:VertState::TriangleStrip\28VertState*\29
+9552:VertState::TriangleStripX\28VertState*\29
+9553:VertState::TriangleFan\28VertState*\29
+9554:VertState::TriangleFanX\28VertState*\29
+9555:VR4_C
+9556:VP8LTransformColorInverse_C
+9557:VP8LPredictor9_C
+9558:VP8LPredictor8_C
+9559:VP8LPredictor7_C
+9560:VP8LPredictor6_C
+9561:VP8LPredictor5_C
+9562:VP8LPredictor4_C
+9563:VP8LPredictor3_C
+9564:VP8LPredictor2_C
+9565:VP8LPredictor1_C
+9566:VP8LPredictor13_C
+9567:VP8LPredictor12_C
+9568:VP8LPredictor11_C
+9569:VP8LPredictor10_C
+9570:VP8LPredictor0_C
+9571:VP8LConvertBGRAToRGB_C
+9572:VP8LConvertBGRAToRGBA_C
+9573:VP8LConvertBGRAToRGBA4444_C
+9574:VP8LConvertBGRAToRGB565_C
+9575:VP8LConvertBGRAToBGR_C
+9576:VP8LAddGreenToBlueAndRed_C
+9577:VLine_SkAntiHairBlitter::drawLine\28int\2c\20int\2c\20int\2c\20int\29
+9578:VLine_SkAntiHairBlitter::drawCap\28int\2c\20int\2c\20int\2c\20int\29
+9579:VL4_C
+9580:VFilter8i_C
+9581:VFilter8_C
+9582:VFilter16i_C
+9583:VFilter16_C
+9584:VE8uv_C
+9585:VE4_C
+9586:VE16_C
+9587:UpsampleRgbaLinePair_C
+9588:UpsampleRgba4444LinePair_C
+9589:UpsampleRgbLinePair_C
+9590:UpsampleRgb565LinePair_C
+9591:UpsampleBgraLinePair_C
+9592:UpsampleBgrLinePair_C
+9593:UpsampleArgbLinePair_C
+9594:UnresolvedCodepoints\28skia::textlayout::Paragraph&\29
+9595:UnicodeString_charAt\28int\2c\20void*\29
+9596:TransformWHT_C
+9597:TransformUV_C
+9598:TransformTwo_C
+9599:TransformDC_C
+9600:TransformDCUV_C
+9601:TransformAC3_C
+9602:ToSVGString\28SkPath\20const&\29
+9603:ToCmds\28SkPath\20const&\29
+9604:TT_Set_MM_Blend
+9605:TT_RunIns
+9606:TT_Load_Simple_Glyph
+9607:TT_Load_Glyph_Header
+9608:TT_Load_Composite_Glyph
+9609:TT_Get_Var_Design
+9610:TT_Get_MM_Blend
+9611:TT_Forget_Glyph_Frame
+9612:TT_Access_Glyph_Frame
+9613:TM8uv_C
+9614:TM4_C
+9615:TM16_C
+9616:Sync
+9617:SquareCapper\28SkPath*\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPath*\29
+9618:Sprite_D32_S32::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+9619:SkWuffsFrameHolder::onGetFrame\28int\29\20const
+9620:SkWuffsCodec::~SkWuffsCodec\28\29.1
+9621:SkWuffsCodec::~SkWuffsCodec\28\29
+9622:SkWuffsCodec::onIncrementalDecode\28int*\29
+9623:SkWuffsCodec::onGetRepetitionCount\28\29
+9624:SkWuffsCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+9625:SkWuffsCodec::onGetFrameInfo\28int\2c\20SkCodec::FrameInfo*\29\20const
+9626:SkWuffsCodec::onGetFrameCount\28\29
+9627:SkWuffsCodec::getFrameHolder\28\29\20const
+9628:SkWriteICCProfile\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+9629:SkWebpDecoder::IsWebp\28void\20const*\2c\20unsigned\20long\29
+9630:SkWebpDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+9631:SkWebpCodec::~SkWebpCodec\28\29.1
+9632:SkWebpCodec::~SkWebpCodec\28\29
+9633:SkWebpCodec::onGetValidSubset\28SkIRect*\29\20const
+9634:SkWebpCodec::onGetRepetitionCount\28\29
+9635:SkWebpCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+9636:SkWebpCodec::onGetFrameInfo\28int\2c\20SkCodec::FrameInfo*\29\20const
+9637:SkWebpCodec::onGetFrameCount\28\29
+9638:SkWebpCodec::getFrameHolder\28\29\20const
+9639:SkWebpCodec::FrameHolder::~FrameHolder\28\29.1
+9640:SkWebpCodec::FrameHolder::~FrameHolder\28\29
+9641:SkWebpCodec::FrameHolder::onGetFrame\28int\29\20const
+9642:SkWeakRefCnt::internal_dispose\28\29\20const
+9643:SkWbmpDecoder::IsWbmp\28void\20const*\2c\20unsigned\20long\29
+9644:SkWbmpDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+9645:SkWbmpCodec::~SkWbmpCodec\28\29.1
+9646:SkWbmpCodec::~SkWbmpCodec\28\29
+9647:SkWbmpCodec::onStartScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+9648:SkWbmpCodec::onSkipScanlines\28int\29
+9649:SkWbmpCodec::onRewind\28\29
+9650:SkWbmpCodec::onGetScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+9651:SkWbmpCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+9652:SkWbmpCodec::getSampler\28bool\29
+9653:SkWbmpCodec::conversionSupported\28SkImageInfo\20const&\2c\20bool\2c\20bool\29
+9654:SkVertices::Builder*\20emscripten::internal::operator_new<SkVertices::Builder\2c\20SkVertices::VertexMode\2c\20int\2c\20int\2c\20unsigned\20int>\28SkVertices::VertexMode&&\2c\20int&&\2c\20int&&\2c\20unsigned\20int&&\29
+9655:SkUserTypeface::~SkUserTypeface\28\29.1
+9656:SkUserTypeface::~SkUserTypeface\28\29
+9657:SkUserTypeface::onOpenStream\28int*\29\20const
+9658:SkUserTypeface::onGetUPEM\28\29\20const
+9659:SkUserTypeface::onGetFontDescriptor\28SkFontDescriptor*\2c\20bool*\29\20const
+9660:SkUserTypeface::onGetFamilyName\28SkString*\29\20const
+9661:SkUserTypeface::onFilterRec\28SkScalerContextRec*\29\20const
+9662:SkUserTypeface::onCreateScalerContext\28SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29\20const
+9663:SkUserTypeface::onCountGlyphs\28\29\20const
+9664:SkUserTypeface::onComputeBounds\28SkRect*\29\20const
+9665:SkUserTypeface::onCharsToGlyphs\28int\20const*\2c\20int\2c\20unsigned\20short*\29\20const
+9666:SkUserTypeface::getGlyphToUnicodeMap\28int*\29\20const
+9667:SkUserScalerContext::~SkUserScalerContext\28\29
+9668:SkUserScalerContext::generatePath\28SkGlyph\20const&\2c\20SkPath*\29
+9669:SkUserScalerContext::generateMetrics\28SkGlyph\20const&\2c\20SkArenaAlloc*\29
+9670:SkUserScalerContext::generateImage\28SkGlyph\20const&\2c\20void*\29
+9671:SkUserScalerContext::generateFontMetrics\28SkFontMetrics*\29
+9672:SkUserScalerContext::generateDrawable\28SkGlyph\20const&\29::DrawableMatrixWrapper::~DrawableMatrixWrapper\28\29.1
+9673:SkUserScalerContext::generateDrawable\28SkGlyph\20const&\29::DrawableMatrixWrapper::~DrawableMatrixWrapper\28\29
+9674:SkUserScalerContext::generateDrawable\28SkGlyph\20const&\29::DrawableMatrixWrapper::onGetBounds\28\29
+9675:SkUserScalerContext::generateDrawable\28SkGlyph\20const&\29::DrawableMatrixWrapper::onDraw\28SkCanvas*\29
+9676:SkUserScalerContext::generateDrawable\28SkGlyph\20const&\29::DrawableMatrixWrapper::onApproximateBytesUsed\28\29
+9677:SkUserScalerContext::generateDrawable\28SkGlyph\20const&\29
+9678:SkUnicode_icu::toUpper\28SkString\20const&\29
+9679:SkUnicode_icu::reorderVisual\28unsigned\20char\20const*\2c\20int\2c\20int*\29
+9680:SkUnicode_icu::makeBreakIterator\28char\20const*\2c\20SkUnicode::BreakType\29
+9681:SkUnicode_icu::makeBreakIterator\28SkUnicode::BreakType\29
+9682:SkUnicode_icu::makeBidiIterator\28unsigned\20short\20const*\2c\20int\2c\20SkBidiIterator::Direction\29
+9683:SkUnicode_icu::makeBidiIterator\28char\20const*\2c\20int\2c\20SkBidiIterator::Direction\29
+9684:SkUnicode_icu::isWhitespace\28int\29
+9685:SkUnicode_icu::isTabulation\28int\29
+9686:SkUnicode_icu::isSpace\28int\29
+9687:SkUnicode_icu::isIdeographic\28int\29
+9688:SkUnicode_icu::isHardBreak\28int\29
+9689:SkUnicode_icu::isEmoji\28int\29
+9690:SkUnicode_icu::isControl\28int\29
+9691:SkUnicode_icu::getWords\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29
+9692:SkUnicode_icu::getUtf8Words\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29
+9693:SkUnicode_icu::getSentences\28char\20const*\2c\20int\2c\20char\20const*\2c\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>*\29
+9694:SkUnicode_icu::getBidiRegions\28char\20const*\2c\20int\2c\20SkUnicode::TextDirection\2c\20std::__2::vector<SkUnicode::BidiRegion\2c\20std::__2::allocator<SkUnicode::BidiRegion>>*\29
+9695:SkUnicode_icu::copy\28\29
+9696:SkUnicode_icu::computeCodeUnitFlags\28char16_t*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29
+9697:SkUnicode_icu::computeCodeUnitFlags\28char*\2c\20int\2c\20bool\2c\20skia_private::TArray<SkUnicode::CodeUnitFlags\2c\20true>*\29
+9698:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\28\29.1
+9699:SkUnicodeBidiRunIterator::~SkUnicodeBidiRunIterator\28\29
+9700:SkUnicodeBidiRunIterator::endOfCurrentRun\28\29\20const
+9701:SkUnicodeBidiRunIterator::currentLevel\28\29\20const
+9702:SkUnicodeBidiRunIterator::consume\28\29
+9703:SkUnicodeBidiRunIterator::atEnd\28\29\20const
+9704:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\28\29.1
+9705:SkTypeface_FreeTypeStream::~SkTypeface_FreeTypeStream\28\29
+9706:SkTypeface_FreeTypeStream::onOpenStream\28int*\29\20const
+9707:SkTypeface_FreeTypeStream::onMakeFontData\28\29\20const
+9708:SkTypeface_FreeTypeStream::onMakeClone\28SkFontArguments\20const&\29\20const
+9709:SkTypeface_FreeTypeStream::onGetFontDescriptor\28SkFontDescriptor*\2c\20bool*\29\20const
+9710:SkTypeface_FreeType::onGlyphMaskNeedsCurrentColor\28\29\20const
+9711:SkTypeface_FreeType::onGetVariationDesignPosition\28SkFontArguments::VariationPosition::Coordinate*\2c\20int\29\20const
+9712:SkTypeface_FreeType::onGetVariationDesignParameters\28SkFontParameters::Variation::Axis*\2c\20int\29\20const
+9713:SkTypeface_FreeType::onGetUPEM\28\29\20const
+9714:SkTypeface_FreeType::onGetTableTags\28unsigned\20int*\29\20const
+9715:SkTypeface_FreeType::onGetTableData\28unsigned\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20void*\29\20const
+9716:SkTypeface_FreeType::onGetPostScriptName\28SkString*\29\20const
+9717:SkTypeface_FreeType::onGetKerningPairAdjustments\28unsigned\20short\20const*\2c\20int\2c\20int*\29\20const
+9718:SkTypeface_FreeType::onGetAdvancedMetrics\28\29\20const
+9719:SkTypeface_FreeType::onFilterRec\28SkScalerContextRec*\29\20const
+9720:SkTypeface_FreeType::onCreateScalerContext\28SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29\20const
+9721:SkTypeface_FreeType::onCreateFamilyNameIterator\28\29\20const
+9722:SkTypeface_FreeType::onCountGlyphs\28\29\20const
+9723:SkTypeface_FreeType::onCopyTableData\28unsigned\20int\29\20const
+9724:SkTypeface_FreeType::onCharsToGlyphs\28int\20const*\2c\20int\2c\20unsigned\20short*\29\20const
+9725:SkTypeface_FreeType::getPostScriptGlyphNames\28SkString*\29\20const
+9726:SkTypeface_FreeType::getGlyphToUnicodeMap\28int*\29\20const
+9727:SkTypeface_Empty::~SkTypeface_Empty\28\29
+9728:SkTypeface_Custom::~SkTypeface_Custom\28\29.1
+9729:SkTypeface_Custom::onGetFontDescriptor\28SkFontDescriptor*\2c\20bool*\29\20const
+9730:SkTypeface::onCopyTableData\28unsigned\20int\29\20const
+9731:SkTypeface::onComputeBounds\28SkRect*\29\20const
+9732:SkTrimPE::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+9733:SkTrimPE::getTypeName\28\29\20const
+9734:SkTriColorShader::type\28\29\20const
+9735:SkTriColorShader::isOpaque\28\29\20const
+9736:SkTriColorShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+9737:SkTransformShader::type\28\29\20const
+9738:SkTransformShader::isOpaque\28\29\20const
+9739:SkTransformShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+9740:SkTQuad::subDivide\28double\2c\20double\2c\20SkTCurve*\29\20const
+9741:SkTQuad::setBounds\28SkDRect*\29\20const
+9742:SkTQuad::ptAtT\28double\29\20const
+9743:SkTQuad::make\28SkArenaAlloc&\29\20const
+9744:SkTQuad::intersectRay\28SkIntersections*\2c\20SkDLine\20const&\29\20const
+9745:SkTQuad::hullIntersects\28SkTCurve\20const&\2c\20bool*\29\20const
+9746:SkTQuad::dxdyAtT\28double\29\20const
+9747:SkTQuad::debugInit\28\29
+9748:SkTCubic::subDivide\28double\2c\20double\2c\20SkTCurve*\29\20const
+9749:SkTCubic::setBounds\28SkDRect*\29\20const
+9750:SkTCubic::ptAtT\28double\29\20const
+9751:SkTCubic::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+9752:SkTCubic::make\28SkArenaAlloc&\29\20const
+9753:SkTCubic::intersectRay\28SkIntersections*\2c\20SkDLine\20const&\29\20const
+9754:SkTCubic::hullIntersects\28SkTCurve\20const&\2c\20bool*\29\20const
+9755:SkTCubic::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+9756:SkTCubic::dxdyAtT\28double\29\20const
+9757:SkTCubic::debugInit\28\29
+9758:SkTCubic::controlsInside\28\29\20const
+9759:SkTCubic::collapsed\28\29\20const
+9760:SkTConic::subDivide\28double\2c\20double\2c\20SkTCurve*\29\20const
+9761:SkTConic::setBounds\28SkDRect*\29\20const
+9762:SkTConic::ptAtT\28double\29\20const
+9763:SkTConic::make\28SkArenaAlloc&\29\20const
+9764:SkTConic::intersectRay\28SkIntersections*\2c\20SkDLine\20const&\29\20const
+9765:SkTConic::hullIntersects\28SkTCurve\20const&\2c\20bool*\29\20const
+9766:SkTConic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+9767:SkTConic::dxdyAtT\28double\29\20const
+9768:SkTConic::debugInit\28\29
+9769:SkSwizzler::onSetSampleX\28int\29
+9770:SkSwizzler::fillWidth\28\29\20const
+9771:SkSweepGradient::getTypeName\28\29\20const
+9772:SkSweepGradient::flatten\28SkWriteBuffer&\29\20const
+9773:SkSweepGradient::asGradient\28SkShaderBase::GradientInfo*\2c\20SkMatrix*\29\20const
+9774:SkSweepGradient::appendGradientStages\28SkArenaAlloc*\2c\20SkRasterPipeline*\2c\20SkRasterPipeline*\29\20const
+9775:SkSurface_Raster::~SkSurface_Raster\28\29.1
+9776:SkSurface_Raster::~SkSurface_Raster\28\29
+9777:SkSurface_Raster::onWritePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+9778:SkSurface_Raster::onRestoreBackingMutability\28\29
+9779:SkSurface_Raster::onNewSurface\28SkImageInfo\20const&\29
+9780:SkSurface_Raster::onNewImageSnapshot\28SkIRect\20const*\29
+9781:SkSurface_Raster::onNewCanvas\28\29
+9782:SkSurface_Raster::onDraw\28SkCanvas*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+9783:SkSurface_Raster::onCopyOnWrite\28SkSurface::ContentChangeMode\29
+9784:SkSurface_Raster::imageInfo\28\29\20const
+9785:SkSurface_Ganesh::~SkSurface_Ganesh\28\29.1
+9786:SkSurface_Ganesh::~SkSurface_Ganesh\28\29
+9787:SkSurface_Ganesh::replaceBackendTexture\28GrBackendTexture\20const&\2c\20GrSurfaceOrigin\2c\20SkSurface::ContentChangeMode\2c\20void\20\28*\29\28void*\29\2c\20void*\29
+9788:SkSurface_Ganesh::onWritePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+9789:SkSurface_Ganesh::onWait\28int\2c\20GrBackendSemaphore\20const*\2c\20bool\29
+9790:SkSurface_Ganesh::onNewSurface\28SkImageInfo\20const&\29
+9791:SkSurface_Ganesh::onNewImageSnapshot\28SkIRect\20const*\29
+9792:SkSurface_Ganesh::onNewCanvas\28\29
+9793:SkSurface_Ganesh::onIsCompatible\28GrSurfaceCharacterization\20const&\29\20const
+9794:SkSurface_Ganesh::onGetRecordingContext\28\29\20const
+9795:SkSurface_Ganesh::onDraw\28SkCanvas*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+9796:SkSurface_Ganesh::onDiscard\28\29
+9797:SkSurface_Ganesh::onCopyOnWrite\28SkSurface::ContentChangeMode\29
+9798:SkSurface_Ganesh::onCharacterize\28GrSurfaceCharacterization*\29\20const
+9799:SkSurface_Ganesh::onCapabilities\28\29
+9800:SkSurface_Ganesh::onAsyncRescaleAndReadPixels\28SkImageInfo\20const&\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+9801:SkSurface_Ganesh::onAsyncRescaleAndReadPixelsYUV420\28SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+9802:SkSurface_Ganesh::imageInfo\28\29\20const
+9803:SkSurface_Base::onAsyncRescaleAndReadPixels\28SkImageInfo\20const&\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+9804:SkSurface::imageInfo\28\29\20const
+9805:SkStrikeCache::~SkStrikeCache\28\29.1
+9806:SkStrikeCache::~SkStrikeCache\28\29
+9807:SkStrikeCache::findOrCreateScopedStrike\28SkStrikeSpec\20const&\29
+9808:SkStrike::~SkStrike\28\29.1
+9809:SkStrike::~SkStrike\28\29
+9810:SkStrike::strikePromise\28\29
+9811:SkStrike::roundingSpec\28\29\20const
+9812:SkStrike::prepareForPath\28SkGlyph*\29
+9813:SkStrike::prepareForImage\28SkGlyph*\29
+9814:SkStrike::prepareForDrawable\28SkGlyph*\29
+9815:SkStrike::getDescriptor\28\29\20const
+9816:SkSpriteBlitter_Memcpy::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+9817:SkSpriteBlitter::~SkSpriteBlitter\28\29.1
+9818:SkSpriteBlitter::setup\28SkPixmap\20const&\2c\20int\2c\20int\2c\20SkPaint\20const&\29
+9819:SkSpriteBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+9820:SkSpriteBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+9821:SkSpriteBlitter::blitH\28int\2c\20int\2c\20int\29
+9822:SkSpecialImage_Raster::~SkSpecialImage_Raster\28\29.1
+9823:SkSpecialImage_Raster::~SkSpecialImage_Raster\28\29
+9824:SkSpecialImage_Raster::onMakeSubset\28SkIRect\20const&\29\20const
+9825:SkSpecialImage_Raster::onGetROPixels\28SkBitmap*\29\20const
+9826:SkSpecialImage_Raster::onDraw\28SkCanvas*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29\20const
+9827:SkSpecialImage_Raster::onAsShader\28SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const&\29\20const
+9828:SkSpecialImage_Raster::onAsImage\28SkIRect\20const*\29\20const
+9829:SkSpecialImage_Raster::getSize\28\29\20const
+9830:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\28\29.1
+9831:SkSpecialImage_Gpu::~SkSpecialImage_Gpu\28\29
+9832:SkSpecialImage_Gpu::onMakeSubset\28SkIRect\20const&\29\20const
+9833:SkSpecialImage_Gpu::onDraw\28SkCanvas*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29\20const
+9834:SkSpecialImage_Gpu::onAsShader\28SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const&\29\20const
+9835:SkSpecialImage_Gpu::onAsImage\28SkIRect\20const*\29\20const
+9836:SkSpecialImage_Gpu::getSize\28\29\20const
+9837:SkSpecialImage::~SkSpecialImage\28\29
+9838:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\28\29.1
+9839:SkShaper::TrivialLanguageRunIterator::~TrivialLanguageRunIterator\28\29
+9840:SkShaper::TrivialLanguageRunIterator::currentLanguage\28\29\20const
+9841:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\28\29.1
+9842:SkShaper::TrivialFontRunIterator::~TrivialFontRunIterator\28\29
+9843:SkShaper::TrivialBiDiRunIterator::currentLevel\28\29\20const
+9844:SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::$_0::__invoke\28SkRasterPipeline_CallbackCtx*\2c\20int\29
+9845:SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+9846:SkScan::HairSquarePath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9847:SkScan::HairRoundPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9848:SkScan::HairPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9849:SkScan::AntiHairSquarePath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9850:SkScan::AntiHairRoundPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9851:SkScan::AntiHairPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9852:SkScan::AntiFillPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+9853:SkScalingCodec::onGetScaledDimensions\28float\29\20const
+9854:SkScalingCodec::onDimensionsSupported\28SkISize\20const&\29
+9855:SkScalerContext_FreeType::~SkScalerContext_FreeType\28\29.1
+9856:SkScalerContext_FreeType::~SkScalerContext_FreeType\28\29
+9857:SkScalerContext_FreeType::generatePath\28SkGlyph\20const&\2c\20SkPath*\29
+9858:SkScalerContext_FreeType::generateMetrics\28SkGlyph\20const&\2c\20SkArenaAlloc*\29
+9859:SkScalerContext_FreeType::generateImage\28SkGlyph\20const&\2c\20void*\29
+9860:SkScalerContext_FreeType::generateFontMetrics\28SkFontMetrics*\29
+9861:SkScalerContext_FreeType::generateDrawable\28SkGlyph\20const&\29
+9862:SkScalerContext::MakeEmpty\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29::SkScalerContext_Empty::~SkScalerContext_Empty\28\29
+9863:SkScalerContext::MakeEmpty\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29::SkScalerContext_Empty::generatePath\28SkGlyph\20const&\2c\20SkPath*\29
+9864:SkScalerContext::MakeEmpty\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29::SkScalerContext_Empty::generateMetrics\28SkGlyph\20const&\2c\20SkArenaAlloc*\29
+9865:SkScalerContext::MakeEmpty\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29::SkScalerContext_Empty::generateFontMetrics\28SkFontMetrics*\29
+9866:SkSampledCodec::onGetSampledDimensions\28int\29\20const
+9867:SkSampledCodec::onGetAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const&\29
+9868:SkSRGBColorSpaceLuminance::toLuma\28float\2c\20float\29\20const
+9869:SkSRGBColorSpaceLuminance::fromLuma\28float\2c\20float\29\20const
+9870:SkSL::simplify_componentwise\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29::$_3::__invoke\28double\2c\20double\29
+9871:SkSL::simplify_componentwise\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29::$_2::__invoke\28double\2c\20double\29
+9872:SkSL::simplify_componentwise\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29::$_1::__invoke\28double\2c\20double\29
+9873:SkSL::simplify_componentwise\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29::$_0::__invoke\28double\2c\20double\29
+9874:SkSL::eliminate_unreachable_code\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\28\29.1
+9875:SkSL::eliminate_unreachable_code\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::UnreachableCodeEliminator::~UnreachableCodeEliminator\28\29
+9876:SkSL::eliminate_dead_local_variables\28SkSL::Context\20const&\2c\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\28\29.1
+9877:SkSL::eliminate_dead_local_variables\28SkSL::Context\20const&\2c\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::DeadLocalVariableEliminator::~DeadLocalVariableEliminator\28\29
+9878:SkSL::eliminate_dead_local_variables\28SkSL::Context\20const&\2c\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::DeadLocalVariableEliminator::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\29
+9879:SkSL::eliminate_dead_local_variables\28SkSL::Context\20const&\2c\20SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::DeadLocalVariableEliminator::visitExpressionPtr\28std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>&\29
+9880:SkSL::count_returns_at_end_of_control_flow\28SkSL::FunctionDefinition\20const&\29::CountReturnsAtEndOfControlFlow::visitStatement\28SkSL::Statement\20const&\29
+9881:SkSL::\28anonymous\20namespace\29::VariableWriteVisitor::visitExpression\28SkSL::Expression\20const&\29
+9882:SkSL::\28anonymous\20namespace\29::SampleOutsideMainVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+9883:SkSL::\28anonymous\20namespace\29::SampleOutsideMainVisitor::visitExpression\28SkSL::Expression\20const&\29
+9884:SkSL::\28anonymous\20namespace\29::ReturnsNonOpaqueColorVisitor::visitStatement\28SkSL::Statement\20const&\29
+9885:SkSL::\28anonymous\20namespace\29::ReturnsInputAlphaVisitor::visitStatement\28SkSL::Statement\20const&\29
+9886:SkSL::\28anonymous\20namespace\29::ReturnsInputAlphaVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+9887:SkSL::\28anonymous\20namespace\29::ProgramUsageVisitor::visitStatement\28SkSL::Statement\20const&\29
+9888:SkSL::\28anonymous\20namespace\29::ProgramUsageVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+9889:SkSL::\28anonymous\20namespace\29::NodeCountVisitor::visitStatement\28SkSL::Statement\20const&\29
+9890:SkSL::\28anonymous\20namespace\29::NodeCountVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+9891:SkSL::\28anonymous\20namespace\29::NodeCountVisitor::visitExpression\28SkSL::Expression\20const&\29
+9892:SkSL::\28anonymous\20namespace\29::MergeSampleUsageVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+9893:SkSL::\28anonymous\20namespace\29::MergeSampleUsageVisitor::visitExpression\28SkSL::Expression\20const&\29
+9894:SkSL::\28anonymous\20namespace\29::FinalizationVisitor::~FinalizationVisitor\28\29.1
+9895:SkSL::\28anonymous\20namespace\29::FinalizationVisitor::~FinalizationVisitor\28\29
+9896:SkSL::\28anonymous\20namespace\29::FinalizationVisitor::visitExpression\28SkSL::Expression\20const&\29
+9897:SkSL::\28anonymous\20namespace\29::ES2IndexingVisitor::~ES2IndexingVisitor\28\29.1
+9898:SkSL::\28anonymous\20namespace\29::ES2IndexingVisitor::~ES2IndexingVisitor\28\29
+9899:SkSL::\28anonymous\20namespace\29::ES2IndexingVisitor::visitStatement\28SkSL::Statement\20const&\29
+9900:SkSL::\28anonymous\20namespace\29::ES2IndexingVisitor::visitExpression\28SkSL::Expression\20const&\29
+9901:SkSL::VectorType::isAllowedInES2\28\29\20const
+9902:SkSL::VariableReference::clone\28SkSL::Position\29\20const
+9903:SkSL::Variable::~Variable\28\29.1
+9904:SkSL::Variable::~Variable\28\29
+9905:SkSL::Variable::setInterfaceBlock\28SkSL::InterfaceBlock*\29
+9906:SkSL::Variable::mangledName\28\29\20const
+9907:SkSL::Variable::layout\28\29\20const
+9908:SkSL::Variable::description\28\29\20const
+9909:SkSL::VarDeclaration::~VarDeclaration\28\29.1
+9910:SkSL::VarDeclaration::~VarDeclaration\28\29
+9911:SkSL::VarDeclaration::description\28\29\20const
+9912:SkSL::VarDeclaration::clone\28\29\20const
+9913:SkSL::TypeReference::clone\28SkSL::Position\29\20const
+9914:SkSL::Type::minimumValue\28\29\20const
+9915:SkSL::Type::maximumValue\28\29\20const
+9916:SkSL::Type::fields\28\29\20const
+9917:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::SwitchStatement\2c\20std::__2::default_delete<SkSL::SwitchStatement>>\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\28\29.1
+9918:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::SwitchStatement\2c\20std::__2::default_delete<SkSL::SwitchStatement>>\29::HoistSwitchVarDeclsVisitor::~HoistSwitchVarDeclsVisitor\28\29
+9919:SkSL::Transform::HoistSwitchVarDeclarationsAtTopLevel\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::SwitchStatement\2c\20std::__2::default_delete<SkSL::SwitchStatement>>\29::HoistSwitchVarDeclsVisitor::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\29
+9920:SkSL::Tracer::var\28int\2c\20int\29
+9921:SkSL::Tracer::scope\28int\29
+9922:SkSL::Tracer::line\28int\29
+9923:SkSL::Tracer::exit\28int\29
+9924:SkSL::Tracer::enter\28int\29
+9925:SkSL::ThreadContext::DefaultErrorReporter::handleError\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+9926:SkSL::TextureType::textureAccess\28\29\20const
+9927:SkSL::TextureType::isMultisampled\28\29\20const
+9928:SkSL::TextureType::isDepth\28\29\20const
+9929:SkSL::TextureType::isArrayedTexture\28\29\20const
+9930:SkSL::TernaryExpression::~TernaryExpression\28\29.1
+9931:SkSL::TernaryExpression::~TernaryExpression\28\29
+9932:SkSL::TernaryExpression::description\28SkSL::OperatorPrecedence\29\20const
+9933:SkSL::TernaryExpression::clone\28SkSL::Position\29\20const
+9934:SkSL::TProgramVisitor<SkSL::ProgramWriterTypes>::visitExpression\28SkSL::Expression&\29
+9935:SkSL::Swizzle::~Swizzle\28\29.1
+9936:SkSL::Swizzle::~Swizzle\28\29
+9937:SkSL::Swizzle::description\28SkSL::OperatorPrecedence\29\20const
+9938:SkSL::Swizzle::clone\28SkSL::Position\29\20const
+9939:SkSL::SwitchStatement::~SwitchStatement\28\29.1
+9940:SkSL::SwitchStatement::~SwitchStatement\28\29
+9941:SkSL::SwitchStatement::description\28\29\20const
+9942:SkSL::SwitchStatement::clone\28\29\20const
+9943:SkSL::SwitchCase::description\28\29\20const
+9944:SkSL::SwitchCase::clone\28\29\20const
+9945:SkSL::StructType::slotType\28unsigned\20long\29\20const
+9946:SkSL::StructType::slotCount\28\29\20const
+9947:SkSL::StructType::isAllowedInES2\28\29\20const
+9948:SkSL::StructType::fields\28\29\20const
+9949:SkSL::StructDefinition::description\28\29\20const
+9950:SkSL::StructDefinition::clone\28\29\20const
+9951:SkSL::StringStream::~StringStream\28\29.1
+9952:SkSL::StringStream::~StringStream\28\29
+9953:SkSL::StringStream::write\28void\20const*\2c\20unsigned\20long\29
+9954:SkSL::StringStream::writeText\28char\20const*\29
+9955:SkSL::StringStream::write8\28unsigned\20char\29
+9956:SkSL::SingleArgumentConstructor::~SingleArgumentConstructor\28\29
+9957:SkSL::Setting::description\28SkSL::OperatorPrecedence\29\20const
+9958:SkSL::Setting::clone\28SkSL::Position\29\20const
+9959:SkSL::ScalarType::priority\28\29\20const
+9960:SkSL::ScalarType::numberKind\28\29\20const
+9961:SkSL::ScalarType::minimumValue\28\29\20const
+9962:SkSL::ScalarType::maximumValue\28\29\20const
+9963:SkSL::ScalarType::isAllowedInES2\28\29\20const
+9964:SkSL::ScalarType::bitWidth\28\29\20const
+9965:SkSL::SamplerType::textureAccess\28\29\20const
+9966:SkSL::SamplerType::isMultisampled\28\29\20const
+9967:SkSL::SamplerType::isDepth\28\29\20const
+9968:SkSL::SamplerType::isArrayedTexture\28\29\20const
+9969:SkSL::SamplerType::dimensions\28\29\20const
+9970:SkSL::ReturnStatement::description\28\29\20const
+9971:SkSL::ReturnStatement::clone\28\29\20const
+9972:SkSL::RP::VariableLValue::store\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9973:SkSL::RP::VariableLValue::push\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9974:SkSL::RP::VariableLValue::isWritable\28\29\20const
+9975:SkSL::RP::VariableLValue::fixedSlotRange\28SkSL::RP::Generator*\29
+9976:SkSL::RP::UnownedLValueSlice::store\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9977:SkSL::RP::UnownedLValueSlice::push\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9978:SkSL::RP::UnownedLValueSlice::fixedSlotRange\28SkSL::RP::Generator*\29
+9979:SkSL::RP::SwizzleLValue::~SwizzleLValue\28\29.1
+9980:SkSL::RP::SwizzleLValue::~SwizzleLValue\28\29
+9981:SkSL::RP::SwizzleLValue::swizzle\28\29
+9982:SkSL::RP::SwizzleLValue::store\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9983:SkSL::RP::SwizzleLValue::push\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9984:SkSL::RP::SwizzleLValue::fixedSlotRange\28SkSL::RP::Generator*\29
+9985:SkSL::RP::ScratchLValue::~ScratchLValue\28\29.1
+9986:SkSL::RP::ScratchLValue::push\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9987:SkSL::RP::ScratchLValue::fixedSlotRange\28SkSL::RP::Generator*\29
+9988:SkSL::RP::LValueSlice::~LValueSlice\28\29.1
+9989:SkSL::RP::LValueSlice::~LValueSlice\28\29
+9990:SkSL::RP::LValue::~LValue\28\29.1
+9991:SkSL::RP::ImmutableLValue::push\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9992:SkSL::RP::ImmutableLValue::fixedSlotRange\28SkSL::RP::Generator*\29
+9993:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\28\29.1
+9994:SkSL::RP::DynamicIndexLValue::store\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9995:SkSL::RP::DynamicIndexLValue::push\28SkSL::RP::Generator*\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::AutoStack*\2c\20SkSpan<signed\20char\20const>\29
+9996:SkSL::RP::DynamicIndexLValue::isWritable\28\29\20const
+9997:SkSL::RP::DynamicIndexLValue::fixedSlotRange\28SkSL::RP::Generator*\29
+9998:SkSL::ProgramVisitor::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\20const&\29
+9999:SkSL::ProgramVisitor::visitExpressionPtr\28std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20const&\29
+10000:SkSL::PrefixExpression::description\28SkSL::OperatorPrecedence\29\20const
+10001:SkSL::PrefixExpression::clone\28SkSL::Position\29\20const
+10002:SkSL::PostfixExpression::description\28SkSL::OperatorPrecedence\29\20const
+10003:SkSL::PostfixExpression::clone\28SkSL::Position\29\20const
+10004:SkSL::Poison::description\28SkSL::OperatorPrecedence\29\20const
+10005:SkSL::Poison::clone\28SkSL::Position\29\20const
+10006:SkSL::PipelineStage::Callbacks::getMainName\28\29
+10007:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\28\29.1
+10008:SkSL::Parser::Checkpoint::ForwardingErrorReporter::~ForwardingErrorReporter\28\29
+10009:SkSL::Parser::Checkpoint::ForwardingErrorReporter::handleError\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+10010:SkSL::Nop::description\28\29\20const
+10011:SkSL::Nop::clone\28\29\20const
+10012:SkSL::MultiArgumentConstructor::~MultiArgumentConstructor\28\29
+10013:SkSL::ModifiersDeclaration::description\28\29\20const
+10014:SkSL::ModifiersDeclaration::clone\28\29\20const
+10015:SkSL::MethodReference::description\28SkSL::OperatorPrecedence\29\20const
+10016:SkSL::MethodReference::clone\28SkSL::Position\29\20const
+10017:SkSL::MatrixType::slotCount\28\29\20const
+10018:SkSL::MatrixType::rows\28\29\20const
+10019:SkSL::MatrixType::isAllowedInES2\28\29\20const
+10020:SkSL::LiteralType::minimumValue\28\29\20const
+10021:SkSL::LiteralType::maximumValue\28\29\20const
+10022:SkSL::Literal::getConstantValue\28int\29\20const
+10023:SkSL::Literal::description\28SkSL::OperatorPrecedence\29\20const
+10024:SkSL::Literal::compareConstant\28SkSL::Expression\20const&\29\20const
+10025:SkSL::Literal::clone\28SkSL::Position\29\20const
+10026:SkSL::Intrinsics::\28anonymous\20namespace\29::finalize_distance\28double\29
+10027:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_uintBitsToFloat\28double\2c\20double\2c\20double\29
+10028:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_trunc\28double\2c\20double\2c\20double\29
+10029:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_tanh\28double\2c\20double\2c\20double\29
+10030:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_tan\28double\2c\20double\2c\20double\29
+10031:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_sub\28double\2c\20double\2c\20double\29
+10032:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_step\28double\2c\20double\2c\20double\29
+10033:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_sqrt\28double\2c\20double\2c\20double\29
+10034:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_smoothstep\28double\2c\20double\2c\20double\29
+10035:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_sinh\28double\2c\20double\2c\20double\29
+10036:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_sin\28double\2c\20double\2c\20double\29
+10037:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_saturate\28double\2c\20double\2c\20double\29
+10038:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_radians\28double\2c\20double\2c\20double\29
+10039:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_pow\28double\2c\20double\2c\20double\29
+10040:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_mod\28double\2c\20double\2c\20double\29
+10041:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_mix\28double\2c\20double\2c\20double\29
+10042:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_min\28double\2c\20double\2c\20double\29
+10043:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_max\28double\2c\20double\2c\20double\29
+10044:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_log\28double\2c\20double\2c\20double\29
+10045:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_log2\28double\2c\20double\2c\20double\29
+10046:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_inversesqrt\28double\2c\20double\2c\20double\29
+10047:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_intBitsToFloat\28double\2c\20double\2c\20double\29
+10048:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_fract\28double\2c\20double\2c\20double\29
+10049:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_fma\28double\2c\20double\2c\20double\29
+10050:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_floor\28double\2c\20double\2c\20double\29
+10051:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_floatBitsToUint\28double\2c\20double\2c\20double\29
+10052:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_floatBitsToInt\28double\2c\20double\2c\20double\29
+10053:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_exp\28double\2c\20double\2c\20double\29
+10054:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_exp2\28double\2c\20double\2c\20double\29
+10055:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_div\28double\2c\20double\2c\20double\29
+10056:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_degrees\28double\2c\20double\2c\20double\29
+10057:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_cosh\28double\2c\20double\2c\20double\29
+10058:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_cos\28double\2c\20double\2c\20double\29
+10059:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_clamp\28double\2c\20double\2c\20double\29
+10060:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_ceil\28double\2c\20double\2c\20double\29
+10061:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_atanh\28double\2c\20double\2c\20double\29
+10062:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_atan\28double\2c\20double\2c\20double\29
+10063:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_atan2\28double\2c\20double\2c\20double\29
+10064:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_asinh\28double\2c\20double\2c\20double\29
+10065:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_asin\28double\2c\20double\2c\20double\29
+10066:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_add\28double\2c\20double\2c\20double\29
+10067:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_acosh\28double\2c\20double\2c\20double\29
+10068:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_acos\28double\2c\20double\2c\20double\29
+10069:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_abs\28double\2c\20double\2c\20double\29
+10070:SkSL::Intrinsics::\28anonymous\20namespace\29::compare_notEqual\28double\2c\20double\29
+10071:SkSL::Intrinsics::\28anonymous\20namespace\29::compare_lessThan\28double\2c\20double\29
+10072:SkSL::Intrinsics::\28anonymous\20namespace\29::compare_lessThanEqual\28double\2c\20double\29
+10073:SkSL::Intrinsics::\28anonymous\20namespace\29::compare_greaterThan\28double\2c\20double\29
+10074:SkSL::Intrinsics::\28anonymous\20namespace\29::compare_greaterThanEqual\28double\2c\20double\29
+10075:SkSL::Intrinsics::\28anonymous\20namespace\29::compare_equal\28double\2c\20double\29
+10076:SkSL::Intrinsics::\28anonymous\20namespace\29::coalesce_dot\28double\2c\20double\2c\20double\29
+10077:SkSL::Intrinsics::\28anonymous\20namespace\29::coalesce_distance\28double\2c\20double\2c\20double\29
+10078:SkSL::Intrinsics::\28anonymous\20namespace\29::coalesce_any\28double\2c\20double\2c\20double\29
+10079:SkSL::Intrinsics::\28anonymous\20namespace\29::coalesce_all\28double\2c\20double\2c\20double\29
+10080:SkSL::InterfaceBlock::~InterfaceBlock\28\29.1
+10081:SkSL::InterfaceBlock::description\28\29\20const
+10082:SkSL::InterfaceBlock::clone\28\29\20const
+10083:SkSL::IndexExpression::~IndexExpression\28\29.1
+10084:SkSL::IndexExpression::~IndexExpression\28\29
+10085:SkSL::IndexExpression::description\28SkSL::OperatorPrecedence\29\20const
+10086:SkSL::IndexExpression::clone\28SkSL::Position\29\20const
+10087:SkSL::IfStatement::~IfStatement\28\29.1
+10088:SkSL::IfStatement::~IfStatement\28\29
+10089:SkSL::IfStatement::description\28\29\20const
+10090:SkSL::IfStatement::clone\28\29\20const
+10091:SkSL::GlobalVarDeclaration::description\28\29\20const
+10092:SkSL::GlobalVarDeclaration::clone\28\29\20const
+10093:SkSL::GenericType::slotType\28unsigned\20long\29\20const
+10094:SkSL::GenericType::coercibleTypes\28\29\20const
+10095:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\28\29.1
+10096:SkSL::FunctionReference::description\28SkSL::OperatorPrecedence\29\20const
+10097:SkSL::FunctionReference::clone\28SkSL::Position\29\20const
+10098:SkSL::FunctionPrototype::description\28\29\20const
+10099:SkSL::FunctionPrototype::clone\28\29\20const
+10100:SkSL::FunctionDefinition::description\28\29\20const
+10101:SkSL::FunctionDefinition::clone\28\29\20const
+10102:SkSL::FunctionDefinition::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20bool\29::Finalizer::~Finalizer\28\29.1
+10103:SkSL::FunctionDefinition::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20bool\29::Finalizer::~Finalizer\28\29
+10104:SkSL::FunctionCall::description\28SkSL::OperatorPrecedence\29\20const
+10105:SkSL::FunctionCall::clone\28SkSL::Position\29\20const
+10106:SkSL::ForStatement::~ForStatement\28\29.1
+10107:SkSL::ForStatement::~ForStatement\28\29
+10108:SkSL::ForStatement::description\28\29\20const
+10109:SkSL::ForStatement::clone\28\29\20const
+10110:SkSL::FieldSymbol::description\28\29\20const
+10111:SkSL::FieldAccess::clone\28SkSL::Position\29\20const
+10112:SkSL::Extension::description\28\29\20const
+10113:SkSL::Extension::clone\28\29\20const
+10114:SkSL::ExtendedVariable::~ExtendedVariable\28\29.1
+10115:SkSL::ExtendedVariable::~ExtendedVariable\28\29
+10116:SkSL::ExtendedVariable::setInterfaceBlock\28SkSL::InterfaceBlock*\29
+10117:SkSL::ExtendedVariable::mangledName\28\29\20const
+10118:SkSL::ExtendedVariable::interfaceBlock\28\29\20const
+10119:SkSL::ExtendedVariable::detachDeadInterfaceBlock\28\29
+10120:SkSL::ExpressionStatement::description\28\29\20const
+10121:SkSL::ExpressionStatement::clone\28\29\20const
+10122:SkSL::Expression::getConstantValue\28int\29\20const
+10123:SkSL::EmptyExpression::description\28SkSL::OperatorPrecedence\29\20const
+10124:SkSL::EmptyExpression::clone\28SkSL::Position\29\20const
+10125:SkSL::DoStatement::~DoStatement\28\29.1
+10126:SkSL::DoStatement::~DoStatement\28\29
+10127:SkSL::DoStatement::description\28\29\20const
+10128:SkSL::DoStatement::clone\28\29\20const
+10129:SkSL::DiscardStatement::description\28\29\20const
+10130:SkSL::DiscardStatement::clone\28\29\20const
+10131:SkSL::DebugTracePriv::~DebugTracePriv\28\29.1
+10132:SkSL::CountReturnsWithLimit::visitStatement\28SkSL::Statement\20const&\29
+10133:SkSL::ContinueStatement::description\28\29\20const
+10134:SkSL::ContinueStatement::clone\28\29\20const
+10135:SkSL::ConstructorStruct::clone\28SkSL::Position\29\20const
+10136:SkSL::ConstructorSplat::getConstantValue\28int\29\20const
+10137:SkSL::ConstructorSplat::clone\28SkSL::Position\29\20const
+10138:SkSL::ConstructorScalarCast::clone\28SkSL::Position\29\20const
+10139:SkSL::ConstructorMatrixResize::getConstantValue\28int\29\20const
+10140:SkSL::ConstructorMatrixResize::clone\28SkSL::Position\29\20const
+10141:SkSL::ConstructorDiagonalMatrix::getConstantValue\28int\29\20const
+10142:SkSL::ConstructorDiagonalMatrix::clone\28SkSL::Position\29\20const
+10143:SkSL::ConstructorCompoundCast::clone\28SkSL::Position\29\20const
+10144:SkSL::ConstructorCompound::clone\28SkSL::Position\29\20const
+10145:SkSL::ConstructorArrayCast::clone\28SkSL::Position\29\20const
+10146:SkSL::ConstructorArray::clone\28SkSL::Position\29\20const
+10147:SkSL::Compiler::CompilerErrorReporter::handleError\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+10148:SkSL::CodeGenerator::~CodeGenerator\28\29
+10149:SkSL::ChildCall::description\28SkSL::OperatorPrecedence\29\20const
+10150:SkSL::ChildCall::clone\28SkSL::Position\29\20const
+10151:SkSL::BreakStatement::description\28\29\20const
+10152:SkSL::BreakStatement::clone\28\29\20const
+10153:SkSL::Block::~Block\28\29.1
+10154:SkSL::Block::~Block\28\29
+10155:SkSL::Block::isEmpty\28\29\20const
+10156:SkSL::Block::description\28\29\20const
+10157:SkSL::Block::clone\28\29\20const
+10158:SkSL::BinaryExpression::~BinaryExpression\28\29.1
+10159:SkSL::BinaryExpression::~BinaryExpression\28\29
+10160:SkSL::BinaryExpression::description\28SkSL::OperatorPrecedence\29\20const
+10161:SkSL::BinaryExpression::clone\28SkSL::Position\29\20const
+10162:SkSL::ArrayType::slotType\28unsigned\20long\29\20const
+10163:SkSL::ArrayType::slotCount\28\29\20const
+10164:SkSL::ArrayType::isUnsizedArray\28\29\20const
+10165:SkSL::AnyConstructor::getConstantValue\28int\29\20const
+10166:SkSL::AnyConstructor::description\28SkSL::OperatorPrecedence\29\20const
+10167:SkSL::AnyConstructor::compareConstant\28SkSL::Expression\20const&\29\20const
+10168:SkSL::Analysis::IsDynamicallyUniformExpression\28SkSL::Expression\20const&\29::IsDynamicallyUniformExpressionVisitor::visitExpression\28SkSL::Expression\20const&\29
+10169:SkSL::Analysis::IsCompileTimeConstant\28SkSL::Expression\20const&\29::IsCompileTimeConstantVisitor::visitExpression\28SkSL::Expression\20const&\29
+10170:SkSL::Analysis::HasSideEffects\28SkSL::Expression\20const&\29::HasSideEffectsVisitor::visitExpression\28SkSL::Expression\20const&\29
+10171:SkSL::Analysis::ContainsVariable\28SkSL::Expression\20const&\2c\20SkSL::Variable\20const&\29::ContainsVariableVisitor::visitExpression\28SkSL::Expression\20const&\29
+10172:SkSL::Analysis::ContainsRTAdjust\28SkSL::Expression\20const&\29::ContainsRTAdjustVisitor::visitExpression\28SkSL::Expression\20const&\29
+10173:SkSL::Analysis::CheckProgramStructure\28SkSL::Program\20const&\2c\20bool\29::ProgramSizeVisitor::~ProgramSizeVisitor\28\29.1
+10174:SkSL::Analysis::CheckProgramStructure\28SkSL::Program\20const&\2c\20bool\29::ProgramSizeVisitor::~ProgramSizeVisitor\28\29
+10175:SkSL::Analysis::CheckProgramStructure\28SkSL::Program\20const&\2c\20bool\29::ProgramSizeVisitor::visitStatement\28SkSL::Statement\20const&\29
+10176:SkSL::Analysis::CheckProgramStructure\28SkSL::Program\20const&\2c\20bool\29::ProgramSizeVisitor::visitExpression\28SkSL::Expression\20const&\29
+10177:SkSL::AliasType::textureAccess\28\29\20const
+10178:SkSL::AliasType::slotType\28unsigned\20long\29\20const
+10179:SkSL::AliasType::slotCount\28\29\20const
+10180:SkSL::AliasType::rows\28\29\20const
+10181:SkSL::AliasType::priority\28\29\20const
+10182:SkSL::AliasType::isVector\28\29\20const
+10183:SkSL::AliasType::isUnsizedArray\28\29\20const
+10184:SkSL::AliasType::isStruct\28\29\20const
+10185:SkSL::AliasType::isScalar\28\29\20const
+10186:SkSL::AliasType::isMultisampled\28\29\20const
+10187:SkSL::AliasType::isMatrix\28\29\20const
+10188:SkSL::AliasType::isLiteral\28\29\20const
+10189:SkSL::AliasType::isInterfaceBlock\28\29\20const
+10190:SkSL::AliasType::isDepth\28\29\20const
+10191:SkSL::AliasType::isArrayedTexture\28\29\20const
+10192:SkSL::AliasType::isArray\28\29\20const
+10193:SkSL::AliasType::dimensions\28\29\20const
+10194:SkSL::AliasType::componentType\28\29\20const
+10195:SkSL::AliasType::columns\28\29\20const
+10196:SkSL::AliasType::coercibleTypes\28\29\20const
+10197:SkRuntimeShader::~SkRuntimeShader\28\29.1
+10198:SkRuntimeShader::type\28\29\20const
+10199:SkRuntimeShader::isOpaque\28\29\20const
+10200:SkRuntimeShader::getTypeName\28\29\20const
+10201:SkRuntimeShader::flatten\28SkWriteBuffer&\29\20const
+10202:SkRuntimeShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10203:SkRuntimeEffect::~SkRuntimeEffect\28\29.1
+10204:SkRuntimeEffect::MakeFromSource\28SkString\2c\20SkRuntimeEffect::Options\20const&\2c\20SkSL::ProgramKind\29
+10205:SkRuntimeColorFilter::~SkRuntimeColorFilter\28\29.1
+10206:SkRuntimeColorFilter::~SkRuntimeColorFilter\28\29
+10207:SkRuntimeColorFilter::onIsAlphaUnchanged\28\29\20const
+10208:SkRuntimeColorFilter::getTypeName\28\29\20const
+10209:SkRuntimeColorFilter::appendStages\28SkStageRec\20const&\2c\20bool\29\20const
+10210:SkRuntimeBlender::~SkRuntimeBlender\28\29.1
+10211:SkRuntimeBlender::~SkRuntimeBlender\28\29
+10212:SkRuntimeBlender::onAppendStages\28SkStageRec\20const&\29\20const
+10213:SkRuntimeBlender::getTypeName\28\29\20const
+10214:SkRgnClipBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10215:SkRgnClipBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10216:SkRgnClipBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+10217:SkRgnClipBlitter::blitH\28int\2c\20int\2c\20int\29
+10218:SkRgnClipBlitter::blitAntiRect\28int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+10219:SkRgnClipBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+10220:SkRgnBuilder::~SkRgnBuilder\28\29.1
+10221:SkRgnBuilder::blitH\28int\2c\20int\2c\20int\29
+10222:SkResourceCache::SetTotalByteLimit\28unsigned\20long\29
+10223:SkResourceCache::GetTotalBytesUsed\28\29
+10224:SkResourceCache::GetTotalByteLimit\28\29
+10225:SkRescaleAndReadPixels\28SkBitmap\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::Result::~Result\28\29.1
+10226:SkRescaleAndReadPixels\28SkBitmap\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::Result::~Result\28\29
+10227:SkRescaleAndReadPixels\28SkBitmap\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::Result::data\28int\29\20const
+10228:SkRefCntSet::~SkRefCntSet\28\29.1
+10229:SkRefCntSet::incPtr\28void*\29
+10230:SkRefCntSet::decPtr\28void*\29
+10231:SkRectClipBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10232:SkRectClipBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10233:SkRectClipBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+10234:SkRectClipBlitter::blitH\28int\2c\20int\2c\20int\29
+10235:SkRectClipBlitter::blitAntiRect\28int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+10236:SkRectClipBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+10237:SkRecorder::~SkRecorder\28\29.1
+10238:SkRecorder::~SkRecorder\28\29
+10239:SkRecorder::willSave\28\29
+10240:SkRecorder::onResetClip\28\29
+10241:SkRecorder::onDrawVerticesObject\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+10242:SkRecorder::onDrawTextBlob\28SkTextBlob\20const*\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+10243:SkRecorder::onDrawSlug\28sktext::gpu::Slug\20const*\29
+10244:SkRecorder::onDrawShadowRec\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+10245:SkRecorder::onDrawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+10246:SkRecorder::onDrawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+10247:SkRecorder::onDrawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+10248:SkRecorder::onDrawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+10249:SkRecorder::onDrawPicture\28SkPicture\20const*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\29
+10250:SkRecorder::onDrawPath\28SkPath\20const&\2c\20SkPaint\20const&\29
+10251:SkRecorder::onDrawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+10252:SkRecorder::onDrawPaint\28SkPaint\20const&\29
+10253:SkRecorder::onDrawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+10254:SkRecorder::onDrawMesh\28SkMesh\20const&\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+10255:SkRecorder::onDrawImageRect2\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+10256:SkRecorder::onDrawImageLattice2\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+10257:SkRecorder::onDrawImage2\28SkImage\20const*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+10258:SkRecorder::onDrawGlyphRunList\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\29
+10259:SkRecorder::onDrawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+10260:SkRecorder::onDrawEdgeAAImageSet2\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+10261:SkRecorder::onDrawDrawable\28SkDrawable*\2c\20SkMatrix\20const*\29
+10262:SkRecorder::onDrawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+10263:SkRecorder::onDrawBehind\28SkPaint\20const&\29
+10264:SkRecorder::onDrawAtlas2\28SkImage\20const*\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20SkBlendMode\2c\20SkSamplingOptions\20const&\2c\20SkRect\20const*\2c\20SkPaint\20const*\29
+10265:SkRecorder::onDrawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+10266:SkRecorder::onDrawAnnotation\28SkRect\20const&\2c\20char\20const*\2c\20SkData*\29
+10267:SkRecorder::onDoSaveBehind\28SkRect\20const*\29
+10268:SkRecorder::onClipShader\28sk_sp<SkShader>\2c\20SkClipOp\29
+10269:SkRecorder::onClipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+10270:SkRecorder::onClipRect\28SkRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+10271:SkRecorder::onClipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+10272:SkRecorder::onClipPath\28SkPath\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+10273:SkRecorder::getSaveLayerStrategy\28SkCanvas::SaveLayerRec\20const&\29
+10274:SkRecorder::didTranslate\28float\2c\20float\29
+10275:SkRecorder::didSetM44\28SkM44\20const&\29
+10276:SkRecorder::didScale\28float\2c\20float\29
+10277:SkRecorder::didRestore\28\29
+10278:SkRecorder::didConcat44\28SkM44\20const&\29
+10279:SkRecordedDrawable::~SkRecordedDrawable\28\29.1
+10280:SkRecordedDrawable::~SkRecordedDrawable\28\29
+10281:SkRecordedDrawable::onMakePictureSnapshot\28\29
+10282:SkRecordedDrawable::onGetBounds\28\29
+10283:SkRecordedDrawable::onDraw\28SkCanvas*\29
+10284:SkRecordedDrawable::onApproximateBytesUsed\28\29
+10285:SkRecordedDrawable::getTypeName\28\29\20const
+10286:SkRecordedDrawable::flatten\28SkWriteBuffer&\29\20const
+10287:SkRecord::~SkRecord\28\29.1
+10288:SkRecord::~SkRecord\28\29
+10289:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\28\29.1
+10290:SkRasterPipelineSpriteBlitter::~SkRasterPipelineSpriteBlitter\28\29
+10291:SkRasterPipelineSpriteBlitter::setup\28SkPixmap\20const&\2c\20int\2c\20int\2c\20SkPaint\20const&\29
+10292:SkRasterPipelineSpriteBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10293:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\28\29.1
+10294:SkRasterPipelineBlitter::~SkRasterPipelineBlitter\28\29
+10295:SkRasterPipelineBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10296:SkRasterPipelineBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10297:SkRasterPipelineBlitter::blitH\28int\2c\20int\2c\20int\29
+10298:SkRasterPipelineBlitter::blitAntiV2\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+10299:SkRasterPipelineBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+10300:SkRasterPipelineBlitter::blitAntiH2\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+10301:SkRasterPipelineBlitter::Create\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkArenaAlloc*\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20bool\2c\20SkShader\20const*\29::$_3::__invoke\28SkPixmap*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20long\20long\29
+10302:SkRasterPipelineBlitter::Create\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkArenaAlloc*\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20bool\2c\20SkShader\20const*\29::$_2::__invoke\28SkPixmap*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20long\20long\29
+10303:SkRasterPipelineBlitter::Create\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkArenaAlloc*\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20bool\2c\20SkShader\20const*\29::$_1::__invoke\28SkPixmap*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20long\20long\29
+10304:SkRasterPipelineBlitter::Create\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkArenaAlloc*\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20bool\2c\20SkShader\20const*\29::$_0::__invoke\28SkPixmap*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20long\20long\29
+10305:SkRadialGradient::getTypeName\28\29\20const
+10306:SkRadialGradient::flatten\28SkWriteBuffer&\29\20const
+10307:SkRadialGradient::asGradient\28SkShaderBase::GradientInfo*\2c\20SkMatrix*\29\20const
+10308:SkRadialGradient::appendGradientStages\28SkArenaAlloc*\2c\20SkRasterPipeline*\2c\20SkRasterPipeline*\29\20const
+10309:SkRTree::~SkRTree\28\29.1
+10310:SkRTree::~SkRTree\28\29
+10311:SkRTree::search\28SkRect\20const&\2c\20std::__2::vector<int\2c\20std::__2::allocator<int>>*\29\20const
+10312:SkRTree::insert\28SkRect\20const*\2c\20int\29
+10313:SkRTree::bytesUsed\28\29\20const
+10314:SkPtrSet::~SkPtrSet\28\29
+10315:SkPngNormalDecoder::~SkPngNormalDecoder\28\29
+10316:SkPngNormalDecoder::setRange\28int\2c\20int\2c\20void*\2c\20unsigned\20long\29
+10317:SkPngNormalDecoder::decode\28int*\29
+10318:SkPngNormalDecoder::decodeAllRows\28void*\2c\20unsigned\20long\2c\20int*\29
+10319:SkPngNormalDecoder::RowCallback\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20int\2c\20int\29
+10320:SkPngNormalDecoder::AllRowsCallback\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20int\2c\20int\29
+10321:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\28\29.1
+10322:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\28\29
+10323:SkPngInterlacedDecoder::setRange\28int\2c\20int\2c\20void*\2c\20unsigned\20long\29
+10324:SkPngInterlacedDecoder::decode\28int*\29
+10325:SkPngInterlacedDecoder::decodeAllRows\28void*\2c\20unsigned\20long\2c\20int*\29
+10326:SkPngInterlacedDecoder::InterlacedRowCallback\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20int\2c\20int\29
+10327:SkPngEncoderImpl::~SkPngEncoderImpl\28\29.1
+10328:SkPngEncoderImpl::~SkPngEncoderImpl\28\29
+10329:SkPngEncoderImpl::onEncodeRows\28int\29
+10330:SkPngDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+10331:SkPngCodec::onStartIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+10332:SkPngCodec::onRewind\28\29
+10333:SkPngCodec::onIncrementalDecode\28int*\29
+10334:SkPngCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+10335:SkPngCodec::getSampler\28bool\29
+10336:SkPngCodec::createColorTable\28SkImageInfo\20const&\29
+10337:SkPixmap::erase\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkIRect\20const*\29\20const::$_2::__invoke\28void*\2c\20unsigned\20long\20long\2c\20int\29
+10338:SkPixmap::erase\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkIRect\20const*\29\20const::$_1::__invoke\28void*\2c\20unsigned\20long\20long\2c\20int\29
+10339:SkPixmap::erase\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkIRect\20const*\29\20const::$_0::__invoke\28void*\2c\20unsigned\20long\20long\2c\20int\29
+10340:SkPixelRef::~SkPixelRef\28\29.1
+10341:SkPictureShader::~SkPictureShader\28\29.1
+10342:SkPictureShader::~SkPictureShader\28\29
+10343:SkPictureShader::type\28\29\20const
+10344:SkPictureShader::getTypeName\28\29\20const
+10345:SkPictureShader::flatten\28SkWriteBuffer&\29\20const
+10346:SkPictureShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10347:SkPictureRecorder*\20emscripten::internal::operator_new<SkPictureRecorder>\28\29
+10348:SkPictureRecord::~SkPictureRecord\28\29.1
+10349:SkPictureRecord::willSave\28\29
+10350:SkPictureRecord::willRestore\28\29
+10351:SkPictureRecord::onResetClip\28\29
+10352:SkPictureRecord::onDrawVerticesObject\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+10353:SkPictureRecord::onDrawTextBlob\28SkTextBlob\20const*\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+10354:SkPictureRecord::onDrawSlug\28sktext::gpu::Slug\20const*\29
+10355:SkPictureRecord::onDrawShadowRec\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+10356:SkPictureRecord::onDrawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+10357:SkPictureRecord::onDrawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+10358:SkPictureRecord::onDrawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+10359:SkPictureRecord::onDrawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+10360:SkPictureRecord::onDrawPicture\28SkPicture\20const*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\29
+10361:SkPictureRecord::onDrawPath\28SkPath\20const&\2c\20SkPaint\20const&\29
+10362:SkPictureRecord::onDrawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+10363:SkPictureRecord::onDrawPaint\28SkPaint\20const&\29
+10364:SkPictureRecord::onDrawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+10365:SkPictureRecord::onDrawImageRect2\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+10366:SkPictureRecord::onDrawImageLattice2\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+10367:SkPictureRecord::onDrawImage2\28SkImage\20const*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+10368:SkPictureRecord::onDrawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+10369:SkPictureRecord::onDrawEdgeAAImageSet2\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+10370:SkPictureRecord::onDrawDrawable\28SkDrawable*\2c\20SkMatrix\20const*\29
+10371:SkPictureRecord::onDrawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+10372:SkPictureRecord::onDrawBehind\28SkPaint\20const&\29
+10373:SkPictureRecord::onDrawAtlas2\28SkImage\20const*\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20SkBlendMode\2c\20SkSamplingOptions\20const&\2c\20SkRect\20const*\2c\20SkPaint\20const*\29
+10374:SkPictureRecord::onDrawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+10375:SkPictureRecord::onDrawAnnotation\28SkRect\20const&\2c\20char\20const*\2c\20SkData*\29
+10376:SkPictureRecord::onDoSaveBehind\28SkRect\20const*\29
+10377:SkPictureRecord::onClipShader\28sk_sp<SkShader>\2c\20SkClipOp\29
+10378:SkPictureRecord::onClipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+10379:SkPictureRecord::onClipRect\28SkRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+10380:SkPictureRecord::onClipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+10381:SkPictureRecord::onClipPath\28SkPath\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+10382:SkPictureRecord::getSaveLayerStrategy\28SkCanvas::SaveLayerRec\20const&\29
+10383:SkPictureRecord::didTranslate\28float\2c\20float\29
+10384:SkPictureRecord::didSetM44\28SkM44\20const&\29
+10385:SkPictureRecord::didScale\28float\2c\20float\29
+10386:SkPictureRecord::didConcat44\28SkM44\20const&\29
+10387:SkPictureData::serialize\28SkWStream*\2c\20SkSerialProcs\20const&\2c\20SkRefCntSet*\2c\20bool\29\20const::DevNull::write\28void\20const*\2c\20unsigned\20long\29
+10388:SkPerlinNoiseShader::type\28\29\20const
+10389:SkPerlinNoiseShader::getTypeName\28\29\20const
+10390:SkPerlinNoiseShader::flatten\28SkWriteBuffer&\29\20const
+10391:SkPath::setIsVolatile\28bool\29
+10392:SkPath::setFillType\28SkPathFillType\29
+10393:SkPath::isVolatile\28\29\20const
+10394:SkPath::getFillType\28\29\20const
+10395:SkPath2DPathEffectImpl::~SkPath2DPathEffectImpl\28\29.1
+10396:SkPath2DPathEffectImpl::~SkPath2DPathEffectImpl\28\29
+10397:SkPath2DPathEffectImpl::next\28SkPoint\20const&\2c\20int\2c\20int\2c\20SkPath*\29\20const
+10398:SkPath2DPathEffectImpl::getTypeName\28\29\20const
+10399:SkPath2DPathEffectImpl::getFactory\28\29\20const
+10400:SkPath2DPathEffectImpl::flatten\28SkWriteBuffer&\29\20const
+10401:SkPath2DPathEffectImpl::CreateProc\28SkReadBuffer&\29
+10402:SkPath1DPathEffectImpl::~SkPath1DPathEffectImpl\28\29.1
+10403:SkPath1DPathEffectImpl::~SkPath1DPathEffectImpl\28\29
+10404:SkPath1DPathEffectImpl::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+10405:SkPath1DPathEffectImpl::next\28SkPath*\2c\20float\2c\20SkPathMeasure&\29\20const
+10406:SkPath1DPathEffectImpl::getTypeName\28\29\20const
+10407:SkPath1DPathEffectImpl::getFactory\28\29\20const
+10408:SkPath1DPathEffectImpl::flatten\28SkWriteBuffer&\29\20const
+10409:SkPath1DPathEffectImpl::begin\28float\29\20const
+10410:SkPath1DPathEffectImpl::CreateProc\28SkReadBuffer&\29
+10411:SkPath*\20emscripten::internal::operator_new<SkPath>\28\29
+10412:SkPairPathEffect::~SkPairPathEffect\28\29.1
+10413:SkPaint::setDither\28bool\29
+10414:SkPaint::setAntiAlias\28bool\29
+10415:SkPaint::getStrokeMiter\28\29\20const
+10416:SkPaint::getStrokeJoin\28\29\20const
+10417:SkPaint::getStrokeCap\28\29\20const
+10418:SkPaint*\20emscripten::internal::operator_new<SkPaint>\28\29
+10419:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\28\29.1
+10420:SkOTUtils::LocalizedStrings_SingleName::~LocalizedStrings_SingleName\28\29
+10421:SkOTUtils::LocalizedStrings_SingleName::next\28SkTypeface::LocalizedString*\29
+10422:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\28\29.1
+10423:SkOTUtils::LocalizedStrings_NameTable::~LocalizedStrings_NameTable\28\29
+10424:SkOTUtils::LocalizedStrings_NameTable::next\28SkTypeface::LocalizedString*\29
+10425:SkNoPixelsDevice::~SkNoPixelsDevice\28\29.1
+10426:SkNoPixelsDevice::~SkNoPixelsDevice\28\29
+10427:SkNoPixelsDevice::replaceClip\28SkIRect\20const&\29
+10428:SkNoPixelsDevice::pushClipStack\28\29
+10429:SkNoPixelsDevice::popClipStack\28\29
+10430:SkNoPixelsDevice::onClipShader\28sk_sp<SkShader>\29
+10431:SkNoPixelsDevice::isClipWideOpen\28\29\20const
+10432:SkNoPixelsDevice::isClipRect\28\29\20const
+10433:SkNoPixelsDevice::isClipEmpty\28\29\20const
+10434:SkNoPixelsDevice::isClipAntiAliased\28\29\20const
+10435:SkNoPixelsDevice::devClipBounds\28\29\20const
+10436:SkNoPixelsDevice::clipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+10437:SkNoPixelsDevice::clipRect\28SkRect\20const&\2c\20SkClipOp\2c\20bool\29
+10438:SkNoPixelsDevice::clipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20bool\29
+10439:SkNoPixelsDevice::clipPath\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29
+10440:SkNoPixelsDevice::android_utils_clipAsRgn\28SkRegion*\29\20const
+10441:SkNoDrawCanvas::onDrawTextBlob\28SkTextBlob\20const*\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+10442:SkNoDrawCanvas::onDrawAtlas2\28SkImage\20const*\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20SkBlendMode\2c\20SkSamplingOptions\20const&\2c\20SkRect\20const*\2c\20SkPaint\20const*\29
+10443:SkMipmap::~SkMipmap\28\29.1
+10444:SkMipmap::~SkMipmap\28\29
+10445:SkMipmap::onDataChange\28void*\2c\20void*\29
+10446:SkMipmap::countLevels\28\29\20const
+10447:SkMemoryStream::~SkMemoryStream\28\29.1
+10448:SkMemoryStream::~SkMemoryStream\28\29
+10449:SkMemoryStream::setMemory\28void\20const*\2c\20unsigned\20long\2c\20bool\29
+10450:SkMemoryStream::seek\28unsigned\20long\29
+10451:SkMemoryStream::rewind\28\29
+10452:SkMemoryStream::read\28void*\2c\20unsigned\20long\29
+10453:SkMemoryStream::peek\28void*\2c\20unsigned\20long\29\20const
+10454:SkMemoryStream::onFork\28\29\20const
+10455:SkMemoryStream::onDuplicate\28\29\20const
+10456:SkMemoryStream::move\28long\29
+10457:SkMemoryStream::isAtEnd\28\29\20const
+10458:SkMemoryStream::getMemoryBase\28\29
+10459:SkMemoryStream::getLength\28\29\20const
+10460:SkMatrixColorFilter::onIsAlphaUnchanged\28\29\20const
+10461:SkMatrixColorFilter::onAsAColorMatrix\28float*\29\20const
+10462:SkMatrixColorFilter::getTypeName\28\29\20const
+10463:SkMatrixColorFilter::flatten\28SkWriteBuffer&\29\20const
+10464:SkMatrixColorFilter::appendStages\28SkStageRec\20const&\2c\20bool\29\20const
+10465:SkMatrix::Trans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+10466:SkMatrix::Trans_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+10467:SkMatrix::Scale_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+10468:SkMatrix::Scale_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+10469:SkMatrix::ScaleTrans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+10470:SkMatrix::Poly4Proc\28SkPoint\20const*\2c\20SkMatrix*\29
+10471:SkMatrix::Poly3Proc\28SkPoint\20const*\2c\20SkMatrix*\29
+10472:SkMatrix::Poly2Proc\28SkPoint\20const*\2c\20SkMatrix*\29
+10473:SkMatrix::Persp_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+10474:SkMatrix::Persp_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+10475:SkMatrix::Identity_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+10476:SkMatrix::Identity_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+10477:SkMatrix::Affine_vpts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+10478:SkMaskSwizzler::onSetSampleX\28int\29
+10479:SkMaskFilterBase::filterRectsToNine\28SkRect\20const*\2c\20int\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkTLazy<SkMaskFilterBase::NinePatch>*\29\20const
+10480:SkMaskFilterBase::filterRRectToNine\28SkRRect\20const&\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkTLazy<SkMaskFilterBase::NinePatch>*\29\20const
+10481:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29::PixelRef::~PixelRef\28\29.1
+10482:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29::PixelRef::~PixelRef\28\29
+10483:SkMakePixelRefWithProc\28int\2c\20int\2c\20unsigned\20long\2c\20void*\2c\20void\20\28*\29\28void*\2c\20void*\29\2c\20void*\29::PixelRef::~PixelRef\28\29.1
+10484:SkMakePixelRefWithProc\28int\2c\20int\2c\20unsigned\20long\2c\20void*\2c\20void\20\28*\29\28void*\2c\20void*\29\2c\20void*\29::PixelRef::~PixelRef\28\29
+10485:SkLumaColorFilter::Make\28\29
+10486:SkLocalMatrixShader::~SkLocalMatrixShader\28\29.1
+10487:SkLocalMatrixShader::~SkLocalMatrixShader\28\29
+10488:SkLocalMatrixShader::onIsAImage\28SkMatrix*\2c\20SkTileMode*\29\20const
+10489:SkLocalMatrixShader::makeAsALocalMatrixShader\28SkMatrix*\29\20const
+10490:SkLocalMatrixShader::getTypeName\28\29\20const
+10491:SkLocalMatrixShader::flatten\28SkWriteBuffer&\29\20const
+10492:SkLocalMatrixShader::asGradient\28SkShaderBase::GradientInfo*\2c\20SkMatrix*\29\20const
+10493:SkLocalMatrixShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10494:SkLinearGradient::getTypeName\28\29\20const
+10495:SkLinearGradient::flatten\28SkWriteBuffer&\29\20const
+10496:SkLinearGradient::asGradient\28SkShaderBase::GradientInfo*\2c\20SkMatrix*\29\20const
+10497:SkLine2DPathEffectImpl::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+10498:SkLine2DPathEffectImpl::nextSpan\28int\2c\20int\2c\20int\2c\20SkPath*\29\20const
+10499:SkLine2DPathEffectImpl::getTypeName\28\29\20const
+10500:SkLine2DPathEffectImpl::getFactory\28\29\20const
+10501:SkLine2DPathEffectImpl::flatten\28SkWriteBuffer&\29\20const
+10502:SkLine2DPathEffectImpl::CreateProc\28SkReadBuffer&\29
+10503:SkJpegMetadataDecoderImpl::~SkJpegMetadataDecoderImpl\28\29.1
+10504:SkJpegMetadataDecoderImpl::~SkJpegMetadataDecoderImpl\28\29
+10505:SkJpegMetadataDecoderImpl::getICCProfileData\28bool\29\20const
+10506:SkJpegMetadataDecoderImpl::getExifMetadata\28bool\29\20const
+10507:SkJpegMemorySourceMgr::skipInputBytes\28unsigned\20long\2c\20unsigned\20char\20const*&\2c\20unsigned\20long&\29
+10508:SkJpegMemorySourceMgr::initSource\28unsigned\20char\20const*&\2c\20unsigned\20long&\29
+10509:SkJpegDecoder::IsJpeg\28void\20const*\2c\20unsigned\20long\29
+10510:SkJpegDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+10511:SkJpegCodec::~SkJpegCodec\28\29.1
+10512:SkJpegCodec::~SkJpegCodec\28\29
+10513:SkJpegCodec::onStartScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+10514:SkJpegCodec::onSkipScanlines\28int\29
+10515:SkJpegCodec::onRewind\28\29
+10516:SkJpegCodec::onQueryYUVAInfo\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\2c\20SkYUVAPixmapInfo*\29\20const
+10517:SkJpegCodec::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+10518:SkJpegCodec::onGetScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+10519:SkJpegCodec::onGetScaledDimensions\28float\29\20const
+10520:SkJpegCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+10521:SkJpegCodec::onDimensionsSupported\28SkISize\20const&\29
+10522:SkJpegCodec::getSampler\28bool\29
+10523:SkJpegCodec::conversionSupported\28SkImageInfo\20const&\2c\20bool\2c\20bool\29
+10524:SkJpegBufferedSourceMgr::~SkJpegBufferedSourceMgr\28\29.1
+10525:SkJpegBufferedSourceMgr::~SkJpegBufferedSourceMgr\28\29
+10526:SkJpegBufferedSourceMgr::skipInputBytes\28unsigned\20long\2c\20unsigned\20char\20const*&\2c\20unsigned\20long&\29
+10527:SkJpegBufferedSourceMgr::initSource\28unsigned\20char\20const*&\2c\20unsigned\20long&\29
+10528:SkJpegBufferedSourceMgr::fillInputBuffer\28unsigned\20char\20const*&\2c\20unsigned\20long&\29
+10529:SkImage_Raster::~SkImage_Raster\28\29.1
+10530:SkImage_Raster::~SkImage_Raster\28\29
+10531:SkImage_Raster::onReinterpretColorSpace\28sk_sp<SkColorSpace>\29\20const
+10532:SkImage_Raster::onReadPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+10533:SkImage_Raster::onPeekPixels\28SkPixmap*\29\20const
+10534:SkImage_Raster::onMakeWithMipmaps\28sk_sp<SkMipmap>\29\20const
+10535:SkImage_Raster::onMakeSubset\28skgpu::graphite::Recorder*\2c\20SkIRect\20const&\2c\20SkImage::RequiredProperties\29\20const
+10536:SkImage_Raster::onMakeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+10537:SkImage_Raster::onMakeColorTypeAndColorSpace\28SkColorType\2c\20sk_sp<SkColorSpace>\2c\20GrDirectContext*\29\20const
+10538:SkImage_Raster::onHasMipmaps\28\29\20const
+10539:SkImage_Raster::onAsLegacyBitmap\28GrDirectContext*\2c\20SkBitmap*\29\20const
+10540:SkImage_Raster::notifyAddedToRasterCache\28\29\20const
+10541:SkImage_Raster::getROPixels\28GrDirectContext*\2c\20SkBitmap*\2c\20SkImage::CachingHint\29\20const
+10542:SkImage_LazyTexture::readPixelsProxy\28GrDirectContext*\2c\20SkPixmap\20const&\29\20const
+10543:SkImage_LazyTexture::onMakeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+10544:SkImage_Lazy::~SkImage_Lazy\28\29
+10545:SkImage_Lazy::onReinterpretColorSpace\28sk_sp<SkColorSpace>\29\20const
+10546:SkImage_Lazy::onRefEncoded\28\29\20const
+10547:SkImage_Lazy::onReadPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+10548:SkImage_Lazy::onMakeSubset\28skgpu::graphite::Recorder*\2c\20SkIRect\20const&\2c\20SkImage::RequiredProperties\29\20const
+10549:SkImage_Lazy::onMakeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+10550:SkImage_Lazy::onMakeColorTypeAndColorSpace\28SkColorType\2c\20sk_sp<SkColorSpace>\2c\20GrDirectContext*\29\20const
+10551:SkImage_Lazy::onIsProtected\28\29\20const
+10552:SkImage_Lazy::isValid\28GrRecordingContext*\29\20const
+10553:SkImage_Lazy::getROPixels\28GrDirectContext*\2c\20SkBitmap*\2c\20SkImage::CachingHint\29\20const
+10554:SkImage_GaneshBase::~SkImage_GaneshBase\28\29
+10555:SkImage_GaneshBase::onReadPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+10556:SkImage_GaneshBase::makeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+10557:SkImage_GaneshBase::makeColorTypeAndColorSpace\28skgpu::graphite::Recorder*\2c\20SkColorType\2c\20sk_sp<SkColorSpace>\2c\20SkImage::RequiredProperties\29\20const
+10558:SkImage_GaneshBase::makeColorTypeAndColorSpace\28GrDirectContext*\2c\20SkColorType\2c\20sk_sp<SkColorSpace>\29\20const
+10559:SkImage_GaneshBase::isValid\28GrRecordingContext*\29\20const
+10560:SkImage_GaneshBase::getROPixels\28GrDirectContext*\2c\20SkBitmap*\2c\20SkImage::CachingHint\29\20const
+10561:SkImage_GaneshBase::directContext\28\29\20const
+10562:SkImage_Ganesh::~SkImage_Ganesh\28\29.1
+10563:SkImage_Ganesh::textureSize\28\29\20const
+10564:SkImage_Ganesh::onReinterpretColorSpace\28sk_sp<SkColorSpace>\29\20const
+10565:SkImage_Ganesh::onMakeColorTypeAndColorSpace\28SkColorType\2c\20sk_sp<SkColorSpace>\2c\20GrDirectContext*\29\20const
+10566:SkImage_Ganesh::onIsProtected\28\29\20const
+10567:SkImage_Ganesh::onHasMipmaps\28\29\20const
+10568:SkImage_Ganesh::onAsyncRescaleAndReadPixels\28SkImageInfo\20const&\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29\20const
+10569:SkImage_Ganesh::onAsyncRescaleAndReadPixelsYUV420\28SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29\20const
+10570:SkImage_Ganesh::generatingSurfaceIsDeleted\28\29
+10571:SkImage_Ganesh::flush\28GrDirectContext*\2c\20GrFlushInfo\20const&\29\20const
+10572:SkImage_Ganesh::asView\28GrRecordingContext*\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\29\20const
+10573:SkImage_Ganesh::asFragmentProcessor\28GrRecordingContext*\2c\20SkSamplingOptions\2c\20SkTileMode\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkRect\20const*\29\20const
+10574:SkImage_Base::onAsyncRescaleAndReadPixels\28SkImageInfo\20const&\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29\20const
+10575:SkImage_Base::notifyAddedToRasterCache\28\29\20const
+10576:SkImage_Base::makeSubset\28skgpu::graphite::Recorder*\2c\20SkIRect\20const&\2c\20SkImage::RequiredProperties\29\20const
+10577:SkImage_Base::makeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+10578:SkImage_Base::makeColorTypeAndColorSpace\28skgpu::graphite::Recorder*\2c\20SkColorType\2c\20sk_sp<SkColorSpace>\2c\20SkImage::RequiredProperties\29\20const
+10579:SkImage_Base::makeColorTypeAndColorSpace\28GrDirectContext*\2c\20SkColorType\2c\20sk_sp<SkColorSpace>\29\20const
+10580:SkImage_Base::makeColorSpace\28skgpu::graphite::Recorder*\2c\20sk_sp<SkColorSpace>\2c\20SkImage::RequiredProperties\29\20const
+10581:SkImage_Base::makeColorSpace\28GrDirectContext*\2c\20sk_sp<SkColorSpace>\29\20const
+10582:SkImage_Base::isTextureBacked\28\29\20const
+10583:SkImage_Base::isLazyGenerated\28\29\20const
+10584:SkImageShader::~SkImageShader\28\29.1
+10585:SkImageShader::~SkImageShader\28\29
+10586:SkImageShader::type\28\29\20const
+10587:SkImageShader::onIsAImage\28SkMatrix*\2c\20SkTileMode*\29\20const
+10588:SkImageShader::isOpaque\28\29\20const
+10589:SkImageShader::getTypeName\28\29\20const
+10590:SkImageShader::flatten\28SkWriteBuffer&\29\20const
+10591:SkImageShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10592:SkImageGenerator::~SkImageGenerator\28\29
+10593:SkImageFilters::Compose\28sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29
+10594:SkImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+10595:SkImage::~SkImage\28\29
+10596:SkImage::height\28\29\20const
+10597:SkIcoDecoder::IsIco\28void\20const*\2c\20unsigned\20long\29
+10598:SkIcoDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+10599:SkIcoCodec::~SkIcoCodec\28\29.1
+10600:SkIcoCodec::~SkIcoCodec\28\29
+10601:SkIcoCodec::onStartScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+10602:SkIcoCodec::onStartIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+10603:SkIcoCodec::onSkipScanlines\28int\29
+10604:SkIcoCodec::onIncrementalDecode\28int*\29
+10605:SkIcoCodec::onGetScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+10606:SkIcoCodec::onGetScanlineOrder\28\29\20const
+10607:SkIcoCodec::onGetScaledDimensions\28float\29\20const
+10608:SkIcoCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+10609:SkIcoCodec::onDimensionsSupported\28SkISize\20const&\29
+10610:SkIcoCodec::getSampler\28bool\29
+10611:SkIcoCodec::conversionSupported\28SkImageInfo\20const&\2c\20bool\2c\20bool\29
+10612:SkGradientBaseShader::onAsLuminanceColor\28unsigned\20int*\29\20const
+10613:SkGradientBaseShader::isOpaque\28\29\20const
+10614:SkGradientBaseShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10615:SkGifDecoder::IsGif\28void\20const*\2c\20unsigned\20long\29
+10616:SkGifDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+10617:SkGaussianColorFilter::getTypeName\28\29\20const
+10618:SkGaussianColorFilter::appendStages\28SkStageRec\20const&\2c\20bool\29\20const
+10619:SkGammaColorSpaceLuminance::toLuma\28float\2c\20float\29\20const
+10620:SkGammaColorSpaceLuminance::fromLuma\28float\2c\20float\29\20const
+10621:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\28\29.1
+10622:SkFontStyleSet_Custom::~SkFontStyleSet_Custom\28\29
+10623:SkFontStyleSet_Custom::getStyle\28int\2c\20SkFontStyle*\2c\20SkString*\29
+10624:SkFontMgr_Custom::~SkFontMgr_Custom\28\29.1
+10625:SkFontMgr_Custom::~SkFontMgr_Custom\28\29
+10626:SkFontMgr_Custom::onMatchFamily\28char\20const*\29\20const
+10627:SkFontMgr_Custom::onMatchFamilyStyle\28char\20const*\2c\20SkFontStyle\20const&\29\20const
+10628:SkFontMgr_Custom::onMakeFromStreamIndex\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20int\29\20const
+10629:SkFontMgr_Custom::onMakeFromStreamArgs\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29\20const
+10630:SkFontMgr_Custom::onMakeFromFile\28char\20const*\2c\20int\29\20const
+10631:SkFontMgr_Custom::onMakeFromData\28sk_sp<SkData>\2c\20int\29\20const
+10632:SkFontMgr_Custom::onLegacyMakeTypeface\28char\20const*\2c\20SkFontStyle\29\20const
+10633:SkFontMgr_Custom::onGetFamilyName\28int\2c\20SkString*\29\20const
+10634:SkFont::setScaleX\28float\29
+10635:SkFont::setEmbeddedBitmaps\28bool\29
+10636:SkFont::isEmbolden\28\29\20const
+10637:SkFont::getSkewX\28\29\20const
+10638:SkFont::getSize\28\29\20const
+10639:SkFont::getScaleX\28\29\20const
+10640:SkFont*\20emscripten::internal::operator_new<SkFont\2c\20sk_sp<SkTypeface>\2c\20float\2c\20float\2c\20float>\28sk_sp<SkTypeface>&&\2c\20float&&\2c\20float&&\2c\20float&&\29
+10641:SkFont*\20emscripten::internal::operator_new<SkFont\2c\20sk_sp<SkTypeface>\2c\20float>\28sk_sp<SkTypeface>&&\2c\20float&&\29
+10642:SkFont*\20emscripten::internal::operator_new<SkFont\2c\20sk_sp<SkTypeface>>\28sk_sp<SkTypeface>&&\29
+10643:SkFont*\20emscripten::internal::operator_new<SkFont>\28\29
+10644:SkFILEStream::~SkFILEStream\28\29.1
+10645:SkFILEStream::~SkFILEStream\28\29
+10646:SkFILEStream::seek\28unsigned\20long\29
+10647:SkFILEStream::rewind\28\29
+10648:SkFILEStream::read\28void*\2c\20unsigned\20long\29
+10649:SkFILEStream::onFork\28\29\20const
+10650:SkFILEStream::onDuplicate\28\29\20const
+10651:SkFILEStream::move\28long\29
+10652:SkFILEStream::isAtEnd\28\29\20const
+10653:SkFILEStream::getPosition\28\29\20const
+10654:SkFILEStream::getLength\28\29\20const
+10655:SkEncoder::~SkEncoder\28\29
+10656:SkEmptyShader::getTypeName\28\29\20const
+10657:SkEmptyPicture::~SkEmptyPicture\28\29
+10658:SkEmptyPicture::cullRect\28\29\20const
+10659:SkEmptyFontMgr::onMatchFamily\28char\20const*\29\20const
+10660:SkEdgeBuilder::~SkEdgeBuilder\28\29
+10661:SkEdgeBuilder::build\28SkPath\20const&\2c\20SkIRect\20const*\2c\20bool\29::$_0::__invoke\28SkEdgeClipper*\2c\20bool\2c\20void*\29
+10662:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\28\29.1
+10663:SkDrawable::onMakePictureSnapshot\28\29
+10664:SkDrawBase::~SkDrawBase\28\29
+10665:SkDraw::paintMasks\28SkZip<SkGlyph\20const*\2c\20SkPoint>\2c\20SkPaint\20const&\29\20const
+10666:SkDiscretePathEffectImpl::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+10667:SkDiscretePathEffectImpl::getTypeName\28\29\20const
+10668:SkDiscretePathEffectImpl::getFactory\28\29\20const
+10669:SkDiscretePathEffectImpl::computeFastBounds\28SkRect*\29\20const
+10670:SkDiscretePathEffectImpl::CreateProc\28SkReadBuffer&\29
+10671:SkDevice::~SkDevice\28\29
+10672:SkDevice::strikeDeviceInfo\28\29\20const
+10673:SkDevice::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29
+10674:SkDevice::drawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+10675:SkDevice::drawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+10676:SkDevice::drawImageLattice\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const&\29
+10677:SkDevice::drawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+10678:SkDevice::drawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+10679:SkDevice::drawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+10680:SkDevice::drawCoverageMask\28SkSpecialImage\20const*\2c\20SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+10681:SkDevice::drawAtlas\28SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+10682:SkDevice::drawAsTiledImageRect\28SkCanvas*\2c\20SkImage\20const*\2c\20SkRect\20const*\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+10683:SkDevice::createImageFilteringBackend\28SkSurfaceProps\20const&\2c\20SkColorType\29\20const
+10684:SkDashImpl::~SkDashImpl\28\29.1
+10685:SkDashImpl::~SkDashImpl\28\29
+10686:SkDashImpl::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+10687:SkDashImpl::onAsPoints\28SkPathEffectBase::PointData*\2c\20SkPath\20const&\2c\20SkStrokeRec\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const*\29\20const
+10688:SkDashImpl::onAsADash\28SkPathEffect::DashInfo*\29\20const
+10689:SkDashImpl::getTypeName\28\29\20const
+10690:SkDashImpl::flatten\28SkWriteBuffer&\29\20const
+10691:SkCustomTypefaceBuilder::MakeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29
+10692:SkCornerPathEffectImpl::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+10693:SkCornerPathEffectImpl::getTypeName\28\29\20const
+10694:SkCornerPathEffectImpl::getFactory\28\29\20const
+10695:SkCornerPathEffectImpl::flatten\28SkWriteBuffer&\29\20const
+10696:SkCornerPathEffectImpl::CreateProc\28SkReadBuffer&\29
+10697:SkCornerPathEffect::Make\28float\29
+10698:SkContourMeasureIter*\20emscripten::internal::operator_new<SkContourMeasureIter\2c\20SkPath\20const&\2c\20bool\2c\20float>\28SkPath\20const&\2c\20bool&&\2c\20float&&\29
+10699:SkContourMeasure::~SkContourMeasure\28\29.1
+10700:SkContourMeasure::~SkContourMeasure\28\29
+10701:SkConicalGradient::getTypeName\28\29\20const
+10702:SkConicalGradient::flatten\28SkWriteBuffer&\29\20const
+10703:SkConicalGradient::asGradient\28SkShaderBase::GradientInfo*\2c\20SkMatrix*\29\20const
+10704:SkConicalGradient::appendGradientStages\28SkArenaAlloc*\2c\20SkRasterPipeline*\2c\20SkRasterPipeline*\29\20const
+10705:SkComposePathEffect::~SkComposePathEffect\28\29
+10706:SkComposePathEffect::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+10707:SkComposePathEffect::getTypeName\28\29\20const
+10708:SkComposePathEffect::computeFastBounds\28SkRect*\29\20const
+10709:SkComposeColorFilter::onIsAlphaUnchanged\28\29\20const
+10710:SkComposeColorFilter::getTypeName\28\29\20const
+10711:SkComposeColorFilter::appendStages\28SkStageRec\20const&\2c\20bool\29\20const
+10712:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\28\29.1
+10713:SkColorSpaceXformColorFilter::~SkColorSpaceXformColorFilter\28\29
+10714:SkColorSpaceXformColorFilter::getTypeName\28\29\20const
+10715:SkColorSpaceXformColorFilter::flatten\28SkWriteBuffer&\29\20const
+10716:SkColorSpaceXformColorFilter::appendStages\28SkStageRec\20const&\2c\20bool\29\20const
+10717:SkColorShader::onAsLuminanceColor\28unsigned\20int*\29\20const
+10718:SkColorShader::isOpaque\28\29\20const
+10719:SkColorShader::getTypeName\28\29\20const
+10720:SkColorShader::flatten\28SkWriteBuffer&\29\20const
+10721:SkColorShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10722:SkColorPalette::~SkColorPalette\28\29.1
+10723:SkColorPalette::~SkColorPalette\28\29
+10724:SkColorFilters::SRGBToLinearGamma\28\29
+10725:SkColorFilters::LinearToSRGBGamma\28\29
+10726:SkColorFilters::Lerp\28float\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>\29
+10727:SkColorFilters::Compose\28sk_sp<SkColorFilter>\20const&\2c\20sk_sp<SkColorFilter>\29
+10728:SkColorFilterShader::~SkColorFilterShader\28\29.1
+10729:SkColorFilterShader::~SkColorFilterShader\28\29
+10730:SkColorFilterShader::isOpaque\28\29\20const
+10731:SkColorFilterShader::getTypeName\28\29\20const
+10732:SkColorFilterShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10733:SkColorFilterBase::onFilterColor4f\28SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkColorSpace*\29\20const
+10734:SkColor4Shader::~SkColor4Shader\28\29.1
+10735:SkColor4Shader::~SkColor4Shader\28\29
+10736:SkColor4Shader::isOpaque\28\29\20const
+10737:SkColor4Shader::getTypeName\28\29\20const
+10738:SkColor4Shader::flatten\28SkWriteBuffer&\29\20const
+10739:SkColor4Shader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10740:SkCodecImageGenerator::~SkCodecImageGenerator\28\29.1
+10741:SkCodecImageGenerator::~SkCodecImageGenerator\28\29
+10742:SkCodecImageGenerator::onRefEncodedData\28\29
+10743:SkCodecImageGenerator::onQueryYUVAInfo\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\2c\20SkYUVAPixmapInfo*\29\20const
+10744:SkCodecImageGenerator::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+10745:SkCodecImageGenerator::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkImageGenerator::Options\20const&\29
+10746:SkCodec::onStartScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+10747:SkCodec::onStartIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+10748:SkCodec::onOutputScanline\28int\29\20const
+10749:SkCodec::onGetScaledDimensions\28float\29\20const
+10750:SkCodec::conversionSupported\28SkImageInfo\20const&\2c\20bool\2c\20bool\29
+10751:SkCanvas::rotate\28float\2c\20float\2c\20float\29
+10752:SkCanvas::recordingContext\28\29\20const
+10753:SkCanvas::recorder\28\29\20const
+10754:SkCanvas::onPeekPixels\28SkPixmap*\29
+10755:SkCanvas::onNewSurface\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\29
+10756:SkCanvas::onImageInfo\28\29\20const
+10757:SkCanvas::onGetProps\28SkSurfaceProps*\2c\20bool\29\20const
+10758:SkCanvas::onDrawVerticesObject\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+10759:SkCanvas::onDrawTextBlob\28SkTextBlob\20const*\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+10760:SkCanvas::onDrawSlug\28sktext::gpu::Slug\20const*\29
+10761:SkCanvas::onDrawShadowRec\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+10762:SkCanvas::onDrawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+10763:SkCanvas::onDrawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+10764:SkCanvas::onDrawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+10765:SkCanvas::onDrawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+10766:SkCanvas::onDrawPicture\28SkPicture\20const*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\29
+10767:SkCanvas::onDrawPath\28SkPath\20const&\2c\20SkPaint\20const&\29
+10768:SkCanvas::onDrawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+10769:SkCanvas::onDrawPaint\28SkPaint\20const&\29
+10770:SkCanvas::onDrawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+10771:SkCanvas::onDrawMesh\28SkMesh\20const&\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+10772:SkCanvas::onDrawImageRect2\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+10773:SkCanvas::onDrawImageLattice2\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+10774:SkCanvas::onDrawImage2\28SkImage\20const*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+10775:SkCanvas::onDrawGlyphRunList\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\29
+10776:SkCanvas::onDrawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+10777:SkCanvas::onDrawEdgeAAImageSet2\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+10778:SkCanvas::onDrawDrawable\28SkDrawable*\2c\20SkMatrix\20const*\29
+10779:SkCanvas::onDrawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+10780:SkCanvas::onDrawBehind\28SkPaint\20const&\29
+10781:SkCanvas::onDrawAtlas2\28SkImage\20const*\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20SkBlendMode\2c\20SkSamplingOptions\20const&\2c\20SkRect\20const*\2c\20SkPaint\20const*\29
+10782:SkCanvas::onDrawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+10783:SkCanvas::onDrawAnnotation\28SkRect\20const&\2c\20char\20const*\2c\20SkData*\29
+10784:SkCanvas::onDiscard\28\29
+10785:SkCanvas::onConvertGlyphRunListToSlug\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\29
+10786:SkCanvas::onAccessTopLayerPixels\28SkPixmap*\29
+10787:SkCanvas::isClipRect\28\29\20const
+10788:SkCanvas::isClipEmpty\28\29\20const
+10789:SkCanvas::getSaveCount\28\29\20const
+10790:SkCanvas::getBaseLayerSize\28\29\20const
+10791:SkCanvas::drawTextBlob\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+10792:SkCanvas::drawPicture\28sk_sp<SkPicture>\20const&\29
+10793:SkCanvas::drawCircle\28float\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+10794:SkCanvas*\20emscripten::internal::operator_new<SkCanvas\2c\20float\2c\20float>\28float&&\2c\20float&&\29
+10795:SkCanvas*\20emscripten::internal::operator_new<SkCanvas>\28\29
+10796:SkCachedData::~SkCachedData\28\29.1
+10797:SkCTMShader::~SkCTMShader\28\29
+10798:SkCTMShader::getTypeName\28\29\20const
+10799:SkCTMShader::asGradient\28SkShaderBase::GradientInfo*\2c\20SkMatrix*\29\20const
+10800:SkCTMShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10801:SkBreakIterator_icu::~SkBreakIterator_icu\28\29.1
+10802:SkBreakIterator_icu::~SkBreakIterator_icu\28\29
+10803:SkBreakIterator_icu::status\28\29
+10804:SkBreakIterator_icu::setText\28char\20const*\2c\20int\29
+10805:SkBreakIterator_icu::setText\28char16_t\20const*\2c\20int\29
+10806:SkBreakIterator_icu::next\28\29
+10807:SkBreakIterator_icu::isDone\28\29
+10808:SkBreakIterator_icu::first\28\29
+10809:SkBreakIterator_icu::current\28\29
+10810:SkBmpStandardCodec::~SkBmpStandardCodec\28\29.1
+10811:SkBmpStandardCodec::~SkBmpStandardCodec\28\29
+10812:SkBmpStandardCodec::onPrepareToDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+10813:SkBmpStandardCodec::onInIco\28\29\20const
+10814:SkBmpStandardCodec::getSampler\28bool\29
+10815:SkBmpStandardCodec::decodeRows\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+10816:SkBmpRLESampler::onSetSampleX\28int\29
+10817:SkBmpRLESampler::fillWidth\28\29\20const
+10818:SkBmpRLECodec::~SkBmpRLECodec\28\29.1
+10819:SkBmpRLECodec::~SkBmpRLECodec\28\29
+10820:SkBmpRLECodec::skipRows\28int\29
+10821:SkBmpRLECodec::onPrepareToDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+10822:SkBmpRLECodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+10823:SkBmpRLECodec::getSampler\28bool\29
+10824:SkBmpRLECodec::decodeRows\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+10825:SkBmpMaskCodec::~SkBmpMaskCodec\28\29.1
+10826:SkBmpMaskCodec::~SkBmpMaskCodec\28\29
+10827:SkBmpMaskCodec::onPrepareToDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+10828:SkBmpMaskCodec::getSampler\28bool\29
+10829:SkBmpMaskCodec::decodeRows\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+10830:SkBmpDecoder::IsBmp\28void\20const*\2c\20unsigned\20long\29
+10831:SkBmpDecoder::Decode\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20void*\29
+10832:SkBmpCodec::~SkBmpCodec\28\29
+10833:SkBmpCodec::skipRows\28int\29
+10834:SkBmpCodec::onSkipScanlines\28int\29
+10835:SkBmpCodec::onRewind\28\29
+10836:SkBmpCodec::onGetScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+10837:SkBmpCodec::onGetScanlineOrder\28\29\20const
+10838:SkBlurMaskFilterImpl::getTypeName\28\29\20const
+10839:SkBlurMaskFilterImpl::flatten\28SkWriteBuffer&\29\20const
+10840:SkBlurMaskFilterImpl::filterRectsToNine\28SkRect\20const*\2c\20int\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkTLazy<SkMaskFilterBase::NinePatch>*\29\20const
+10841:SkBlurMaskFilterImpl::filterRRectToNine\28SkRRect\20const&\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkTLazy<SkMaskFilterBase::NinePatch>*\29\20const
+10842:SkBlurMaskFilterImpl::filterMask\28SkMaskBuilder*\2c\20SkMask\20const&\2c\20SkMatrix\20const&\2c\20SkIPoint*\29\20const
+10843:SkBlurMaskFilterImpl::computeFastBounds\28SkRect\20const&\2c\20SkRect*\29\20const
+10844:SkBlurMaskFilterImpl::asImageFilter\28SkMatrix\20const&\29\20const
+10845:SkBlurMaskFilterImpl::asABlur\28SkMaskFilterBase::BlurRec*\29\20const
+10846:SkBlockMemoryStream::~SkBlockMemoryStream\28\29.1
+10847:SkBlockMemoryStream::~SkBlockMemoryStream\28\29
+10848:SkBlockMemoryStream::seek\28unsigned\20long\29
+10849:SkBlockMemoryStream::rewind\28\29
+10850:SkBlockMemoryStream::read\28void*\2c\20unsigned\20long\29
+10851:SkBlockMemoryStream::peek\28void*\2c\20unsigned\20long\29\20const
+10852:SkBlockMemoryStream::onFork\28\29\20const
+10853:SkBlockMemoryStream::onDuplicate\28\29\20const
+10854:SkBlockMemoryStream::move\28long\29
+10855:SkBlockMemoryStream::isAtEnd\28\29\20const
+10856:SkBlockMemoryStream::getMemoryBase\28\29
+10857:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\28\29.1
+10858:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\28\29
+10859:SkBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10860:SkBlitter::blitAntiV2\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+10861:SkBlitter::blitAntiRect\28int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+10862:SkBlitter::blitAntiH2\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+10863:SkBlitter::allocBlitMemory\28unsigned\20long\29
+10864:SkBlenderBase::asBlendMode\28\29\20const
+10865:SkBlendShader::getTypeName\28\29\20const
+10866:SkBlendShader::flatten\28SkWriteBuffer&\29\20const
+10867:SkBlendShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const
+10868:SkBlendModeColorFilter::onIsAlphaUnchanged\28\29\20const
+10869:SkBlendModeColorFilter::onAsAColorMode\28unsigned\20int*\2c\20SkBlendMode*\29\20const
+10870:SkBlendModeColorFilter::getTypeName\28\29\20const
+10871:SkBlendModeColorFilter::flatten\28SkWriteBuffer&\29\20const
+10872:SkBlendModeColorFilter::appendStages\28SkStageRec\20const&\2c\20bool\29\20const
+10873:SkBlendModeBlender::onAppendStages\28SkStageRec\20const&\29\20const
+10874:SkBlendModeBlender::getTypeName\28\29\20const
+10875:SkBlendModeBlender::flatten\28SkWriteBuffer&\29\20const
+10876:SkBlendModeBlender::asBlendMode\28\29\20const
+10877:SkBitmapDevice::~SkBitmapDevice\28\29.1
+10878:SkBitmapDevice::~SkBitmapDevice\28\29
+10879:SkBitmapDevice::snapSpecial\28SkIRect\20const&\2c\20bool\29
+10880:SkBitmapDevice::setImmutable\28\29
+10881:SkBitmapDevice::replaceClip\28SkIRect\20const&\29
+10882:SkBitmapDevice::pushClipStack\28\29
+10883:SkBitmapDevice::popClipStack\28\29
+10884:SkBitmapDevice::onWritePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+10885:SkBitmapDevice::onReadPixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+10886:SkBitmapDevice::onPeekPixels\28SkPixmap*\29
+10887:SkBitmapDevice::onDrawGlyphRunList\28SkCanvas*\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+10888:SkBitmapDevice::onClipShader\28sk_sp<SkShader>\29
+10889:SkBitmapDevice::onAccessPixels\28SkPixmap*\29
+10890:SkBitmapDevice::makeSurface\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\29
+10891:SkBitmapDevice::makeSpecial\28SkImage\20const*\29
+10892:SkBitmapDevice::makeSpecial\28SkBitmap\20const&\29
+10893:SkBitmapDevice::isClipWideOpen\28\29\20const
+10894:SkBitmapDevice::isClipRect\28\29\20const
+10895:SkBitmapDevice::isClipEmpty\28\29\20const
+10896:SkBitmapDevice::isClipAntiAliased\28\29\20const
+10897:SkBitmapDevice::getRasterHandle\28\29\20const
+10898:SkBitmapDevice::drawVertices\28SkVertices\20const*\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\2c\20bool\29
+10899:SkBitmapDevice::drawSpecial\28SkSpecialImage*\2c\20SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+10900:SkBitmapDevice::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+10901:SkBitmapDevice::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+10902:SkBitmapDevice::drawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+10903:SkBitmapDevice::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\2c\20bool\29
+10904:SkBitmapDevice::drawPaint\28SkPaint\20const&\29
+10905:SkBitmapDevice::drawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+10906:SkBitmapDevice::drawImageRect\28SkImage\20const*\2c\20SkRect\20const*\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+10907:SkBitmapDevice::drawAtlas\28SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+10908:SkBitmapDevice::devClipBounds\28\29\20const
+10909:SkBitmapDevice::createDevice\28SkDevice::CreateInfo\20const&\2c\20SkPaint\20const*\29
+10910:SkBitmapDevice::clipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+10911:SkBitmapDevice::clipRect\28SkRect\20const&\2c\20SkClipOp\2c\20bool\29
+10912:SkBitmapDevice::clipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20bool\29
+10913:SkBitmapDevice::clipPath\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29
+10914:SkBitmapDevice::android_utils_clipAsRgn\28SkRegion*\29\20const
+10915:SkBitmapCache::Rec::~Rec\28\29.1
+10916:SkBitmapCache::Rec::~Rec\28\29
+10917:SkBitmapCache::Rec::postAddInstall\28void*\29
+10918:SkBitmapCache::Rec::getCategory\28\29\20const
+10919:SkBitmapCache::Rec::canBePurged\28\29
+10920:SkBitmapCache::Rec::bytesUsed\28\29\20const
+10921:SkBitmapCache::Rec::ReleaseProc\28void*\2c\20void*\29
+10922:SkBitmapCache::Rec::Finder\28SkResourceCache::Rec\20const&\2c\20void*\29
+10923:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\28\29.1
+10924:SkBinaryWriteBuffer::write\28SkM44\20const&\29
+10925:SkBinaryWriteBuffer::writeTypeface\28SkTypeface*\29
+10926:SkBinaryWriteBuffer::writeString\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+10927:SkBinaryWriteBuffer::writeStream\28SkStream*\2c\20unsigned\20long\29
+10928:SkBinaryWriteBuffer::writeScalar\28float\29
+10929:SkBinaryWriteBuffer::writeSampling\28SkSamplingOptions\20const&\29
+10930:SkBinaryWriteBuffer::writeRegion\28SkRegion\20const&\29
+10931:SkBinaryWriteBuffer::writeRect\28SkRect\20const&\29
+10932:SkBinaryWriteBuffer::writePoint\28SkPoint\20const&\29
+10933:SkBinaryWriteBuffer::writePointArray\28SkPoint\20const*\2c\20unsigned\20int\29
+10934:SkBinaryWriteBuffer::writePoint3\28SkPoint3\20const&\29
+10935:SkBinaryWriteBuffer::writePath\28SkPath\20const&\29
+10936:SkBinaryWriteBuffer::writePaint\28SkPaint\20const&\29
+10937:SkBinaryWriteBuffer::writePad32\28void\20const*\2c\20unsigned\20long\29
+10938:SkBinaryWriteBuffer::writeMatrix\28SkMatrix\20const&\29
+10939:SkBinaryWriteBuffer::writeImage\28SkImage\20const*\29
+10940:SkBinaryWriteBuffer::writeColor4fArray\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20unsigned\20int\29
+10941:SkBigPicture::~SkBigPicture\28\29.1
+10942:SkBigPicture::~SkBigPicture\28\29
+10943:SkBigPicture::playback\28SkCanvas*\2c\20SkPicture::AbortCallback*\29\20const
+10944:SkBigPicture::cullRect\28\29\20const
+10945:SkBigPicture::approximateOpCount\28bool\29\20const
+10946:SkBigPicture::approximateBytesUsed\28\29\20const
+10947:SkBezierCubic::Subdivide\28double\20const*\2c\20double\2c\20double*\29
+10948:SkBasicEdgeBuilder::recoverClip\28SkIRect\20const&\29\20const
+10949:SkBasicEdgeBuilder::allocEdges\28unsigned\20long\2c\20unsigned\20long*\29
+10950:SkBasicEdgeBuilder::addQuad\28SkPoint\20const*\29
+10951:SkBasicEdgeBuilder::addPolyLine\28SkPoint\20const*\2c\20char*\2c\20char**\29
+10952:SkBasicEdgeBuilder::addLine\28SkPoint\20const*\29
+10953:SkBasicEdgeBuilder::addCubic\28SkPoint\20const*\29
+10954:SkBaseShadowTessellator::~SkBaseShadowTessellator\28\29
+10955:SkBBoxHierarchy::insert\28SkRect\20const*\2c\20SkBBoxHierarchy::Metadata\20const*\2c\20int\29
+10956:SkArenaAlloc::SkipPod\28char*\29
+10957:SkArenaAlloc::NextBlock\28char*\29
+10958:SkAnimatedImage::~SkAnimatedImage\28\29.1
+10959:SkAnimatedImage::~SkAnimatedImage\28\29
+10960:SkAnimatedImage::reset\28\29
+10961:SkAnimatedImage::onGetBounds\28\29
+10962:SkAnimatedImage::onDraw\28SkCanvas*\29
+10963:SkAnimatedImage::getRepetitionCount\28\29\20const
+10964:SkAnimatedImage::getCurrentFrame\28\29
+10965:SkAnimatedImage::currentFrameDuration\28\29
+10966:SkAndroidCodecAdapter::onGetSupportedSubset\28SkIRect*\29\20const
+10967:SkAndroidCodecAdapter::onGetSampledDimensions\28int\29\20const
+10968:SkAndroidCodecAdapter::onGetAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const&\29
+10969:SkAnalyticEdgeBuilder::recoverClip\28SkIRect\20const&\29\20const
+10970:SkAnalyticEdgeBuilder::allocEdges\28unsigned\20long\2c\20unsigned\20long*\29
+10971:SkAnalyticEdgeBuilder::addQuad\28SkPoint\20const*\29
+10972:SkAnalyticEdgeBuilder::addPolyLine\28SkPoint\20const*\2c\20char*\2c\20char**\29
+10973:SkAnalyticEdgeBuilder::addLine\28SkPoint\20const*\29
+10974:SkAnalyticEdgeBuilder::addCubic\28SkPoint\20const*\29
+10975:SkAAClipBlitter::~SkAAClipBlitter\28\29.1
+10976:SkAAClipBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10977:SkAAClipBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10978:SkAAClipBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+10979:SkAAClipBlitter::blitH\28int\2c\20int\2c\20int\29
+10980:SkAAClipBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+10981:SkAAClip::Builder::operateY\28SkAAClip\20const&\2c\20SkAAClip\20const&\2c\20SkClipOp\29::$_1::__invoke\28unsigned\20int\2c\20unsigned\20int\29
+10982:SkAAClip::Builder::operateY\28SkAAClip\20const&\2c\20SkAAClip\20const&\2c\20SkClipOp\29::$_0::__invoke\28unsigned\20int\2c\20unsigned\20int\29
+10983:SkAAClip::Builder::Blitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10984:SkAAClip::Builder::Blitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10985:SkAAClip::Builder::Blitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+10986:SkAAClip::Builder::Blitter::blitH\28int\2c\20int\2c\20int\29
+10987:SkAAClip::Builder::Blitter::blitAntiRect\28int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+10988:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\28\29.1
+10989:SkA8_Coverage_Blitter::~SkA8_Coverage_Blitter\28\29
+10990:SkA8_Coverage_Blitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10991:SkA8_Coverage_Blitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10992:SkA8_Coverage_Blitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+10993:SkA8_Coverage_Blitter::blitH\28int\2c\20int\2c\20int\29
+10994:SkA8_Coverage_Blitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+10995:SkA8_Blitter::~SkA8_Blitter\28\29.1
+10996:SkA8_Blitter::~SkA8_Blitter\28\29
+10997:SkA8_Blitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+10998:SkA8_Blitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+10999:SkA8_Blitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+11000:SkA8_Blitter::blitH\28int\2c\20int\2c\20int\29
+11001:SkA8_Blitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+11002:SkA8Blitter_Choose\28SkPixmap\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkArenaAlloc*\2c\20bool\2c\20sk_sp<SkShader>\2c\20SkSurfaceProps\20const&\29
+11003:Sk2DPathEffect::nextSpan\28int\2c\20int\2c\20int\2c\20SkPath*\29\20const
+11004:Sk2DPathEffect::flatten\28SkWriteBuffer&\29\20const
+11005:SimpleVFilter16i_C
+11006:SimpleVFilter16_C
+11007:SimpleTextStyle*\20emscripten::internal::raw_constructor<SimpleTextStyle>\28\29
+11008:SimpleTextStyle*\20emscripten::internal::MemberAccess<SimpleParagraphStyle\2c\20SimpleTextStyle>::getWire<SimpleParagraphStyle>\28SimpleTextStyle\20SimpleParagraphStyle::*\20const&\2c\20SimpleParagraphStyle\20const&\29
+11009:SimpleStrutStyle*\20emscripten::internal::raw_constructor<SimpleStrutStyle>\28\29
+11010:SimpleStrutStyle*\20emscripten::internal::MemberAccess<SimpleParagraphStyle\2c\20SimpleStrutStyle>::getWire<SimpleParagraphStyle>\28SimpleStrutStyle\20SimpleParagraphStyle::*\20const&\2c\20SimpleParagraphStyle\20const&\29
+11011:SimpleParagraphStyle*\20emscripten::internal::raw_constructor<SimpleParagraphStyle>\28\29
+11012:SimpleHFilter16i_C
+11013:SimpleHFilter16_C
+11014:SimpleFontStyle*\20emscripten::internal::raw_constructor<SimpleFontStyle>\28\29
+11015:ShaderPDXferProcessor::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11016:ShaderPDXferProcessor::name\28\29\20const
+11017:ShaderPDXferProcessor::makeProgramImpl\28\29\20const
+11018:SafeRLEAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\29
+11019:SafeRLEAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20int\29
+11020:SafeRLEAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+11021:RuntimeEffectUniform*\20emscripten::internal::raw_constructor<RuntimeEffectUniform>\28\29
+11022:RuntimeEffectRPCallbacks::toLinearSrgb\28void\20const*\29
+11023:RuntimeEffectRPCallbacks::fromLinearSrgb\28void\20const*\29
+11024:RuntimeEffectRPCallbacks::appendShader\28int\29
+11025:RuntimeEffectRPCallbacks::appendColorFilter\28int\29
+11026:RuntimeEffectRPCallbacks::appendBlender\28int\29
+11027:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\28\29
+11028:RunBasedAdditiveBlitter::getRealBlitter\28bool\29
+11029:RunBasedAdditiveBlitter::flush_if_y_changed\28int\2c\20int\29
+11030:RunBasedAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\29
+11031:RunBasedAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20int\29
+11032:RunBasedAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+11033:Round_Up_To_Grid
+11034:Round_To_Half_Grid
+11035:Round_To_Grid
+11036:Round_To_Double_Grid
+11037:Round_Super_45
+11038:Round_Super
+11039:Round_None
+11040:Round_Down_To_Grid
+11041:RoundJoiner\28SkPath*\2c\20SkPath*\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20float\2c\20bool\2c\20bool\29
+11042:RoundCapper\28SkPath*\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPath*\29
+11043:Reset
+11044:Read_CVT_Stretched
+11045:Read_CVT
+11046:RD4_C
+11047:Project_y
+11048:Project
+11049:ProcessRows
+11050:PredictorAdd9_C
+11051:PredictorAdd8_C
+11052:PredictorAdd7_C
+11053:PredictorAdd6_C
+11054:PredictorAdd5_C
+11055:PredictorAdd4_C
+11056:PredictorAdd3_C
+11057:PredictorAdd2_C
+11058:PredictorAdd1_C
+11059:PredictorAdd13_C
+11060:PredictorAdd12_C
+11061:PredictorAdd11_C
+11062:PredictorAdd10_C
+11063:PredictorAdd0_C
+11064:PrePostInverseBlitterProc\28SkBlitter*\2c\20int\2c\20bool\29
+11065:PorterDuffXferProcessor::onHasSecondaryOutput\28\29\20const
+11066:PorterDuffXferProcessor::onGetBlendInfo\28skgpu::BlendInfo*\29\20const
+11067:PorterDuffXferProcessor::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11068:PorterDuffXferProcessor::name\28\29\20const
+11069:PorterDuffXferProcessor::makeProgramImpl\28\29\20const::Impl::emitOutputsForBlendState\28GrXferProcessor::ProgramImpl::EmitArgs\20const&\29
+11070:PorterDuffXferProcessor::makeProgramImpl\28\29\20const
+11071:ParseVP8X
+11072:PackRGB_C
+11073:PDLCDXferProcessor::onIsEqual\28GrXferProcessor\20const&\29\20const
+11074:PDLCDXferProcessor::onGetBlendInfo\28skgpu::BlendInfo*\29\20const
+11075:PDLCDXferProcessor::name\28\29\20const
+11076:PDLCDXferProcessor::makeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrXferProcessor\20const&\29
+11077:PDLCDXferProcessor::makeProgramImpl\28\29\20const::Impl::emitOutputsForBlendState\28GrXferProcessor::ProgramImpl::EmitArgs\20const&\29
+11078:PDLCDXferProcessor::makeProgramImpl\28\29\20const
+11079:OT::match_glyph\28hb_glyph_info_t&\2c\20unsigned\20int\2c\20void\20const*\29
+11080:OT::match_coverage\28hb_glyph_info_t&\2c\20unsigned\20int\2c\20void\20const*\29
+11081:OT::match_class_cached\28hb_glyph_info_t&\2c\20unsigned\20int\2c\20void\20const*\29
+11082:OT::match_class_cached2\28hb_glyph_info_t&\2c\20unsigned\20int\2c\20void\20const*\29
+11083:OT::match_class_cached1\28hb_glyph_info_t&\2c\20unsigned\20int\2c\20void\20const*\29
+11084:OT::match_class\28hb_glyph_info_t&\2c\20unsigned\20int\2c\20void\20const*\29
+11085:OT::hb_ot_apply_context_t::return_t\20OT::Layout::GSUB_impl::SubstLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\29
+11086:OT::hb_ot_apply_context_t::return_t\20OT::Layout::GPOS_impl::PosLookup::dispatch_recurse_func<OT::hb_ot_apply_context_t>\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\29
+11087:OT::cff1::accelerator_t::gname_t::cmp\28void\20const*\2c\20void\20const*\29
+11088:OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes>::cmp_range\28void\20const*\2c\20void\20const*\29
+11089:OT::ColorLine<OT::Variable>::static_get_color_stops\28hb_color_line_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20hb_color_stop_t*\2c\20void*\29
+11090:OT::ColorLine<OT::NoVariable>::static_get_color_stops\28hb_color_line_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20hb_color_stop_t*\2c\20void*\29
+11091:OT::CmapSubtableFormat4::accelerator_t::get_glyph_func\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+11092:Move_CVT_Stretched
+11093:Move_CVT
+11094:MiterJoiner\28SkPath*\2c\20SkPath*\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20float\2c\20bool\2c\20bool\29
+11095:MaskAdditiveBlitter::~MaskAdditiveBlitter\28\29.1
+11096:MaskAdditiveBlitter::~MaskAdditiveBlitter\28\29
+11097:MaskAdditiveBlitter::getWidth\28\29
+11098:MaskAdditiveBlitter::getRealBlitter\28bool\29
+11099:MaskAdditiveBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+11100:MaskAdditiveBlitter::blitRect\28int\2c\20int\2c\20int\2c\20int\29
+11101:MaskAdditiveBlitter::blitAntiRect\28int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+11102:MaskAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\29
+11103:MaskAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20int\29
+11104:MaskAdditiveBlitter::blitAntiH\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+11105:MapAlpha_C
+11106:MapARGB_C
+11107:MakeRenderTarget\28sk_sp<GrDirectContext>\2c\20int\2c\20int\29
+11108:MakeRenderTarget\28sk_sp<GrDirectContext>\2c\20SimpleImageInfo\29
+11109:MakePathFromVerbsPointsWeights\28unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+11110:MakePathFromSVGString\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+11111:MakePathFromOp\28SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp\29
+11112:MakePathFromInterpolation\28SkPath\20const&\2c\20SkPath\20const&\2c\20float\29
+11113:MakePathFromCmds\28unsigned\20long\2c\20int\29
+11114:MakeOnScreenGLSurface\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\29
+11115:MakeImageFromGenerator\28SimpleImageInfo\2c\20emscripten::val\29
+11116:MakeGrContext\28\29
+11117:MakeAsWinding\28SkPath\20const&\29
+11118:LD4_C
+11119:JpegDecoderMgr::returnFailure\28char\20const*\2c\20SkCodec::Result\29
+11120:JpegDecoderMgr::init\28\29
+11121:JpegDecoderMgr::SourceMgr::SkipInputData\28jpeg_decompress_struct*\2c\20long\29
+11122:JpegDecoderMgr::SourceMgr::InitSource\28jpeg_decompress_struct*\29
+11123:JpegDecoderMgr::SourceMgr::FillInputBuffer\28jpeg_decompress_struct*\29
+11124:JpegDecoderMgr::JpegDecoderMgr\28SkStream*\29
+11125:IsValidSimpleFormat
+11126:IsValidExtendedFormat
+11127:InverseBlitter::blitH\28int\2c\20int\2c\20int\29
+11128:Init
+11129:HorizontalUnfilter_C
+11130:HorizontalFilter_C
+11131:Horish_SkAntiHairBlitter::drawLine\28int\2c\20int\2c\20int\2c\20int\29
+11132:Horish_SkAntiHairBlitter::drawCap\28int\2c\20int\2c\20int\2c\20int\29
+11133:HasAlpha8b_C
+11134:HasAlpha32b_C
+11135:HU4_C
+11136:HLine_SkAntiHairBlitter::drawLine\28int\2c\20int\2c\20int\2c\20int\29
+11137:HLine_SkAntiHairBlitter::drawCap\28int\2c\20int\2c\20int\2c\20int\29
+11138:HFilter8i_C
+11139:HFilter8_C
+11140:HFilter16i_C
+11141:HFilter16_C
+11142:HE8uv_C
+11143:HE4_C
+11144:HE16_C
+11145:HD4_C
+11146:GradientUnfilter_C
+11147:GradientFilter_C
+11148:GrYUVtoRGBEffect::onMakeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11149:GrYUVtoRGBEffect::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11150:GrYUVtoRGBEffect::onMakeProgramImpl\28\29\20const
+11151:GrYUVtoRGBEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11152:GrYUVtoRGBEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11153:GrYUVtoRGBEffect::name\28\29\20const
+11154:GrYUVtoRGBEffect::clone\28\29\20const
+11155:GrXferProcessor::ProgramImpl::emitWriteSwizzle\28GrGLSLXPFragmentBuilder*\2c\20skgpu::Swizzle\20const&\2c\20char\20const*\2c\20char\20const*\29\20const
+11156:GrXferProcessor::ProgramImpl::emitOutputsForBlendState\28GrXferProcessor::ProgramImpl::EmitArgs\20const&\29
+11157:GrXferProcessor::ProgramImpl::emitBlendCodeForDstRead\28GrGLSLXPFragmentBuilder*\2c\20GrGLSLUniformHandler*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20GrXferProcessor\20const&\29
+11158:GrWritePixelsTask::~GrWritePixelsTask\28\29.1
+11159:GrWritePixelsTask::onMakeClosed\28GrRecordingContext*\2c\20SkIRect*\29
+11160:GrWritePixelsTask::onExecute\28GrOpFlushState*\29
+11161:GrWritePixelsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+11162:GrWaitRenderTask::~GrWaitRenderTask\28\29.1
+11163:GrWaitRenderTask::onIsUsed\28GrSurfaceProxy*\29\20const
+11164:GrWaitRenderTask::onExecute\28GrOpFlushState*\29
+11165:GrWaitRenderTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+11166:GrTriangulator::~GrTriangulator\28\29
+11167:GrTransferFromRenderTask::~GrTransferFromRenderTask\28\29.1
+11168:GrTransferFromRenderTask::onExecute\28GrOpFlushState*\29
+11169:GrTransferFromRenderTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+11170:GrThreadSafeCache::Trampoline::~Trampoline\28\29.1
+11171:GrThreadSafeCache::Trampoline::~Trampoline\28\29
+11172:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\28\29.1
+11173:GrTextureResolveRenderTask::onExecute\28GrOpFlushState*\29
+11174:GrTextureResolveRenderTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+11175:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29.1
+11176:GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29
+11177:GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+11178:GrTextureRenderTargetProxy::instantiate\28GrResourceProvider*\29
+11179:GrTextureRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+11180:GrTextureProxy::~GrTextureProxy\28\29.2
+11181:GrTextureProxy::~GrTextureProxy\28\29.1
+11182:GrTextureProxy::onUninstantiatedGpuMemorySize\28\29\20const
+11183:GrTextureProxy::instantiate\28GrResourceProvider*\29
+11184:GrTextureProxy::createSurface\28GrResourceProvider*\29\20const
+11185:GrTextureProxy::callbackDesc\28\29\20const
+11186:GrTextureEffect::~GrTextureEffect\28\29.1
+11187:GrTextureEffect::~GrTextureEffect\28\29
+11188:GrTextureEffect::onMakeProgramImpl\28\29\20const
+11189:GrTextureEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11190:GrTextureEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11191:GrTextureEffect::name\28\29\20const
+11192:GrTextureEffect::clone\28\29\20const
+11193:GrTextureEffect::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11194:GrTextureEffect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11195:GrTexture::onGpuMemorySize\28\29\20const
+11196:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\2c\20true>>::~GrTDeferredProxyUploader\28\29.1
+11197:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\2c\20true>>::freeData\28\29
+11198:GrTDeferredProxyUploader<\28anonymous\20namespace\29::SoftwarePathData>::~GrTDeferredProxyUploader\28\29.1
+11199:GrTDeferredProxyUploader<\28anonymous\20namespace\29::SoftwarePathData>::~GrTDeferredProxyUploader\28\29
+11200:GrTDeferredProxyUploader<\28anonymous\20namespace\29::SoftwarePathData>::freeData\28\29
+11201:GrSurfaceProxy::getUniqueKey\28\29\20const
+11202:GrSurface::~GrSurface\28\29
+11203:GrSurface::getResourceType\28\29\20const
+11204:GrStrokeTessellationShader::~GrStrokeTessellationShader\28\29.1
+11205:GrStrokeTessellationShader::~GrStrokeTessellationShader\28\29
+11206:GrStrokeTessellationShader::name\28\29\20const
+11207:GrStrokeTessellationShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11208:GrStrokeTessellationShader::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11209:GrStrokeTessellationShader::Impl::~Impl\28\29.1
+11210:GrStrokeTessellationShader::Impl::~Impl\28\29
+11211:GrStrokeTessellationShader::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11212:GrStrokeTessellationShader::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11213:GrSkSLFP::~GrSkSLFP\28\29.1
+11214:GrSkSLFP::~GrSkSLFP\28\29
+11215:GrSkSLFP::onMakeProgramImpl\28\29\20const
+11216:GrSkSLFP::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11217:GrSkSLFP::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11218:GrSkSLFP::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11219:GrSkSLFP::clone\28\29\20const
+11220:GrSkSLFP::Impl::~Impl\28\29.1
+11221:GrSkSLFP::Impl::~Impl\28\29
+11222:GrSkSLFP::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11223:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::toLinearSrgb\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+11224:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::sampleShader\28int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+11225:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::sampleColorFilter\28int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+11226:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::sampleBlender\28int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+11227:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::getMangledName\28char\20const*\29
+11228:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::fromLinearSrgb\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+11229:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::defineFunction\28char\20const*\2c\20char\20const*\2c\20bool\29
+11230:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::declareUniform\28SkSL::VarDeclaration\20const*\29
+11231:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::declareFunction\28char\20const*\29
+11232:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11233:GrSimpleMesh*\20SkArenaAlloc::allocUninitializedArray<GrSimpleMesh>\28unsigned\20long\29::'lambda'\28char*\29::__invoke\28char*\29
+11234:GrRingBuffer::FinishSubmit\28void*\29
+11235:GrResourceCache::CompareTimestamp\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29
+11236:GrRenderTask::~GrRenderTask\28\29
+11237:GrRenderTask::disown\28GrDrawingManager*\29
+11238:GrRenderTargetProxy::~GrRenderTargetProxy\28\29.1
+11239:GrRenderTargetProxy::~GrRenderTargetProxy\28\29
+11240:GrRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+11241:GrRenderTargetProxy::instantiate\28GrResourceProvider*\29
+11242:GrRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+11243:GrRenderTargetProxy::callbackDesc\28\29\20const
+11244:GrRecordingContext::~GrRecordingContext\28\29.1
+11245:GrRecordingContext::abandoned\28\29
+11246:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\28\29.1
+11247:GrRRectShadowGeoProc::~GrRRectShadowGeoProc\28\29
+11248:GrRRectShadowGeoProc::onTextureSampler\28int\29\20const
+11249:GrRRectShadowGeoProc::name\28\29\20const
+11250:GrRRectShadowGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11251:GrRRectShadowGeoProc::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11252:GrQuadEffect::name\28\29\20const
+11253:GrQuadEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11254:GrQuadEffect::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11255:GrQuadEffect::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11256:GrQuadEffect::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11257:GrPorterDuffXPFactory::makeXferProcessor\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11258:GrPorterDuffXPFactory::analysisProperties\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\20const&\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11259:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\28\29.1
+11260:GrPerlinNoise2Effect::~GrPerlinNoise2Effect\28\29
+11261:GrPerlinNoise2Effect::onMakeProgramImpl\28\29\20const
+11262:GrPerlinNoise2Effect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11263:GrPerlinNoise2Effect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11264:GrPerlinNoise2Effect::name\28\29\20const
+11265:GrPerlinNoise2Effect::clone\28\29\20const
+11266:GrPerlinNoise2Effect::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11267:GrPerlinNoise2Effect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11268:GrPathTessellationShader::Impl::~Impl\28\29
+11269:GrPathTessellationShader::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11270:GrPathTessellationShader::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11271:GrOpsRenderPass::~GrOpsRenderPass\28\29
+11272:GrOpsRenderPass::onExecuteDrawable\28std::__2::unique_ptr<SkDrawable::GpuDrawHandler\2c\20std::__2::default_delete<SkDrawable::GpuDrawHandler>>\29
+11273:GrOpsRenderPass::onDrawIndirect\28GrBuffer\20const*\2c\20unsigned\20long\2c\20int\29
+11274:GrOpsRenderPass::onDrawIndexedIndirect\28GrBuffer\20const*\2c\20unsigned\20long\2c\20int\29
+11275:GrOpFlushState::~GrOpFlushState\28\29.1
+11276:GrOpFlushState::~GrOpFlushState\28\29
+11277:GrOpFlushState::writeView\28\29\20const
+11278:GrOpFlushState::usesMSAASurface\28\29\20const
+11279:GrOpFlushState::tokenTracker\28\29
+11280:GrOpFlushState::threadSafeCache\28\29\20const
+11281:GrOpFlushState::strikeCache\28\29\20const
+11282:GrOpFlushState::smallPathAtlasManager\28\29\20const
+11283:GrOpFlushState::sampledProxyArray\28\29
+11284:GrOpFlushState::rtProxy\28\29\20const
+11285:GrOpFlushState::resourceProvider\28\29\20const
+11286:GrOpFlushState::renderPassBarriers\28\29\20const
+11287:GrOpFlushState::recordDraw\28GrGeometryProcessor\20const*\2c\20GrSimpleMesh\20const*\2c\20int\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPrimitiveType\29
+11288:GrOpFlushState::putBackVertices\28int\2c\20unsigned\20long\29
+11289:GrOpFlushState::putBackIndirectDraws\28int\29
+11290:GrOpFlushState::putBackIndices\28int\29
+11291:GrOpFlushState::putBackIndexedIndirectDraws\28int\29
+11292:GrOpFlushState::makeVertexSpace\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+11293:GrOpFlushState::makeVertexSpaceAtLeast\28unsigned\20long\2c\20int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+11294:GrOpFlushState::makeIndexSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+11295:GrOpFlushState::makeIndexSpaceAtLeast\28int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+11296:GrOpFlushState::makeDrawIndirectSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+11297:GrOpFlushState::makeDrawIndexedIndirectSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+11298:GrOpFlushState::dstProxyView\28\29\20const
+11299:GrOpFlushState::colorLoadOp\28\29\20const
+11300:GrOpFlushState::atlasManager\28\29\20const
+11301:GrOpFlushState::appliedClip\28\29\20const
+11302:GrOpFlushState::addInlineUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\29
+11303:GrOp::~GrOp\28\29
+11304:GrOnFlushCallbackObject::postFlush\28skgpu::AtlasToken\29
+11305:GrModulateAtlasCoverageEffect::onMakeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11306:GrModulateAtlasCoverageEffect::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11307:GrModulateAtlasCoverageEffect::onMakeProgramImpl\28\29\20const
+11308:GrModulateAtlasCoverageEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11309:GrModulateAtlasCoverageEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11310:GrModulateAtlasCoverageEffect::name\28\29\20const
+11311:GrModulateAtlasCoverageEffect::clone\28\29\20const
+11312:GrMeshDrawOp::onPrepare\28GrOpFlushState*\29
+11313:GrMeshDrawOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+11314:GrMatrixEffect::onMakeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11315:GrMatrixEffect::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11316:GrMatrixEffect::onMakeProgramImpl\28\29\20const
+11317:GrMatrixEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11318:GrMatrixEffect::name\28\29\20const
+11319:GrMatrixEffect::clone\28\29\20const
+11320:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::~Listener\28\29.1
+11321:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::~Listener\28\29
+11322:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::$_0::__invoke\28void\20const*\2c\20void*\29
+11323:GrImageContext::~GrImageContext\28\29.1
+11324:GrImageContext::~GrImageContext\28\29
+11325:GrHardClip::apply\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrDrawOp*\2c\20GrAAType\2c\20GrAppliedClip*\2c\20SkRect*\29\20const
+11326:GrGpuResource::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+11327:GrGpuBuffer::~GrGpuBuffer\28\29
+11328:GrGpuBuffer::unref\28\29\20const
+11329:GrGpuBuffer::getResourceType\28\29\20const
+11330:GrGpuBuffer::computeScratchKey\28skgpu::ScratchKey*\29\20const
+11331:GrGeometryProcessor::onTextureSampler\28int\29\20const
+11332:GrGeometryProcessor::ProgramImpl::~ProgramImpl\28\29
+11333:GrGLVaryingHandler::~GrGLVaryingHandler\28\29
+11334:GrGLUniformHandler::~GrGLUniformHandler\28\29.1
+11335:GrGLUniformHandler::~GrGLUniformHandler\28\29
+11336:GrGLUniformHandler::samplerVariable\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\29\20const
+11337:GrGLUniformHandler::samplerSwizzle\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\29\20const
+11338:GrGLUniformHandler::internalAddUniformArray\28GrProcessor\20const*\2c\20unsigned\20int\2c\20SkSLType\2c\20char\20const*\2c\20bool\2c\20int\2c\20char\20const**\29
+11339:GrGLUniformHandler::getUniformCStr\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\29\20const
+11340:GrGLUniformHandler::appendUniformDecls\28GrShaderFlags\2c\20SkString*\29\20const
+11341:GrGLUniformHandler::addSampler\28GrBackendFormat\20const&\2c\20GrSamplerState\2c\20skgpu::Swizzle\20const&\2c\20char\20const*\2c\20GrShaderCaps\20const*\29
+11342:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29
+11343:GrGLTextureRenderTarget::onSetLabel\28\29
+11344:GrGLTextureRenderTarget::onRelease\28\29
+11345:GrGLTextureRenderTarget::onGpuMemorySize\28\29\20const
+11346:GrGLTextureRenderTarget::onAbandon\28\29
+11347:GrGLTextureRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+11348:GrGLTextureRenderTarget::backendFormat\28\29\20const
+11349:GrGLTexture::~GrGLTexture\28\29.1
+11350:GrGLTexture::~GrGLTexture\28\29
+11351:GrGLTexture::textureParamsModified\28\29
+11352:GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29
+11353:GrGLTexture::getBackendTexture\28\29\20const
+11354:GrGLSemaphore::~GrGLSemaphore\28\29.1
+11355:GrGLSemaphore::~GrGLSemaphore\28\29
+11356:GrGLSemaphore::setIsOwned\28\29
+11357:GrGLSemaphore::backendSemaphore\28\29\20const
+11358:GrGLSLVertexBuilder::~GrGLSLVertexBuilder\28\29
+11359:GrGLSLVertexBuilder::onFinalize\28\29
+11360:GrGLSLUniformHandler::inputSamplerSwizzle\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\29\20const
+11361:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+11362:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+11363:GrGLSLFragmentShaderBuilder::onFinalize\28\29
+11364:GrGLSLFragmentShaderBuilder::hasSecondaryOutput\28\29\20const
+11365:GrGLSLFragmentShaderBuilder::forceHighPrecision\28\29
+11366:GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\28skgpu::BlendEquation\29
+11367:GrGLRenderTarget::~GrGLRenderTarget\28\29.1
+11368:GrGLRenderTarget::~GrGLRenderTarget\28\29
+11369:GrGLRenderTarget::onGpuMemorySize\28\29\20const
+11370:GrGLRenderTarget::getBackendRenderTarget\28\29\20const
+11371:GrGLRenderTarget::completeStencilAttachment\28GrAttachment*\2c\20bool\29
+11372:GrGLRenderTarget::canAttemptStencilAttachment\28bool\29\20const
+11373:GrGLRenderTarget::backendFormat\28\29\20const
+11374:GrGLRenderTarget::alwaysClearStencil\28\29\20const
+11375:GrGLProgramDataManager::~GrGLProgramDataManager\28\29.1
+11376:GrGLProgramDataManager::~GrGLProgramDataManager\28\29
+11377:GrGLProgramDataManager::setMatrix4fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+11378:GrGLProgramDataManager::setMatrix4f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\20const*\29\20const
+11379:GrGLProgramDataManager::setMatrix3fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+11380:GrGLProgramDataManager::setMatrix3f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\20const*\29\20const
+11381:GrGLProgramDataManager::setMatrix2fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+11382:GrGLProgramDataManager::setMatrix2f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\20const*\29\20const
+11383:GrGLProgramDataManager::set4iv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\20const*\29\20const
+11384:GrGLProgramDataManager::set4i\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\2c\20int\2c\20int\29\20const
+11385:GrGLProgramDataManager::set4f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\2c\20float\2c\20float\2c\20float\29\20const
+11386:GrGLProgramDataManager::set3iv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\20const*\29\20const
+11387:GrGLProgramDataManager::set3i\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\2c\20int\29\20const
+11388:GrGLProgramDataManager::set3fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+11389:GrGLProgramDataManager::set3f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\2c\20float\2c\20float\29\20const
+11390:GrGLProgramDataManager::set2iv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\20const*\29\20const
+11391:GrGLProgramDataManager::set2i\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\29\20const
+11392:GrGLProgramDataManager::set2f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\2c\20float\29\20const
+11393:GrGLProgramDataManager::set1iv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\20const*\29\20const
+11394:GrGLProgramDataManager::set1i\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\29\20const
+11395:GrGLProgramDataManager::set1fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+11396:GrGLProgramDataManager::set1f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\29\20const
+11397:GrGLProgramBuilder::~GrGLProgramBuilder\28\29.1
+11398:GrGLProgramBuilder::varyingHandler\28\29
+11399:GrGLProgramBuilder::shaderCompiler\28\29\20const
+11400:GrGLProgramBuilder::caps\28\29\20const
+11401:GrGLProgram::~GrGLProgram\28\29.1
+11402:GrGLOpsRenderPass::~GrGLOpsRenderPass\28\29
+11403:GrGLOpsRenderPass::onSetScissorRect\28SkIRect\20const&\29
+11404:GrGLOpsRenderPass::onEnd\28\29
+11405:GrGLOpsRenderPass::onDraw\28int\2c\20int\29
+11406:GrGLOpsRenderPass::onDrawInstanced\28int\2c\20int\2c\20int\2c\20int\29
+11407:GrGLOpsRenderPass::onDrawIndirect\28GrBuffer\20const*\2c\20unsigned\20long\2c\20int\29
+11408:GrGLOpsRenderPass::onDrawIndexed\28int\2c\20int\2c\20unsigned\20short\2c\20unsigned\20short\2c\20int\29
+11409:GrGLOpsRenderPass::onDrawIndexedInstanced\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+11410:GrGLOpsRenderPass::onDrawIndexedIndirect\28GrBuffer\20const*\2c\20unsigned\20long\2c\20int\29
+11411:GrGLOpsRenderPass::onClear\28GrScissorState\20const&\2c\20std::__2::array<float\2c\204ul>\29
+11412:GrGLOpsRenderPass::onClearStencilClip\28GrScissorState\20const&\2c\20bool\29
+11413:GrGLOpsRenderPass::onBindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29
+11414:GrGLOpsRenderPass::onBindPipeline\28GrProgramInfo\20const&\2c\20SkRect\20const&\29
+11415:GrGLOpsRenderPass::onBindBuffers\28sk_sp<GrBuffer\20const>\2c\20sk_sp<GrBuffer\20const>\2c\20sk_sp<GrBuffer\20const>\2c\20GrPrimitiveRestart\29
+11416:GrGLOpsRenderPass::onBegin\28\29
+11417:GrGLOpsRenderPass::inlineUpload\28GrOpFlushState*\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\29
+11418:GrGLInterface::~GrGLInterface\28\29.1
+11419:GrGLInterface::~GrGLInterface\28\29
+11420:GrGLGpu::~GrGLGpu\28\29.1
+11421:GrGLGpu::xferBarrier\28GrRenderTarget*\2c\20GrXferBarrierType\29
+11422:GrGLGpu::wrapBackendSemaphore\28GrBackendSemaphore\20const&\2c\20GrSemaphoreWrapType\2c\20GrWrapOwnership\29
+11423:GrGLGpu::willExecute\28\29
+11424:GrGLGpu::waitSemaphore\28GrSemaphore*\29
+11425:GrGLGpu::waitFence\28unsigned\20long\20long\29
+11426:GrGLGpu::submit\28GrOpsRenderPass*\29
+11427:GrGLGpu::stagingBufferManager\28\29
+11428:GrGLGpu::refPipelineBuilder\28\29
+11429:GrGLGpu::prepareTextureForCrossContextUsage\28GrTexture*\29
+11430:GrGLGpu::precompileShader\28SkData\20const&\2c\20SkData\20const&\29
+11431:GrGLGpu::onWritePixels\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20bool\29
+11432:GrGLGpu::onWrapRenderableBackendTexture\28GrBackendTexture\20const&\2c\20int\2c\20GrWrapOwnership\2c\20GrWrapCacheable\29
+11433:GrGLGpu::onWrapCompressedBackendTexture\28GrBackendTexture\20const&\2c\20GrWrapOwnership\2c\20GrWrapCacheable\29
+11434:GrGLGpu::onWrapBackendTexture\28GrBackendTexture\20const&\2c\20GrWrapOwnership\2c\20GrWrapCacheable\2c\20GrIOType\29
+11435:GrGLGpu::onWrapBackendRenderTarget\28GrBackendRenderTarget\20const&\29
+11436:GrGLGpu::onUpdateCompressedBackendTexture\28GrBackendTexture\20const&\2c\20sk_sp<skgpu::RefCntedCallback>\2c\20void\20const*\2c\20unsigned\20long\29
+11437:GrGLGpu::onTransferPixelsTo\28GrTexture*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20sk_sp<GrGpuBuffer>\2c\20unsigned\20long\2c\20unsigned\20long\29
+11438:GrGLGpu::onTransferPixelsFrom\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20sk_sp<GrGpuBuffer>\2c\20unsigned\20long\29
+11439:GrGLGpu::onTransferFromBufferToBuffer\28sk_sp<GrGpuBuffer>\2c\20unsigned\20long\2c\20sk_sp<GrGpuBuffer>\2c\20unsigned\20long\2c\20unsigned\20long\29
+11440:GrGLGpu::onSubmitToGpu\28GrSyncCpu\29
+11441:GrGLGpu::onResolveRenderTarget\28GrRenderTarget*\2c\20SkIRect\20const&\29
+11442:GrGLGpu::onResetTextureBindings\28\29
+11443:GrGLGpu::onResetContext\28unsigned\20int\29
+11444:GrGLGpu::onRegenerateMipMapLevels\28GrTexture*\29
+11445:GrGLGpu::onReadPixels\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20void*\2c\20unsigned\20long\29
+11446:GrGLGpu::onGetOpsRenderPass\28GrRenderTarget*\2c\20bool\2c\20GrAttachment*\2c\20GrSurfaceOrigin\2c\20SkIRect\20const&\2c\20GrOpsRenderPass::LoadAndStoreInfo\20const&\2c\20GrOpsRenderPass::StencilLoadAndStoreInfo\20const&\2c\20skia_private::TArray<GrSurfaceProxy*\2c\20true>\20const&\2c\20GrXferBarrierFlags\29
+11447:GrGLGpu::onDumpJSON\28SkJSONWriter*\29\20const
+11448:GrGLGpu::onCreateTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+11449:GrGLGpu::onCreateCompressedTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20skgpu::Budgeted\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20void\20const*\2c\20unsigned\20long\29
+11450:GrGLGpu::onCreateCompressedBackendTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\29
+11451:GrGLGpu::onCreateBuffer\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\29
+11452:GrGLGpu::onCreateBackendTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20skgpu::Renderable\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+11453:GrGLGpu::onCopySurface\28GrSurface*\2c\20SkIRect\20const&\2c\20GrSurface*\2c\20SkIRect\20const&\2c\20SkFilterMode\29
+11454:GrGLGpu::onClearBackendTexture\28GrBackendTexture\20const&\2c\20sk_sp<skgpu::RefCntedCallback>\2c\20std::__2::array<float\2c\204ul>\29
+11455:GrGLGpu::makeStencilAttachment\28GrBackendFormat\20const&\2c\20SkISize\2c\20int\29
+11456:GrGLGpu::makeSemaphore\28bool\29
+11457:GrGLGpu::makeMSAAAttachment\28SkISize\2c\20GrBackendFormat\20const&\2c\20int\2c\20skgpu::Protected\2c\20GrMemoryless\29
+11458:GrGLGpu::insertSemaphore\28GrSemaphore*\29
+11459:GrGLGpu::insertFence\28\29
+11460:GrGLGpu::getPreferredStencilFormat\28GrBackendFormat\20const&\29
+11461:GrGLGpu::finishOutstandingGpuWork\28\29
+11462:GrGLGpu::disconnect\28GrGpu::DisconnectType\29
+11463:GrGLGpu::deleteFence\28unsigned\20long\20long\29
+11464:GrGLGpu::deleteBackendTexture\28GrBackendTexture\20const&\29
+11465:GrGLGpu::compile\28GrProgramDesc\20const&\2c\20GrProgramInfo\20const&\29
+11466:GrGLGpu::checkFinishProcs\28\29
+11467:GrGLGpu::addFinishedProc\28void\20\28*\29\28void*\29\2c\20void*\29
+11468:GrGLGpu::ProgramCache::~ProgramCache\28\29.1
+11469:GrGLGpu::ProgramCache::~ProgramCache\28\29
+11470:GrGLFunction<void\20\28unsigned\20int\2c\20unsigned\20int\2c\20float\29>::GrGLFunction\28void\20\28*\29\28unsigned\20int\2c\20unsigned\20int\2c\20float\29\29::'lambda'\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20float\29::__invoke\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20float\29
+11471:GrGLFunction<void\20\28int\2c\20float\2c\20float\2c\20float\29>::GrGLFunction\28void\20\28*\29\28int\2c\20float\2c\20float\2c\20float\29\29::'lambda'\28void\20const*\2c\20int\2c\20float\2c\20float\2c\20float\29::__invoke\28void\20const*\2c\20int\2c\20float\2c\20float\2c\20float\29
+11472:GrGLFunction<void\20\28float\2c\20float\2c\20float\2c\20float\29>::GrGLFunction\28void\20\28*\29\28float\2c\20float\2c\20float\2c\20float\29\29::'lambda'\28void\20const*\2c\20float\2c\20float\2c\20float\2c\20float\29::__invoke\28void\20const*\2c\20float\2c\20float\2c\20float\2c\20float\29
+11473:GrGLFunction<void\20\28float\29>::GrGLFunction\28void\20\28*\29\28float\29\29::'lambda'\28void\20const*\2c\20float\29::__invoke\28void\20const*\2c\20float\29
+11474:GrGLFunction<void\20\28__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29>::GrGLFunction\28void\20\28*\29\28__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29\29::'lambda'\28void\20const*\2c\20__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29::__invoke\28void\20const*\2c\20__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29
+11475:GrGLFunction<void\20\28\29>::GrGLFunction\28void\20\28*\29\28\29\29::'lambda'\28void\20const*\29::__invoke\28void\20const*\29
+11476:GrGLFunction<unsigned\20int\20\28__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29>::GrGLFunction\28unsigned\20int\20\28*\29\28__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29\29::'lambda'\28void\20const*\2c\20__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29::__invoke\28void\20const*\2c\20__GLsync*\2c\20unsigned\20int\2c\20unsigned\20long\20long\29
+11477:GrGLFunction<unsigned\20int\20\28\29>::GrGLFunction\28unsigned\20int\20\28*\29\28\29\29::'lambda'\28void\20const*\29::__invoke\28void\20const*\29
+11478:GrGLCaps::~GrGLCaps\28\29.1
+11479:GrGLCaps::surfaceSupportsReadPixels\28GrSurface\20const*\29\20const
+11480:GrGLCaps::supportedWritePixelsColorType\28GrColorType\2c\20GrBackendFormat\20const&\2c\20GrColorType\29\20const
+11481:GrGLCaps::onSurfaceSupportsWritePixels\28GrSurface\20const*\29\20const
+11482:GrGLCaps::onSupportsDynamicMSAA\28GrRenderTargetProxy\20const*\29\20const
+11483:GrGLCaps::onSupportedReadPixelsColorType\28GrColorType\2c\20GrBackendFormat\20const&\2c\20GrColorType\29\20const
+11484:GrGLCaps::onIsWindowRectanglesSupportedForRT\28GrBackendRenderTarget\20const&\29\20const
+11485:GrGLCaps::onGetReadSwizzle\28GrBackendFormat\20const&\2c\20GrColorType\29\20const
+11486:GrGLCaps::onGetDstSampleFlagsForProxy\28GrRenderTargetProxy\20const*\29\20const
+11487:GrGLCaps::onGetDefaultBackendFormat\28GrColorType\29\20const
+11488:GrGLCaps::onDumpJSON\28SkJSONWriter*\29\20const
+11489:GrGLCaps::onCanCopySurface\28GrSurfaceProxy\20const*\2c\20SkIRect\20const&\2c\20GrSurfaceProxy\20const*\2c\20SkIRect\20const&\29\20const
+11490:GrGLCaps::onAreColorTypeAndFormatCompatible\28GrColorType\2c\20GrBackendFormat\20const&\29\20const
+11491:GrGLCaps::onApplyOptionsOverrides\28GrContextOptions\20const&\29
+11492:GrGLCaps::maxRenderTargetSampleCount\28GrBackendFormat\20const&\29\20const
+11493:GrGLCaps::makeDesc\28GrRenderTarget*\2c\20GrProgramInfo\20const&\2c\20GrCaps::ProgramDescOverrideFlags\29\20const
+11494:GrGLCaps::isFormatTexturable\28GrBackendFormat\20const&\2c\20GrTextureType\29\20const
+11495:GrGLCaps::isFormatSRGB\28GrBackendFormat\20const&\29\20const
+11496:GrGLCaps::isFormatRenderable\28GrBackendFormat\20const&\2c\20int\29\20const
+11497:GrGLCaps::isFormatCopyable\28GrBackendFormat\20const&\29\20const
+11498:GrGLCaps::isFormatAsColorTypeRenderable\28GrColorType\2c\20GrBackendFormat\20const&\2c\20int\29\20const
+11499:GrGLCaps::getWriteSwizzle\28GrBackendFormat\20const&\2c\20GrColorType\29\20const
+11500:GrGLCaps::getRenderTargetSampleCount\28int\2c\20GrBackendFormat\20const&\29\20const
+11501:GrGLCaps::getDstCopyRestrictions\28GrRenderTargetProxy\20const*\2c\20GrColorType\29\20const
+11502:GrGLCaps::getBackendFormatFromCompressionType\28SkTextureCompressionType\29\20const
+11503:GrGLCaps::computeFormatKey\28GrBackendFormat\20const&\29\20const
+11504:GrGLBuffer::~GrGLBuffer\28\29.1
+11505:GrGLBuffer::~GrGLBuffer\28\29
+11506:GrGLBuffer::setMemoryBacking\28SkTraceMemoryDump*\2c\20SkString\20const&\29\20const
+11507:GrGLBuffer::onUpdateData\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+11508:GrGLBuffer::onUnmap\28GrGpuBuffer::MapType\29
+11509:GrGLBuffer::onSetLabel\28\29
+11510:GrGLBuffer::onRelease\28\29
+11511:GrGLBuffer::onMap\28GrGpuBuffer::MapType\29
+11512:GrGLBuffer::onClearToZero\28\29
+11513:GrGLBuffer::onAbandon\28\29
+11514:GrGLBackendTextureData::~GrGLBackendTextureData\28\29.1
+11515:GrGLBackendTextureData::~GrGLBackendTextureData\28\29
+11516:GrGLBackendTextureData::isSameTexture\28GrBackendTextureData\20const*\29\20const
+11517:GrGLBackendTextureData::isProtected\28\29\20const
+11518:GrGLBackendTextureData::getBackendFormat\28\29\20const
+11519:GrGLBackendTextureData::equal\28GrBackendTextureData\20const*\29\20const
+11520:GrGLBackendTextureData::copyTo\28SkAnySubclass<GrBackendTextureData\2c\20160ul>&\29\20const
+11521:GrGLBackendRenderTargetData::isProtected\28\29\20const
+11522:GrGLBackendRenderTargetData::getBackendFormat\28\29\20const
+11523:GrGLBackendRenderTargetData::equal\28GrBackendRenderTargetData\20const*\29\20const
+11524:GrGLBackendRenderTargetData::copyTo\28SkAnySubclass<GrBackendRenderTargetData\2c\20160ul>&\29\20const
+11525:GrGLBackendFormatData::toString\28\29\20const
+11526:GrGLBackendFormatData::stencilBits\28\29\20const
+11527:GrGLBackendFormatData::equal\28GrBackendFormatData\20const*\29\20const
+11528:GrGLBackendFormatData::desc\28\29\20const
+11529:GrGLBackendFormatData::copyTo\28SkAnySubclass<GrBackendFormatData\2c\2064ul>&\29\20const
+11530:GrGLBackendFormatData::compressionType\28\29\20const
+11531:GrGLBackendFormatData::channelMask\28\29\20const
+11532:GrGLBackendFormatData::bytesPerBlock\28\29\20const
+11533:GrGLAttachment::~GrGLAttachment\28\29
+11534:GrGLAttachment::setMemoryBacking\28SkTraceMemoryDump*\2c\20SkString\20const&\29\20const
+11535:GrGLAttachment::onSetLabel\28\29
+11536:GrGLAttachment::onRelease\28\29
+11537:GrGLAttachment::onAbandon\28\29
+11538:GrGLAttachment::backendFormat\28\29\20const
+11539:GrFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11540:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11541:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::onMakeProgramImpl\28\29\20const
+11542:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11543:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11544:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::name\28\29\20const
+11545:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11546:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::clone\28\29\20const
+11547:GrFragmentProcessor::SurfaceColor\28\29::SurfaceColorProcessor::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11548:GrFragmentProcessor::SurfaceColor\28\29::SurfaceColorProcessor::onMakeProgramImpl\28\29\20const
+11549:GrFragmentProcessor::SurfaceColor\28\29::SurfaceColorProcessor::name\28\29\20const
+11550:GrFragmentProcessor::SurfaceColor\28\29::SurfaceColorProcessor::clone\28\29\20const
+11551:GrFragmentProcessor::ProgramImpl::~ProgramImpl\28\29
+11552:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11553:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::onMakeProgramImpl\28\29\20const
+11554:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::name\28\29\20const
+11555:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::clone\28\29\20const
+11556:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::DeviceSpace::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11557:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::DeviceSpace::onMakeProgramImpl\28\29\20const
+11558:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::DeviceSpace::name\28\29\20const
+11559:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::DeviceSpace::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11560:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::DeviceSpace::clone\28\29\20const
+11561:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11562:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::onMakeProgramImpl\28\29\20const
+11563:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::name\28\29\20const
+11564:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11565:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::clone\28\29\20const
+11566:GrFixedClip::~GrFixedClip\28\29.1
+11567:GrFixedClip::~GrFixedClip\28\29
+11568:GrExternalTextureGenerator::onGenerateTexture\28GrRecordingContext*\2c\20SkImageInfo\20const&\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\29
+11569:GrEagerDynamicVertexAllocator::lock\28unsigned\20long\2c\20int\29
+11570:GrDynamicAtlas::~GrDynamicAtlas\28\29.1
+11571:GrDynamicAtlas::~GrDynamicAtlas\28\29
+11572:GrDrawOp::usesStencil\28\29\20const
+11573:GrDrawOp::usesMSAA\28\29\20const
+11574:GrDrawOp::fixedFunctionFlags\28\29\20const
+11575:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\28\29.1
+11576:GrDistanceFieldPathGeoProc::~GrDistanceFieldPathGeoProc\28\29
+11577:GrDistanceFieldPathGeoProc::onTextureSampler\28int\29\20const
+11578:GrDistanceFieldPathGeoProc::name\28\29\20const
+11579:GrDistanceFieldPathGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11580:GrDistanceFieldPathGeoProc::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11581:GrDistanceFieldPathGeoProc::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11582:GrDistanceFieldPathGeoProc::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11583:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\28\29.1
+11584:GrDistanceFieldLCDTextGeoProc::~GrDistanceFieldLCDTextGeoProc\28\29
+11585:GrDistanceFieldLCDTextGeoProc::name\28\29\20const
+11586:GrDistanceFieldLCDTextGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11587:GrDistanceFieldLCDTextGeoProc::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11588:GrDistanceFieldLCDTextGeoProc::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11589:GrDistanceFieldLCDTextGeoProc::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11590:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\28\29.1
+11591:GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\28\29
+11592:GrDistanceFieldA8TextGeoProc::name\28\29\20const
+11593:GrDistanceFieldA8TextGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11594:GrDistanceFieldA8TextGeoProc::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11595:GrDistanceFieldA8TextGeoProc::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11596:GrDistanceFieldA8TextGeoProc::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11597:GrDisableColorXPFactory::makeXferProcessor\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11598:GrDisableColorXPFactory::analysisProperties\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\20const&\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11599:GrDirectContext::~GrDirectContext\28\29.1
+11600:GrDirectContext::releaseResourcesAndAbandonContext\28\29
+11601:GrDirectContext::init\28\29
+11602:GrDirectContext::abandoned\28\29
+11603:GrDirectContext::abandonContext\28\29
+11604:GrDeferredProxyUploader::~GrDeferredProxyUploader\28\29.1
+11605:GrDeferredProxyUploader::~GrDeferredProxyUploader\28\29
+11606:GrCpuVertexAllocator::~GrCpuVertexAllocator\28\29.1
+11607:GrCpuVertexAllocator::~GrCpuVertexAllocator\28\29
+11608:GrCpuVertexAllocator::unlock\28int\29
+11609:GrCpuVertexAllocator::lock\28unsigned\20long\2c\20int\29
+11610:GrCpuBuffer::unref\28\29\20const
+11611:GrCoverageSetOpXPFactory::makeXferProcessor\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11612:GrCoverageSetOpXPFactory::analysisProperties\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\20const&\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11613:GrCopyRenderTask::~GrCopyRenderTask\28\29.1
+11614:GrCopyRenderTask::onMakeSkippable\28\29
+11615:GrCopyRenderTask::onMakeClosed\28GrRecordingContext*\2c\20SkIRect*\29
+11616:GrCopyRenderTask::onExecute\28GrOpFlushState*\29
+11617:GrCopyRenderTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+11618:GrConvexPolyEffect::onMakeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11619:GrConvexPolyEffect::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11620:GrConvexPolyEffect::onMakeProgramImpl\28\29\20const
+11621:GrConvexPolyEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11622:GrConvexPolyEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11623:GrConvexPolyEffect::name\28\29\20const
+11624:GrConvexPolyEffect::clone\28\29\20const
+11625:GrContext_Base::~GrContext_Base\28\29.1
+11626:GrConicEffect::name\28\29\20const
+11627:GrConicEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11628:GrConicEffect::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11629:GrConicEffect::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11630:GrConicEffect::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11631:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\28\29.1
+11632:GrColorSpaceXformEffect::~GrColorSpaceXformEffect\28\29
+11633:GrColorSpaceXformEffect::onMakeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11634:GrColorSpaceXformEffect::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11635:GrColorSpaceXformEffect::onMakeProgramImpl\28\29\20const
+11636:GrColorSpaceXformEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11637:GrColorSpaceXformEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11638:GrColorSpaceXformEffect::name\28\29\20const
+11639:GrColorSpaceXformEffect::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11640:GrColorSpaceXformEffect::clone\28\29\20const
+11641:GrCaps::~GrCaps\28\29
+11642:GrCaps::getDstCopyRestrictions\28GrRenderTargetProxy\20const*\2c\20GrColorType\29\20const
+11643:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\28\29.1
+11644:GrBitmapTextGeoProc::~GrBitmapTextGeoProc\28\29
+11645:GrBitmapTextGeoProc::onTextureSampler\28int\29\20const
+11646:GrBitmapTextGeoProc::name\28\29\20const
+11647:GrBitmapTextGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11648:GrBitmapTextGeoProc::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11649:GrBitmapTextGeoProc::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11650:GrBitmapTextGeoProc::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11651:GrBicubicEffect::onMakeProgramImpl\28\29\20const
+11652:GrBicubicEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11653:GrBicubicEffect::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11654:GrBicubicEffect::name\28\29\20const
+11655:GrBicubicEffect::clone\28\29\20const
+11656:GrBicubicEffect::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11657:GrBicubicEffect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11658:GrAttachment::onGpuMemorySize\28\29\20const
+11659:GrAttachment::getResourceType\28\29\20const
+11660:GrAttachment::computeScratchKey\28skgpu::ScratchKey*\29\20const
+11661:GrAtlasManager::~GrAtlasManager\28\29.1
+11662:GrAtlasManager::preFlush\28GrOnFlushResourceProvider*\29
+11663:GrAtlasManager::postFlush\28skgpu::AtlasToken\29
+11664:GrAATriangulator::tessellate\28GrTriangulator::VertexList\20const&\2c\20GrTriangulator::Comparator\20const&\29
+11665:GetRectsForRange\28skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29
+11666:GetRectsForPlaceholders\28skia::textlayout::Paragraph&\29
+11667:GetLineMetrics\28skia::textlayout::Paragraph&\29
+11668:GetLineMetricsAt\28skia::textlayout::Paragraph&\2c\20unsigned\20long\29
+11669:GetGlyphInfoAt\28skia::textlayout::Paragraph&\2c\20unsigned\20long\29
+11670:GetCoeffsFast
+11671:GetCoeffsAlt
+11672:GetClosestGlyphInfoAtCoordinate\28skia::textlayout::Paragraph&\2c\20float\2c\20float\29
+11673:FontMgrRunIterator::~FontMgrRunIterator\28\29.1
+11674:FontMgrRunIterator::~FontMgrRunIterator\28\29
+11675:FontMgrRunIterator::currentFont\28\29\20const
+11676:FontMgrRunIterator::consume\28\29
+11677:ExtractGreen_C
+11678:ExtractAlpha_C
+11679:ExtractAlphaRows
+11680:ExternalWebGLTexture::~ExternalWebGLTexture\28\29.1
+11681:ExternalWebGLTexture::~ExternalWebGLTexture\28\29
+11682:ExternalWebGLTexture::getBackendTexture\28\29
+11683:ExternalWebGLTexture::dispose\28\29
+11684:ExportAlphaRGBA4444
+11685:ExportAlpha
+11686:Equals\28SkPath\20const&\2c\20SkPath\20const&\29
+11687:EmptyFontLoader::loadSystemFonts\28SkTypeface_FreeType::Scanner\20const&\2c\20skia_private::TArray<sk_sp<SkFontStyleSet_Custom>\2c\20true>*\29\20const
+11688:EmitYUV
+11689:EmitSampledRGB
+11690:EmitRescaledYUV
+11691:EmitRescaledRGB
+11692:EmitRescaledAlphaYUV
+11693:EmitRescaledAlphaRGB
+11694:EmitFancyRGB
+11695:EmitAlphaYUV
+11696:EmitAlphaRGBA4444
+11697:EmitAlphaRGB
+11698:EllipticalRRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+11699:EllipticalRRectOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+11700:EllipticalRRectOp::name\28\29\20const
+11701:EllipticalRRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+11702:EllipseOp::onPrepareDraws\28GrMeshDrawTarget*\29
+11703:EllipseOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+11704:EllipseOp::name\28\29\20const
+11705:EllipseOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+11706:EllipseGeometryProcessor::name\28\29\20const
+11707:EllipseGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11708:EllipseGeometryProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11709:EllipseGeometryProcessor::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11710:Dual_Project
+11711:DitherCombine8x8_C
+11712:DispatchAlpha_C
+11713:DispatchAlphaToGreen_C
+11714:DisableColorXP::onGetBlendInfo\28skgpu::BlendInfo*\29\20const
+11715:DisableColorXP::name\28\29\20const
+11716:DisableColorXP::makeProgramImpl\28\29\20const::Impl::emitOutputsForBlendState\28GrXferProcessor::ProgramImpl::EmitArgs\20const&\29
+11717:DisableColorXP::makeProgramImpl\28\29\20const
+11718:Direct_Move_Y
+11719:Direct_Move_X
+11720:Direct_Move_Orig_Y
+11721:Direct_Move_Orig_X
+11722:Direct_Move_Orig
+11723:Direct_Move
+11724:DefaultGeoProc::name\28\29\20const
+11725:DefaultGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11726:DefaultGeoProc::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11727:DefaultGeoProc::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+11728:DefaultGeoProc::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11729:DataFontLoader::loadSystemFonts\28SkTypeface_FreeType::Scanner\20const&\2c\20skia_private::TArray<sk_sp<SkFontStyleSet_Custom>\2c\20true>*\29\20const
+11730:DataCacheElement_deleter\28void*\29
+11731:DIEllipseOp::~DIEllipseOp\28\29.1
+11732:DIEllipseOp::~DIEllipseOp\28\29
+11733:DIEllipseOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+11734:DIEllipseOp::onPrepareDraws\28GrMeshDrawTarget*\29
+11735:DIEllipseOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+11736:DIEllipseOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+11737:DIEllipseOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+11738:DIEllipseOp::name\28\29\20const
+11739:DIEllipseOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+11740:DIEllipseGeometryProcessor::name\28\29\20const
+11741:DIEllipseGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11742:DIEllipseGeometryProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11743:DIEllipseGeometryProcessor::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11744:DC8uv_C
+11745:DC8uvNoTop_C
+11746:DC8uvNoTopLeft_C
+11747:DC8uvNoLeft_C
+11748:DC4_C
+11749:DC16_C
+11750:DC16NoTop_C
+11751:DC16NoTopLeft_C
+11752:DC16NoLeft_C
+11753:CustomXPFactory::makeXferProcessor\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11754:CustomXPFactory::analysisProperties\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\20const&\2c\20GrCaps\20const&\2c\20GrClampType\29\20const
+11755:CustomXP::xferBarrierType\28GrCaps\20const&\29\20const
+11756:CustomXP::onGetBlendInfo\28skgpu::BlendInfo*\29\20const
+11757:CustomXP::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11758:CustomXP::name\28\29\20const
+11759:CustomXP::makeProgramImpl\28\29\20const::Impl::emitOutputsForBlendState\28GrXferProcessor::ProgramImpl::EmitArgs\20const&\29
+11760:CustomXP::makeProgramImpl\28\29\20const
+11761:CustomTeardown
+11762:CustomSetup
+11763:CustomPut
+11764:Current_Ppem_Stretched
+11765:Current_Ppem
+11766:Cr_z_zcfree
+11767:Cr_z_zcalloc
+11768:CoverageSetOpXP::onGetBlendInfo\28skgpu::BlendInfo*\29\20const
+11769:CoverageSetOpXP::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11770:CoverageSetOpXP::name\28\29\20const
+11771:CoverageSetOpXP::makeProgramImpl\28\29\20const::Impl::emitOutputsForBlendState\28GrXferProcessor::ProgramImpl::EmitArgs\20const&\29
+11772:CoverageSetOpXP::makeProgramImpl\28\29\20const
+11773:CopyPath\28SkPath\20const&\29
+11774:ConvertRGB24ToY_C
+11775:ConvertBGR24ToY_C
+11776:ConvertARGBToY_C
+11777:ColorTableEffect::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11778:ColorTableEffect::onMakeProgramImpl\28\29\20const
+11779:ColorTableEffect::name\28\29\20const
+11780:ColorTableEffect::clone\28\29\20const
+11781:CircularRRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+11782:CircularRRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+11783:CircularRRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+11784:CircularRRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+11785:CircularRRectOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+11786:CircularRRectOp::name\28\29\20const
+11787:CircularRRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+11788:CircleOp::~CircleOp\28\29.1
+11789:CircleOp::~CircleOp\28\29
+11790:CircleOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+11791:CircleOp::programInfo\28\29
+11792:CircleOp::onPrepareDraws\28GrMeshDrawTarget*\29
+11793:CircleOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+11794:CircleOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+11795:CircleOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+11796:CircleOp::name\28\29\20const
+11797:CircleOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+11798:CircleGeometryProcessor::name\28\29\20const
+11799:CircleGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11800:CircleGeometryProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11801:CircleGeometryProcessor::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11802:CanInterpolate\28SkPath\20const&\2c\20SkPath\20const&\29
+11803:ButtCapper\28SkPath*\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPath*\29
+11804:ButtCapDashedCircleOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+11805:ButtCapDashedCircleOp::programInfo\28\29
+11806:ButtCapDashedCircleOp::onPrepareDraws\28GrMeshDrawTarget*\29
+11807:ButtCapDashedCircleOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+11808:ButtCapDashedCircleOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+11809:ButtCapDashedCircleOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+11810:ButtCapDashedCircleOp::name\28\29\20const
+11811:ButtCapDashedCircleOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+11812:ButtCapDashedCircleGeometryProcessor::name\28\29\20const
+11813:ButtCapDashedCircleGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+11814:ButtCapDashedCircleGeometryProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11815:ButtCapDashedCircleGeometryProcessor::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+11816:BluntJoiner\28SkPath*\2c\20SkPath*\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20float\2c\20bool\2c\20bool\29
+11817:BlendFragmentProcessor::onMakeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+11818:BlendFragmentProcessor::onMakeProgramImpl\28\29\20const::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29
+11819:BlendFragmentProcessor::onMakeProgramImpl\28\29\20const
+11820:BlendFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+11821:BlendFragmentProcessor::onAddToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+11822:BlendFragmentProcessor::name\28\29\20const
+11823:BlendFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+11824:BlendFragmentProcessor::clone\28\29\20const
+11825:AutoCleanPng::infoCallback\28unsigned\20long\29
+11826:AutoCleanPng::decodeBounds\28\29
+11827:ApplyTrim\28SkPath&\2c\20float\2c\20float\2c\20bool\29
+11828:ApplyTransform\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+11829:ApplyStroke\28SkPath&\2c\20StrokeOpts\29
+11830:ApplySimplify\28SkPath&\29
+11831:ApplyRewind\28SkPath&\29
+11832:ApplyReset\28SkPath&\29
+11833:ApplyRQuadTo\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\29
+11834:ApplyRMoveTo\28SkPath&\2c\20float\2c\20float\29
+11835:ApplyRLineTo\28SkPath&\2c\20float\2c\20float\29
+11836:ApplyRCubicTo\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+11837:ApplyRConicTo\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+11838:ApplyRArcToArcSize\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29
+11839:ApplyQuadTo\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\29
+11840:ApplyPathOp\28SkPath&\2c\20SkPath\20const&\2c\20SkPathOp\29
+11841:ApplyMoveTo\28SkPath&\2c\20float\2c\20float\29
+11842:ApplyLineTo\28SkPath&\2c\20float\2c\20float\29
+11843:ApplyDash\28SkPath&\2c\20float\2c\20float\2c\20float\29
+11844:ApplyCubicTo\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+11845:ApplyConicTo\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+11846:ApplyClose\28SkPath&\29
+11847:ApplyArcToTangent\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+11848:ApplyArcToArcSize\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29
+11849:ApplyAlphaMultiply_C
+11850:ApplyAlphaMultiply_16b_C
+11851:ApplyAddPath\28SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29
+11852:AlphaReplace_C
+11853:$_3::__invoke\28unsigned\20char*\2c\20unsigned\20char\2c\20int\2c\20unsigned\20char\29
+11854:$_2::__invoke\28unsigned\20char*\2c\20unsigned\20char\2c\20int\29
+11855:$_1::__invoke\28unsigned\20char*\2c\20unsigned\20char\2c\20int\2c\20unsigned\20char\29
+11856:$_0::__invoke\28unsigned\20char*\2c\20unsigned\20char\2c\20int\29
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.wasm b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.wasm
index d198f0e..62a4b23 100755
--- a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.wasm
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/canvaskit.wasm
Binary files differ
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js
index 422b809..84aa78a 100644
--- a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js
@@ -65,11 +65,11 @@
a.MakeVertices=function(g,d,h,n,t,v){var z=t&&t.length||0,E=0;h&&h.length&&(E|=1);n&&n.length&&(E|=2);void 0===v||v||(E|=4);g=new a._VerticesBuilder(g,d.length/2,z,E);l(d,"HEAPF32",g.positions());g.texCoords()&&l(h,"HEAPF32",g.texCoords());g.colors()&&l(c(n),"HEAPU32",g.colors());g.indices()&&l(t,"HEAPU16",g.indices());return g.detach()};(function(g){g.Hd=g.Hd||[];g.Hd.push(function(){function d(p){p&&(p.dir=0===p.dir?g.TextDirection.RTL:g.TextDirection.LTR);return p}function h(p){if(!p||!p.length)return[];
for(var A=[],O=0;O<p.length;O+=5){var Z=g.LTRBRect(p[O],p[O+1],p[O+2],p[O+3]),za=g.TextDirection.LTR;0===p[O+4]&&(za=g.TextDirection.RTL);A.push({rect:Z,dir:za})}g._free(p.byteOffset);return A}function n(p){p=p||{};void 0===p.weight&&(p.weight=g.FontWeight.Normal);p.width=p.width||g.FontWidth.Normal;p.slant=p.slant||g.FontSlant.Upright;return p}function t(p){if(!p||!p.length)return M;for(var A=[],O=0;O<p.length;O++){var Z=v(p[O]);A.push(Z)}return l(A,"HEAPU32")}function v(p){if(J[p])return J[p];var A=
ja(p)+1,O=g._malloc(A);ka(p,C,O,A);return J[p]=O}function z(p){p._colorPtr=y(p.color);p._foregroundColorPtr=M;p._backgroundColorPtr=M;p._decorationColorPtr=M;p.foregroundColor&&(p._foregroundColorPtr=y(p.foregroundColor,I));p.backgroundColor&&(p._backgroundColorPtr=y(p.backgroundColor,U));p.decorationColor&&(p._decorationColorPtr=y(p.decorationColor,V));Array.isArray(p.fontFamilies)&&p.fontFamilies.length?(p._fontFamiliesPtr=t(p.fontFamilies),p._fontFamiliesLen=p.fontFamilies.length):(p._fontFamiliesPtr=
-M,p._fontFamiliesLen=0);if(p.locale){var A=p.locale;p._localePtr=v(A);p._localeLen=ja(A)+1}else p._localePtr=M,p._localeLen=0;if(Array.isArray(p.shadows)&&p.shadows.length){A=p.shadows;var O=A.map(function(qa){return qa.color||g.BLACK}),Z=A.map(function(qa){return qa.blurRadius||0});p._shadowLen=A.length;for(var za=g._malloc(8*A.length),Hb=za/4,Ib=0;Ib<A.length;Ib++){var lc=A[Ib].offset||[0,0];g.HEAPF32[Hb]=lc[0];g.HEAPF32[Hb+1]=lc[1];Hb+=2}p._shadowColorsPtr=m(O).Md;p._shadowOffsetsPtr=za;p._shadowBlurRadiiPtr=
+M,p._fontFamiliesLen=0);if(p.locale){var A=p.locale;p._localePtr=v(A);p._localeLen=ja(A)}else p._localePtr=M,p._localeLen=0;if(Array.isArray(p.shadows)&&p.shadows.length){A=p.shadows;var O=A.map(function(qa){return qa.color||g.BLACK}),Z=A.map(function(qa){return qa.blurRadius||0});p._shadowLen=A.length;for(var za=g._malloc(8*A.length),Hb=za/4,Ib=0;Ib<A.length;Ib++){var lc=A[Ib].offset||[0,0];g.HEAPF32[Hb]=lc[0];g.HEAPF32[Hb+1]=lc[1];Hb+=2}p._shadowColorsPtr=m(O).Md;p._shadowOffsetsPtr=za;p._shadowBlurRadiiPtr=
l(Z,"HEAPF32")}else p._shadowLen=0,p._shadowColorsPtr=M,p._shadowOffsetsPtr=M,p._shadowBlurRadiiPtr=M;Array.isArray(p.fontFeatures)&&p.fontFeatures.length?(A=p.fontFeatures,O=A.map(function(qa){return qa.name}),Z=A.map(function(qa){return qa.value}),p._fontFeatureLen=A.length,p._fontFeatureNamesPtr=t(O),p._fontFeatureValuesPtr=l(Z,"HEAPU32")):(p._fontFeatureLen=0,p._fontFeatureNamesPtr=M,p._fontFeatureValuesPtr=M);Array.isArray(p.fontVariations)&&p.fontVariations.length?(A=p.fontVariations,O=A.map(function(qa){return qa.axis}),
Z=A.map(function(qa){return qa.value}),p._fontVariationLen=A.length,p._fontVariationAxesPtr=t(O),p._fontVariationValuesPtr=l(Z,"HEAPF32")):(p._fontVariationLen=0,p._fontVariationAxesPtr=M,p._fontVariationValuesPtr=M)}function E(p){g._free(p._fontFamiliesPtr);g._free(p._shadowColorsPtr);g._free(p._shadowOffsetsPtr);g._free(p._shadowBlurRadiiPtr);g._free(p._fontFeatureNamesPtr);g._free(p._fontFeatureValuesPtr);g._free(p._fontVariationAxesPtr);g._free(p._fontVariationValuesPtr)}g.Paragraph.prototype.getRectsForRange=
-function(p,A,O,Z){p=this._getRectsForRange(p,A,O,Z);return h(p)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var p=this._getRectsForPlaceholders();return h(p)};g.Paragraph.prototype.getGlyphInfoAt=function(p){return d(this._getGlyphInfoAt(p))};g.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(p,A){return d(this._getClosestGlyphInfoAtCoordinate(p,A))};g.TypefaceFontProvider.prototype.registerFont=function(p,A){p=g.Typeface.MakeFreeTypeFaceFromData(p);if(!p)return null;A=v(A);
-this._registerFont(p,A)};g.ParagraphStyle=function(p){p.disableHinting=p.disableHinting||!1;if(p.ellipsis){var A=p.ellipsis;p._ellipsisPtr=v(A);p._ellipsisLen=ja(A)+1}else p._ellipsisPtr=M,p._ellipsisLen=0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.maxLines=p.maxLines||0;p.replaceTabCharacters=p.replaceTabCharacters||!1;A=(A=p.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=t(A.fontFamilies),A._fontFamiliesLen=
+function(p,A,O,Z){p=this._getRectsForRange(p,A,O,Z);return h(p)};g.Paragraph.prototype.getRectsForPlaceholders=function(){var p=this._getRectsForPlaceholders();return h(p)};g.Paragraph.prototype.getGlyphInfoAt=function(p){return d(this._getGlyphInfoAt(p))};g.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(p,A){return d(this._getClosestGlyphInfoAtCoordinate(p,A))};g.TypefaceFontProvider.prototype.registerFont=function(p,A){p=g.Typeface.MakeTypefaceFromData(p);if(!p)return null;A=v(A);
+this._registerFont(p,A)};g.ParagraphStyle=function(p){p.disableHinting=p.disableHinting||!1;if(p.ellipsis){var A=p.ellipsis;p._ellipsisPtr=v(A);p._ellipsisLen=ja(A)}else p._ellipsisPtr=M,p._ellipsisLen=0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.maxLines=p.maxLines||0;p.replaceTabCharacters=p.replaceTabCharacters||!1;A=(A=p.strutStyle)||{};A.strutEnabled=A.strutEnabled||!1;A.strutEnabled&&Array.isArray(A.fontFamilies)&&A.fontFamilies.length?(A._fontFamiliesPtr=t(A.fontFamilies),A._fontFamiliesLen=
A.fontFamilies.length):(A._fontFamiliesPtr=M,A._fontFamiliesLen=0);A.fontStyle=n(A.fontStyle);null==A.fontSize&&(A.fontSize=-1);null==A.heightMultiplier&&(A.heightMultiplier=-1);A.halfLeading=A.halfLeading||!1;A.leading=A.leading||0;A.forceStrutHeight=A.forceStrutHeight||!1;p.strutStyle=A;p.textAlign=p.textAlign||g.TextAlign.Start;p.textDirection=p.textDirection||g.TextDirection.LTR;p.textHeightBehavior=p.textHeightBehavior||g.TextHeightBehavior.All;p.textStyle=g.TextStyle(p.textStyle);p.applyRoundingHack=
!1!==p.applyRoundingHack;return p};g.TextStyle=function(p){p.color||(p.color=g.BLACK);p.decoration=p.decoration||0;p.decorationThickness=p.decorationThickness||0;p.decorationStyle=p.decorationStyle||g.DecorationStyle.Solid;p.textBaseline=p.textBaseline||g.TextBaseline.Alphabetic;null==p.fontSize&&(p.fontSize=-1);p.letterSpacing=p.letterSpacing||0;p.wordSpacing=p.wordSpacing||0;null==p.heightMultiplier&&(p.heightMultiplier=-1);p.halfLeading=p.halfLeading||!1;p.fontStyle=n(p.fontStyle);return p};var J=
{},I=g._malloc(16),U=g._malloc(16),V=g._malloc(16);g.ParagraphBuilder.Make=function(p,A){z(p.textStyle);A=g.ParagraphBuilder._Make(p,A);E(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontProvider=function(p,A){z(p.textStyle);A=g.ParagraphBuilder._MakeFromFontProvider(p,A);E(p.textStyle);return A};g.ParagraphBuilder.MakeFromFontCollection=function(p,A){z(p.textStyle);A=g.ParagraphBuilder._MakeFromFontCollection(p,A);E(p.textStyle);return A};g.ParagraphBuilder.ShapeText=function(p,A,O){let Z=0;
@@ -79,12 +79,12 @@
function(g,d,h,n,t){var v=ja(g),z=a._malloc(v+1);ka(g,C,z,v+1);this._drawSimpleText(z,v,d,h,t,n);a._free(z)};a.Canvas.prototype.drawGlyphs=function(g,d,h,n,t,v){if(!(2*g.length<=d.length))throw"Not enough positions for the array of gyphs";a.Ed(this.Dd);const z=l(g,"HEAPU16"),E=l(d,"HEAPF32");this._drawGlyphs(g.length,z,E,h,n,t,v);k(E,d);k(z,g)};a.Font.prototype.getGlyphBounds=function(g,d,h){var n=l(g,"HEAPU16"),t=a._malloc(16*g.length);this._getGlyphWidthBounds(n,g.length,M,t,d||null);d=new Float32Array(a.HEAPU8.buffer,
t,4*g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.Font.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.Font.prototype.getGlyphIntercepts=function(g,d,h,n){var t=l(g,"HEAPU16"),v=l(d,"HEAPF32");return this._getGlyphIntercepts(t,
g.length,!(g&&g._ck),v,d.length,!(d&&d._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,d,h){var n=l(g,"HEAPU16"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,d||null);d=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.FontMgr.FromData=function(){if(!arguments.length)return null;var g=arguments;1===g.length&&Array.isArray(g[0])&&(g=arguments[0]);if(!g.length)return null;for(var d=[],h=[],n=
-0;n<g.length;n++){var t=new Uint8Array(g[n]),v=l(t,"HEAPU8");d.push(v);h.push(t.byteLength)}d=l(d,"HEAPU32");h=l(h,"HEAPU32");g=a.FontMgr._fromData(d,h,g.length);a._free(d);a._free(h);return g};a.Typeface.MakeFreeTypeFaceFromData=function(g){g=new Uint8Array(g);var d=l(g,"HEAPU8");return(g=a.Typeface._MakeFreeTypeFaceFromData(d,g.byteLength))?g:null};a.Typeface.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,
-d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,d,h,n){if(g&&g.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var v=[];d=new a.ContourMeasureIter(d,!1,1);for(var z=d.next(),E=new Float32Array(4),J=0;J<g.length&&z;J++){var I=t[J];n+=I/2;if(n>z.length()){z.delete();z=
-d.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];v.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,v,h);z&&z.delete();d.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,d,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(d,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,d,h){var n=l(g,"HEAPU16");d=l(d,"HEAPF32");h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,d,h);k(n,
-g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,d){var h=l(g,"HEAPU16");d=a.TextBlob._MakeFromGlyphs(h,2*g.length,d);k(h,g);return d?d:null};a.TextBlob.MakeFromText=function(g,d){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,d);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Hd=a.Hd||[];a.Hd.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._MakePicture(d,
-g.byteLength))?g:null}});a.Hd=a.Hd||[];a.Hd.push(function(){a.RuntimeEffect.Make=function(g,d){return a.RuntimeEffect._Make(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.MakeForBlender=function(g,d){return a.RuntimeEffect._MakeForBlender(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,d){var h=!g._ck,n=l(g,"HEAPF32");d=q(d);return this._makeShader(n,4*g.length,h,d)};a.RuntimeEffect.prototype.makeShaderWithChildren=
-function(g,d,h){var n=!g._ck,t=l(g,"HEAPF32");h=q(h);for(var v=[],z=0;z<d.length;z++)v.push(d[z].jd.Fd);d=l(v,"HEAPU32");return this._makeShaderWithChildren(t,4*g.length,n,d,v.length,h)};a.RuntimeEffect.prototype.makeBlender=function(g){var d=!g._ck,h=l(g,"HEAPF32");return this._makeBlender(h,4*g.length,d)}})})(r);
+0;n<g.length;n++){var t=new Uint8Array(g[n]),v=l(t,"HEAPU8");d.push(v);h.push(t.byteLength)}d=l(d,"HEAPU32");h=l(h,"HEAPU32");g=a.FontMgr._fromData(d,h,g.length);a._free(d);a._free(h);return g};a.Typeface.MakeTypefaceFromData=function(g){g=new Uint8Array(g);var d=l(g,"HEAPU8");return(g=a.Typeface._MakeTypefaceFromData(d,g.byteLength))?g:null};a.Typeface.MakeFreeTypeFaceFromData=a.Typeface.MakeTypefaceFromData;a.Typeface.prototype.getGlyphIDs=function(g,d,h){d||(d=g.length);var n=ja(g)+1,t=a._malloc(n);
+ka(g,C,t,n);g=a._malloc(2*d);d=this._getGlyphIDs(t,n-1,d,g);a._free(t);if(0>d)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,d,h,n){if(g&&g.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var v=[];d=new a.ContourMeasureIter(d,!1,1);for(var z=d.next(),E=new Float32Array(4),J=0;J<g.length&&
+z;J++){var I=t[J];n+=I/2;if(n>z.length()){z.delete();z=d.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];v.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,v,h);z&&z.delete();d.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,d,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(d,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,d,h){var n=l(g,"HEAPU16");d=l(d,"HEAPF32");
+h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,d,h);k(n,g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,d){var h=l(g,"HEAPU16");d=a.TextBlob._MakeFromGlyphs(h,2*g.length,d);k(h,g);return d?d:null};a.TextBlob.MakeFromText=function(g,d){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,d);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Hd=a.Hd||[];a.Hd.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var d=
+a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._MakePicture(d,g.byteLength))?g:null}});a.Hd=a.Hd||[];a.Hd.push(function(){a.RuntimeEffect.Make=function(g,d){return a.RuntimeEffect._Make(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.MakeForBlender=function(g,d){return a.RuntimeEffect._MakeForBlender(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,d){var h=!g._ck,n=l(g,"HEAPF32");d=q(d);return this._makeShader(n,
+4*g.length,h,d)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(g,d,h){var n=!g._ck,t=l(g,"HEAPF32");h=q(h);for(var v=[],z=0;z<d.length;z++)v.push(d[z].jd.Fd);d=l(v,"HEAPU32");return this._makeShaderWithChildren(t,4*g.length,n,d,v.length,h)};a.RuntimeEffect.prototype.makeBlender=function(g){var d=!g._ck,h=l(g,"HEAPF32");return this._makeBlender(h,4*g.length,d)}})})(r);
var la=Object.assign({},r),ma="./this.program",oa=(a,b)=>{throw b;},pa="object"==typeof window,ra="function"==typeof importScripts,sa="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ta="",ua,wa,xa;
if(sa){var fs=require("fs"),ya=require("path");ta=ra?ya.dirname(ta)+"/":__dirname+"/";ua=(a,b)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};xa=a=>{a=ua(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c,e=!0)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);fs.readFile(a,e?void 0:"utf8",(f,k)=>{f?c(f):b(e?k.buffer:k)})};!r.thisProgram&&1<process.argv.length&&(ma=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);oa=(a,b)=>{process.exitCode=
a;throw b;};r.inspect=()=>"[Emscripten Module object]"}else if(pa||ra)ra?ta=self.location.href:"undefined"!=typeof document&&document.currentScript&&(ta=document.currentScript.src),_scriptDir&&(ta=_scriptDir),0!==ta.indexOf("blob:")?ta=ta.substr(0,ta.replace(/[?#].*/,"").lastIndexOf("/")+1):ta="",ua=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ra&&(xa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),
@@ -127,14 +127,13 @@
var Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],dd={},ed={},gd=4;function R(a){hd||(hd=a)}function da(a){for(var b=Vc++,c=a.length;c<b;c++)a[c]=null;return b}function fa(a,b){a.Ud||(a.Ud=a.getContext,a.getContext=function(e,f){f=a.Ud(e,f);return"webgl"==e==f instanceof WebGLRenderingContext?f:null});var c=1<b.majorVersion?a.getContext("webgl2",b):a.getContext("webgl",b);return c?jd(c,b):0}
function jd(a,b){var c=da(ia),e={handle:c,attributes:b,version:b.majorVersion,Pd:a};a.canvas&&(a.canvas.Ke=e);ia[c]=e;("undefined"==typeof b.Ue||b.Ue)&&kd(e);return c}function ha(a){x=ia[a];r.qf=S=x&&x.Pd;return!(a&&!S)}
function kd(a){a||(a=x);if(!a.bf){a.bf=!0;var b=a.Pd;Sc(b);Tc(b);Uc(b);b.Ae=b.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");b.Ee=b.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");2<=a.version&&(b.Be=b.getExtension("EXT_disjoint_timer_query_webgl2"));if(2>a.version||!b.Be)b.Be=b.getExtension("EXT_disjoint_timer_query");b.rf=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}
-var x,hd;function ld(a){S.bindVertexArray(ad[a])}function md(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2];S.deleteVertexArray(ad[e]);ad[e]=null}}var nd=[];function od(a,b,c,e){S.drawElements(a,b,c,e)}function pd(a,b,c,e){for(var f=0;f<a;f++){var k=S[c](),l=k&&da(e);k?(k.name=l,e[l]=k):R(1282);K[b+4*f>>2]=l}}function qd(a,b){pd(a,b,"createVertexArray",ad)}
-function rd(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=S.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>x.version){R(1282);return}e=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>x.version){R(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=S.getParameter(a),typeof f){case "number":e=f;break;case "boolean":e=f?1:0;break;case "string":R(1280);return;case "object":if(null===
+var x,hd,ld={},nd=()=>{if(!md){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in ld)void 0===ld[b]?delete a[b]:a[b]=ld[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);md=c}return md},md,od=[null,[],[]];function pd(a){S.bindVertexArray(ad[a])}
+function qd(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2];S.deleteVertexArray(ad[e]);ad[e]=null}}var rd=[];function sd(a,b,c,e){S.drawElements(a,b,c,e)}function td(a,b,c,e){for(var f=0;f<a;f++){var k=S[c](),l=k&&da(e);k?(k.name=l,e[l]=k):R(1282);K[b+4*f>>2]=l}}function ud(a,b){td(a,b,"createVertexArray",ad)}
+function vd(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=S.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>x.version){R(1282);return}e=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>x.version){R(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=S.getParameter(a),typeof f){case "number":e=f;break;case "boolean":e=f?1:0;break;case "string":R(1280);return;case "object":if(null===
f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:e=0;break;default:R(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a<f.length;++a)switch(c){case 0:K[b+4*a>>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ha[b+a>>0]=f[a]?1:0}return}try{e=f.name|0}catch(k){R(1280);
-Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:R(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=e;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=e;break;case 2:N[b>>2]=e;break;case 4:Ha[b>>0]=e?1:0}}else R(1281)}var td=a=>{var b=ja(a)+1,c=sd(b);c&&ka(a,C,c,b);return c};
-function ud(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function vd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function wd(a,b,c,e,f){a=vd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+e*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+l-1&-l)>>k)}
-function W(a){var b=S.Re;if(b){var c=b.ee[a];"number"==typeof c&&(b.ee[a]=c=S.getUniformLocation(b,b.He[a]+(0<c?"["+c+"]":"")));return c}R(1282)}
-var xd=[],yd=[],zd={},Bd=()=>{if(!Ad){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in zd)void 0===zd[b]?delete a[b]:a[b]=zd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Ad=c}return Ad},Ad,Cd=[null,[],[]],Dd=a=>0===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];
-function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}
+Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:R(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=e;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=e;break;case 2:N[b>>2]=e;break;case 4:Ha[b>>0]=e?1:0}}else R(1281)}var xd=a=>{var b=ja(a)+1,c=wd(b);c&&ka(a,C,c,b);return c};
+function yd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function zd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function Ad(a,b,c,e,f){a=zd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+e*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<k)+l-1&-l)>>k)}
+function W(a){var b=S.Re;if(b){var c=b.ee[a];"number"==typeof c&&(b.ee[a]=c=S.getUniformLocation(b,b.He[a]+(0<c?"["+c+"]":"")));return c}R(1282)}var Bd=[],Cd=[],Dd=a=>0===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b}
var Hd=(a,b,c,e)=>{function f(u,F,H){for(u="number"==typeof u?u.toString():u||"";u.length<F;)u=H[0]+u;return u}function k(u,F){return f(u,F,"0")}function l(u,F){function H(ca){return 0>ca?-1:0<ca?1:0}var T;0===(T=H(u.getFullYear()-F.getFullYear()))&&0===(T=H(u.getMonth()-F.getMonth()))&&(T=H(u.getDate()-F.getDate()));return T}function m(u){switch(u.getDay()){case 0:return new Date(u.getFullYear()-1,11,29);case 1:return u;case 2:return new Date(u.getFullYear(),0,3);case 3:return new Date(u.getFullYear(),
0,2);case 4:return new Date(u.getFullYear(),0,1);case 5:return new Date(u.getFullYear()-1,11,31);case 6:return new Date(u.getFullYear()-1,11,30)}}function q(u){var F=u.Vd;for(u=new Date((new Date(u.Wd+1900,0,1)).getTime());0<F;){var H=u.getMonth(),T=(Dd(u.getFullYear())?Ed:Fd)[H];if(F>T-u.getDate())F-=T-u.getDate()+1,u.setDate(1),11>H?u.setMonth(H+1):(u.setMonth(0),u.setFullYear(u.getFullYear()+1));else{u.setDate(u.getDate()+F);break}}H=new Date(u.getFullYear()+1,0,4);F=m(new Date(u.getFullYear(),
0,4));H=m(H);return 0>=l(F,u)?0>=l(H,u)?u.getFullYear()+1:u.getFullYear():u.getFullYear()-1}var w=K[e+40>>2];e={nf:K[e>>2],mf:K[e+4>>2],oe:K[e+8>>2],xe:K[e+12>>2],pe:K[e+16>>2],Wd:K[e+20>>2],Qd:K[e+24>>2],Vd:K[e+28>>2],uf:K[e+32>>2],lf:K[e+36>>2],pf:w?w?kb(C,w):"":""};c=c?kb(C,c):"";w={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y",
@@ -148,55 +147,55 @@
cc.prototype.Xe=function(a){this.Fe&&(a=this.Fe(a));return a};cc.prototype.ze=function(a){this.Sd&&this.Sd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=nb;cc.prototype.deleteObject=function(a){if(null!==a)a["delete"]()};
cc.prototype.fromWireType=function(a){function b(){return this.ke?Pb(this.Gd.ae,{Id:this.df,Fd:c,Od:this,Kd:a}):Pb(this.Gd.ae,{Id:this,Fd:a})}var c=this.Xe(a);if(!c)return this.ze(a),null;var e=Ob(this.Gd,c);if(void 0!==e){if(0===e.jd.count.value)return e.jd.Fd=c,e.jd.Kd=a,e.clone();e=e.clone();this.ze(a);return e}e=this.Gd.We(c);e=Jb[e];if(!e)return b.call(this);e=this.je?e.Qe:e.pointerType;var f=Db(c,this.Gd,e.Gd);return null===f?b.call(this):this.ke?Pb(e.Gd.ae,{Id:e,Fd:f,Od:this,Kd:a}):Pb(e.Gd.ae,
{Id:e,Fd:f})};nc=r.UnboundTypeError=function(a,b){var c=Tb(b,function(e){this.name=b;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,"UnboundTypeError");
-Object.assign(uc.prototype,{get(a){return this.Rd[a]},has(a){return void 0!==this.Rd[a]},qe(a){var b=this.De.pop()||this.Rd.length;this.Rd[b]=a;return b},re(a){this.Rd[a]=void 0;this.De.push(a)}});vc.Rd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Ud=vc.Rd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Ud;b<vc.Rd.length;++b)void 0!==vc.Rd[b]&&++a;return a};for(var S,Kd=0;32>Kd;++Kd)nd.push(Array(Kd));var Ld=new Float32Array(288);
-for(Kd=0;288>Kd;++Kd)xd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)yd[Kd]=Md.subarray(0,Kd+1);
-var $d={H:function(a,b,c){(new fb(a)).Ud(b,c);gb=a;ib++;throw gb;},T:function(){return 0},rb:()=>{},tb:function(){return 0},pb:()=>{},ub:function(){},qb:()=>{},C:function(a){var b=lb[a];delete lb[a];var c=b.we,e=b.Sd,f=b.Ce,k=f.map(l=>l.$e).concat(f.map(l=>l.hf));tb([a],k,l=>{var m={};f.forEach((q,w)=>{var y=l[w],B=q.Ye,D=q.Ze,u=l[w+f.length],F=q.gf,H=q.jf;m[q.Ve]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(q){var w=
-{},y;for(y in m)w[y]=m[y].read(q);e(q);return w},toWireType:function(q,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: "${y}"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==q&&q.push(e,B);return B},argPackAdvance:8,readValueFromPointer:nb,Nd:e}]})},jb:function(){},yb:function(a,b,c,e,f){var k=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?e:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia;
+Object.assign(uc.prototype,{get(a){return this.Rd[a]},has(a){return void 0!==this.Rd[a]},qe(a){var b=this.De.pop()||this.Rd.length;this.Rd[b]=a;return b},re(a){this.Rd[a]=void 0;this.De.push(a)}});vc.Rd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Ud=vc.Rd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Ud;b<vc.Rd.length;++b)void 0!==vc.Rd[b]&&++a;return a};for(var S,Kd=0;32>Kd;++Kd)rd.push(Array(Kd));var Ld=new Float32Array(288);
+for(Kd=0;288>Kd;++Kd)Bd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)Cd[Kd]=Md.subarray(0,Kd+1);
+var $d={H:function(a,b,c){(new fb(a)).Ud(b,c);gb=a;ib++;throw gb;},_:function(){return 0},_c:()=>{},Zc:function(){return 0},Yc:()=>{},Xc:function(){},Wc:()=>{},E:function(a){var b=lb[a];delete lb[a];var c=b.we,e=b.Sd,f=b.Ce,k=f.map(l=>l.$e).concat(f.map(l=>l.hf));tb([a],k,l=>{var m={};f.forEach((q,w)=>{var y=l[w],B=q.Ye,D=q.Ze,u=l[w+f.length],F=q.gf,H=q.jf;m[q.Ve]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(q){var w=
+{},y;for(y in m)w[y]=m[y].read(q);e(q);return w},toWireType:function(q,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: "${y}"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==q&&q.push(e,B);return B},argPackAdvance:8,readValueFromPointer:nb,Nd:e}]})},ea:function(){},Sc:function(a,b,c,e,f){var k=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?e:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia;
else if(4===c)m=K;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(m[l>>k])},Nd:null})},l:function(a,b,c,e,f,k,l,m,q,w,y,B,D){y=P(y);k=mc(f,k);m&&(m=mc(l,m));w&&(w=mc(q,w));D=mc(B,D);var u=Sb(y);Vb(u,function(){rc(`Cannot construct ${y} due to unbound types`,[e])});tb([a,b,c],e?[e]:[],function(F){F=F[0];if(e){var H=F.Gd;var T=H.ae}else T=Rb.prototype;F=Tb(u,function(){if(Object.getPrototypeOf(this)!==ca)throw new xb("Use 'new' to construct "+y);if(void 0===Y.Td)throw new xb(y+
" has no accessible constructor");var Ma=Y.Td[arguments.length];if(void 0===Ma)throw new xb(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(Y.Td).toString()}) parameters instead!`);return Ma.apply(this,arguments)});var ca=Object.create(T,{constructor:{value:F}});F.prototype=ca;var Y=new Wb(y,F,ca,D,H,k,m,w);Y.Ld&&(void 0===Y.Ld.ge&&(Y.Ld.ge=[]),Y.Ld.ge.push(Y));H=new cc(y,Y,!0,!1,!1);T=new cc(y+"*",Y,!1,!1,!1);var va=new cc(y+" const*",
Y,!1,!0,!1);Jb[a]={pointerType:T,Qe:va};dc(u,F);return[H,T,va]})},e:function(a,b,c,e,f,k,l){var m=tc(c,e);b=P(b);k=mc(f,k);tb([],[a],function(q){function w(){rc(`Cannot call ${y} due to unbound types`,m)}q=q[0];var y=`${q.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var B=q.Gd.constructor;void 0===B[b]?(w.Yd=c-1,B[b]=w):(Ub(B,b,y),B[b].Jd[c-1]=w);tb([],m,function(D){D=[D[0],null].concat(D.slice(1));D=sc(y,D,null,k,l);void 0===B[b].Jd?(D.Yd=c-1,B[b]=D):B[b].Jd[c-1]=D;if(q.Gd.ge)for(const u of q.Gd.ge)u.constructor.hasOwnProperty(b)||
-(u.constructor[b]=D);return[]});return[]})},A:function(a,b,c,e,f,k){var l=tc(b,c);f=mc(e,f);tb([],[a],function(m){m=m[0];var q=`constructor ${m.name}`;void 0===m.Gd.Td&&(m.Gd.Td=[]);if(void 0!==m.Gd.Td[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Gd.Td[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)};
+(u.constructor[b]=D);return[]});return[]})},B:function(a,b,c,e,f,k){var l=tc(b,c);f=mc(e,f);tb([],[a],function(m){m=m[0];var q=`constructor ${m.name}`;void 0===m.Gd.Td&&(m.Gd.Td=[]);if(void 0!==m.Gd.Td[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Gd.Td[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)};
tb([],l,function(w){w.splice(1,0,null);m.Gd.Td[b-1]=sc(q,w,null,f,k);return[]});return[]})},a:function(a,b,c,e,f,k,l,m){var q=tc(c,e);b=P(b);k=mc(f,k);tb([],[a],function(w){function y(){rc(`Cannot call ${B} due to unbound types`,q)}w=w[0];var B=`${w.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);m&&w.Gd.ef.push(b);var D=w.Gd.ae,u=D[b];void 0===u||void 0===u.Jd&&u.className!==w.name&&u.Yd===c-2?(y.Yd=c-2,y.className=w.name,D[b]=y):(Ub(D,b,B),D[b].Jd[c-2]=y);tb([],q,function(F){F=sc(B,F,
-w,k,l);void 0===D[b].Jd?(F.Yd=c-2,D[b]=F):D[b].Jd[c-2]=F;return[]});return[]})},t:function(a,b,c){a=P(a);tb([],[b],function(e){e=e[0];r[a]=e.fromWireType(c);return[]})},xb:function(a,b){b=P(b);ub(a,{name:b,fromWireType:function(c){var e=xc(c);wc(c);return e},toWireType:function(c,e){return ac(e)},argPackAdvance:8,readValueFromPointer:nb,Nd:null})},i:function(a,b,c,e){function f(){}c=vb(c);b=P(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,
-l){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,e),Nd:null});Vb(b,f)},b:function(a,b,c){var e=zc(a,"enum");b=P(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${e.name}_${b}`,function(){})}});a.values[c]=e;a[b]=e},W:function(a,b,c){c=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Nd:null})},v:function(a,b,c,e,f,k){var l=tc(b,c);a=P(a);f=
-mc(e,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},E:function(a,b,c,e,f){b=P(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===e){var l=32-8*c;k=m=>m<<l>>>l}c=b.includes("unsigned")?function(m,q){return q>>>0}:function(m,q){return q};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==e),Nd:null})},s:function(a,b,c){function e(k){k>>=2;var l=
-L;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);ub(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{af:!0})},q:function(a,b,c,e,f,k,l,m,q,w,y,B){c=P(c);k=mc(f,k);m=mc(l,m);w=mc(q,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Gd,!1,!1,!0,D,e,k,m,w,B)]})},V:function(a,b){b=P(b);var c="std::string"===b;ub(a,{name:b,fromWireType:function(e){var f=L[e>>2],k=e+4;if(c)for(var l=
-k,m=0;m<=f;++m){var q=k+m;if(m==f||0==C[q]){l=l?kb(C,l,q-l):"";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=q+1}}else{w=Array(f);for(m=0;m<f;++m)w[m]=String.fromCharCode(C[k+m]);w=w.join("")}qc(e);return w},toWireType:function(e,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k="string"==typeof f;k||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q("Cannot pass non-string to std::string");var l=c&&k?ja(f):f.length;var m=sd(4+l+1),q=m+4;L[m>>2]=
-l;if(c&&k)ka(f,C,q,l+1);else if(k)for(k=0;k<l;++k){var w=f.charCodeAt(k);255<w&&(qc(q),Q("String has UTF-16 code units that do not fit in 8 bits"));C[q+k]=w}else for(k=0;k<l;++k)C[q+k]=f[k];null!==e&&e.push(qc,m);return m},argPackAdvance:8,readValueFromPointer:nb,Nd:function(e){qc(e)}})},M:function(a,b,c){c=P(c);if(2===b){var e=Dc;var f=Ec;var k=Fc;var l=()=>Ja;var m=1}else 4===b&&(e=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(q){for(var w=L[q>>2],y=l(),B,D=q+4,u=0;u<=w;++u){var F=
-q+4+u*b;if(u==w||0==y[F>>m])D=e(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(q);return B},toWireType:function(q,w){"string"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=sd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==q&&q.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Nd:function(q){qc(q)}})},D:function(a,b,c,e,f,k){lb[a]={name:P(b),we:mc(c,e),Sd:mc(f,k),Ce:[]}},d:function(a,b,c,e,f,k,l,m,q,w){lb[a].Ce.push({Ve:P(b),$e:c,Ye:mc(e,f),Ze:k,
-hf:l,gf:mc(m,q),jf:w})},zb:function(a,b){b=P(b);ub(a,{cf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},wb:()=>!0,lb:()=>{throw Infinity;},F:function(a,b,c){a=xc(a);b=zc(b,"emval::as");var e=[],f=ac(e);L[c>>2]=f;return b.toWireType(e,a)},O:function(a,b,c,e,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[e>>2]=ac(k);return a(b,c,k,f)},u:function(a,b,c,e){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,e)},c:wc,K:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},r:function(a,
-b){var c=Oc(a,b),e=c[0];b=e.name+"_$"+c.slice(1).map(function(l){return l.name}).join("_")+"$";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,q,w)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(w+y),y+=c[B+1].argPackAdvance;l=l[m].apply(l,k);for(B=0;B<a-1;++B)c[B+1].Se&&c[B+1].Se(k[B]);if(!e.cf)return e.toWireType(q,l)});return Pc[b]=f},z:function(a,b){a=xc(a);b=xc(b);return ac(a[b])},m:function(a){4<a&&(vc.get(a).Ge+=1)},J:function(a,b,c,e){a=xc(a);var f=Rc[b];f||(f=
-Qc(b),Rc[b]=f);return f(a,c,e)},I:function(){return ac([])},f:function(a){return ac(Kc(a))},G:function(){return ac({})},db:function(a){a=xc(a);return!a},B:function(a){var b=xc(a);mb(b);wc(a)},h:function(a,b,c){a=xc(a);b=xc(b);c=xc(c);a[b]=c},g:function(a,b){a=zc(a,"_emval_take_value");a=a.readValueFromPointer(b);return ac(a)},gb:function(){return-52},hb:function(){},k:()=>{Ea("")},vb:()=>performance.now(),Tc:function(a){S.activeTexture(a)},Uc:function(a,b){S.attachShader(Xc[a],$c[b])},Vc:function(a,
-b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):"")},Wc:function(a,b){35051==a?S.te=b:35052==a&&(S.Zd=b);S.bindBuffer(a,Wc[b])},_:function(a,b){S.bindFramebuffer(a,Yc[b])},Xb:function(a,b){S.bindRenderbuffer(a,Zc[b])},Hb:function(a,b){S.bindSampler(a,bd[b])},Xc:function(a,b){S.bindTexture(a,ea[b])},pc:ld,sc:ld,Yc:function(a,b,c,e){S.blendColor(a,b,c,e)},Zc:function(a){S.blendEquation(a)},_c:function(a,b){S.blendFunc(a,b)},Rb:function(a,b,c,e,f,k,l,m,q,w){S.blitFramebuffer(a,b,c,e,f,k,l,m,q,w)},$:function(a,
-b,c,e){2<=x.version?c&&b?S.bufferData(a,C,e,c,b):S.bufferData(a,b,e):S.bufferData(a,c?C.subarray(c,c+b):b,e)},aa:function(a,b,c,e){2<=x.version?c&&S.bufferSubData(a,b,C,e,c):S.bufferSubData(a,b,C.subarray(e,e+c))},Yb:function(a){return S.checkFramebufferStatus(a)},Q:function(a){S.clear(a)},Z:function(a,b,c,e){S.clearColor(a,b,c,e)},S:function(a){S.clearStencil(a)},bb:function(a,b,c,e){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*e)},ba:function(a,b,c,e){S.colorMask(!!a,!!b,!!c,!!e)},ca:function(a){S.compileShader($c[a])},
-da:function(a,b,c,e,f,k,l,m){2<=x.version?S.Zd||!l?S.compressedTexImage2D(a,b,c,e,f,k,l,m):S.compressedTexImage2D(a,b,c,e,f,k,C,m,l):S.compressedTexImage2D(a,b,c,e,f,k,m?C.subarray(m,m+l):null)},ea:function(a,b,c,e,f,k,l,m,q){2<=x.version?S.Zd||!m?S.compressedTexSubImage2D(a,b,c,e,f,k,l,m,q):S.compressedTexSubImage2D(a,b,c,e,f,k,l,C,q,m):S.compressedTexSubImage2D(a,b,c,e,f,k,l,q?C.subarray(q,q+m):null)},Pb:function(a,b,c,e,f){S.copyBufferSubData(a,b,c,e,f)},fa:function(a,b,c,e,f,k,l,m){S.copyTexSubImage2D(a,
-b,c,e,f,k,l,m)},ga:function(){var a=da(Xc),b=S.createProgram();b.name=a;b.ne=b.le=b.me=0;b.ye=1;Xc[a]=b;return a},ha:function(a){var b=da($c);$c[b]=S.createShader(a);return b},ia:function(a){S.cullFace(a)},ja:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=Wc[e];f&&(S.deleteBuffer(f),f.name=0,Wc[e]=null,e==S.te&&(S.te=0),e==S.Zd&&(S.Zd=0))}},Zb:function(a,b){for(var c=0;c<a;++c){var e=K[b+4*c>>2],f=Yc[e];f&&(S.deleteFramebuffer(f),f.name=0,Yc[e]=null)}},ka:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),
-b.name=0,Xc[a]=null):R(1281)}},_b:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=Zc[e];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[e]=null)}},Ib:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=bd[e];f&&(S.deleteSampler(f),f.name=0,bd[e]=null)}},la:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},Qb:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},ma:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=ea[e];f&&(S.deleteTexture(f),
-f.name=0,ea[e]=null)}},qc:md,tc:md,na:function(a){S.depthMask(!!a)},oa:function(a){S.disable(a)},pa:function(a){S.disableVertexAttribArray(a)},qa:function(a,b,c){S.drawArrays(a,b,c)},nc:function(a,b,c,e){S.drawArraysInstanced(a,b,c,e)},lc:function(a,b,c,e,f){S.Ae.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},jc:function(a,b){for(var c=nd[a],e=0;e<a;e++)c[e]=K[b+4*e>>2];S.drawBuffers(c)},ra:od,oc:function(a,b,c,e,f){S.drawElementsInstanced(a,b,c,e,f)},mc:function(a,b,c,e,f,k,l){S.Ae.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,
-b,c,e,f,k,l)},dc:function(a,b,c,e,f,k){od(a,e,f,k)},sa:function(a){S.enable(a)},ta:function(a){S.enableVertexAttribArray(a)},Nb:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},ua:function(){S.finish()},va:function(){S.flush()},$b:function(a,b,c,e){S.framebufferRenderbuffer(a,b,c,Zc[e])},ac:function(a,b,c,e,f){S.framebufferTexture2D(a,b,c,ea[e],f)},wa:function(a){S.frontFace(a)},xa:function(a,b){pd(a,b,"createBuffer",Wc)},bc:function(a,b){pd(a,b,"createFramebuffer",Yc)},cc:function(a,
-b){pd(a,b,"createRenderbuffer",Zc)},Jb:function(a,b){pd(a,b,"createSampler",bd)},ya:function(a,b){pd(a,b,"createTexture",ea)},rc:qd,uc:qd,Tb:function(a){S.generateMipmap(a)},za:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},Aa:function(){var a=S.getError()||hd;hd=0;return a},Ba:function(a,b){rd(a,b,2)},Ub:function(a,b,c,e){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[e>>2]=a},L:function(a,b){rd(a,b,0)},Ca:function(a,
-b,c,e){a=S.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(K[c>>2]=b)},Da:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a="(unknown error)"),K[c>>2]=a.length+1;else if(35719==b){if(!a.ne)for(b=0;b<S.getProgramParameter(a,35718);++b)a.ne=Math.max(a.ne,S.getActiveUniform(a,b).name.length+1);K[c>>2]=a.ne}else if(35722==b){if(!a.le)for(b=0;b<S.getProgramParameter(a,35721);++b)a.le=Math.max(a.le,S.getActiveAttrib(a,
-b).name.length+1);K[c>>2]=a.le}else if(35381==b){if(!a.me)for(b=0;b<S.getProgramParameter(a,35382);++b)a.me=Math.max(a.me,S.getActiveUniformBlockName(a,b).length+1);K[c>>2]=a.me}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},Vb:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},Ea:function(a,b,c,e){a=S.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(K[c>>2]=b)},Eb:function(a,b,c,e){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>>
-2]=a.rangeMax;K[e>>2]=a.precision},Fa:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},P:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return"GL_"+e}));b=td(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&td(b);break;
-case 7938:b=S.getParameter(7938);b=2<=x.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=td(b);break;case 35724:b=S.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=td(b);break;default:R(1280)}dd[a]=b}return b},ab:function(a,b){if(2>x.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[],
-c=c.concat(c.map(function(e){return"GL_"+e})),c=c.map(function(e){return td(e)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},Ga:function(a,b){b=b?kb(C,b):"";if(a=Xc[a]){var c=a,e=c.ee,f=c.Ie,k;if(!e)for(c.ee=e={},c.He={},k=0;k<S.getProgramParameter(c,35718);++k){var l=S.getActiveUniform(c,k);var m=l.name;l=l.size;var q=ud(m);q=0<q?m.slice(0,q):m;var w=c.ye;c.ye+=l;f[q]=[l,w];for(m=0;m<l;++m)e[w]=m,c.He[w++]=q}c=a.ee;e=0;f=b;k=ud(b);0<k&&(e=parseInt(b.slice(k+1))>>>0,f=b.slice(0,
-k));if((f=a.Ie[f])&&e<f[0]&&(e+=f[1],c[e]=c[e]||S.getUniformLocation(a,b)))return e}else R(1281);return-1},Fb:function(a,b,c){for(var e=nd[b],f=0;f<b;f++)e[f]=K[c+4*f>>2];S.invalidateFramebuffer(a,e)},Gb:function(a,b,c,e,f,k,l){for(var m=nd[b],q=0;q<b;q++)m[q]=K[c+4*q>>2];S.invalidateSubFramebuffer(a,m,e,f,k,l)},Ob:function(a){return S.isSync(cd[a])},Ha:function(a){return(a=ea[a])?S.isTexture(a):0},Ia:function(a){S.lineWidth(a)},Ja:function(a){a=Xc[a];S.linkProgram(a);a.ee=0;a.Ie={}},hc:function(a,
-b,c,e,f,k){S.Ee.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,e>>2,L,f>>2,k)},ic:function(a,b,c,e,f,k,l,m){S.Ee.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,e>>2,K,f>>2,K,k>>2,L,l>>2,m)},Ka:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},kc:function(a){S.readBuffer(a)},La:function(a,b,c,e,f,k,l){if(2<=x.version)if(S.te)S.readPixels(a,b,c,e,f,k,l);else{var m=vd(k);S.readPixels(a,b,c,e,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=wd(k,f,c,e,l))?S.readPixels(a,
-b,c,e,f,k,l):R(1280)},Wb:function(a,b,c,e){S.renderbufferStorage(a,b,c,e)},Sb:function(a,b,c,e,f){S.renderbufferStorageMultisample(a,b,c,e,f)},Kb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},Lb:function(a,b,c){S.samplerParameteri(bd[a],b,c)},Mb:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},Ma:function(a,b,c,e){S.scissor(a,b,c,e)},Na:function(a,b,c,e){for(var f="",k=0;k<b;++k){var l=e?K[e+4*k>>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):"";f+=l}S.shaderSource($c[a],f)},Oa:function(a,b,
-c){S.stencilFunc(a,b,c)},Pa:function(a,b,c,e){S.stencilFuncSeparate(a,b,c,e)},Qa:function(a){S.stencilMask(a)},Ra:function(a,b){S.stencilMaskSeparate(a,b)},Sa:function(a,b,c){S.stencilOp(a,b,c)},Ta:function(a,b,c,e){S.stencilOpSeparate(a,b,c,e)},Ua:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Zd)S.texImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=vd(m);S.texImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,e,f,k,l,m,null);else S.texImage2D(a,b,c,e,f,k,l,m,q?
-wd(m,l,e,f,q):null)},Va:function(a,b,c){S.texParameterf(a,b,c)},Wa:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Xa:function(a,b,c){S.texParameteri(a,b,c)},Ya:function(a,b,c){S.texParameteri(a,b,K[c>>2])},ec:function(a,b,c,e,f){S.texStorage2D(a,b,c,e,f)},Za:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Zd)S.texSubImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=vd(m);S.texSubImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,e,f,k,l,m,null);else w=null,q&&(w=
-wd(m,l,f,k,q)),S.texSubImage2D(a,b,c,e,f,k,l,m,w)},_a:function(a,b){S.uniform1f(W(a),b)},$a:function(a,b,c){if(2<=x.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var e=xd[b-1],f=0;f<b;++f)e[f]=N[c+4*f>>2];else e=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),e)}},Pc:function(a,b){S.uniform1i(W(a),b)},Qc:function(a,b,c){if(2<=x.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var e=yd[b-1],f=0;f<b;++f)e[f]=K[c+4*f>>2];else e=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),e)}},Rc:function(a,
-b,c){S.uniform2f(W(a),b,c)},Sc:function(a,b,c){if(2<=x.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var e=xd[2*b-1],f=0;f<2*b;f+=2)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2];else e=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),e)}},Oc:function(a,b,c){S.uniform2i(W(a),b,c)},Nc:function(a,b,c){if(2<=x.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var e=yd[2*b-1],f=0;f<2*b;f+=2)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2];else e=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),e)}},Mc:function(a,
-b,c,e){S.uniform3f(W(a),b,c,e)},Lc:function(a,b,c){if(2<=x.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var e=xd[3*b-1],f=0;f<3*b;f+=3)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2],e[f+2]=N[c+(4*f+8)>>2];else e=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),e)}},Kc:function(a,b,c,e){S.uniform3i(W(a),b,c,e)},Jc:function(a,b,c){if(2<=x.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var e=yd[3*b-1],f=0;f<3*b;f+=3)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2];else e=
-K.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),e)}},Ic:function(a,b,c,e,f){S.uniform4f(W(a),b,c,e,f)},Hc:function(a,b,c){if(2<=x.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var e=xd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;e[k]=f[l];e[k+1]=f[l+1];e[k+2]=f[l+2];e[k+3]=f[l+3]}}else e=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),e)}},vc:function(a,b,c,e,f){S.uniform4i(W(a),b,c,e,f)},wc:function(a,b,c){if(2<=x.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var e=yd[4*b-
-1],f=0;f<4*b;f+=4)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2],e[f+3]=K[c+(4*f+12)>>2];else e=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),e)}},xc:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix2fv(W(a),!!c,N,e>>2,4*b);else{if(72>=b)for(var f=xd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2];else f=N.subarray(e>>2,e+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},yc:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix3fv(W(a),
-!!c,N,e>>2,9*b);else{if(32>=b)for(var f=xd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2],f[k+4]=N[e+(4*k+16)>>2],f[k+5]=N[e+(4*k+20)>>2],f[k+6]=N[e+(4*k+24)>>2],f[k+7]=N[e+(4*k+28)>>2],f[k+8]=N[e+(4*k+32)>>2];else f=N.subarray(e>>2,e+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},zc:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix4fv(W(a),!!c,N,e>>2,16*b);else{if(18>=b){var f=xd[16*b-1],k=N;e>>=2;for(var l=0;l<16*b;l+=16){var m=e+l;f[l]=
-k[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(e>>2,e+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},Ac:function(a){a=Xc[a];S.useProgram(a);S.Re=a},Bc:function(a,b){S.vertexAttrib1f(a,b)},Cc:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},Dc:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},
-Ec:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},fc:function(a,b){S.vertexAttribDivisor(a,b)},gc:function(a,b,c,e,f){S.vertexAttribIPointer(a,b,c,e,f)},Fc:function(a,b,c,e,f,k){S.vertexAttribPointer(a,b,c,!!e,f,k)},Gc:function(a,b,c,e){S.viewport(a,b,c,e)},cb:function(a,b,c,e){S.waitSync(cd[a],b,(c>>>0)+4294967296*e)},mb:a=>{var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);var f=Math;e=Math.max(a,e);a:{f=f.min.call(f,
-2147483648,e+(65536-e%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},eb:function(){return x?x.handle:0},nb:(a,b)=>{var c=0;Bd().forEach(function(e,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k<e.length;++k)Ha[f++>>0]=e.charCodeAt(k);Ha[f>>0]=0;c+=e.length+1});return 0},ob:(a,b)=>{var c=Bd();L[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});L[b>>2]=e;return 0},Ab:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,
-new db(a))},U:()=>52,fb:function(){return 52},sb:()=>52,ib:function(){return 70},R:(a,b,c,e)=>{for(var f=0,k=0;k<c;k++){var l=L[b>>2],m=L[b+4>>2];b+=8;for(var q=0;q<m;q++){var w=C[l+q],y=Cd[a];0===w||10===w?((1===a?Aa:Ca)(kb(y,0)),y.length=0):y.push(w)}f+=m}L[e>>2]=f;return 0},o:Nd,n:Od,j:Pd,N:Qd,Y:Rd,X:Sd,x:Td,y:Ud,p:Vd,w:Wd,Bb:Xd,Cb:Yd,Db:Zd,kb:(a,b,c,e)=>Hd(a,b,c,e)};
+w,k,l);void 0===D[b].Jd?(F.Yd=c-2,D[b]=F):D[b].Jd[c-2]=F;return[]});return[]})},t:function(a,b,c){a=P(a);tb([],[b],function(e){e=e[0];r[a]=e.fromWireType(c);return[]})},Rc:function(a,b){b=P(b);ub(a,{name:b,fromWireType:function(c){var e=xc(c);wc(c);return e},toWireType:function(c,e){return ac(e)},argPackAdvance:8,readValueFromPointer:nb,Nd:null})},i:function(a,b,c,e){function f(){}c=vb(c);b=P(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k,
+l){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,e),Nd:null});Vb(b,f)},b:function(a,b,c){var e=zc(a,"enum");b=P(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${e.name}_${b}`,function(){})}});a.values[c]=e;a[b]=e},X:function(a,b,c){c=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Nd:null})},v:function(a,b,c,e,f,k){var l=tc(b,c);a=P(a);f=
+mc(e,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},D:function(a,b,c,e,f){b=P(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===e){var l=32-8*c;k=m=>m<<l>>>l}c=b.includes("unsigned")?function(m,q){return q>>>0}:function(m,q){return q};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==e),Nd:null})},s:function(a,b,c){function e(k){k>>=2;var l=
+L;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);ub(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{af:!0})},r:function(a,b,c,e,f,k,l,m,q,w,y,B){c=P(c);k=mc(f,k);m=mc(l,m);w=mc(q,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Gd,!1,!1,!0,D,e,k,m,w,B)]})},W:function(a,b){b=P(b);var c="std::string"===b;ub(a,{name:b,fromWireType:function(e){var f=L[e>>2],k=e+4;if(c)for(var l=
+k,m=0;m<=f;++m){var q=k+m;if(m==f||0==C[q]){l=l?kb(C,l,q-l):"";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=q+1}}else{w=Array(f);for(m=0;m<f;++m)w[m]=String.fromCharCode(C[k+m]);w=w.join("")}qc(e);return w},toWireType:function(e,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var k="string"==typeof f;k||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q("Cannot pass non-string to std::string");var l=c&&k?ja(f):f.length;var m=wd(4+l+1),q=m+4;L[m>>2]=
+l;if(c&&k)ka(f,C,q,l+1);else if(k)for(k=0;k<l;++k){var w=f.charCodeAt(k);255<w&&(qc(q),Q("String has UTF-16 code units that do not fit in 8 bits"));C[q+k]=w}else for(k=0;k<l;++k)C[q+k]=f[k];null!==e&&e.push(qc,m);return m},argPackAdvance:8,readValueFromPointer:nb,Nd:function(e){qc(e)}})},O:function(a,b,c){c=P(c);if(2===b){var e=Dc;var f=Ec;var k=Fc;var l=()=>Ja;var m=1}else 4===b&&(e=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(q){for(var w=L[q>>2],y=l(),B,D=q+4,u=0;u<=w;++u){var F=
+q+4+u*b;if(u==w||0==y[F>>m])D=e(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(q);return B},toWireType:function(q,w){"string"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=wd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==q&&q.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Nd:function(q){qc(q)}})},C:function(a,b,c,e,f,k){lb[a]={name:P(b),we:mc(c,e),Sd:mc(f,k),Ce:[]}},d:function(a,b,c,e,f,k,l,m,q,w){lb[a].Ce.push({Ve:P(b),$e:c,Ye:mc(e,f),Ze:k,
+hf:l,gf:mc(m,q),jf:w})},Qc:function(a,b){b=P(b);ub(a,{cf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},Pc:()=>!0,Oc:()=>{throw Infinity;},G:function(a,b,c){a=xc(a);b=zc(b,"emval::as");var e=[],f=ac(e);L[c>>2]=f;return b.toWireType(e,a)},N:function(a,b,c,e,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[e>>2]=ac(k);return a(b,c,k,f)},u:function(a,b,c,e){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,e)},c:wc,M:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},q:function(a,
+b){var c=Oc(a,b),e=c[0];b=e.name+"_$"+c.slice(1).map(function(l){return l.name}).join("_")+"$";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,q,w)=>{for(var y=0,B=0;B<a-1;++B)k[B]=c[B+1].readValueFromPointer(w+y),y+=c[B+1].argPackAdvance;l=l[m].apply(l,k);for(B=0;B<a-1;++B)c[B+1].Se&&c[B+1].Se(k[B]);if(!e.cf)return e.toWireType(q,l)});return Pc[b]=f},A:function(a,b){a=xc(a);b=xc(b);return ac(a[b])},m:function(a){4<a&&(vc.get(a).Ge+=1)},L:function(a,b,c,e){a=xc(a);var f=Rc[b];f||(f=
+Qc(b),Rc[b]=f);return f(a,c,e)},I:function(){return ac([])},f:function(a){return ac(Kc(a))},F:function(){return ac({})},Nc:function(a){a=xc(a);return!a},z:function(a){var b=xc(a);mb(b);wc(a)},h:function(a,b,c){a=xc(a);b=xc(b);c=xc(c);a[b]=c},g:function(a,b){a=zc(a,"_emval_take_value");a=a.readValueFromPointer(b);return ac(a)},da:function(){return-52},ca:function(){},k:()=>{Ea("")},Mc:()=>performance.now(),Lc:a=>{var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var e=b*(1+.2/c);
+e=Math.min(e,a+100663296);var f=Math;e=Math.max(a,e);a:{f=f.min.call(f,2147483648,e+(65536-e%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},Kc:function(){return x?x.handle:0},Vc:(a,b)=>{var c=0;nd().forEach(function(e,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k<e.length;++k)Ha[f++>>0]=e.charCodeAt(k);Ha[f>>0]=0;c+=e.length+1});return 0},Uc:(a,b)=>{var c=nd();L[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});L[b>>
+2]=e;return 0},Jc:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,new db(a))},Z:()=>52,ga:function(){return 52},Tc:()=>52,fa:function(){return 70},Y:(a,b,c,e)=>{for(var f=0,k=0;k<c;k++){var l=L[b>>2],m=L[b+4>>2];b+=8;for(var q=0;q<m;q++){var w=C[l+q],y=od[a];0===w||10===w?((1===a?Aa:Ca)(kb(y,0)),y.length=0):y.push(w)}f+=m}L[e>>2]=f;return 0},Ic:function(a){S.activeTexture(a)},Hc:function(a,b){S.attachShader(Xc[a],$c[b])},Gc:function(a,b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):"")},Fc:function(a,
+b){35051==a?S.te=b:35052==a&&(S.Zd=b);S.bindBuffer(a,Wc[b])},V:function(a,b){S.bindFramebuffer(a,Yc[b])},Ec:function(a,b){S.bindRenderbuffer(a,Zc[b])},Dc:function(a,b){S.bindSampler(a,bd[b])},Cc:function(a,b){S.bindTexture(a,ea[b])},Bc:pd,Ac:pd,zc:function(a,b,c,e){S.blendColor(a,b,c,e)},yc:function(a){S.blendEquation(a)},xc:function(a,b){S.blendFunc(a,b)},wc:function(a,b,c,e,f,k,l,m,q,w){S.blitFramebuffer(a,b,c,e,f,k,l,m,q,w)},vc:function(a,b,c,e){2<=x.version?c&&b?S.bufferData(a,C,e,c,b):S.bufferData(a,
+b,e):S.bufferData(a,c?C.subarray(c,c+b):b,e)},uc:function(a,b,c,e){2<=x.version?c&&S.bufferSubData(a,b,C,e,c):S.bufferSubData(a,b,C.subarray(e,e+c))},tc:function(a){return S.checkFramebufferStatus(a)},U:function(a){S.clear(a)},T:function(a,b,c,e){S.clearColor(a,b,c,e)},S:function(a){S.clearStencil(a)},ba:function(a,b,c,e){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*e)},sc:function(a,b,c,e){S.colorMask(!!a,!!b,!!c,!!e)},rc:function(a){S.compileShader($c[a])},qc:function(a,b,c,e,f,k,l,m){2<=
+x.version?S.Zd||!l?S.compressedTexImage2D(a,b,c,e,f,k,l,m):S.compressedTexImage2D(a,b,c,e,f,k,C,m,l):S.compressedTexImage2D(a,b,c,e,f,k,m?C.subarray(m,m+l):null)},pc:function(a,b,c,e,f,k,l,m,q){2<=x.version?S.Zd||!m?S.compressedTexSubImage2D(a,b,c,e,f,k,l,m,q):S.compressedTexSubImage2D(a,b,c,e,f,k,l,C,q,m):S.compressedTexSubImage2D(a,b,c,e,f,k,l,q?C.subarray(q,q+m):null)},oc:function(a,b,c,e,f){S.copyBufferSubData(a,b,c,e,f)},nc:function(a,b,c,e,f,k,l,m){S.copyTexSubImage2D(a,b,c,e,f,k,l,m)},mc:function(){var a=
+da(Xc),b=S.createProgram();b.name=a;b.ne=b.le=b.me=0;b.ye=1;Xc[a]=b;return a},lc:function(a){var b=da($c);$c[b]=S.createShader(a);return b},kc:function(a){S.cullFace(a)},jc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=Wc[e];f&&(S.deleteBuffer(f),f.name=0,Wc[e]=null,e==S.te&&(S.te=0),e==S.Zd&&(S.Zd=0))}},ic:function(a,b){for(var c=0;c<a;++c){var e=K[b+4*c>>2],f=Yc[e];f&&(S.deleteFramebuffer(f),f.name=0,Yc[e]=null)}},hc:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),b.name=0,Xc[a]=null):
+R(1281)}},gc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=Zc[e];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[e]=null)}},fc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=bd[e];f&&(S.deleteSampler(f),f.name=0,bd[e]=null)}},ec:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},dc:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},cc:function(a,b){for(var c=0;c<a;c++){var e=K[b+4*c>>2],f=ea[e];f&&(S.deleteTexture(f),f.name=0,ea[e]=null)}},
+bc:qd,ac:qd,$b:function(a){S.depthMask(!!a)},_b:function(a){S.disable(a)},Zb:function(a){S.disableVertexAttribArray(a)},Yb:function(a,b,c){S.drawArrays(a,b,c)},Xb:function(a,b,c,e){S.drawArraysInstanced(a,b,c,e)},Wb:function(a,b,c,e,f){S.Ae.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},Vb:function(a,b){for(var c=rd[a],e=0;e<a;e++)c[e]=K[b+4*e>>2];S.drawBuffers(c)},Ub:sd,Tb:function(a,b,c,e,f){S.drawElementsInstanced(a,b,c,e,f)},Sb:function(a,b,c,e,f,k,l){S.Ae.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,
+b,c,e,f,k,l)},Rb:function(a,b,c,e,f,k){sd(a,e,f,k)},Qb:function(a){S.enable(a)},Pb:function(a){S.enableVertexAttribArray(a)},Ob:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},Nb:function(){S.finish()},Mb:function(){S.flush()},Lb:function(a,b,c,e){S.framebufferRenderbuffer(a,b,c,Zc[e])},Kb:function(a,b,c,e,f){S.framebufferTexture2D(a,b,c,ea[e],f)},Jb:function(a){S.frontFace(a)},Ib:function(a,b){td(a,b,"createBuffer",Wc)},Hb:function(a,b){td(a,b,"createFramebuffer",Yc)},Gb:function(a,
+b){td(a,b,"createRenderbuffer",Zc)},Fb:function(a,b){td(a,b,"createSampler",bd)},Eb:function(a,b){td(a,b,"createTexture",ea)},Db:ud,Cb:ud,Bb:function(a){S.generateMipmap(a)},Ab:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},zb:function(){var a=S.getError()||hd;hd=0;return a},yb:function(a,b){vd(a,b,2)},xb:function(a,b,c,e){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[e>>2]=a},K:function(a,b){vd(a,b,0)},wb:function(a,
+b,c,e){a=S.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(K[c>>2]=b)},vb:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a="(unknown error)"),K[c>>2]=a.length+1;else if(35719==b){if(!a.ne)for(b=0;b<S.getProgramParameter(a,35718);++b)a.ne=Math.max(a.ne,S.getActiveUniform(a,b).name.length+1);K[c>>2]=a.ne}else if(35722==b){if(!a.le)for(b=0;b<S.getProgramParameter(a,35721);++b)a.le=Math.max(a.le,S.getActiveAttrib(a,
+b).name.length+1);K[c>>2]=a.le}else if(35381==b){if(!a.me)for(b=0;b<S.getProgramParameter(a,35382);++b)a.me=Math.max(a.me,S.getActiveUniformBlockName(a,b).length+1);K[c>>2]=a.me}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},ub:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},tb:function(a,b,c,e){a=S.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0<b&&e?ka(a,C,e,b):0;c&&(K[c>>2]=b)},sb:function(a,b,c,e){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>>
+2]=a.rangeMax;K[e>>2]=a.precision},rb:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},R:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return"GL_"+e}));b=xd(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&xd(b);break;
+case 7938:b=S.getParameter(7938);b=2<=x.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=xd(b);break;case 35724:b=S.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=xd(b);break;default:R(1280)}dd[a]=b}return b},qb:function(a,b){if(2>x.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[],
+c=c.concat(c.map(function(e){return"GL_"+e})),c=c.map(function(e){return xd(e)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},pb:function(a,b){b=b?kb(C,b):"";if(a=Xc[a]){var c=a,e=c.ee,f=c.Ie,k;if(!e)for(c.ee=e={},c.He={},k=0;k<S.getProgramParameter(c,35718);++k){var l=S.getActiveUniform(c,k);var m=l.name;l=l.size;var q=yd(m);q=0<q?m.slice(0,q):m;var w=c.ye;c.ye+=l;f[q]=[l,w];for(m=0;m<l;++m)e[w]=m,c.He[w++]=q}c=a.ee;e=0;f=b;k=yd(b);0<k&&(e=parseInt(b.slice(k+1))>>>0,f=b.slice(0,
+k));if((f=a.Ie[f])&&e<f[0]&&(e+=f[1],c[e]=c[e]||S.getUniformLocation(a,b)))return e}else R(1281);return-1},ob:function(a,b,c){for(var e=rd[b],f=0;f<b;f++)e[f]=K[c+4*f>>2];S.invalidateFramebuffer(a,e)},nb:function(a,b,c,e,f,k,l){for(var m=rd[b],q=0;q<b;q++)m[q]=K[c+4*q>>2];S.invalidateSubFramebuffer(a,m,e,f,k,l)},mb:function(a){return S.isSync(cd[a])},lb:function(a){return(a=ea[a])?S.isTexture(a):0},kb:function(a){S.lineWidth(a)},jb:function(a){a=Xc[a];S.linkProgram(a);a.ee=0;a.Ie={}},ib:function(a,
+b,c,e,f,k){S.Ee.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,e>>2,L,f>>2,k)},hb:function(a,b,c,e,f,k,l,m){S.Ee.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,e>>2,K,f>>2,K,k>>2,L,l>>2,m)},gb:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},fb:function(a){S.readBuffer(a)},eb:function(a,b,c,e,f,k,l){if(2<=x.version)if(S.te)S.readPixels(a,b,c,e,f,k,l);else{var m=zd(k);S.readPixels(a,b,c,e,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=Ad(k,f,c,e,l))?S.readPixels(a,
+b,c,e,f,k,l):R(1280)},db:function(a,b,c,e){S.renderbufferStorage(a,b,c,e)},cb:function(a,b,c,e,f){S.renderbufferStorageMultisample(a,b,c,e,f)},bb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},ab:function(a,b,c){S.samplerParameteri(bd[a],b,c)},$a:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},_a:function(a,b,c,e){S.scissor(a,b,c,e)},Za:function(a,b,c,e){for(var f="",k=0;k<b;++k){var l=e?K[e+4*k>>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):"";f+=l}S.shaderSource($c[a],f)},Ya:function(a,b,
+c){S.stencilFunc(a,b,c)},Xa:function(a,b,c,e){S.stencilFuncSeparate(a,b,c,e)},Wa:function(a){S.stencilMask(a)},Va:function(a,b){S.stencilMaskSeparate(a,b)},Ua:function(a,b,c){S.stencilOp(a,b,c)},Ta:function(a,b,c,e){S.stencilOpSeparate(a,b,c,e)},Sa:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Zd)S.texImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=zd(m);S.texImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,e,f,k,l,m,null);else S.texImage2D(a,b,c,e,f,k,l,m,q?
+Ad(m,l,e,f,q):null)},Ra:function(a,b,c){S.texParameterf(a,b,c)},Qa:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Pa:function(a,b,c){S.texParameteri(a,b,c)},Oa:function(a,b,c){S.texParameteri(a,b,K[c>>2])},Na:function(a,b,c,e,f){S.texStorage2D(a,b,c,e,f)},Ma:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Zd)S.texSubImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=zd(m);S.texSubImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,e,f,k,l,m,null);else w=null,q&&(w=
+Ad(m,l,f,k,q)),S.texSubImage2D(a,b,c,e,f,k,l,m,w)},La:function(a,b){S.uniform1f(W(a),b)},Ka:function(a,b,c){if(2<=x.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var e=Bd[b-1],f=0;f<b;++f)e[f]=N[c+4*f>>2];else e=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),e)}},Ja:function(a,b){S.uniform1i(W(a),b)},Ia:function(a,b,c){if(2<=x.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var e=Cd[b-1],f=0;f<b;++f)e[f]=K[c+4*f>>2];else e=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),e)}},Ha:function(a,
+b,c){S.uniform2f(W(a),b,c)},Ga:function(a,b,c){if(2<=x.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var e=Bd[2*b-1],f=0;f<2*b;f+=2)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2];else e=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),e)}},Fa:function(a,b,c){S.uniform2i(W(a),b,c)},Ea:function(a,b,c){if(2<=x.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var e=Cd[2*b-1],f=0;f<2*b;f+=2)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2];else e=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),e)}},Da:function(a,
+b,c,e){S.uniform3f(W(a),b,c,e)},Ca:function(a,b,c){if(2<=x.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var e=Bd[3*b-1],f=0;f<3*b;f+=3)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2],e[f+2]=N[c+(4*f+8)>>2];else e=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),e)}},Ba:function(a,b,c,e){S.uniform3i(W(a),b,c,e)},Aa:function(a,b,c){if(2<=x.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var e=Cd[3*b-1],f=0;f<3*b;f+=3)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2];else e=
+K.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),e)}},za:function(a,b,c,e,f){S.uniform4f(W(a),b,c,e,f)},ya:function(a,b,c){if(2<=x.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var e=Bd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;e[k]=f[l];e[k+1]=f[l+1];e[k+2]=f[l+2];e[k+3]=f[l+3]}}else e=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),e)}},xa:function(a,b,c,e,f){S.uniform4i(W(a),b,c,e,f)},wa:function(a,b,c){if(2<=x.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var e=Cd[4*b-
+1],f=0;f<4*b;f+=4)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2],e[f+3]=K[c+(4*f+12)>>2];else e=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),e)}},va:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix2fv(W(a),!!c,N,e>>2,4*b);else{if(72>=b)for(var f=Bd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2];else f=N.subarray(e>>2,e+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},ua:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix3fv(W(a),
+!!c,N,e>>2,9*b);else{if(32>=b)for(var f=Bd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2],f[k+4]=N[e+(4*k+16)>>2],f[k+5]=N[e+(4*k+20)>>2],f[k+6]=N[e+(4*k+24)>>2],f[k+7]=N[e+(4*k+28)>>2],f[k+8]=N[e+(4*k+32)>>2];else f=N.subarray(e>>2,e+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},ta:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix4fv(W(a),!!c,N,e>>2,16*b);else{if(18>=b){var f=Bd[16*b-1],k=N;e>>=2;for(var l=0;l<16*b;l+=16){var m=e+l;f[l]=
+k[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(e>>2,e+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},sa:function(a){a=Xc[a];S.useProgram(a);S.Re=a},ra:function(a,b){S.vertexAttrib1f(a,b)},qa:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},pa:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])},
+oa:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},na:function(a,b){S.vertexAttribDivisor(a,b)},ma:function(a,b,c,e,f){S.vertexAttribIPointer(a,b,c,e,f)},la:function(a,b,c,e,f,k){S.vertexAttribPointer(a,b,c,!!e,f,k)},ka:function(a,b,c,e){S.viewport(a,b,c,e)},aa:function(a,b,c,e){S.waitSync(cd[a],b,(c>>>0)+4294967296*e)},o:Nd,n:Od,j:Pd,J:Qd,Q:Rd,P:Sd,x:Td,y:Ud,p:Vd,w:Wd,ja:Xd,ia:Yd,ha:Zd,$:(a,b,c,e)=>Hd(a,b,c,e)};
(function(){function a(c){G=c=c.exports;Fa=G.$c;La();Na=G.bd;Pa.unshift(G.ad);Ua--;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(0==Ua&&(null!==Va&&(clearInterval(Va),Va=null),Wa)){var e=Wa;Wa=null;e()}return c}var b={a:$d};Ua++;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca("Module.instantiateWasm callback failed with error: "+c),ba(c)}cb(b,function(c){a(c.instance)}).catch(ba);return{}})();
-var qc=r._free=a=>(qc=r._free=G.cd)(a),sd=r._malloc=a=>(sd=r._malloc=G.dd)(a),pc=a=>(pc=G.ed)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.fd)();var ae=(a,b)=>(ae=G.gd)(a,b),be=()=>(be=G.hd)(),ce=a=>(ce=G.id)(a);r.dynCall_viji=(a,b,c,e,f)=>(r.dynCall_viji=G.kd)(a,b,c,e,f);r.dynCall_vijiii=(a,b,c,e,f,k,l)=>(r.dynCall_vijiii=G.ld)(a,b,c,e,f,k,l);r.dynCall_viiiiij=(a,b,c,e,f,k,l,m)=>(r.dynCall_viiiiij=G.md)(a,b,c,e,f,k,l,m);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.nd)(a,b,c);
+var qc=r._free=a=>(qc=r._free=G.cd)(a),wd=r._malloc=a=>(wd=r._malloc=G.dd)(a),pc=a=>(pc=G.ed)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.fd)();var ae=(a,b)=>(ae=G.gd)(a,b),be=()=>(be=G.hd)(),ce=a=>(ce=G.id)(a);r.dynCall_viji=(a,b,c,e,f)=>(r.dynCall_viji=G.kd)(a,b,c,e,f);r.dynCall_vijiii=(a,b,c,e,f,k,l)=>(r.dynCall_vijiii=G.ld)(a,b,c,e,f,k,l);r.dynCall_viiiiij=(a,b,c,e,f,k,l,m)=>(r.dynCall_viiiiij=G.md)(a,b,c,e,f,k,l,m);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.nd)(a,b,c);
r.dynCall_vij=(a,b,c,e)=>(r.dynCall_vij=G.od)(a,b,c,e);r.dynCall_iiij=(a,b,c,e,f)=>(r.dynCall_iiij=G.pd)(a,b,c,e,f);r.dynCall_iiiij=(a,b,c,e,f,k)=>(r.dynCall_iiiij=G.qd)(a,b,c,e,f,k);r.dynCall_viij=(a,b,c,e,f)=>(r.dynCall_viij=G.rd)(a,b,c,e,f);r.dynCall_viiij=(a,b,c,e,f,k)=>(r.dynCall_viiij=G.sd)(a,b,c,e,f,k);r.dynCall_ji=(a,b)=>(r.dynCall_ji=G.td)(a,b);r.dynCall_iij=(a,b,c,e)=>(r.dynCall_iij=G.ud)(a,b,c,e);r.dynCall_jiiiiii=(a,b,c,e,f,k,l)=>(r.dynCall_jiiiiii=G.vd)(a,b,c,e,f,k,l);
r.dynCall_jiiiiji=(a,b,c,e,f,k,l,m)=>(r.dynCall_jiiiiji=G.wd)(a,b,c,e,f,k,l,m);r.dynCall_iijj=(a,b,c,e,f,k)=>(r.dynCall_iijj=G.xd)(a,b,c,e,f,k);r.dynCall_jiji=(a,b,c,e,f)=>(r.dynCall_jiji=G.yd)(a,b,c,e,f);r.dynCall_viijii=(a,b,c,e,f,k,l)=>(r.dynCall_viijii=G.zd)(a,b,c,e,f,k,l);r.dynCall_iiiiij=(a,b,c,e,f,k,l)=>(r.dynCall_iiiiij=G.Ad)(a,b,c,e,f,k,l);r.dynCall_iiiiijj=(a,b,c,e,f,k,l,m,q)=>(r.dynCall_iiiiijj=G.Bd)(a,b,c,e,f,k,l,m,q);
r.dynCall_iiiiiijj=(a,b,c,e,f,k,l,m,q,w)=>(r.dynCall_iiiiiijj=G.Cd)(a,b,c,e,f,k,l,m,q,w);function Wd(a,b,c,e,f){var k=be();try{Na.get(a)(b,c,e,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Od(a,b,c){var e=be();try{return Na.get(a)(b,c)}catch(f){ce(e);if(f!==f+0)throw f;ae(1,0)}}function Ud(a,b,c){var e=be();try{Na.get(a)(b,c)}catch(f){ce(e);if(f!==f+0)throw f;ae(1,0)}}function Nd(a,b){var c=be();try{return Na.get(a)(b)}catch(e){ce(c);if(e!==e+0)throw e;ae(1,0)}}
diff --git a/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js.symbols b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js.symbols
new file mode 100644
index 0000000..34a52da
--- /dev/null
+++ b/packages/devtools_extensions/example/foo/packages/foo/extension/devtools/build/canvaskit/chromium/canvaskit.js.symbols
@@ -0,0 +1,10842 @@
+0:_embind_register_class_function
+1:_embind_register_enum_value
+2:_emval_decref
+3:_embind_register_value_object_field
+4:_embind_register_class_class_function
+5:_emval_new_cstring
+6:_emval_take_value
+7:_emval_set_property
+8:_embind_register_enum
+9:invoke_iiii
+10:abort
+11:_embind_register_class
+12:_emval_incref
+13:invoke_iii
+14:invoke_ii
+15:invoke_viii
+16:_emval_get_method_caller
+17:_embind_register_smart_ptr
+18:_embind_register_memory_view
+19:_embind_register_constant
+20:_emval_call_void_method
+21:_embind_register_function
+22:invoke_viiii
+23:invoke_vi
+24:invoke_vii
+25:_emval_run_destructors
+26:_emval_get_property
+27:_embind_register_class_constructor
+28:_embind_register_value_object
+29:_embind_register_integer
+30:_embind_finalize_value_object
+31:_emval_new_object
+32:_emval_as
+33:__cxa_throw
+34:_emval_new_array
+35:invoke_iiiii
+36:glGetIntegerv
+37:_emval_new
+38:_emval_get_global
+39:_emval_call_method
+40:_embind_register_std_wstring
+41:invoke_iiiiiiiiii
+42:invoke_iiiiiii
+43:glGetString
+44:glClearStencil
+45:glClearColor
+46:glClear
+47:glBindFramebuffer
+48:_embind_register_std_string
+49:_embind_register_float
+50:__wasi_fd_write
+51:__wasi_fd_close
+52:__syscall_fcntl64
+53:strftime_l
+54:legalimport$glWaitSync
+55:legalimport$glClientWaitSync
+56:legalimport$_munmap_js
+57:legalimport$_mmap_js
+58:legalimport$_embind_register_bigint
+59:legalimport$__wasi_fd_seek
+60:legalimport$__wasi_fd_pread
+61:invoke_viiiiiiiii
+62:invoke_viiiiii
+63:invoke_viiiii
+64:glViewport
+65:glVertexAttribPointer
+66:glVertexAttribIPointer
+67:glVertexAttribDivisor
+68:glVertexAttrib4fv
+69:glVertexAttrib3fv
+70:glVertexAttrib2fv
+71:glVertexAttrib1f
+72:glUseProgram
+73:glUniformMatrix4fv
+74:glUniformMatrix3fv
+75:glUniformMatrix2fv
+76:glUniform4iv
+77:glUniform4i
+78:glUniform4fv
+79:glUniform4f
+80:glUniform3iv
+81:glUniform3i
+82:glUniform3fv
+83:glUniform3f
+84:glUniform2iv
+85:glUniform2i
+86:glUniform2fv
+87:glUniform2f
+88:glUniform1iv
+89:glUniform1i
+90:glUniform1fv
+91:glUniform1f
+92:glTexSubImage2D
+93:glTexStorage2D
+94:glTexParameteriv
+95:glTexParameteri
+96:glTexParameterfv
+97:glTexParameterf
+98:glTexImage2D
+99:glStencilOpSeparate
+100:glStencilOp
+101:glStencilMaskSeparate
+102:glStencilMask
+103:glStencilFuncSeparate
+104:glStencilFunc
+105:glShaderSource
+106:glScissor
+107:glSamplerParameteriv
+108:glSamplerParameteri
+109:glSamplerParameterf
+110:glRenderbufferStorageMultisample
+111:glRenderbufferStorage
+112:glReadPixels
+113:glReadBuffer
+114:glPixelStorei
+115:glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL
+116:glMultiDrawArraysInstancedBaseInstanceWEBGL
+117:glLinkProgram
+118:glLineWidth
+119:glIsTexture
+120:glIsSync
+121:glInvalidateSubFramebuffer
+122:glInvalidateFramebuffer
+123:glGetUniformLocation
+124:glGetStringi
+125:glGetShaderiv
+126:glGetShaderPrecisionFormat
+127:glGetShaderInfoLog
+128:glGetRenderbufferParameteriv
+129:glGetProgramiv
+130:glGetProgramInfoLog
+131:glGetFramebufferAttachmentParameteriv
+132:glGetFloatv
+133:glGetError
+134:glGetBufferParameteriv
+135:glGenerateMipmap
+136:glGenVertexArraysOES
+137:glGenVertexArrays
+138:glGenTextures
+139:glGenSamplers
+140:glGenRenderbuffers
+141:glGenFramebuffers
+142:glGenBuffers
+143:glFrontFace
+144:glFramebufferTexture2D
+145:glFramebufferRenderbuffer
+146:glFlush
+147:glFinish
+148:glFenceSync
+149:glEnableVertexAttribArray
+150:glEnable
+151:glDrawRangeElements
+152:glDrawElementsInstancedBaseVertexBaseInstanceWEBGL
+153:glDrawElementsInstanced
+154:glDrawElements
+155:glDrawBuffers
+156:glDrawArraysInstancedBaseInstanceWEBGL
+157:glDrawArraysInstanced
+158:glDrawArrays
+159:glDisableVertexAttribArray
+160:glDisable
+161:glDepthMask
+162:glDeleteVertexArraysOES
+163:glDeleteVertexArrays
+164:glDeleteTextures
+165:glDeleteSync
+166:glDeleteShader
+167:glDeleteSamplers
+168:glDeleteRenderbuffers
+169:glDeleteProgram
+170:glDeleteFramebuffers
+171:glDeleteBuffers
+172:glCullFace
+173:glCreateShader
+174:glCreateProgram
+175:glCopyTexSubImage2D
+176:glCopyBufferSubData
+177:glCompressedTexSubImage2D
+178:glCompressedTexImage2D
+179:glCompileShader
+180:glColorMask
+181:glCheckFramebufferStatus
+182:glBufferSubData
+183:glBufferData
+184:glBlitFramebuffer
+185:glBlendFunc
+186:glBlendEquation
+187:glBlendColor
+188:glBindVertexArrayOES
+189:glBindVertexArray
+190:glBindTexture
+191:glBindSampler
+192:glBindRenderbuffer
+193:glBindBuffer
+194:glBindAttribLocation
+195:glAttachShader
+196:glActiveTexture
+197:exit
+198:emscripten_webgl_get_current_context
+199:emscripten_resize_heap
+200:emscripten_get_now
+201:_emval_not
+202:_emscripten_throw_longjmp
+203:_emscripten_get_now_is_monotonic
+204:_embind_register_void
+205:_embind_register_emval
+206:_embind_register_bool
+207:__wasi_fd_read
+208:__wasi_environ_sizes_get
+209:__wasi_environ_get
+210:__syscall_stat64
+211:__syscall_openat
+212:__syscall_newfstatat
+213:__syscall_ioctl
+214:__syscall_fstat64
+215:dlfree
+216:operator\20new\28unsigned\20long\29
+217:void\20emscripten::internal::raw_destructor<SkColorSpace>\28SkColorSpace*\29
+218:__memcpy
+219:SkString::~SkString\28\29
+220:__memset
+221:GrGLSLShaderBuilder::codeAppendf\28char\20const*\2c\20...\29
+222:SkColorInfo::~SkColorInfo\28\29
+223:SkContainerAllocator::allocate\28int\2c\20double\29
+224:SkString::SkString\28\29
+225:SkDebugf\28char\20const*\2c\20...\29
+226:SkString::insert\28unsigned\20long\2c\20char\20const*\29
+227:SkData::~SkData\28\29
+228:memmove
+229:SkArenaAlloc::ensureSpace\28unsigned\20int\2c\20unsigned\20int\29
+230:memcmp
+231:hb_blob_destroy
+232:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::append\28char\20const*\29
+233:sk_report_container_overflow_and_die\28\29
+234:SkPath::~SkPath\28\29
+235:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::~__func\28\29
+236:SkRasterPipeline::append\28SkRasterPipelineOp\2c\20void*\29
+237:ft_mem_free
+238:FT_MulFix
+239:SkString::SkString\28char\20const*\29
+240:SkSL::ErrorReporter::error\28SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+241:SkTDStorage::append\28\29
+242:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::share\28void*\29
+243:SkMatrix::computeTypeMask\28\29\20const
+244:testSetjmp
+245:GrGpuResource::notifyARefCntIsZero\28GrIORef<GrGpuResource>::LastRemovedRef\29\20const
+246:SkWriter32::growToAtLeast\28unsigned\20long\29
+247:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::append\28char\20const*\2c\20unsigned\20long\29
+248:SkSL::Pool::AllocMemory\28unsigned\20long\29
+249:fmaxf
+250:std::__2::__shared_weak_count::__release_weak\28\29
+251:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::size\5babi:v160004\5d\28\29\20const
+252:SkString::SkString\28SkString&&\29
+253:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__throw_length_error\5babi:v160004\5d\28\29\20const
+254:GrColorInfo::~GrColorInfo\28\29
+255:SkIRect::intersect\28SkIRect\20const&\2c\20SkIRect\20const&\29
+256:SkTDStorage::SkTDStorage\28int\29
+257:GrBackendFormat::~GrBackendFormat\28\29
+258:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::insert\28unsigned\20long\2c\20char\20const*\29
+259:strlen
+260:std::__2::vector<float\2c\20std::__2::allocator<float>>::__throw_length_error\5babi:v160004\5d\28\29\20const
+261:GrContext_Base::caps\28\29\20const
+262:SkPaint::~SkPaint\28\29
+263:SkTDStorage::~SkTDStorage\28\29
+264:SkSL::RP::Generator::pushExpression\28SkSL::Expression\20const&\2c\20bool\29
+265:sk_malloc_throw\28unsigned\20long\2c\20unsigned\20long\29
+266:SkStrokeRec::getStyle\28\29\20const
+267:strncmp
+268:SkString::SkString\28SkString\20const&\29
+269:hb_ot_map_builder_t::add_feature\28unsigned\20int\2c\20hb_ot_map_feature_flags_t\2c\20unsigned\20int\29
+270:void\20emscripten::internal::raw_destructor<SkContourMeasure>\28SkContourMeasure*\29
+271:SkMatrix::mapRect\28SkRect*\2c\20SkRect\20const&\2c\20SkApplyPerspectiveClip\29\20const
+272:SkArenaAlloc::installFooter\28char*\20\28*\29\28char*\29\2c\20unsigned\20int\29
+273:hb_buffer_t::make_room_for\28unsigned\20int\2c\20unsigned\20int\29
+274:SkArenaAlloc::allocObjectWithFooter\28unsigned\20int\2c\20unsigned\20int\29
+275:fminf
+276:SkSemaphore::osSignal\28int\29
+277:SkBitmap::~SkBitmap\28\29
+278:strcmp
+279:SkString::operator=\28SkString&&\29
+280:SkSL::Parser::nextRawToken\28\29
+281:SkPath::SkPath\28\29
+282:skia_private::TArray<SkPoint\2c\20true>::push_back\28SkPoint\20const&\29
+283:skia_png_error
+284:hb_buffer_t::message\28hb_font_t*\2c\20char\20const*\2c\20...\29
+285:SkArenaAlloc::~SkArenaAlloc\28\29
+286:SkMatrix::computePerspectiveTypeMask\28\29\20const
+287:SkColorInfo::SkColorInfo\28SkColorInfo\20const&\29
+288:SkSemaphore::osWait\28\29
+289:SkFontMgr*\20emscripten::base<SkFontMgr>::convertPointer<skia::textlayout::TypefaceFontProvider\2c\20SkFontMgr>\28skia::textlayout::TypefaceFontProvider*\29
+290:SkIntersections::insert\28double\2c\20double\2c\20SkDPoint\20const&\29
+291:dlmalloc
+292:FT_DivFix
+293:SkString::appendf\28char\20const*\2c\20...\29
+294:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_string\28\29
+295:std::__throw_bad_array_new_length\5babi:v160004\5d\28\29
+296:skia_png_free
+297:SkPath::lineTo\28float\2c\20float\29
+298:skia_png_crc_finish
+299:SkChecksum::Hash32\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20int\29
+300:skia_png_chunk_benign_error
+301:SkReadBuffer::readUInt\28\29
+302:SkMatrix::mapPoints\28SkPoint*\2c\20SkPoint\20const*\2c\20int\29\20const
+303:dlrealloc
+304:SkReadBuffer::setInvalid\28\29
+305:SkMatrix::setTranslate\28float\2c\20float\29
+306:skia_png_warning
+307:OT::VarData::get_delta\28unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\2c\20OT::VarRegionList\20const&\2c\20float*\29\20const
+308:ft_mem_qrealloc
+309:SkPaint::SkPaint\28SkPaint\20const&\29
+310:skia_private::TArray<unsigned\20long\2c\20true>::push_back\28unsigned\20long\20const&\29
+311:SkColorInfo::bytesPerPixel\28\29\20const
+312:GrVertexChunkBuilder::allocChunk\28int\29
+313:OT::DeltaSetIndexMap::map\28unsigned\20int\29\20const
+314:ft_mem_realloc
+315:SkMatrix::reset\28\29
+316:SkImageInfo::MakeUnknown\28int\2c\20int\29
+317:GrSurfaceProxyView::asRenderTargetProxy\28\29\20const
+318:skia_private::TArray<unsigned\20char\2c\20true>::push_back\28unsigned\20char&&\29
+319:SkSL::RP::Builder::appendInstruction\28SkSL::RP::BuilderOp\2c\20SkSL::RP::Builder::SlotList\2c\20int\2c\20int\2c\20int\2c\20int\29
+320:SkPath::SkPath\28SkPath\20const&\29
+321:SkBitmap::SkBitmap\28\29
+322:ft_validator_error
+323:SkBlitter::~SkBlitter\28\29
+324:strstr
+325:SkPaint::SkPaint\28\29
+326:SkOpPtT::segment\28\29\20const
+327:skia_private::TArray<sk_sp<SkIDChangeListener>\2c\20true>::push_back\28sk_sp<SkIDChangeListener>&&\29
+328:sk_malloc_flags\28unsigned\20long\2c\20unsigned\20int\29
+329:SkSL::Parser::expect\28SkSL::Token::Kind\2c\20char\20const*\2c\20SkSL::Token*\29
+330:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__get_pointer\5babi:v160004\5d\28\29
+331:dlcalloc
+332:SkMatrix::invertNonIdentity\28SkMatrix*\29\20const
+333:skia_png_get_uint_32
+334:skia_png_calculate_crc
+335:SkImageGenerator::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+336:GrTextureGenerator::isTextureGenerator\28\29\20const
+337:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::resize\5babi:v160004\5d\28unsigned\20long\29
+338:skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20true>::operator=\28skia_private::TArray<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20true>&&\29
+339:SkSL::GLSLCodeGenerator::writeExpression\28SkSL::Expression\20const&\2c\20SkSL::OperatorPrecedence\29
+340:SkPoint::Length\28float\2c\20float\29
+341:GrImageInfo::GrImageInfo\28GrImageInfo\20const&\29
+342:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::operator\5b\5d\5babi:v160004\5d\28unsigned\20long\29\20const
+343:std::__2::locale::~locale\28\29
+344:SkPath::getBounds\28\29\20const
+345:skia_private::TArray<SkString\2c\20true>::push_back\28SkString&&\29
+346:skgpu::Swizzle::Swizzle\28char\20const*\29
+347:FT_Stream_Seek
+348:SkRect::join\28SkRect\20const&\29
+349:SkPathRef::Editor::Editor\28sk_sp<SkPathRef>*\2c\20int\2c\20int\29
+350:skia_private::TArray<SkSL::RP::Instruction\2c\20true>::push_back\28SkSL::RP::Instruction&&\29
+351:hb_blob_reference
+352:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\29
+353:cf2_stack_popFixed
+354:SkRect::setBoundsCheck\28SkPoint\20const*\2c\20int\29
+355:SkRect::intersect\28SkRect\20const&\29
+356:GrGLExtensions::has\28char\20const*\29\20const
+357:SkCachedData::internalUnref\28bool\29\20const
+358:GrProcessor::operator\20new\28unsigned\20long\29
+359:FT_MulDiv
+360:SkJSONWriter::appendName\28char\20const*\29
+361:std::__2::__throw_bad_function_call\5babi:v160004\5d\28\29
+362:std::__2::to_string\28int\29
+363:std::__2::ios_base::getloc\28\29\20const
+364:SkRegion::~SkRegion\28\29
+365:skia_png_read_push_finish_row
+366:skia::textlayout::TextStyle::~TextStyle\28\29
+367:hb_blob_make_immutable
+368:SkString::operator=\28char\20const*\29
+369:SkSL::ThreadContext::ReportError\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+370:SkSL::SymbolTable::addWithoutOwnership\28SkSL::Symbol*\29
+371:hb_ot_map_builder_t::add_pause\28unsigned\20int\2c\20bool\20\28*\29\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29\29
+372:cff1_path_procs_extents_t::curve\28CFF::cff1_cs_interp_env_t&\2c\20cff1_extents_param_t&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\29
+373:VP8GetValue
+374:SkSL::Type::matches\28SkSL::Type\20const&\29\20const
+375:SkSL::String::printf\28char\20const*\2c\20...\29
+376:SkJSONWriter::beginValue\28bool\29
+377:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d\28\29
+378:skgpu::ganesh::SurfaceContext::caps\28\29\20const
+379:SkSemaphore::~SkSemaphore\28\29
+380:SkPoint::normalize\28\29
+381:SkColorInfo::operator=\28SkColorInfo\20const&\29
+382:SkArenaAlloc::SkArenaAlloc\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29
+383:FT_Stream_ReadUShort
+384:jdiv_round_up
+385:SkSL::RP::Builder::binary_op\28SkSL::RP::BuilderOp\2c\20int\29
+386:SkColorInfo::operator=\28SkColorInfo&&\29
+387:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::capacity\5babi:v160004\5d\28\29\20const
+388:jzero_far
+389:hb_blob_get_data_writable
+390:SkColorInfo::SkColorInfo\28SkColorInfo&&\29
+391:SkBlitter::~SkBlitter\28\29.1
+392:skia_png_write_data
+393:bool\20std::__2::operator==\5babi:v160004\5d<char\2c\20std::__2::char_traits<char>>\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\20const&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\20const&\29
+394:SkRuntimeEffect::uniformSize\28\29\20const
+395:SkImageGenerator::onQueryYUVAInfo\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\2c\20SkYUVAPixmapInfo*\29\20const
+396:FT_Stream_ExitFrame
+397:subtag_matches\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20int\29
+398:__shgetc
+399:FT_Stream_GetUShort
+400:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::operator=\5babi:v160004\5d\28wchar_t\20const*\29
+401:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::operator=\5babi:v160004\5d\28char\20const*\29
+402:sktext::gpu::BagOfBytes::~BagOfBytes\28\29
+403:skia_private::TArray<unsigned\20int\2c\20true>::push_back_raw\28int\29
+404:bool\20std::__2::operator==\5babi:v160004\5d<wchar_t\2c\20std::__2::char_traits<wchar_t>>\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\20const&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\20const&\29
+405:SkPoint::scale\28float\2c\20SkPoint*\29\20const
+406:SkPathRef::growForVerb\28int\2c\20float\29
+407:SkNullBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+408:SkMatrix::setConcat\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+409:GrFragmentProcessor::ProgramImpl::invokeChild\28int\2c\20char\20const*\2c\20char\20const*\2c\20GrFragmentProcessor::ProgramImpl::EmitArgs&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+410:skia_png_chunk_error
+411:hb_face_reference_table
+412:GrSurfaceProxyView::asTextureProxy\28\29\20const
+413:SkStringPrintf\28char\20const*\2c\20...\29
+414:RoughlyEqualUlps\28float\2c\20float\29
+415:GrGLSLVaryingHandler::addVarying\28char\20const*\2c\20GrGLSLVarying*\2c\20GrGLSLVaryingHandler::Interpolation\29
+416:sscanf
+417:SkTDStorage::reserve\28int\29
+418:SkPath::Iter::next\28SkPoint*\29
+419:OT::Layout::Common::Coverage::get_coverage\28unsigned\20int\29\20const
+420:round
+421:SkRecord::grow\28\29
+422:SkRGBA4f<\28SkAlphaType\293>::toBytes_RGBA\28\29\20const
+423:GrQuad::MakeFromRect\28SkRect\20const&\2c\20SkMatrix\20const&\29
+424:GrProcessor::operator\20new\28unsigned\20long\2c\20unsigned\20long\29
+425:skgpu::ganesh::SurfaceDrawContext::addDrawOp\28GrClip\20const*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20std::__2::function<void\20\28GrOp*\2c\20unsigned\20int\29>\20const&\29
+426:skgpu::ResourceKeyHash\28unsigned\20int\20const*\2c\20unsigned\20long\29
+427:VP8LoadFinalBytes
+428:SkPath::moveTo\28float\2c\20float\29
+429:SkPath::conicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\29
+430:SkCanvas::predrawNotify\28bool\29
+431:std::__2::__cloc\28\29
+432:SkStrikeSpec::~SkStrikeSpec\28\29
+433:SkSL::RP::Builder::discard_stack\28int\2c\20int\29
+434:GrSkSLFP::GrSkSLFP\28sk_sp<SkRuntimeEffect>\2c\20char\20const*\2c\20GrSkSLFP::OptFlags\29
+435:GrBackendFormat::GrBackendFormat\28\29
+436:__multf3
+437:VP8LReadBits
+438:SkTDStorage::append\28int\29
+439:SkSurfaceProps::SkSurfaceProps\28\29
+440:SkPath::isFinite\28\29\20const
+441:SkMatrix::setScale\28float\2c\20float\29
+442:GrOpsRenderPass::setScissorRect\28SkIRect\20const&\29
+443:GrOpsRenderPass::bindPipeline\28GrProgramInfo\20const&\2c\20SkRect\20const&\29
+444:skia_private::TArray<SkPoint\2c\20true>::push_back_raw\28int\29
+445:hb_draw_funcs_t::start_path\28void*\2c\20hb_draw_state_t&\29
+446:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitStatement\28SkSL::Statement\20const&\29
+447:SkPath::operator=\28SkPath\20const&\29
+448:SkIRect\20skif::Mapping::map<SkIRect>\28SkIRect\20const&\2c\20SkMatrix\20const&\29
+449:SkColorSpaceXformSteps::SkColorSpaceXformSteps\28SkColorSpace\20const*\2c\20SkAlphaType\2c\20SkColorSpace\20const*\2c\20SkAlphaType\29
+450:GrSimpleMeshDrawOpHelper::~GrSimpleMeshDrawOpHelper\28\29
+451:GrProcessorSet::GrProcessorSet\28GrPaint&&\29
+452:GrCaps::getDefaultBackendFormat\28GrColorType\2c\20skgpu::Renderable\29\20const
+453:GrBackendFormats::AsGLFormat\28GrBackendFormat\20const&\29
+454:std::__2::locale::id::__get\28\29
+455:std::__2::locale::facet::facet\5babi:v160004\5d\28unsigned\20long\29
+456:hb_buffer_t::_infos_set_glyph_flags\28hb_glyph_info_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+457:SkSL::PipelineStage::PipelineStageCodeGenerator::writeExpression\28SkSL::Expression\20const&\2c\20SkSL::OperatorPrecedence\29
+458:SkSL::Inliner::inlineExpression\28SkSL::Position\2c\20skia_private::THashMap<SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkGoodHash>*\2c\20SkSL::SymbolTable*\2c\20SkSL::Expression\20const&\29
+459:SkSL::GLSLCodeGenerator::writeIdentifier\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+460:SkPath::reset\28\29
+461:SkPath::isEmpty\28\29\20const
+462:GrGeometryProcessor::AttributeSet::initImplicit\28GrGeometryProcessor::Attribute\20const*\2c\20int\29
+463:GrContext_Base::contextID\28\29\20const
+464:FT_Stream_EnterFrame
+465:AlmostEqualUlps\28float\2c\20float\29
+466:std::__2::locale::__imp::install\28std::__2::locale::facet*\2c\20long\29
+467:skia_png_read_data
+468:SkSurface_Base::aboutToDraw\28SkSurface::ContentChangeMode\29
+469:SkSpinlock::contendedAcquire\28\29
+470:SkSL::evaluate_n_way_intrinsic\28SkSL::Context\20const&\2c\20SkSL::Expression\20const*\2c\20SkSL::Expression\20const*\2c\20SkSL::Expression\20const*\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\29\20\28.18\29
+471:SkSL::FunctionDeclaration::description\28\29\20const
+472:SkPaint::setStyle\28SkPaint::Style\29
+473:SkNullBlitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+474:SkDPoint::approximatelyEqual\28SkDPoint\20const&\29\20const
+475:GrOpsRenderPass::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29
+476:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::~basic_string\28\29
+477:skgpu::ganesh::SurfaceContext::drawingManager\28\29
+478:skgpu::UniqueKey::GenerateDomain\28\29
+479:hb_buffer_t::_set_glyph_flags\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20bool\2c\20bool\29
+480:emscripten_longjmp
+481:SkReadBuffer::readScalar\28\29
+482:SkDynamicMemoryWStream::write\28void\20const*\2c\20unsigned\20long\29
+483:GrSurfaceProxy::backingStoreDimensions\28\29\20const
+484:GrMeshDrawOp::GrMeshDrawOp\28unsigned\20int\29
+485:FT_RoundFix
+486:std::__2::unique_ptr<unsigned\20char\2c\20void\20\28*\29\28void*\29>::~unique_ptr\5babi:v160004\5d\28\29
+487:std::__2::unique_ptr<unsigned\20char\2c\20void\20\28*\29\28void*\29>::unique_ptr\5babi:v160004\5d<true\2c\20void>\28unsigned\20char*\2c\20std::__2::__dependent_type<std::__2::__unique_ptr_deleter_sfinae<void\20\28*\29\28void*\29>\2c\20true>::__good_rval_ref_type\29
+488:hb_face_get_glyph_count
+489:cf2_stack_pushFixed
+490:__multi3
+491:SkSL::RP::Builder::push_duplicates\28int\29
+492:SkSL::Pool::FreeMemory\28void*\29
+493:SkSL::ConstructorCompound::MakeFromConstants\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20double\20const*\29
+494:SkRuntimeEffect::MakeForShader\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+495:SkMatrix::postTranslate\28float\2c\20float\29
+496:SkBlockAllocator::reset\28\29
+497:GrTextureEffect::Make\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20SkFilterMode\2c\20SkMipmapMode\29
+498:GrGLSLVaryingHandler::addPassThroughAttribute\28GrShaderVar\20const&\2c\20char\20const*\2c\20GrGLSLVaryingHandler::Interpolation\29
+499:GrFragmentProcessor::registerChild\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkSL::SampleUsage\29
+500:FT_Stream_ReleaseFrame
+501:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator*\5babi:v160004\5d\28\29\20const
+502:skia::textlayout::TextStyle::TextStyle\28skia::textlayout::TextStyle\20const&\29
+503:hb_buffer_t::merge_clusters_impl\28unsigned\20int\2c\20unsigned\20int\29
+504:decltype\28fp.sanitize\28this\29\29\20hb_sanitize_context_t::_dispatch<OT::Layout::Common::Coverage>\28OT::Layout::Common::Coverage\20const&\2c\20hb_priority<1u>\29
+505:byn$mgfn-shared$decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkNullBlitter*\20SkArenaAlloc::make<SkNullBlitter>\28\29::'lambda'\28void*\29>\28SkNullBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+506:SkWStream::writePackedUInt\28unsigned\20long\29
+507:SkSL::RP::Builder::push_constant_i\28int\2c\20int\29
+508:SkSL::FunctionReference::~FunctionReference\28\29
+509:SkColorInfo::refColorSpace\28\29\20const
+510:SkBitmapDevice::drawMesh\28SkMesh\20const&\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+511:GrPipeline::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+512:GrGeometryProcessor::GrGeometryProcessor\28GrProcessor::ClassID\29
+513:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator*\5babi:v160004\5d\28\29\20const
+514:SkSL::fold_expression\28SkSL::Position\2c\20double\2c\20SkSL::Type\20const*\29
+515:SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0::operator\28\29\28SkSL::FunctionDefinition\20const*\2c\20SkSL::FunctionDefinition\20const*\29\20const
+516:SkSL::RP::Generator::binaryOp\28SkSL::Type\20const&\2c\20SkSL::RP::Generator::TypedOps\20const&\29
+517:SkPaint::setShader\28sk_sp<SkShader>\29
+518:GrGeometryProcessor::Attribute&\20skia_private::TArray<GrGeometryProcessor::Attribute\2c\20true>::emplace_back<char\20const\20\28&\29\20\5b10\5d\2c\20GrVertexAttribType\2c\20SkSLType>\28char\20const\20\28&\29\20\5b10\5d\2c\20GrVertexAttribType&&\2c\20SkSLType&&\29
+519:Cr_z_crc32
+520:skia_png_push_save_buffer
+521:cosf
+522:SkSL::RP::Builder::unary_op\28SkSL::RP::BuilderOp\2c\20int\29
+523:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\28\29
+524:SkBitmap::setImmutable\28\29
+525:GrProcessorSet::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+526:GrGLTexture::target\28\29\20const
+527:sk_srgb_singleton\28\29
+528:fma
+529:SkString::operator=\28SkString\20const&\29
+530:SkShaderBase::SkShaderBase\28\29
+531:SkSL::RP::SlotManager::getVariableSlots\28SkSL::Variable\20const&\29
+532:SkPaint::SkPaint\28SkPaint&&\29
+533:SkDPoint::ApproximatelyEqual\28SkPoint\20const&\2c\20SkPoint\20const&\29
+534:SkBitmap::SkBitmap\28SkBitmap\20const&\29
+535:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::push_back\28char\29
+536:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__init_copy_ctor_external\28char\20const*\2c\20unsigned\20long\29
+537:skip_spaces
+538:sk_realloc_throw\28void*\2c\20unsigned\20long\29
+539:cff2_path_param_t::cubic_to\28CFF::point_t\20const&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\29
+540:cff1_path_param_t::cubic_to\28CFF::point_t\20const&\2c\20CFF::point_t\20const&\2c\20CFF::point_t\20const&\29
+541:bool\20OT::Layout::Common::Coverage::collect_coverage<hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\204u>\2c\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\200u>\2c\20hb_set_digest_bits_pattern_t<unsigned\20long\2c\209u>>>>\28hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\204u>\2c\20hb_set_digest_combiner_t<hb_set_digest_bits_pattern_t<unsigned\20long\2c\200u>\2c\20hb_set_digest_bits_pattern_t<unsigned\20long\2c\209u>>>*\29\20const
+542:SkSL::Type::toCompound\28SkSL::Context\20const&\2c\20int\2c\20int\29\20const
+543:SkPath::transform\28SkMatrix\20const&\2c\20SkPath*\2c\20SkApplyPerspectiveClip\29\20const
+544:SkPath::quadTo\28float\2c\20float\2c\20float\2c\20float\29
+545:SkMatrix::mapVectors\28SkPoint*\2c\20SkPoint\20const*\2c\20int\29\20const
+546:SkCanvas::restoreToCount\28int\29
+547:SkBlockAllocator::addBlock\28int\2c\20int\29
+548:SkAAClipBlitter::~SkAAClipBlitter\28\29
+549:OT::hb_ot_apply_context_t::match_properties_mark\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29\20const
+550:GrThreadSafeCache::VertexData::~VertexData\28\29
+551:GrShape::asPath\28SkPath*\2c\20bool\29\20const
+552:GrShaderVar::appendDecl\28GrShaderCaps\20const*\2c\20SkString*\29\20const
+553:GrPixmapBase<void\2c\20GrPixmap>::~GrPixmapBase\28\29
+554:GrGLSLVaryingHandler::emitAttributes\28GrGeometryProcessor\20const&\29
+555:void\20std::__2::vector<std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>\2c\20std::__2::allocator<std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>>>::__push_back_slow_path<std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>>\28std::__2::unique_ptr<SkSL::Symbol\20const\2c\20std::__2::default_delete<SkSL::Symbol\20const>>&&\29
+556:std::__2::unique_ptr<unsigned\20char\2c\20void\20\28*\29\28void*\29>::reset\5babi:v160004\5d\28unsigned\20char*\29
+557:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator++\5babi:v160004\5d\28\29
+558:sktext::gpu::BagOfBytes::needMoreBytes\28int\2c\20int\29
+559:skcms_Transform
+560:png_icc_profile_error
+561:emscripten::smart_ptr_trait<sk_sp<GrDirectContext>>::get\28sk_sp<GrDirectContext>\20const&\29
+562:SkString::equals\28SkString\20const&\29\20const
+563:SkSL::evaluate_pairwise_intrinsic\28SkSL::Context\20const&\2c\20std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\29
+564:SkSL::Type::MakeAliasType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Type\20const&\29
+565:SkRasterClip::~SkRasterClip\28\29
+566:SkPixmap::reset\28SkImageInfo\20const&\2c\20void\20const*\2c\20unsigned\20long\29
+567:SkPath::countPoints\28\29\20const
+568:SkPaint::computeFastBounds\28SkRect\20const&\2c\20SkRect*\29\20const
+569:SkPaint::canComputeFastBounds\28\29\20const
+570:SkOpPtT::contains\28SkOpPtT\20const*\29\20const
+571:SkOpAngle::segment\28\29\20const
+572:SkMatrix::preConcat\28SkMatrix\20const&\29
+573:SkMasks::getRed\28unsigned\20int\29\20const
+574:SkMasks::getGreen\28unsigned\20int\29\20const
+575:SkMasks::getBlue\28unsigned\20int\29\20const
+576:SkColorInfo::shiftPerPixel\28\29\20const
+577:GrProcessorSet::~GrProcessorSet\28\29
+578:GrMeshDrawOp::createProgramInfo\28GrMeshDrawTarget*\29
+579:FT_Stream_ReadFields
+580:void\20emscripten::internal::raw_destructor<GrDirectContext>\28GrDirectContext*\29
+581:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator++\5babi:v160004\5d\28\29
+582:saveSetjmp
+583:operator==\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+584:hb_face_t::load_num_glyphs\28\29\20const
+585:fmodf
+586:emscripten::internal::MethodInvoker<int\20\28SkAnimatedImage::*\29\28\29\2c\20int\2c\20SkAnimatedImage*>::invoke\28int\20\28SkAnimatedImage::*\20const&\29\28\29\2c\20SkAnimatedImage*\29
+587:VP8GetSignedValue
+588:SkSafeMath::Mul\28unsigned\20long\2c\20unsigned\20long\29
+589:SkSL::Type::MakeVectorType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20SkSL::Type\20const&\2c\20int\29
+590:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitExpression\28SkSL::Expression\20const&\29
+591:SkPoint::setLength\28float\29
+592:SkBitmap::tryAllocPixels\28SkImageInfo\20const&\2c\20unsigned\20long\29
+593:OT::GDEF::accelerator_t::mark_set_covers\28unsigned\20int\2c\20unsigned\20int\29\20const
+594:GrTextureProxy::mipmapped\28\29\20const
+595:GrGpuResource::~GrGpuResource\28\29
+596:FT_Stream_GetULong
+597:FT_Get_Char_Index
+598:Cr_z__tr_flush_bits
+599:AutoLayerForImageFilter::~AutoLayerForImageFilter\28\29
+600:AutoLayerForImageFilter::AutoLayerForImageFilter\28SkCanvas*\2c\20SkPaint\20const&\2c\20SkRect\20const*\29
+601:void\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20int>::setWire<RuntimeEffectUniform>\28int\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform&\2c\20int\29
+602:std::__2::ctype<char>::widen\5babi:v160004\5d\28char\29\20const
+603:std::__2::__throw_overflow_error\5babi:v160004\5d\28char\20const*\29
+604:std::__2::__throw_bad_optional_access\5babi:v160004\5d\28\29
+605:sktext::SkStrikePromise::SkStrikePromise\28sktext::SkStrikePromise&&\29
+606:skia_private::TArray<SkPaint\2c\20true>::push_back\28SkPaint\20const&\29
+607:skia_png_chunk_report
+608:skgpu::UniqueKey::operator=\28skgpu::UniqueKey\20const&\29
+609:sk_double_nearly_zero\28double\29
+610:int\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20int>::getWire<RuntimeEffectUniform>\28int\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform\20const&\29
+611:hb_font_get_glyph
+612:ft_mem_qalloc
+613:fit_linear\28skcms_Curve\20const*\2c\20int\2c\20float\2c\20float*\2c\20float*\2c\20float*\29
+614:emscripten::default_smart_ptr_trait<sk_sp<GrDirectContext>>::construct_null\28\29
+615:_output_with_dotted_circle\28hb_buffer_t*\29
+616:WebPSafeMalloc
+617:SkStream::readS32\28int*\29
+618:SkSL::GLSLCodeGenerator::getTypeName\28SkSL::Type\20const&\29
+619:SkRGBA4f<\28SkAlphaType\293>::FromColor\28unsigned\20int\29
+620:SkPath::Iter::Iter\28SkPath\20const&\2c\20bool\29
+621:SkMatrix::postConcat\28SkMatrix\20const&\29
+622:SkImageShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::$_3::operator\28\29\28\28anonymous\20namespace\29::MipLevelHelper\20const*\29\20const
+623:SkImageFilter::getInput\28int\29\20const
+624:SkGlyph::rowBytes\28\29\20const
+625:SkFont::setTypeface\28sk_sp<SkTypeface>\29
+626:SkDrawable::getBounds\28\29
+627:SkDCubic::ptAtT\28double\29\20const
+628:SkColorSpace::MakeSRGB\28\29
+629:SkColorInfo::SkColorInfo\28\29
+630:GrOpFlushState::drawMesh\28GrSimpleMesh\20const&\29
+631:GrImageInfo::GrImageInfo\28SkImageInfo\20const&\29
+632:DefaultGeoProc::Impl::~Impl\28\29
+633:void\20emscripten::internal::raw_destructor<sk_sp<GrDirectContext>>\28sk_sp<GrDirectContext>*\29
+634:skia_private::THashMap<char\20const*\2c\20unsigned\20int\2c\20SkGoodHash>::set\28char\20const*\2c\20unsigned\20int\29
+635:out
+636:jpeg_fill_bit_buffer
+637:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29
+638:SkString::data\28\29
+639:SkSL::Type::coerceExpression\28std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Context\20const&\29\20const
+640:SkSL::Type::MakeGenericType\28char\20const*\2c\20SkSpan<SkSL::Type\20const*\20const>\2c\20SkSL::Type\20const*\29
+641:SkSL::ConstantFolder::GetConstantValueForVariable\28SkSL::Expression\20const&\29
+642:SkRegion::setRect\28SkIRect\20const&\29
+643:SkRegion::SkRegion\28\29
+644:SkRecords::FillBounds::adjustForSaveLayerPaints\28SkRect*\2c\20int\29\20const
+645:SkPathStroker::lineTo\28SkPoint\20const&\2c\20SkPath::Iter\20const*\29
+646:SkPathRef::~SkPathRef\28\29
+647:SkPaint::setColor\28unsigned\20int\29
+648:SkOpContourBuilder::flush\28\29
+649:SkMatrix::setRectToRect\28SkRect\20const&\2c\20SkRect\20const&\2c\20SkMatrix::ScaleToFit\29
+650:SkDrawable::getFlattenableType\28\29\20const
+651:SkCanvas::internalQuickReject\28SkRect\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const*\29
+652:GrMatrixEffect::Make\28SkMatrix\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+653:std::__2::char_traits<char>::assign\28char&\2c\20char\20const&\29
+654:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::operator=\5babi:v160004\5d\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&&\29
+655:std::__2::__check_grouping\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20unsigned\20int&\29
+656:skia_png_malloc
+657:skgpu::ganesh::SurfaceDrawContext::drawFilledQuad\28GrClip\20const*\2c\20GrPaint&&\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\29
+658:png_write_complete_chunk
+659:pad
+660:hb_lockable_set_t<hb_user_data_array_t::hb_user_data_item_t\2c\20hb_mutex_t>::fini\28hb_mutex_t&\29
+661:ft_mem_alloc
+662:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20SkBlendMode\29
+663:byn$mgfn-shared$std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+664:byn$mgfn-shared$std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::__clone\28\29\20const
+665:__ashlti3
+666:SkWBuffer::writeNoSizeCheck\28void\20const*\2c\20unsigned\20long\29
+667:SkTCoincident::setPerp\28SkTCurve\20const&\2c\20double\2c\20SkDPoint\20const&\2c\20SkTCurve\20const&\29
+668:SkStrokeRec::SkStrokeRec\28SkStrokeRec::InitStyle\29
+669:SkString::printf\28char\20const*\2c\20...\29
+670:SkSL::Type::MakeMatrixType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20SkSL::Type\20const&\2c\20int\2c\20signed\20char\29
+671:SkSL::Operator::tightOperatorName\28\29\20const
+672:SkSL::Analysis::HasSideEffects\28SkSL::Expression\20const&\29
+673:SkReadBuffer::readColor4f\28SkRGBA4f<\28SkAlphaType\293>*\29
+674:SkPixmap::reset\28\29
+675:SkPath::cubicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+676:SkPath::close\28\29
+677:SkPaintToGrPaint\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+678:SkPaint::setMaskFilter\28sk_sp<SkMaskFilter>\29
+679:SkPaint::setColor\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkColorSpace*\29
+680:SkPaint::setBlendMode\28SkBlendMode\29
+681:SkMatrix::mapXY\28float\2c\20float\2c\20SkPoint*\29\20const
+682:SkFindUnitQuadRoots\28float\2c\20float\2c\20float\2c\20float*\29
+683:SkDeque::push_back\28\29
+684:SkData::MakeWithCopy\28void\20const*\2c\20unsigned\20long\29
+685:SkCanvas::concat\28SkMatrix\20const&\29
+686:SkBinaryWriteBuffer::writeBool\28bool\29
+687:OT::hb_paint_context_t::return_t\20OT::Paint::dispatch<OT::hb_paint_context_t>\28OT::hb_paint_context_t*\29\20const
+688:GrProgramInfo::GrProgramInfo\28GrCaps\20const&\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrPipeline\20const*\2c\20GrUserStencilSettings\20const*\2c\20GrGeometryProcessor\20const*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+689:GrPixmapBase<void\2c\20GrPixmap>::GrPixmapBase\28GrImageInfo\2c\20void*\2c\20unsigned\20long\29
+690:GrColorInfo::GrColorInfo\28GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+691:FT_Outline_Translate
+692:FT_Load_Glyph
+693:FT_GlyphLoader_CheckPoints
+694:DefaultGeoProc::~DefaultGeoProc\28\29
+695:std::__2::ctype<char>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::ctype<char>>\28std::__2::locale\20const&\29
+696:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_short_size\5babi:v160004\5d\28unsigned\20long\29
+697:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_long_size\5babi:v160004\5d\28unsigned\20long\29
+698:skcms_TransferFunction_eval
+699:sinf
+700:emscripten::internal::FunctionInvoker<void\20\28*\29\28GrDirectContext&\2c\20unsigned\20long\29\2c\20void\2c\20GrDirectContext&\2c\20unsigned\20long>::invoke\28void\20\28**\29\28GrDirectContext&\2c\20unsigned\20long\29\2c\20GrDirectContext*\2c\20unsigned\20long\29
+701:cbrtf
+702:SkUTF::NextUTF8\28char\20const**\2c\20char\20const*\29
+703:SkTextBlob::~SkTextBlob\28\29
+704:SkSL::TProgramVisitor<SkSL::ProgramVisitorTypes>::visitProgramElement\28SkSL::ProgramElement\20const&\29
+705:SkRasterPipeline::extend\28SkRasterPipeline\20const&\29
+706:SkMatrix::mapRadius\28float\29\20const
+707:SkJSONWriter::appendf\28char\20const*\2c\20...\29
+708:SkImageGenerator::onIsValid\28GrRecordingContext*\29\20const
+709:SkData::MakeUninitialized\28unsigned\20long\29
+710:SkDQuad::RootsValidT\28double\2c\20double\2c\20double\2c\20double*\29
+711:SkDLine::nearPoint\28SkDPoint\20const&\2c\20bool*\29\20const
+712:SkConic::chopIntoQuadsPOW2\28SkPoint*\2c\20int\29\20const
+713:SkColorSpaceXformSteps::apply\28float*\29\20const
+714:SkCodec::applyColorXform\28void*\2c\20void\20const*\2c\20int\29\20const
+715:SkCachedData::internalRef\28bool\29\20const
+716:SkBitmap::installPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20void\20\28*\29\28void*\2c\20void*\29\2c\20void*\29
+717:GrSurface::RefCntedReleaseProc::~RefCntedReleaseProc\28\29
+718:GrStyle::initPathEffect\28sk_sp<SkPathEffect>\29
+719:GrShape::bounds\28\29\20const
+720:GrProcessor::operator\20delete\28void*\29
+721:GrColorSpaceXformEffect::onMakeProgramImpl\28\29\20const::Impl::~Impl\28\29
+722:GrBufferAllocPool::~GrBufferAllocPool\28\29.1
+723:uprv_malloc_skia
+724:std::__2::numpunct<char>::thousands_sep\5babi:v160004\5d\28\29\20const
+725:std::__2::numpunct<char>::grouping\5babi:v160004\5d\28\29\20const
+726:std::__2::ctype<wchar_t>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::ctype<wchar_t>>\28std::__2::locale\20const&\29
+727:skia_png_malloc_warn
+728:skia::textlayout::Cluster::run\28\29\20const
+729:rewind\28GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29
+730:cf2_stack_popInt
+731:SkSL::Analysis::IsCompileTimeConstant\28SkSL::Expression\20const&\29
+732:SkRGBA4f<\28SkAlphaType\293>::toSkColor\28\29\20const
+733:SkPictureData::requiredPaint\28SkReadBuffer*\29\20const
+734:SkPaint::setColorFilter\28sk_sp<SkColorFilter>\29
+735:SkMatrixPriv::MapRect\28SkM44\20const&\2c\20SkRect\20const&\29
+736:SkMatrix::preTranslate\28float\2c\20float\29
+737:SkImageGenerator::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkImageGenerator::Options\20const&\29
+738:SkDevice::createDevice\28SkDevice::CreateInfo\20const&\2c\20SkPaint\20const*\29
+739:SkData::MakeEmpty\28\29
+740:SkConic::computeQuadPOW2\28float\29\20const
+741:SkColorInfo::makeColorType\28SkColorType\29\20const
+742:SkCodec::~SkCodec\28\29
+743:SkCanvas::~SkCanvas\28\29.1
+744:SkAutoPixmapStorage::~SkAutoPixmapStorage\28\29
+745:SkAAClip::quickContains\28int\2c\20int\2c\20int\2c\20int\29\20const
+746:SkAAClip::isRect\28\29\20const
+747:GrSurface::ComputeSize\28GrBackendFormat\20const&\2c\20SkISize\2c\20int\2c\20skgpu::Mipmapped\2c\20bool\29
+748:GrSimpleMeshDrawOpHelper::GrSimpleMeshDrawOpHelper\28GrProcessorSet*\2c\20GrAAType\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+749:GrGeometryProcessor::ProgramImpl::SetTransform\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix*\29
+750:GrDrawingManager::flushIfNecessary\28\29
+751:GrBlendFragmentProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkBlendMode\2c\20bool\29
+752:FT_Stream_ExtractFrame
+753:AAT::Lookup<OT::IntType<unsigned\20short\2c\202u>>::get_value\28unsigned\20int\2c\20unsigned\20int\29\20const
+754:std::__2::ctype<wchar_t>::widen\5babi:v160004\5d\28char\29\20const
+755:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__is_long\5babi:v160004\5d\28\29\20const
+756:skia_png_malloc_base
+757:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\28\29
+758:skgpu::ganesh::AsView\28GrRecordingContext*\2c\20SkImage\20const*\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\29
+759:sk_sp<SkData>::~sk_sp\28\29
+760:hb_ot_face_t::init0\28hb_face_t*\29
+761:hb_lazy_loader_t<OT::GSUB_accelerator_t\2c\20hb_face_lazy_loader_t<OT::GSUB_accelerator_t\2c\2025u>\2c\20hb_face_t\2c\2025u\2c\20OT::GSUB_accelerator_t>::get\28\29\20const
+762:__addtf3
+763:SkTDStorage::reset\28\29
+764:SkScan::AntiHairLineRgn\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+765:SkSL::RP::Builder::label\28int\29
+766:SkSL::BinaryExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Operator\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+767:SkReadBuffer::skip\28unsigned\20long\2c\20unsigned\20long\29
+768:SkPath::countVerbs\28\29\20const
+769:SkMatrix::set9\28float\20const*\29
+770:SkMatrix::getMaxScale\28\29\20const
+771:SkImageInfo::computeByteSize\28unsigned\20long\29\20const
+772:SkImageInfo::Make\28int\2c\20int\2c\20SkColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+773:SkImageInfo::MakeA8\28int\2c\20int\29
+774:SkDrawBase::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const*\2c\20bool\2c\20bool\2c\20SkBlitter*\29\20const
+775:SkData::MakeWithProc\28void\20const*\2c\20unsigned\20long\2c\20void\20\28*\29\28void\20const*\2c\20void*\29\2c\20void*\29
+776:SkColorTypeIsAlwaysOpaque\28SkColorType\29
+777:SkBlockAllocator::SkBlockAllocator\28SkBlockAllocator::GrowthPolicy\2c\20unsigned\20long\2c\20unsigned\20long\29
+778:SkBlender::Mode\28SkBlendMode\29
+779:ReadHuffmanCode
+780:GrSurfaceProxy::~GrSurfaceProxy\28\29
+781:GrRenderTask::makeClosed\28GrRecordingContext*\29
+782:GrGpuBuffer::unmap\28\29
+783:GrContext_Base::options\28\29\20const
+784:GrCaps::getReadSwizzle\28GrBackendFormat\20const&\2c\20GrColorType\29\20const
+785:GrBufferAllocPool::reset\28\29
+786:FT_Stream_ReadByte
+787:void\20std::__2::vector<std::__2::pair<unsigned\20int\2c\20sk_sp<SkData>>\2c\20std::__2::allocator<std::__2::pair<unsigned\20int\2c\20sk_sp<SkData>>>>::__emplace_back_slow_path<unsigned\20int\20const&\2c\20sk_sp<SkData>>\28unsigned\20int\20const&\2c\20sk_sp<SkData>&&\29
+788:std::__2::char_traits<wchar_t>::assign\28wchar_t&\2c\20wchar_t\20const&\29
+789:std::__2::char_traits<char>::copy\28char*\2c\20char\20const*\2c\20unsigned\20long\29
+790:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::begin\5babi:v160004\5d\28\29
+791:std::__2::__next_prime\28unsigned\20long\29
+792:std::__2::__libcpp_snprintf_l\28char*\2c\20unsigned\20long\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+793:snprintf
+794:skif::LayerSpace<SkMatrix>::mapRect\28skif::LayerSpace<SkIRect>\20const&\29\20const
+795:is_equal\28std::type_info\20const*\2c\20std::type_info\20const*\2c\20bool\29
+796:hb_buffer_t::sync\28\29
+797:__floatsitf
+798:WebPSafeCalloc
+799:StreamRemainingLengthIsBelow\28SkStream*\2c\20unsigned\20long\29
+800:SkSL::VariableReference::VariableReference\28SkSL::Position\2c\20SkSL::Variable\20const*\2c\20SkSL::VariableRefKind\29
+801:SkSL::RP::Builder::swizzle\28int\2c\20SkSpan<signed\20char\20const>\29
+802:SkSL::Parser::expression\28\29
+803:SkPath::isConvex\28\29\20const
+804:SkPaint::asBlendMode\28\29\20const
+805:SkImageFilter_Base::getFlattenableType\28\29\20const
+806:SkImageFilter_Base::SkImageFilter_Base\28sk_sp<SkImageFilter>\20const*\2c\20int\2c\20std::__2::optional<bool>\29
+807:SkIRect::join\28SkIRect\20const&\29
+808:SkIDChangeListener::List::~List\28\29
+809:SkFontMgr::countFamilies\28\29\20const
+810:SkDQuad::ptAtT\28double\29\20const
+811:SkDLine::exactPoint\28SkDPoint\20const&\29\20const
+812:SkDConic::ptAtT\28double\29\20const
+813:SkColorInfo::makeAlphaType\28SkAlphaType\29\20const
+814:SkCanvas::save\28\29
+815:SkCanvas::drawImage\28SkImage\20const*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+816:SkBitmap::setInfo\28SkImageInfo\20const&\2c\20unsigned\20long\29
+817:SkAAClip::Builder::addRun\28int\2c\20int\2c\20unsigned\20int\2c\20int\29
+818:GrSkSLFP::addChild\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20bool\29
+819:GrGpuResource::hasRef\28\29\20const
+820:GrGLSLShaderBuilder::appendTextureLookup\28SkString*\2c\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\2c\20char\20const*\29\20const
+821:GrFragmentProcessor::cloneAndRegisterAllChildProcessors\28GrFragmentProcessor\20const&\29
+822:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::~SwizzleFragmentProcessor\28\29
+823:GrDrawOpAtlas::~GrDrawOpAtlas\28\29
+824:GrBackendFormat::GrBackendFormat\28GrBackendFormat\20const&\29
+825:AutoFTAccess::AutoFTAccess\28SkTypeface_FreeType\20const*\29
+826:AlmostPequalUlps\28float\2c\20float\29
+827:strchr
+828:std::__2::ctype<char>::is\5babi:v160004\5d\28unsigned\20long\2c\20char\29\20const
+829:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d<std::nullptr_t>\28char\20const*\29
+830:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_long_cap\5babi:v160004\5d\28unsigned\20long\29
+831:skia_private::TArray<unsigned\20char\2c\20true>::operator=\28skia_private::TArray<unsigned\20char\2c\20true>&&\29
+832:skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>\20const&\29
+833:skia_png_reset_crc
+834:memchr
+835:hb_buffer_t::sync_so_far\28\29
+836:hb_buffer_t::move_to\28unsigned\20int\29
+837:VP8ExitCritical
+838:SkTDStorage::resize\28int\29
+839:SkSwizzler::swizzle\28void*\2c\20unsigned\20char\20const*\29
+840:SkStream::readPackedUInt\28unsigned\20long*\29
+841:SkSize\20skif::Mapping::map<SkSize>\28SkSize\20const&\2c\20SkMatrix\20const&\29
+842:SkSL::Type::coercionCost\28SkSL::Type\20const&\29\20const
+843:SkSL::Type::clone\28SkSL::SymbolTable*\29\20const
+844:SkSL::RP::Generator::writeStatement\28SkSL::Statement\20const&\29
+845:SkSL::Parser::operatorRight\28SkSL::Parser::AutoDepth&\2c\20SkSL::OperatorKind\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20\28SkSL::Parser::*\29\28\29\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>&\29
+846:SkRuntimeEffect::MakeForColorFilter\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+847:SkResourceCache::Key::init\28void*\2c\20unsigned\20long\20long\2c\20unsigned\20long\29
+848:SkReadBuffer::skip\28unsigned\20long\29
+849:SkReadBuffer::readFlattenable\28SkFlattenable::Type\29
+850:SkRBuffer::read\28void*\2c\20unsigned\20long\29
+851:SkIDChangeListener::List::List\28\29
+852:SkGlyph::path\28\29\20const
+853:GrStyledShape::GrStyledShape\28GrStyledShape\20const&\29
+854:GrRenderTargetProxy::arenas\28\29
+855:GrOpFlushState::caps\28\29\20const
+856:GrGpuResource::hasNoCommandBufferUsages\28\29\20const
+857:GrGeometryProcessor::ProgramImpl::WriteLocalCoord\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\2c\20GrShaderVar\2c\20SkMatrix\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+858:GrGLTextureParameters::SamplerOverriddenState::SamplerOverriddenState\28\29
+859:GrGLGpu::deleteFramebuffer\28unsigned\20int\29
+860:GrFragmentProcessors::Make\28SkShader\20const*\2c\20GrFPArgs\20const&\2c\20SkShaders::MatrixRec\20const&\29
+861:FT_Stream_ReadULong
+862:FT_Get_Module
+863:Cr_z__tr_flush_block
+864:AlmostBequalUlps\28float\2c\20float\29
+865:uprv_realloc_skia
+866:std::__2::numpunct<char>::truename\5babi:v160004\5d\28\29\20const
+867:std::__2::moneypunct<char\2c\20false>::do_grouping\28\29\20const
+868:std::__2::locale::use_facet\28std::__2::locale::id&\29\20const
+869:std::__2::ctype<wchar_t>::is\5babi:v160004\5d\28unsigned\20long\2c\20wchar_t\29\20const
+870:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::empty\5babi:v160004\5d\28\29\20const
+871:skia_private::THashTable<SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Entry*\2c\20unsigned\20long\20long\2c\20SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Traits>::removeSlot\28int\29
+872:skia_png_save_int_32
+873:skia_png_safecat
+874:skia_png_gamma_significant
+875:skgpu::ganesh::SurfaceContext::readPixels\28GrDirectContext*\2c\20GrPixmap\2c\20SkIPoint\29
+876:hb_lazy_loader_t<OT::GPOS_accelerator_t\2c\20hb_face_lazy_loader_t<OT::GPOS_accelerator_t\2c\2026u>\2c\20hb_face_t\2c\2026u\2c\20OT::GPOS_accelerator_t>::get\28\29\20const
+877:hb_font_get_nominal_glyph
+878:hb_buffer_t::clear_output\28\29
+879:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28SkPaint\20const&\29\2c\20SkCanvas*\2c\20SkPaint*\29
+880:cff_parse_num
+881:SkTSect::SkTSect\28SkTCurve\20const&\29
+882:SkStrokeRec::SkStrokeRec\28SkPaint\20const&\2c\20float\29
+883:SkString::set\28char\20const*\2c\20unsigned\20long\29
+884:SkSL::Swizzle::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20skia_private::STArray<4\2c\20signed\20char\2c\20true>\29
+885:SkSL::String::appendf\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20char\20const*\2c\20...\29
+886:SkSL::Parser::layoutInt\28\29
+887:SkSL::Parser::expectIdentifier\28SkSL::Token*\29
+888:SkRegion::Cliperator::next\28\29
+889:SkRegion::Cliperator::Cliperator\28SkRegion\20const&\2c\20SkIRect\20const&\29
+890:SkRRect::initializeRect\28SkRect\20const&\29
+891:SkPictureRecorder::~SkPictureRecorder\28\29
+892:SkPathRef::CreateEmpty\28\29
+893:SkPath::addRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+894:SkMasks::getAlpha\28unsigned\20int\29\20const
+895:SkM44::setConcat\28SkM44\20const&\2c\20SkM44\20const&\29
+896:SkImageFilter_Base::getChildOutputLayerBounds\28int\2c\20skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+897:SkImageFilter_Base::getChildInputLayerBounds\28int\2c\20skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+898:SkData::MakeFromMalloc\28void\20const*\2c\20unsigned\20long\29
+899:SkDRect::setBounds\28SkTCurve\20const&\29
+900:SkColorFilter::isAlphaUnchanged\28\29\20const
+901:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\29
+902:SkCanvas::translate\28float\2c\20float\29
+903:SkBitmapCache::Rec::getKey\28\29\20const
+904:SkBitmap::asImage\28\29\20const
+905:PS_Conv_ToFixed
+906:OT::hb_ot_apply_context_t::hb_ot_apply_context_t\28unsigned\20int\2c\20hb_font_t*\2c\20hb_buffer_t*\2c\20hb_blob_t*\29
+907:GrTriangulator::Line::intersect\28GrTriangulator::Line\20const&\2c\20SkPoint*\29\20const
+908:GrSimpleMeshDrawOpHelper::isCompatible\28GrSimpleMeshDrawOpHelper\20const&\2c\20GrCaps\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20bool\29\20const
+909:GrQuad::MakeFromSkQuad\28SkPoint\20const*\2c\20SkMatrix\20const&\29
+910:GrOpsRenderPass::bindBuffers\28sk_sp<GrBuffer\20const>\2c\20sk_sp<GrBuffer\20const>\2c\20sk_sp<GrBuffer\20const>\2c\20GrPrimitiveRestart\29
+911:GrImageInfo::GrImageInfo\28GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20SkISize\20const&\29
+912:GrColorInfo::GrColorInfo\28SkColorInfo\20const&\29
+913:AlmostDequalUlps\28double\2c\20double\29
+914:tt_face_get_name
+915:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::size\5babi:v160004\5d\28\29\20const
+916:std::__2::to_string\28long\20long\29
+917:std::__2::__libcpp_locale_guard::~__libcpp_locale_guard\5babi:v160004\5d\28\29
+918:std::__2::__libcpp_locale_guard::__libcpp_locale_guard\5babi:v160004\5d\28__locale_struct*&\29
+919:sktext::gpu::GlyphVector::~GlyphVector\28\29
+920:sktext::gpu::GlyphVector::glyphs\28\29\20const
+921:skia_png_benign_error
+922:skia_png_app_error
+923:skgpu::ganesh::SurfaceFillContext::getOpsTask\28\29
+924:isdigit
+925:hb_sanitize_context_t::return_t\20OT::Paint::dispatch<hb_sanitize_context_t>\28hb_sanitize_context_t*\29\20const
+926:hb_ot_layout_lookup_would_substitute
+927:hb_buffer_t::unsafe_to_break\28unsigned\20int\2c\20unsigned\20int\29
+928:ft_module_get_service
+929:expf
+930:emscripten::internal::FunctionInvoker<unsigned\20long\20\28*\29\28GrDirectContext&\29\2c\20unsigned\20long\2c\20GrDirectContext&>::invoke\28unsigned\20long\20\28**\29\28GrDirectContext&\29\2c\20GrDirectContext*\29
+931:cf2_hintmap_map
+932:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>*\29\20const
+933:byn$mgfn-shared$std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28\29\20const
+934:blit_trapezoid_row\28AdditiveBlitter*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char*\2c\20bool\2c\20bool\2c\20bool\29
+935:__sindf
+936:__shlim
+937:__cosdf
+938:SkSurface::getCanvas\28\29
+939:SkSL::cast_expression\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+940:SkSL::Variable::initialValue\28\29\20const
+941:SkSL::SymbolTable::addArrayDimension\28SkSL::Type\20const*\2c\20int\29
+942:SkSL::StringStream::str\28\29\20const
+943:SkSL::RP::Program::appendCopy\28skia_private::TArray<SkSL::RP::Program::Stage\2c\20true>*\2c\20SkArenaAlloc*\2c\20std::byte*\2c\20SkSL::RP::ProgramOp\2c\20unsigned\20int\2c\20int\2c\20unsigned\20int\2c\20int\2c\20int\29\20const
+944:SkSL::RP::Generator::makeLValue\28SkSL::Expression\20const&\2c\20bool\29
+945:SkSL::RP::DynamicIndexLValue::dynamicSlotRange\28\29
+946:SkSL::GLSLCodeGenerator::writeStatement\28SkSL::Statement\20const&\29
+947:SkSL::Expression::description\28\29\20const
+948:SkSL::Analysis::UpdateVariableRefKind\28SkSL::Expression*\2c\20SkSL::VariableRefKind\2c\20SkSL::ErrorReporter*\29
+949:SkRegion::setEmpty\28\29
+950:SkRasterPipeline::append_load_dst\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+951:SkRRect::setRectRadii\28SkRect\20const&\2c\20SkPoint\20const*\29
+952:SkRRect::setOval\28SkRect\20const&\29
+953:SkPointPriv::DistanceToLineSegmentBetweenSqd\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\29
+954:SkPath::arcTo\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\29
+955:SkPath::addPath\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPath::AddPathMode\29
+956:SkPaint::setImageFilter\28sk_sp<SkImageFilter>\29
+957:SkPaint::operator=\28SkPaint&&\29
+958:SkOpSpanBase::contains\28SkOpSegment\20const*\29\20const
+959:SkMipmap::ComputeLevelCount\28int\2c\20int\29
+960:SkMatrix::mapHomogeneousPoints\28SkPoint3*\2c\20SkPoint\20const*\2c\20int\29\20const
+961:SkImageFilters::Crop\28SkRect\20const&\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\29
+962:SkImageFilter_Base::getChildOutput\28int\2c\20skif::Context\20const&\29\20const
+963:SkIDChangeListener::List::changed\28\29
+964:SkDevice::makeSpecial\28SkBitmap\20const&\29
+965:SkCanvas::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\29
+966:SkAAClipBlitterWrapper::init\28SkRasterClip\20const&\2c\20SkBlitter*\29
+967:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\28\29
+968:RunBasedAdditiveBlitter::flush\28\29
+969:GrSurface::onRelease\28\29
+970:GrStyledShape::unstyledKeySize\28\29\20const
+971:GrShape::convex\28bool\29\20const
+972:GrRecordingContext::threadSafeCache\28\29
+973:GrProxyProvider::caps\28\29\20const
+974:GrOp::GrOp\28unsigned\20int\29
+975:GrMakeUncachedBitmapProxyView\28GrRecordingContext*\2c\20SkBitmap\20const&\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\29
+976:GrGLSLShaderBuilder::getMangledFunctionName\28char\20const*\29
+977:GrGLGpu::bindBuffer\28GrGpuBufferType\2c\20GrBuffer\20const*\29
+978:GrGLAttribArrayState::set\28GrGLGpu*\2c\20int\2c\20GrBuffer\20const*\2c\20GrVertexAttribType\2c\20SkSLType\2c\20int\2c\20unsigned\20long\2c\20int\29
+979:GrAAConvexTessellator::Ring::computeNormals\28GrAAConvexTessellator\20const&\29
+980:GrAAConvexTessellator::Ring::computeBisectors\28GrAAConvexTessellator\20const&\29
+981:FT_Activate_Size
+982:Cr_z_adler32
+983:vsnprintf
+984:void\20extend_pts<\28SkPaint::Cap\292>\28SkPath::Verb\2c\20SkPath::Verb\2c\20SkPoint*\2c\20int\29
+985:void\20extend_pts<\28SkPaint::Cap\291>\28SkPath::Verb\2c\20SkPath::Verb\2c\20SkPoint*\2c\20int\29
+986:top12
+987:toSkImageInfo\28SimpleImageInfo\20const&\29
+988:std::__2::pair<std::__2::__unwrap_ref_decay<char\20const*>::type\2c\20std::__2::__unwrap_ref_decay<char*>::type>\20std::__2::make_pair\5babi:v160004\5d<char\20const*\2c\20char*>\28char\20const*&&\2c\20char*&&\29
+989:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::operator=\5babi:v160004\5d\28std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&&\29
+990:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20std::__2::operator+<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\28char\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+991:std::__2::__tree<std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>\2c\20std::__2::__map_value_compare<unsigned\20long\2c\20std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>\2c\20std::__2::less<unsigned\20long>\2c\20true>\2c\20std::__2::allocator<std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>>>::destroy\28std::__2::__tree_node<std::__2::__value_type<unsigned\20long\2c\20skia::textlayout::StyleMetrics>\2c\20void*>*\29
+992:std::__2::__num_put_base::__identify_padding\28char*\2c\20char*\2c\20std::__2::ios_base\20const&\29
+993:std::__2::__num_get_base::__get_base\28std::__2::ios_base&\29
+994:std::__2::__libcpp_asprintf_l\28char**\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+995:skia_private::THashMap<SkSL::Variable\20const*\2c\20SkSL::ProgramUsage::VariableCounts\2c\20SkGoodHash>::operator\5b\5d\28SkSL::Variable\20const*\20const&\29
+996:skia_png_zstream_error
+997:skia::textlayout::TextLine::iterateThroughVisualRuns\28bool\2c\20std::__2::function<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>\20const&\29\20const
+998:skia::textlayout::ParagraphImpl::cluster\28unsigned\20long\29
+999:skia::textlayout::Cluster::runOrNull\28\29\20const
+1000:skgpu::ganesh::SurfaceFillContext::replaceOpsTask\28\29
+1001:skcms_TransferFunction_getType
+1002:skcms_GetTagBySignature
+1003:read_curve\28unsigned\20char\20const*\2c\20unsigned\20int\2c\20skcms_Curve*\2c\20unsigned\20int*\29
+1004:pow
+1005:int\20std::__2::__get_up_to_n_digits\5babi:v160004\5d<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\2c\20int\29
+1006:int\20std::__2::__get_up_to_n_digits\5babi:v160004\5d<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\2c\20int\29
+1007:hb_serialize_context_t::pop_pack\28bool\29
+1008:hb_lazy_loader_t<OT::OS2\2c\20hb_table_lazy_loader_t<OT::OS2\2c\206u\2c\20true>\2c\20hb_face_t\2c\206u\2c\20hb_blob_t>::get\28\29\20const
+1009:hb_buffer_destroy
+1010:bool\20std::__2::operator!=\5babi:v160004\5d<char*>\28std::__2::__wrap_iter<char*>\20const&\2c\20std::__2::__wrap_iter<char*>\20const&\29
+1011:afm_parser_read_vals
+1012:__extenddftf2
+1013:\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29
+1014:\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29
+1015:\28anonymous\20namespace\29::colrv1_transform\28FT_FaceRec_*\2c\20FT_COLR_Paint_\20const&\2c\20SkCanvas*\2c\20SkMatrix*\29
+1016:WebPRescalerImport
+1017:SkTDStorage::removeShuffle\28int\29
+1018:SkString::SkString\28char\20const*\2c\20unsigned\20long\29
+1019:SkStrikeCache::GlobalStrikeCache\28\29
+1020:SkScan::HairLineRgn\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+1021:SkSL::InlineCandidateAnalyzer::visitExpression\28std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>*\29
+1022:SkSL::GLSLCodeGenerator::getTypePrecision\28SkSL::Type\20const&\29
+1023:SkRuntimeEffect::Uniform::sizeInBytes\28\29\20const
+1024:SkReadBuffer::readMatrix\28SkMatrix*\29
+1025:SkReadBuffer::readByteArray\28void*\2c\20unsigned\20long\29
+1026:SkReadBuffer::readBool\28\29
+1027:SkRasterPipeline::run\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\20const
+1028:SkPictureData::optionalPaint\28SkReadBuffer*\29\20const
+1029:SkPathWriter::isClosed\28\29\20const
+1030:SkPath::isRect\28SkRect*\2c\20bool*\2c\20SkPathDirection*\29\20const
+1031:SkPaint::setStrokeWidth\28float\29
+1032:SkOpSegment::nextChase\28SkOpSpanBase**\2c\20int*\2c\20SkOpSpan**\2c\20SkOpSpanBase**\29\20const
+1033:SkOpSegment::addCurveTo\28SkOpSpanBase\20const*\2c\20SkOpSpanBase\20const*\2c\20SkPathWriter*\29\20const
+1034:SkMatrix::preScale\28float\2c\20float\29
+1035:SkMatrix::postScale\28float\2c\20float\29
+1036:SkMatrix::isSimilarity\28float\29\20const
+1037:SkMask::computeImageSize\28\29\20const
+1038:SkIntersections::removeOne\28int\29
+1039:SkImageInfo::Make\28int\2c\20int\2c\20SkColorType\2c\20SkAlphaType\29
+1040:SkDynamicMemoryWStream::detachAsData\28\29
+1041:SkDLine::ptAtT\28double\29\20const
+1042:SkColorSpace::Equals\28SkColorSpace\20const*\2c\20SkColorSpace\20const*\29
+1043:SkColorFilter::makeComposed\28sk_sp<SkColorFilter>\29\20const
+1044:SkCanvas::drawImageRect\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+1045:SkBulkGlyphMetrics::~SkBulkGlyphMetrics\28\29
+1046:SkBitmap::peekPixels\28SkPixmap*\29\20const
+1047:SkAutoPixmapStorage::SkAutoPixmapStorage\28\29
+1048:SkAAClip::setEmpty\28\29
+1049:PS_Conv_Strtol
+1050:OT::Layout::GSUB_impl::SubstLookup*\20hb_serialize_context_t::push<OT::Layout::GSUB_impl::SubstLookup>\28\29
+1051:GrTriangulator::makeConnectingEdge\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeType\2c\20GrTriangulator::Comparator\20const&\2c\20int\29
+1052:GrTextureProxy::~GrTextureProxy\28\29
+1053:GrSimpleMeshDrawOpHelper::createProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrGeometryProcessor*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+1054:GrResourceAllocator::addInterval\28GrSurfaceProxy*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20GrResourceAllocator::ActualUse\2c\20GrResourceAllocator::AllowRecycling\29
+1055:GrRecordingContextPriv::makeSFCWithFallback\28GrImageInfo\2c\20SkBackingFit\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+1056:GrGpuBuffer::updateData\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+1057:GrGLTextureParameters::NonsamplerState::NonsamplerState\28\29
+1058:GrGLSLShaderBuilder::~GrGLSLShaderBuilder\28\29
+1059:GrGLSLProgramBuilder::nameVariable\28char\2c\20char\20const*\2c\20bool\29
+1060:GrGLGpu::prepareToDraw\28GrPrimitiveType\29
+1061:GrGLFormatFromGLEnum\28unsigned\20int\29
+1062:GrContextThreadSafeProxy::~GrContextThreadSafeProxy\28\29
+1063:GrBackendTexture::getBackendFormat\28\29\20const
+1064:GrBackendFormats::MakeGL\28unsigned\20int\2c\20unsigned\20int\29
+1065:GrBackendFormatToCompressionType\28GrBackendFormat\20const&\29
+1066:FilterLoop24_C
+1067:FT_Stream_Skip
+1068:CFF::CFFIndex<OT::IntType<unsigned\20short\2c\202u>>::operator\5b\5d\28unsigned\20int\29\20const
+1069:AAT::Lookup<OT::HBGlyphID16>::sanitize\28hb_sanitize_context_t*\29\20const
+1070:write_trc_tag\28skcms_Curve\20const&\29
+1071:uprv_free_skia
+1072:strcpy
+1073:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+1074:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\20const*\2c\20char\20const*\29\20const
+1075:std::__2::enable_if<true\2c\20void>::type\20skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\298>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2964>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2932>\2c\20skgpu::tess::AddTrianglesWhenChopping\2c\20skgpu::tess::DiscardFlatCurves>::writeTriangleStack<void>\28skgpu::tess::MiddleOutPolygonTriangulator::PoppedTriangleStack&&\29
+1076:std::__2::ctype<wchar_t>::widen\5babi:v160004\5d\28char\20const*\2c\20char\20const*\2c\20wchar_t*\29\20const
+1077:std::__2::char_traits<char>::eq_int_type\28int\2c\20int\29
+1078:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__get_long_cap\5babi:v160004\5d\28\29\20const
+1079:skif::RoundOut\28SkRect\29
+1080:skif::LayerSpace<SkSize>::ceil\28\29\20const
+1081:skia_private::TArray<float\2c\20true>::push_back\28float\20const&\29
+1082:skia_png_write_finish_row
+1083:skia::textlayout::ParagraphImpl::ensureUTF16Mapping\28\29
+1084:scalbn
+1085:hb_lazy_loader_t<OT::MVAR\2c\20hb_table_lazy_loader_t<OT::MVAR\2c\2022u\2c\20true>\2c\20hb_face_t\2c\2022u\2c\20hb_blob_t>::get\28\29\20const
+1086:hb_lazy_loader_t<OT::GDEF_accelerator_t\2c\20hb_face_lazy_loader_t<OT::GDEF_accelerator_t\2c\2024u>\2c\20hb_face_t\2c\2024u\2c\20OT::GDEF_accelerator_t>::get\28\29\20const
+1087:hb_buffer_get_glyph_infos
+1088:cff2_path_param_t::line_to\28CFF::point_t\20const&\29
+1089:cff1_path_param_t::line_to\28CFF::point_t\20const&\29
+1090:cf2_stack_getReal
+1091:byn$mgfn-shared$GrGLProgramDataManager::set1iv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20int\20const*\29\20const
+1092:antifilldot8\28int\2c\20int\2c\20int\2c\20int\2c\20SkBlitter*\2c\20bool\29
+1093:afm_stream_skip_spaces
+1094:WebPRescalerInit
+1095:WebPRescalerExportRow
+1096:SkTextBlobBuilder::allocInternal\28SkFont\20const&\2c\20SkTextBlob::GlyphPositioning\2c\20int\2c\20int\2c\20SkPoint\2c\20SkRect\20const*\29
+1097:SkTDStorage::append\28void\20const*\2c\20int\29
+1098:SkString::Rec::Make\28char\20const*\2c\20unsigned\20long\29::$_0::operator\28\29\28\29\20const
+1099:SkStrike::digestFor\28skglyph::ActionType\2c\20SkPackedGlyphID\29
+1100:SkShaders::Color\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20sk_sp<SkColorSpace>\29
+1101:SkSafeMath::Add\28unsigned\20long\2c\20unsigned\20long\29
+1102:SkSL::SymbolTable::lookup\28SkSL::SymbolTable::SymbolKey\20const&\29\20const
+1103:SkSL::ProgramUsage::get\28SkSL::Variable\20const&\29\20const
+1104:SkSL::Parser::assignmentExpression\28\29
+1105:SkSL::Operator::determineBinaryType\28SkSL::Context\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Type\20const**\2c\20SkSL::Type\20const**\2c\20SkSL::Type\20const**\29\20const
+1106:SkSL::Inliner::inlineStatement\28SkSL::Position\2c\20skia_private::THashMap<SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkGoodHash>*\2c\20SkSL::SymbolTable*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>*\2c\20SkSL::Analysis::ReturnComplexity\2c\20SkSL::Statement\20const&\2c\20SkSL::ProgramUsage\20const&\2c\20bool\29
+1107:SkSL::GLSLCodeGenerator::write\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1108:SkSL::FieldAccess::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20int\2c\20SkSL::FieldAccessOwnerKind\29
+1109:SkSL::ConstructorSplat::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1110:SkSL::ConstructorScalarCast::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1111:SkRuntimeEffectBuilder::writableUniformData\28\29
+1112:SkRuntimeEffect::findUniform\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+1113:SkResourceCache::Find\28SkResourceCache::Key\20const&\2c\20bool\20\28*\29\28SkResourceCache::Rec\20const&\2c\20void*\29\2c\20void*\29
+1114:SkRegion::SkRegion\28SkIRect\20const&\29
+1115:SkRect::toQuad\28SkPoint*\29\20const
+1116:SkRasterPipeline::append_transfer_function\28skcms_TransferFunction\20const&\29
+1117:SkRasterPipeline::append_store\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+1118:SkRasterPipeline::append_constant_color\28SkArenaAlloc*\2c\20float\20const*\29
+1119:SkRasterClip::SkRasterClip\28\29
+1120:SkRRect::checkCornerContainment\28float\2c\20float\29\20const
+1121:SkPictureData::getImage\28SkReadBuffer*\29\20const
+1122:SkPathMeasure::getLength\28\29
+1123:SkPathBuilder::~SkPathBuilder\28\29
+1124:SkPathBuilder::detach\28\29
+1125:SkPathBuilder::SkPathBuilder\28\29
+1126:SkPath::getGenerationID\28\29\20const
+1127:SkPath::addPoly\28SkPoint\20const*\2c\20int\2c\20bool\29
+1128:SkParse::FindScalars\28char\20const*\2c\20float*\2c\20int\29
+1129:SkPaint::refPathEffect\28\29\20const
+1130:SkPaint::operator=\28SkPaint\20const&\29
+1131:SkMipmap::getLevel\28int\2c\20SkMipmap::Level*\29\20const
+1132:SkMD5::bytesWritten\28\29\20const
+1133:SkJSONWriter::appendCString\28char\20const*\2c\20char\20const*\29
+1134:SkIntersections::setCoincident\28int\29
+1135:SkImage_Ganesh::SkImage_Ganesh\28sk_sp<GrImageContext>\2c\20unsigned\20int\2c\20GrSurfaceProxyView\2c\20SkColorInfo\29
+1136:SkImageInfo::computeOffset\28int\2c\20int\2c\20unsigned\20long\29\20const
+1137:SkImageFilter_Base::flatten\28SkWriteBuffer&\29\20const
+1138:SkDrawBase::SkDrawBase\28\29
+1139:SkDLine::NearPointV\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1140:SkDLine::NearPointH\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1141:SkDLine::ExactPointV\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1142:SkDLine::ExactPointH\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+1143:SkColorSpaceXformSteps::apply\28SkRasterPipeline*\29\20const
+1144:SkColorFilter::filterColor\28unsigned\20int\29\20const
+1145:SkCodec::SkCodec\28SkEncodedInfo&&\2c\20skcms_PixelFormat\2c\20std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkEncodedOrigin\29
+1146:SkCanvas::drawPicture\28SkPicture\20const*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\29
+1147:SkCanvas::drawColor\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+1148:SkBulkGlyphMetrics::SkBulkGlyphMetrics\28SkStrikeSpec\20const&\29
+1149:SkBlockMemoryStream::getLength\28\29\20const
+1150:SkBlockAllocator::releaseBlock\28SkBlockAllocator::Block*\29
+1151:SkAAClipBlitterWrapper::SkAAClipBlitterWrapper\28SkRasterClip\20const&\2c\20SkBlitter*\29
+1152:OT::MVAR::get_var\28unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\29\20const
+1153:GrXferProcessor::GrXferProcessor\28GrProcessor::ClassID\2c\20bool\2c\20GrProcessorAnalysisCoverage\29
+1154:GrTextureEffect::Make\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState\2c\20GrCaps\20const&\2c\20float\20const*\29
+1155:GrTextureEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20GrCaps\20const&\2c\20float\20const*\29
+1156:GrSimpleMeshDrawOpHelper::finalizeProcessors\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\2c\20GrProcessorAnalysisCoverage\2c\20SkRGBA4f<\28SkAlphaType\292>*\2c\20bool*\29
+1157:GrResourceProvider::findResourceByUniqueKey\28skgpu::UniqueKey\20const&\29
+1158:GrRecordingContext::OwnedArenas::get\28\29
+1159:GrProxyProvider::createProxy\28GrBackendFormat\20const&\2c\20SkISize\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\29
+1160:GrProxyProvider::assignUniqueKeyToProxy\28skgpu::UniqueKey\20const&\2c\20GrTextureProxy*\29
+1161:GrProcessorSet::finalize\28GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20GrAppliedClip\20const*\2c\20GrUserStencilSettings\20const*\2c\20GrCaps\20const&\2c\20GrClampType\2c\20SkRGBA4f<\28SkAlphaType\292>*\29
+1162:GrOpFlushState::allocator\28\29
+1163:GrOp::cutChain\28\29
+1164:GrMeshDrawTarget::makeVertexWriter\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+1165:GrGpuResource::GrGpuResource\28GrGpu*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1166:GrGeometryProcessor::TextureSampler::reset\28GrSamplerState\2c\20GrBackendFormat\20const&\2c\20skgpu::Swizzle\20const&\29
+1167:GrGeometryProcessor::AttributeSet::end\28\29\20const
+1168:GrGeometryProcessor::AttributeSet::Iter::operator++\28\29
+1169:GrGeometryProcessor::AttributeSet::Iter::operator*\28\29\20const
+1170:GrGLTextureParameters::set\28GrGLTextureParameters::SamplerOverriddenState\20const*\2c\20GrGLTextureParameters::NonsamplerState\20const&\2c\20unsigned\20long\20long\29
+1171:GrGLSLShaderBuilder::appendTextureLookup\28GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+1172:GrClip::GetPixelIBounds\28SkRect\20const&\2c\20GrAA\2c\20GrClip::BoundsType\29
+1173:GrBackendTexture::~GrBackendTexture\28\29
+1174:FT_Outline_Get_CBox
+1175:FT_Get_Sfnt_Table
+1176:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__destroy_vector::__destroy_vector\28std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>&\29
+1177:std::__2::moneypunct<char\2c\20true>::negative_sign\5babi:v160004\5d\28\29\20const
+1178:std::__2::moneypunct<char\2c\20true>::neg_format\5babi:v160004\5d\28\29\20const
+1179:std::__2::moneypunct<char\2c\20true>::frac_digits\5babi:v160004\5d\28\29\20const
+1180:std::__2::moneypunct<char\2c\20false>::do_pos_format\28\29\20const
+1181:std::__2::ctype<char>::widen\5babi:v160004\5d\28char\20const*\2c\20char\20const*\2c\20char*\29\20const
+1182:std::__2::char_traits<wchar_t>::copy\28wchar_t*\2c\20wchar_t\20const*\2c\20unsigned\20long\29
+1183:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::end\5babi:v160004\5d\28\29
+1184:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::end\5babi:v160004\5d\28\29
+1185:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__set_size\5babi:v160004\5d\28unsigned\20long\29
+1186:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__assign_external\28char\20const*\2c\20unsigned\20long\29
+1187:std::__2::__itoa::__append2\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+1188:skif::FilterResult::resolve\28skif::Context\20const&\2c\20skif::LayerSpace<SkIRect>\2c\20bool\29\20const
+1189:skia_png_read_finish_row
+1190:skia_png_handle_unknown
+1191:skia_png_gamma_correct
+1192:skia_png_colorspace_sync
+1193:skia_png_app_warning
+1194:skia::textlayout::TextStyle::operator=\28skia::textlayout::TextStyle\20const&\29
+1195:skia::textlayout::TextLine::offset\28\29\20const
+1196:skia::textlayout::Run::placeholderStyle\28\29\20const
+1197:skia::textlayout::Cluster::Cluster\28skia::textlayout::ParagraphImpl*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkSpan<char\20const>\2c\20float\2c\20float\29
+1198:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\28SkIRect\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1199:skgpu::ganesh::SurfaceDrawContext::Make\28GrRecordingContext*\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20SkBackingFit\2c\20SkISize\2c\20SkSurfaceProps\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+1200:skgpu::ganesh::SurfaceContext::PixelTransferResult::~PixelTransferResult\28\29
+1201:skgpu::ganesh::ClipStack::SaveRecord::state\28\29\20const
+1202:skgpu::SkSLToGLSL\28SkSL::Compiler*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20SkSL::ProgramKind\2c\20SkSL::ProgramSettings\20const&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20SkSL::Program::Interface*\2c\20skgpu::ShaderErrorHandler*\29
+1203:skcms_Matrix3x3_invert
+1204:sk_doubles_nearly_equal_ulps\28double\2c\20double\2c\20unsigned\20char\29
+1205:ps_parser_to_token
+1206:isspace
+1207:hb_face_t::load_upem\28\29\20const
+1208:hb_buffer_t::merge_out_clusters\28unsigned\20int\2c\20unsigned\20int\29
+1209:hb_buffer_t::enlarge\28unsigned\20int\29
+1210:hb_buffer_reverse
+1211:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&\29\2c\20void\2c\20SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&\29\2c\20SkCanvas*\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint*\29
+1212:cff_index_init
+1213:cf2_glyphpath_curveTo
+1214:atan2f
+1215:WebPCopyPlane
+1216:SkTypeface::getVariationDesignPosition\28SkFontArguments::VariationPosition::Coordinate*\2c\20int\29\20const
+1217:SkTMaskGamma_build_correcting_lut\28unsigned\20char*\2c\20unsigned\20int\2c\20float\2c\20SkColorSpaceLuminance\20const&\2c\20float\2c\20SkColorSpaceLuminance\20const&\2c\20float\29
+1218:SkSurface_Raster::type\28\29\20const
+1219:SkString::swap\28SkString&\29
+1220:SkString::reset\28\29
+1221:SkSampler::Fill\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::ZeroInitialized\29
+1222:SkSL::Type::MakeTextureType\28char\20const*\2c\20SpvDim_\2c\20bool\2c\20bool\2c\20bool\2c\20SkSL::Type::TextureAccess\29
+1223:SkSL::Type::MakeSpecialType\28char\20const*\2c\20char\20const*\2c\20SkSL::Type::TypeKind\29
+1224:SkSL::RP::Builder::push_slots_or_immutable\28SkSL::RP::SlotRange\2c\20SkSL::RP::BuilderOp\29
+1225:SkSL::RP::Builder::push_clone_from_stack\28SkSL::RP::SlotRange\2c\20int\2c\20int\29
+1226:SkSL::Program::~Program\28\29
+1227:SkSL::PipelineStage::PipelineStageCodeGenerator::writeStatement\28SkSL::Statement\20const&\29
+1228:SkSL::Operator::isAssignment\28\29\20const
+1229:SkSL::InlineCandidateAnalyzer::visitStatement\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>*\2c\20bool\29
+1230:SkSL::GLSLCodeGenerator::writeModifiers\28SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20bool\29
+1231:SkSL::ExpressionStatement::Make\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1232:SkSL::ConstructorCompound::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+1233:SkSL::Analysis::IsTrivialExpression\28SkSL::Expression\20const&\29
+1234:SkSL::Analysis::GetReturnComplexity\28SkSL::FunctionDefinition\20const&\29
+1235:SkSL::AliasType::resolve\28\29\20const
+1236:SkResourceCache::Add\28SkResourceCache::Rec*\2c\20void*\29
+1237:SkRegion::writeToMemory\28void*\29\20const
+1238:SkRasterClip::setRect\28SkIRect\20const&\29
+1239:SkRasterClip::SkRasterClip\28SkRasterClip\20const&\29
+1240:SkPathMeasure::~SkPathMeasure\28\29
+1241:SkPathMeasure::SkPathMeasure\28SkPath\20const&\2c\20bool\2c\20float\29
+1242:SkPath::swap\28SkPath&\29
+1243:SkPaint::setAlphaf\28float\29
+1244:SkOpSpan::computeWindSum\28\29
+1245:SkOpSegment::existing\28double\2c\20SkOpSegment\20const*\29\20const
+1246:SkOpPtT::find\28SkOpSegment\20const*\29\20const
+1247:SkOpCoincidence::addEndMovedSpans\28SkOpSpan\20const*\2c\20SkOpSpanBase\20const*\29
+1248:SkImageInfo::makeColorSpace\28sk_sp<SkColorSpace>\29\20const
+1249:SkImage::refColorSpace\28\29\20const
+1250:SkGlyph::imageSize\28\29\20const
+1251:SkFont::textToGlyphs\28void\20const*\2c\20unsigned\20long\2c\20SkTextEncoding\2c\20unsigned\20short*\2c\20int\29\20const
+1252:SkFont::setSubpixel\28bool\29
+1253:SkDraw::SkDraw\28\29
+1254:SkChopQuadAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\29
+1255:SkCanvas::topDevice\28\29\20const
+1256:SkBmpCodec::getDstRow\28int\2c\20int\29\20const
+1257:SkAutoDescriptor::SkAutoDescriptor\28\29
+1258:OT::DeltaSetIndexMap::sanitize\28hb_sanitize_context_t*\29\20const
+1259:OT::ClassDef::sanitize\28hb_sanitize_context_t*\29\20const
+1260:GrTriangulator::Comparator::sweep_lt\28SkPoint\20const&\2c\20SkPoint\20const&\29\20const
+1261:GrTextureProxy::textureType\28\29\20const
+1262:GrSurfaceProxy::createSurfaceImpl\28GrResourceProvider*\2c\20int\2c\20skgpu::Renderable\2c\20skgpu::Mipmapped\29\20const
+1263:GrStyledShape::writeUnstyledKey\28unsigned\20int*\29\20const
+1264:GrStyledShape::simplify\28\29
+1265:GrSkSLFP::setInput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1266:GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil\28GrProcessorSet*\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+1267:GrShape::operator=\28GrShape\20const&\29
+1268:GrResourceProvider::createPatternedIndexBuffer\28unsigned\20short\20const*\2c\20int\2c\20int\2c\20int\2c\20skgpu::UniqueKey\20const*\29
+1269:GrRenderTarget::~GrRenderTarget\28\29
+1270:GrRecordingContextPriv::makeSC\28GrSurfaceProxyView\2c\20GrColorInfo\20const&\29
+1271:GrOpFlushState::detachAppliedClip\28\29
+1272:GrMakeCachedBitmapProxyView\28GrRecordingContext*\2c\20SkBitmap\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skgpu::Mipmapped\29
+1273:GrGpuBuffer::map\28\29
+1274:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\28GrGLSLVertexBuilder*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\2c\20char\20const*\29
+1275:GrGLSLShaderBuilder::declAppend\28GrShaderVar\20const&\29
+1276:GrGLGpu::didDrawTo\28GrRenderTarget*\29
+1277:GrGLCompileAndAttachShader\28GrGLContext\20const&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20GrThreadSafePipelineBuilder::Stats*\2c\20skgpu::ShaderErrorHandler*\29
+1278:GrFragmentProcessors::Make\28GrRecordingContext*\2c\20SkColorFilter\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrColorInfo\20const&\2c\20SkSurfaceProps\20const&\29
+1279:GrColorSpaceXformEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrColorInfo\20const&\2c\20GrColorInfo\20const&\29
+1280:GrCaps::validateSurfaceParams\28SkISize\20const&\2c\20GrBackendFormat\20const&\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20GrTextureType\29\20const
+1281:GrBufferAllocPool::putBack\28unsigned\20long\29
+1282:GrBlurUtils::GaussianBlur\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkIRect\2c\20float\2c\20float\2c\20SkTileMode\2c\20SkBackingFit\29::$_0::operator\28\29\28SkIRect\2c\20SkIRect\29\20const
+1283:GrAAConvexTessellator::createInsetRing\28GrAAConvexTessellator::Ring\20const&\2c\20GrAAConvexTessellator::Ring*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29
+1284:FT_Stream_GetByte
+1285:FT_Set_Transform
+1286:FT_Add_Module
+1287:CFF::CFFIndex<OT::IntType<unsigned\20short\2c\202u>>::sanitize\28hb_sanitize_context_t*\29\20const
+1288:AlmostLessOrEqualUlps\28float\2c\20float\29
+1289:ActiveEdge::intersect\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\29\20const
+1290:wrapper_cmp
+1291:void\20std::__2::vector<SkCodecs::Decoder\2c\20std::__2::allocator<SkCodecs::Decoder>>::__push_back_slow_path<SkCodecs::Decoder>\28SkCodecs::Decoder&&\29
+1292:void\20std::__2::reverse\5babi:v160004\5d<char*>\28char*\2c\20char*\29
+1293:void\20std::__2::__hash_table<int\2c\20std::__2::hash<int>\2c\20std::__2::equal_to<int>\2c\20std::__2::allocator<int>>::__do_rehash<true>\28unsigned\20long\29
+1294:ubidi_getParaLevelAtIndex_skia
+1295:tanf
+1296:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::operator\5b\5d\5babi:v160004\5d\28unsigned\20long\29
+1297:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::capacity\5babi:v160004\5d\28\29\20const
+1298:std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\20std::__2::__pad_and_output\5babi:v160004\5d<wchar_t\2c\20std::__2::char_traits<wchar_t>>\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20std::__2::ios_base&\2c\20wchar_t\29
+1299:std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\20std::__2::__pad_and_output\5babi:v160004\5d<char\2c\20std::__2::char_traits<char>>\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20std::__2::ios_base&\2c\20char\29
+1300:std::__2::char_traits<char>::to_int_type\28char\29
+1301:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__recommend\5babi:v160004\5d\28unsigned\20long\29
+1302:std::__2::basic_ios<char\2c\20std::__2::char_traits<char>>::setstate\5babi:v160004\5d\28unsigned\20int\29
+1303:std::__2::__compressed_pair_elem<void\20\28*\29\28void*\29\2c\201\2c\20false>::__compressed_pair_elem\5babi:v160004\5d<void\20\28*\29\28void*\29\2c\20void>\28void\20\28*&&\29\28void*\29\29
+1304:sktext::StrikeMutationMonitor::~StrikeMutationMonitor\28\29
+1305:sktext::StrikeMutationMonitor::StrikeMutationMonitor\28sktext::StrikeForGPU*\29
+1306:skif::LayerSpace<SkIRect>::contains\28skif::LayerSpace<SkIRect>\20const&\29\20const
+1307:skif::Backend::~Backend\28\29.1
+1308:skia_private::TArray<float\2c\20true>::operator=\28skia_private::TArray<float\2c\20true>&&\29
+1309:skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>::~STArray\28\29
+1310:skia_png_chunk_unknown_handling
+1311:skia::textlayout::TextStyle::TextStyle\28\29
+1312:skia::textlayout::TextLine::iterateThroughSingleRunByStyles\28skia::textlayout::TextLine::TextAdjustment\2c\20skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::StyleType\2c\20std::__2::function<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\20const&\29\20const
+1313:skgpu::ganesh::SurfaceFillContext::internalClear\28SkIRect\20const*\2c\20std::__2::array<float\2c\204ul>\2c\20bool\29
+1314:skgpu::ganesh::SurfaceDrawContext::fillRectToRect\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+1315:powf
+1316:non-virtual\20thunk\20to\20GrOpFlushState::allocator\28\29
+1317:hb_lazy_loader_t<OT::vhea\2c\20hb_table_lazy_loader_t<OT::vhea\2c\2011u\2c\20true>\2c\20hb_face_t\2c\2011u\2c\20hb_blob_t>::get\28\29\20const
+1318:hb_lazy_loader_t<OT::maxp\2c\20hb_table_lazy_loader_t<OT::maxp\2c\202u\2c\20true>\2c\20hb_face_t\2c\202u\2c\20hb_blob_t>::get\28\29\20const
+1319:hb_lazy_loader_t<OT::hhea\2c\20hb_table_lazy_loader_t<OT::hhea\2c\204u\2c\20true>\2c\20hb_face_t\2c\204u\2c\20hb_blob_t>::get\28\29\20const
+1320:hb_font_t::scale_glyph_extents\28hb_glyph_extents_t*\29
+1321:hb_font_t::get_glyph_h_origin_with_fallback\28unsigned\20int\2c\20int*\2c\20int*\29
+1322:hb_buffer_append
+1323:emscripten::internal::MethodInvoker<void\20\28SkFont::*\29\28sk_sp<SkTypeface>\29\2c\20void\2c\20SkFont*\2c\20sk_sp<SkTypeface>>::invoke\28void\20\28SkFont::*\20const&\29\28sk_sp<SkTypeface>\29\2c\20SkFont*\2c\20sk_sp<SkTypeface>*\29
+1324:emscripten::internal::Invoker<unsigned\20long>::invoke\28unsigned\20long\20\28*\29\28\29\29
+1325:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+1326:cos
+1327:cf2_glyphpath_lineTo
+1328:byn$mgfn-shared$SkTDStorage::calculateSizeOrDie\28int\29::$_0::operator\28\29\28\29\20const
+1329:alloc_small
+1330:af_latin_hints_compute_segments
+1331:_hb_glyph_info_set_unicode_props\28hb_glyph_info_t*\2c\20hb_buffer_t*\29
+1332:__lshrti3
+1333:__letf2
+1334:__cxx_global_array_dtor.4
+1335:SkUTF::ToUTF16\28int\2c\20unsigned\20short*\29
+1336:SkTextBlobBuilder::~SkTextBlobBuilder\28\29
+1337:SkTextBlobBuilder::make\28\29
+1338:SkSurface::makeImageSnapshot\28\29
+1339:SkString::insert\28unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29
+1340:SkString::insertUnichar\28unsigned\20long\2c\20int\29
+1341:SkStrikeSpec::findOrCreateScopedStrike\28sktext::StrikeForGPUCacheInterface*\29\20const
+1342:SkSpecialImages::MakeDeferredFromGpu\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20unsigned\20int\2c\20GrSurfaceProxyView\2c\20GrColorInfo\20const&\2c\20SkSurfaceProps\20const&\29
+1343:SkShader::isAImage\28SkMatrix*\2c\20SkTileMode*\29\20const
+1344:SkSL::is_constant_value\28SkSL::Expression\20const&\2c\20double\29
+1345:SkSL::compile_and_shrink\28SkSL::Compiler*\2c\20SkSL::ProgramKind\2c\20char\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkSL::Module\20const*\29
+1346:SkSL::\28anonymous\20namespace\29::ReturnsOnAllPathsVisitor::visitStatement\28SkSL::Statement\20const&\29
+1347:SkSL::Type::isOrContainsAtomic\28\29\20const
+1348:SkSL::Type::MakeScalarType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20char\20const*\2c\20SkSL::Type::NumberKind\2c\20signed\20char\2c\20signed\20char\29
+1349:SkSL::RP::Generator::pushBinaryExpression\28SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29
+1350:SkSL::RP::Builder::push_clone\28int\2c\20int\29
+1351:SkSL::ProgramUsage::remove\28SkSL::Statement\20const*\29
+1352:SkSL::Parser::statement\28\29
+1353:SkSL::ModifierFlags::description\28\29\20const
+1354:SkSL::Layout::paddedDescription\28\29\20const
+1355:SkSL::ConstructorCompoundCast::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1356:SkSL::Compiler::~Compiler\28\29
+1357:SkSL::Analysis::IsSameExpressionTree\28SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+1358:SkRect\20skif::Mapping::map<SkRect>\28SkRect\20const&\2c\20SkMatrix\20const&\29
+1359:SkRectPriv::Subtract\28SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkIRect*\29
+1360:SkPictureRecorder::SkPictureRecorder\28\29
+1361:SkPictureData::~SkPictureData\28\29
+1362:SkPathMeasure::nextContour\28\29
+1363:SkPathMeasure::getSegment\28float\2c\20float\2c\20SkPath*\2c\20bool\29
+1364:SkPathMeasure::getPosTan\28float\2c\20SkPoint*\2c\20SkPoint*\29
+1365:SkPathBuilder::lineTo\28SkPoint\29
+1366:SkPath::getPoint\28int\29\20const
+1367:SkPath::getLastPt\28SkPoint*\29\20const
+1368:SkOpSegment::addT\28double\29
+1369:SkNoPixelsDevice::ClipState&\20skia_private::TArray<SkNoPixelsDevice::ClipState\2c\20true>::emplace_back<SkIRect\2c\20bool\2c\20bool>\28SkIRect&&\2c\20bool&&\2c\20bool&&\29
+1370:SkNoDrawCanvas::onDrawImageRect2\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+1371:SkNextID::ImageID\28\29
+1372:SkMessageBus<SkResourceCache::PurgeSharedIDMessage\2c\20unsigned\20int\2c\20true>::Inbox::Inbox\28unsigned\20int\29
+1373:SkMakeImageFromRasterBitmap\28SkBitmap\20const&\2c\20SkCopyPixelsMode\29
+1374:SkImage_Lazy::generator\28\29\20const
+1375:SkImage_Base::~SkImage_Base\28\29
+1376:SkImage_Base::SkImage_Base\28SkImageInfo\20const&\2c\20unsigned\20int\29
+1377:SkFont::getWidthsBounds\28unsigned\20short\20const*\2c\20int\2c\20float*\2c\20SkRect*\2c\20SkPaint\20const*\29\20const
+1378:SkFont::getMetrics\28SkFontMetrics*\29\20const
+1379:SkFont::SkFont\28sk_sp<SkTypeface>\2c\20float\29
+1380:SkFont::SkFont\28\29
+1381:SkDrawBase::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const*\2c\20SkRect\20const*\29\20const
+1382:SkDevice::setGlobalCTM\28SkM44\20const&\29
+1383:SkDevice::onReadPixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+1384:SkDescriptor::operator==\28SkDescriptor\20const&\29\20const
+1385:SkConvertPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkImageInfo\20const&\2c\20void\20const*\2c\20unsigned\20long\29
+1386:SkConic::chopAt\28float\2c\20SkConic*\29\20const
+1387:SkColorSpace::gammaIsLinear\28\29\20const
+1388:SkColorSpace::MakeRGB\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+1389:SkCodec::fillIncompleteImage\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::ZeroInitialized\2c\20int\2c\20int\29
+1390:SkCanvas::saveLayer\28SkRect\20const*\2c\20SkPaint\20const*\29
+1391:SkCanvas::drawPaint\28SkPaint\20const&\29
+1392:SkCanvas::ImageSetEntry::~ImageSetEntry\28\29
+1393:SkBulkGlyphMetrics::glyphs\28SkSpan<unsigned\20short\20const>\29
+1394:SkBlendMode_AsCoeff\28SkBlendMode\2c\20SkBlendModeCoeff*\2c\20SkBlendModeCoeff*\29
+1395:SkBitmap::getGenerationID\28\29\20const
+1396:SkArenaAllocWithReset::reset\28\29
+1397:OT::Layout::GPOS_impl::AnchorFormat3::sanitize\28hb_sanitize_context_t*\29\20const
+1398:OT::GDEF::get_glyph_props\28unsigned\20int\29\20const
+1399:OT::CmapSubtable::get_glyph\28unsigned\20int\2c\20unsigned\20int*\29\20const
+1400:Ins_UNKNOWN
+1401:GrTextureEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20GrCaps\20const&\2c\20float\20const*\2c\20bool\29
+1402:GrSurfaceProxyView::mipmapped\28\29\20const
+1403:GrSurfaceProxy::instantiateImpl\28GrResourceProvider*\2c\20int\2c\20skgpu::Renderable\2c\20skgpu::Mipmapped\2c\20skgpu::UniqueKey\20const*\29
+1404:GrSimpleMeshDrawOpHelperWithStencil::isCompatible\28GrSimpleMeshDrawOpHelperWithStencil\20const&\2c\20GrCaps\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20bool\29\20const
+1405:GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\2c\20GrProcessorAnalysisCoverage\2c\20SkRGBA4f<\28SkAlphaType\292>*\2c\20bool*\29
+1406:GrShape::simplifyRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\2c\20unsigned\20int\29
+1407:GrQuad::projectedBounds\28\29\20const
+1408:GrProcessorSet::MakeEmptySet\28\29
+1409:GrPorterDuffXPFactory::SimpleSrcOverXP\28\29
+1410:GrPixmap::Allocate\28GrImageInfo\20const&\29
+1411:GrPathTessellationShader::MakeSimpleTriangleShader\28SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+1412:GrImageInfo::operator=\28GrImageInfo&&\29
+1413:GrImageInfo::makeColorType\28GrColorType\29\20const
+1414:GrGpuResource::setUniqueKey\28skgpu::UniqueKey\20const&\29
+1415:GrGpuResource::release\28\29
+1416:GrGpuResource::isPurgeable\28\29\20const
+1417:GrGeometryProcessor::textureSampler\28int\29\20const
+1418:GrGeometryProcessor::AttributeSet::begin\28\29\20const
+1419:GrGLSLShaderBuilder::addFeature\28unsigned\20int\2c\20char\20const*\29
+1420:GrGLGpu::clearErrorsAndCheckForOOM\28\29
+1421:GrGLGpu::bindSurfaceFBOForPixelOps\28GrSurface*\2c\20int\2c\20unsigned\20int\2c\20GrGLGpu::TempFBOTarget\29
+1422:GrFragmentProcessor::MakeColor\28SkRGBA4f<\28SkAlphaType\292>\29
+1423:GrDirectContextPriv::flushSurfaces\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+1424:GrDefaultGeoProcFactory::Make\28SkArenaAlloc*\2c\20GrDefaultGeoProcFactory::Color\20const&\2c\20GrDefaultGeoProcFactory::Coverage\20const&\2c\20GrDefaultGeoProcFactory::LocalCoords\20const&\2c\20SkMatrix\20const&\29
+1425:GrConvertPixels\28GrPixmap\20const&\2c\20GrCPixmap\20const&\2c\20bool\29
+1426:GrColorSpaceXformEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkColorSpace*\2c\20SkAlphaType\2c\20SkColorSpace*\2c\20SkAlphaType\29
+1427:GrColorInfo::GrColorInfo\28\29
+1428:GrBlurUtils::convolve_gaussian_1d\28skgpu::ganesh::SurfaceFillContext*\2c\20GrSurfaceProxyView\2c\20SkIRect\20const&\2c\20SkIPoint\2c\20SkIRect\20const&\2c\20SkAlphaType\2c\20GrBlurUtils::\28anonymous\20namespace\29::Direction\2c\20int\2c\20float\2c\20SkTileMode\29
+1429:GrBackendTexture::GrBackendTexture\28\29
+1430:GrBackendFormat::operator=\28GrBackendFormat\20const&\29
+1431:FT_Stream_Read
+1432:FT_GlyphLoader_Rewind
+1433:Cr_z_inflate
+1434:CFF::CFFIndex<OT::IntType<unsigned\20int\2c\204u>>::operator\5b\5d\28unsigned\20int\29\20const
+1435:void\20std::__2::__stable_sort<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>\28std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::value_type*\2c\20long\29
+1436:void\20std::__2::__double_or_nothing\5babi:v160004\5d<unsigned\20int>\28std::__2::unique_ptr<unsigned\20int\2c\20void\20\28*\29\28void*\29>&\2c\20unsigned\20int*&\2c\20unsigned\20int*&\29
+1437:void\20hb_serialize_context_t::add_link<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20true>>\28OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20true>&\2c\20unsigned\20int\2c\20hb_serialize_context_t::whence_t\2c\20unsigned\20int\29
+1438:void\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20bool>::setWire<RuntimeEffectUniform>\28bool\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform&\2c\20bool\29
+1439:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+1440:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+1441:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+1442:unsigned\20int\20std::__2::__sort3\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+1443:ubidi_setPara_skia
+1444:ubidi_close_skia
+1445:toupper
+1446:top12.2
+1447:std::__2::numpunct<wchar_t>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::numpunct<wchar_t>>\28std::__2::locale\20const&\29
+1448:std::__2::numpunct<char>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::numpunct<char>>\28std::__2::locale\20const&\29
+1449:std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot\20\5b\5d>::_EnableIfConvertible<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot>::type\20std::__2::default_delete<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot\20\5b\5d>::operator\28\29\5babi:v160004\5d<skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot>\28skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::Slot*\29\20const
+1450:std::__2::ctype<char>::narrow\5babi:v160004\5d\28char\2c\20char\29\20const
+1451:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::basic_string\5babi:v160004\5d<std::nullptr_t>\28wchar_t\20const*\29
+1452:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__recommend\5babi:v160004\5d\28unsigned\20long\29
+1453:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::setg\5babi:v160004\5d\28char*\2c\20char*\2c\20char*\29
+1454:std::__2::basic_ios<char\2c\20std::__2::char_traits<char>>::~basic_ios\28\29
+1455:std::__2::__num_get<wchar_t>::__stage2_int_loop\28wchar_t\2c\20int\2c\20char*\2c\20char*&\2c\20unsigned\20int&\2c\20wchar_t\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20wchar_t\20const*\29
+1456:std::__2::__num_get<char>::__stage2_int_loop\28char\2c\20int\2c\20char*\2c\20char*&\2c\20unsigned\20int&\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20char\20const*\29
+1457:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<wchar_t>>::pointer>\20std::__2::__allocate_at_least\5babi:v160004\5d<std::__2::allocator<wchar_t>>\28std::__2::allocator<wchar_t>&\2c\20unsigned\20long\29
+1458:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::allocator<char>>::pointer>\20std::__2::__allocate_at_least\5babi:v160004\5d<std::__2::allocator<char>>\28std::__2::allocator<char>&\2c\20unsigned\20long\29
+1459:src_p\28unsigned\20char\2c\20unsigned\20char\29
+1460:skia_private::TArray<skif::FilterResult::Builder::SampledFilterResult\2c\20false>::push_back\28skif::FilterResult::Builder::SampledFilterResult&&\29
+1461:skia_private::TArray<float\2c\20true>::operator=\28skia_private::TArray<float\2c\20true>\20const&\29
+1462:skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>&&\29
+1463:skia_png_get_valid
+1464:skia_png_gamma_8bit_correct
+1465:skia_png_free_data
+1466:skia_png_chunk_warning
+1467:skia::textlayout::TextLine::measureTextInsideOneRun\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::Run\20const*\2c\20float\2c\20float\2c\20bool\2c\20skia::textlayout::TextLine::TextAdjustment\29\20const
+1468:skia::textlayout::Run::positionX\28unsigned\20long\29\20const
+1469:skia::textlayout::Run::Run\28skia::textlayout::ParagraphImpl*\2c\20SkShaper::RunHandler::RunInfo\20const&\2c\20unsigned\20long\2c\20float\2c\20bool\2c\20float\2c\20unsigned\20long\2c\20float\29
+1470:skia::textlayout::ParagraphCacheKey::operator==\28skia::textlayout::ParagraphCacheKey\20const&\29\20const
+1471:skia::textlayout::FontCollection::enableFontFallback\28\29
+1472:skgpu::tess::PatchWriter<skgpu::ganesh::VertexChunkPatchAllocator\2c\20skgpu::tess::Required<\28skgpu::tess::PatchAttribs\291>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\294>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\298>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2964>\2c\20skgpu::tess::Optional<\28skgpu::tess::PatchAttribs\2932>\2c\20skgpu::tess::ReplicateLineEndPoints\2c\20skgpu::tess::TrackJoinControlPoints>::chopAndWriteCubics\28skvx::Vec<2\2c\20float>\2c\20skvx::Vec<2\2c\20float>\2c\20skvx::Vec<2\2c\20float>\2c\20skvx::Vec<2\2c\20float>\2c\20int\29
+1473:skgpu::ganesh::SmallPathAtlasMgr::reset\28\29
+1474:skgpu::ganesh::QuadPerEdgeAA::VertexSpec::vertexSize\28\29\20const
+1475:skgpu::ganesh::Device::readSurfaceView\28\29
+1476:skgpu::ganesh::ClipStack::clip\28skgpu::ganesh::ClipStack::RawElement&&\29
+1477:skgpu::ganesh::ClipStack::RawElement::contains\28skgpu::ganesh::ClipStack::RawElement\20const&\29\20const
+1478:skgpu::ganesh::ClipStack::RawElement::RawElement\28SkMatrix\20const&\2c\20GrShape\20const&\2c\20GrAA\2c\20SkClipOp\29
+1479:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane&\20skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\2c\20false>::emplace_back<sk_sp<SkData>\2c\20unsigned\20long&>\28sk_sp<SkData>&&\2c\20unsigned\20long&\29
+1480:skgpu::Swizzle::asString\28\29\20const
+1481:skgpu::ScratchKey::GenerateResourceType\28\29
+1482:skgpu::GetBlendFormula\28bool\2c\20bool\2c\20SkBlendMode\29
+1483:select_curve_ops\28skcms_Curve\20const*\2c\20int\2c\20OpAndArg*\29
+1484:sbrk
+1485:ps_tofixedarray
+1486:processPropertySeq\28UBiDi*\2c\20LevState*\2c\20unsigned\20char\2c\20int\2c\20int\29
+1487:png_format_buffer
+1488:png_check_keyword
+1489:nextafterf
+1490:jpeg_huff_decode
+1491:hb_unicode_funcs_destroy
+1492:hb_serialize_context_t::pop_discard\28\29
+1493:hb_buffer_set_flags
+1494:hb_blob_create_sub_blob
+1495:hb_array_t<char\20const>::hash\28\29\20const
+1496:hairquad\28SkPoint\20const*\2c\20SkRegion\20const*\2c\20SkRect\20const*\2c\20SkRect\20const*\2c\20SkBlitter*\2c\20int\2c\20void\20\28*\29\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29\29
+1497:haircubic\28SkPoint\20const*\2c\20SkRegion\20const*\2c\20SkRect\20const*\2c\20SkRect\20const*\2c\20SkBlitter*\2c\20int\2c\20void\20\28*\29\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29\29
+1498:fmt_u
+1499:flush_pending
+1500:emscripten::internal::Invoker<sk_sp<GrDirectContext>>::invoke\28sk_sp<GrDirectContext>\20\28*\29\28\29\29
+1501:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\29\2c\20void\2c\20SkPath&>::invoke\28void\20\28**\29\28SkPath&\29\2c\20SkPath*\29
+1502:do_fixed
+1503:destroy_face
+1504:decltype\28fp\28\28SkRecords::NoOp*\29\28nullptr\29\29\29\20SkRecord::Record::mutate<SkRecord::Destroyer&>\28SkRecord::Destroyer&\29
+1505:char*\20const&\20std::__2::max\5babi:v160004\5d<char*>\28char*\20const&\2c\20char*\20const&\29
+1506:cf2_stack_pushInt
+1507:cf2_interpT2CharString
+1508:cf2_glyphpath_moveTo
+1509:byn$mgfn-shared$SkSL::ConstructorArrayCast::clone\28SkSL::Position\29\20const
+1510:byn$mgfn-shared$GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::onMakeProgramImpl\28\29\20const
+1511:bool\20hb_hashmap_t<unsigned\20int\2c\20unsigned\20int\2c\20true>::set_with_hash<unsigned\20int\20const&\2c\20unsigned\20int\20const&>\28unsigned\20int\20const&\2c\20unsigned\20int\2c\20unsigned\20int\20const&\2c\20bool\29
+1512:bool\20emscripten::internal::MemberAccess<RuntimeEffectUniform\2c\20bool>::getWire<RuntimeEffectUniform>\28bool\20RuntimeEffectUniform::*\20const&\2c\20RuntimeEffectUniform\20const&\29
+1513:_hb_ot_metrics_get_position_common\28hb_font_t*\2c\20hb_ot_metrics_tag_t\2c\20int*\29
+1514:__tandf
+1515:__floatunsitf
+1516:__cxa_allocate_exception
+1517:\28anonymous\20namespace\29::SkBlurImageFilter::~SkBlurImageFilter\28\29
+1518:\28anonymous\20namespace\29::PathGeoBuilder::createMeshAndPutBackReserve\28\29
+1519:\28anonymous\20namespace\29::MeshOp::fixedFunctionFlags\28\29\20const
+1520:\28anonymous\20namespace\29::DrawAtlasOpImpl::fixedFunctionFlags\28\29\20const
+1521:WebPDemuxGetI
+1522:VP8LDoFillBitWindow
+1523:VP8LClear
+1524:TT_Get_MM_Var
+1525:SkWStream::writeScalar\28float\29
+1526:SkUTF::UTF8ToUTF16\28unsigned\20short*\2c\20int\2c\20char\20const*\2c\20unsigned\20long\29
+1527:SkTSect::BinarySearch\28SkTSect*\2c\20SkTSect*\2c\20SkIntersections*\29
+1528:SkTConic::operator\5b\5d\28int\29\20const
+1529:SkTBlockList<GrShaderVar\2c\201>::reset\28\29
+1530:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\2c\201>::reset\28\29
+1531:SkSurfaces::RenderTarget\28GrRecordingContext*\2c\20skgpu::Budgeted\2c\20SkImageInfo\20const&\2c\20int\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const*\2c\20bool\2c\20bool\29
+1532:SkSurfaceProps::SkSurfaceProps\28unsigned\20int\2c\20SkPixelGeometry\29
+1533:SkString::insertU32\28unsigned\20long\2c\20unsigned\20int\29
+1534:SkSpecialImage::asShader\28SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const&\29\20const
+1535:SkScan::FillRect\28SkRect\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+1536:SkScan::FillIRect\28SkIRect\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+1537:SkSL::optimize_comparison\28SkSL::Context\20const&\2c\20std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20bool\20\28*\29\28double\2c\20double\29\29
+1538:SkSL::Type::convertArraySize\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Position\2c\20long\20long\29\20const
+1539:SkSL::RP::Builder::dot_floats\28int\29
+1540:SkSL::ProgramUsage::get\28SkSL::FunctionDeclaration\20const&\29\20const
+1541:SkSL::Parser::type\28SkSL::Modifiers*\29
+1542:SkSL::Parser::modifiers\28\29
+1543:SkSL::IndexExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1544:SkSL::ConstructorDiagonalMatrix::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1545:SkSL::ConstructorArrayCast::~ConstructorArrayCast\28\29
+1546:SkSL::ConstantFolder::MakeConstantValueForVariable\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1547:SkSL::Block::Make\28SkSL::Position\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>\2c\20SkSL::Block::Kind\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+1548:SkRuntimeEffectPriv::CanDraw\28SkCapabilities\20const*\2c\20SkRuntimeEffect\20const*\29
+1549:SkRegion::setPath\28SkPath\20const&\2c\20SkRegion\20const&\29
+1550:SkRegion::operator=\28SkRegion\20const&\29
+1551:SkRegion::op\28SkRegion\20const&\2c\20SkRegion\20const&\2c\20SkRegion::Op\29
+1552:SkRegion::Iterator::next\28\29
+1553:SkRasterPipeline::compile\28\29\20const
+1554:SkRasterPipeline::append_clamp_if_normalized\28SkImageInfo\20const&\29
+1555:SkRRect::transform\28SkMatrix\20const&\2c\20SkRRect*\29\20const
+1556:SkPictureRecorder::beginRecording\28SkRect\20const&\2c\20SkBBHFactory*\29
+1557:SkPathWriter::finishContour\28\29
+1558:SkPathStroker::cubicPerpRay\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\2c\20SkPoint*\29\20const
+1559:SkPath::getSegmentMasks\28\29\20const
+1560:SkPath::addRRect\28SkRRect\20const&\2c\20SkPathDirection\29
+1561:SkPaintPriv::ComputeLuminanceColor\28SkPaint\20const&\29
+1562:SkPaint::setBlender\28sk_sp<SkBlender>\29
+1563:SkPaint::isSrcOver\28\29\20const
+1564:SkOpAngle::linesOnOriginalSide\28SkOpAngle\20const*\29
+1565:SkNotifyBitmapGenIDIsStale\28unsigned\20int\29
+1566:SkMipmap::Build\28SkPixmap\20const&\2c\20SkDiscardableMemory*\20\28*\29\28unsigned\20long\29\2c\20bool\29
+1567:SkMeshSpecification::~SkMeshSpecification\28\29
+1568:SkMatrix::setSinCos\28float\2c\20float\2c\20float\2c\20float\29
+1569:SkMatrix::setRSXform\28SkRSXform\20const&\29
+1570:SkMatrix::mapHomogeneousPoints\28SkPoint3*\2c\20SkPoint3\20const*\2c\20int\29\20const
+1571:SkMatrix::decomposeScale\28SkSize*\2c\20SkMatrix*\29\20const
+1572:SkMaskBuilder::AllocImage\28unsigned\20long\2c\20SkMaskBuilder::AllocType\29
+1573:SkIntersections::insertNear\28double\2c\20double\2c\20SkDPoint\20const&\2c\20SkDPoint\20const&\29
+1574:SkIntersections::flip\28\29
+1575:SkImageInfo::Make\28SkISize\2c\20SkColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+1576:SkImageFilter_Base::~SkImageFilter_Base\28\29
+1577:SkImage::isAlphaOnly\28\29\20const
+1578:SkGlyph::drawable\28\29\20const
+1579:SkFont::unicharToGlyph\28int\29\20const
+1580:SkFont::setHinting\28SkFontHinting\29
+1581:SkFindQuadMaxCurvature\28SkPoint\20const*\29
+1582:SkEvalCubicAt\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\2c\20SkPoint*\29
+1583:SkDrawTiler::stepAndSetupTileDraw\28\29
+1584:SkDrawTiler::SkDrawTiler\28SkBitmapDevice*\2c\20SkRect\20const*\29
+1585:SkDevice::accessPixels\28SkPixmap*\29
+1586:SkDeque::SkDeque\28unsigned\20long\2c\20void*\2c\20unsigned\20long\2c\20int\29
+1587:SkDCubic::FindExtrema\28double\20const*\2c\20double*\29
+1588:SkColorFilters::Blend\28unsigned\20int\2c\20SkBlendMode\29
+1589:SkCanvas::internalRestore\28\29
+1590:SkCanvas::init\28sk_sp<SkDevice>\29
+1591:SkCanvas::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+1592:SkCanvas::clipRect\28SkRect\20const&\2c\20SkClipOp\2c\20bool\29
+1593:SkBitmap::operator=\28SkBitmap&&\29
+1594:SkBinaryWriteBuffer::~SkBinaryWriteBuffer\28\29
+1595:SkAAClip::SkAAClip\28\29
+1596:OT::glyf_accelerator_t::glyf_accelerator_t\28hb_face_t*\29
+1597:OT::VariationStore::sanitize\28hb_sanitize_context_t*\29\20const
+1598:OT::Layout::GPOS_impl::ValueFormat::sanitize_value_devices\28hb_sanitize_context_t*\2c\20void\20const*\2c\20OT::IntType<unsigned\20short\2c\202u>\20const*\29\20const
+1599:OT::Layout::GPOS_impl::ValueFormat::apply_value\28OT::hb_ot_apply_context_t*\2c\20void\20const*\2c\20OT::IntType<unsigned\20short\2c\202u>\20const*\2c\20hb_glyph_position_t&\29\20const
+1600:OT::HVARVVAR::sanitize\28hb_sanitize_context_t*\29\20const
+1601:GrTriangulator::VertexList::insert\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\29
+1602:GrTriangulator::Poly::addEdge\28GrTriangulator::Edge*\2c\20GrTriangulator::Side\2c\20GrTriangulator*\29
+1603:GrTriangulator::EdgeList::remove\28GrTriangulator::Edge*\29
+1604:GrSurfaceProxyView::Copy\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20skgpu::Mipmapped\2c\20SkIRect\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1605:GrSurfaceProxy::isFunctionallyExact\28\29\20const
+1606:GrStyledShape::operator=\28GrStyledShape\20const&\29
+1607:GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrGeometryProcessor*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+1608:GrResourceCache::purgeAsNeeded\28\29
+1609:GrRenderTask::addDependency\28GrDrawingManager*\2c\20GrSurfaceProxy*\2c\20skgpu::Mipmapped\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29
+1610:GrRenderTask::GrRenderTask\28\29
+1611:GrRenderTarget::onRelease\28\29
+1612:GrProxyProvider::findOrCreateProxyByUniqueKey\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxy::UseAllocator\29
+1613:GrProcessorSet::operator==\28GrProcessorSet\20const&\29\20const
+1614:GrPathUtils::generateQuadraticPoints\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20SkPoint**\2c\20unsigned\20int\29
+1615:GrMeshDrawOp::QuadHelper::QuadHelper\28GrMeshDrawTarget*\2c\20unsigned\20long\2c\20int\29
+1616:GrIsStrokeHairlineOrEquivalent\28GrStyle\20const&\2c\20SkMatrix\20const&\2c\20float*\29
+1617:GrImageContext::abandoned\28\29
+1618:GrGpuResource::registerWithCache\28skgpu::Budgeted\29
+1619:GrGpuBuffer::isMapped\28\29\20const
+1620:GrGpu::submitToGpu\28GrSyncCpu\29
+1621:GrGpu::didWriteToSurface\28GrSurface*\2c\20GrSurfaceOrigin\2c\20SkIRect\20const*\2c\20unsigned\20int\29\20const
+1622:GrGeometryProcessor::ProgramImpl::setupUniformColor\28GrGLSLFPFragmentBuilder*\2c\20GrGLSLUniformHandler*\2c\20char\20const*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+1623:GrGLGpu::flushRenderTarget\28GrGLRenderTarget*\2c\20bool\29
+1624:GrFragmentProcessor::visitTextureEffects\28std::__2::function<void\20\28GrTextureEffect\20const&\29>\20const&\29\20const
+1625:GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+1626:GrCpuBuffer::ref\28\29\20const
+1627:GrBufferAllocPool::makeSpace\28unsigned\20long\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+1628:GrBackendTextures::GetGLTextureInfo\28GrBackendTexture\20const&\2c\20GrGLTextureInfo*\29
+1629:FilterLoop26_C
+1630:FT_Vector_Transform
+1631:FT_Vector_NormLen
+1632:FT_Outline_Transform
+1633:FT_Done_Face
+1634:CFF::dict_opset_t::process_op\28unsigned\20int\2c\20CFF::interp_env_t<CFF::number_t>&\29
+1635:AlmostBetweenUlps\28float\2c\20float\2c\20float\29
+1636:void\20std::__2::vector<skia::textlayout::OneLineShaper::RunBlock\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__emplace_back_slow_path<skia::textlayout::OneLineShaper::RunBlock&>\28skia::textlayout::OneLineShaper::RunBlock&\29
+1637:ubidi_getMemory_skia
+1638:transform\28unsigned\20int*\2c\20unsigned\20char\20const*\29
+1639:strcspn
+1640:std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>::__append\28unsigned\20long\29
+1641:std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20SkSL::coalesce_pairwise_vectors<float>\28std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20double\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\2c\20double\20\28*\29\28double\29\29
+1642:std::__2::locale::locale\28std::__2::locale\20const&\29
+1643:std::__2::locale::classic\28\29
+1644:std::__2::codecvt<char\2c\20char\2c\20__mbstate_t>::do_unshift\28__mbstate_t&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+1645:std::__2::chrono::__libcpp_steady_clock_now\28\29
+1646:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__grow_by_and_replace\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20char\20const*\29
+1647:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__fits_in_sso\5babi:v160004\5d\28unsigned\20long\29
+1648:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::~basic_streambuf\28\29
+1649:std::__2::__wrap_iter<wchar_t*>::operator++\5babi:v160004\5d\28\29
+1650:std::__2::__wrap_iter<float*>\20std::__2::vector<float\2c\20std::__2::allocator<float>>::insert<float\20const*\2c\200>\28std::__2::__wrap_iter<float\20const*>\2c\20float\20const*\2c\20float\20const*\29
+1651:std::__2::__wrap_iter<char*>::operator++\5babi:v160004\5d\28\29
+1652:std::__2::__throw_bad_variant_access\5babi:v160004\5d\28\29
+1653:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_front\28skia::textlayout::OneLineShaper::RunBlock*&&\29
+1654:std::__2::__shared_count::__release_shared\5babi:v160004\5d\28\29
+1655:std::__2::__num_get<wchar_t>::__stage2_int_prep\28std::__2::ios_base&\2c\20wchar_t&\29
+1656:std::__2::__num_get<wchar_t>::__do_widen\28std::__2::ios_base&\2c\20wchar_t*\29\20const
+1657:std::__2::__num_get<char>::__stage2_int_prep\28std::__2::ios_base&\2c\20char&\29
+1658:std::__2::__itoa::__append1\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+1659:sktext::gpu::VertexFiller::vertexStride\28SkMatrix\20const&\29\20const
+1660:skif::\28anonymous\20namespace\29::AutoSurface::AutoSurface\28skif::Context\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20bool\2c\20SkSurfaceProps\20const*\29
+1661:skif::Mapping::adjustLayerSpace\28SkMatrix\20const&\29
+1662:skif::LayerSpace<SkSize>::round\28\29\20const
+1663:skif::FilterResult::analyzeBounds\28SkMatrix\20const&\2c\20SkIRect\20const&\2c\20bool\29\20const
+1664:skia_private::THashTable<skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair\2c\20SkSL::Type\20const*\2c\20skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair&&\29
+1665:skia_private::THashTable<GrGpuResource*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrGpuResource\2c\20skgpu::UniqueKey\2c\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::remove\28skgpu::UniqueKey\20const&\29
+1666:skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\2c\20true>::operator=\28skia_private::TArray<sk_sp<sktext::gpu::TextBlob>\2c\20true>&&\29
+1667:skia_private::TArray<SkCanvas::Lattice::RectType\2c\20true>::push_back_raw\28int\29
+1668:skia_png_sig_cmp
+1669:skia_png_set_progressive_read_fn
+1670:skia_png_set_longjmp_fn
+1671:skia_png_set_interlace_handling
+1672:skia_png_reciprocal
+1673:skia_png_read_chunk_header
+1674:skia_png_get_io_ptr
+1675:skia_png_calloc
+1676:skia::textlayout::TextLine::~TextLine\28\29
+1677:skia::textlayout::ParagraphStyle::ParagraphStyle\28skia::textlayout::ParagraphStyle\20const&\29
+1678:skia::textlayout::ParagraphCacheKey::~ParagraphCacheKey\28\29
+1679:skia::textlayout::FontCollection::findTypefaces\28std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>\20const&\2c\20SkFontStyle\2c\20std::__2::optional<skia::textlayout::FontArguments>\20const&\29
+1680:skia::textlayout::Cluster::trimmedWidth\28unsigned\20long\29\20const
+1681:skgpu::ganesh::TextureOp::BatchSizeLimiter::createOp\28GrTextureSetEntry*\2c\20int\2c\20GrAAType\29
+1682:skgpu::ganesh::SurfaceFillContext::fillWithFP\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1683:skgpu::ganesh::SurfaceDrawContext::drawShapeUsingPathRenderer\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20GrStyledShape&&\2c\20bool\29
+1684:skgpu::ganesh::SurfaceDrawContext::drawRect\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrStyle\20const*\29
+1685:skgpu::ganesh::SurfaceDrawContext::drawRRect\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20GrStyle\20const&\29
+1686:skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29
+1687:skgpu::ganesh::QuadPerEdgeAA::CalcIndexBufferOption\28GrAAType\2c\20int\29
+1688:skgpu::ganesh::LockTextureProxyView\28GrRecordingContext*\2c\20SkImage_Lazy\20const*\2c\20GrImageTexGenPolicy\2c\20skgpu::Mipmapped\29::$_0::operator\28\29\28GrSurfaceProxyView\20const&\29\20const
+1689:skgpu::ganesh::Device::targetProxy\28\29
+1690:skgpu::ganesh::ClipStack::getConservativeBounds\28\29\20const
+1691:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::addTransferResult\28skgpu::ganesh::SurfaceContext::PixelTransferResult\20const&\2c\20SkISize\2c\20unsigned\20long\2c\20skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>*\29
+1692:skgpu::Plot::resetRects\28\29
+1693:skcms_TransferFunction_isPQish
+1694:skcms_TransferFunction_invert
+1695:skcms_Matrix3x3_concat
+1696:ps_dimension_add_t1stem
+1697:log2f
+1698:log
+1699:jcopy_sample_rows
+1700:hb_font_t::has_func\28unsigned\20int\29
+1701:hb_buffer_create_similar
+1702:getenv
+1703:ft_service_list_lookup
+1704:fseek
+1705:fiprintf
+1706:fflush
+1707:expm1
+1708:emscripten::internal::MethodInvoker<void\20\28GrDirectContext::*\29\28\29\2c\20void\2c\20GrDirectContext*>::invoke\28void\20\28GrDirectContext::*\20const&\29\28\29\2c\20GrDirectContext*\29
+1709:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+1710:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28SkFont&\29\2c\20emscripten::val\2c\20SkFont&>::invoke\28emscripten::val\20\28**\29\28SkFont&\29\2c\20SkFont*\29
+1711:do_putc
+1712:crc32_z
+1713:cf2_hintmap_insertHint
+1714:cf2_hintmap_build
+1715:cf2_glyphpath_pushPrevElem
+1716:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+1717:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+1718:byn$mgfn-shared$skif::\28anonymous\20namespace\29::RasterBackend::~RasterBackend\28\29
+1719:byn$mgfn-shared$skif::Backend::~Backend\28\29.1
+1720:byn$mgfn-shared$skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+1721:append_multitexture_lookup\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20int\2c\20GrGLSLVarying\20const&\2c\20char\20const*\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+1722:afm_stream_read_one
+1723:af_latin_hints_link_segments
+1724:af_latin_compute_stem_width
+1725:af_glyph_hints_reload
+1726:acosf
+1727:__wasi_syscall_ret
+1728:__syscall_ret
+1729:__sin
+1730:__cos
+1731:VP8LHuffmanTablesDeallocate
+1732:SkWriter32::writeSampling\28SkSamplingOptions\20const&\29
+1733:SkVertices::Builder::detach\28\29
+1734:SkTypeface_FreeType::~SkTypeface_FreeType\28\29
+1735:SkTypeface_FreeType::FaceRec::~FaceRec\28\29
+1736:SkTypeface::SkTypeface\28SkFontStyle\20const&\2c\20bool\29
+1737:SkTypeface::GetDefaultTypeface\28SkTypeface::Style\29
+1738:SkTreatAsSprite\28SkMatrix\20const&\2c\20SkISize\20const&\2c\20SkSamplingOptions\20const&\2c\20bool\29
+1739:SkTextBlobBuilder::TightRunBounds\28SkTextBlob::RunRecord\20const&\29
+1740:SkTextBlob::RunRecord::textSizePtr\28\29\20const
+1741:SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::remove\28skgpu::ScratchKey\20const&\2c\20GrGpuResource\20const*\29
+1742:SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::insert\28skgpu::ScratchKey\20const&\2c\20GrGpuResource*\29
+1743:SkTDStorage::insert\28int\2c\20int\2c\20void\20const*\29
+1744:SkTDPQueue<\28anonymous\20namespace\29::RunIteratorQueue::Entry\2c\20&\28anonymous\20namespace\29::RunIteratorQueue::CompareEntry\28\28anonymous\20namespace\29::RunIteratorQueue::Entry\20const&\2c\20\28anonymous\20namespace\29::RunIteratorQueue::Entry\20const&\29\2c\20\28int*\20\28*\29\28\28anonymous\20namespace\29::RunIteratorQueue::Entry\20const&\29\290>::insert\28\28anonymous\20namespace\29::RunIteratorQueue::Entry\29
+1745:SkSwizzler::Make\28SkEncodedInfo\20const&\2c\20unsigned\20int\20const*\2c\20SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20SkIRect\20const*\29
+1746:SkSurface_Base::~SkSurface_Base\28\29
+1747:SkSurface::recordingContext\28\29\20const
+1748:SkString::resize\28unsigned\20long\29
+1749:SkStrikeSpec::SkStrikeSpec\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\29
+1750:SkStrikeSpec::MakeMask\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\29
+1751:SkStrikeSpec::MakeCanonicalized\28SkFont\20const&\2c\20SkPaint\20const*\29
+1752:SkStrikeCache::findOrCreateStrike\28SkStrikeSpec\20const&\29
+1753:SkSpecialImages::MakeFromRaster\28SkIRect\20const&\2c\20SkBitmap\20const&\2c\20SkSurfaceProps\20const&\29
+1754:SkShaders::MatrixRec::applyForFragmentProcessor\28SkMatrix\20const&\29\20const
+1755:SkShaders::MatrixRec::MatrixRec\28SkMatrix\20const&\29
+1756:SkShaders::Blend\28SkBlendMode\2c\20sk_sp<SkShader>\2c\20sk_sp<SkShader>\29
+1757:SkScan::FillPath\28SkPath\20const&\2c\20SkRegion\20const&\2c\20SkBlitter*\29
+1758:SkScalerContext_FreeType::emboldenIfNeeded\28FT_FaceRec_*\2c\20FT_GlyphSlotRec_*\2c\20unsigned\20short\29
+1759:SkSL::is_or_contains_array\28SkSL::Type\20const*\2c\20bool\29
+1760:SkSL::Type::isOrContainsArray\28\29\20const
+1761:SkSL::Type::displayName\28\29\20const
+1762:SkSL::Type::checkForOutOfRangeLiteral\28SkSL::Context\20const&\2c\20double\2c\20SkSL::Position\29\20const
+1763:SkSL::ThreadContext::SetErrorReporter\28SkSL::ErrorReporter*\29
+1764:SkSL::ThreadContext::RTAdjustState\28\29
+1765:SkSL::String::Separator\28\29::Output::~Output\28\29
+1766:SkSL::RP::SlotManager::addSlotDebugInfoForGroup\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Position\2c\20int*\2c\20bool\29
+1767:SkSL::RP::Generator::foldComparisonOp\28SkSL::Operator\2c\20int\29
+1768:SkSL::RP::Builder::branch_if_no_lanes_active\28int\29
+1769:SkSL::PrefixExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Operator\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+1770:SkSL::PipelineStage::PipelineStageCodeGenerator::typedVariable\28SkSL::Type\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+1771:SkSL::Parser::parseArrayDimensions\28SkSL::Position\2c\20SkSL::Type\20const**\29
+1772:SkSL::Parser::arraySize\28long\20long*\29
+1773:SkSL::Operator::operatorName\28\29\20const
+1774:SkSL::ModifierFlags::paddedDescription\28\29\20const
+1775:SkSL::ConstantFolder::GetConstantValue\28SkSL::Expression\20const&\2c\20double*\29
+1776:SkSL::ConstantFolder::GetConstantInt\28SkSL::Expression\20const&\2c\20long\20long*\29
+1777:SkSL::Compiler::Compiler\28SkSL::ShaderCaps\20const*\29
+1778:SkSL::BinaryExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Operator\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkSL::Type\20const*\29
+1779:SkRuntimeEffect::findChild\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+1780:SkResourceCache::remove\28SkResourceCache::Rec*\29
+1781:SkRegion::op\28SkRegion\20const&\2c\20SkIRect\20const&\2c\20SkRegion::Op\29
+1782:SkRegion::Iterator::Iterator\28SkRegion\20const&\29
+1783:SkRecords::FillBounds::bounds\28SkRecords::DrawArc\20const&\29\20const
+1784:SkReadBuffer::setMemory\28void\20const*\2c\20unsigned\20long\29
+1785:SkRasterClip::SkRasterClip\28SkIRect\20const&\29
+1786:SkRRect::writeToMemory\28void*\29\20const
+1787:SkRRect::setRectXY\28SkRect\20const&\2c\20float\2c\20float\29
+1788:SkPointPriv::DistanceToLineBetweenSqd\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPointPriv::Side*\29
+1789:SkPoint::setNormalize\28float\2c\20float\29
+1790:SkPictureRecorder::finishRecordingAsPicture\28\29
+1791:SkPathPriv::ComputeFirstDirection\28SkPath\20const&\29
+1792:SkPathEffect::asADash\28SkPathEffect::DashInfo*\29\20const
+1793:SkPathEdgeIter::SkPathEdgeIter\28SkPath\20const&\29
+1794:SkPath::rewind\28\29
+1795:SkPath::isLine\28SkPoint*\29\20const
+1796:SkPath::incReserve\28int\29
+1797:SkPath::addOval\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1798:SkPaint::setStrokeCap\28SkPaint::Cap\29
+1799:SkPaint::refShader\28\29\20const
+1800:SkPaint::nothingToDraw\28\29\20const
+1801:SkOpSpan::setWindSum\28int\29
+1802:SkOpSegment::markAndChaseWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20int\2c\20int\2c\20SkOpSpanBase**\29
+1803:SkOpContourBuilder::addCurve\28SkPath::Verb\2c\20SkPoint\20const*\2c\20float\29
+1804:SkOpAngle::starter\28\29
+1805:SkOpAngle::insert\28SkOpAngle*\29
+1806:SkNoDrawCanvas::onDrawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+1807:SkNoDestructor<SkSL::String::Separator\28\29::Output>::SkNoDestructor\28SkSL::String::Separator\28\29::Output&&\29
+1808:SkMatrix::setSinCos\28float\2c\20float\29
+1809:SkMaskFilterBase::getFlattenableType\28\29\20const
+1810:SkMaskFilter::MakeBlur\28SkBlurStyle\2c\20float\2c\20bool\29
+1811:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29
+1812:SkLineClipper::IntersectLine\28SkPoint\20const*\2c\20SkRect\20const&\2c\20SkPoint*\29
+1813:SkImage_GaneshBase::SkImage_GaneshBase\28sk_sp<GrImageContext>\2c\20SkImageInfo\2c\20unsigned\20int\29
+1814:SkImageFilters::Blend\28SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+1815:SkImage::makeShader\28SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const&\29\20const
+1816:SkImage::makeRasterImage\28GrDirectContext*\2c\20SkImage::CachingHint\29\20const
+1817:SkIDChangeListener::SkIDChangeListener\28\29
+1818:SkIDChangeListener::List::reset\28\29
+1819:SkGradientBaseShader::flatten\28SkWriteBuffer&\29\20const
+1820:SkFontMgr::RefDefault\28\29
+1821:SkFont::setEdging\28SkFont::Edging\29
+1822:SkEvalQuadAt\28SkPoint\20const*\2c\20float\29
+1823:SkEdgeClipper::next\28SkPoint*\29
+1824:SkDevice::scalerContextFlags\28\29\20const
+1825:SkConic::evalAt\28float\2c\20SkPoint*\2c\20SkPoint*\29\20const
+1826:SkColorTypeBytesPerPixel\28SkColorType\29
+1827:SkColorInfo::SkColorInfo\28SkColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\29
+1828:SkCodec::skipScanlines\28int\29
+1829:SkCodec::getPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const*\29
+1830:SkChopCubicAtHalf\28SkPoint\20const*\2c\20SkPoint*\29
+1831:SkCapabilities::RasterBackend\28\29
+1832:SkCanvas::saveLayer\28SkCanvas::SaveLayerRec\20const&\29
+1833:SkCanvas::restore\28\29
+1834:SkCanvas::imageInfo\28\29\20const
+1835:SkCanvas::drawTextBlob\28SkTextBlob\20const*\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+1836:SkCanvas::drawDrawable\28SkDrawable*\2c\20SkMatrix\20const*\29
+1837:SkCanvas::clipPath\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29
+1838:SkBmpBaseCodec::~SkBmpBaseCodec\28\29
+1839:SkBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+1840:SkBlendMode\20SkReadBuffer::read32LE<SkBlendMode>\28SkBlendMode\29
+1841:SkBitmap::operator=\28SkBitmap\20const&\29
+1842:SkBitmap::extractSubset\28SkBitmap*\2c\20SkIRect\20const&\29\20const
+1843:SkBinaryWriteBuffer::writeByteArray\28void\20const*\2c\20unsigned\20long\29
+1844:SkBinaryWriteBuffer::SkBinaryWriteBuffer\28SkSerialProcs\20const&\29
+1845:SkBaseShadowTessellator::handleLine\28SkPoint\20const&\29
+1846:SkAutoPixmapStorage::tryAlloc\28SkImageInfo\20const&\29
+1847:SkAutoDescriptor::~SkAutoDescriptor\28\29
+1848:SkAAClip::setRegion\28SkRegion\20const&\29
+1849:R
+1850:OT::hb_ot_apply_context_t::_set_glyph_class\28unsigned\20int\2c\20unsigned\20int\2c\20bool\2c\20bool\29
+1851:OT::cmap::find_subtable\28unsigned\20int\2c\20unsigned\20int\29\20const
+1852:GrXPFactory::FromBlendMode\28SkBlendMode\29
+1853:GrTriangulator::setBottom\28GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+1854:GrTriangulator::mergeCollinearEdges\28GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+1855:GrTriangulator::Edge::disconnect\28\29
+1856:GrThreadSafeCache::find\28skgpu::UniqueKey\20const&\29
+1857:GrThreadSafeCache::add\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&\29
+1858:GrThreadSafeCache::Entry::makeEmpty\28\29
+1859:GrSurfaceProxyView::operator==\28GrSurfaceProxyView\20const&\29\20const
+1860:GrSurfaceProxyPriv::doLazyInstantiation\28GrResourceProvider*\29
+1861:GrSurfaceProxy::Copy\28GrRecordingContext*\2c\20sk_sp<GrSurfaceProxy>\2c\20GrSurfaceOrigin\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20sk_sp<GrRenderTask>*\29
+1862:GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags\28\29\20const
+1863:GrSimpleMeshDrawOpHelper::finalizeProcessors\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrUserStencilSettings\20const*\2c\20GrClampType\2c\20GrProcessorAnalysisCoverage\2c\20GrProcessorAnalysisColor*\29
+1864:GrSimpleMeshDrawOpHelper::CreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrGeometryProcessor*\2c\20GrProcessorSet&&\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\2c\20GrPipeline::InputFlags\2c\20GrUserStencilSettings\20const*\29
+1865:GrSimpleMeshDrawOpHelper::CreatePipeline\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20skgpu::Swizzle\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrProcessorSet&&\2c\20GrPipeline::InputFlags\29
+1866:GrResourceProvider::findOrMakeStaticBuffer\28GrGpuBufferType\2c\20unsigned\20long\2c\20void\20const*\2c\20skgpu::UniqueKey\20const&\29
+1867:GrResourceProvider::findOrMakeStaticBuffer\28GrGpuBufferType\2c\20unsigned\20long\2c\20skgpu::UniqueKey\20const&\2c\20void\20\28*\29\28skgpu::VertexWriter\2c\20unsigned\20long\29\29
+1868:GrResourceProvider::MakeApprox\28SkISize\29
+1869:GrResourceCache::findAndRefScratchResource\28skgpu::ScratchKey\20const&\29
+1870:GrRecordingContextPriv::makeSFC\28GrImageInfo\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkBackingFit\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+1871:GrQuadUtils::TessellationHelper::Vertices::moveAlong\28GrQuadUtils::TessellationHelper::EdgeVectors\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\29
+1872:GrQuad::asRect\28SkRect*\29\20const
+1873:GrProcessorSet::GrProcessorSet\28GrProcessorSet&&\29
+1874:GrPathUtils::generateCubicPoints\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20SkPoint**\2c\20unsigned\20int\29
+1875:GrGpu::createBuffer\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\29
+1876:GrGeometryProcessor::ProgramImpl::WriteOutputPosition\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\2c\20char\20const*\2c\20SkMatrix\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+1877:GrGLTexture::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+1878:GrGLSLColorSpaceXformHelper::emitCode\28GrGLSLUniformHandler*\2c\20GrColorSpaceXform\20const*\2c\20unsigned\20int\29
+1879:GrGLRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+1880:GrGLRenderTarget::bindInternal\28unsigned\20int\2c\20bool\29
+1881:GrGLGpu::getErrorAndCheckForOOM\28\29
+1882:GrGLGpu::bindTexture\28int\2c\20GrSamplerState\2c\20skgpu::Swizzle\20const&\2c\20GrGLTexture*\29
+1883:GrFragmentProcessors::Make\28SkShader\20const*\2c\20GrFPArgs\20const&\2c\20SkMatrix\20const&\29
+1884:GrFragmentProcessor::visitWithImpls\28std::__2::function<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\20const
+1885:GrFragmentProcessor::ColorMatrix\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20float\20const*\2c\20bool\2c\20bool\2c\20bool\29
+1886:GrDrawingManager::appendTask\28sk_sp<GrRenderTask>\29
+1887:GrColorInfo::GrColorInfo\28GrColorInfo\20const&\29
+1888:GrCaps::isFormatCompressed\28GrBackendFormat\20const&\29\20const
+1889:GrAAConvexTessellator::lineTo\28SkPoint\20const&\2c\20GrAAConvexTessellator::CurveState\29
+1890:FT_Select_Metrics
+1891:FT_Select_Charmap
+1892:FT_Get_Next_Char
+1893:FT_Get_Module_Interface
+1894:FT_Done_Size
+1895:DecodeImageStream
+1896:CFF::opset_t<CFF::number_t>::process_op\28unsigned\20int\2c\20CFF::interp_env_t<CFF::number_t>&\29
+1897:CFF::Charset::get_glyph\28unsigned\20int\2c\20unsigned\20int\29\20const
+1898:wuffs_gif__decoder__num_decoded_frames
+1899:void\20std::__2::vector<sk_sp<SkFontMgr>\2c\20std::__2::allocator<sk_sp<SkFontMgr>>>::__push_back_slow_path<sk_sp<SkFontMgr>\20const&>\28sk_sp<SkFontMgr>\20const&\29
+1900:void\20std::__2::reverse\5babi:v160004\5d<wchar_t*>\28wchar_t*\2c\20wchar_t*\29
+1901:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29.2
+1902:void\20merge_sort<&sweep_lt_vert\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\29
+1903:void\20merge_sort<&sweep_lt_horiz\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\29
+1904:void\20emscripten::internal::MemberAccess<StrokeOpts\2c\20float>::setWire<StrokeOpts>\28float\20StrokeOpts::*\20const&\2c\20StrokeOpts&\2c\20float\29
+1905:validate_offsetToRestore\28SkReadBuffer*\2c\20unsigned\20long\29
+1906:ubidi_getVisualRun_skia
+1907:ubidi_getRuns_skia
+1908:ubidi_getClass_skia
+1909:tt_set_mm_blend
+1910:tt_face_get_ps_name
+1911:trinkle
+1912:std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>::release\5babi:v160004\5d\28\29
+1913:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20std::__2::__unordered_map_hasher<GrTriangulator::Vertex*\2c\20std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20std::__2::hash<GrTriangulator::Vertex*>\2c\20std::__2::equal_to<GrTriangulator::Vertex*>\2c\20true>\2c\20std::__2::__unordered_map_equal<GrTriangulator::Vertex*\2c\20std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>\2c\20std::__2::equal_to<GrTriangulator::Vertex*>\2c\20std::__2::hash<GrTriangulator::Vertex*>\2c\20true>\2c\20std::__2::allocator<std::__2::__hash_value_type<GrTriangulator::Vertex*\2c\20SSVertex*>>>::__emplace_unique_key_args<GrTriangulator::Vertex*\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrTriangulator::Vertex*\20const&>\2c\20std::__2::tuple<>>\28GrTriangulator::Vertex*\20const&\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrTriangulator::Vertex*\20const&>&&\2c\20std::__2::tuple<>&&\29
+1914:std::__2::pair<char\20const*\2c\20char*>::pair\5babi:v160004\5d<char\20const*\2c\20char*\2c\20\28void*\290>\28char\20const*&&\2c\20char*&&\29
+1915:std::__2::moneypunct<wchar_t\2c\20false>::do_decimal_point\28\29\20const
+1916:std::__2::moneypunct<char\2c\20false>::do_decimal_point\28\29\20const
+1917:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::istreambuf_iterator\5babi:v160004\5d\28std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>&\29
+1918:std::__2::ios_base::good\5babi:v160004\5d\28\29\20const
+1919:std::__2::ctype<char>::toupper\5babi:v160004\5d\28char\29\20const
+1920:std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29
+1921:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\20std::__2::__scan_keyword\5babi:v160004\5d<std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\2c\20std::__2::ctype<wchar_t>>\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const*\2c\20std::__2::ctype<wchar_t>\20const&\2c\20unsigned\20int&\2c\20bool\29
+1922:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::operator\5b\5d\5babi:v160004\5d\28unsigned\20long\29\20const
+1923:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__fits_in_sso\5babi:v160004\5d\28unsigned\20long\29
+1924:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\20std::__2::__scan_keyword\5babi:v160004\5d<std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::ctype<char>>\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::ctype<char>\20const&\2c\20unsigned\20int&\2c\20bool\29
+1925:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d<char\20const*\2c\20void>\28char\20const*\2c\20char\20const*\29
+1926:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+1927:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__get_short_size\5babi:v160004\5d\28\29\20const
+1928:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__assign_no_alias<true>\28char\20const*\2c\20unsigned\20long\29
+1929:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::__pbump\5babi:v160004\5d\28long\29
+1930:std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.1
+1931:std::__2::allocator_traits<std::__2::allocator<wchar_t>>::deallocate\5babi:v160004\5d\28std::__2::allocator<wchar_t>&\2c\20wchar_t*\2c\20unsigned\20long\29
+1932:std::__2::allocator_traits<std::__2::allocator<char>>::deallocate\5babi:v160004\5d\28std::__2::allocator<char>&\2c\20char*\2c\20unsigned\20long\29
+1933:std::__2::__num_put_base::__format_int\28char*\2c\20char\20const*\2c\20bool\2c\20unsigned\20int\29
+1934:std::__2::__num_put_base::__format_float\28char*\2c\20char\20const*\2c\20unsigned\20int\29
+1935:std::__2::__itoa::__append8\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+1936:sktext::gpu::VertexFiller::deviceRectAndCheckTransform\28SkMatrix\20const&\29\20const
+1937:sktext::gpu::TextBlob::Key::operator==\28sktext::gpu::TextBlob::Key\20const&\29\20const
+1938:sktext::gpu::GlyphVector::packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29
+1939:sktext::SkStrikePromise::strike\28\29
+1940:skif::LayerSpace<SkMatrix>::inverseMapRect\28skif::LayerSpace<SkIRect>\20const&\2c\20skif::LayerSpace<SkIRect>*\29\20const
+1941:skif::FilterResult::applyTransform\28skif::Context\20const&\2c\20skif::LayerSpace<SkMatrix>\20const&\2c\20SkSamplingOptions\20const&\29\20const
+1942:skif::FilterResult::Builder::~Builder\28\29
+1943:skif::FilterResult::Builder::Builder\28skif::Context\20const&\29
+1944:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair>::resize\28int\29
+1945:skia_private::THashTable<skia_private::THashMap<int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>\2c\20SkGoodHash>::Pair\2c\20int\2c\20skia_private::THashMap<int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>\2c\20SkGoodHash>::Pair>::Slot::emplace\28skia_private::THashMap<int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>\2c\20SkGoodHash>::Pair&&\2c\20unsigned\20int\29
+1946:skia_private::THashTable<skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair\2c\20SkSL::Type\20const*\2c\20skia_private::THashMap<SkSL::Type\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkGoodHash>::Pair>::resize\28int\29
+1947:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\2c\20SkSL::SymbolTable::SymbolKey\2c\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::uncheckedSet\28skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair&&\29
+1948:skia_private::THashTable<SkSL::Variable\20const*\2c\20SkSL::Variable\20const*\2c\20skia_private::THashSet<SkSL::Variable\20const*\2c\20SkGoodHash>::Traits>::resize\28int\29
+1949:skia_private::TArray<skia::textlayout::Run\2c\20false>::move\28void*\29
+1950:skia_private::TArray<SkRGBA4f<\28SkAlphaType\293>\2c\20true>::push_back\28SkRGBA4f<\28SkAlphaType\293>&&\29
+1951:skia_png_set_text_2
+1952:skia_png_set_palette_to_rgb
+1953:skia_png_handle_IHDR
+1954:skia_png_handle_IEND
+1955:skia_png_destroy_write_struct
+1956:skia::textlayout::operator==\28skia::textlayout::FontArguments\20const&\2c\20skia::textlayout::FontArguments\20const&\29
+1957:skia::textlayout::TextWrapper::TextStretch::extend\28skia::textlayout::Cluster*\29
+1958:skia::textlayout::FontArguments::FontArguments\28skia::textlayout::FontArguments\20const&\29
+1959:skia::textlayout::Decorations::calculateGaps\28skia::textlayout::TextLine::ClipContext\20const&\2c\20SkRect\20const&\2c\20float\2c\20float\29
+1960:skia::textlayout::Block&\20skia_private::TArray<skia::textlayout::Block\2c\20true>::emplace_back<unsigned\20long\2c\20unsigned\20long\2c\20skia::textlayout::TextStyle\20const&>\28unsigned\20long&&\2c\20unsigned\20long&&\2c\20skia::textlayout::TextStyle\20const&\29
+1961:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::fixedFunctionFlags\28\29\20const
+1962:skgpu::ganesh::SurfaceFillContext::fillRectWithFP\28SkIRect\20const&\2c\20SkMatrix\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+1963:skgpu::ganesh::SurfaceFillContext::SurfaceFillContext\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrSurfaceProxyView\2c\20GrColorInfo\20const&\29
+1964:skgpu::ganesh::SurfaceDrawContext::drawShape\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20GrStyledShape&&\29
+1965:skgpu::ganesh::SurfaceDrawContext::drawPaint\28GrClip\20const*\2c\20GrPaint&&\2c\20SkMatrix\20const&\29
+1966:skgpu::ganesh::SurfaceDrawContext::MakeWithFallback\28GrRecordingContext*\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20SkBackingFit\2c\20SkISize\2c\20SkSurfaceProps\20const&\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20skgpu::Budgeted\29
+1967:skgpu::ganesh::SurfaceContext::rescaleInto\28skgpu::ganesh::SurfaceFillContext*\2c\20SkIRect\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\29
+1968:skgpu::ganesh::SurfaceContext::PixelTransferResult::operator=\28skgpu::ganesh::SurfaceContext::PixelTransferResult&&\29
+1969:skgpu::ganesh::SmallPathAtlasMgr::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29
+1970:skgpu::ganesh::OpsTask::~OpsTask\28\29
+1971:skgpu::ganesh::OpsTask::setColorLoadOp\28GrLoadOp\2c\20std::__2::array<float\2c\204ul>\29
+1972:skgpu::ganesh::OpsTask::deleteOps\28\29
+1973:skgpu::ganesh::FillRectOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20GrAAType\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+1974:skgpu::ganesh::Device::drawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29::$_0::operator\28\29\28int\29\20const
+1975:skgpu::ganesh::ClipStack::~ClipStack\28\29
+1976:skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::~TClientMappedBufferManager\28\29
+1977:skgpu::Swizzle::apply\28SkRasterPipeline*\29\20const
+1978:skgpu::Plot::addSubImage\28int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29
+1979:skgpu::GetLCDBlendFormula\28SkBlendMode\29
+1980:skcms_TransferFunction_isHLGish
+1981:sk_srgb_linear_singleton\28\29
+1982:shr
+1983:shl
+1984:setRegionCheck\28SkRegion*\2c\20SkRegion\20const&\29
+1985:ps_dimension_set_mask_bits
+1986:operator==\28SkPath\20const&\2c\20SkPath\20const&\29
+1987:mbrtowc
+1988:jround_up
+1989:jpeg_make_d_derived_tbl
+1990:ilogbf
+1991:hb_ucd_get_unicode_funcs
+1992:hb_syllabic_insert_dotted_circles\28hb_font_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20int\2c\20int\29
+1993:hb_shape_full
+1994:hb_serialize_context_t::~hb_serialize_context_t\28\29
+1995:hb_serialize_context_t::resolve_links\28\29
+1996:hb_serialize_context_t::reset\28\29
+1997:hb_lazy_loader_t<OT::cff1_accelerator_t\2c\20hb_face_lazy_loader_t<OT::cff1_accelerator_t\2c\2016u>\2c\20hb_face_t\2c\2016u\2c\20OT::cff1_accelerator_t>::get\28\29\20const
+1998:hb_lazy_loader_t<AAT::feat\2c\20hb_table_lazy_loader_t<AAT::feat\2c\2034u\2c\20false>\2c\20hb_face_t\2c\2034u\2c\20hb_blob_t>::get\28\29\20const
+1999:hb_language_from_string
+2000:hb_font_t::mults_changed\28\29
+2001:hb_font_destroy
+2002:hb_buffer_t::next_glyph\28\29
+2003:get_sof
+2004:ftell
+2005:ft_var_readpackedpoints
+2006:ft_mem_strdup
+2007:float\20emscripten::internal::MemberAccess<StrokeOpts\2c\20float>::getWire<StrokeOpts>\28float\20StrokeOpts::*\20const&\2c\20StrokeOpts\20const&\29
+2008:fill_window
+2009:exp
+2010:encodeImage\28GrDirectContext*\2c\20sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29
+2011:emscripten::val\20MakeTypedArray<float>\28int\2c\20float\20const*\29
+2012:emscripten::internal::MethodInvoker<float\20\28SkContourMeasure::*\29\28\29\20const\2c\20float\2c\20SkContourMeasure\20const*>::invoke\28float\20\28SkContourMeasure::*\20const&\29\28\29\20const\2c\20SkContourMeasure\20const*\29
+2013:emscripten::internal::Invoker<sk_sp<SkAnimatedImage>\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkAnimatedImage>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\29\2c\20unsigned\20long\2c\20unsigned\20long\29
+2014:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\29\2c\20bool\2c\20SkPath\20const&\2c\20SkPath\20const&>::invoke\28bool\20\28**\29\28SkPath\20const&\2c\20SkPath\20const&\29\2c\20SkPath*\2c\20SkPath*\29
+2015:dquad_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2016:do_clip_op\28SkReadBuffer*\2c\20SkCanvas*\2c\20SkRegion::Op\2c\20SkClipOp*\29
+2017:do_anti_hairline\28int\2c\20int\2c\20int\2c\20int\2c\20SkIRect\20const*\2c\20SkBlitter*\29
+2018:doWriteReverse\28char16_t\20const*\2c\20int\2c\20char16_t*\2c\20int\2c\20unsigned\20short\2c\20UErrorCode*\29
+2019:doWriteForward\28char16_t\20const*\2c\20int\2c\20char16_t*\2c\20int\2c\20unsigned\20short\2c\20UErrorCode*\29
+2020:dline_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2021:dispose_chunk
+2022:direct_blur_y\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20int\2c\20int\2c\20unsigned\20short*\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29
+2023:decltype\28fp\28\28SkRecords::NoOp\29\28\29\29\29\20SkRecord::Record::visit<SkRecords::Draw&>\28SkRecords::Draw&\29\20const
+2024:dcubic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2025:dconic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2026:crop_rect_edge\28SkRect\20const&\2c\20int\2c\20int\2c\20int\2c\20int\2c\20float*\2c\20float*\2c\20float*\2c\20float*\2c\20float*\29
+2027:char*\20std::__2::__rewrap_iter\5babi:v160004\5d<char*\2c\20char*\2c\20std::__2::__unwrap_iter_impl<char*\2c\20true>>\28char*\2c\20char*\29
+2028:cff_slot_load
+2029:cff_parse_real
+2030:cff_index_get_sid_string
+2031:cff_index_access_element
+2032:cf2_doStems
+2033:cf2_doFlex
+2034:byn$mgfn-shared$tt_cmap8_get_info
+2035:byn$mgfn-shared$tt_cmap0_get_info
+2036:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>*\29\20const
+2037:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28\29\20const
+2038:byn$mgfn-shared$skia_png_set_strip_16
+2039:byn$mgfn-shared$SkSL::Tracer::line\28int\29
+2040:byn$mgfn-shared$AlmostBequalUlps\28float\2c\20float\29
+2041:buffer_verify_error\28hb_buffer_t*\2c\20hb_font_t*\2c\20char\20const*\2c\20...\29
+2042:blur_y_rect\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20int\2c\20skvx::Vec<8\2c\20unsigned\20short>\20\28*\29\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29\2c\20int\2c\20unsigned\20short*\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29
+2043:blur_column\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20skvx::Vec<8\2c\20unsigned\20short>\20\28*\29\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29\2c\20int\2c\20int\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29::$_0::operator\28\29\28unsigned\20char*\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\29\20const
+2044:af_sort_and_quantize_widths
+2045:af_glyph_hints_align_weak_points
+2046:af_glyph_hints_align_strong_points
+2047:af_face_globals_new
+2048:af_cjk_compute_stem_width
+2049:add_huff_table
+2050:addPoint\28UBiDi*\2c\20int\2c\20int\29
+2051:__uselocale
+2052:__math_xflow
+2053:__cxxabiv1::__base_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+2054:\28anonymous\20namespace\29::make_vertices_spec\28bool\2c\20bool\29
+2055:\28anonymous\20namespace\29::gather_lines_and_quads\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20float\2c\20bool\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20skia_private::TArray<int\2c\20true>*\2c\20skia_private::TArray<float\2c\20true>*\29::$_1::operator\28\29\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20bool\29\20const
+2056:\28anonymous\20namespace\29::draw_stencil_rect\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrHardClip\20const&\2c\20GrUserStencilSettings\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrAA\29
+2057:\28anonymous\20namespace\29::TentPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29::'lambda'\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29::operator\28\29\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29\20const
+2058:\28anonymous\20namespace\29::PathSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+2059:\28anonymous\20namespace\29::GaussPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29::'lambda'\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29::operator\28\29\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29\20const
+2060:\28anonymous\20namespace\29::CacheImpl::removeInternal\28\28anonymous\20namespace\29::CacheImpl::Value*\29
+2061:WebPRescalerExport
+2062:WebPInitAlphaProcessing
+2063:WebPFreeDecBuffer
+2064:WebPDemuxDelete
+2065:VP8SetError
+2066:VP8LInverseTransform
+2067:VP8LDelete
+2068:VP8LColorCacheClear
+2069:TT_Load_Context
+2070:StringBuffer\20apply_format_string<1024>\28char\20const*\2c\20void*\2c\20char\20\28&\29\20\5b1024\5d\2c\20SkString*\29
+2071:SkYUVAPixmaps::operator=\28SkYUVAPixmaps\20const&\29
+2072:SkYUVAPixmapInfo::SupportedDataTypes::enableDataType\28SkYUVAPixmapInfo::DataType\2c\20int\29
+2073:SkWriter32::writeMatrix\28SkMatrix\20const&\29
+2074:SkWriter32::snapshotAsData\28\29\20const
+2075:SkVertices::uniqueID\28\29\20const
+2076:SkVertices::approximateSize\28\29\20const
+2077:SkTypefaceCache::NewTypefaceID\28\29
+2078:SkTextBlobRunIterator::next\28\29
+2079:SkTextBlobRunIterator::SkTextBlobRunIterator\28SkTextBlob\20const*\29
+2080:SkTextBlobBuilder::SkTextBlobBuilder\28\29
+2081:SkTextBlobBuilder::ConservativeRunBounds\28SkTextBlob::RunRecord\20const&\29
+2082:SkTSpan::closestBoundedT\28SkDPoint\20const&\29\20const
+2083:SkTSect::updateBounded\28SkTSpan*\2c\20SkTSpan*\2c\20SkTSpan*\29
+2084:SkTSect::trim\28SkTSpan*\2c\20SkTSect*\29
+2085:SkTDStorage::erase\28int\2c\20int\29
+2086:SkTDPQueue<GrGpuResource*\2c\20&GrResourceCache::CompareTimestamp\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\2c\20&GrResourceCache::AccessResourceIndex\28GrGpuResource*\20const&\29>::percolateUpIfNecessary\28int\29
+2087:SkSurfaces::Raster\28SkImageInfo\20const&\2c\20unsigned\20long\2c\20SkSurfaceProps\20const*\29
+2088:SkStrokerPriv::JoinFactory\28SkPaint::Join\29
+2089:SkStrokeRec::setStrokeStyle\28float\2c\20bool\29
+2090:SkStrokeRec::setFillStyle\28\29
+2091:SkStrokeRec::applyToPath\28SkPath*\2c\20SkPath\20const&\29\20const
+2092:SkString::set\28char\20const*\29
+2093:SkStrikeSpec::findOrCreateStrike\28\29\20const
+2094:SkStrikeSpec::MakeWithNoDevice\28SkFont\20const&\2c\20SkPaint\20const*\29
+2095:SkStrike::unlock\28\29
+2096:SkStrike::lock\28\29
+2097:SkSharedMutex::SkSharedMutex\28\29
+2098:SkShadowTessellator::MakeSpot\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPoint3\20const&\2c\20SkPoint3\20const&\2c\20float\2c\20bool\2c\20bool\29
+2099:SkShaders::MatrixRec::apply\28SkStageRec\20const&\2c\20SkMatrix\20const&\29\20const
+2100:SkShaders::Empty\28\29
+2101:SkShaders::Color\28unsigned\20int\29
+2102:SkShaderBase::appendRootStages\28SkStageRec\20const&\2c\20SkMatrix\20const&\29\20const
+2103:SkScalerContext::~SkScalerContext\28\29.1
+2104:SkSL::write_stringstream\28SkSL::StringStream\20const&\2c\20SkSL::OutputStream&\29
+2105:SkSL::evaluate_3_way_intrinsic\28SkSL::Context\20const&\2c\20std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\29
+2106:SkSL::VarDeclaration::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Modifiers\20const&\2c\20SkSL::Type\20const&\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::VariableStorage\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+2107:SkSL::Type::priority\28\29\20const
+2108:SkSL::Type::checkIfUsableInArray\28SkSL::Context\20const&\2c\20SkSL::Position\29\20const
+2109:SkSL::SymbolTable::takeOwnershipOfString\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+2110:SkSL::SymbolTable::isBuiltinType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+2111:SkSL::SymbolTable::find\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+2112:SkSL::ShaderCapsFactory::MakeShaderCaps\28\29
+2113:SkSL::RP::Program::appendStages\28SkRasterPipeline*\2c\20SkArenaAlloc*\2c\20SkSL::RP::Callbacks*\2c\20SkSpan<float\20const>\29\20const
+2114:SkSL::RP::Generator::pushVectorizedExpression\28SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+2115:SkSL::RP::Builder::ternary_op\28SkSL::RP::BuilderOp\2c\20int\29
+2116:SkSL::RP::Builder::simplifyPopSlotsUnmasked\28SkSL::RP::SlotRange*\29
+2117:SkSL::RP::Builder::pop_slots_unmasked\28SkSL::RP::SlotRange\29
+2118:SkSL::RP::Builder::pad_stack\28int\29
+2119:SkSL::RP::Builder::exchange_src\28\29
+2120:SkSL::ProgramUsage::remove\28SkSL::ProgramElement\20const&\29
+2121:SkSL::ProgramUsage::isDead\28SkSL::Variable\20const&\29\20const
+2122:SkSL::PipelineStage::PipelineStageCodeGenerator::typeName\28SkSL::Type\20const&\29
+2123:SkSL::LiteralType::priority\28\29\20const
+2124:SkSL::GLSLCodeGenerator::writeAnyConstructor\28SkSL::AnyConstructor\20const&\2c\20SkSL::OperatorPrecedence\29
+2125:SkSL::ExpressionArray::clone\28\29\20const
+2126:SkSL::Context::~Context\28\29
+2127:SkSL::Compiler::errorText\28bool\29
+2128:SkSL::Compiler::convertProgram\28SkSL::ProgramKind\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20SkSL::ProgramSettings\29
+2129:SkSL::Analysis::DetectVarDeclarationWithoutScope\28SkSL::Statement\20const&\2c\20SkSL::ErrorReporter*\29
+2130:SkRuntimeShaderBuilder::SkRuntimeShaderBuilder\28sk_sp<SkRuntimeEffect>\29
+2131:SkRuntimeEffect::getRPProgram\28SkSL::DebugTracePriv*\29\20const
+2132:SkRegion::getBoundaryPath\28SkPath*\29\20const
+2133:SkRegion::Spanerator::next\28int*\2c\20int*\29
+2134:SkRegion::SkRegion\28SkRegion\20const&\29
+2135:SkReduceOrder::Quad\28SkPoint\20const*\2c\20SkPoint*\29
+2136:SkReadBuffer::skipByteArray\28unsigned\20long*\29
+2137:SkReadBuffer::readSampling\28\29
+2138:SkReadBuffer::readRect\28\29
+2139:SkReadBuffer::readRRect\28SkRRect*\29
+2140:SkReadBuffer::readPoint\28SkPoint*\29
+2141:SkReadBuffer::readPad32\28void*\2c\20unsigned\20long\29
+2142:SkReadBuffer::readArray\28void*\2c\20unsigned\20long\2c\20unsigned\20long\29
+2143:SkReadBuffer::checkInt\28int\2c\20int\29
+2144:SkRasterPipeline::append_matrix\28SkArenaAlloc*\2c\20SkMatrix\20const&\29
+2145:SkQuads::RootsReal\28double\2c\20double\2c\20double\2c\20double*\29
+2146:SkQuadraticEdge::updateQuadratic\28\29
+2147:SkPngCodec::~SkPngCodec\28\29.1
+2148:SkPngCodec::processData\28\29
+2149:SkPixmap::readPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\29\20const
+2150:SkPictureRecord::~SkPictureRecord\28\29
+2151:SkPicture::~SkPicture\28\29.1
+2152:SkPathStroker::quadStroke\28SkPoint\20const*\2c\20SkQuadConstruct*\29
+2153:SkPathStroker::preJoinTo\28SkPoint\20const&\2c\20SkPoint*\2c\20SkPoint*\2c\20bool\29
+2154:SkPathStroker::intersectRay\28SkQuadConstruct*\2c\20SkPathStroker::IntersectRayType\29\20const
+2155:SkPathStroker::cubicStroke\28SkPoint\20const*\2c\20SkQuadConstruct*\29
+2156:SkPathStroker::conicStroke\28SkConic\20const&\2c\20SkQuadConstruct*\29
+2157:SkPathMeasure::isClosed\28\29
+2158:SkPathEffectBase::getFlattenableType\28\29\20const
+2159:SkPathBuilder::moveTo\28SkPoint\29
+2160:SkPathBuilder::incReserve\28int\2c\20int\29
+2161:SkPathBuilder::addRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+2162:SkPath::isLastContourClosed\28\29\20const
+2163:SkPath::addRRect\28SkRRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+2164:SkPaintToGrPaintReplaceShader\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+2165:SkPaint::setStrokeMiter\28float\29
+2166:SkPaint::setStrokeJoin\28SkPaint::Join\29
+2167:SkOpSpanBase::mergeMatches\28SkOpSpanBase*\29
+2168:SkOpSpanBase::addOpp\28SkOpSpanBase*\29
+2169:SkOpSegment::subDivide\28SkOpSpanBase\20const*\2c\20SkOpSpanBase\20const*\2c\20SkDCurve*\29\20const
+2170:SkOpSegment::release\28SkOpSpan\20const*\29
+2171:SkOpSegment::operand\28\29\20const
+2172:SkOpSegment::moveNearby\28\29
+2173:SkOpSegment::markDone\28SkOpSpan*\29
+2174:SkOpSegment::markAndChaseDone\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20SkOpSpanBase**\29
+2175:SkOpSegment::isClose\28double\2c\20SkOpSegment\20const*\29\20const
+2176:SkOpSegment::init\28SkPoint*\2c\20float\2c\20SkOpContour*\2c\20SkPath::Verb\29
+2177:SkOpSegment::addT\28double\2c\20SkPoint\20const&\29
+2178:SkOpCoincidence::fixUp\28SkOpPtT*\2c\20SkOpPtT\20const*\29
+2179:SkOpCoincidence::add\28SkOpPtT*\2c\20SkOpPtT*\2c\20SkOpPtT*\2c\20SkOpPtT*\29
+2180:SkOpCoincidence::addMissing\28bool*\29
+2181:SkOpCoincidence::addIfMissing\28SkOpPtT\20const*\2c\20SkOpPtT\20const*\2c\20double\2c\20double\2c\20SkOpSegment*\2c\20SkOpSegment*\2c\20bool*\29
+2182:SkOpCoincidence::addExpanded\28\29
+2183:SkOpAngle::set\28SkOpSpanBase*\2c\20SkOpSpanBase*\29
+2184:SkOpAngle::lineOnOneSide\28SkDPoint\20const&\2c\20SkDVector\20const&\2c\20SkOpAngle\20const*\2c\20bool\29\20const
+2185:SkNoPixelsDevice::ClipState::op\28SkClipOp\2c\20SkM44\20const&\2c\20SkRect\20const&\2c\20bool\2c\20bool\29
+2186:SkMemoryStream::Make\28sk_sp<SkData>\29
+2187:SkMatrix\20skif::Mapping::map<SkMatrix>\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+2188:SkMatrixPriv::DifferentialAreaScale\28SkMatrix\20const&\2c\20SkPoint\20const&\29
+2189:SkMatrix::writeToMemory\28void*\29\20const
+2190:SkMatrix::preservesRightAngles\28float\29\20const
+2191:SkM44::normalizePerspective\28\29
+2192:SkLatticeIter::~SkLatticeIter\28\29
+2193:SkLatticeIter::next\28SkIRect*\2c\20SkRect*\2c\20bool*\2c\20unsigned\20int*\29
+2194:SkJSONWriter::endObject\28\29
+2195:SkJSONWriter::endArray\28\29
+2196:SkImage_Lazy::Validator::Validator\28sk_sp<SharedGenerator>\2c\20SkColorType\20const*\2c\20sk_sp<SkColorSpace>\29
+2197:SkImageShader::MakeSubset\28sk_sp<SkImage>\2c\20SkRect\20const&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const*\2c\20bool\29
+2198:SkImageGenerator::onRefEncodedData\28\29
+2199:SkImageFilters::Image\28sk_sp<SkImage>\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\29
+2200:SkImageFilters::Empty\28\29
+2201:SkImage::width\28\29\20const
+2202:SkImage::readPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+2203:SkHalfToFloat\28unsigned\20short\29
+2204:SkGradientShader::MakeSweep\28float\2c\20float\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+2205:SkGradientShader::MakeRadial\28SkPoint\20const&\2c\20float\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+2206:SkGradientBaseShader::commonAsAGradient\28SkShaderBase::GradientInfo*\29\20const
+2207:SkGradientBaseShader::ValidGradient\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\29
+2208:SkGradientBaseShader::SkGradientBaseShader\28SkGradientBaseShader::Descriptor\20const&\2c\20SkMatrix\20const&\29
+2209:SkGradientBaseShader::MakeDegenerateGradient\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20float\20const*\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20SkTileMode\29
+2210:SkGradientBaseShader::Descriptor::~Descriptor\28\29
+2211:SkGradientBaseShader::Descriptor::Descriptor\28SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\29
+2212:SkGlyph::setPath\28SkArenaAlloc*\2c\20SkPath\20const*\2c\20bool\29
+2213:SkFont::setSize\28float\29
+2214:SkEvalQuadAt\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\29
+2215:SkEncodedInfo::~SkEncodedInfo\28\29
+2216:SkEncodedInfo::makeImageInfo\28\29\20const
+2217:SkEmptyFontMgr::onMakeFromStreamIndex\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20int\29\20const
+2218:SkDrawableList::~SkDrawableList\28\29
+2219:SkDrawable::draw\28SkCanvas*\2c\20SkMatrix\20const*\29
+2220:SkDevice::setDeviceCoordinateSystem\28SkM44\20const&\2c\20SkM44\20const&\2c\20SkM44\20const&\2c\20int\2c\20int\29
+2221:SkData::PrivateNewWithCopy\28void\20const*\2c\20unsigned\20long\29::$_0::operator\28\29\28\29\20const
+2222:SkDashPathEffect::Make\28float\20const*\2c\20int\2c\20float\29
+2223:SkDQuad::monotonicInX\28\29\20const
+2224:SkDCubic::dxdyAtT\28double\29\20const
+2225:SkDCubic::RootsValidT\28double\2c\20double\2c\20double\2c\20double\2c\20double*\29
+2226:SkCubicEdge::updateCubic\28\29
+2227:SkConicalGradient::~SkConicalGradient\28\29
+2228:SkColorSpace::serialize\28\29\20const
+2229:SkColorSpace::MakeSRGBLinear\28\29
+2230:SkColorFilterPriv::MakeGaussian\28\29
+2231:SkColorConverter::SkColorConverter\28unsigned\20int\20const*\2c\20int\29
+2232:SkCodec::startScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const*\29
+2233:SkCodec::handleFrameIndex\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20std::__2::function<SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>\29
+2234:SkCodec::getScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+2235:SkChopQuadAtYExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+2236:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\20const*\2c\20int\29
+2237:SkChopCubicAtYExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+2238:SkCharToGlyphCache::SkCharToGlyphCache\28\29
+2239:SkCanvas::peekPixels\28SkPixmap*\29
+2240:SkCanvas::getTotalMatrix\28\29\20const
+2241:SkCanvas::getLocalToDevice\28\29\20const
+2242:SkCanvas::getLocalClipBounds\28\29\20const
+2243:SkCanvas::drawImageLattice\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+2244:SkCanvas::drawAtlas\28SkImage\20const*\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20SkBlendMode\2c\20SkSamplingOptions\20const&\2c\20SkRect\20const*\2c\20SkPaint\20const*\29
+2245:SkCanvas::concat\28SkM44\20const&\29
+2246:SkCanvas::SkCanvas\28SkBitmap\20const&\29
+2247:SkCanvas::ImageSetEntry::ImageSetEntry\28SkCanvas::ImageSetEntry\20const&\29
+2248:SkBlitter::blitRectRegion\28SkIRect\20const&\2c\20SkRegion\20const&\29
+2249:SkBlendMode_ShouldPreScaleCoverage\28SkBlendMode\2c\20bool\29
+2250:SkBlendMode_AppendStages\28SkBlendMode\2c\20SkRasterPipeline*\29
+2251:SkBitmap::tryAllocPixels\28SkBitmap::Allocator*\29
+2252:SkBitmap::readPixels\28SkPixmap\20const&\2c\20int\2c\20int\29\20const
+2253:SkBitmap::readPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\29\20const
+2254:SkBitmap::installPixels\28SkPixmap\20const&\29
+2255:SkBitmap::allocPixels\28SkImageInfo\20const&\29
+2256:SkBitmap::SkBitmap\28SkBitmap&&\29
+2257:SkBaseShadowTessellator::handleQuad\28SkPoint\20const*\29
+2258:SkAAClip::~SkAAClip\28\29
+2259:SkAAClip::setPath\28SkPath\20const&\2c\20SkIRect\20const&\2c\20bool\29
+2260:SkAAClip::op\28SkAAClip\20const&\2c\20SkClipOp\29
+2261:OT::hb_ot_layout_lookup_accelerator_t*\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GSUB_impl::SubstLookup>\28OT::Layout::GSUB_impl::SubstLookup\20const&\29
+2262:OT::hb_ot_apply_context_t::replace_glyph\28unsigned\20int\29
+2263:OT::apply_lookup\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20OT::LookupRecord\20const*\2c\20unsigned\20int\29
+2264:OT::Layout::GPOS_impl::ValueFormat::get_device\28OT::IntType<unsigned\20short\2c\202u>\20const*\2c\20bool*\2c\20void\20const*\2c\20hb_sanitize_context_t&\29
+2265:OT::Layout::GPOS_impl::AnchorFormat3::get_anchor\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20float*\2c\20float*\29\20const
+2266:OT::Layout::GPOS_impl::AnchorFormat2::get_anchor\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20float*\2c\20float*\29\20const
+2267:OT::ClassDef::get_class\28unsigned\20int\29\20const
+2268:JpegDecoderMgr::~JpegDecoderMgr\28\29
+2269:GrTriangulator::simplify\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29
+2270:GrTriangulator::setTop\28GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+2271:GrTriangulator::mergeCoincidentVertices\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29\20const
+2272:GrTriangulator::Vertex*\20SkArenaAlloc::make<GrTriangulator::Vertex\2c\20SkPoint&\2c\20int>\28SkPoint&\2c\20int&&\29
+2273:GrThreadSafeCache::remove\28skgpu::UniqueKey\20const&\29
+2274:GrThreadSafeCache::internalFind\28skgpu::UniqueKey\20const&\29
+2275:GrThreadSafeCache::internalAdd\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&\29
+2276:GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29
+2277:GrTexture::markMipmapsClean\28\29
+2278:GrTessellationShader::MakePipeline\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAAType\2c\20GrAppliedClip&&\2c\20GrProcessorSet&&\29
+2279:GrSurfaceProxyView::concatSwizzle\28skgpu::Swizzle\29
+2280:GrSurfaceProxy::LazyCallbackResult::LazyCallbackResult\28sk_sp<GrTexture>\29
+2281:GrSurfaceProxy::Copy\28GrRecordingContext*\2c\20sk_sp<GrSurfaceProxy>\2c\20GrSurfaceOrigin\2c\20skgpu::Mipmapped\2c\20SkIRect\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20GrSurfaceProxy::RectsMustMatch\2c\20sk_sp<GrRenderTask>*\29
+2282:GrStyledShape::GrStyledShape\28SkPath\20const&\2c\20GrStyle\20const&\2c\20GrStyledShape::DoSimplify\29
+2283:GrStyledShape::GrStyledShape\28GrStyledShape\20const&\2c\20GrStyle::Apply\2c\20float\29
+2284:GrSimpleMeshDrawOpHelper::CreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrPipeline\20const*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrGeometryProcessor*\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags\2c\20GrLoadOp\2c\20GrUserStencilSettings\20const*\29
+2285:GrShape::simplifyLine\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20int\29
+2286:GrShape::reset\28\29
+2287:GrShape::conservativeContains\28SkPoint\20const&\29\20const
+2288:GrSWMaskHelper::init\28SkIRect\20const&\29
+2289:GrResourceProvider::createNonAAQuadIndexBuffer\28\29
+2290:GrResourceProvider::createBuffer\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\2c\20GrResourceProvider::ZeroInit\29
+2291:GrResourceCache::refAndMakeResourceMRU\28GrGpuResource*\29
+2292:GrResourceCache::findAndRefUniqueResource\28skgpu::UniqueKey\20const&\29
+2293:GrRenderTask::addTarget\28GrDrawingManager*\2c\20sk_sp<GrSurfaceProxy>\29
+2294:GrRenderTarget::~GrRenderTarget\28\29.1
+2295:GrQuadUtils::WillUseHairline\28GrQuad\20const&\2c\20GrAAType\2c\20GrQuadAAFlags\29
+2296:GrQuadUtils::CropToRect\28SkRect\20const&\2c\20GrAA\2c\20DrawQuad*\2c\20bool\29
+2297:GrProxyProvider::processInvalidUniqueKey\28skgpu::UniqueKey\20const&\2c\20GrTextureProxy*\2c\20GrProxyProvider::InvalidateGPUResource\29
+2298:GrPorterDuffXPFactory::Get\28SkBlendMode\29
+2299:GrPixmap::operator=\28GrPixmap&&\29
+2300:GrPathUtils::scaleToleranceToSrc\28float\2c\20SkMatrix\20const&\2c\20SkRect\20const&\29
+2301:GrPathUtils::quadraticPointCount\28SkPoint\20const*\2c\20float\29
+2302:GrPathUtils::cubicPointCount\28SkPoint\20const*\2c\20float\29
+2303:GrPaint::setPorterDuffXPFactory\28SkBlendMode\29
+2304:GrPaint::GrPaint\28GrPaint\20const&\29
+2305:GrOpsRenderPass::draw\28int\2c\20int\29
+2306:GrOpsRenderPass::drawInstanced\28int\2c\20int\2c\20int\2c\20int\29
+2307:GrMeshDrawOp::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+2308:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29
+2309:GrGradientShader::MakeGradientFP\28SkGradientBaseShader\20const&\2c\20GrFPArgs\20const&\2c\20SkShaders::MatrixRec\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkMatrix\20const*\29
+2310:GrGpuResource::getContext\28\29
+2311:GrGpu::writePixels\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20bool\29
+2312:GrGLTexture::onSetLabel\28\29
+2313:GrGLTexture::onRelease\28\29
+2314:GrGLTexture::onAbandon\28\29
+2315:GrGLTexture::backendFormat\28\29\20const
+2316:GrGLSLShaderBuilder::appendFunctionDecl\28SkSLType\2c\20char\20const*\2c\20SkSpan<GrShaderVar\20const>\29
+2317:GrGLSLShaderBuilder::appendColorGamutXform\28SkString*\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+2318:GrGLSLProgramBuilder::fragmentProcessorHasCoordsParam\28GrFragmentProcessor\20const*\29\20const
+2319:GrGLRenderTarget::onRelease\28\29
+2320:GrGLRenderTarget::onAbandon\28\29
+2321:GrGLGpu::resolveRenderFBOs\28GrGLRenderTarget*\2c\20SkIRect\20const&\2c\20GrGLRenderTarget::ResolveDirection\2c\20bool\29
+2322:GrGLGpu::flushBlendAndColorWrite\28skgpu::BlendInfo\20const&\2c\20skgpu::Swizzle\20const&\29
+2323:GrGLGetVersionFromString\28char\20const*\29
+2324:GrGLCheckLinkStatus\28GrGLGpu\20const*\2c\20unsigned\20int\2c\20skgpu::ShaderErrorHandler*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const**\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\29
+2325:GrGLCaps::maxRenderTargetSampleCount\28GrGLFormat\29\20const
+2326:GrFragmentProcessors::Make\28SkBlenderBase\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrFPArgs\20const&\29
+2327:GrFragmentProcessor::isEqual\28GrFragmentProcessor\20const&\29\20const
+2328:GrFragmentProcessor::asTextureEffect\28\29\20const
+2329:GrFragmentProcessor::Rect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrClipEdgeType\2c\20SkRect\29
+2330:GrFragmentProcessor::ModulateRGBA\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+2331:GrFragmentProcessor::DeviceSpace\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+2332:GrDrawingManager::~GrDrawingManager\28\29
+2333:GrDrawingManager::removeRenderTasks\28\29
+2334:GrDrawingManager::getPathRenderer\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\2c\20bool\2c\20skgpu::ganesh::PathRendererChain::DrawType\2c\20skgpu::ganesh::PathRenderer::StencilSupport*\29
+2335:GrDrawOpAtlas::compact\28skgpu::AtlasToken\29
+2336:GrContext_Base::~GrContext_Base\28\29
+2337:GrContext_Base::defaultBackendFormat\28SkColorType\2c\20skgpu::Renderable\29\20const
+2338:GrColorSpaceXform::XformKey\28GrColorSpaceXform\20const*\29
+2339:GrColorSpaceXform::Make\28SkColorSpace*\2c\20SkAlphaType\2c\20SkColorSpace*\2c\20SkAlphaType\29
+2340:GrColorSpaceXform::Make\28GrColorInfo\20const&\2c\20GrColorInfo\20const&\29
+2341:GrColorInfo::operator=\28GrColorInfo\20const&\29
+2342:GrCaps::supportedReadPixelsColorType\28GrColorType\2c\20GrBackendFormat\20const&\2c\20GrColorType\29\20const
+2343:GrCaps::getFallbackColorTypeAndFormat\28GrColorType\2c\20int\29\20const
+2344:GrCaps::areColorTypeAndFormatCompatible\28GrColorType\2c\20GrBackendFormat\20const&\29\20const
+2345:GrBufferAllocPool::~GrBufferAllocPool\28\29
+2346:GrBlurUtils::GaussianBlur\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkIRect\2c\20float\2c\20float\2c\20SkTileMode\2c\20SkBackingFit\29
+2347:GrBlurUtils::DrawShapeWithMaskFilter\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrClip\20const*\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20GrStyledShape\20const&\29
+2348:GrBaseContextPriv::getShaderErrorHandler\28\29\20const
+2349:GrBackendTexture::GrBackendTexture\28GrBackendTexture\20const&\29
+2350:GrBackendRenderTarget::getBackendFormat\28\29\20const
+2351:GrBackendFormat::operator==\28GrBackendFormat\20const&\29\20const
+2352:GrAAConvexTessellator::createOuterRing\28GrAAConvexTessellator::Ring\20const&\2c\20float\2c\20float\2c\20GrAAConvexTessellator::Ring*\29
+2353:GrAAConvexTessellator::createInsetRings\28GrAAConvexTessellator::Ring&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20GrAAConvexTessellator::Ring**\29
+2354:FindSortableTop\28SkOpContourHead*\29
+2355:FT_Set_Charmap
+2356:FT_Outline_Decompose
+2357:FT_New_Size
+2358:FT_Load_Sfnt_Table
+2359:FT_GlyphLoader_Add
+2360:FT_Get_Color_Glyph_Paint
+2361:FT_Get_Color_Glyph_Layer
+2362:FT_Get_Advance
+2363:FT_CMap_New
+2364:Current_Ratio
+2365:Cr_z__tr_stored_block
+2366:ClipParams_unpackRegionOp\28SkReadBuffer*\2c\20unsigned\20int\29
+2367:CircleOp::Circle&\20skia_private::TArray<CircleOp::Circle\2c\20true>::emplace_back<CircleOp::Circle>\28CircleOp::Circle&&\29
+2368:CFF::CFFIndex<OT::IntType<unsigned\20int\2c\204u>>::sanitize\28hb_sanitize_context_t*\29\20const
+2369:AlmostEqualUlps_Pin\28float\2c\20float\29
+2370:wuffs_lzw__decoder__workbuf_len
+2371:wuffs_gif__decoder__decode_image_config
+2372:wuffs_gif__decoder__decode_frame_config
+2373:wrap_proxy_in_image\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20SkColorInfo\20const&\29
+2374:winding_mono_quad\28SkPoint\20const*\2c\20float\2c\20float\2c\20int*\29
+2375:winding_mono_conic\28SkConic\20const&\2c\20float\2c\20float\2c\20int*\29
+2376:wcrtomb
+2377:wchar_t\20const*\20std::__2::find\5babi:v160004\5d<wchar_t\20const*\2c\20wchar_t>\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const&\29
+2378:void\20std::__2::vector<std::__2::shared_ptr<SkSL::SymbolTable>\2c\20std::__2::allocator<std::__2::shared_ptr<SkSL::SymbolTable>>>::__push_back_slow_path<std::__2::shared_ptr<SkSL::SymbolTable>>\28std::__2::shared_ptr<SkSL::SymbolTable>&&\29
+2379:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20std::__2::iterator_traits<skia::textlayout::OneLineShaper::RunBlock*>::difference_type\29
+2380:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20std::__2::iterator_traits<\28anonymous\20namespace\29::Entry*>::difference_type\29
+2381:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20std::__2::iterator_traits<SkSL::ProgramElement\20const**>::difference_type\29
+2382:void\20std::__2::__introsort<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20std::__2::iterator_traits<SkSL::FunctionDefinition\20const**>::difference_type\29
+2383:void\20std::__2::__inplace_merge<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>\28std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::value_type*\2c\20long\29
+2384:void\20sort_r_simple<void*>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\2c\20void*\29\2c\20void*\29
+2385:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29.3
+2386:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29
+2387:void\20SkTIntroSort<double\2c\20void\20SkTQSort<double>\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29>\28int\2c\20double*\2c\20int\2c\20void\20SkTQSort<double>\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29\20const&\29
+2388:void\20SkTIntroSort<SkEdge*\2c\20void\20SkTQSort<SkEdge>\28SkEdge**\2c\20SkEdge**\29::'lambda'\28SkEdge\20const*\2c\20SkEdge\20const*\29>\28int\2c\20SkEdge*\2c\20int\2c\20void\20SkTQSort<SkEdge>\28SkEdge**\2c\20SkEdge**\29::'lambda'\28SkEdge\20const*\2c\20SkEdge\20const*\29\20const&\29
+2389:vfprintf
+2390:valid_args\28SkImageInfo\20const&\2c\20unsigned\20long\2c\20unsigned\20long*\29
+2391:update_offset_to_base\28char\20const*\2c\20long\29
+2392:update_box
+2393:unsigned\20long\20const&\20std::__2::min\5babi:v160004\5d<unsigned\20long>\28unsigned\20long\20const&\2c\20unsigned\20long\20const&\29
+2394:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+2395:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+2396:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+2397:unsigned\20int\20std::__2::__sort5_wrap_policy\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+2398:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+2399:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+2400:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+2401:unsigned\20int\20std::__2::__sort4\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+2402:ubidi_openSized_skia
+2403:ubidi_getLevelAt_skia
+2404:u_charMirror_skia
+2405:tt_size_reset
+2406:tt_sbit_decoder_load_metrics
+2407:tt_face_get_location
+2408:tt_face_find_bdf_prop
+2409:tolower
+2410:toTextStyle\28SimpleTextStyle\20const&\29
+2411:t1_cmap_unicode_done
+2412:subdivide_cubic_to\28SkPath*\2c\20SkPoint\20const*\2c\20int\29
+2413:subdivide\28SkConic\20const&\2c\20SkPoint*\2c\20int\29
+2414:strtox
+2415:strtoull_l
+2416:strtod
+2417:std::logic_error::~logic_error\28\29.1
+2418:std::__2::vector<float\2c\20std::__2::allocator<float>>::push_back\5babi:v160004\5d\28float&&\29
+2419:std::__2::vector<float\2c\20std::__2::allocator<float>>::__append\28unsigned\20long\29
+2420:std::__2::vector<SkSL::SlotDebugInfo\2c\20std::__2::allocator<SkSL::SlotDebugInfo>>::reserve\28unsigned\20long\29
+2421:std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>::push_back\5babi:v160004\5d\28SkRGBA4f<\28SkAlphaType\293>\20const&\29
+2422:std::__2::unique_ptr<\28anonymous\20namespace\29::SoftwarePathData\2c\20std::__2::default_delete<\28anonymous\20namespace\29::SoftwarePathData>>::reset\5babi:v160004\5d\28\28anonymous\20namespace\29::SoftwarePathData*\29
+2423:std::__2::time_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::~time_put\28\29.1
+2424:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>>::~pair\28\29
+2425:std::__2::pair<char\20const*\2c\20char*>\20std::__2::__copy_trivial::operator\28\29\5babi:v160004\5d<char\20const\2c\20char\2c\200>\28char\20const*\2c\20char\20const*\2c\20char*\29\20const
+2426:std::__2::locale::operator=\28std::__2::locale\20const&\29
+2427:std::__2::locale::locale\28\29
+2428:std::__2::iterator_traits<unsigned\20int\20const*>::difference_type\20std::__2::distance\5babi:v160004\5d<unsigned\20int\20const*>\28unsigned\20int\20const*\2c\20unsigned\20int\20const*\29
+2429:std::__2::ios_base::~ios_base\28\29
+2430:std::__2::fpos<__mbstate_t>::fpos\5babi:v160004\5d\28long\20long\29
+2431:std::__2::enable_if<is_move_constructible<SkAnimatedImage::Frame>::value\20&&\20is_move_assignable<SkAnimatedImage::Frame>::value\2c\20void>::type\20std::__2::swap\5babi:v160004\5d<SkAnimatedImage::Frame>\28SkAnimatedImage::Frame&\2c\20SkAnimatedImage::Frame&\29
+2432:std::__2::decay<decltype\28__to_address_helper<std::__2::__wrap_iter<char\20const*>>::__call\28std::declval<std::__2::__wrap_iter<char\20const*>\20const&>\28\29\29\29>::type\20std::__2::__to_address\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20void>\28std::__2::__wrap_iter<char\20const*>\20const&\29
+2433:std::__2::chrono::duration<long\20long\2c\20std::__2::ratio<1ll\2c\201ll>>::duration\5babi:v160004\5d<long\20long>\28long\20long\20const&\2c\20std::__2::enable_if<is_convertible<long\20long\20const&\2c\20long\20long>::value\20&&\20\28std::__2::integral_constant<bool\2c\20false>::value\20||\20!treat_as_floating_point<long\20long>::value\29\2c\20void>::type*\29
+2434:std::__2::char_traits<char>::move\28char*\2c\20char\20const*\2c\20unsigned\20long\29
+2435:std::__2::char_traits<char>::assign\28char*\2c\20unsigned\20long\2c\20char\29
+2436:std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29.2
+2437:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringbuf\28\29
+2438:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::push_back\28wchar_t\29
+2439:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::capacity\5babi:v160004\5d\28\29\20const
+2440:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d<char*\2c\20void>\28char*\2c\20char*\2c\20std::__2::allocator<char>\20const&\29
+2441:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__make_iterator\5babi:v160004\5d\28char*\29
+2442:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__grow_by\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+2443:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::setp\5babi:v160004\5d\28char*\2c\20char*\29
+2444:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29.1
+2445:std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29.1
+2446:std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.2
+2447:std::__2::__wrap_iter<wchar_t*>::operator+\5babi:v160004\5d\28long\29\20const
+2448:std::__2::__wrap_iter<char*>::operator+\5babi:v160004\5d\28long\29\20const
+2449:std::__2::__unique_if<SkSL::ConstructorStruct>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorStruct\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+2450:std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorArray\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+2451:std::__2::__throw_out_of_range\5babi:v160004\5d\28char\20const*\29
+2452:std::__2::__throw_length_error\5babi:v160004\5d\28char\20const*\29
+2453:std::__2::__optional_destruct_base<GrStyledShape\2c\20false>::reset\5babi:v160004\5d\28\29
+2454:std::__2::__num_get<wchar_t>::__stage2_float_prep\28std::__2::ios_base&\2c\20wchar_t*\2c\20wchar_t&\2c\20wchar_t&\29
+2455:std::__2::__num_get<wchar_t>::__stage2_float_loop\28wchar_t\2c\20bool&\2c\20char&\2c\20char*\2c\20char*&\2c\20wchar_t\2c\20wchar_t\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20unsigned\20int&\2c\20wchar_t*\29
+2456:std::__2::__num_get<char>::__stage2_float_prep\28std::__2::ios_base&\2c\20char*\2c\20char&\2c\20char&\29
+2457:std::__2::__num_get<char>::__stage2_float_loop\28char\2c\20bool&\2c\20char&\2c\20char*\2c\20char*&\2c\20char\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20unsigned\20int&\2c\20char*\29
+2458:std::__2::__libcpp_wcrtomb_l\5babi:v160004\5d\28char*\2c\20wchar_t\2c\20__mbstate_t*\2c\20__locale_struct*\29
+2459:std::__2::__less<unsigned\20int\2c\20unsigned\20long>::operator\28\29\5babi:v160004\5d\28unsigned\20int\20const&\2c\20unsigned\20long\20const&\29\20const
+2460:std::__2::__itoa::__base_10_u32\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2461:std::__2::__itoa::__append6\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2462:std::__2::__itoa::__append4\5babi:v160004\5d\28char*\2c\20unsigned\20int\29
+2463:sktext::gpu::VertexFiller::flatten\28SkWriteBuffer&\29\20const
+2464:sktext::gpu::VertexFiller::Make\28skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20SkRect\2c\20SkSpan<SkPoint\20const>\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::FillerType\29
+2465:sktext::gpu::VertexFiller::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\29
+2466:sktext::gpu::SubRunContainer::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20SkRefCnt\20const*\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+2467:sktext::gpu::SubRunAllocator::SubRunAllocator\28int\29
+2468:sktext::gpu::MakePointsFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\29
+2469:sktext::gpu::GlyphVector::flatten\28SkWriteBuffer&\29\20const
+2470:sktext::gpu::GlyphVector::Make\28sktext::SkStrikePromise&&\2c\20SkSpan<SkPackedGlyphID\20const>\2c\20sktext::gpu::SubRunAllocator*\29
+2471:sktext::gpu::GlyphVector::MakeFromBuffer\28SkReadBuffer&\2c\20SkStrikeClient\20const*\2c\20sktext::gpu::SubRunAllocator*\29
+2472:sktext::SkStrikePromise::flatten\28SkWriteBuffer&\29\20const
+2473:sktext::SkStrikePromise::MakeFromBuffer\28SkReadBuffer&\2c\20SkStrikeClient\20const*\2c\20SkStrikeCache*\29
+2474:sktext::GlyphRunBuilder::makeGlyphRunList\28sktext::GlyphRun\20const&\2c\20SkPaint\20const&\2c\20SkPoint\29
+2475:sktext::GlyphRun::GlyphRun\28SkFont\20const&\2c\20SkSpan<SkPoint\20const>\2c\20SkSpan<unsigned\20short\20const>\2c\20SkSpan<char\20const>\2c\20SkSpan<unsigned\20int\20const>\2c\20SkSpan<SkPoint\20const>\29
+2476:skpaint_to_grpaint_impl\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20std::__2::optional<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\2c\20SkBlender*\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+2477:skip_literal_string
+2478:skif::\28anonymous\20namespace\29::apply_decal\28skif::LayerSpace<SkMatrix>\20const&\2c\20sk_sp<SkSpecialImage>\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20SkSamplingOptions\20const&\29
+2479:skif::RoundIn\28SkRect\29
+2480:skif::FilterResult::Builder::outputBounds\28std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+2481:skif::FilterResult::Builder::drawShader\28sk_sp<SkShader>\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20bool\29\20const
+2482:skif::FilterResult::Builder::createInputShaders\28skif::LayerSpace<SkIRect>\20const&\2c\20bool\29
+2483:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair>::resize\28int\29
+2484:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\2c\20SkGoodHash>::Pair>::resize\28int\29
+2485:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20int\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20int\2c\20SkGoodHash>::Pair>::removeSlot\28int\29
+2486:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20GrRenderTask*\2c\20GrCheapHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20GrRenderTask*\2c\20GrCheapHash>::Pair>::resize\28int\29
+2487:skia_private::THashTable<skia_private::THashMap<char\20const*\2c\20unsigned\20int\2c\20SkGoodHash>::Pair\2c\20char\20const*\2c\20skia_private::THashMap<char\20const*\2c\20unsigned\20int\2c\20SkGoodHash>::Pair>::resize\28int\29
+2488:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\2c\20SkSL::SymbolTable::SymbolKey\2c\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::resize\28int\29
+2489:skia_private::THashTable<skia_private::THashMap<SkSL::IRNode\20const*\2c\20SkSL::RP::SlotRange\2c\20SkGoodHash>::Pair\2c\20SkSL::IRNode\20const*\2c\20skia_private::THashMap<SkSL::IRNode\20const*\2c\20SkSL::RP::SlotRange\2c\20SkGoodHash>::Pair>::resize\28int\29
+2490:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::remove\28skgpu::ganesh::SmallPathShapeDataKey\20const&\29
+2491:skia_private::THashTable<int\2c\20int\2c\20skia_private::THashSet<int\2c\20SkGoodHash>::Traits>::resize\28int\29
+2492:skia_private::THashTable<SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Entry*\2c\20unsigned\20int\2c\20SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Traits>::resize\28int\29
+2493:skia_private::THashTable<SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*\2c\20GrProgramDesc\2c\20SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Traits>::find\28GrProgramDesc\20const&\29\20const
+2494:skia_private::THashTable<GrThreadSafeCache::Entry*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\2c\20GrThreadSafeCache::Entry>::AdaptedTraits>::uncheckedSet\28GrThreadSafeCache::Entry*&&\29
+2495:skia_private::THashTable<GrThreadSafeCache::Entry*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\2c\20GrThreadSafeCache::Entry>::AdaptedTraits>::resize\28int\29
+2496:skia_private::THashTable<GrThreadSafeCache::Entry*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\2c\20GrThreadSafeCache::Entry>::AdaptedTraits>::remove\28skgpu::UniqueKey\20const&\29
+2497:skia_private::THashTable<GrTextureProxy*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrTextureProxy\2c\20skgpu::UniqueKey\2c\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::uncheckedSet\28GrTextureProxy*&&\29
+2498:skia_private::THashTable<GrTextureProxy*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrTextureProxy\2c\20skgpu::UniqueKey\2c\20GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::resize\28int\29
+2499:skia_private::THashTable<FT_Opaque_Paint_\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>::Traits>::uncheckedSet\28FT_Opaque_Paint_&&\29
+2500:skia_private::THashTable<FT_Opaque_Paint_\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>::Traits>::resize\28int\29
+2501:skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::~THashMap\28\29
+2502:skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::find\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\20const&\29\20const
+2503:skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::THashMap\28std::initializer_list<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair>\29
+2504:skia_private::THashMap<SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20SkGoodHash>::set\28SkSL::Variable\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+2505:skia_png_write_chunk
+2506:skia_png_set_sBIT
+2507:skia_png_set_read_fn
+2508:skia_png_set_packing
+2509:skia_png_set_bKGD
+2510:skia_png_save_uint_32
+2511:skia_png_reciprocal2
+2512:skia_png_realloc_array
+2513:skia_png_read_start_row
+2514:skia_png_read_IDAT_data
+2515:skia_png_handle_zTXt
+2516:skia_png_handle_tRNS
+2517:skia_png_handle_tIME
+2518:skia_png_handle_tEXt
+2519:skia_png_handle_sRGB
+2520:skia_png_handle_sPLT
+2521:skia_png_handle_sCAL
+2522:skia_png_handle_sBIT
+2523:skia_png_handle_pHYs
+2524:skia_png_handle_pCAL
+2525:skia_png_handle_oFFs
+2526:skia_png_handle_iTXt
+2527:skia_png_handle_iCCP
+2528:skia_png_handle_hIST
+2529:skia_png_handle_gAMA
+2530:skia_png_handle_cHRM
+2531:skia_png_handle_bKGD
+2532:skia_png_handle_as_unknown
+2533:skia_png_handle_PLTE
+2534:skia_png_do_strip_channel
+2535:skia_png_destroy_read_struct
+2536:skia_png_destroy_info_struct
+2537:skia_png_compress_IDAT
+2538:skia_png_combine_row
+2539:skia_png_colorspace_set_sRGB
+2540:skia_png_check_fp_string
+2541:skia_png_check_fp_number
+2542:skia::textlayout::TypefaceFontStyleSet::createTypeface\28int\29
+2543:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::$_0::operator\28\29\28sk_sp<SkTypeface>\2c\20bool\29\20const
+2544:skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const
+2545:skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29
+2546:skia::textlayout::Run::isResolved\28\29\20const
+2547:skia::textlayout::Run::copyTo\28SkTextBlobBuilder&\2c\20unsigned\20long\2c\20unsigned\20long\29\20const
+2548:skia::textlayout::ParagraphImpl::buildClusterTable\28\29
+2549:skia::textlayout::ParagraphBuilderImpl::ensureUTF16Mapping\28\29
+2550:skia::textlayout::OneLineShaper::~OneLineShaper\28\29
+2551:skia::textlayout::FontCollection::setDefaultFontManager\28sk_sp<SkFontMgr>\29
+2552:skia::textlayout::FontCollection::getFontManagerOrder\28\29\20const
+2553:skia::textlayout::FontCollection::FontCollection\28\29
+2554:skia::textlayout::Cluster::isSoftBreak\28\29\20const
+2555:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::flush\28GrMeshDrawTarget*\2c\20skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::FlushInfo*\29\20const
+2556:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::~Impl\28\29
+2557:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::programInfo\28\29
+2558:skgpu::ganesh::SurfaceFillContext::discard\28\29
+2559:skgpu::ganesh::SurfaceDrawContext::internalStencilClear\28SkIRect\20const*\2c\20bool\29
+2560:skgpu::ganesh::SurfaceDrawContext::drawPath\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrStyle\20const&\29
+2561:skgpu::ganesh::SurfaceDrawContext::attemptQuadOptimization\28GrClip\20const*\2c\20GrUserStencilSettings\20const*\2c\20DrawQuad*\2c\20GrPaint*\29
+2562:skgpu::ganesh::SurfaceDrawContext::Make\28GrRecordingContext*\2c\20GrColorType\2c\20sk_sp<GrSurfaceProxy>\2c\20sk_sp<SkColorSpace>\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const&\29
+2563:skgpu::ganesh::SurfaceContext::rescaleInto\28skgpu::ganesh::SurfaceFillContext*\2c\20SkIRect\2c\20SkIRect\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\29::$_0::operator\28\29\28GrSurfaceProxyView\2c\20SkIRect\29\20const
+2564:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29
+2565:skgpu::ganesh::QuadPerEdgeAA::MinColorType\28SkRGBA4f<\28SkAlphaType\292>\29
+2566:skgpu::ganesh::PathRendererChain::PathRendererChain\28GrRecordingContext*\2c\20skgpu::ganesh::PathRendererChain::Options\20const&\29
+2567:skgpu::ganesh::PathCurveTessellator::draw\28GrOpFlushState*\29\20const
+2568:skgpu::ganesh::OpsTask::recordOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const*\2c\20GrCaps\20const&\29
+2569:skgpu::ganesh::FillRectOp::MakeNonAARect\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrUserStencilSettings\20const*\29
+2570:skgpu::ganesh::FillRRectOp::Make\28GrRecordingContext*\2c\20SkArenaAlloc*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20SkRect\20const&\2c\20GrAA\29
+2571:skgpu::ganesh::Device::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+2572:skgpu::ganesh::Device::drawImageQuadDirect\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+2573:skgpu::ganesh::Device::Make\28std::__2::unique_ptr<skgpu::ganesh::SurfaceDrawContext\2c\20std::__2::default_delete<skgpu::ganesh::SurfaceDrawContext>>\2c\20SkAlphaType\2c\20skgpu::ganesh::Device::InitContents\29
+2574:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::setup_dashed_rect\28SkRect\20const&\2c\20skgpu::VertexWriter&\2c\20SkMatrix\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashCap\29
+2575:skgpu::ganesh::ClipStack::SaveRecord::invalidateMasks\28GrProxyProvider*\2c\20SkTBlockList<skgpu::ganesh::ClipStack::Mask\2c\201>*\29
+2576:skgpu::ganesh::ClipStack::RawElement::contains\28skgpu::ganesh::ClipStack::SaveRecord\20const&\29\20const
+2577:skgpu::ganesh::AtlasTextOp::operator\20new\28unsigned\20long\29
+2578:skgpu::ganesh::AtlasTextOp::Geometry::Make\28sktext::gpu::AtlasSubRun\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\2c\20sk_sp<SkRefCnt>&&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkArenaAlloc*\29
+2579:skgpu::ganesh::AtlasRenderTask::addAtlasDrawOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrCaps\20const&\29
+2580:skcms_Transform::$_2::operator\28\29\28skcms_Curve\20const*\2c\20int\29\20const
+2581:skcms_MaxRoundtripError
+2582:sk_free_releaseproc\28void\20const*\2c\20void*\29
+2583:siprintf
+2584:sift
+2585:rotate\28SkDCubic\20const&\2c\20int\2c\20int\2c\20SkDCubic&\29
+2586:read_header\28SkStream*\2c\20SkPngChunkReader*\2c\20SkCodec**\2c\20png_struct_def**\2c\20png_info_def**\29
+2587:read_header\28SkStream*\2c\20SkISize*\29
+2588:quad_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2589:qsort
+2590:psh_globals_set_scale
+2591:ps_parser_skip_PS_token
+2592:ps_builder_done
+2593:portable::uniform_color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+2594:png_text_compress
+2595:png_inflate_read
+2596:png_inflate_claim
+2597:png_image_size
+2598:png_colorspace_endpoints_match
+2599:png_build_16bit_table
+2600:normalize
+2601:next_marker
+2602:morphpoints\28SkPoint*\2c\20SkPoint\20const*\2c\20int\2c\20SkPathMeasure&\2c\20float\29
+2603:make_unpremul_effect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+2604:long\20std::__2::__libcpp_atomic_refcount_decrement\5babi:v160004\5d<long>\28long&\29
+2605:long\20const&\20std::__2::min\5babi:v160004\5d<long>\28long\20const&\2c\20long\20const&\29
+2606:log1p
+2607:load_truetype_glyph
+2608:line_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2609:lang_find_or_insert\28char\20const*\29
+2610:jpeg_calc_output_dimensions
+2611:inner_scanline\28int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkBlitter*\29
+2612:inflate_table
+2613:increment_simple_rowgroup_ctr
+2614:hb_tag_from_string
+2615:hb_shape_plan_destroy
+2616:hb_script_get_horizontal_direction
+2617:hb_paint_extents_context_t::push_clip\28hb_extents_t\29
+2618:hb_ot_color_palette_get_colors
+2619:hb_lazy_loader_t<OT::vmtx_accelerator_t\2c\20hb_face_lazy_loader_t<OT::vmtx_accelerator_t\2c\2012u>\2c\20hb_face_t\2c\2012u\2c\20OT::vmtx_accelerator_t>::get\28\29\20const
+2620:hb_lazy_loader_t<OT::kern\2c\20hb_table_lazy_loader_t<OT::kern\2c\2023u\2c\20true>\2c\20hb_face_t\2c\2023u\2c\20hb_blob_t>::get\28\29\20const
+2621:hb_lazy_loader_t<OT::head\2c\20hb_table_lazy_loader_t<OT::head\2c\201u\2c\20true>\2c\20hb_face_t\2c\201u\2c\20hb_blob_t>::get\28\29\20const
+2622:hb_lazy_loader_t<OT::fvar\2c\20hb_table_lazy_loader_t<OT::fvar\2c\2018u\2c\20true>\2c\20hb_face_t\2c\2018u\2c\20hb_blob_t>::get\28\29\20const
+2623:hb_hashmap_t<unsigned\20int\2c\20unsigned\20int\2c\20true>::alloc\28unsigned\20int\29
+2624:hb_font_funcs_destroy
+2625:hb_face_get_upem
+2626:hb_face_destroy
+2627:hb_draw_cubic_to_nil\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+2628:hb_buffer_set_segment_properties
+2629:hb_blob_create
+2630:gray_render_line
+2631:get_vendor\28char\20const*\29
+2632:get_renderer\28char\20const*\2c\20GrGLExtensions\20const&\29
+2633:get_joining_type\28unsigned\20int\2c\20hb_unicode_general_category_t\29
+2634:generate_distance_field_from_image\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\29
+2635:ft_var_readpackeddeltas
+2636:ft_var_get_item_delta
+2637:ft_var_done_item_variation_store
+2638:ft_glyphslot_done
+2639:ft_glyphslot_alloc_bitmap
+2640:freelocale
+2641:free_pool
+2642:fquad_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2643:fp_barrierf
+2644:fline_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2645:fixN0c\28BracketData*\2c\20int\2c\20int\2c\20unsigned\20char\29
+2646:fcubic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2647:fconic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+2648:fclose
+2649:emscripten::internal::MethodInvoker<void\20\28SkFont::*\29\28float\29\2c\20void\2c\20SkFont*\2c\20float>::invoke\28void\20\28SkFont::*\20const&\29\28float\29\2c\20SkFont*\2c\20float\29
+2650:emscripten::internal::MethodInvoker<sk_sp<SkImage>\20\28SkAnimatedImage::*\29\28\29\2c\20sk_sp<SkImage>\2c\20SkAnimatedImage*>::invoke\28sk_sp<SkImage>\20\28SkAnimatedImage::*\20const&\29\28\29\2c\20SkAnimatedImage*\29
+2651:emscripten::internal::Invoker<std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\2c\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\2c\20SimpleParagraphStyle\2c\20sk_sp<SkFontMgr>>::invoke\28std::__2::unique_ptr<skia::textlayout::ParagraphBuilderImpl\2c\20std::__2::default_delete<skia::textlayout::ParagraphBuilderImpl>>\20\28*\29\28SimpleParagraphStyle\2c\20sk_sp<SkFontMgr>\29\2c\20SimpleParagraphStyle*\2c\20sk_sp<SkFontMgr>*\29
+2652:emscripten::internal::FunctionInvoker<int\20\28*\29\28SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29\2c\20int\2c\20SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int>::invoke\28int\20\28**\29\28SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29\2c\20SkCanvas*\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29
+2653:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28SkFontMgr&\2c\20int\29\2c\20emscripten::val\2c\20SkFontMgr&\2c\20int>::invoke\28emscripten::val\20\28**\29\28SkFontMgr&\2c\20int\29\2c\20SkFontMgr*\2c\20int\29
+2654:do_scanline\28int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkBlitter*\29
+2655:decompose\28hb_ot_shape_normalize_context_t\20const*\2c\20bool\2c\20unsigned\20int\29
+2656:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::ganesh::DashOp::AAMode\2c\20SkMatrix\20const&\2c\20bool\29::$_0>\28skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::ganesh::DashOp::AAMode\2c\20SkMatrix\20const&\2c\20bool\29::$_0&&\29::'lambda'\28char*\29::__invoke\28char*\29
+2657:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrProgramInfo*\20SkArenaAlloc::make<GrProgramInfo\2c\20GrCaps\20const&\2c\20GrSurfaceProxyView\20const&\2c\20bool&\2c\20GrPipeline*&\2c\20GrUserStencilSettings\20const*\2c\20\28anonymous\20namespace\29::DrawAtlasPathShader*&\2c\20GrPrimitiveType\2c\20GrXferBarrierFlags&\2c\20GrLoadOp&>\28GrCaps\20const&\2c\20GrSurfaceProxyView\20const&\2c\20bool&\2c\20GrPipeline*&\2c\20GrUserStencilSettings\20const*&&\2c\20\28anonymous\20namespace\29::DrawAtlasPathShader*&\2c\20GrPrimitiveType&&\2c\20GrXferBarrierFlags&\2c\20GrLoadOp&\29::'lambda'\28void*\29>\28GrProgramInfo&&\29::'lambda'\28char*\29::__invoke\28char*\29
+2658:cubic_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2659:conic_intersect_ray\28SkPoint\20const*\2c\20float\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+2660:char\20const*\20std::__2::find\5babi:v160004\5d<char\20const*\2c\20char>\28char\20const*\2c\20char\20const*\2c\20char\20const&\29
+2661:char\20const*\20std::__2::__rewrap_range\5babi:v160004\5d<char\20const*\2c\20char\20const*\2c\20char\20const*>\28char\20const*\2c\20char\20const*\29
+2662:cff_index_get_pointers
+2663:cff2_path_param_t::move_to\28CFF::point_t\20const&\29
+2664:cff1_path_param_t::move_to\28CFF::point_t\20const&\29
+2665:cf2_glyphpath_computeOffset
+2666:cached_mask_gamma\28float\2c\20float\2c\20float\29
+2667:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2668:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2669:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2670:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2671:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2672:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2673:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2674:byn$mgfn-shared$void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+2675:byn$mgfn-shared$void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2676:byn$mgfn-shared$std::__2::__unique_if<SkSL::ConstructorArray>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorArray\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+2677:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+2678:byn$mgfn-shared$skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>\20const&\29
+2679:byn$mgfn-shared$skia_private::TArray<SkPoint\2c\20true>::operator=\28skia_private::TArray<SkPoint\2c\20true>&&\29
+2680:byn$mgfn-shared$skia_private::TArray<SkPath\2c\20true>::push_back_raw\28int\29
+2681:byn$mgfn-shared$skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+2682:byn$mgfn-shared$non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+2683:byn$mgfn-shared$__cxx_global_array_dtor.1
+2684:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+2685:byn$mgfn-shared$SkSL::BreakStatement::clone\28\29\20const
+2686:byn$mgfn-shared$SkRuntimeEffect::MakeForColorFilter\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+2687:byn$mgfn-shared$SkImageInfo::MakeN32Premul\28int\2c\20int\29
+2688:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\28\29.1
+2689:byn$mgfn-shared$SkBlockMemoryStream::~SkBlockMemoryStream\28\29
+2690:byn$mgfn-shared$SkBinaryWriteBuffer::writeScalarArray\28float\20const*\2c\20unsigned\20int\29
+2691:byn$mgfn-shared$Round_To_Grid
+2692:byn$mgfn-shared$LineConicIntersections::addLineNearEndPoints\28\29
+2693:byn$mgfn-shared$GrModulateAtlasCoverageEffect::onMakeProgramImpl\28\29\20const
+2694:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+2695:byn$mgfn-shared$GrGLProgramDataManager::setMatrix2f\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20float\20const*\29\20const
+2696:byn$mgfn-shared$DefaultGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+2697:build_tree
+2698:bracketAddOpening\28BracketData*\2c\20char16_t\2c\20int\29
+2699:bool\20OT::glyf_impl::Glyph::get_points<OT::glyf_accelerator_t>\28hb_font_t*\2c\20OT::glyf_accelerator_t\20const&\2c\20contour_point_vector_t&\2c\20contour_point_vector_t*\2c\20head_maxp_info_t*\2c\20unsigned\20int*\2c\20bool\2c\20bool\2c\20bool\2c\20hb_array_t<int>\2c\20hb_map_t*\2c\20unsigned\20int\2c\20unsigned\20int*\29\20const
+2700:bool\20OT::glyf_accelerator_t::get_points<OT::glyf_accelerator_t::points_aggregator_t>\28hb_font_t*\2c\20unsigned\20int\2c\20OT::glyf_accelerator_t::points_aggregator_t\29\20const
+2701:bool\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GSUB_impl::SubstLookup>\28hb_sanitize_context_t*\29\20const
+2702:bool\20OT::GSUBGPOSVersion1_2<OT::Layout::SmallTypes>::sanitize<OT::Layout::GPOS_impl::PosLookup>\28hb_sanitize_context_t*\29\20const
+2703:blit_aaa_trapezoid_row\28AdditiveBlitter*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char*\2c\20bool\2c\20bool\2c\20bool\29
+2704:auto\20std::__2::__unwrap_range\5babi:v160004\5d<char\20const*\2c\20char\20const*>\28char\20const*\2c\20char\20const*\29
+2705:atan
+2706:alloc_large
+2707:af_glyph_hints_done
+2708:add_quad\28SkPoint\20const*\2c\20skia_private::TArray<PathSegment\2c\20true>*\29
+2709:acos
+2710:aaa_fill_path\28SkPath\20const&\2c\20SkIRect\20const&\2c\20AdditiveBlitter*\2c\20int\2c\20int\2c\20bool\2c\20bool\2c\20bool\29
+2711:_get_path\28OT::cff1::accelerator_t\20const*\2c\20hb_font_t*\2c\20unsigned\20int\2c\20hb_draw_session_t&\2c\20bool\2c\20CFF::point_t*\29
+2712:_get_bounds\28OT::cff1::accelerator_t\20const*\2c\20unsigned\20int\2c\20bounds_t&\2c\20bool\29
+2713:_embind_register_bindings
+2714:__trunctfdf2
+2715:__towrite
+2716:__toread
+2717:__subtf3
+2718:__strchrnul
+2719:__rem_pio2f
+2720:__rem_pio2
+2721:__math_uflowf
+2722:__math_oflowf
+2723:__fwritex
+2724:__cxxabiv1::__class_type_info::process_static_type_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\29\20const
+2725:__cxxabiv1::__class_type_info::process_static_type_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\29\20const
+2726:__cxxabiv1::__class_type_info::process_found_base_class\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+2727:__cxxabiv1::__base_class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+2728:\28anonymous\20namespace\29::shape_contains_rect\28GrShape\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkMatrix\20const&\2c\20bool\29
+2729:\28anonymous\20namespace\29::generateFacePathCOLRv1\28FT_FaceRec_*\2c\20unsigned\20short\2c\20SkPath*\29
+2730:\28anonymous\20namespace\29::convert_noninflect_cubic_to_quads_with_constraint\28SkPoint\20const*\2c\20float\2c\20SkPathFirstDirection\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20int\29
+2731:\28anonymous\20namespace\29::convert_noninflect_cubic_to_quads\28SkPoint\20const*\2c\20float\2c\20skia_private::TArray<SkPoint\2c\20true>*\2c\20int\2c\20bool\2c\20bool\29
+2732:\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const
+2733:\28anonymous\20namespace\29::bloat_quad\28SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkMatrix\20const*\2c\20\28anonymous\20namespace\29::BezierVertex*\29
+2734:\28anonymous\20namespace\29::SkEmptyTypeface::onMakeClone\28SkFontArguments\20const&\29\20const
+2735:\28anonymous\20namespace\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\28\29.1
+2736:\28anonymous\20namespace\29::SkColorFilterImageFilter::~SkColorFilterImageFilter\28\29
+2737:\28anonymous\20namespace\29::SkBlurImageFilter::mapSigma\28skif::Mapping\20const&\2c\20bool\29\20const
+2738:\28anonymous\20namespace\29::DrawAtlasOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+2739:\28anonymous\20namespace\29::DrawAtlasOpImpl::programInfo\28\29
+2740:\28anonymous\20namespace\29::DrawAtlasOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+2741:\28anonymous\20namespace\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29\20const
+2742:\28anonymous\20namespace\29::DirectMaskSubRun::glyphs\28\29\20const
+2743:WebPRescaleNeededLines
+2744:WebPInitDecBufferInternal
+2745:WebPInitCustomIo
+2746:WebPGetFeaturesInternal
+2747:WebPDemuxGetFrame
+2748:VP8LInitBitReader
+2749:VP8LColorIndexInverseTransformAlpha
+2750:VP8InitIoInternal
+2751:VP8InitBitReader
+2752:TT_Vary_Apply_Glyph_Deltas
+2753:TT_Set_Var_Design
+2754:SkWuffsCodec::decodeFrame\28\29
+2755:SkVertices::MakeCopy\28SkVertices::VertexMode\2c\20int\2c\20SkPoint\20const*\2c\20SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20short\20const*\29
+2756:SkVertices::Builder::texCoords\28\29
+2757:SkVertices::Builder::positions\28\29
+2758:SkVertices::Builder::init\28SkVertices::Desc\20const&\29
+2759:SkVertices::Builder::colors\28\29
+2760:SkVertices::Builder::Builder\28SkVertices::VertexMode\2c\20int\2c\20int\2c\20unsigned\20int\29
+2761:SkTypeface_FreeType::Scanner::GetAxes\28FT_FaceRec_*\2c\20skia_private::STArray<4\2c\20SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>*\29
+2762:SkTypeface_FreeType::MakeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29
+2763:SkTypeface::getTableSize\28unsigned\20int\29\20const
+2764:SkTiffImageFileDirectory::getEntryValuesGeneric\28unsigned\20short\2c\20unsigned\20short\2c\20unsigned\20int\2c\20void*\29\20const
+2765:SkTextBlobRunIterator::positioning\28\29\20const
+2766:SkTSpan::splitAt\28SkTSpan*\2c\20double\2c\20SkArenaAlloc*\29
+2767:SkTSect::computePerpendiculars\28SkTSect*\2c\20SkTSpan*\2c\20SkTSpan*\29
+2768:SkTDStorage::insert\28int\29
+2769:SkTDStorage::calculateSizeOrDie\28int\29::$_0::operator\28\29\28\29\20const
+2770:SkTDPQueue<GrGpuResource*\2c\20&GrResourceCache::CompareTimestamp\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\2c\20&GrResourceCache::AccessResourceIndex\28GrGpuResource*\20const&\29>::percolateDownIfNecessary\28int\29
+2771:SkTConic::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+2772:SkSurface_Base::outstandingImageSnapshot\28\29\20const
+2773:SkSurface_Base::SkSurface_Base\28int\2c\20int\2c\20SkSurfaceProps\20const*\29
+2774:SkSurface::width\28\29\20const
+2775:SkStrokerPriv::CapFactory\28SkPaint::Cap\29
+2776:SkStrokeRec::getInflationRadius\28\29\20const
+2777:SkString::equals\28char\20const*\29\20const
+2778:SkStrikeSpec::MakeTransformMask\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\29
+2779:SkStrikeSpec::MakePath\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\29
+2780:SkStrike::glyph\28SkGlyphDigest\29
+2781:SkSpecialImages::AsView\28GrRecordingContext*\2c\20SkSpecialImage\20const*\29
+2782:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::endOfCurrentRun\28\29\20const
+2783:SkShaper::TrivialRunIterator<SkShaper::FontRunIterator>::atEnd\28\29\20const
+2784:SkShaper::MakeShapeDontWrapOrReorder\28std::__2::unique_ptr<SkUnicode\2c\20std::__2::default_delete<SkUnicode>>\2c\20sk_sp<SkFontMgr>\29
+2785:SkShadowTessellator::MakeAmbient\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPoint3\20const&\2c\20bool\29
+2786:SkScan::FillTriangle\28SkPoint\20const*\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+2787:SkScan::FillPath\28SkPath\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+2788:SkScan::FillIRect\28SkIRect\20const&\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+2789:SkScan::AntiHairLine\28SkPoint\20const*\2c\20int\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+2790:SkScan::AntiFillPath\28SkPath\20const&\2c\20SkRegion\20const&\2c\20SkBlitter*\2c\20bool\29
+2791:SkScalerContext_FreeType_Base::drawSVGGlyph\28FT_FaceRec_*\2c\20SkGlyph\20const&\2c\20unsigned\20int\2c\20SkSpan<unsigned\20int>\2c\20SkCanvas*\29
+2792:SkScalerContext_FreeType::computeGlyphBounds\28SkGlyph\20const&\2c\20SkRect*\2c\20bool\29
+2793:SkScalarInterpFunc\28float\2c\20float\20const*\2c\20float\20const*\2c\20int\29
+2794:SkSLTypeString\28SkSLType\29
+2795:SkSL::simplify_negation\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\29
+2796:SkSL::simplify_matrix_multiplication\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20int\2c\20int\2c\20int\2c\20int\29
+2797:SkSL::simplify_componentwise\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Operator\2c\20SkSL::Expression\20const&\29
+2798:SkSL::build_argument_type_list\28SkSpan<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20const>\29
+2799:SkSL::\28anonymous\20namespace\29::SwitchCaseContainsExit::visitStatement\28SkSL::Statement\20const&\29
+2800:SkSL::\28anonymous\20namespace\29::ReturnsInputAlphaVisitor::returnsInputAlpha\28SkSL::Expression\20const&\29
+2801:SkSL::\28anonymous\20namespace\29::ProgramUsageVisitor::visitExpression\28SkSL::Expression\20const&\29
+2802:SkSL::\28anonymous\20namespace\29::ConstantExpressionVisitor::visitExpression\28SkSL::Expression\20const&\29
+2803:SkSL::Variable::setGlobalVarDeclaration\28SkSL::GlobalVarDeclaration*\29
+2804:SkSL::Variable::globalVarDeclaration\28\29\20const
+2805:SkSL::Variable::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Position\2c\20SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20SkSL::Type\20const*\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::VariableStorage\29
+2806:SkSL::Type::MakeSamplerType\28char\20const*\2c\20SkSL::Type\20const&\29
+2807:SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::addDeclaringElement\28SkSL::ProgramElement\20const*\29
+2808:SkSL::ThreadContext::~ThreadContext\28\29
+2809:SkSL::ThreadContext::Context\28\29
+2810:SkSL::TernaryExpression::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+2811:SkSL::SymbolTable::isType\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+2812:SkSL::SampleUsage::merge\28SkSL::SampleUsage\20const&\29
+2813:SkSL::ReturnStatement::~ReturnStatement\28\29.1
+2814:SkSL::ReturnStatement::~ReturnStatement\28\29
+2815:SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\28\29
+2816:SkSL::RP::Generator::pushTernaryExpression\28SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+2817:SkSL::RP::Generator::pushStructuredComparison\28SkSL::RP::LValue*\2c\20SkSL::Operator\2c\20SkSL::RP::LValue*\2c\20SkSL::Type\20const&\29
+2818:SkSL::RP::Generator::pushMatrixMultiply\28SkSL::RP::LValue*\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20int\2c\20int\2c\20int\2c\20int\29
+2819:SkSL::RP::DynamicIndexLValue::~DynamicIndexLValue\28\29
+2820:SkSL::RP::Builder::push_uniform\28SkSL::RP::SlotRange\29
+2821:SkSL::RP::Builder::merge_condition_mask\28\29
+2822:SkSL::RP::Builder::jump\28int\29
+2823:SkSL::RP::Builder::branch_if_no_active_lanes_on_stack_top_equal\28int\2c\20int\29
+2824:SkSL::Pool::~Pool\28\29
+2825:SkSL::Pool::detachFromThread\28\29
+2826:SkSL::PipelineStage::ConvertProgram\28SkSL::Program\20const&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20SkSL::PipelineStage::Callbacks*\29
+2827:SkSL::Parser::unaryExpression\28\29
+2828:SkSL::Parser::swizzle\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Position\29
+2829:SkSL::Parser::statementOrNop\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+2830:SkSL::Parser::block\28\29
+2831:SkSL::Operator::getBinaryPrecedence\28\29\20const
+2832:SkSL::ModuleLoader::loadGPUModule\28SkSL::Compiler*\29
+2833:SkSL::ModifierFlags::checkPermittedFlags\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ModifierFlags\29\20const
+2834:SkSL::Mangler::uniqueName\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::SymbolTable*\29
+2835:SkSL::LiteralType::slotType\28unsigned\20long\29\20const
+2836:SkSL::Layout::operator==\28SkSL::Layout\20const&\29\20const
+2837:SkSL::Layout::checkPermittedLayout\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkEnumBitMask<SkSL::LayoutFlag>\29\20const
+2838:SkSL::GLSLCodeGenerator::~GLSLCodeGenerator\28\29
+2839:SkSL::GLSLCodeGenerator::writeLiteral\28SkSL::Literal\20const&\29
+2840:SkSL::GLSLCodeGenerator::writeFunctionDeclaration\28SkSL::FunctionDeclaration\20const&\29
+2841:SkSL::ForStatement::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ForLoopPositions\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::LoopUnrollInfo\2c\20std::__2::default_delete<SkSL::LoopUnrollInfo>>\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+2842:SkSL::FieldAccess::description\28SkSL::OperatorPrecedence\29\20const
+2843:SkSL::Expression::isIncomplete\28SkSL::Context\20const&\29\20const
+2844:SkSL::Expression::compareConstant\28SkSL::Expression\20const&\29\20const
+2845:SkSL::DebugTracePriv::~DebugTracePriv\28\29
+2846:SkSL::Context::Context\28SkSL::BuiltinTypes\20const&\2c\20SkSL::ShaderCaps\20const*\2c\20SkSL::ErrorReporter&\29
+2847:SkSL::ConstructorArrayCast::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+2848:SkSL::ConstructorArray::~ConstructorArray\28\29
+2849:SkSL::ConstructorArray::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+2850:SkSL::Compiler::runInliner\28SkSL::Inliner*\2c\20std::__2::vector<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>\2c\20std::__2::allocator<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>>\20const&\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\2c\20SkSL::ProgramUsage*\29
+2851:SkSL::Block::MakeBlock\28SkSL::Position\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>\2c\20SkSL::Block::Kind\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+2852:SkSL::Analysis::CheckProgramStructure\28SkSL::Program\20const&\2c\20bool\29::ProgramSizeVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+2853:SkSL::Analysis::CallsColorTransformIntrinsics\28SkSL::Program\20const&\29
+2854:SkSL::AliasType::bitWidth\28\29\20const
+2855:SkRuntimeShaderBuilder::~SkRuntimeShaderBuilder\28\29
+2856:SkRuntimeShaderBuilder::makeShader\28SkMatrix\20const*\29\20const
+2857:SkRuntimeEffectPriv::VarAsUniform\28SkSL::Variable\20const&\2c\20SkSL::Context\20const&\2c\20unsigned\20long*\29
+2858:SkRuntimeEffectPriv::UniformsAsSpan\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20sk_sp<SkData\20const>\2c\20bool\2c\20SkColorSpace\20const*\2c\20SkArenaAlloc*\29
+2859:SkRuntimeEffectPriv::TransformUniforms\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20sk_sp<SkData\20const>\2c\20SkColorSpace\20const*\29
+2860:SkRuntimeEffectPriv::TransformUniforms\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20sk_sp<SkData\20const>\2c\20SkColorSpaceXformSteps\20const&\29
+2861:SkRuntimeEffect::makeShader\28sk_sp<SkData\20const>\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\2c\20SkMatrix\20const*\29\20const
+2862:SkResourceCache::checkMessages\28\29
+2863:SkResourceCache::NewCachedData\28unsigned\20long\29
+2864:SkRegion::translate\28int\2c\20int\2c\20SkRegion*\29\20const
+2865:SkReduceOrder::Cubic\28SkPoint\20const*\2c\20SkPoint*\29
+2866:SkRectPriv::QuadContainsRect\28SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20float\29
+2867:SkRectPriv::ClosestDisjointEdge\28SkIRect\20const&\2c\20SkIRect\20const&\29
+2868:SkRecords::PreCachedPath::PreCachedPath\28SkPath\20const&\29
+2869:SkRecords::FillBounds::pushSaveBlock\28SkPaint\20const*\29
+2870:SkRecordDraw\28SkRecord\20const&\2c\20SkCanvas*\2c\20SkPicture\20const*\20const*\2c\20SkDrawable*\20const*\2c\20int\2c\20SkBBoxHierarchy\20const*\2c\20SkPicture::AbortCallback*\29
+2871:SkReadBuffer::readPath\28SkPath*\29
+2872:SkReadBuffer::readByteArrayAsData\28\29
+2873:SkRasterPipelineBlitter::blitRectWithTrace\28int\2c\20int\2c\20int\2c\20int\2c\20bool\29
+2874:SkRasterPipelineBlitter::blitMask\28SkMask\20const&\2c\20SkIRect\20const&\29
+2875:SkRasterPipelineBlitter::Create\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkArenaAlloc*\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20bool\2c\20SkShader\20const*\29
+2876:SkRasterPipeline::append_load\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+2877:SkRasterClip::op\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkClipOp\2c\20bool\29
+2878:SkRRectPriv::ConservativeIntersect\28SkRRect\20const&\2c\20SkRRect\20const&\29
+2879:SkRRect::scaleRadii\28\29
+2880:SkRRect::AreRectAndRadiiValid\28SkRect\20const&\2c\20SkPoint\20const*\29
+2881:SkRBuffer::skip\28unsigned\20long\29
+2882:SkPixmapUtils::SwapWidthHeight\28SkImageInfo\20const&\29
+2883:SkPixmap::setColorSpace\28sk_sp<SkColorSpace>\29
+2884:SkPixelRef::~SkPixelRef\28\29
+2885:SkPixelRef::notifyPixelsChanged\28\29
+2886:SkPictureRecorder::beginRecording\28SkRect\20const&\2c\20sk_sp<SkBBoxHierarchy>\29
+2887:SkPictureRecord::addPathToHeap\28SkPath\20const&\29
+2888:SkPictureData::getPath\28SkReadBuffer*\29\20const
+2889:SkPicture::serialize\28SkWStream*\2c\20SkSerialProcs\20const*\2c\20SkRefCntSet*\2c\20bool\29\20const
+2890:SkPathWriter::update\28SkOpPtT\20const*\29
+2891:SkPathStroker::strokeCloseEnough\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20SkQuadConstruct*\29\20const
+2892:SkPathStroker::finishContour\28bool\2c\20bool\29
+2893:SkPathRef::reset\28\29
+2894:SkPathRef::isRRect\28SkRRect*\2c\20bool*\2c\20unsigned\20int*\29\20const
+2895:SkPathRef::addGenIDChangeListener\28sk_sp<SkIDChangeListener>\29
+2896:SkPathPriv::IsRectContour\28SkPath\20const&\2c\20bool\2c\20int*\2c\20SkPoint\20const**\2c\20bool*\2c\20SkPathDirection*\2c\20SkRect*\29
+2897:SkPathEffectBase::onAsPoints\28SkPathEffectBase::PointData*\2c\20SkPath\20const&\2c\20SkStrokeRec\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const*\29\20const
+2898:SkPathEffect::filterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\29\20const
+2899:SkPathBuilder::quadTo\28SkPoint\2c\20SkPoint\29
+2900:SkPathBuilder::cubicTo\28SkPoint\2c\20SkPoint\2c\20SkPoint\29
+2901:SkPath::writeToMemory\28void*\29\20const
+2902:SkPath::reversePathTo\28SkPath\20const&\29
+2903:SkPath::rQuadTo\28float\2c\20float\2c\20float\2c\20float\29
+2904:SkPath::contains\28float\2c\20float\29\20const
+2905:SkPath::arcTo\28float\2c\20float\2c\20float\2c\20SkPath::ArcSize\2c\20SkPathDirection\2c\20float\2c\20float\29
+2906:SkPath::approximateBytesUsed\28\29\20const
+2907:SkPath::addCircle\28float\2c\20float\2c\20float\2c\20SkPathDirection\29
+2908:SkPath::Rect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+2909:SkParsePath::ToSVGString\28SkPath\20const&\2c\20SkParsePath::PathEncoding\29::$_0::operator\28\29\28char\2c\20SkPoint\20const*\2c\20unsigned\20long\29\20const
+2910:SkParse::FindScalar\28char\20const*\2c\20float*\29
+2911:SkPairPathEffect::flatten\28SkWriteBuffer&\29\20const
+2912:SkPaintToGrPaintWithBlend\28GrRecordingContext*\2c\20GrColorInfo\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20SkBlender*\2c\20SkSurfaceProps\20const&\2c\20GrPaint*\29
+2913:SkPaint::refBlender\28\29\20const
+2914:SkPaint::getBlendMode_or\28SkBlendMode\29\20const
+2915:SkPackARGB_as_RGBA\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+2916:SkPackARGB_as_BGRA\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+2917:SkOpSpan::setOppSum\28int\29
+2918:SkOpSegment::markAndChaseWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20int\2c\20SkOpSpanBase**\29
+2919:SkOpSegment::markAllDone\28\29
+2920:SkOpSegment::activeWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\29
+2921:SkOpPtT::contains\28SkOpSegment\20const*\29\20const
+2922:SkOpEdgeBuilder::closeContour\28SkPoint\20const&\2c\20SkPoint\20const&\29
+2923:SkOpCoincidence::releaseDeleted\28\29
+2924:SkOpCoincidence::markCollapsed\28SkOpPtT*\29
+2925:SkOpCoincidence::findOverlaps\28SkOpCoincidence*\29\20const
+2926:SkOpCoincidence::expand\28\29
+2927:SkOpCoincidence::apply\28\29
+2928:SkOpAngle::orderable\28SkOpAngle*\29
+2929:SkOpAngle::computeSector\28\29
+2930:SkNullBlitter::~SkNullBlitter\28\29
+2931:SkNoPixelsDevice::SkNoPixelsDevice\28SkIRect\20const&\2c\20SkSurfaceProps\20const&\2c\20sk_sp<SkColorSpace>\29
+2932:SkNoPixelsDevice::SkNoPixelsDevice\28SkIRect\20const&\2c\20SkSurfaceProps\20const&\29
+2933:SkNoDestructor<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>>::SkNoDestructor\28skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>&&\29
+2934:SkMessageBus<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20GrDirectContext::DirectContextID\2c\20false>::Get\28\29
+2935:SkMemoryStream::SkMemoryStream\28void\20const*\2c\20unsigned\20long\2c\20bool\29
+2936:SkMemoryStream::SkMemoryStream\28sk_sp<SkData>\29
+2937:SkMatrixPriv::InverseMapRect\28SkMatrix\20const&\2c\20SkRect*\2c\20SkRect\20const&\29
+2938:SkMatrix::setRotate\28float\29
+2939:SkMatrix::setPolyToPoly\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20int\29
+2940:SkMatrix::postSkew\28float\2c\20float\29
+2941:SkMatrix::invert\28SkMatrix*\29\20const
+2942:SkMatrix::getMinScale\28\29\20const
+2943:SkMaskBuilder::PrepareDestination\28int\2c\20int\2c\20SkMask\20const&\29
+2944:SkMakeBitmapShaderForPaint\28SkPaint\20const&\2c\20SkBitmap\20const&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const*\2c\20SkCopyPixelsMode\29
+2945:SkMD5::write\28void\20const*\2c\20unsigned\20long\29
+2946:SkLineClipper::ClipLine\28SkPoint\20const*\2c\20SkRect\20const&\2c\20SkPoint*\2c\20bool\29
+2947:SkJSONWriter::separator\28bool\29
+2948:SkIntersections::intersectRay\28SkDQuad\20const&\2c\20SkDLine\20const&\29
+2949:SkIntersections::intersectRay\28SkDLine\20const&\2c\20SkDLine\20const&\29
+2950:SkIntersections::intersectRay\28SkDCubic\20const&\2c\20SkDLine\20const&\29
+2951:SkIntersections::intersectRay\28SkDConic\20const&\2c\20SkDLine\20const&\29
+2952:SkIntersections::cleanUpParallelLines\28bool\29
+2953:SkImages::RasterFromBitmap\28SkBitmap\20const&\29
+2954:SkImage_Raster::SkImage_Raster\28SkImageInfo\20const&\2c\20sk_sp<SkData>\2c\20unsigned\20long\2c\20unsigned\20int\29
+2955:SkImage_Ganesh::~SkImage_Ganesh\28\29
+2956:SkImageInfo::Make\28SkISize\2c\20SkColorType\2c\20SkAlphaType\29
+2957:SkImageInfo::MakeN32Premul\28SkISize\29
+2958:SkImageGenerator::getPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\29
+2959:SkImageGenerator::SkImageGenerator\28SkImageInfo\20const&\2c\20unsigned\20int\29
+2960:SkImageFilters::MatrixTransform\28SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20sk_sp<SkImageFilter>\29
+2961:SkImageFilters::Blur\28float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+2962:SkImageFilter_Base::affectsTransparentBlack\28\29\20const
+2963:SkImage::readPixels\28GrDirectContext*\2c\20SkPixmap\20const&\2c\20int\2c\20int\2c\20SkImage::CachingHint\29\20const
+2964:SkImage::hasMipmaps\28\29\20const
+2965:SkIDChangeListener::List::add\28sk_sp<SkIDChangeListener>\29
+2966:SkGradientShader::MakeTwoPointConical\28SkPoint\20const&\2c\20float\2c\20SkPoint\20const&\2c\20float\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+2967:SkGradientShader::MakeLinear\28SkPoint\20const*\2c\20SkRGBA4f<\28SkAlphaType\293>\20const*\2c\20sk_sp<SkColorSpace>\2c\20float\20const*\2c\20int\2c\20SkTileMode\2c\20SkGradientShader::Interpolation\20const&\2c\20SkMatrix\20const*\29
+2968:SkGradientBaseShader::AppendInterpolatedToDstStages\28SkRasterPipeline*\2c\20SkArenaAlloc*\2c\20bool\2c\20SkGradientShader::Interpolation\20const&\2c\20SkColorSpace\20const*\2c\20SkColorSpace\20const*\29
+2969:SkGlyph::setPath\28SkArenaAlloc*\2c\20SkScalerContext*\29
+2970:SkGlyph::mask\28\29\20const
+2971:SkFontStyleSet_Custom::appendTypeface\28sk_sp<SkTypeface>\29
+2972:SkFontStyleSet_Custom::SkFontStyleSet_Custom\28SkString\29
+2973:SkFontPriv::ApproximateTransformedTextSize\28SkFont\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\20const&\29
+2974:SkFontMgr::matchFamilyStyleCharacter\28char\20const*\2c\20SkFontStyle\20const&\2c\20char\20const**\2c\20int\2c\20int\29\20const
+2975:SkFontMgr::legacyMakeTypeface\28char\20const*\2c\20SkFontStyle\29\20const
+2976:SkFont::refTypefaceOrDefault\28\29\20const
+2977:SkFindCubicMaxCurvature\28SkPoint\20const*\2c\20float*\29
+2978:SkEncodedInfo::ICCProfile::Make\28sk_sp<SkData>\29
+2979:SkEmptyFontMgr::onMatchFamilyStyleCharacter\28char\20const*\2c\20SkFontStyle\20const&\2c\20char\20const**\2c\20int\2c\20int\29\20const
+2980:SkEdge::setLine\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkIRect\20const*\2c\20int\29
+2981:SkDynamicMemoryWStream::padToAlign4\28\29
+2982:SkDrawable::SkDrawable\28\29
+2983:SkDrawBase::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29\20const
+2984:SkDrawBase::drawDevicePoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\2c\20SkDevice*\29\20const
+2985:SkDraw::drawBitmap\28SkBitmap\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29\20const
+2986:SkDevice::simplifyGlyphRunRSXFormAndRedraw\28SkCanvas*\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+2987:SkDevice::drawFilteredImage\28skif::Mapping\20const&\2c\20SkSpecialImage*\2c\20SkColorType\2c\20SkImageFilter\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+2988:SkDevice::SkDevice\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\29
+2989:SkDataTable::at\28int\2c\20unsigned\20long*\29\20const
+2990:SkData::MakeZeroInitialized\28unsigned\20long\29
+2991:SkDQuad::dxdyAtT\28double\29\20const
+2992:SkDQuad::RootsReal\28double\2c\20double\2c\20double\2c\20double*\29
+2993:SkDQuad::FindExtrema\28double\20const*\2c\20double*\29
+2994:SkDCubic::subDivide\28double\2c\20double\29\20const
+2995:SkDCubic::searchRoots\28double*\2c\20int\2c\20double\2c\20SkDCubic::SearchAxis\2c\20double*\29\20const
+2996:SkDCubic::Coefficients\28double\20const*\2c\20double*\2c\20double*\2c\20double*\2c\20double*\29
+2997:SkDConic::dxdyAtT\28double\29\20const
+2998:SkDConic::FindExtrema\28double\20const*\2c\20float\2c\20double*\29
+2999:SkCopyStreamToData\28SkStream*\29
+3000:SkContourMeasure_segTo\28SkPoint\20const*\2c\20unsigned\20int\2c\20float\2c\20float\2c\20SkPath*\29
+3001:SkContourMeasureIter::next\28\29
+3002:SkContourMeasureIter::Impl::compute_quad_segs\28SkPoint\20const*\2c\20float\2c\20int\2c\20int\2c\20unsigned\20int\29
+3003:SkContourMeasureIter::Impl::compute_cubic_segs\28SkPoint\20const*\2c\20float\2c\20int\2c\20int\2c\20unsigned\20int\29
+3004:SkContourMeasureIter::Impl::compute_conic_segs\28SkConic\20const&\2c\20float\2c\20int\2c\20SkPoint\20const&\2c\20int\2c\20SkPoint\20const&\2c\20unsigned\20int\29
+3005:SkContourMeasure::getPosTan\28float\2c\20SkPoint*\2c\20SkPoint*\29\20const
+3006:SkConic::evalAt\28float\29\20const
+3007:SkConic::TransformW\28SkPoint\20const*\2c\20float\2c\20SkMatrix\20const&\29
+3008:SkColorToPMColor4f\28unsigned\20int\2c\20GrColorInfo\20const&\29
+3009:SkColorSpaceLuminance::Fetch\28float\29
+3010:SkColorSpace::transferFn\28skcms_TransferFunction*\29\20const
+3011:SkColorSpace::toXYZD50\28skcms_Matrix3x3*\29\20const
+3012:SkColorPalette::SkColorPalette\28unsigned\20int\20const*\2c\20int\29
+3013:SkColorFilters::Blend\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20sk_sp<SkColorSpace>\2c\20SkBlendMode\29
+3014:SkColor4fPrepForDst\28SkRGBA4f<\28SkAlphaType\293>\2c\20GrColorInfo\20const&\29
+3015:SkCodec::startIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const*\29
+3016:SkChopMonoCubicAtY\28SkPoint\20const*\2c\20float\2c\20SkPoint*\29
+3017:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\2c\20float\29
+3018:SkCanvas::setMatrix\28SkM44\20const&\29
+3019:SkCanvas::scale\28float\2c\20float\29
+3020:SkCanvas::private_draw_shadow_rec\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+3021:SkCanvas::onResetClip\28\29
+3022:SkCanvas::onClipShader\28sk_sp<SkShader>\2c\20SkClipOp\29
+3023:SkCanvas::onClipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+3024:SkCanvas::onClipRect\28SkRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+3025:SkCanvas::onClipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+3026:SkCanvas::onClipPath\28SkPath\20const&\2c\20SkClipOp\2c\20SkCanvas::ClipEdgeStyle\29
+3027:SkCanvas::internal_private_resetClip\28\29
+3028:SkCanvas::internalSaveLayer\28SkCanvas::SaveLayerRec\20const&\2c\20SkCanvas::SaveLayerStrategy\2c\20bool\29
+3029:SkCanvas::experimental_DrawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+3030:SkCanvas::drawRRect\28SkRRect\20const&\2c\20SkPaint\20const&\29
+3031:SkCanvas::drawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+3032:SkCanvas::drawPatch\28SkPoint\20const*\2c\20unsigned\20int\20const*\2c\20SkPoint\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+3033:SkCanvas::drawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+3034:SkCanvas::drawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+3035:SkCanvas::drawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+3036:SkCanvas::clipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20bool\29
+3037:SkCanvas::SkCanvas\28SkIRect\20const&\29
+3038:SkCachedData::~SkCachedData\28\29
+3039:SkCTMShader::~SkCTMShader\28\29.1
+3040:SkBmpRLECodec::setPixel\28void*\2c\20unsigned\20long\2c\20SkImageInfo\20const&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20char\29
+3041:SkBmpCodec::prepareToDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+3042:SkBmpCodec::ReadHeader\28SkStream*\2c\20bool\2c\20std::__2::unique_ptr<SkCodec\2c\20std::__2::default_delete<SkCodec>>*\29
+3043:SkBlurMaskFilterImpl::computeXformedSigma\28SkMatrix\20const&\29\20const
+3044:SkBlitterClipper::apply\28SkBlitter*\2c\20SkRegion\20const*\2c\20SkIRect\20const*\29
+3045:SkBlitter::blitRegion\28SkRegion\20const&\29
+3046:SkBitmapDevice::BDDraw::~BDDraw\28\29
+3047:SkBitmapCacheDesc::Make\28SkImage\20const*\29
+3048:SkBitmap::writePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+3049:SkBitmap::setPixels\28void*\29
+3050:SkBitmap::pixelRefOrigin\28\29\20const
+3051:SkBitmap::notifyPixelsChanged\28\29\20const
+3052:SkBitmap::isImmutable\28\29\20const
+3053:SkBitmap::allocPixels\28\29
+3054:SkBinaryWriteBuffer::writeScalarArray\28float\20const*\2c\20unsigned\20int\29
+3055:SkBaseShadowTessellator::~SkBaseShadowTessellator\28\29.1
+3056:SkBaseShadowTessellator::handleCubic\28SkMatrix\20const&\2c\20SkPoint*\29
+3057:SkBaseShadowTessellator::handleConic\28SkMatrix\20const&\2c\20SkPoint*\2c\20float\29
+3058:SkAutoPathBoundsUpdate::SkAutoPathBoundsUpdate\28SkPath*\2c\20SkRect\20const&\29
+3059:SkAutoDescriptor::SkAutoDescriptor\28SkAutoDescriptor&&\29
+3060:SkArenaAllocWithReset::SkArenaAllocWithReset\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29
+3061:SkAnimatedImage::getFrameCount\28\29\20const
+3062:SkAnimatedImage::decodeNextFrame\28\29
+3063:SkAnimatedImage::Frame::copyTo\28SkAnimatedImage::Frame*\29\20const
+3064:SkAnalyticQuadraticEdge::updateQuadratic\28\29
+3065:SkAnalyticCubicEdge::updateCubic\28bool\29
+3066:SkAlphaRuns::reset\28int\29
+3067:SkAAClip::setRect\28SkIRect\20const&\29
+3068:Simplify\28SkPath\20const&\2c\20SkPath*\29
+3069:ReconstructRow
+3070:R.1
+3071:OpAsWinding::nextEdge\28Contour&\2c\20OpAsWinding::Edge\29
+3072:OT::sbix::sanitize\28hb_sanitize_context_t*\29\20const
+3073:OT::post::accelerator_t::cmp_gids\28void\20const*\2c\20void\20const*\2c\20void*\29
+3074:OT::gvar::sanitize_shallow\28hb_sanitize_context_t*\29\20const
+3075:OT::fvar::sanitize\28hb_sanitize_context_t*\29\20const
+3076:OT::cmap::sanitize\28hb_sanitize_context_t*\29\20const
+3077:OT::cmap::accelerator_t::accelerator_t\28hb_face_t*\29
+3078:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\2c\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\28\29
+3079:OT::avar::sanitize\28hb_sanitize_context_t*\29\20const
+3080:OT::VarRegionList::evaluate\28unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\2c\20float*\29\20const
+3081:OT::Rule<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ContextApplyLookupContext\20const&\29\20const
+3082:OT::OpenTypeFontFile::sanitize\28hb_sanitize_context_t*\29\20const
+3083:OT::MVAR::sanitize\28hb_sanitize_context_t*\29\20const
+3084:OT::Layout::GSUB_impl::SubstLookup::serialize_ligature\28hb_serialize_context_t*\2c\20unsigned\20int\2c\20hb_sorted_array_t<OT::HBGlyphID16\20const>\2c\20hb_array_t<unsigned\20int\20const>\2c\20hb_array_t<OT::HBGlyphID16\20const>\2c\20hb_array_t<unsigned\20int\20const>\2c\20hb_array_t<OT::HBGlyphID16\20const>\29
+3085:OT::Layout::GPOS_impl::MarkArray::apply\28OT::hb_ot_apply_context_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20OT::Layout::GPOS_impl::AnchorMatrix\20const&\2c\20unsigned\20int\2c\20unsigned\20int\29\20const
+3086:OT::GDEFVersion1_2<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+3087:OT::Device::get_y_delta\28hb_font_t*\2c\20OT::VariationStore\20const&\2c\20float*\29\20const
+3088:OT::Device::get_x_delta\28hb_font_t*\2c\20OT::VariationStore\20const&\2c\20float*\29\20const
+3089:OT::ClipList::get_extents\28unsigned\20int\2c\20hb_glyph_extents_t*\2c\20OT::VarStoreInstancer\20const&\29\20const
+3090:OT::ChainRule<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ChainContextApplyLookupContext\20const&\29\20const
+3091:OT::CPAL::sanitize\28hb_sanitize_context_t*\29\20const
+3092:OT::COLR::sanitize\28hb_sanitize_context_t*\29\20const
+3093:OT::COLR::paint_glyph\28hb_font_t*\2c\20unsigned\20int\2c\20hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20bool\29\20const
+3094:MakeRasterCopyPriv\28SkPixmap\20const&\2c\20unsigned\20int\29
+3095:LineQuadraticIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineQuadraticIntersections::PinTPoint\29
+3096:LineQuadraticIntersections::checkCoincident\28\29
+3097:LineQuadraticIntersections::addLineNearEndPoints\28\29
+3098:LineCubicIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineCubicIntersections::PinTPoint\29
+3099:LineCubicIntersections::checkCoincident\28\29
+3100:LineCubicIntersections::addLineNearEndPoints\28\29
+3101:LineConicIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineConicIntersections::PinTPoint\29
+3102:LineConicIntersections::checkCoincident\28\29
+3103:LineConicIntersections::addLineNearEndPoints\28\29
+3104:GrXferProcessor::GrXferProcessor\28GrProcessor::ClassID\29
+3105:GrVertexChunkBuilder::~GrVertexChunkBuilder\28\29
+3106:GrTriangulator::tessellate\28GrTriangulator::VertexList\20const&\2c\20GrTriangulator::Comparator\20const&\29
+3107:GrTriangulator::splitEdge\28GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29
+3108:GrTriangulator::pathToPolys\28float\2c\20SkRect\20const&\2c\20bool*\29
+3109:GrTriangulator::generateCubicPoints\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20GrTriangulator::VertexList*\2c\20int\29\20const
+3110:GrTriangulator::emitTriangle\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20int\2c\20skgpu::VertexWriter\29\20const
+3111:GrTriangulator::checkForIntersection\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29
+3112:GrTriangulator::applyFillType\28int\29\20const
+3113:GrTriangulator::EdgeList::insert\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\29
+3114:GrTriangulator::Edge::insertBelow\28GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29
+3115:GrTriangulator::Edge::insertAbove\28GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29
+3116:GrToGLStencilFunc\28GrStencilTest\29
+3117:GrThreadSafeCache::dropAllRefs\28\29
+3118:GrTextureRenderTargetProxy::callbackDesc\28\29\20const
+3119:GrTexture::GrTexture\28GrGpu*\2c\20SkISize\20const&\2c\20skgpu::Protected\2c\20GrTextureType\2c\20GrMipmapStatus\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3120:GrTexture::ComputeScratchKey\28GrCaps\20const&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20skgpu::ScratchKey*\29
+3121:GrSurfaceProxyView::asTextureProxyRef\28\29\20const
+3122:GrSurfaceProxy::GrSurfaceProxy\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>&&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3123:GrSurfaceProxy::GrSurfaceProxy\28sk_sp<GrSurface>\2c\20SkBackingFit\2c\20GrSurfaceProxy::UseAllocator\29
+3124:GrSurface::setRelease\28sk_sp<skgpu::RefCntedCallback>\29
+3125:GrStyledShape::styledBounds\28\29\20const
+3126:GrStyledShape::asLine\28SkPoint*\2c\20bool*\29\20const
+3127:GrStyledShape::addGenIDChangeListener\28sk_sp<SkIDChangeListener>\29\20const
+3128:GrSkSLFP::name\28\29\20const
+3129:GrSimpleMeshDrawOpHelper::fixedFunctionFlags\28\29\20const
+3130:GrShape::setRect\28SkRect\20const&\29
+3131:GrShape::setRRect\28SkRRect\20const&\29
+3132:GrResourceProvider::assignUniqueKeyToResource\28skgpu::UniqueKey\20const&\2c\20GrGpuResource*\29
+3133:GrResourceCache::releaseAll\28\29
+3134:GrResourceCache::getNextTimestamp\28\29
+3135:GrRenderTask::addDependency\28GrRenderTask*\29
+3136:GrRenderTargetProxy::canUseStencil\28GrCaps\20const&\29\20const
+3137:GrRecordingContextPriv::addOnFlushCallbackObject\28GrOnFlushCallbackObject*\29
+3138:GrRecordingContext::~GrRecordingContext\28\29
+3139:GrRecordingContext::abandonContext\28\29
+3140:GrQuadUtils::TessellationHelper::Vertices::moveTo\28skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20int>\20const&\29
+3141:GrQuadUtils::TessellationHelper::EdgeEquations::reset\28GrQuadUtils::TessellationHelper::EdgeVectors\20const&\29
+3142:GrQuadUtils::ResolveAAType\28GrAAType\2c\20GrQuadAAFlags\2c\20GrQuad\20const&\2c\20GrAAType*\2c\20GrQuadAAFlags*\29
+3143:GrQuadBuffer<\28anonymous\20namespace\29::FillRectOpImpl::ColorAndAA>::append\28GrQuad\20const&\2c\20\28anonymous\20namespace\29::FillRectOpImpl::ColorAndAA&&\2c\20GrQuad\20const*\29
+3144:GrPixmap::GrPixmap\28GrImageInfo\2c\20void*\2c\20unsigned\20long\29
+3145:GrPipeline::GrPipeline\28GrPipeline::InitArgs\20const&\2c\20GrProcessorSet&&\2c\20GrAppliedClip&&\29
+3146:GrPersistentCacheUtils::UnpackCachedShaders\28SkReadBuffer*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20SkSL::Program::Interface*\2c\20int\2c\20GrPersistentCacheUtils::ShaderMetadata*\29
+3147:GrPathUtils::convertCubicToQuads\28SkPoint\20const*\2c\20float\2c\20skia_private::TArray<SkPoint\2c\20true>*\29
+3148:GrPathTessellationShader::Make\28GrShaderCaps\20const&\2c\20SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::tess::PatchAttribs\29
+3149:GrOp::chainConcat\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\29
+3150:GrOp::GenOpClassID\28\29
+3151:GrMeshDrawOp::PatternHelper::PatternHelper\28GrMeshDrawTarget*\2c\20GrPrimitiveType\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>\2c\20int\2c\20int\2c\20int\2c\20int\29
+3152:GrMemoryPool::Make\28unsigned\20long\2c\20unsigned\20long\29
+3153:GrMakeKeyFromImageID\28skgpu::UniqueKey*\2c\20unsigned\20int\2c\20SkIRect\20const&\29
+3154:GrImageInfo::GrImageInfo\28GrColorInfo\20const&\2c\20SkISize\20const&\29
+3155:GrGpuResource::removeScratchKey\28\29
+3156:GrGpuResource::registerWithCacheWrapped\28GrWrapCacheable\29
+3157:GrGpuResource::dumpMemoryStatisticsPriv\28SkTraceMemoryDump*\2c\20SkString\20const&\2c\20char\20const*\2c\20unsigned\20long\29\20const
+3158:GrGpuBuffer::onGpuMemorySize\28\29\20const
+3159:GrGpu::resolveRenderTarget\28GrRenderTarget*\2c\20SkIRect\20const&\29
+3160:GrGpu::executeFlushInfo\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+3161:GrGeometryProcessor::TextureSampler::TextureSampler\28GrSamplerState\2c\20GrBackendFormat\20const&\2c\20skgpu::Swizzle\20const&\29
+3162:GrGeometryProcessor::ProgramImpl::ComputeMatrixKeys\28GrShaderCaps\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\29
+3163:GrGLUniformHandler::getUniformVariable\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\29\20const
+3164:GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29.1
+3165:GrGLSemaphore::GrGLSemaphore\28GrGLGpu*\2c\20bool\29
+3166:GrGLSLVaryingHandler::~GrGLSLVaryingHandler\28\29
+3167:GrGLSLUniformHandler::addInputSampler\28skgpu::Swizzle\20const&\2c\20char\20const*\29
+3168:GrGLSLShaderBuilder::emitFunction\28SkSLType\2c\20char\20const*\2c\20SkSpan<GrShaderVar\20const>\2c\20char\20const*\29
+3169:GrGLSLProgramDataManager::setSkMatrix\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20SkMatrix\20const&\29\20const
+3170:GrGLSLProgramBuilder::writeFPFunction\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+3171:GrGLSLProgramBuilder::invokeFP\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl\20const&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29\20const
+3172:GrGLSLProgramBuilder::addRTFlipUniform\28char\20const*\29
+3173:GrGLSLFragmentShaderBuilder::dstColor\28\29
+3174:GrGLSLBlend::BlendKey\28SkBlendMode\29
+3175:GrGLProgramBuilder::~GrGLProgramBuilder\28\29
+3176:GrGLProgramBuilder::computeCountsAndStrides\28unsigned\20int\2c\20GrGeometryProcessor\20const&\2c\20bool\29
+3177:GrGLGpu::flushScissor\28GrScissorState\20const&\2c\20int\2c\20GrSurfaceOrigin\29
+3178:GrGLGpu::flushClearColor\28std::__2::array<float\2c\204ul>\29
+3179:GrGLGpu::createTexture\28SkISize\2c\20GrGLFormat\2c\20unsigned\20int\2c\20skgpu::Renderable\2c\20GrGLTextureParameters::SamplerOverriddenState*\2c\20int\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3180:GrGLGpu::copySurfaceAsDraw\28GrSurface*\2c\20bool\2c\20GrSurface*\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkFilterMode\29
+3181:GrGLGpu::SamplerObjectCache::~SamplerObjectCache\28\29
+3182:GrGLGpu::HWVertexArrayState::bindInternalVertexArray\28GrGLGpu*\2c\20GrBuffer\20const*\29
+3183:GrGLFunction<void\20\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29>::GrGLFunction\28void\20\28*\29\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29\29::'lambda'\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29::__invoke\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\29
+3184:GrGLBuffer::Make\28GrGLGpu*\2c\20unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\29
+3185:GrGLAttribArrayState::enableVertexArrays\28GrGLGpu\20const*\2c\20int\2c\20GrPrimitiveRestart\29
+3186:GrFragmentProcessors::make_effect_fp\28sk_sp<SkRuntimeEffect>\2c\20char\20const*\2c\20sk_sp<SkData\20const>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\2c\20GrFPArgs\20const&\29
+3187:GrFragmentProcessors::MakeChildFP\28SkRuntimeEffect::ChildPtr\20const&\2c\20GrFPArgs\20const&\29
+3188:GrFragmentProcessors::IsSupported\28SkMaskFilter\20const*\29
+3189:GrFragmentProcessor::makeProgramImpl\28\29\20const
+3190:GrFragmentProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+3191:GrFragmentProcessor::MulInputByChildAlpha\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+3192:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3193:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+3194:GrFinishCallbacks::callAll\28bool\29
+3195:GrDynamicAtlas::makeNode\28GrDynamicAtlas::Node*\2c\20int\2c\20int\2c\20int\2c\20int\29
+3196:GrDrawingManager::setLastRenderTask\28GrSurfaceProxy\20const*\2c\20GrRenderTask*\29
+3197:GrDrawingManager::flushSurfaces\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+3198:GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29
+3199:GrDirectContext::resetContext\28unsigned\20int\29
+3200:GrDirectContext::getResourceCacheLimit\28\29\20const
+3201:GrDefaultGeoProcFactory::MakeForDeviceSpace\28SkArenaAlloc*\2c\20GrDefaultGeoProcFactory::Color\20const&\2c\20GrDefaultGeoProcFactory::Coverage\20const&\2c\20GrDefaultGeoProcFactory::LocalCoords\20const&\2c\20SkMatrix\20const&\29
+3202:GrColorSpaceXformEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20sk_sp<GrColorSpaceXform>\29
+3203:GrColorSpaceXform::apply\28SkRGBA4f<\28SkAlphaType\293>\20const&\29
+3204:GrColorSpaceXform::Equals\28GrColorSpaceXform\20const*\2c\20GrColorSpaceXform\20const*\29
+3205:GrBufferAllocPool::unmap\28\29
+3206:GrBlurUtils::can_filter_mask\28SkMaskFilterBase\20const*\2c\20GrStyledShape\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkIRect*\29
+3207:GrBicubicEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState::WrapMode\2c\20GrSamplerState::WrapMode\2c\20SkRect\20const&\2c\20SkCubicResampler\2c\20GrBicubicEffect::Direction\2c\20GrCaps\20const&\29
+3208:GrBackendTextures::MakeGL\28int\2c\20int\2c\20skgpu::Mipmapped\2c\20GrGLTextureInfo\20const&\2c\20sk_sp<GrGLTextureParameters>\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3209:GrBackendFormatStencilBits\28GrBackendFormat\20const&\29
+3210:GrBackendFormat::asMockCompressionType\28\29\20const
+3211:GrAATriangulator::~GrAATriangulator\28\29
+3212:GrAATriangulator::makeEvent\28GrAATriangulator::SSEdge*\2c\20GrAATriangulator::EventList*\29\20const
+3213:GrAAConvexTessellator::fanRing\28GrAAConvexTessellator::Ring\20const&\29
+3214:GrAAConvexTessellator::computePtAlongBisector\28int\2c\20SkPoint\20const&\2c\20int\2c\20float\2c\20SkPoint*\29\20const
+3215:FT_Stream_ReadAt
+3216:FT_Stream_OpenMemory
+3217:FT_Set_Char_Size
+3218:FT_Request_Metrics
+3219:FT_Open_Face
+3220:FT_Hypot
+3221:FT_Get_Var_Design_Coordinates
+3222:FT_Get_Paint
+3223:FT_Get_MM_Var
+3224:FT_Done_Library
+3225:DecodeImageData
+3226:Cr_z_inflate_table
+3227:Cr_z_inflateReset
+3228:Cr_z_deflateEnd
+3229:Cr_z_copy_with_crc
+3230:Compute_Point_Displacement
+3231:AAT::trak::sanitize\28hb_sanitize_context_t*\29\20const
+3232:AAT::ltag::sanitize\28hb_sanitize_context_t*\29\20const
+3233:AAT::feat::sanitize\28hb_sanitize_context_t*\29\20const
+3234:AAT::StateTable<AAT::ObsoleteTypes\2c\20void>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+3235:AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor\2c\20OT::IntType<unsigned\20int\2c\204u>>\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20false>>::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+3236:AAT::KerxTable<OT::KernOT>::sanitize\28hb_sanitize_context_t*\29\20const
+3237:AAT::KerxTable<OT::KernAAT>::sanitize\28hb_sanitize_context_t*\29\20const
+3238:AAT::KerxTable<AAT::kerx>::sanitize\28hb_sanitize_context_t*\29\20const
+3239:zeroinfnan
+3240:xyz_almost_equal\28skcms_Matrix3x3\20const&\2c\20skcms_Matrix3x3\20const&\29
+3241:wyhash\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\20long\2c\20unsigned\20long\20long\20const*\29
+3242:wuffs_lzw__decoder__transform_io
+3243:wuffs_gif__decoder__set_quirk_enabled
+3244:wuffs_gif__decoder__restart_frame
+3245:wuffs_gif__decoder__num_animation_loops
+3246:wuffs_gif__decoder__frame_dirty_rect
+3247:wuffs_gif__decoder__decode_up_to_id_part1
+3248:wuffs_gif__decoder__decode_frame
+3249:write_vertex_position\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\2c\20GrShaderCaps\20const&\2c\20GrShaderVar\20const&\2c\20SkMatrix\20const&\2c\20char\20const*\2c\20GrShaderVar*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\29
+3250:write_text_tag\28char\20const*\29
+3251:write_passthrough_vertex_position\28GrGLSLVertexBuilder*\2c\20GrShaderVar\20const&\2c\20GrShaderVar*\29
+3252:write_mAB_or_mBA_tag\28unsigned\20int\2c\20skcms_Curve\20const*\2c\20skcms_Curve\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20skcms_Curve\20const*\2c\20skcms_Matrix3x4\20const*\29
+3253:webgl_get_gl_proc\28void*\2c\20char\20const*\29
+3254:wctomb
+3255:wchar_t*\20std::__2::copy\5babi:v160004\5d<std::__2::__wrap_iter<wchar_t\20const*>\2c\20wchar_t*>\28std::__2::__wrap_iter<wchar_t\20const*>\2c\20std::__2::__wrap_iter<wchar_t\20const*>\2c\20wchar_t*\29
+3256:walk_simple_edges\28SkEdge*\2c\20SkBlitter*\2c\20int\2c\20int\29
+3257:vsscanf
+3258:void\20std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>::assign<unsigned\20long*\2c\200>\28unsigned\20long*\2c\20unsigned\20long*\29
+3259:void\20std::__2::vector<sktext::GlyphRun\2c\20std::__2::allocator<sktext::GlyphRun>>::__emplace_back_slow_path<SkFont\20const&\2c\20SkSpan<SkPoint\20const>&\2c\20SkSpan<unsigned\20short\20const>&\2c\20SkSpan<char\20const>&\2c\20SkSpan<unsigned\20int\20const>&\2c\20SkSpan<SkPoint\20const>&>\28SkFont\20const&\2c\20SkSpan<SkPoint\20const>&\2c\20SkSpan<unsigned\20short\20const>&\2c\20SkSpan<char\20const>&\2c\20SkSpan<unsigned\20int\20const>&\2c\20SkSpan<SkPoint\20const>&\29
+3260:void\20std::__2::vector<skia::textlayout::FontFeature\2c\20std::__2::allocator<skia::textlayout::FontFeature>>::assign<skia::textlayout::FontFeature*\2c\200>\28skia::textlayout::FontFeature*\2c\20skia::textlayout::FontFeature*\29
+3261:void\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>::__emplace_back_slow_path<sk_sp<SkTypeface>>\28sk_sp<SkTypeface>&&\29
+3262:void\20std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>::assign<SkString*\2c\200>\28SkString*\2c\20SkString*\29
+3263:void\20std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\20const*&>\28char\20const*&\29
+3264:void\20std::__2::vector<SkMeshSpecification::Varying\2c\20std::__2::allocator<SkMeshSpecification::Varying>>::__push_back_slow_path<SkMeshSpecification::Varying>\28SkMeshSpecification::Varying&&\29
+3265:void\20std::__2::vector<SkMeshSpecification::Attribute\2c\20std::__2::allocator<SkMeshSpecification::Attribute>>::__push_back_slow_path<SkMeshSpecification::Attribute>\28SkMeshSpecification::Attribute&&\29
+3266:void\20std::__2::vector<SkFontArguments::VariationPosition::Coordinate\2c\20std::__2::allocator<SkFontArguments::VariationPosition::Coordinate>>::assign<SkFontArguments::VariationPosition::Coordinate*\2c\200>\28SkFontArguments::VariationPosition::Coordinate*\2c\20SkFontArguments::VariationPosition::Coordinate*\29
+3267:void\20std::__2::vector<Contour\2c\20std::__2::allocator<Contour>>::__emplace_back_slow_path<SkRect&\2c\20int&\2c\20int&>\28SkRect&\2c\20int&\2c\20int&\29
+3268:void\20std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::construct\5babi:v160004\5d<std::__2::locale::facet*\2c\20void\2c\20void>\28std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>&\2c\20std::__2::locale::facet**\29
+3269:void\20std::__2::__tree_balance_after_insert\5babi:v160004\5d<std::__2::__tree_node_base<void*>*>\28std::__2::__tree_node_base<void*>*\2c\20std::__2::__tree_node_base<void*>*\29
+3270:void\20std::__2::__stable_sort_move<std::__2::_ClassicAlgPolicy\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>\28std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::'lambda'\28\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\2c\20\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop\20const&\29&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::difference_type\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29::$_0::operator\28\29\28FT_ColorStopIterator_\20const&\2c\20std::__2::vector<float\2c\20std::__2::allocator<float>>&\2c\20std::__2::vector<SkRGBA4f<\28SkAlphaType\293>\2c\20std::__2::allocator<SkRGBA4f<\28SkAlphaType\293>>>&\29\20const::ColorStop*>>::value_type*\29
+3271:void\20std::__2::__sift_up\5babi:v160004\5d<std::__2::_ClassicAlgPolicy\2c\20GrGeometryProcessor::ProgramImpl::emitTransformCode\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\29::$_0&\2c\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>\28std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\2c\20std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>\2c\20GrGeometryProcessor::ProgramImpl::emitTransformCode\28GrGLSLVertexBuilder*\2c\20GrGLSLUniformHandler*\29::$_0&\2c\20std::__2::iterator_traits<std::__2::__wrap_iter<std::__2::tuple<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::TransformInfo>*>>::difference_type\29
+3272:void\20std::__2::__optional_storage_base<skia::textlayout::FontArguments\2c\20false>::__assign_from\5babi:v160004\5d<std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\2c\20false>\20const&>\28std::__2::__optional_copy_assign_base<skia::textlayout::FontArguments\2c\20false>\20const&\29
+3273:void\20std::__2::__double_or_nothing\5babi:v160004\5d<char>\28std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>&\2c\20char*&\2c\20char*&\29
+3274:void\20std::__2::__call_once_proxy\5babi:v160004\5d<std::__2::tuple<std::__2::\28anonymous\20namespace\29::__fake_bind&&>>\28void*\29
+3275:void\20sorted_merge<&sweep_lt_vert\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\29
+3276:void\20sorted_merge<&sweep_lt_horiz\28SkPoint\20const&\2c\20SkPoint\20const&\29>\28GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::VertexList*\29
+3277:void\20sort_r_simple<>\28void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\20\28*\29\28void\20const*\2c\20void\20const*\29\29.1
+3278:void\20skgpu::ganesh::SurfaceFillContext::clear<\28SkAlphaType\292>\28SkRGBA4f<\28SkAlphaType\292>\20const&\29
+3279:void\20emscripten::internal::raw_destructor<sk_sp<SkColorSpace>>\28sk_sp<SkColorSpace>*\29
+3280:void\20emscripten::internal::MemberAccess<SimpleStrutStyle\2c\20SimpleFontStyle>::setWire<SimpleStrutStyle>\28SimpleFontStyle\20SimpleStrutStyle::*\20const&\2c\20SimpleStrutStyle&\2c\20SimpleFontStyle*\29
+3281:void\20\28anonymous\20namespace\29::copyFT2LCD16<false>\28FT_Bitmap_\20const&\2c\20SkMaskBuilder*\2c\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\29
+3282:void\20SkTIntroSort<int\2c\20DistanceLessThan>\28int\2c\20int*\2c\20int\2c\20DistanceLessThan\20const&\29
+3283:void\20SkTIntroSort<float\2c\20void\20SkTQSort<float>\28float*\2c\20float*\29::'lambda'\28float\20const&\2c\20float\20const&\29>\28int\2c\20float*\2c\20int\2c\20void\20SkTQSort<float>\28float*\2c\20float*\29::'lambda'\28float\20const&\2c\20float\20const&\29\20const&\29
+3284:void\20SkTIntroSort<SkString\2c\20bool\20\28SkString\20const&\2c\20SkString\20const&\29>\28int\2c\20SkString*\2c\20int\2c\20bool\20\20const\28&\29\28SkString\20const&\2c\20SkString\20const&\29\29
+3285:void\20SkTIntroSort<SkOpRayHit*\2c\20bool\20\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29>\28int\2c\20SkOpRayHit**\2c\20int\2c\20bool\20\20const\28&\29\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29\29
+3286:void\20SkTIntroSort<SkOpContour*\2c\20void\20SkTQSort<SkOpContour>\28SkOpContour**\2c\20SkOpContour**\29::'lambda'\28SkOpContour\20const*\2c\20SkOpContour\20const*\29>\28int\2c\20SkOpContour*\2c\20int\2c\20void\20SkTQSort<SkOpContour>\28SkOpContour**\2c\20SkOpContour**\29::'lambda'\28SkOpContour\20const*\2c\20SkOpContour\20const*\29\20const&\29
+3287:void\20SkTIntroSort<SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::Entry\2c\20SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::EntryLessThan>\28int\2c\20SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::Entry*\2c\20int\2c\20SkIcoCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\29::EntryLessThan\20const&\29
+3288:void\20SkTIntroSort<SkClosestRecord\20const*\2c\20void\20SkTQSort<SkClosestRecord\20const>\28SkClosestRecord\20const**\2c\20SkClosestRecord\20const**\29::'lambda'\28SkClosestRecord\20const*\2c\20SkClosestRecord\20const*\29>\28int\2c\20SkClosestRecord\20const*\2c\20int\2c\20void\20SkTQSort<SkClosestRecord\20const>\28SkClosestRecord\20const**\2c\20SkClosestRecord\20const**\29::'lambda'\28SkClosestRecord\20const*\2c\20SkClosestRecord\20const*\29\20const&\29
+3289:void\20SkTIntroSort<SkAnalyticEdge*\2c\20void\20SkTQSort<SkAnalyticEdge>\28SkAnalyticEdge**\2c\20SkAnalyticEdge**\29::'lambda'\28SkAnalyticEdge\20const*\2c\20SkAnalyticEdge\20const*\29>\28int\2c\20SkAnalyticEdge*\2c\20int\2c\20void\20SkTQSort<SkAnalyticEdge>\28SkAnalyticEdge**\2c\20SkAnalyticEdge**\29::'lambda'\28SkAnalyticEdge\20const*\2c\20SkAnalyticEdge\20const*\29\20const&\29
+3290:void\20SkTIntroSort<GrGpuResource*\2c\20bool\20\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29>\28int\2c\20GrGpuResource**\2c\20int\2c\20bool\20\20const\28&\29\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\29
+3291:void\20SkTIntroSort<GrGpuResource*\2c\20bool\20\28*\29\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29>\28int\2c\20GrGpuResource**\2c\20int\2c\20bool\20\28*\20const&\29\28GrGpuResource*\20const&\2c\20GrGpuResource*\20const&\29\29
+3292:void\20SkTIntroSort<Edge\2c\20EdgeLT>\28int\2c\20Edge*\2c\20int\2c\20EdgeLT\20const&\29
+3293:void\20GrGeometryProcessor::ProgramImpl::collectTransforms\28GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGLSLUniformHandler*\2c\20GrShaderType\2c\20GrShaderVar\20const&\2c\20GrShaderVar\20const&\2c\20GrPipeline\20const&\29::$_0::operator\28\29<$_0>\28$_0&\2c\20GrFragmentProcessor\20const&\2c\20bool\2c\20GrFragmentProcessor\20const*\2c\20int\2c\20GrGeometryProcessor::ProgramImpl::collectTransforms\28GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGLSLUniformHandler*\2c\20GrShaderType\2c\20GrShaderVar\20const&\2c\20GrShaderVar\20const&\2c\20GrPipeline\20const&\29::BaseCoord\29
+3294:void\20AAT::StateTableDriver<AAT::ObsoleteTypes\2c\20void>::drive<AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t>\28AAT::LigatureSubtable<AAT::ObsoleteTypes>::driver_context_t*\2c\20AAT::hb_aat_apply_context_t*\29::'lambda0'\28\29::operator\28\29\28\29\20const
+3295:virtual\20thunk\20to\20GrGLTexture::onSetLabel\28\29
+3296:virtual\20thunk\20to\20GrGLTexture::backendFormat\28\29\20const
+3297:vfiprintf
+3298:validate_texel_levels\28SkISize\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20GrCaps\20const*\29
+3299:unsigned\20short\20std::__2::__num_get_unsigned_integral\5babi:v160004\5d<unsigned\20short>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3300:unsigned\20long\20long\20std::__2::__num_get_unsigned_integral\5babi:v160004\5d<unsigned\20long\20long>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3301:unsigned\20int\20std::__2::__num_get_unsigned_integral\5babi:v160004\5d<unsigned\20int>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3302:unsigned\20int\20const*\20std::__2::lower_bound\5babi:v160004\5d<unsigned\20int\20const*\2c\20unsigned\20long>\28unsigned\20int\20const*\2c\20unsigned\20int\20const*\2c\20unsigned\20long\20const&\29
+3303:unsigned\20int\20const&\20std::__2::__identity::operator\28\29<unsigned\20int\20const&>\28unsigned\20int\20const&\29\20const
+3304:ubidi_getLength_skia
+3305:u_terminateUChars_skia
+3306:u_charType_skia
+3307:tt_size_run_prep
+3308:tt_size_done_bytecode
+3309:tt_sbit_decoder_load_image
+3310:tt_face_vary_cvt
+3311:tt_face_palette_set
+3312:tt_face_load_cvt
+3313:tt_face_get_metrics
+3314:tt_done_blend
+3315:tt_delta_interpolate
+3316:tt_cmap4_set_range
+3317:tt_cmap4_next
+3318:tt_cmap4_char_map_linear
+3319:tt_cmap4_char_map_binary
+3320:tt_cmap14_get_def_chars
+3321:tt_cmap13_next
+3322:tt_cmap12_next
+3323:tt_cmap12_init
+3324:tt_cmap12_char_map_binary
+3325:tt_apply_mvar
+3326:toParagraphStyle\28SimpleParagraphStyle\20const&\29
+3327:t1_lookup_glyph_by_stdcharcode_ps
+3328:t1_builder_close_contour
+3329:t1_builder_check_points
+3330:strtox.1
+3331:strtoull
+3332:strtoll_l
+3333:strspn
+3334:strncpy
+3335:store_int
+3336:std::logic_error::~logic_error\28\29
+3337:std::logic_error::logic_error\28char\20const*\29
+3338:std::exception::exception\5babi:v160004\5d\28\29
+3339:std::__2::vector<unsigned\20char\2c\20std::__2::allocator<unsigned\20char>>::__append\28unsigned\20long\29
+3340:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::max_size\28\29\20const
+3341:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__construct_at_end\28unsigned\20long\29
+3342:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__clear\5babi:v160004\5d\28\29
+3343:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__base_destruct_at_end\5babi:v160004\5d\28std::__2::locale::facet**\29
+3344:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__annotate_shrink\5babi:v160004\5d\28unsigned\20long\29\20const
+3345:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__annotate_new\5babi:v160004\5d\28unsigned\20long\29\20const
+3346:std::__2::vector<std::__2::locale::facet*\2c\20std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::__annotate_delete\5babi:v160004\5d\28\29\20const
+3347:std::__2::vector<float\2c\20std::__2::allocator<float>>::insert\28std::__2::__wrap_iter<float\20const*>\2c\20float&&\29
+3348:std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>::__throw_length_error\5babi:v160004\5d\28\29\20const
+3349:std::__2::vector<SkSL::InlineCandidate\2c\20std::__2::allocator<SkSL::InlineCandidate>>::erase\28std::__2::__wrap_iter<SkSL::InlineCandidate\20const*>\2c\20std::__2::__wrap_iter<SkSL::InlineCandidate\20const*>\29
+3350:std::__2::vector<SkCustomTypefaceBuilder::GlyphRec\2c\20std::__2::allocator<SkCustomTypefaceBuilder::GlyphRec>>::__append\28unsigned\20long\29
+3351:std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>::operator=\5babi:v160004\5d\28std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>&&\29
+3352:std::__2::unique_ptr<SkSL::Program\2c\20std::__2::default_delete<SkSL::Program>>::~unique_ptr\5babi:v160004\5d\28\29
+3353:std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20SkSL::coalesce_vector<bool>\28std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\2c\20double\2c\20SkSL::Type\20const&\2c\20double\20\28*\29\28double\2c\20double\2c\20double\29\2c\20double\20\28*\29\28double\29\29
+3354:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\5babi:v160004\5d\28std::nullptr_t\29
+3355:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\2c\20int\2c\20sktext::gpu::SubRunAllocator>\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\28int\29::'lambda0'\28\29::operator\28\29\28\29\20const
+3356:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\2c\20int\2c\20sktext::gpu::SubRunAllocator>\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\28int\29::'lambda'\28\29::operator\28\29\28\29\20const
+3357:std::__2::tuple<sktext::gpu::SubRunInitializer<sktext::gpu::SlugImpl>\2c\20int\2c\20sktext::gpu::SubRunAllocator>\20sktext::gpu::SubRunAllocator::AllocateClassMemoryAndArena<sktext::gpu::SlugImpl>\28int\29
+3358:std::__2::to_string\28unsigned\20long\29
+3359:std::__2::to_chars_result\20std::__2::__to_chars_itoa\5babi:v160004\5d<unsigned\20int>\28char*\2c\20char*\2c\20unsigned\20int\2c\20std::__2::integral_constant<bool\2c\20false>\29
+3360:std::__2::time_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::~time_put\28\29
+3361:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__get_year\28int&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\29\20const
+3362:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__get_weekdayname\28int&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\29\20const
+3363:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__get_monthname\28int&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20unsigned\20int&\2c\20std::__2::ctype<wchar_t>\20const&\29\20const
+3364:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__get_year\28int&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\29\20const
+3365:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__get_weekdayname\28int&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\29\20const
+3366:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__get_monthname\28int&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20unsigned\20int&\2c\20std::__2::ctype<char>\20const&\29\20const
+3367:std::__2::reverse_iterator<std::__2::locale::facet**>::operator++\5babi:v160004\5d\28\29
+3368:std::__2::reverse_iterator<std::__2::locale::facet**>::operator*\5babi:v160004\5d\28\29\20const
+3369:std::__2::priority_queue<GrAATriangulator::Event*\2c\20std::__2::vector<GrAATriangulator::Event*\2c\20std::__2::allocator<GrAATriangulator::Event*>>\2c\20GrAATriangulator::EventComparator>::push\28GrAATriangulator::Event*\20const&\29
+3370:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20std::__2::__unordered_map_hasher<GrFragmentProcessor\20const*\2c\20std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20std::__2::hash<GrFragmentProcessor\20const*>\2c\20std::__2::equal_to<GrFragmentProcessor\20const*>\2c\20true>\2c\20std::__2::__unordered_map_equal<GrFragmentProcessor\20const*\2c\20std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>\2c\20std::__2::equal_to<GrFragmentProcessor\20const*>\2c\20std::__2::hash<GrFragmentProcessor\20const*>\2c\20true>\2c\20std::__2::allocator<std::__2::__hash_value_type<GrFragmentProcessor\20const*\2c\20GrGeometryProcessor::ProgramImpl::FPCoords>>>::__emplace_unique_key_args<GrFragmentProcessor\20const*\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrFragmentProcessor\20const*&&>\2c\20std::__2::tuple<>>\28GrFragmentProcessor\20const*\20const&\2c\20std::__2::piecewise_construct_t\20const&\2c\20std::__2::tuple<GrFragmentProcessor\20const*&&>&&\2c\20std::__2::tuple<>&&\29
+3371:std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<int\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<int\2c\20std::__2::hash<int>\2c\20std::__2::equal_to<int>\2c\20std::__2::allocator<int>>::__emplace_unique_key_args<int\2c\20int\20const&>\28int\20const&\2c\20int\20const&\29
+3372:std::__2::pair<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>>::pair\28std::__2::pair<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>>&&\29
+3373:std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator=\5babi:v160004\5d\28wchar_t\29
+3374:std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator=\5babi:v160004\5d\28char\29
+3375:std::__2::optional<SkPath>&\20std::__2::optional<SkPath>::operator=\5babi:v160004\5d<SkPath\20const&\2c\20void>\28SkPath\20const&\29
+3376:std::__2::numpunct<wchar_t>::~numpunct\28\29
+3377:std::__2::numpunct<char>::~numpunct\28\29
+3378:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20int&\29\20const
+3379:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>>\28std::__2::locale\20const&\29
+3380:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20int&\29\20const
+3381:std::__2::moneypunct<wchar_t\2c\20true>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<wchar_t\2c\20true>>\28std::__2::locale\20const&\29
+3382:std::__2::moneypunct<wchar_t\2c\20false>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<wchar_t\2c\20false>>\28std::__2::locale\20const&\29
+3383:std::__2::moneypunct<wchar_t\2c\20false>::do_negative_sign\28\29\20const
+3384:std::__2::moneypunct<char\2c\20true>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<char\2c\20true>>\28std::__2::locale\20const&\29
+3385:std::__2::moneypunct<char\2c\20false>\20const&\20std::__2::use_facet\5babi:v160004\5d<std::__2::moneypunct<char\2c\20false>>\28std::__2::locale\20const&\29
+3386:std::__2::moneypunct<char\2c\20false>::do_negative_sign\28\29\20const
+3387:std::__2::money_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::__do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>&\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::locale\20const&\2c\20unsigned\20int\2c\20unsigned\20int&\2c\20bool&\2c\20std::__2::ctype<wchar_t>\20const&\2c\20std::__2::unique_ptr<wchar_t\2c\20void\20\28*\29\28void*\29>&\2c\20wchar_t*&\2c\20wchar_t*\29
+3388:std::__2::money_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::__do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>&\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::locale\20const&\2c\20unsigned\20int\2c\20unsigned\20int&\2c\20bool&\2c\20std::__2::ctype<char>\20const&\2c\20std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>&\2c\20char*&\2c\20char*\29
+3389:std::__2::locale::__imp::~__imp\28\29
+3390:std::__2::iterator_traits<unsigned\20int\20const*>::difference_type\20std::__2::__distance\5babi:v160004\5d<unsigned\20int\20const*>\28unsigned\20int\20const*\2c\20unsigned\20int\20const*\2c\20std::__2::random_access_iterator_tag\29
+3391:std::__2::iterator_traits<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*>::difference_type\20std::__2::distance\5babi:v160004\5d<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*>\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const*\29
+3392:std::__2::iterator_traits<char*>::difference_type\20std::__2::distance\5babi:v160004\5d<char*>\28char*\2c\20char*\29
+3393:std::__2::iterator_traits<char*>::difference_type\20std::__2::__distance\5babi:v160004\5d<char*>\28char*\2c\20char*\2c\20std::__2::random_access_iterator_tag\29
+3394:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::operator++\5babi:v160004\5d\28int\29
+3395:std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>::__test_for_eof\5babi:v160004\5d\28\29\20const
+3396:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::operator++\5babi:v160004\5d\28int\29
+3397:std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>::__test_for_eof\5babi:v160004\5d\28\29\20const
+3398:std::__2::ios_base::width\5babi:v160004\5d\28long\29
+3399:std::__2::ios_base::init\28void*\29
+3400:std::__2::ios_base::imbue\28std::__2::locale\20const&\29
+3401:std::__2::ios_base::clear\28unsigned\20int\29
+3402:std::__2::ios_base::__call_callbacks\28std::__2::ios_base::event\29
+3403:std::__2::hash<skia::textlayout::FontArguments>::operator\28\29\28skia::textlayout::FontArguments\20const&\29\20const
+3404:std::__2::enable_if<std::is_base_of_v<SkShader\2c\20SkPictureShader>\2c\20sk_sp<SkShader>>::type\20SkLocalMatrixShader::MakeWrapped<SkPictureShader\2c\20sk_sp<SkPicture>\2c\20SkTileMode&\2c\20SkTileMode&\2c\20SkFilterMode&\2c\20SkRect\20const*&>\28SkMatrix\20const*\2c\20sk_sp<SkPicture>&&\2c\20SkTileMode&\2c\20SkTileMode&\2c\20SkFilterMode&\2c\20SkRect\20const*&\29
+3405:std::__2::enable_if<is_move_constructible<char>::value\20&&\20is_move_assignable<char>::value\2c\20void>::type\20std::__2::swap\5babi:v160004\5d<char>\28char&\2c\20char&\29
+3406:std::__2::enable_if<__is_cpp17_random_access_iterator<char\20const*>::value\2c\20char*>::type\20std::__2::copy_n\5babi:v160004\5d<char\20const*\2c\20unsigned\20long\2c\20char*>\28char\20const*\2c\20unsigned\20long\2c\20char*\29
+3407:std::__2::enable_if<__is_cpp17_forward_iterator<wchar_t\20const*>::value\2c\20void>::type\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__init<wchar_t\20const*>\28wchar_t\20const*\2c\20wchar_t\20const*\29
+3408:std::__2::enable_if<__is_cpp17_forward_iterator<char*>::value\2c\20void>::type\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__init<char*>\28char*\2c\20char*\29
+3409:std::__2::deque<skia::textlayout::OneLineShaper::RunBlock\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock>>::__add_back_capacity\28\29
+3410:std::__2::default_delete<sktext::gpu::TextBlobRedrawCoordinator>::operator\28\29\5babi:v160004\5d\28sktext::gpu::TextBlobRedrawCoordinator*\29\20const
+3411:std::__2::default_delete<sktext::GlyphRunBuilder>::operator\28\29\5babi:v160004\5d\28sktext::GlyphRunBuilder*\29\20const
+3412:std::__2::ctype<char>::~ctype\28\29
+3413:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::~codecvt\28\29
+3414:std::__2::codecvt<char\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+3415:std::__2::codecvt<char32_t\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20char32_t\20const*\2c\20char32_t\20const*\2c\20char32_t\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+3416:std::__2::codecvt<char32_t\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+3417:std::__2::codecvt<char32_t\2c\20char\2c\20__mbstate_t>::do_in\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20char32_t*\2c\20char32_t*\2c\20char32_t*&\29\20const
+3418:std::__2::codecvt<char16_t\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20char16_t\20const*\2c\20char16_t\20const*\2c\20char16_t\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+3419:std::__2::codecvt<char16_t\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+3420:std::__2::codecvt<char16_t\2c\20char\2c\20__mbstate_t>::do_in\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20char16_t*\2c\20char16_t*\2c\20char16_t*&\29\20const
+3421:std::__2::char_traits<char>::not_eof\28int\29
+3422:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::str\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+3423:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::str\28\29\20const
+3424:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::basic_string\5babi:v160004\5d\28unsigned\20long\2c\20wchar_t\29
+3425:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__grow_by_and_replace\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20wchar_t\20const*\29
+3426:std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>::__grow_by\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+3427:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::insert\28unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29
+3428:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string\5babi:v160004\5d\28unsigned\20long\2c\20char\29
+3429:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::basic_string<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20void>\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\20const&\29
+3430:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__throw_out_of_range\5babi:v160004\5d\28\29\20const
+3431:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__null_terminate_at\5babi:v160004\5d\28char*\2c\20unsigned\20long\29
+3432:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::__assign_no_alias<false>\28char\20const*\2c\20unsigned\20long\29
+3433:std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\20skia_private::TArray<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20false>::emplace_back<char\20const*>\28char\20const*&&\29
+3434:std::__2::basic_streambuf<wchar_t\2c\20std::__2::char_traits<wchar_t>>::sgetc\5babi:v160004\5d\28\29
+3435:std::__2::basic_streambuf<wchar_t\2c\20std::__2::char_traits<wchar_t>>::sbumpc\5babi:v160004\5d\28\29
+3436:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::sputc\5babi:v160004\5d\28char\29
+3437:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::sgetc\5babi:v160004\5d\28\29
+3438:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::sbumpc\5babi:v160004\5d\28\29
+3439:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::basic_streambuf\28\29
+3440:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29.2
+3441:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::sentry::~sentry\28\29
+3442:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::sentry::sentry\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\29
+3443:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::operator<<\28float\29
+3444:std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::flush\28\29
+3445:std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29.2
+3446:std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::sentry::sentry\28std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>&\2c\20bool\29
+3447:std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::deallocate\5babi:v160004\5d\28std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>&\2c\20std::__2::locale::facet**\2c\20unsigned\20long\29
+3448:std::__2::allocator<wchar_t>::deallocate\5babi:v160004\5d\28wchar_t*\2c\20unsigned\20long\29
+3449:std::__2::allocator<wchar_t>::allocate\5babi:v160004\5d\28unsigned\20long\29
+3450:std::__2::allocator<char>::allocate\5babi:v160004\5d\28unsigned\20long\29
+3451:std::__2::__unique_if<SkSL::ConstructorCompound>::__unique_single\20std::__2::make_unique\5babi:v160004\5d<SkSL::ConstructorCompound\2c\20SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray>\28SkSL::Position&\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray&&\29
+3452:std::__2::__time_put::__time_put\5babi:v160004\5d\28\29
+3453:std::__2::__time_put::__do_put\28char*\2c\20char*&\2c\20tm\20const*\2c\20char\2c\20char\29\20const
+3454:std::__2::__throw_system_error\28int\2c\20char\20const*\29
+3455:std::__2::__split_buffer<skia::textlayout::OneLineShaper::RunBlock*\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::RunBlock*>>::push_back\28skia::textlayout::OneLineShaper::RunBlock*&&\29
+3456:std::__2::__optional_destruct_base<GrStyledShape\2c\20false>::~__optional_destruct_base\5babi:v160004\5d\28\29
+3457:std::__2::__num_put<wchar_t>::__widen_and_group_int\28char*\2c\20char*\2c\20char*\2c\20wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20std::__2::locale\20const&\29
+3458:std::__2::__num_put<wchar_t>::__widen_and_group_float\28char*\2c\20char*\2c\20char*\2c\20wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20std::__2::locale\20const&\29
+3459:std::__2::__num_put<char>::__widen_and_group_int\28char*\2c\20char*\2c\20char*\2c\20char*\2c\20char*&\2c\20char*&\2c\20std::__2::locale\20const&\29
+3460:std::__2::__num_put<char>::__widen_and_group_float\28char*\2c\20char*\2c\20char*\2c\20char*\2c\20char*&\2c\20char*&\2c\20std::__2::locale\20const&\29
+3461:std::__2::__money_put<wchar_t>::__gather_info\28bool\2c\20bool\2c\20std::__2::locale\20const&\2c\20std::__2::money_base::pattern&\2c\20wchar_t&\2c\20wchar_t&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&\2c\20int&\29
+3462:std::__2::__money_put<wchar_t>::__format\28wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20unsigned\20int\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20std::__2::ctype<wchar_t>\20const&\2c\20bool\2c\20std::__2::money_base::pattern\20const&\2c\20wchar_t\2c\20wchar_t\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\2c\20int\29
+3463:std::__2::__money_put<char>::__gather_info\28bool\2c\20bool\2c\20std::__2::locale\20const&\2c\20std::__2::money_base::pattern&\2c\20char&\2c\20char&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\2c\20int&\29
+3464:std::__2::__money_put<char>::__format\28char*\2c\20char*&\2c\20char*&\2c\20unsigned\20int\2c\20char\20const*\2c\20char\20const*\2c\20std::__2::ctype<char>\20const&\2c\20bool\2c\20std::__2::money_base::pattern\20const&\2c\20char\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20int\29
+3465:std::__2::__libcpp_sscanf_l\28char\20const*\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+3466:std::__2::__libcpp_mbrtowc_l\5babi:v160004\5d\28wchar_t*\2c\20char\20const*\2c\20unsigned\20long\2c\20__mbstate_t*\2c\20__locale_struct*\29
+3467:std::__2::__libcpp_mb_cur_max_l\5babi:v160004\5d\28__locale_struct*\29
+3468:std::__2::__libcpp_deallocate\5babi:v160004\5d\28void*\2c\20unsigned\20long\2c\20unsigned\20long\29
+3469:std::__2::__libcpp_allocate\5babi:v160004\5d\28unsigned\20long\2c\20unsigned\20long\29
+3470:std::__2::__is_overaligned_for_new\5babi:v160004\5d\28unsigned\20long\29
+3471:std::__2::__function::__value_func<void\20\28void*\2c\20void\20const*\29>::swap\5babi:v160004\5d\28std::__2::__function::__value_func<void\20\28void*\2c\20void\20const*\29>&\29
+3472:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+3473:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+3474:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::operator\28\29\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29
+3475:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::destroy\28\29
+3476:std::__2::__constexpr_wcslen\5babi:v160004\5d\28wchar_t\20const*\29
+3477:std::__2::__allocation_result<std::__2::allocator_traits<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>::pointer>\20std::__2::__allocate_at_least\5babi:v160004\5d<std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>>\28std::__2::__sso_allocator<std::__2::locale::facet*\2c\2030ul>&\2c\20unsigned\20long\29
+3478:start_input_pass
+3479:sktext::gpu::can_use_direct\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+3480:sktext::gpu::build_distance_adjust_table\28float\2c\20float\29
+3481:sktext::gpu::VertexFiller::opMaskType\28\29\20const
+3482:sktext::gpu::VertexFiller::fillVertexData\28int\2c\20int\2c\20SkSpan<sktext::gpu::Glyph\20const*>\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkIRect\2c\20void*\29\20const
+3483:sktext::gpu::TextBlobRedrawCoordinator::internalRemove\28sktext::gpu::TextBlob*\29
+3484:sktext::gpu::SubRunContainer::MakeInAlloc\28sktext::GlyphRunList\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\2c\20char\20const*\29::$_2::operator\28\29\28SkZip<SkPackedGlyphID\20const\2c\20SkPoint\20const>\2c\20skgpu::MaskFormat\29\20const
+3485:sktext::gpu::SubRunContainer::MakeInAlloc\28sktext::GlyphRunList\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\2c\20char\20const*\29::$_0::operator\28\29\28SkZip<SkPackedGlyphID\20const\2c\20SkPoint\20const>\2c\20skgpu::MaskFormat\29\20const
+3486:sktext::gpu::SubRunContainer::MakeInAlloc\28sktext::GlyphRunList\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\2c\20sktext::gpu::SubRunAllocator*\2c\20sktext::gpu::SubRunContainer::SubRunCreationBehavior\2c\20char\20const*\29
+3487:sktext::gpu::SubRunContainer::EstimateAllocSize\28sktext::GlyphRunList\20const&\29
+3488:sktext::gpu::SubRunAllocator::SubRunAllocator\28char*\2c\20int\2c\20int\29
+3489:sktext::gpu::StrikeCache::~StrikeCache\28\29
+3490:sktext::gpu::SlugImpl::Make\28SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\2c\20SkStrikeDeviceInfo\2c\20sktext::StrikeForGPUCacheInterface*\29
+3491:sktext::gpu::Slug::NextUniqueID\28\29
+3492:sktext::gpu::BagOfBytes::BagOfBytes\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29::$_1::operator\28\29\28\29\20const
+3493:sktext::glyphrun_source_bounds\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkZip<unsigned\20short\20const\2c\20SkPoint\20const>\2c\20SkSpan<SkPoint\20const>\29
+3494:sktext::SkStrikePromise::resetStrike\28\29
+3495:sktext::SkStrikePromise::SkStrikePromise\28sk_sp<SkStrike>&&\29
+3496:sktext::GlyphRunList::makeBlob\28\29\20const
+3497:sktext::GlyphRunBuilder::blobToGlyphRunList\28SkTextBlob\20const&\2c\20SkPoint\29
+3498:skstd::to_string\28float\29
+3499:skpathutils::FillPathWithPaint\28SkPath\20const&\2c\20SkPaint\20const&\2c\20SkPath*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29
+3500:skjpeg_err_exit\28jpeg_common_struct*\29
+3501:skip_string
+3502:skip_procedure
+3503:skif::\28anonymous\20namespace\29::is_nearly_integer_translation\28skif::LayerSpace<SkMatrix>\20const&\2c\20skif::LayerSpace<SkIPoint>*\29
+3504:skif::\28anonymous\20namespace\29::extract_subset\28SkSpecialImage\20const*\2c\20skif::LayerSpace<SkIPoint>\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20bool\29
+3505:skif::\28anonymous\20namespace\29::decompose_transform\28SkMatrix\20const&\2c\20SkPoint\2c\20SkMatrix*\2c\20SkMatrix*\29
+3506:skif::\28anonymous\20namespace\29::GaneshBackend::maxSigma\28\29\20const
+3507:skif::\28anonymous\20namespace\29::GaneshBackend::getBlurEngine\28\29\20const
+3508:skif::\28anonymous\20namespace\29::GaneshBackend::blur\28SkSize\2c\20sk_sp<SkSpecialImage>\2c\20SkIRect\20const&\2c\20SkTileMode\2c\20SkIRect\20const&\29\20const
+3509:skif::Mapping::applyOrigin\28skif::LayerSpace<SkIPoint>\20const&\29
+3510:skif::FilterResult::draw\28skif::Context\20const&\2c\20SkDevice*\2c\20bool\2c\20SkBlender\20const*\29\20const
+3511:skif::FilterResult::applyCrop\28skif::Context\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20SkTileMode\29\20const
+3512:skif::FilterResult::FilterResult\28std::__2::pair<sk_sp<SkSpecialImage>\2c\20skif::LayerSpace<SkIPoint>>\29
+3513:skia_private::THashTable<unsigned\20long\20long\2c\20unsigned\20long\20long\2c\20skia_private::THashSet<unsigned\20long\20long\2c\20SkGoodHash>::Traits>::set\28unsigned\20long\20long\29
+3514:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair&&\29
+3515:skia_private::THashTable<skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair\2c\20unsigned\20int\2c\20skia_private::THashMap<unsigned\20int\2c\20sktext::gpu::TextBlobRedrawCoordinator::BlobIDCacheEntry\2c\20SkGoodHash>::Pair>::removeSlot\28int\29
+3516:skia_private::THashTable<skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::IntrinsicKind\2c\20SkGoodHash>::Pair&&\29
+3517:skia_private::THashTable<skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\2c\20sk_sp<SkTypeface>\2c\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair\2c\20skia::textlayout::OneLineShaper::FontKey\2c\20skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\2c\20sk_sp<SkTypeface>\2c\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair>::uncheckedSet\28skia_private::THashMap<skia::textlayout::OneLineShaper::FontKey\2c\20sk_sp<SkTypeface>\2c\20skia::textlayout::OneLineShaper::FontKey::Hasher>::Pair&&\29
+3518:skia_private::THashTable<skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>\2c\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair\2c\20skia::textlayout::FontCollection::FamilyKey\2c\20skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>\2c\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair>::uncheckedSet\28skia_private::THashMap<skia::textlayout::FontCollection::FamilyKey\2c\20std::__2::vector<sk_sp<SkTypeface>\2c\20std::__2::allocator<sk_sp<SkTypeface>>>\2c\20skia::textlayout::FontCollection::FamilyKey::Hasher>::Pair&&\29
+3519:skia_private::THashTable<skia_private::THashMap<skgpu::UniqueKey\2c\20GrResourceAllocator::Register*\2c\20GrResourceAllocator::UniqueKeyHash>::Pair\2c\20skgpu::UniqueKey\2c\20skia_private::THashMap<skgpu::UniqueKey\2c\20GrResourceAllocator::Register*\2c\20GrResourceAllocator::UniqueKeyHash>::Pair>::uncheckedSet\28skia_private::THashMap<skgpu::UniqueKey\2c\20GrResourceAllocator::Register*\2c\20GrResourceAllocator::UniqueKeyHash>::Pair&&\29
+3520:skia_private::THashTable<skia_private::THashMap<SkString\2c\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\2c\20SkGoodHash>::Pair\2c\20SkString\2c\20skia_private::THashMap<SkString\2c\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkString\2c\20sk_sp<skia::textlayout::TypefaceFontStyleSet>\2c\20SkGoodHash>::Pair&&\29
+3521:skia_private::THashTable<skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair\2c\20SkSL::SymbolTable::SymbolKey\2c\20skia_private::THashMap<SkSL::SymbolTable::SymbolKey\2c\20SkSL::Symbol*\2c\20SkSL::SymbolTable::SymbolKey::Hash>::Pair>::find\28SkSL::SymbolTable::SymbolKey\20const&\29\20const
+3522:skia_private::THashTable<skia_private::THashMap<SkPath\2c\20int\2c\20SkPictureRecord::PathHash>::Pair\2c\20SkPath\2c\20skia_private::THashMap<SkPath\2c\20int\2c\20SkPictureRecord::PathHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkPath\2c\20int\2c\20SkPictureRecord::PathHash>::Pair&&\29
+3523:skia_private::THashTable<skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair\2c\20SkImageFilter\20const*\2c\20skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair>::uncheckedSet\28skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair&&\29
+3524:skia_private::THashTable<skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair\2c\20SkImageFilter\20const*\2c\20skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::Pair>::resize\28int\29
+3525:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::uncheckedSet\28skgpu::ganesh::SmallPathShapeData*&&\29
+3526:skia_private::THashTable<skgpu::ganesh::SmallPathShapeData*\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20SkTDynamicHash<skgpu::ganesh::SmallPathShapeData\2c\20skgpu::ganesh::SmallPathShapeDataKey\2c\20skgpu::ganesh::SmallPathShapeData>::AdaptedTraits>::resize\28int\29
+3527:skia_private::THashTable<sk_sp<sktext::gpu::TextStrike>\2c\20SkDescriptor\20const&\2c\20sktext::gpu::StrikeCache::HashTraits>::uncheckedSet\28sk_sp<sktext::gpu::TextStrike>&&\29
+3528:skia_private::THashTable<sk_sp<SkStrike>\2c\20SkDescriptor\2c\20SkStrikeCache::StrikeTraits>::resize\28int\29
+3529:skia_private::THashTable<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20SkImageFilterCacheKey\2c\20SkTDynamicHash<\28anonymous\20namespace\29::CacheImpl::Value\2c\20SkImageFilterCacheKey\2c\20\28anonymous\20namespace\29::CacheImpl::Value>::AdaptedTraits>::uncheckedSet\28\28anonymous\20namespace\29::CacheImpl::Value*&&\29
+3530:skia_private::THashTable<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20SkImageFilterCacheKey\2c\20SkTDynamicHash<\28anonymous\20namespace\29::CacheImpl::Value\2c\20SkImageFilterCacheKey\2c\20\28anonymous\20namespace\29::CacheImpl::Value>::AdaptedTraits>::resize\28int\29
+3531:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::uncheckedSet\28SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList*&&\29
+3532:skia_private::THashTable<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::ValueList>::AdaptedTraits>::resize\28int\29
+3533:skia_private::THashTable<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::uncheckedSet\28SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList*&&\29
+3534:skia_private::THashTable<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList*\2c\20skgpu::ScratchKey\2c\20SkTDynamicHash<SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList\2c\20skgpu::ScratchKey\2c\20SkTMultiMap<GrGpuResource\2c\20skgpu::ScratchKey\2c\20GrResourceCache::ScratchMapTraits>::ValueList>::AdaptedTraits>::resize\28int\29
+3535:skia_private::THashTable<SkResourceCache::Rec*\2c\20SkResourceCache::Key\2c\20\28anonymous\20namespace\29::HashTraits>::uncheckedSet\28SkResourceCache::Rec*&&\29
+3536:skia_private::THashTable<SkResourceCache::Rec*\2c\20SkResourceCache::Key\2c\20\28anonymous\20namespace\29::HashTraits>::resize\28int\29
+3537:skia_private::THashTable<SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Entry*\2c\20unsigned\20long\20long\2c\20SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::Traits>::resize\28int\29
+3538:skia_private::THashTable<SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Entry*\2c\20unsigned\20int\2c\20SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Traits>::set\28SkLRUCache<unsigned\20int\2c\20GrGLGpu::SamplerObjectCache::Sampler\2c\20SkGoodHash>::Entry*\29
+3539:skia_private::THashTable<SkLRUCache<skia::textlayout::ParagraphCacheKey\2c\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\2c\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\2c\20skia::textlayout::ParagraphCache::KeyHash>::Entry*\2c\20skia::textlayout::ParagraphCacheKey\2c\20SkLRUCache<skia::textlayout::ParagraphCacheKey\2c\20std::__2::unique_ptr<skia::textlayout::ParagraphCache::Entry\2c\20std::__2::default_delete<skia::textlayout::ParagraphCache::Entry>>\2c\20skia::textlayout::ParagraphCache::KeyHash>::Traits>::resize\28int\29
+3540:skia_private::THashTable<SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*\2c\20GrProgramDesc\2c\20SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Traits>::uncheckedSet\28SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*&&\29
+3541:skia_private::THashTable<SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Entry*\2c\20GrProgramDesc\2c\20SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::Traits>::resize\28int\29
+3542:skia_private::THashTable<GrGpuResource*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrGpuResource\2c\20skgpu::UniqueKey\2c\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::uncheckedSet\28GrGpuResource*&&\29
+3543:skia_private::THashTable<GrGpuResource*\2c\20skgpu::UniqueKey\2c\20SkTDynamicHash<GrGpuResource\2c\20skgpu::UniqueKey\2c\20GrResourceCache::UniqueHashTraits>::AdaptedTraits>::resize\28int\29
+3544:skia_private::THashMap<unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\2c\20SkGoodHash>::set\28unsigned\20int\2c\20sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\29
+3545:skia_private::THashMap<SkImageFilter\20const*\2c\20std::__2::vector<\28anonymous\20namespace\29::CacheImpl::Value*\2c\20std::__2::allocator<\28anonymous\20namespace\29::CacheImpl::Value*>>\2c\20SkGoodHash>::remove\28SkImageFilter\20const*\20const&\29
+3546:skia_private::TArray<skia::textlayout::Run\2c\20false>::~TArray\28\29
+3547:skia_private::TArray<skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::Entry\2c\20false>::installDataAndUpdateCapacity\28SkSpan<std::byte>\29
+3548:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\2c\20false>::operator=\28skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\2c\20false>&&\29
+3549:skia_private::TArray<skgpu::UniqueKeyInvalidatedMessage\2c\20false>::installDataAndUpdateCapacity\28SkSpan<std::byte>\29
+3550:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20false>::operator=\28skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20false>&&\29
+3551:skia_private::TArray<skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::BufferFinishedMessage\2c\20false>::installDataAndUpdateCapacity\28SkSpan<std::byte>\29
+3552:skia_private::TArray<skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::Plane\2c\20false>::move\28void*\29
+3553:skia_private::TArray<SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>::operator=\28skia_private::TArray<SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>\20const&\29
+3554:skia_private::TArray<SkString\2c\20true>::operator=\28skia_private::TArray<SkString\2c\20true>&&\29
+3555:skia_private::TArray<SkSL::optimize_constructor_swizzle\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ConstructorCompound\20const&\2c\20skia_private::STArray<4\2c\20signed\20char\2c\20true>\29::ReorderedArgument\2c\20false>::push_back\28SkSL::optimize_constructor_swizzle\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ConstructorCompound\20const&\2c\20skia_private::STArray<4\2c\20signed\20char\2c\20true>\29::ReorderedArgument&&\29
+3556:skia_private::TArray<SkSL::Field\2c\20true>::TArray\28skia_private::TArray<SkSL::Field\2c\20true>&&\29
+3557:skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\2c\20true>::swap\28skia_private::TArray<SkResourceCache::PurgeSharedIDMessage\2c\20true>&\29
+3558:skia_private::TArray<SkRGBA4f<\28SkAlphaType\292>\2c\20true>::operator=\28skia_private::TArray<SkRGBA4f<\28SkAlphaType\292>\2c\20true>&&\29
+3559:skia_private::TArray<SkPath\2c\20true>::push_back_raw\28int\29
+3560:skia_private::TArray<SkMatrix\2c\20true>::push_back_raw\28int\29
+3561:skia_private::TArray<SkClosestRecord\2c\20true>::push_back_raw\28int\29
+3562:skia_private::TArray<PathSegment\2c\20true>::push_back_raw\28int\29
+3563:skia_private::TArray<GrTextureProxy*\2c\20true>::move_back_n\28int\2c\20GrTextureProxy**\29
+3564:skia_private::TArray<GrResourceCache::UnrefResourceMessage\2c\20false>::operator=\28skia_private::TArray<GrResourceCache::UnrefResourceMessage\2c\20false>&&\29
+3565:skia_private::TArray<GrGLAttribArrayState::AttribArrayState\2c\20true>::push_back_raw\28int\29
+3566:skia_private::TArray<EllipticalRRectOp::RRect\2c\20true>::push_back_n\28int\2c\20EllipticalRRectOp::RRect\20const*\29
+3567:skia_private::STArray<4\2c\20signed\20char\2c\20true>::STArray\28skia_private::STArray<4\2c\20signed\20char\2c\20true>\20const&\29
+3568:skia_png_zfree
+3569:skia_png_write_zTXt
+3570:skia_png_write_tIME
+3571:skia_png_write_tEXt
+3572:skia_png_write_iTXt
+3573:skia_png_set_write_fn
+3574:skia_png_set_strip_16
+3575:skia_png_set_read_user_transform_fn
+3576:skia_png_set_read_user_chunk_fn
+3577:skia_png_set_option
+3578:skia_png_set_mem_fn
+3579:skia_png_set_expand_gray_1_2_4_to_8
+3580:skia_png_set_error_fn
+3581:skia_png_set_compression_level
+3582:skia_png_set_IHDR
+3583:skia_png_read_filter_row
+3584:skia_png_process_IDAT_data
+3585:skia_png_icc_set_sRGB
+3586:skia_png_icc_check_tag_table
+3587:skia_png_icc_check_header
+3588:skia_png_get_uint_31
+3589:skia_png_get_sBIT
+3590:skia_png_get_rowbytes
+3591:skia_png_get_error_ptr
+3592:skia_png_get_IHDR
+3593:skia_png_do_swap
+3594:skia_png_do_read_transformations
+3595:skia_png_do_read_interlace
+3596:skia_png_do_packswap
+3597:skia_png_do_invert
+3598:skia_png_do_gray_to_rgb
+3599:skia_png_do_expand
+3600:skia_png_do_check_palette_indexes
+3601:skia_png_do_bgr
+3602:skia_png_destroy_png_struct
+3603:skia_png_destroy_gamma_table
+3604:skia_png_create_png_struct
+3605:skia_png_create_info_struct
+3606:skia_png_crc_read
+3607:skia_png_colorspace_sync_info
+3608:skia_png_check_IHDR
+3609:skia::textlayout::TypefaceFontStyleSet::matchStyle\28SkFontStyle\20const&\29
+3610:skia::textlayout::TextStyle::matchOneAttribute\28skia::textlayout::StyleType\2c\20skia::textlayout::TextStyle\20const&\29\20const
+3611:skia::textlayout::TextStyle::equals\28skia::textlayout::TextStyle\20const&\29\20const
+3612:skia::textlayout::TextShadow::operator!=\28skia::textlayout::TextShadow\20const&\29\20const
+3613:skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29
+3614:skia::textlayout::TextLine::iterateThroughClustersInGlyphsOrder\28bool\2c\20bool\2c\20std::__2::function<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>\20const&\29\20const::$_0::operator\28\29\28unsigned\20long\20const&\29\20const
+3615:skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\20const::'lambda'\28SkRect\29::operator\28\29\28SkRect\29\20const
+3616:skia::textlayout::TextLine::getMetrics\28\29\20const
+3617:skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29
+3618:skia::textlayout::TextLine::buildTextBlob\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+3619:skia::textlayout::TextLine::TextLine\28skia::textlayout::ParagraphImpl*\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20skia::textlayout::InternalLineMetrics\29
+3620:skia::textlayout::TextLine&\20skia_private::TArray<skia::textlayout::TextLine\2c\20false>::emplace_back<skia::textlayout::ParagraphImpl*\2c\20SkPoint&\2c\20SkPoint&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20float&\2c\20skia::textlayout::InternalLineMetrics&>\28skia::textlayout::ParagraphImpl*&&\2c\20SkPoint&\2c\20SkPoint&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20skia::textlayout::SkRange<unsigned\20long>&\2c\20float&\2c\20skia::textlayout::InternalLineMetrics&\29
+3621:skia::textlayout::Run::shift\28skia::textlayout::Cluster\20const*\2c\20float\29
+3622:skia::textlayout::Run::newRunBuffer\28\29
+3623:skia::textlayout::Run::findLimitingGlyphClusters\28skia::textlayout::SkRange<unsigned\20long>\29\20const
+3624:skia::textlayout::ParagraphStyle::effective_align\28\29\20const
+3625:skia::textlayout::ParagraphStyle::ParagraphStyle\28\29
+3626:skia::textlayout::ParagraphPainter::DecorationStyle::DecorationStyle\28unsigned\20int\2c\20float\2c\20std::__2::optional<skia::textlayout::ParagraphPainter::DashPathEffect>\29
+3627:skia::textlayout::ParagraphImpl::~ParagraphImpl\28\29
+3628:skia::textlayout::ParagraphImpl::text\28skia::textlayout::SkRange<unsigned\20long>\29
+3629:skia::textlayout::ParagraphImpl::resolveStrut\28\29
+3630:skia::textlayout::ParagraphImpl::getGlyphInfoAtUTF16Offset\28unsigned\20long\2c\20skia::textlayout::Paragraph::GlyphInfo*\29
+3631:skia::textlayout::ParagraphImpl::getGlyphClusterAt\28unsigned\20long\2c\20skia::textlayout::Paragraph::GlyphClusterInfo*\29
+3632:skia::textlayout::ParagraphImpl::findPreviousGraphemeBoundary\28unsigned\20long\29\20const
+3633:skia::textlayout::ParagraphImpl::computeEmptyMetrics\28\29
+3634:skia::textlayout::ParagraphImpl::clusters\28skia::textlayout::SkRange<unsigned\20long>\29
+3635:skia::textlayout::ParagraphImpl::block\28unsigned\20long\29
+3636:skia::textlayout::ParagraphCacheValue::~ParagraphCacheValue\28\29
+3637:skia::textlayout::ParagraphCacheKey::ParagraphCacheKey\28skia::textlayout::ParagraphImpl\20const*\29
+3638:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\28\29
+3639:skia::textlayout::ParagraphBuilderImpl::make\28skia::textlayout::ParagraphStyle\20const&\2c\20sk_sp<skia::textlayout::FontCollection>\29
+3640:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\28skia::textlayout::PlaceholderStyle\20const&\2c\20bool\29
+3641:skia::textlayout::ParagraphBuilderImpl::ParagraphBuilderImpl\28skia::textlayout::ParagraphStyle\20const&\2c\20sk_sp<skia::textlayout::FontCollection>\2c\20std::__2::unique_ptr<SkUnicode\2c\20std::__2::default_delete<SkUnicode>>\29
+3642:skia::textlayout::Paragraph::~Paragraph\28\29
+3643:skia::textlayout::OneLineShaper::clusteredText\28skia::textlayout::SkRange<unsigned\20long>&\29
+3644:skia::textlayout::FontCollection::~FontCollection\28\29
+3645:skia::textlayout::FontCollection::matchTypeface\28SkString\20const&\2c\20SkFontStyle\29
+3646:skia::textlayout::FontCollection::defaultFallback\28int\2c\20SkFontStyle\2c\20SkString\20const&\29
+3647:skia::textlayout::FontCollection::FamilyKey::Hasher::operator\28\29\28skia::textlayout::FontCollection::FamilyKey\20const&\29\20const
+3648:skgpu::tess::\28anonymous\20namespace\29::write_curve_index_buffer_base_index\28skgpu::VertexWriter\2c\20unsigned\20long\2c\20unsigned\20short\29
+3649:skgpu::tess::StrokeIterator::next\28\29
+3650:skgpu::tess::StrokeIterator::finishOpenContour\28\29
+3651:skgpu::tess::PreChopPathCurves\28float\2c\20SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\29
+3652:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::~SmallPathOp\28\29
+3653:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::SmallPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrStyledShape\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20GrUserStencilSettings\20const*\29
+3654:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::recordDraw\28GrMeshDrawTarget*\2c\20int\2c\20unsigned\20long\2c\20void*\2c\20int\2c\20unsigned\20short*\29
+3655:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::AAFlatteningConvexPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20float\2c\20SkStrokeRec::Style\2c\20SkPaint::Join\2c\20float\2c\20GrUserStencilSettings\20const*\29
+3656:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::AAConvexPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrUserStencilSettings\20const*\29
+3657:skgpu::ganesh::TextureOp::Make\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20skgpu::ganesh::TextureOp::Saturate\2c\20SkBlendMode\2c\20GrAAType\2c\20DrawQuad*\2c\20SkRect\20const*\29
+3658:skgpu::ganesh::TessellationPathRenderer::IsSupported\28GrCaps\20const&\29
+3659:skgpu::ganesh::SurfaceFillContext::fillRectToRectWithFP\28SkIRect\20const&\2c\20SkIRect\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+3660:skgpu::ganesh::SurfaceFillContext::blitTexture\28GrSurfaceProxyView\2c\20SkIRect\20const&\2c\20SkIPoint\20const&\29
+3661:skgpu::ganesh::SurfaceFillContext::addOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\29
+3662:skgpu::ganesh::SurfaceFillContext::addDrawOp\28std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\29
+3663:skgpu::ganesh::SurfaceDrawContext::~SurfaceDrawContext\28\29.1
+3664:skgpu::ganesh::SurfaceDrawContext::drawVertices\28GrClip\20const*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20sk_sp<SkVertices>\2c\20GrPrimitiveType*\2c\20bool\29
+3665:skgpu::ganesh::SurfaceDrawContext::drawTexturedQuad\28GrClip\20const*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkBlendMode\2c\20DrawQuad*\2c\20SkRect\20const*\29
+3666:skgpu::ganesh::SurfaceDrawContext::drawTexture\28GrClip\20const*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkBlendMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20GrQuadAAFlags\2c\20SkCanvas::SrcRectConstraint\2c\20SkMatrix\20const&\2c\20sk_sp<GrColorSpaceXform>\29
+3667:skgpu::ganesh::SurfaceDrawContext::drawStrokedLine\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkPoint\20const*\2c\20SkStrokeRec\20const&\29
+3668:skgpu::ganesh::SurfaceDrawContext::drawRegion\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRegion\20const&\2c\20GrStyle\20const&\2c\20GrUserStencilSettings\20const*\29
+3669:skgpu::ganesh::SurfaceDrawContext::drawOval\28GrClip\20const*\2c\20GrPaint&&\2c\20GrAA\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrStyle\20const&\29
+3670:skgpu::ganesh::SurfaceDrawContext::SurfaceDrawContext\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20SkSurfaceProps\20const&\29
+3671:skgpu::ganesh::SurfaceContext::~SurfaceContext\28\29
+3672:skgpu::ganesh::SurfaceContext::writePixels\28GrDirectContext*\2c\20GrCPixmap\2c\20SkIPoint\29
+3673:skgpu::ganesh::SurfaceContext::copy\28sk_sp<GrSurfaceProxy>\2c\20SkIRect\2c\20SkIPoint\29
+3674:skgpu::ganesh::SurfaceContext::copyScaled\28sk_sp<GrSurfaceProxy>\2c\20SkIRect\2c\20SkIRect\2c\20SkFilterMode\29
+3675:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixels\28GrDirectContext*\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+3676:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\28GrDirectContext*\2c\20SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\20const&\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::FinishContext::~FinishContext\28\29
+3677:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\28GrDirectContext*\2c\20SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\20const&\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+3678:skgpu::ganesh::SurfaceContext::SurfaceContext\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorInfo\20const&\29
+3679:skgpu::ganesh::StrokeTessellator::draw\28GrOpFlushState*\29\20const
+3680:skgpu::ganesh::StrokeTessellateOp::prePrepareTessellator\28GrTessellationShader::ProgramArgs&&\2c\20GrAppliedClip&&\29
+3681:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::NonAAStrokeRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrSimpleMeshDrawOpHelper::InputFlags\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkStrokeRec\20const&\2c\20GrAAType\29
+3682:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::AAStrokeRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::RectInfo\20const&\2c\20bool\29
+3683:skgpu::ganesh::StencilMaskHelper::drawShape\28GrShape\20const&\2c\20SkMatrix\20const&\2c\20SkRegion::Op\2c\20GrAA\29
+3684:skgpu::ganesh::SoftwarePathRenderer::DrawAroundInvPath\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrPaint&&\2c\20GrUserStencilSettings\20const&\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\29
+3685:skgpu::ganesh::SmallPathAtlasMgr::findOrCreate\28skgpu::ganesh::SmallPathShapeDataKey\20const&\29
+3686:skgpu::ganesh::SmallPathAtlasMgr::deleteCacheEntry\28skgpu::ganesh::SmallPathShapeData*\29
+3687:skgpu::ganesh::ShadowRRectOp::Make\28GrRecordingContext*\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20float\2c\20float\29
+3688:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::RegionOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkRegion\20const&\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\29
+3689:skgpu::ganesh::RasterAsView\28GrRecordingContext*\2c\20SkImage_Raster\20const*\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\29
+3690:skgpu::ganesh::QuadPerEdgeAA::Tessellator::append\28GrQuad*\2c\20GrQuad*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20GrQuadAAFlags\29
+3691:skgpu::ganesh::QuadPerEdgeAA::Tessellator::Tessellator\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20char*\29
+3692:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::initializeAttrs\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\29
+3693:skgpu::ganesh::QuadPerEdgeAA::IssueDraw\28GrCaps\20const&\2c\20GrOpsRenderPass*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20int\2c\20int\2c\20int\2c\20int\29
+3694:skgpu::ganesh::QuadPerEdgeAA::GetIndexBuffer\28GrMeshDrawTarget*\2c\20skgpu::ganesh::QuadPerEdgeAA::IndexBufferOption\29
+3695:skgpu::ganesh::PathTessellateOp::usesMSAA\28\29\20const
+3696:skgpu::ganesh::PathTessellateOp::prepareTessellator\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAppliedClip&&\29
+3697:skgpu::ganesh::PathTessellateOp::PathTessellateOp\28SkArenaAlloc*\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrPaint&&\2c\20SkRect\20const&\29
+3698:skgpu::ganesh::PathStencilCoverOp::prePreparePrograms\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAppliedClip&&\29
+3699:skgpu::ganesh::PathRenderer::getStencilSupport\28GrStyledShape\20const&\29\20const
+3700:skgpu::ganesh::PathInnerTriangulateOp::prePreparePrograms\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAppliedClip&&\29
+3701:skgpu::ganesh::PathCurveTessellator::~PathCurveTessellator\28\29
+3702:skgpu::ganesh::PathCurveTessellator::prepareWithTriangles\28GrMeshDrawTarget*\2c\20SkMatrix\20const&\2c\20GrTriangulator::BreadcrumbTriangleList*\2c\20skgpu::ganesh::PathTessellator::PathDrawList\20const&\2c\20int\29
+3703:skgpu::ganesh::OpsTask::onMakeClosed\28GrRecordingContext*\2c\20SkIRect*\29
+3704:skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29
+3705:skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29
+3706:skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29
+3707:skgpu::ganesh::OpsTask::OpsTask\28GrDrawingManager*\2c\20GrSurfaceProxyView\2c\20GrAuditTrail*\2c\20sk_sp<GrArenas>\29
+3708:skgpu::ganesh::OpsTask::OpChain::tryConcat\28skgpu::ganesh::OpsTask::OpChain::List*\2c\20GrProcessorSet::Analysis\2c\20GrDstProxyView\20const&\2c\20GrAppliedClip\20const*\2c\20SkRect\20const&\2c\20GrCaps\20const&\2c\20SkArenaAlloc*\2c\20GrAuditTrail*\29
+3709:skgpu::ganesh::MakeFragmentProcessorFromView\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkSamplingOptions\2c\20SkTileMode\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkRect\20const*\29
+3710:skgpu::ganesh::LockTextureProxyView\28GrRecordingContext*\2c\20SkImage_Lazy\20const*\2c\20GrImageTexGenPolicy\2c\20skgpu::Mipmapped\29
+3711:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::~NonAALatticeOp\28\29
+3712:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::NonAALatticeOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20std::__2::unique_ptr<SkLatticeIter\2c\20std::__2::default_delete<SkLatticeIter>>\2c\20SkRect\20const&\29
+3713:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::programInfo\28\29
+3714:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Make\28GrRecordingContext*\2c\20SkArenaAlloc*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::LocalCoords\20const&\2c\20GrAA\29
+3715:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::FillRRectOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20SkRRect\20const&\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::LocalCoords\20const&\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::ProcessorFlags\29
+3716:skgpu::ganesh::DrawAtlasPathOp::prepareProgram\28GrCaps\20const&\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+3717:skgpu::ganesh::Device::replaceBackingProxy\28SkSurface::ContentChangeMode\2c\20sk_sp<GrRenderTargetProxy>\2c\20GrColorType\2c\20sk_sp<SkColorSpace>\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const&\29
+3718:skgpu::ganesh::Device::makeSpecial\28SkBitmap\20const&\29
+3719:skgpu::ganesh::Device::drawPath\28SkPath\20const&\2c\20SkPaint\20const&\2c\20bool\29
+3720:skgpu::ganesh::Device::drawEdgeAAImage\28SkImage\20const*\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\2c\20SkMatrix\20const&\2c\20SkTileMode\29
+3721:skgpu::ganesh::Device::discard\28\29
+3722:skgpu::ganesh::Device::android_utils_clipAsRgn\28SkRegion*\29\20const
+3723:skgpu::ganesh::DefaultPathRenderer::internalDrawPath\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrPaint&&\2c\20GrAAType\2c\20GrUserStencilSettings\20const&\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20GrStyledShape\20const&\2c\20bool\29
+3724:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+3725:skgpu::ganesh::CopyView\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20skgpu::Mipmapped\2c\20GrImageTexGenPolicy\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3726:skgpu::ganesh::ClipStack::clipPath\28SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrAA\2c\20SkClipOp\29
+3727:skgpu::ganesh::ClipStack::SaveRecord::replaceWithElement\28skgpu::ganesh::ClipStack::RawElement&&\2c\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\2c\201>*\29
+3728:skgpu::ganesh::ClipStack::SaveRecord::addElement\28skgpu::ganesh::ClipStack::RawElement&&\2c\20SkTBlockList<skgpu::ganesh::ClipStack::RawElement\2c\201>*\29
+3729:skgpu::ganesh::ClipStack::RawElement::contains\28skgpu::ganesh::ClipStack::Draw\20const&\29\20const
+3730:skgpu::ganesh::AtlasTextOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+3731:skgpu::ganesh::AtlasTextOp::AtlasTextOp\28skgpu::ganesh::AtlasTextOp::MaskType\2c\20bool\2c\20int\2c\20SkRect\2c\20skgpu::ganesh::AtlasTextOp::Geometry*\2c\20GrColorInfo\20const&\2c\20GrPaint&&\29
+3732:skgpu::ganesh::AtlasRenderTask::stencilAtlasRect\28GrRecordingContext*\2c\20SkRect\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrUserStencilSettings\20const*\29
+3733:skgpu::ganesh::AtlasRenderTask::addPath\28SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkIPoint\2c\20int\2c\20int\2c\20bool\2c\20SkIPoint16*\29
+3734:skgpu::ganesh::AtlasPathRenderer::preFlush\28GrOnFlushResourceProvider*\29
+3735:skgpu::ganesh::AtlasPathRenderer::addPathToAtlas\28GrRecordingContext*\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkRect\20const&\2c\20SkIRect*\2c\20SkIPoint16*\2c\20bool*\2c\20std::__2::function<bool\20\28GrSurfaceProxy\20const*\29>\20const&\29
+3736:skgpu::ganesh::AsFragmentProcessor\28GrRecordingContext*\2c\20SkImage\20const*\2c\20SkSamplingOptions\2c\20SkTileMode\20const*\2c\20SkMatrix\20const&\2c\20SkRect\20const*\2c\20SkRect\20const*\29
+3737:skgpu::TiledTextureUtils::OptimizeSampleArea\28SkISize\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkPoint\20const*\2c\20SkRect*\2c\20SkRect*\2c\20SkMatrix*\29
+3738:skgpu::TClientMappedBufferManager<GrGpuBuffer\2c\20GrDirectContext::DirectContextID>::process\28\29
+3739:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\28\29
+3740:skgpu::RectanizerSkyline::addRect\28int\2c\20int\2c\20SkIPoint16*\29
+3741:skgpu::Plot::Plot\28int\2c\20int\2c\20skgpu::AtlasGenerationCounter*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20SkColorType\2c\20unsigned\20long\29
+3742:skgpu::GetReducedBlendModeInfo\28SkBlendMode\29
+3743:skgpu::BlendFuncName\28SkBlendMode\29
+3744:skcms_ApproximatelyEqualProfiles
+3745:sk_sp<SkSurface_Raster>\20sk_make_sp<SkSurface_Raster\2c\20SkImageInfo\20const&\2c\20sk_sp<SkPixelRef>\2c\20SkSurfaceProps\20const*&>\28SkImageInfo\20const&\2c\20sk_sp<SkPixelRef>&&\2c\20SkSurfaceProps\20const*&\29
+3746:sk_fopen\28char\20const*\2c\20SkFILE_Flags\29
+3747:sk_fgetsize\28_IO_FILE*\29
+3748:sk_fclose\28_IO_FILE*\29
+3749:sk_error_fn\28png_struct_def*\2c\20char\20const*\29
+3750:setup_masks_arabic_plan\28arabic_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_script_t\29
+3751:set_khr_debug_label\28GrGLGpu*\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+3752:setThrew
+3753:serialize_image\28SkImage\20const*\2c\20SkSerialProcs\29
+3754:send_tree
+3755:sect_with_vertical\28SkPoint\20const*\2c\20float\29
+3756:sect_with_horizontal\28SkPoint\20const*\2c\20float\29
+3757:scanexp
+3758:scalbnl
+3759:rewind_if_necessary\28GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29
+3760:resolveImplicitLevels\28UBiDi*\2c\20int\2c\20int\2c\20unsigned\20char\2c\20unsigned\20char\29
+3761:reset_and_decode_image_config\28wuffs_gif__decoder__struct*\2c\20wuffs_base__image_config__struct*\2c\20wuffs_base__io_buffer__struct*\2c\20SkStream*\29
+3762:renderbuffer_storage_msaa\28GrGLGpu*\2c\20int\2c\20unsigned\20int\2c\20int\2c\20int\29
+3763:recursive_edge_intersect\28GrTriangulator::Line\20const&\2c\20SkPoint\2c\20SkPoint\2c\20GrTriangulator::Line\20const&\2c\20SkPoint\2c\20SkPoint\2c\20SkPoint*\2c\20double*\2c\20double*\29
+3764:reclassify_vertex\28TriangulationVertex*\2c\20SkPoint\20const*\2c\20int\2c\20ReflexHash*\2c\20SkTInternalLList<TriangulationVertex>*\29
+3765:read_metadata\28std::__2::vector<SkJpegMetadataDecoder::Segment\2c\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>\20const&\2c\20unsigned\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+3766:quad_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+3767:quad_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+3768:quad_in_line\28SkPoint\20const*\29
+3769:psh_hint_table_init
+3770:psh_hint_table_find_strong_points
+3771:psh_hint_table_activate_mask
+3772:psh_hint_align
+3773:psh_glyph_interpolate_strong_points
+3774:psh_glyph_interpolate_other_points
+3775:psh_glyph_interpolate_normal_points
+3776:psh_blues_set_zones
+3777:ps_parser_load_field
+3778:ps_dimension_end
+3779:ps_dimension_done
+3780:ps_builder_start_point
+3781:printf_core
+3782:premultiply_argb_as_rgba\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+3783:premultiply_argb_as_bgra\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+3784:position_cluster\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20bool\29
+3785:portable::uniform_color_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3786:portable::set_rgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3787:portable::scale_1_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3788:portable::memset64\28unsigned\20long\20long*\2c\20unsigned\20long\20long\2c\20int\29
+3789:portable::lerp_1_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3790:portable::copy_from_indirect_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3791:portable::copy_2_slots_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3792:portable::check_decal_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3793:portable::branch_if_all_lanes_active\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3794:pop_arg
+3795:pntz
+3796:png_inflate
+3797:png_deflate_claim
+3798:png_decompress_chunk
+3799:png_cache_unknown_chunk
+3800:optimize_layer_filter\28SkImageFilter\20const*\2c\20SkPaint*\29
+3801:operator==\28SkPaint\20const&\2c\20SkPaint\20const&\29
+3802:open_face
+3803:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::vertexStride\28SkMatrix\20const&\29\20const
+3804:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+3805:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+3806:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::testingOnly_packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29\20const
+3807:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::glyphs\28\29\20const
+3808:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::glyphCount\28\29\20const
+3809:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29.1
+3810:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29
+3811:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\28\29\20const
+3812:non-virtual\20thunk\20to\20SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\28GrDirectContext*\2c\20void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\29
+3813:nearly_equal\28double\2c\20double\29
+3814:mbsrtowcs
+3815:map_quad_general\28skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20SkMatrix\20const&\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\29
+3816:make_tiled_gradient\28GrFPArgs\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20bool\2c\20bool\29
+3817:make_premul_effect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+3818:make_dual_interval_colorizer\28SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20float\29
+3819:make_clamped_gradient\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkRGBA4f<\28SkAlphaType\292>\2c\20SkRGBA4f<\28SkAlphaType\292>\2c\20bool\29
+3820:make_bmp_proxy\28GrProxyProvider*\2c\20SkBitmap\20const&\2c\20GrColorType\2c\20skgpu::Mipmapped\2c\20SkBackingFit\2c\20skgpu::Budgeted\29
+3821:longest_match
+3822:long\20std::__2::__num_get_signed_integral\5babi:v160004\5d<long>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3823:long\20long\20std::__2::__num_get_signed_integral\5babi:v160004\5d<long\20long>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\2c\20int\29
+3824:long\20double\20std::__2::__num_get_float\5babi:v160004\5d<long\20double>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\29
+3825:load_post_names
+3826:line_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+3827:line_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+3828:legalfunc$_embind_register_bigint
+3829:jpeg_open_backing_store
+3830:jpeg_destroy
+3831:jpeg_alloc_huff_table
+3832:jinit_upsampler
+3833:initial_reordering_consonant_syllable\28hb_ot_shape_plan_t\20const*\2c\20hb_face_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\29
+3834:init_error_limit
+3835:init_block
+3836:image_filter_color_type\28SkImageInfo\29
+3837:hb_vector_t<hb_vector_t<hb_aat_map_t::range_flags_t\2c\20true>\2c\20false>::resize\28int\2c\20bool\2c\20bool\29
+3838:hb_vector_t<CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>\2c\20false>::resize\28int\2c\20bool\2c\20bool\29
+3839:hb_utf8_t::next\28unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20int*\2c\20unsigned\20int\29
+3840:hb_unicode_script
+3841:hb_unicode_mirroring_nil\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+3842:hb_unicode_funcs_t::is_default_ignorable\28unsigned\20int\29
+3843:hb_shape_plan_key_t::init\28bool\2c\20hb_face_t*\2c\20hb_segment_properties_t\20const*\2c\20hb_feature_t\20const*\2c\20unsigned\20int\2c\20int\20const*\2c\20unsigned\20int\2c\20char\20const*\20const*\29
+3844:hb_shape_plan_create2
+3845:hb_serialize_context_t::fini\28\29
+3846:hb_sanitize_context_t::return_t\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<hb_sanitize_context_t>\28hb_sanitize_context_t*\29\20const
+3847:hb_sanitize_context_t::return_t\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<hb_sanitize_context_t>\28hb_sanitize_context_t*\29\20const
+3848:hb_paint_extents_paint_linear_gradient\28hb_paint_funcs_t*\2c\20void*\2c\20hb_color_line_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+3849:hb_paint_extents_get_funcs\28\29
+3850:hb_paint_extents_context_t::hb_paint_extents_context_t\28\29
+3851:hb_ot_map_t::fini\28\29
+3852:hb_ot_layout_table_select_script
+3853:hb_ot_layout_table_get_lookup_count
+3854:hb_ot_layout_table_find_feature_variations
+3855:hb_ot_layout_table_find_feature\28hb_face_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+3856:hb_ot_layout_script_select_language
+3857:hb_ot_layout_language_get_required_feature
+3858:hb_ot_layout_language_find_feature
+3859:hb_ot_layout_has_substitution
+3860:hb_ot_layout_feature_with_variations_get_lookups
+3861:hb_ot_layout_collect_features_map
+3862:hb_ot_font_set_funcs
+3863:hb_lazy_loader_t<OT::sbix_accelerator_t\2c\20hb_face_lazy_loader_t<OT::sbix_accelerator_t\2c\2038u>\2c\20hb_face_t\2c\2038u\2c\20OT::sbix_accelerator_t>::create\28hb_face_t*\29
+3864:hb_lazy_loader_t<OT::post_accelerator_t\2c\20hb_face_lazy_loader_t<OT::post_accelerator_t\2c\207u>\2c\20hb_face_t\2c\207u\2c\20OT::post_accelerator_t>::get\28\29\20const
+3865:hb_lazy_loader_t<OT::avar\2c\20hb_table_lazy_loader_t<OT::avar\2c\2019u\2c\20true>\2c\20hb_face_t\2c\2019u\2c\20hb_blob_t>::get\28\29\20const
+3866:hb_lazy_loader_t<OT::COLR\2c\20hb_table_lazy_loader_t<OT::COLR\2c\2035u\2c\20true>\2c\20hb_face_t\2c\2035u\2c\20hb_blob_t>::get\28\29\20const
+3867:hb_lazy_loader_t<OT::CBDT_accelerator_t\2c\20hb_face_lazy_loader_t<OT::CBDT_accelerator_t\2c\2037u>\2c\20hb_face_t\2c\2037u\2c\20OT::CBDT_accelerator_t>::get\28\29\20const
+3868:hb_lazy_loader_t<AAT::trak\2c\20hb_table_lazy_loader_t<AAT::trak\2c\2032u\2c\20false>\2c\20hb_face_t\2c\2032u\2c\20hb_blob_t>::get\28\29\20const
+3869:hb_lazy_loader_t<AAT::morx\2c\20hb_table_lazy_loader_t<AAT::morx\2c\2028u\2c\20false>\2c\20hb_face_t\2c\2028u\2c\20hb_blob_t>::get\28\29\20const
+3870:hb_lazy_loader_t<AAT::mort\2c\20hb_table_lazy_loader_t<AAT::mort\2c\2029u\2c\20false>\2c\20hb_face_t\2c\2029u\2c\20hb_blob_t>::get\28\29\20const
+3871:hb_language_matches
+3872:hb_indic_get_categories\28unsigned\20int\29
+3873:hb_hashmap_t<hb_serialize_context_t::object_t\20const*\2c\20unsigned\20int\2c\20false>::fetch_item\28hb_serialize_context_t::object_t\20const*\20const&\2c\20unsigned\20int\29\20const
+3874:hb_hashmap_t<hb_serialize_context_t::object_t\20const*\2c\20unsigned\20int\2c\20false>::alloc\28unsigned\20int\29
+3875:hb_font_t::get_glyph_v_origin_with_fallback\28unsigned\20int\2c\20int*\2c\20int*\29
+3876:hb_font_set_variations
+3877:hb_font_set_funcs
+3878:hb_font_get_variation_glyph_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+3879:hb_font_get_glyph_h_advance
+3880:hb_font_get_glyph_extents
+3881:hb_font_get_font_h_extents_nil\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+3882:hb_font_funcs_set_variation_glyph_func
+3883:hb_font_funcs_set_nominal_glyphs_func
+3884:hb_font_funcs_set_nominal_glyph_func
+3885:hb_font_funcs_set_glyph_h_advances_func
+3886:hb_font_funcs_set_glyph_extents_func
+3887:hb_font_funcs_create
+3888:hb_draw_move_to_nil\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+3889:hb_draw_funcs_set_quadratic_to_func
+3890:hb_draw_funcs_set_move_to_func
+3891:hb_draw_funcs_set_line_to_func
+3892:hb_draw_funcs_set_cubic_to_func
+3893:hb_draw_funcs_destroy
+3894:hb_draw_funcs_create
+3895:hb_draw_extents_move_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+3896:hb_buffer_t::sort\28unsigned\20int\2c\20unsigned\20int\2c\20int\20\28*\29\28hb_glyph_info_t\20const*\2c\20hb_glyph_info_t\20const*\29\29
+3897:hb_buffer_t::safe_to_insert_tatweel\28unsigned\20int\2c\20unsigned\20int\29
+3898:hb_buffer_t::output_info\28hb_glyph_info_t\20const&\29
+3899:hb_buffer_t::message_impl\28hb_font_t*\2c\20char\20const*\2c\20void*\29
+3900:hb_buffer_t::leave\28\29
+3901:hb_buffer_t::delete_glyphs_inplace\28bool\20\28*\29\28hb_glyph_info_t\20const*\29\29
+3902:hb_buffer_t::clear_positions\28\29
+3903:hb_buffer_set_length
+3904:hb_buffer_get_glyph_positions
+3905:hb_buffer_diff
+3906:hb_buffer_create
+3907:hb_buffer_clear_contents
+3908:hb_buffer_add_utf8
+3909:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<OT::kern>\28hb_blob_t*\29
+3910:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>\28hb_blob_t*\29
+3911:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::morx>\28hb_blob_t*\29
+3912:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::mort>\28hb_blob_t*\29
+3913:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::ltag>\28hb_blob_t*\29
+3914:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<AAT::kerx>\28hb_blob_t*\29
+3915:hb_aat_layout_remove_deleted_glyphs\28hb_buffer_t*\29
+3916:hair_cubic\28SkPoint\20const*\2c\20SkRegion\20const*\2c\20SkBlitter*\2c\20void\20\28*\29\28SkPoint\20const*\2c\20int\2c\20SkRegion\20const*\2c\20SkBlitter*\29\29
+3917:getint
+3918:get_win_string
+3919:get_layer_mapping_and_bounds\28SkImageFilter\20const*\2c\20SkMatrix\20const&\2c\20skif::DeviceSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::ParameterSpace<SkRect>>\2c\20bool\2c\20float\29
+3920:get_dst_swizzle_and_store\28GrColorType\2c\20SkRasterPipelineOp*\2c\20LumMode*\2c\20bool*\2c\20bool*\29
+3921:get_driver_and_version\28GrGLStandard\2c\20GrGLVendor\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29
+3922:get_cicp_trfn\28skcms_TransferFunction\20const&\29
+3923:get_cicp_primaries\28skcms_Matrix3x3\20const&\29
+3924:gen_key\28skgpu::KeyBuilder*\2c\20GrProgramInfo\20const&\2c\20GrCaps\20const&\29
+3925:gen_fp_key\28GrFragmentProcessor\20const&\2c\20GrCaps\20const&\2c\20skgpu::KeyBuilder*\29
+3926:gather_uniforms_and_check_for_main\28SkSL::Program\20const&\2c\20std::__2::vector<SkRuntimeEffect::Uniform\2c\20std::__2::allocator<SkRuntimeEffect::Uniform>>*\2c\20std::__2::vector<SkRuntimeEffect::Child\2c\20std::__2::allocator<SkRuntimeEffect::Child>>*\2c\20SkRuntimeEffect::Uniform::Flags\2c\20unsigned\20long*\29
+3927:fwrite
+3928:ft_var_to_normalized
+3929:ft_var_load_item_variation_store
+3930:ft_var_load_hvvar
+3931:ft_var_load_avar
+3932:ft_var_get_value_pointer
+3933:ft_var_apply_tuple
+3934:ft_validator_init
+3935:ft_mem_strcpyn
+3936:ft_hash_num_lookup
+3937:ft_glyphslot_set_bitmap
+3938:ft_glyphslot_preset_bitmap
+3939:ft_corner_orientation
+3940:ft_corner_is_flat
+3941:frexp
+3942:fread
+3943:fp_force_eval
+3944:fp_barrier.1
+3945:fopen
+3946:fold_opacity_layer_color_to_paint\28SkPaint\20const*\2c\20bool\2c\20SkPaint*\29
+3947:fmodl
+3948:float\20std::__2::__num_get_float\5babi:v160004\5d<float>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\29
+3949:fill_shadow_rec\28SkPath\20const&\2c\20SkPoint3\20const&\2c\20SkPoint3\20const&\2c\20float\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkDrawShadowRec*\29
+3950:fill_inverse_cmap
+3951:fileno
+3952:exp2f
+3953:examine_app0
+3954:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29\2c\20void\2c\20SkCanvas*\2c\20SkPath\20const&\2c\20SkClipOp\2c\20bool>::invoke\28void\20\28SkCanvas::*\20const&\29\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29\2c\20SkCanvas*\2c\20SkPath*\2c\20SkClipOp\2c\20bool\29
+3955:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>\29\2c\20sk_sp<SkColorFilter>*\2c\20sk_sp<SkImageFilter>*\29
+3956:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29\2c\20SkBlendMode\2c\20sk_sp<SkImageFilter>*\2c\20sk_sp<SkImageFilter>*\29
+3957:emscripten::internal::Invoker<sk_sp<SkFontMgr>\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int>::invoke\28sk_sp<SkFontMgr>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\2c\20int\29\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\29
+3958:emscripten::internal::Invoker<sk_sp<SkBlender>\2c\20SkBlendMode>::invoke\28sk_sp<SkBlender>\20\28*\29\28SkBlendMode\29\2c\20SkBlendMode\29
+3959:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\29
+3960:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\29
+3961:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20void\2c\20SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28void\20\28**\29\28SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20SkPaint*\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+3962:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29\2c\20void\2c\20SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29\2c\20SkCanvas*\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+3963:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+3964:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+3965:emscripten::internal::FunctionInvoker<sk_sp<SkSurface>\20\28*\29\28SkCanvas&\2c\20SimpleImageInfo\29\2c\20sk_sp<SkSurface>\2c\20SkCanvas&\2c\20SimpleImageInfo>::invoke\28sk_sp<SkSurface>\20\28**\29\28SkCanvas&\2c\20SimpleImageInfo\29\2c\20SkCanvas*\2c\20SimpleImageInfo*\29
+3966:emscripten::internal::FunctionInvoker<sk_sp<SkColorSpace>\20\28*\29\28sk_sp<SkImage>\29\2c\20sk_sp<SkColorSpace>\2c\20sk_sp<SkImage>>::invoke\28sk_sp<SkColorSpace>\20\28**\29\28sk_sp<SkImage>\29\2c\20sk_sp<SkImage>*\29
+3967:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20SkPath\20const&\2c\20SkPathOp\29\2c\20bool\2c\20SkPath&\2c\20SkPath\20const&\2c\20SkPathOp>::invoke\28bool\20\28**\29\28SkPath&\2c\20SkPath\20const&\2c\20SkPathOp\29\2c\20SkPath*\2c\20SkPath*\2c\20SkPathOp\29
+3968:embind_init_builtin\28\29
+3969:embind_init_Skia\28\29
+3970:embind_init_Paragraph\28\29::$_0::__invoke\28SimpleParagraphStyle\2c\20sk_sp<SkFontMgr>\29
+3971:embind_init_Paragraph\28\29
+3972:embind_init_ParagraphGen\28\29
+3973:edge_line_needs_recursion\28SkPoint\20const&\2c\20SkPoint\20const&\29
+3974:draw_nine\28SkMask\20const&\2c\20SkIRect\20const&\2c\20SkIPoint\20const&\2c\20bool\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+3975:dquad_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+3976:dquad_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+3977:double\20std::__2::__num_get_float\5babi:v160004\5d<double>\28char\20const*\2c\20char\20const*\2c\20unsigned\20int&\29
+3978:dline_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+3979:dline_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+3980:deserialize_image\28sk_sp<SkData>\2c\20SkDeserialProcs\2c\20std::__2::optional<SkAlphaType>\29
+3981:deflate_stored
+3982:decompose_current_character\28hb_ot_shape_normalize_context_t\20const*\2c\20bool\29
+3983:decltype\28std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\20const*>\2c\20true>::__unwrap\28std::declval<std::__2::__wrap_iter<char\20const*>>\28\29\29\29\20std::__2::__unwrap_iter\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__unwrap_iter_impl<std::__2::__wrap_iter<char\20const*>\2c\20true>\2c\200>\28std::__2::__wrap_iter<char\20const*>\29
+3984:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\28SkArenaAlloc*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\29::'lambda'\28void*\29>\28skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::Make\28SkArenaAlloc*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3985:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator*\20SkArenaAlloc::make<skgpu::ganesh::PathCurveTessellator\2c\20bool&\2c\20skgpu::tess::PatchAttribs&>\28bool&\2c\20skgpu::tess::PatchAttribs&\29::'lambda'\28void*\29>\28skgpu::ganesh::PathCurveTessellator&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3986:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::Make\28SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20bool\29::'lambda'\28void*\29>\28skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::Make\28SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20sk_sp<GrColorSpaceXform>\2c\20SkFilterMode\2c\20bool\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3987:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::MeshGP::Make\28SkArenaAlloc*\2c\20sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::MeshGP::Make\28SkArenaAlloc*\2c\20sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3988:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker*\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker\2c\20int&>\28int&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::GaussPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3989:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTransformShader*\20SkArenaAlloc::make<SkTransformShader\2c\20SkShaderBase\20const&\2c\20bool\20const&>\28SkShaderBase\20const&\2c\20bool\20const&\29::'lambda'\28void*\29>\28SkTransformShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3990:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkA8_Blitter*\20SkArenaAlloc::make<SkA8_Blitter\2c\20SkPixmap\20const&\2c\20SkPaint\20const&>\28SkPixmap\20const&\2c\20SkPaint\20const&\29::'lambda'\28void*\29>\28SkA8_Blitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3991:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrThreadSafeCache::Entry*\20SkArenaAlloc::make<GrThreadSafeCache::Entry\2c\20skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&>\28skgpu::UniqueKey\20const&\2c\20GrSurfaceProxyView\20const&\29::'lambda'\28void*\29>\28GrThreadSafeCache::Entry&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3992:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrResourceAllocator::Register*\20SkArenaAlloc::make<GrResourceAllocator::Register\2c\20GrSurfaceProxy*&\2c\20skgpu::ScratchKey\2c\20GrResourceProvider*&>\28GrSurfaceProxy*&\2c\20skgpu::ScratchKey&&\2c\20GrResourceProvider*&\29::'lambda'\28void*\29>\28GrResourceAllocator::Register&&\29
+3993:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrQuadEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrCaps\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29>\28GrQuadEffect::Make\28SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrCaps\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3994:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrPipeline*\20SkArenaAlloc::make<GrPipeline\2c\20GrPipeline::InitArgs&\2c\20GrProcessorSet\2c\20GrAppliedClip>\28GrPipeline::InitArgs&\2c\20GrProcessorSet&&\2c\20GrAppliedClip&&\29::'lambda'\28void*\29>\28GrPipeline&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3995:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrDistanceFieldA8TextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20float\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28GrDistanceFieldA8TextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20float\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3996:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29>\28GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29&&\29
+3997:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29>\28DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+3998:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29>\28DefaultGeoProc::Make\28SkArenaAlloc*\2c\20unsigned\20int\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20bool\2c\20unsigned\20char\29::'lambda'\28void*\29&&\29
+3999:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<CircleGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28CircleGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4000:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+4001:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>>::__generic_construct\5babi:v160004\5d<std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>>\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>>&\2c\20std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>&&\29::'lambda'\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&&>\28std::__2::__variant_detail::__move_constructor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&&\29
+4002:dcubic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+4003:dcubic_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+4004:dconic_xy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+4005:dconic_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+4006:data_destroy_arabic\28void*\29
+4007:data_create_arabic\28hb_ot_shape_plan_t\20const*\29
+4008:cycle
+4009:cubic_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4010:cubic_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4011:create_colorindex
+4012:copysignl
+4013:copy_bitmap_subset\28SkBitmap\20const&\2c\20SkIRect\20const&\29
+4014:conic_intercept_v\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4015:conic_intercept_h\28SkPoint\20const*\2c\20float\2c\20float\2c\20double*\29
+4016:compute_pos_tan\28SkPoint\20const*\2c\20unsigned\20int\2c\20float\2c\20SkPoint*\2c\20SkPoint*\29
+4017:compute_intersection\28OffsetSegment\20const&\2c\20OffsetSegment\20const&\2c\20SkPoint*\2c\20float*\2c\20float*\29
+4018:compress_block
+4019:compose_khmer\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+4020:clipHandlesSprite\28SkRasterClip\20const&\2c\20int\2c\20int\2c\20SkPixmap\20const&\29
+4021:clamp\28SkPoint\2c\20SkPoint\2c\20SkPoint\2c\20GrTriangulator::Comparator\20const&\29
+4022:checkint
+4023:check_inverse_on_empty_return\28SkRegion*\2c\20SkPath\20const&\2c\20SkRegion\20const&\29
+4024:char*\20std::__2::copy\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20char*>\28std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__wrap_iter<char\20const*>\2c\20char*\29
+4025:char*\20std::__2::copy\5babi:v160004\5d<char\20const*\2c\20char*>\28char\20const*\2c\20char\20const*\2c\20char*\29
+4026:cff_vstore_done
+4027:cff_subfont_load
+4028:cff_subfont_done
+4029:cff_size_select
+4030:cff_parser_run
+4031:cff_make_private_dict
+4032:cff_load_private_dict
+4033:cff_index_get_name
+4034:cff_get_kerning
+4035:cff_blend_build_vector
+4036:cf2_getSeacComponent
+4037:cf2_computeDarkening
+4038:cf2_arrstack_push
+4039:cbrt
+4040:byn$mgfn-shared$void\20extend_pts<\28SkPaint::Cap\292>\28SkPath::Verb\2c\20SkPath::Verb\2c\20SkPoint*\2c\20int\29
+4041:byn$mgfn-shared$void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+4042:byn$mgfn-shared$virtual\20thunk\20to\20GrRenderTarget::onRelease\28\29
+4043:byn$mgfn-shared$ubidi_getClass_skia
+4044:byn$mgfn-shared$t1_hints_open
+4045:byn$mgfn-shared$std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\29\20const
+4046:byn$mgfn-shared$std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20long\29\20const
+4047:byn$mgfn-shared$std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\29\20const
+4048:byn$mgfn-shared$std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\20long\29\20const
+4049:byn$mgfn-shared$std::__2::ctype<wchar_t>::do_toupper\28wchar_t*\2c\20wchar_t\20const*\29\20const
+4050:byn$mgfn-shared$std::__2::ctype<char>::do_toupper\28char*\2c\20char\20const*\29\20const
+4051:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>*\29\20const
+4052:byn$mgfn-shared$std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28\29\20const
+4053:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+4054:byn$mgfn-shared$std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+4055:byn$mgfn-shared$skia_private::TArray<unsigned\20int\2c\20true>::push_back_raw\28int\29
+4056:byn$mgfn-shared$skia_private::TArray<SkMatrix\2c\20true>::push_back_raw\28int\29
+4057:byn$mgfn-shared$skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::~Impl\28\29
+4058:byn$mgfn-shared$skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+4059:byn$mgfn-shared$skgpu::ScratchKey::GenerateResourceType\28\29
+4060:byn$mgfn-shared$skcms_TransferFunction_isPQish
+4061:byn$mgfn-shared$setup_masks_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+4062:byn$mgfn-shared$portable::store_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4063:byn$mgfn-shared$portable::load_8888_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4064:byn$mgfn-shared$portable::load_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4065:byn$mgfn-shared$portable::gather_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+4066:byn$mgfn-shared$non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4067:byn$mgfn-shared$non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4068:byn$mgfn-shared$make_unpremul_effect\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+4069:byn$mgfn-shared$hb_outline_recording_pen_move_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+4070:byn$mgfn-shared$hb_lazy_loader_t<OT::hhea\2c\20hb_table_lazy_loader_t<OT::hhea\2c\204u\2c\20true>\2c\20hb_face_t\2c\204u\2c\20hb_blob_t>::get\28\29\20const
+4071:byn$mgfn-shared$embind_init_Skia\28\29::$_75::__invoke\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29
+4072:byn$mgfn-shared$embind_init_Skia\28\29::$_72::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+4073:byn$mgfn-shared$embind_init_Skia\28\29::$_11::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+4074:byn$mgfn-shared$decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph::DrawableData*\20SkArenaAlloc::make<SkGlyph::DrawableData>\28\29::'lambda'\28void*\29>\28SkGlyph::DrawableData&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4075:byn$mgfn-shared$decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20skgpu::AtlasToken>\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\2c\20skgpu::AtlasToken&&\29::'lambda'\28void*\29>\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+4076:byn$mgfn-shared$decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+4077:byn$mgfn-shared$cf2_stack_pushInt
+4078:byn$mgfn-shared$\28anonymous\20namespace\29::SDFTSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+4079:byn$mgfn-shared$\28anonymous\20namespace\29::DrawAtlasPathShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+4080:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4081:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4082:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::glyphCount\28\29\20const
+4083:byn$mgfn-shared$\28anonymous\20namespace\29::DirectMaskSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+4084:byn$mgfn-shared$SkUnicode_client::~SkUnicode_client\28\29.1
+4085:byn$mgfn-shared$SkUnicode_client::~SkUnicode_client\28\29
+4086:byn$mgfn-shared$SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_0::operator\28\29\28int\29\20const
+4087:byn$mgfn-shared$SkSL::RP::UnownedLValueSlice::~UnownedLValueSlice\28\29
+4088:byn$mgfn-shared$SkSL::RP::LValue::~LValue\28\29.1
+4089:byn$mgfn-shared$SkSL::FunctionReference::clone\28SkSL::Position\29\20const
+4090:byn$mgfn-shared$SkSL::EmptyExpression::clone\28SkSL::Position\29\20const
+4091:byn$mgfn-shared$SkSL::ChildCall::description\28SkSL::OperatorPrecedence\29\20const
+4092:byn$mgfn-shared$SkSL::ChildCall::clone\28SkSL::Position\29\20const
+4093:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\28\29.1
+4094:byn$mgfn-shared$SkRuntimeBlender::~SkRuntimeBlender\28\29
+4095:byn$mgfn-shared$SkRecorder::onDrawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+4096:byn$mgfn-shared$SkRecorder::onDrawPaint\28SkPaint\20const&\29
+4097:byn$mgfn-shared$SkRecorder::didScale\28float\2c\20float\29
+4098:byn$mgfn-shared$SkRecorder::didConcat44\28SkM44\20const&\29
+4099:byn$mgfn-shared$SkRasterPipelineBlitter::blitAntiH2\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+4100:byn$mgfn-shared$SkPictureRecord::onDrawPaint\28SkPaint\20const&\29
+4101:byn$mgfn-shared$SkPictureRecord::onDrawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+4102:byn$mgfn-shared$SkPictureRecord::didConcat44\28SkM44\20const&\29
+4103:byn$mgfn-shared$SkPairPathEffect::~SkPairPathEffect\28\29.1
+4104:byn$mgfn-shared$SkJSONWriter::endObject\28\29
+4105:byn$mgfn-shared$SkComposePathEffect::~SkComposePathEffect\28\29
+4106:byn$mgfn-shared$SkColorSpace::MakeSRGB\28\29
+4107:byn$mgfn-shared$SkChopMonoCubicAtY\28SkPoint\20const*\2c\20float\2c\20SkPoint*\29
+4108:byn$mgfn-shared$OT::PaintLinearGradient<OT::NoVariable>::sanitize\28hb_sanitize_context_t*\29\20const
+4109:byn$mgfn-shared$GrRRectShadowGeoProc::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+4110:byn$mgfn-shared$GrPathTessellationShader::Impl::~Impl\28\29
+4111:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::~Listener\28\29.1
+4112:byn$mgfn-shared$GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::~Listener\28\29
+4113:byn$mgfn-shared$GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::clone\28\29\20const
+4114:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\28\29.1
+4115:byn$mgfn-shared$GrDistanceFieldA8TextGeoProc::~GrDistanceFieldA8TextGeoProc\28\29
+4116:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\28\29.1
+4117:byn$mgfn-shared$GrColorSpaceXformEffect::~GrColorSpaceXformEffect\28\29
+4118:byn$mgfn-shared$GrBicubicEffect::onMakeProgramImpl\28\29\20const
+4119:byn$mgfn-shared$Cr_z_inflate_table
+4120:byn$mgfn-shared$BlendFragmentProcessor::onMakeProgramImpl\28\29\20const
+4121:byn$mgfn-shared$AAT::Lookup<OT::IntType<unsigned\20short\2c\202u>>::get_value\28unsigned\20int\2c\20unsigned\20int\29\20const
+4122:build_ycc_rgb_table
+4123:bracketProcessChar\28BracketData*\2c\20int\29
+4124:bracketInit\28UBiDi*\2c\20BracketData*\29
+4125:bool\20std::__2::operator==\5babi:v160004\5d<char\2c\20void\20\28*\29\28void*\29>\28std::__2::unique_ptr<char\2c\20void\20\28*\29\28void*\29>\20const&\2c\20std::nullptr_t\29
+4126:bool\20std::__2::operator!=\5babi:v160004\5d<SkPaint\2c\20int>\28std::__2::variant<SkPaint\2c\20int>\20const&\2c\20std::__2::variant<SkPaint\2c\20int>\20const&\29
+4127:bool\20std::__2::__insertion_sort_incomplete<skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\2c\20skia::textlayout::OneLineShaper::RunBlock*>\28skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::RunBlock*\2c\20skia::textlayout::OneLineShaper::finish\28skia::textlayout::Block\20const&\2c\20float\2c\20float&\29::$_0&\29
+4128:bool\20std::__2::__insertion_sort_incomplete<\28anonymous\20namespace\29::EntryComparator&\2c\20\28anonymous\20namespace\29::Entry*>\28\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::Entry*\2c\20\28anonymous\20namespace\29::EntryComparator&\29
+4129:bool\20std::__2::__insertion_sort_incomplete<SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\2c\20SkSL::ProgramElement\20const**>\28SkSL::ProgramElement\20const**\2c\20SkSL::ProgramElement\20const**\2c\20SkSL::Transform::\28anonymous\20namespace\29::BuiltinVariableScanner::sortNewElements\28\29::'lambda'\28SkSL::ProgramElement\20const*\2c\20SkSL::ProgramElement\20const*\29&\29
+4130:bool\20std::__2::__insertion_sort_incomplete<SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\2c\20SkSL::FunctionDefinition\20const**>\28SkSL::FunctionDefinition\20const**\2c\20SkSL::FunctionDefinition\20const**\2c\20SkSL::Transform::FindAndDeclareBuiltinFunctions\28SkSL::Program&\29::$_0&\29
+4131:bool\20is_parallel<SkTCurve>\28SkDLine\20const&\2c\20SkTCurve\20const&\29
+4132:bool\20hb_hashmap_t<hb_serialize_context_t::object_t\20const*\2c\20unsigned\20int\2c\20false>::set_with_hash<hb_serialize_context_t::object_t*&\2c\20unsigned\20int&>\28hb_serialize_context_t::object_t*&\2c\20unsigned\20int\2c\20unsigned\20int&\2c\20bool\29
+4133:bool\20apply_string<GSUBProxy>\28OT::hb_ot_apply_context_t*\2c\20GSUBProxy::Lookup\20const&\2c\20OT::hb_ot_layout_lookup_accelerator_t\20const&\29
+4134:bool\20OT::hb_accelerate_subtables_context_t::cache_func_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\2c\20bool\29
+4135:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat2_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4136:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4137:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::ReverseChainSingleSubstFormat1>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4138:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4139:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::LigatureSubstFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4140:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GSUB_impl::AlternateSubstFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4141:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat2>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4142:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::SinglePosFormat1>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4143:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4144:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4145:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4146:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4147:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4148:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::Layout::GPOS_impl::CursivePosFormat1>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4149:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat3>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4150:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat1_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4151:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat3>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4152:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat1_4<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+4153:bool\20OT::OffsetTo<OT::Layout::Common::Coverage\2c\20OT::IntType<unsigned\20short\2c\202u>\2c\20true>::serialize_serialize<hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\2c\20hb_array_t<OT::HBGlyphID16>>\2c\20$_7\20const&\2c\20\28hb_function_sortedness_t\291\2c\20\28void*\290>&>\28hb_serialize_context_t*\2c\20hb_map_iter_t<hb_zip_iter_t<hb_sorted_array_t<OT::HBGlyphID16>\2c\20hb_array_t<OT::HBGlyphID16>>\2c\20$_7\20const&\2c\20\28hb_function_sortedness_t\291\2c\20\28void*\290>&\29
+4154:bool\20GrTTopoSort_Visit<GrRenderTask\2c\20GrRenderTask::TopoSortTraits>\28GrRenderTask*\2c\20unsigned\20int*\29
+4155:blur_column\28void\20\28*\29\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29\2c\20skvx::Vec<8\2c\20unsigned\20short>\20\28*\29\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29\2c\20int\2c\20int\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20unsigned\20char*\2c\20unsigned\20long\29
+4156:blit_saved_trapezoid\28SkAnalyticEdge*\2c\20int\2c\20int\2c\20int\2c\20AdditiveBlitter*\2c\20unsigned\20char*\2c\20bool\2c\20bool\2c\20int\2c\20int\29
+4157:blend_line\28SkColorType\2c\20void*\2c\20SkColorType\2c\20void\20const*\2c\20SkAlphaType\2c\20bool\2c\20int\29
+4158:bits_to_runs\28SkBlitter*\2c\20int\2c\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\2c\20long\2c\20unsigned\20char\29
+4159:baseline::exec_ops\28skcms_private::Op\20const*\2c\20void\20const**\2c\20char\20const*\2c\20char*\2c\20int\29
+4160:baseline::clut\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20unsigned\20char\20const*\2c\20float\20vector\5b4\5d*\2c\20float\20vector\5b4\5d*\2c\20float\20vector\5b4\5d*\2c\20float\20vector\5b4\5d*\29
+4161:barycentric_coords\28float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\2c\20skvx::Vec<4\2c\20float>*\29
+4162:auto\20std::__2::__unwrap_range\5babi:v160004\5d<std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__wrap_iter<char\20const*>>\28std::__2::__wrap_iter<char\20const*>\2c\20std::__2::__wrap_iter<char\20const*>\29
+4163:atanf
+4164:apply_forward\28OT::hb_ot_apply_context_t*\2c\20OT::hb_ot_layout_lookup_accelerator_t\20const&\2c\20unsigned\20int\29
+4165:append_color_output\28PorterDuffXferProcessor\20const&\2c\20GrGLSLXPFragmentBuilder*\2c\20skgpu::BlendFormula::OutputType\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29
+4166:af_loader_compute_darkening
+4167:af_latin_metrics_scale_dim
+4168:af_latin_hints_detect_features
+4169:af_latin_hint_edges
+4170:af_hint_normal_stem
+4171:af_cjk_metrics_scale_dim
+4172:af_cjk_metrics_scale
+4173:af_cjk_metrics_init_widths
+4174:af_cjk_metrics_check_digits
+4175:af_cjk_hints_init
+4176:af_cjk_hints_detect_features
+4177:af_cjk_hints_compute_blue_edges
+4178:af_cjk_hints_apply
+4179:af_cjk_hint_edges
+4180:af_cjk_get_standard_widths
+4181:af_axis_hints_new_edge
+4182:adler32
+4183:a_ctz_32
+4184:_iup_worker_interpolate
+4185:_hb_preprocess_text_vowel_constraints\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+4186:_hb_ot_shape
+4187:_hb_options_init\28\29
+4188:_hb_grapheme_group_func\28hb_glyph_info_t\20const&\2c\20hb_glyph_info_t\20const&\29
+4189:_hb_font_create\28hb_face_t*\29
+4190:_hb_fallback_shape
+4191:_glyf_get_advance_with_var_unscaled\28hb_font_t*\2c\20unsigned\20int\2c\20bool\29
+4192:__vfprintf_internal
+4193:__trunctfsf2
+4194:__tan
+4195:__rem_pio2_large
+4196:__overflow
+4197:__newlocale
+4198:__math_xflowf
+4199:__math_invalidf
+4200:__loc_is_allocated
+4201:__isxdigit_l
+4202:__getf2
+4203:__get_locale
+4204:__ftello_unlocked
+4205:__fseeko_unlocked
+4206:__floatscan
+4207:__expo2
+4208:__dynamic_cast
+4209:__divtf3
+4210:__cxxabiv1::__base_class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+4211:\28anonymous\20namespace\29::set_uv_quad\28SkPoint\20const*\2c\20\28anonymous\20namespace\29::BezierVertex*\29
+4212:\28anonymous\20namespace\29::safe_to_ignore_subset_rect\28GrAAType\2c\20SkFilterMode\2c\20DrawQuad\20const&\2c\20SkRect\20const&\29
+4213:\28anonymous\20namespace\29::prepare_for_direct_mask_drawing\28SkStrike*\2c\20SkMatrix\20const&\2c\20SkZip<unsigned\20short\20const\2c\20SkPoint\20const>\2c\20SkZip<SkGlyph\20const*\2c\20SkPoint>\2c\20SkZip<unsigned\20short\2c\20SkPoint>\29
+4214:\28anonymous\20namespace\29::morphology_pass\28skif::Context\20const&\2c\20skif::FilterResult\20const&\2c\20\28anonymous\20namespace\29::MorphType\2c\20\28anonymous\20namespace\29::MorphDirection\2c\20int\29
+4215:\28anonymous\20namespace\29::make_non_convex_fill_op\28GrRecordingContext*\2c\20SkArenaAlloc*\2c\20skgpu::ganesh::FillPathFlags\2c\20GrAAType\2c\20SkRect\20const&\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20GrPaint&&\29
+4216:\28anonymous\20namespace\29::is_newer_better\28SkData*\2c\20SkData*\29
+4217:\28anonymous\20namespace\29::get_glyph_run_intercepts\28sktext::GlyphRun\20const&\2c\20SkPaint\20const&\2c\20float\20const*\2c\20float*\2c\20int*\29
+4218:\28anonymous\20namespace\29::filter_and_mm_have_effect\28GrQuad\20const&\2c\20GrQuad\20const&\29
+4219:\28anonymous\20namespace\29::draw_to_sw_mask\28GrSWMaskHelper*\2c\20skgpu::ganesh::ClipStack::Element\20const&\2c\20bool\29
+4220:\28anonymous\20namespace\29::determine_clipped_src_rect\28SkIRect\2c\20SkMatrix\20const&\2c\20SkMatrix\20const&\2c\20SkISize\20const&\2c\20SkRect\20const*\29
+4221:\28anonymous\20namespace\29::create_hb_face\28SkTypeface\20const&\29::$_0::__invoke\28void*\29
+4222:\28anonymous\20namespace\29::cpu_blur\28skif::Context\20const&\2c\20skif::LayerSpace<SkSize>\2c\20sk_sp<SkSpecialImage>\20const&\2c\20skif::LayerSpace<SkIRect>\2c\20skif::LayerSpace<SkIRect>\29::$_0::operator\28\29\28double\29\20const
+4223:\28anonymous\20namespace\29::copyFTBitmap\28FT_Bitmap_\20const&\2c\20SkMaskBuilder*\29
+4224:\28anonymous\20namespace\29::colrv1_start_glyph\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20unsigned\20short\2c\20FT_Color_Root_Transform_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29
+4225:\28anonymous\20namespace\29::colrv1_draw_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_COLR_Paint_\20const&\29
+4226:\28anonymous\20namespace\29::colrv1_configure_skpaint\28FT_FaceRec_*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_COLR_Paint_\20const&\2c\20SkPaint*\29
+4227:\28anonymous\20namespace\29::YUVPlanesRec::~YUVPlanesRec\28\29
+4228:\28anonymous\20namespace\29::TriangulatingPathOp::~TriangulatingPathOp\28\29
+4229:\28anonymous\20namespace\29::TriangulatingPathOp::TriangulatingPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20GrStyledShape\20const&\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20GrAAType\2c\20GrUserStencilSettings\20const*\29
+4230:\28anonymous\20namespace\29::TriangulatingPathOp::Triangulate\28GrEagerVertexAllocator*\2c\20SkMatrix\20const&\2c\20GrStyledShape\20const&\2c\20SkIRect\20const&\2c\20float\2c\20bool*\29
+4231:\28anonymous\20namespace\29::TriangulatingPathOp::CreateKey\28skgpu::UniqueKey*\2c\20GrStyledShape\20const&\2c\20SkIRect\20const&\29
+4232:\28anonymous\20namespace\29::TransformedMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+4233:\28anonymous\20namespace\29::TextureOpImpl::propagateCoverageAAThroughoutChain\28\29
+4234:\28anonymous\20namespace\29::TextureOpImpl::characterize\28\28anonymous\20namespace\29::TextureOpImpl::Desc*\29\20const
+4235:\28anonymous\20namespace\29::TextureOpImpl::appendQuad\28DrawQuad*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\29
+4236:\28anonymous\20namespace\29::TextureOpImpl::Make\28GrRecordingContext*\2c\20GrTextureSetEntry*\2c\20int\2c\20int\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20skgpu::ganesh::TextureOp::Saturate\2c\20GrAAType\2c\20SkCanvas::SrcRectConstraint\2c\20SkMatrix\20const&\2c\20sk_sp<GrColorSpaceXform>\29
+4237:\28anonymous\20namespace\29::TextureOpImpl::FillInVertices\28GrCaps\20const&\2c\20\28anonymous\20namespace\29::TextureOpImpl*\2c\20\28anonymous\20namespace\29::TextureOpImpl::Desc*\2c\20char*\29
+4238:\28anonymous\20namespace\29::SpotVerticesFactory::makeVertices\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPoint*\29\20const
+4239:\28anonymous\20namespace\29::SkImageImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+4240:\28anonymous\20namespace\29::SkCropImageFilter::requiredInput\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\29\20const
+4241:\28anonymous\20namespace\29::SDFTSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+4242:\28anonymous\20namespace\29::RunIteratorQueue::advanceRuns\28\29
+4243:\28anonymous\20namespace\29::Pass::blur\28int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29
+4244:\28anonymous\20namespace\29::MipLevelHelper::allocAndInit\28SkArenaAlloc*\2c\20SkSamplingOptions\20const&\2c\20SkTileMode\2c\20SkTileMode\29
+4245:\28anonymous\20namespace\29::MeshOp::~MeshOp\28\29
+4246:\28anonymous\20namespace\29::MeshOp::MeshOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20sk_sp<SkVertices>\2c\20GrPrimitiveType\20const*\2c\20GrAAType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\29
+4247:\28anonymous\20namespace\29::MeshOp::MeshOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMesh\20const&\2c\20skia_private::TArray<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20true>\2c\20GrAAType\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\29
+4248:\28anonymous\20namespace\29::MeshOp::Mesh::Mesh\28SkMesh\20const&\29
+4249:\28anonymous\20namespace\29::MeshGP::~MeshGP\28\29
+4250:\28anonymous\20namespace\29::MeshGP::Impl::~Impl\28\29
+4251:\28anonymous\20namespace\29::MeshGP::Impl::MeshCallbacks::defineStruct\28char\20const*\29
+4252:\28anonymous\20namespace\29::FillRectOpImpl::tessellate\28skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20char*\29\20const
+4253:\28anonymous\20namespace\29::FillRectOpImpl::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20GrAAType\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+4254:\28anonymous\20namespace\29::FillRectOpImpl::FillRectOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\2c\20GrAAType\2c\20DrawQuad*\2c\20GrUserStencilSettings\20const*\2c\20GrSimpleMeshDrawOpHelper::InputFlags\29
+4255:\28anonymous\20namespace\29::EllipticalRRectEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrClipEdgeType\2c\20SkRRect\20const&\29
+4256:\28anonymous\20namespace\29::DrawAtlasOpImpl::DrawAtlasOpImpl\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20GrAAType\2c\20int\2c\20SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\29
+4257:\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29.1
+4258:\28anonymous\20namespace\29::DirectMaskSubRun::~DirectMaskSubRun\28\29
+4259:\28anonymous\20namespace\29::DirectMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+4260:\28anonymous\20namespace\29::DirectMaskSubRun::glyphCount\28\29\20const
+4261:\28anonymous\20namespace\29::DefaultPathOp::programInfo\28\29
+4262:\28anonymous\20namespace\29::DefaultPathOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkPath\20const&\2c\20float\2c\20unsigned\20char\2c\20SkMatrix\20const&\2c\20bool\2c\20GrAAType\2c\20SkRect\20const&\2c\20GrUserStencilSettings\20const*\29
+4263:\28anonymous\20namespace\29::DefaultPathOp::DefaultPathOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkPath\20const&\2c\20float\2c\20unsigned\20char\2c\20SkMatrix\20const&\2c\20bool\2c\20GrAAType\2c\20SkRect\20const&\2c\20GrUserStencilSettings\20const*\29
+4264:\28anonymous\20namespace\29::ClipGeometry\20\28anonymous\20namespace\29::get_clip_geometry<skgpu::ganesh::ClipStack::SaveRecord\2c\20skgpu::ganesh::ClipStack::Draw>\28skgpu::ganesh::ClipStack::SaveRecord\20const&\2c\20skgpu::ganesh::ClipStack::Draw\20const&\29
+4265:\28anonymous\20namespace\29::CircularRRectEffect::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+4266:\28anonymous\20namespace\29::CachedTessellations::~CachedTessellations\28\29
+4267:\28anonymous\20namespace\29::CachedTessellations::CachedTessellations\28\29
+4268:\28anonymous\20namespace\29::CacheImpl::~CacheImpl\28\29
+4269:\28anonymous\20namespace\29::AAHairlineOp::AAHairlineOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20unsigned\20char\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkIRect\2c\20float\2c\20GrUserStencilSettings\20const*\29
+4270:WebPResetDecParams
+4271:WebPRescalerGetScaledDimensions
+4272:WebPMultRows
+4273:WebPMultARGBRows
+4274:WebPIoInitFromOptions
+4275:WebPInitUpsamplers
+4276:WebPFlipBuffer
+4277:WebPDemuxGetChunk
+4278:WebPCopyDecBufferPixels
+4279:WebPAllocateDecBuffer
+4280:VP8RemapBitReader
+4281:VP8LHuffmanTablesAllocate
+4282:VP8LDspInit
+4283:VP8LConvertFromBGRA
+4284:VP8LColorCacheInit
+4285:VP8LColorCacheCopy
+4286:VP8LBuildHuffmanTable
+4287:VP8LBitReaderSetBuffer
+4288:VP8InitScanline
+4289:VP8GetInfo
+4290:VP8BitReaderSetBuffer
+4291:Update_Max
+4292:TransformOne_C
+4293:TT_Set_Named_Instance
+4294:TT_Hint_Glyph
+4295:StoreFrame
+4296:SortContourList\28SkOpContourHead**\2c\20bool\2c\20bool\29
+4297:SkYUVAPixmapInfo::isSupported\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\29\20const
+4298:SkWuffsCodec::seekFrame\28int\29
+4299:SkWuffsCodec::onStartIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+4300:SkWuffsCodec::onIncrementalDecodeTwoPass\28\29
+4301:SkWuffsCodec::decodeFrameConfig\28\29
+4302:SkWriter32::writeString\28char\20const*\2c\20unsigned\20long\29
+4303:SkWriteICCProfile\28skcms_ICCProfile\20const*\2c\20char\20const*\29
+4304:SkWStream::SizeOfPackedUInt\28unsigned\20long\29
+4305:SkWBuffer::padToAlign4\28\29
+4306:SkVertices::Builder::indices\28\29
+4307:SkUnicode::convertUtf16ToUtf8\28std::__2::basic_string<char16_t\2c\20std::__2::char_traits<char16_t>\2c\20std::__2::allocator<char16_t>>\20const&\29
+4308:SkUTF::UTF16ToUTF8\28char*\2c\20int\2c\20unsigned\20short\20const*\2c\20unsigned\20long\29
+4309:SkTypeface_FreeType::Scanner::~Scanner\28\29
+4310:SkTypeface_FreeType::Scanner::scanFont\28SkStreamAsset*\2c\20int\2c\20SkString*\2c\20SkFontStyle*\2c\20bool*\2c\20skia_private::STArray<4\2c\20SkTypeface_FreeType::Scanner::AxisDefinition\2c\20true>*\29\20const
+4311:SkTypeface_FreeType::Scanner::Scanner\28\29
+4312:SkTypeface_FreeType::FaceRec::Make\28SkTypeface_FreeType\20const*\29
+4313:SkTypeface_Empty::SkTypeface_Empty\28\29
+4314:SkTypeface_Custom::onGetFamilyName\28SkString*\29\20const
+4315:SkTypeface::textToGlyphs\28void\20const*\2c\20unsigned\20long\2c\20SkTextEncoding\2c\20unsigned\20short*\2c\20int\29\20const
+4316:SkTypeface::serialize\28SkWStream*\2c\20SkTypeface::SerializeBehavior\29\20const
+4317:SkTypeface::openStream\28int*\29\20const
+4318:SkTypeface::getFamilyName\28SkString*\29\20const
+4319:SkTypeface::MakeDefault\28\29
+4320:SkTransformShader::update\28SkMatrix\20const&\29
+4321:SkTransformShader::SkTransformShader\28SkShaderBase\20const&\2c\20bool\29
+4322:SkTiffImageFileDirectory::getEntryTag\28unsigned\20short\29\20const
+4323:SkTextBlobBuilder::allocRunPos\28SkFont\20const&\2c\20int\2c\20SkRect\20const*\29
+4324:SkTextBlob::getIntercepts\28float\20const*\2c\20float*\2c\20SkPaint\20const*\29\20const
+4325:SkTextBlob::RunRecord::StorageSize\28unsigned\20int\2c\20unsigned\20int\2c\20SkTextBlob::GlyphPositioning\2c\20SkSafeMath*\29
+4326:SkTextBlob::MakeFromText\28void\20const*\2c\20unsigned\20long\2c\20SkFont\20const&\2c\20SkTextEncoding\29
+4327:SkTextBlob::MakeFromRSXform\28void\20const*\2c\20unsigned\20long\2c\20SkRSXform\20const*\2c\20SkFont\20const&\2c\20SkTextEncoding\29
+4328:SkTextBlob::Iter::experimentalNext\28SkTextBlob::Iter::ExperimentalRun*\29
+4329:SkTextBlob::Iter::Iter\28SkTextBlob\20const&\29
+4330:SkTaskGroup::wait\28\29
+4331:SkTaskGroup::add\28std::__2::function<void\20\28\29>\29
+4332:SkTSpan::onlyEndPointsInCommon\28SkTSpan\20const*\2c\20bool*\2c\20bool*\2c\20bool*\29
+4333:SkTSpan::linearIntersects\28SkTCurve\20const&\29\20const
+4334:SkTSect::removeAllBut\28SkTSpan\20const*\2c\20SkTSpan*\2c\20SkTSect*\29
+4335:SkTSect::intersects\28SkTSpan*\2c\20SkTSect*\2c\20SkTSpan*\2c\20int*\29
+4336:SkTSect::deleteEmptySpans\28\29
+4337:SkTSect::addSplitAt\28SkTSpan*\2c\20double\29
+4338:SkTSect::addForPerp\28SkTSpan*\2c\20double\29
+4339:SkTSect::EndsEqual\28SkTSect\20const*\2c\20SkTSect\20const*\2c\20SkIntersections*\29
+4340:SkTMultiMap<GrResourceAllocator::Register\2c\20skgpu::ScratchKey\2c\20GrResourceAllocator::FreePoolTraits>::~SkTMultiMap\28\29
+4341:SkTDynamicHash<\28anonymous\20namespace\29::CacheImpl::Value\2c\20SkImageFilterCacheKey\2c\20\28anonymous\20namespace\29::CacheImpl::Value>::find\28SkImageFilterCacheKey\20const&\29\20const
+4342:SkTDStorage::calculateSizeOrDie\28int\29::$_1::operator\28\29\28\29\20const
+4343:SkTDStorage::SkTDStorage\28SkTDStorage&&\29
+4344:SkTCubic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+4345:SkTConic::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+4346:SkTConic::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+4347:SkTConic::controlsInside\28\29\20const
+4348:SkTConic::collapsed\28\29\20const
+4349:SkTBlockList<skgpu::ganesh::PathTessellator::PathDrawList\2c\2016>::reset\28\29
+4350:SkTBlockList<SkRasterClipStack::Rec\2c\2016>::reset\28\29
+4351:SkTBlockList<GrGLProgramDataManager::GLUniformInfo\2c\201>::push_back\28GrGLProgramDataManager::GLUniformInfo\20const&\29
+4352:SkSwizzler::MakeSimple\28int\2c\20SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+4353:SkSurfaces::WrapPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkSurfaceProps\20const*\29
+4354:SkSurface_Base::onDraw\28SkCanvas*\2c\20float\2c\20float\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\29
+4355:SkSurface_Base::onCapabilities\28\29
+4356:SkStrokeRec::setHairlineStyle\28\29
+4357:SkStrokeRec::SkStrokeRec\28SkPaint\20const&\2c\20SkPaint::Style\2c\20float\29
+4358:SkStrokeRec::GetInflationRadius\28SkPaint::Join\2c\20float\2c\20SkPaint::Cap\2c\20float\29
+4359:SkString::insertHex\28unsigned\20long\2c\20unsigned\20int\2c\20int\29
+4360:SkString::appendVAList\28char\20const*\2c\20void*\29
+4361:SkString::SkString\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+4362:SkStrikeSpec::SkStrikeSpec\28SkStrikeSpec\20const&\29
+4363:SkStrikeSpec::ShouldDrawAsPath\28SkPaint\20const&\2c\20SkFont\20const&\2c\20SkMatrix\20const&\29
+4364:SkStrikeCache::internalRemoveStrike\28SkStrike*\29
+4365:SkStrikeCache::internalFindStrikeOrNull\28SkDescriptor\20const&\29
+4366:SkStrSplit\28char\20const*\2c\20char\20const*\2c\20SkStrSplitMode\2c\20skia_private::TArray<SkString\2c\20true>*\29
+4367:SkSpriteBlitter_Memcpy::~SkSpriteBlitter_Memcpy\28\29
+4368:SkSpecialImages::MakeFromRaster\28SkIRect\20const&\2c\20sk_sp<SkImage>\2c\20SkSurfaceProps\20const&\29
+4369:SkSharedMutex::releaseShared\28\29
+4370:SkShaper::MakeFontMgrRunIterator\28char\20const*\2c\20unsigned\20long\2c\20SkFont\20const&\2c\20sk_sp<SkFontMgr>\29
+4371:SkShaders::MatrixRec::concat\28SkMatrix\20const&\29\20const
+4372:SkShaders::Blend\28sk_sp<SkBlender>\2c\20sk_sp<SkShader>\2c\20sk_sp<SkShader>\29
+4373:SkShaderUtils::VisitLineByLine\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\2c\20std::__2::function<void\20\28int\2c\20char\20const*\29>\20const&\29
+4374:SkShaderUtils::PrettyPrint\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29
+4375:SkShaderUtils::GLSLPrettyPrint::parseUntil\28char\20const*\29
+4376:SkShaderBase::getFlattenableType\28\29\20const
+4377:SkShader::makeWithLocalMatrix\28SkMatrix\20const&\29\20const
+4378:SkShader::makeWithColorFilter\28sk_sp<SkColorFilter>\29\20const
+4379:SkScan::PathRequiresTiling\28SkIRect\20const&\29
+4380:SkScan::HairLine\28SkPoint\20const*\2c\20int\2c\20SkRasterClip\20const&\2c\20SkBlitter*\29
+4381:SkScan::AntiFrameRect\28SkRect\20const&\2c\20SkPoint\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+4382:SkScan::AntiFillXRect\28SkIRect\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+4383:SkScan::AntiFillRect\28SkRect\20const&\2c\20SkRegion\20const*\2c\20SkBlitter*\29
+4384:SkScan::AAAFillPath\28SkPath\20const&\2c\20SkBlitter*\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20bool\29
+4385:SkScalerContext_FreeType_Base::drawCOLRv1Glyph\28FT_FaceRec_*\2c\20SkGlyph\20const&\2c\20unsigned\20int\2c\20SkSpan<unsigned\20int>\2c\20SkCanvas*\29
+4386:SkScalerContext_FreeType_Base::drawCOLRv0Glyph\28FT_FaceRec_*\2c\20SkGlyph\20const&\2c\20unsigned\20int\2c\20SkSpan<unsigned\20int>\2c\20SkCanvas*\29
+4387:SkScalerContext_FreeType::shouldSubpixelBitmap\28SkGlyph\20const&\2c\20SkMatrix\20const&\29
+4388:SkScalerContextRec::getSingleMatrix\28SkMatrix*\29\20const
+4389:SkScalerContext::internalMakeGlyph\28SkPackedGlyphID\2c\20SkMask::Format\2c\20SkArenaAlloc*\29
+4390:SkScalerContext::internalGetPath\28SkGlyph&\2c\20SkArenaAlloc*\29
+4391:SkScalerContext::getFontMetrics\28SkFontMetrics*\29
+4392:SkScalerContext::SkScalerContext\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29
+4393:SkScalerContext::PreprocessRec\28SkTypeface\20const&\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const&\29
+4394:SkScalerContext::MakeRecAndEffects\28SkFont\20const&\2c\20SkPaint\20const&\2c\20SkSurfaceProps\20const&\2c\20SkScalerContextFlags\2c\20SkMatrix\20const&\2c\20SkScalerContextRec*\2c\20SkScalerContextEffects*\29
+4395:SkScalerContext::MakeEmpty\28sk_sp<SkTypeface>\2c\20SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29
+4396:SkScalerContext::GetMaskPreBlend\28SkScalerContextRec\20const&\29
+4397:SkScalerContext::AutoDescriptorGivenRecAndEffects\28SkScalerContextRec\20const&\2c\20SkScalerContextEffects\20const&\2c\20SkAutoDescriptor*\29
+4398:SkSampledCodec::sampledDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const&\29
+4399:SkSampledCodec::accountForNativeScaling\28int*\2c\20int*\29\20const
+4400:SkSampledCodec::SkSampledCodec\28SkCodec*\29
+4401:SkSL::zero_expression\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\29
+4402:SkSL::type_to_sksltype\28SkSL::Context\20const&\2c\20SkSL::Type\20const&\2c\20SkSLType*\29
+4403:SkSL::stoi\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20long\20long*\29
+4404:SkSL::splat_scalar\28SkSL::Context\20const&\2c\20SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+4405:SkSL::rewrite_matrix_vector_multiply\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+4406:SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_2::operator\28\29\28int\29\20const
+4407:SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_1::operator\28\29\28int\29\20const
+4408:SkSL::optimize_intrinsic_call\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::IntrinsicKind\2c\20SkSL::ExpressionArray\20const&\2c\20SkSL::Type\20const&\29::$_0::operator\28\29\28int\29\20const
+4409:SkSL::negate_expression\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Expression\20const&\2c\20SkSL::Type\20const&\29
+4410:SkSL::move_all_but_break\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>*\29
+4411:SkSL::make_reciprocal_expression\28SkSL::Context\20const&\2c\20SkSL::Expression\20const&\29
+4412:SkSL::is_too_deeply_nested\28SkSL::Type\20const*\2c\20int\29
+4413:SkSL::index_out_of_range\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20long\20long\2c\20SkSL::Expression\20const&\29
+4414:SkSL::find_existing_declaration\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ModifierFlags\2c\20SkSL::IntrinsicKind\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\2c\20std::__2::default_delete<SkSL::Variable>>\2c\20true>&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::FunctionDeclaration**\29::$_0::operator\28\29\28\29\20const
+4415:SkSL::extract_matrix\28SkSL::Expression\20const*\2c\20float*\29
+4416:SkSL::eliminate_unreachable_code\28SkSpan<std::__2::unique_ptr<SkSL::ProgramElement\2c\20std::__2::default_delete<SkSL::ProgramElement>>>\2c\20SkSL::ProgramUsage*\29::UnreachableCodeEliminator::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\29
+4417:SkSL::check_main_signature\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20skia_private::TArray<std::__2::unique_ptr<SkSL::Variable\2c\20std::__2::default_delete<SkSL::Variable>>\2c\20true>&\29::$_4::operator\28\29\28int\29\20const
+4418:SkSL::\28anonymous\20namespace\29::check_valid_uniform_type\28SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::Context\20const&\2c\20bool\29
+4419:SkSL::\28anonymous\20namespace\29::FinalizationVisitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+4420:SkSL::VariableReference::setRefKind\28SkSL::VariableRefKind\29
+4421:SkSL::Variable::setVarDeclaration\28SkSL::VarDeclaration*\29
+4422:SkSL::Variable::Make\28SkSL::Position\2c\20SkSL::Position\2c\20SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20SkSL::Type\20const*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20bool\2c\20SkSL::VariableStorage\29
+4423:SkSL::Variable::MakeScratchVariable\28SkSL::Context\20const&\2c\20SkSL::Mangler&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20SkSL::Type\20const*\2c\20SkSL::SymbolTable*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4424:SkSL::VarDeclaration::Make\28SkSL::Context\20const&\2c\20SkSL::Variable*\2c\20SkSL::Type\20const*\2c\20int\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4425:SkSL::VarDeclaration::ErrorCheck\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Position\2c\20SkSL::Layout\20const&\2c\20SkSL::ModifierFlags\2c\20SkSL::Type\20const*\2c\20SkSL::Type\20const*\2c\20SkSL::VariableStorage\29
+4426:SkSL::TypeReference::description\28SkSL::OperatorPrecedence\29\20const
+4427:SkSL::TypeReference::VerifyType\28SkSL::Context\20const&\2c\20SkSL::Type\20const*\2c\20SkSL::Position\29
+4428:SkSL::TypeReference::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\29
+4429:SkSL::Type::checkForOutOfRangeLiteral\28SkSL::Context\20const&\2c\20SkSL::Expression\20const&\29\20const
+4430:SkSL::Type::MakeStructType\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::TArray<SkSL::Field\2c\20true>\2c\20bool\29
+4431:SkSL::Type::MakeLiteralType\28char\20const*\2c\20SkSL::Type\20const&\2c\20signed\20char\29
+4432:SkSL::ThreadContext::ThreadContext\28SkSL::Compiler*\2c\20SkSL::ProgramKind\2c\20SkSL::ProgramSettings\20const&\2c\20SkSL::Module\20const*\2c\20bool\29
+4433:SkSL::ThreadContext::End\28\29
+4434:SkSL::SymbolTable::wouldShadowSymbolsFrom\28SkSL::SymbolTable\20const*\29\20const
+4435:SkSL::SymbolTable::findBuiltinSymbol\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29\20const
+4436:SkSL::Swizzle::MaskString\28skia_private::STArray<4\2c\20signed\20char\2c\20true>\20const&\29
+4437:SkSL::SwitchStatement::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>\2c\20std::__2::shared_ptr<SkSL::SymbolTable>\29
+4438:SkSL::SwitchCase::Make\28SkSL::Position\2c\20long\20long\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+4439:SkSL::SwitchCase::MakeDefault\28SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+4440:SkSL::String::vappendf\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\2c\20char\20const*\2c\20void*\29
+4441:SkSL::SingleArgumentConstructor::argumentSpan\28\29
+4442:SkSL::Setting::name\28\29\20const
+4443:SkSL::Setting::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\20const&\29
+4444:SkSL::RP::stack_usage\28SkSL::RP::Instruction\20const&\29
+4445:SkSL::RP::UnownedLValueSlice::isWritable\28\29\20const
+4446:SkSL::RP::UnownedLValueSlice::dynamicSlotRange\28\29
+4447:SkSL::RP::ScratchLValue::~ScratchLValue\28\29
+4448:SkSL::RP::Program::~Program\28\29
+4449:SkSL::RP::LValue::swizzle\28\29
+4450:SkSL::RP::Generator::writeVarDeclaration\28SkSL::VarDeclaration\20const&\29
+4451:SkSL::RP::Generator::writeFunction\28SkSL::IRNode\20const&\2c\20SkSL::FunctionDefinition\20const&\2c\20SkSpan<std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\20const>\29
+4452:SkSL::RP::Generator::storeImmutableValueToSlots\28skia_private::TArray<int\2c\20true>\20const&\2c\20SkSL::RP::SlotRange\29
+4453:SkSL::RP::Generator::pushVariableReferencePartial\28SkSL::VariableReference\20const&\2c\20SkSL::RP::SlotRange\29
+4454:SkSL::RP::Generator::pushPrefixExpression\28SkSL::Operator\2c\20SkSL::Expression\20const&\29
+4455:SkSL::RP::Generator::pushIntrinsic\28SkSL::IntrinsicKind\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\2c\20SkSL::Expression\20const&\29
+4456:SkSL::RP::Generator::pushImmutableData\28SkSL::Expression\20const&\29
+4457:SkSL::RP::Generator::pushAbsFloatIntrinsic\28int\29
+4458:SkSL::RP::Generator::getImmutableValueForExpression\28SkSL::Expression\20const&\2c\20skia_private::TArray<int\2c\20true>*\29
+4459:SkSL::RP::Generator::foldWithMultiOp\28SkSL::RP::BuilderOp\2c\20int\29
+4460:SkSL::RP::Generator::findPreexistingImmutableData\28skia_private::TArray<int\2c\20true>\20const&\29
+4461:SkSL::RP::Builder::push_slots_or_immutable_indirect\28SkSL::RP::SlotRange\2c\20int\2c\20SkSL::RP::SlotRange\2c\20SkSL::RP::BuilderOp\29
+4462:SkSL::RP::Builder::copy_stack_to_slots\28SkSL::RP::SlotRange\2c\20int\29
+4463:SkSL::RP::Builder::branch_if_any_lanes_active\28int\29
+4464:SkSL::ProgramVisitor::visit\28SkSL::Program\20const&\29
+4465:SkSL::ProgramUsage::remove\28SkSL::Expression\20const*\29
+4466:SkSL::ProgramUsage::add\28SkSL::Statement\20const*\29
+4467:SkSL::ProgramUsage::add\28SkSL::ProgramElement\20const&\29
+4468:SkSL::Pool::attachToThread\28\29
+4469:SkSL::PipelineStage::PipelineStageCodeGenerator::functionName\28SkSL::FunctionDeclaration\20const&\29
+4470:SkSL::PipelineStage::PipelineStageCodeGenerator::functionDeclaration\28SkSL::FunctionDeclaration\20const&\29
+4471:SkSL::Parser::varDeclarationsOrExpressionStatement\28\29
+4472:SkSL::Parser::switchCaseBody\28SkSL::ExpressionArray*\2c\20skia_private::STArray<2\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20true>*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4473:SkSL::Parser::shiftExpression\28\29
+4474:SkSL::Parser::relationalExpression\28\29
+4475:SkSL::Parser::parameter\28std::__2::unique_ptr<SkSL::Variable\2c\20std::__2::default_delete<SkSL::Variable>>*\29
+4476:SkSL::Parser::multiplicativeExpression\28\29
+4477:SkSL::Parser::logicalXorExpression\28\29
+4478:SkSL::Parser::logicalAndExpression\28\29
+4479:SkSL::Parser::localVarDeclarationEnd\28SkSL::Position\2c\20SkSL::Modifiers\20const&\2c\20SkSL::Type\20const*\2c\20SkSL::Token\29
+4480:SkSL::Parser::intLiteral\28long\20long*\29
+4481:SkSL::Parser::globalVarDeclarationEnd\28SkSL::Position\2c\20SkSL::Modifiers\20const&\2c\20SkSL::Type\20const*\2c\20SkSL::Token\29
+4482:SkSL::Parser::equalityExpression\28\29
+4483:SkSL::Parser::directive\28bool\29
+4484:SkSL::Parser::declarations\28\29
+4485:SkSL::Parser::checkNext\28SkSL::Token::Kind\2c\20SkSL::Token*\29
+4486:SkSL::Parser::bitwiseXorExpression\28\29
+4487:SkSL::Parser::bitwiseOrExpression\28\29
+4488:SkSL::Parser::bitwiseAndExpression\28\29
+4489:SkSL::Parser::additiveExpression\28\29
+4490:SkSL::Parser::Parser\28SkSL::Compiler*\2c\20SkSL::ProgramSettings\20const&\2c\20SkSL::ProgramKind\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+4491:SkSL::MultiArgumentConstructor::argumentSpan\28\29
+4492:SkSL::ModuleLoader::~ModuleLoader\28\29
+4493:SkSL::ModuleLoader::loadVertexModule\28SkSL::Compiler*\29
+4494:SkSL::ModuleLoader::loadSharedModule\28SkSL::Compiler*\29
+4495:SkSL::ModuleLoader::loadPublicModule\28SkSL::Compiler*\29
+4496:SkSL::ModuleLoader::loadFragmentModule\28SkSL::Compiler*\29
+4497:SkSL::ModuleLoader::Get\28\29
+4498:SkSL::MethodReference::~MethodReference\28\29.1
+4499:SkSL::MethodReference::~MethodReference\28\29
+4500:SkSL::MatrixType::bitWidth\28\29\20const
+4501:SkSL::MakeRasterPipelineProgram\28SkSL::Program\20const&\2c\20SkSL::FunctionDefinition\20const&\2c\20SkSL::DebugTracePriv*\2c\20bool\29
+4502:SkSL::Layout::description\28\29\20const
+4503:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_matrixCompMult\28double\2c\20double\2c\20double\29
+4504:SkSL::Intrinsics::\28anonymous\20namespace\29::evaluate_length\28std::__2::array<SkSL::Expression\20const*\2c\203ul>\20const&\29
+4505:SkSL::InterfaceBlock::~InterfaceBlock\28\29
+4506:SkSL::Inliner::candidateCanBeInlined\28SkSL::InlineCandidate\20const&\2c\20SkSL::ProgramUsage\20const&\2c\20skia_private::THashMap<SkSL::FunctionDeclaration\20const*\2c\20bool\2c\20SkGoodHash>*\29
+4507:SkSL::IfStatement::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+4508:SkSL::GLSLCodeGenerator::writeVarDeclaration\28SkSL::VarDeclaration\20const&\2c\20bool\29
+4509:SkSL::GLSLCodeGenerator::writeProgramElement\28SkSL::ProgramElement\20const&\29
+4510:SkSL::GLSLCodeGenerator::writeMinAbsHack\28SkSL::Expression&\2c\20SkSL::Expression&\29
+4511:SkSL::GLSLCodeGenerator::generateCode\28\29
+4512:SkSL::FunctionDefinition::~FunctionDefinition\28\29.1
+4513:SkSL::FunctionDefinition::~FunctionDefinition\28\29
+4514:SkSL::FunctionDefinition::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20bool\29::Finalizer::visitStatementPtr\28std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>&\29
+4515:SkSL::FunctionDefinition::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20bool\29::Finalizer::addLocalVariable\28SkSL::Variable\20const*\2c\20SkSL::Position\29
+4516:SkSL::FunctionDeclaration::~FunctionDeclaration\28\29.1
+4517:SkSL::FunctionDeclaration::~FunctionDeclaration\28\29
+4518:SkSL::FunctionDeclaration::mangledName\28\29\20const
+4519:SkSL::FunctionDeclaration::determineFinalTypes\28SkSL::ExpressionArray\20const&\2c\20skia_private::STArray<8\2c\20SkSL::Type\20const*\2c\20true>*\2c\20SkSL::Type\20const**\29\20const
+4520:SkSL::FunctionDeclaration::FunctionDeclaration\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ModifierFlags\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20skia_private::TArray<SkSL::Variable*\2c\20true>\2c\20SkSL::Type\20const*\2c\20SkSL::IntrinsicKind\29
+4521:SkSL::FunctionCall::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::FunctionDeclaration\20const&\2c\20SkSL::ExpressionArray\29
+4522:SkSL::FunctionCall::FindBestFunctionForCall\28SkSL::Context\20const&\2c\20SkSL::FunctionDeclaration\20const*\2c\20SkSL::ExpressionArray\20const&\29
+4523:SkSL::FunctionCall::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::FunctionDeclaration\20const&\2c\20SkSL::ExpressionArray\29
+4524:SkSL::ForStatement::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ForLoopPositions\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\2c\20std::__2::unique_ptr<SkSL::Statement\2c\20std::__2::default_delete<SkSL::Statement>>\29
+4525:SkSL::FindIntrinsicKind\28std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+4526:SkSL::FieldAccess::~FieldAccess\28\29.1
+4527:SkSL::FieldAccess::~FieldAccess\28\29
+4528:SkSL::ExtendedVariable::layout\28\29\20const
+4529:SkSL::ExpressionStatement::Convert\28SkSL::Context\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4530:SkSL::ConstructorScalarCast::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+4531:SkSL::ConstructorMatrixResize::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>\29
+4532:SkSL::Constructor::Convert\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const&\2c\20SkSL::ExpressionArray\29
+4533:SkSL::Compiler::writeErrorCount\28\29
+4534:SkSL::Compiler::toGLSL\28SkSL::Program&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>*\29
+4535:SkSL::ChildCall::~ChildCall\28\29.1
+4536:SkSL::ChildCall::~ChildCall\28\29
+4537:SkSL::ChildCall::Make\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::Type\20const*\2c\20SkSL::Variable\20const&\2c\20SkSL::ExpressionArray\29
+4538:SkSL::BinaryExpression::isAssignmentIntoVariable\28\29
+4539:SkSL::Analysis::\28anonymous\20namespace\29::LoopControlFlowVisitor::visitStatement\28SkSL::Statement\20const&\29
+4540:SkSL::Analysis::IsDynamicallyUniformExpression\28SkSL::Expression\20const&\29
+4541:SkSL::Analysis::IsConstantExpression\28SkSL::Expression\20const&\29
+4542:SkSL::Analysis::IsAssignable\28SkSL::Expression&\2c\20SkSL::Analysis::AssignmentInfo*\2c\20SkSL::ErrorReporter*\29
+4543:SkSL::Analysis::GetLoopUnrollInfo\28SkSL::Context\20const&\2c\20SkSL::Position\2c\20SkSL::ForLoopPositions\20const&\2c\20SkSL::Statement\20const*\2c\20std::__2::unique_ptr<SkSL::Expression\2c\20std::__2::default_delete<SkSL::Expression>>*\2c\20SkSL::Expression\20const*\2c\20SkSL::Statement\20const*\2c\20SkSL::ErrorReporter*\29
+4544:SkSL::Analysis::GetLoopControlFlowInfo\28SkSL::Statement\20const&\29
+4545:SkSL::AliasType::numberKind\28\29\20const
+4546:SkSL::AliasType::isAllowedInES2\28\29\20const
+4547:SkRuntimeShader::~SkRuntimeShader\28\29
+4548:SkRuntimeEffectPriv::WriteChildEffects\28SkWriteBuffer&\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\29
+4549:SkRuntimeEffect::~SkRuntimeEffect\28\29
+4550:SkRuntimeEffect::source\28\29\20const
+4551:SkRuntimeEffect::makeShader\28sk_sp<SkData\20const>\2c\20sk_sp<SkShader>*\2c\20unsigned\20long\2c\20SkMatrix\20const*\29\20const
+4552:SkRuntimeEffect::makeColorFilter\28sk_sp<SkData\20const>\2c\20SkSpan<SkRuntimeEffect::ChildPtr\20const>\29\20const
+4553:SkRuntimeEffect::MakeForBlender\28SkString\2c\20SkRuntimeEffect::Options\20const&\29
+4554:SkRuntimeEffect::ChildPtr&\20skia_private::TArray<SkRuntimeEffect::ChildPtr\2c\20true>::emplace_back<sk_sp<SkShader>&>\28sk_sp<SkShader>&\29
+4555:SkRuntimeBlender::flatten\28SkWriteBuffer&\29\20const
+4556:SkRgnBuilder::~SkRgnBuilder\28\29
+4557:SkResourceCache::PostPurgeSharedID\28unsigned\20long\20long\29
+4558:SkResourceCache::GetDiscardableFactory\28\29
+4559:SkRescaleAndReadPixels\28SkBitmap\2c\20SkImageInfo\20const&\2c\20SkIRect\20const&\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29
+4560:SkRegion::Spanerator::Spanerator\28SkRegion\20const&\2c\20int\2c\20int\2c\20int\29
+4561:SkRegion::Oper\28SkRegion\20const&\2c\20SkRegion\20const&\2c\20SkRegion::Op\2c\20SkRegion*\29
+4562:SkRefCntSet::~SkRefCntSet\28\29
+4563:SkRefCntBase::internal_dispose\28\29\20const
+4564:SkReduceOrder::reduce\28SkDQuad\20const&\29
+4565:SkReduceOrder::Conic\28SkConic\20const&\2c\20SkPoint*\29
+4566:SkRectClipBlitter::requestRowsPreserved\28\29\20const
+4567:SkRectClipBlitter::allocBlitMemory\28unsigned\20long\29
+4568:SkRect::intersect\28SkRect\20const&\2c\20SkRect\20const&\29
+4569:SkRecords::TypedMatrix::TypedMatrix\28SkMatrix\20const&\29
+4570:SkRecords::FillBounds::popSaveBlock\28\29
+4571:SkRecordOptimize\28SkRecord*\29
+4572:SkRecordFillBounds\28SkRect\20const&\2c\20SkRecord\20const&\2c\20SkRect*\2c\20SkBBoxHierarchy::Metadata*\29
+4573:SkRecord::bytesUsed\28\29\20const
+4574:SkReadPixelsRec::trim\28int\2c\20int\29
+4575:SkReadBuffer::readString\28unsigned\20long*\29
+4576:SkReadBuffer::readRegion\28SkRegion*\29
+4577:SkReadBuffer::readPoint3\28SkPoint3*\29
+4578:SkRasterPipeline_<256ul>::SkRasterPipeline_\28\29
+4579:SkRasterPipeline::append_set_rgb\28SkArenaAlloc*\2c\20float\20const*\29
+4580:SkRasterClipStack::SkRasterClipStack\28int\2c\20int\29
+4581:SkRTreeFactory::operator\28\29\28\29\20const
+4582:SkRTree::search\28SkRTree::Node*\2c\20SkRect\20const&\2c\20std::__2::vector<int\2c\20std::__2::allocator<int>>*\29\20const
+4583:SkRTree::bulkLoad\28std::__2::vector<SkRTree::Branch\2c\20std::__2::allocator<SkRTree::Branch>>*\2c\20int\29
+4584:SkRTree::allocateNodeAtLevel\28unsigned\20short\29
+4585:SkRSXform::toQuad\28float\2c\20float\2c\20SkPoint*\29\20const
+4586:SkRRect::isValid\28\29\20const
+4587:SkRRect::computeType\28\29
+4588:SkRGBA4f<\28SkAlphaType\292>\20skgpu::Swizzle::applyTo<\28SkAlphaType\292>\28SkRGBA4f<\28SkAlphaType\292>\29\20const
+4589:SkRBuffer::skipToAlign4\28\29
+4590:SkQuads::EvalAt\28double\2c\20double\2c\20double\2c\20double\29
+4591:SkQuadraticEdge::setQuadraticWithoutUpdate\28SkPoint\20const*\2c\20int\29
+4592:SkPtrSet::reset\28\29
+4593:SkPtrSet::copyToArray\28void**\29\20const
+4594:SkPtrSet::add\28void*\29
+4595:SkPoint::Normalize\28SkPoint*\29
+4596:SkPngEncoder::Make\28SkWStream*\2c\20SkPixmap\20const&\2c\20SkPngEncoder::Options\20const&\29
+4597:SkPngCodec::initializeXforms\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+4598:SkPngCodec::initializeSwizzler\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20bool\29
+4599:SkPngCodec::allocateStorage\28SkImageInfo\20const&\29
+4600:SkPngCodec::IsPng\28void\20const*\2c\20unsigned\20long\29
+4601:SkPixmap::erase\28unsigned\20int\2c\20SkIRect\20const&\29\20const
+4602:SkPixmap::erase\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkIRect\20const*\29\20const
+4603:SkPixelRef::getGenerationID\28\29\20const
+4604:SkPixelRef::addGenIDChangeListener\28sk_sp<SkIDChangeListener>\29
+4605:SkPixelRef::SkPixelRef\28int\2c\20int\2c\20void*\2c\20unsigned\20long\29
+4606:SkPictureShader::CachedImageInfo::makeImage\28sk_sp<SkSurface>\2c\20SkPicture\20const*\29\20const
+4607:SkPictureShader::CachedImageInfo::Make\28SkRect\20const&\2c\20SkMatrix\20const&\2c\20SkColorType\2c\20SkColorSpace*\2c\20int\2c\20SkSurfaceProps\20const&\29
+4608:SkPictureRecord::endRecording\28\29
+4609:SkPictureRecord::beginRecording\28\29
+4610:SkPicturePriv::Flatten\28sk_sp<SkPicture\20const>\2c\20SkWriteBuffer&\29
+4611:SkPicturePlayback::draw\28SkCanvas*\2c\20SkPicture::AbortCallback*\2c\20SkReadBuffer*\29
+4612:SkPictureData::parseBufferTag\28SkReadBuffer&\2c\20unsigned\20int\2c\20unsigned\20int\29
+4613:SkPictureData::getPicture\28SkReadBuffer*\29\20const
+4614:SkPictureData::getDrawable\28SkReadBuffer*\29\20const
+4615:SkPictureData::flatten\28SkWriteBuffer&\29\20const
+4616:SkPictureData::flattenToBuffer\28SkWriteBuffer&\2c\20bool\29\20const
+4617:SkPictureData::SkPictureData\28SkPictureRecord\20const&\2c\20SkPictInfo\20const&\29
+4618:SkPicture::backport\28\29\20const
+4619:SkPicture::SkPicture\28\29
+4620:SkPicture::MakeFromStreamPriv\28SkStream*\2c\20SkDeserialProcs\20const*\2c\20SkTypefacePlayback*\2c\20int\29
+4621:SkPathWriter::assemble\28\29
+4622:SkPathWriter::SkPathWriter\28SkPath&\29
+4623:SkPathRef::resetToSize\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+4624:SkPathPriv::IsNestedFillRects\28SkPath\20const&\2c\20SkRect*\2c\20SkPathDirection*\29
+4625:SkPathPriv::CreateDrawArcPath\28SkPath*\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20bool\29
+4626:SkPathEffectBase::PointData::~PointData\28\29
+4627:SkPathEffect::filterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+4628:SkPathBuilder::addOval\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+4629:SkPath::writeToMemoryAsRRect\28void*\29\20const
+4630:SkPath::setLastPt\28float\2c\20float\29
+4631:SkPath::reverseAddPath\28SkPath\20const&\29
+4632:SkPath::readFromMemory\28void\20const*\2c\20unsigned\20long\29
+4633:SkPath::offset\28float\2c\20float\2c\20SkPath*\29\20const
+4634:SkPath::isZeroLengthSincePoint\28int\29\20const
+4635:SkPath::isRRect\28SkRRect*\29\20const
+4636:SkPath::isOval\28SkRect*\29\20const
+4637:SkPath::conservativelyContainsRect\28SkRect\20const&\29\20const
+4638:SkPath::computeConvexity\28\29\20const
+4639:SkPath::addPath\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath::AddPathMode\29
+4640:SkPath::Polygon\28SkPoint\20const*\2c\20int\2c\20bool\2c\20SkPathFillType\2c\20bool\29
+4641:SkPath2DPathEffect::Make\28SkMatrix\20const&\2c\20SkPath\20const&\29
+4642:SkPath1DPathEffect::Make\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style\29
+4643:SkParseEncodedOrigin\28void\20const*\2c\20unsigned\20long\2c\20SkEncodedOrigin*\29
+4644:SkPaintPriv::Unflatten\28SkReadBuffer&\29
+4645:SkPaintPriv::ShouldDither\28SkPaint\20const&\2c\20SkColorType\29
+4646:SkPaintPriv::Overwrites\28SkPaint\20const*\2c\20SkPaintPriv::ShaderOverrideOpacity\29
+4647:SkPaintPriv::Flatten\28SkPaint\20const&\2c\20SkWriteBuffer&\29
+4648:SkPaint::setStroke\28bool\29
+4649:SkPaint::reset\28\29
+4650:SkPaint::refImageFilter\28\29\20const
+4651:SkPaint::refColorFilter\28\29\20const
+4652:SkOpSpanBase::merge\28SkOpSpan*\29
+4653:SkOpSpanBase::globalState\28\29\20const
+4654:SkOpSpan::sortableTop\28SkOpContour*\29
+4655:SkOpSpan::release\28SkOpPtT\20const*\29
+4656:SkOpSpan::insertCoincidence\28SkOpSegment\20const*\2c\20bool\2c\20bool\29
+4657:SkOpSpan::init\28SkOpSegment*\2c\20SkOpSpan*\2c\20double\2c\20SkPoint\20const&\29
+4658:SkOpSegment::updateWindingReverse\28SkOpAngle\20const*\29
+4659:SkOpSegment::oppXor\28\29\20const
+4660:SkOpSegment::moveMultiples\28\29
+4661:SkOpSegment::isXor\28\29\20const
+4662:SkOpSegment::findNextWinding\28SkTDArray<SkOpSpanBase*>*\2c\20SkOpSpanBase**\2c\20SkOpSpanBase**\2c\20bool*\29
+4663:SkOpSegment::findNextOp\28SkTDArray<SkOpSpanBase*>*\2c\20SkOpSpanBase**\2c\20SkOpSpanBase**\2c\20bool*\2c\20bool*\2c\20SkPathOp\2c\20int\2c\20int\29
+4664:SkOpSegment::computeSum\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20SkOpAngle::IncludeType\29
+4665:SkOpSegment::collapsed\28double\2c\20double\29\20const
+4666:SkOpSegment::addExpanded\28double\2c\20SkOpSpanBase\20const*\2c\20bool*\29
+4667:SkOpSegment::activeAngle\28SkOpSpanBase*\2c\20SkOpSpanBase**\2c\20SkOpSpanBase**\2c\20bool*\29
+4668:SkOpSegment::UseInnerWinding\28int\2c\20int\29
+4669:SkOpPtT::ptAlreadySeen\28SkOpPtT\20const*\29\20const
+4670:SkOpPtT::contains\28SkOpSegment\20const*\2c\20double\29\20const
+4671:SkOpGlobalState::SkOpGlobalState\28SkOpContourHead*\2c\20SkArenaAlloc*\29
+4672:SkOpEdgeBuilder::preFetch\28\29
+4673:SkOpEdgeBuilder::init\28\29
+4674:SkOpEdgeBuilder::finish\28\29
+4675:SkOpContourBuilder::addConic\28SkPoint*\2c\20float\29
+4676:SkOpContour::addQuad\28SkPoint*\29
+4677:SkOpContour::addCubic\28SkPoint*\29
+4678:SkOpContour::addConic\28SkPoint*\2c\20float\29
+4679:SkOpCoincidence::release\28SkOpSegment\20const*\29
+4680:SkOpCoincidence::mark\28\29
+4681:SkOpCoincidence::markCollapsed\28SkCoincidentSpans*\2c\20SkOpPtT*\29
+4682:SkOpCoincidence::fixUp\28SkCoincidentSpans*\2c\20SkOpPtT*\2c\20SkOpPtT\20const*\29
+4683:SkOpCoincidence::contains\28SkCoincidentSpans\20const*\2c\20SkOpSegment\20const*\2c\20SkOpSegment\20const*\2c\20double\29\20const
+4684:SkOpCoincidence::checkOverlap\28SkCoincidentSpans*\2c\20SkOpSegment\20const*\2c\20SkOpSegment\20const*\2c\20double\2c\20double\2c\20double\2c\20double\2c\20SkTDArray<SkCoincidentSpans*>*\29\20const
+4685:SkOpCoincidence::addOrOverlap\28SkOpSegment*\2c\20SkOpSegment*\2c\20double\2c\20double\2c\20double\2c\20double\2c\20bool*\29
+4686:SkOpAngle::tangentsDiverge\28SkOpAngle\20const*\2c\20double\29
+4687:SkOpAngle::setSpans\28\29
+4688:SkOpAngle::setSector\28\29
+4689:SkOpAngle::previous\28\29\20const
+4690:SkOpAngle::midToSide\28SkOpAngle\20const*\2c\20bool*\29\20const
+4691:SkOpAngle::loopCount\28\29\20const
+4692:SkOpAngle::loopContains\28SkOpAngle\20const*\29\20const
+4693:SkOpAngle::lastMarked\28\29\20const
+4694:SkOpAngle::endToSide\28SkOpAngle\20const*\2c\20bool*\29\20const
+4695:SkOpAngle::alignmentSameSide\28SkOpAngle\20const*\2c\20int*\29\20const
+4696:SkOpAngle::after\28SkOpAngle*\29
+4697:SkOffsetSimplePolygon\28SkPoint\20const*\2c\20int\2c\20SkRect\20const&\2c\20float\2c\20SkTDArray<SkPoint>*\2c\20SkTDArray<int>*\29
+4698:SkNoDrawCanvas::onDrawEdgeAAImageSet2\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const*\2c\20SkCanvas::SrcRectConstraint\29
+4699:SkNoDrawCanvas::onDrawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+4700:SkMipmapBuilder::countLevels\28\29\20const
+4701:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29.1
+4702:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::~CpuBuffer\28\29
+4703:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::size\28\29\20const
+4704:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::peek\28\29\20const
+4705:SkMeshPriv::CpuBuffer<SkMeshPriv::IB>::onUpdate\28GrDirectContext*\2c\20void\20const*\2c\20unsigned\20long\2c\20unsigned\20long\29
+4706:SkMatrix::setRotate\28float\2c\20float\2c\20float\29
+4707:SkMatrix::mapRectScaleTranslate\28SkRect*\2c\20SkRect\20const&\29\20const
+4708:SkMatrix::isFinite\28\29\20const
+4709:SkMatrix::getMinMaxScales\28float*\29\20const
+4710:SkMatrix::Translate\28float\2c\20float\29
+4711:SkMatrix::Translate\28SkIPoint\29
+4712:SkMatrix::RotTrans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+4713:SkMaskSwizzler::swizzle\28void*\2c\20unsigned\20char\20const*\29
+4714:SkMaskFilterBase::NinePatch::~NinePatch\28\29
+4715:SkMask::computeTotalImageSize\28\29\20const
+4716:SkMakeResourceCacheSharedIDForBitmap\28unsigned\20int\29
+4717:SkMakeCachedRuntimeEffect\28SkRuntimeEffect::Result\20\28*\29\28SkString\2c\20SkRuntimeEffect::Options\20const&\29\2c\20char\20const*\29
+4718:SkM44::preTranslate\28float\2c\20float\2c\20float\29
+4719:SkM44::postTranslate\28float\2c\20float\2c\20float\29
+4720:SkLocalMatrixShader::type\28\29\20const
+4721:SkLinearColorSpaceLuminance::toLuma\28float\2c\20float\29\20const
+4722:SkLineParameters::cubicEndPoints\28SkDCubic\20const&\29
+4723:SkLatticeIter::SkLatticeIter\28SkCanvas::Lattice\20const&\2c\20SkRect\20const&\29
+4724:SkLRUCache<unsigned\20long\20long\2c\20sk_sp<SkRuntimeEffect>\2c\20SkGoodHash>::find\28unsigned\20long\20long\20const&\29
+4725:SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::~SkLRUCache\28\29
+4726:SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::reset\28\29
+4727:SkLRUCache<GrProgramDesc\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\2c\20GrGLGpu::ProgramCache::DescHash>::insert\28GrProgramDesc\20const&\2c\20std::__2::unique_ptr<GrGLGpu::ProgramCache::Entry\2c\20std::__2::default_delete<GrGLGpu::ProgramCache::Entry>>\29
+4728:SkJpegCodec::readRows\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20SkCodec::Options\20const&\29
+4729:SkJpegCodec::initializeSwizzler\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20bool\29
+4730:SkJpegCodec::ReadHeader\28SkStream*\2c\20SkCodec**\2c\20JpegDecoderMgr**\2c\20std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>\29
+4731:SkJSONWriter::appendString\28char\20const*\2c\20unsigned\20long\29
+4732:SkIsSimplePolygon\28SkPoint\20const*\2c\20int\29
+4733:SkIsConvexPolygon\28SkPoint\20const*\2c\20int\29
+4734:SkInvert4x4Matrix\28float\20const*\2c\20float*\29
+4735:SkInvert3x3Matrix\28float\20const*\2c\20float*\29
+4736:SkInvert2x2Matrix\28float\20const*\2c\20float*\29
+4737:SkIntersections::vertical\28SkDQuad\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4738:SkIntersections::vertical\28SkDLine\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4739:SkIntersections::vertical\28SkDCubic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4740:SkIntersections::vertical\28SkDConic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4741:SkIntersections::mostOutside\28double\2c\20double\2c\20SkDPoint\20const&\29\20const
+4742:SkIntersections::intersect\28SkDQuad\20const&\2c\20SkDLine\20const&\29
+4743:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDQuad\20const&\29
+4744:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDLine\20const&\29
+4745:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDConic\20const&\29
+4746:SkIntersections::intersect\28SkDConic\20const&\2c\20SkDQuad\20const&\29
+4747:SkIntersections::intersect\28SkDConic\20const&\2c\20SkDLine\20const&\29
+4748:SkIntersections::insertCoincident\28double\2c\20double\2c\20SkDPoint\20const&\29
+4749:SkIntersections::horizontal\28SkDQuad\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4750:SkIntersections::horizontal\28SkDLine\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4751:SkIntersections::horizontal\28SkDCubic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4752:SkIntersections::horizontal\28SkDConic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+4753:SkImages::RasterFromPixmap\28SkPixmap\20const&\2c\20void\20\28*\29\28void\20const*\2c\20void*\29\2c\20void*\29
+4754:SkImages::RasterFromData\28SkImageInfo\20const&\2c\20sk_sp<SkData>\2c\20unsigned\20long\29
+4755:SkImages::DeferredFromGenerator\28std::__2::unique_ptr<SkImageGenerator\2c\20std::__2::default_delete<SkImageGenerator>>\29
+4756:SkImages::DeferredFromEncodedData\28sk_sp<SkData>\2c\20std::__2::optional<SkAlphaType>\29
+4757:SkImage_Lazy::~SkImage_Lazy\28\29.1
+4758:SkImage_GaneshBase::onMakeSubset\28GrDirectContext*\2c\20SkIRect\20const&\29\20const
+4759:SkImage_Base::onAsyncRescaleAndReadPixelsYUV420\28SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29\20const
+4760:SkImage_Base::onAsLegacyBitmap\28GrDirectContext*\2c\20SkBitmap*\29\20const
+4761:SkImageShader::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::$_1::operator\28\29\28\28anonymous\20namespace\29::MipLevelHelper\20const*\29\20const
+4762:SkImageShader::Make\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkSamplingOptions\20const&\2c\20SkMatrix\20const*\2c\20bool\29
+4763:SkImageInfo::validRowBytes\28unsigned\20long\29\20const
+4764:SkImageInfo::MakeN32Premul\28int\2c\20int\29
+4765:SkImageGenerator::~SkImageGenerator\28\29.1
+4766:SkImageFilters::ColorFilter\28sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+4767:SkImageFilter_Base::getInputBounds\28skif::Mapping\20const&\2c\20skif::DeviceSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::ParameterSpace<SkRect>>\29\20const
+4768:SkImageFilter_Base::getCTMCapability\28\29\20const
+4769:SkImageFilter_Base::filterImage\28skif::Context\20const&\29\20const
+4770:SkImageFilterCache::Get\28\29
+4771:SkImage::withMipmaps\28sk_sp<SkMipmap>\29\20const
+4772:SkImage::peekPixels\28SkPixmap*\29\20const
+4773:SkGradientBaseShader::~SkGradientBaseShader\28\29
+4774:SkGradientBaseShader::AppendGradientFillStages\28SkRasterPipeline*\2c\20SkArenaAlloc*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const*\2c\20float\20const*\2c\20int\29
+4775:SkGlyphRunListPainterCPU::SkGlyphRunListPainterCPU\28SkSurfaceProps\20const&\2c\20SkColorType\2c\20SkColorSpace*\29
+4776:SkGlyph::setImage\28SkArenaAlloc*\2c\20SkScalerContext*\29
+4777:SkGlyph::setDrawable\28SkArenaAlloc*\2c\20SkScalerContext*\29
+4778:SkGlyph::pathIsHairline\28\29\20const
+4779:SkGlyph::mask\28SkPoint\29\20const
+4780:SkGlyph::SkGlyph\28SkGlyph&&\29
+4781:SkGenerateDistanceFieldFromA8Image\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20unsigned\20long\29
+4782:SkGaussFilter::SkGaussFilter\28double\29
+4783:SkFrameHolder::setAlphaAndRequiredFrame\28SkFrame*\29
+4784:SkFrame::fillIn\28SkCodec::FrameInfo*\2c\20bool\29\20const
+4785:SkFontPriv::GetFontBounds\28SkFont\20const&\29
+4786:SkFontMgr_Custom::SkFontMgr_Custom\28SkFontMgr_Custom::SystemFontLoader\20const&\29
+4787:SkFontMgr::matchFamily\28char\20const*\29\20const
+4788:SkFontMgr::makeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20int\29\20const
+4789:SkFontMgr::makeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29\20const
+4790:SkFontDescriptor::SkFontDescriptor\28\29
+4791:SkFont::setupForAsPaths\28SkPaint*\29
+4792:SkFont::setSkewX\28float\29
+4793:SkFont::setLinearMetrics\28bool\29
+4794:SkFont::setEmbolden\28bool\29
+4795:SkFont::operator==\28SkFont\20const&\29\20const
+4796:SkFont::getPaths\28unsigned\20short\20const*\2c\20int\2c\20void\20\28*\29\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29\2c\20void*\29\20const
+4797:SkFlattenable::RegisterFlattenablesIfNeeded\28\29
+4798:SkFlattenable::PrivateInitializer::InitEffects\28\29
+4799:SkFlattenable::NameToFactory\28char\20const*\29
+4800:SkFlattenable::FactoryToName\28sk_sp<SkFlattenable>\20\28*\29\28SkReadBuffer&\29\29
+4801:SkFindQuadExtrema\28float\2c\20float\2c\20float\2c\20float*\29
+4802:SkFindCubicExtrema\28float\2c\20float\2c\20float\2c\20float\2c\20float*\29
+4803:SkFactorySet::~SkFactorySet\28\29
+4804:SkExifMetadata::parseIfd\28unsigned\20int\2c\20bool\2c\20bool\29
+4805:SkEncoder::encodeRows\28int\29
+4806:SkEdgeClipper::clipQuad\28SkPoint\20const*\2c\20SkRect\20const&\29
+4807:SkEdgeClipper::ClipPath\28SkPath\20const&\2c\20SkRect\20const&\2c\20bool\2c\20void\20\28*\29\28SkEdgeClipper*\2c\20bool\2c\20void*\29\2c\20void*\29
+4808:SkEdgeBuilder::buildEdges\28SkPath\20const&\2c\20SkIRect\20const*\29
+4809:SkDynamicMemoryWStream::bytesWritten\28\29\20const
+4810:SkDrawableList::newDrawableSnapshot\28\29
+4811:SkDrawTreatAAStrokeAsHairline\28float\2c\20SkMatrix\20const&\2c\20float*\29
+4812:SkDrawShadowMetrics::GetSpotShadowTransform\28SkPoint3\20const&\2c\20float\2c\20SkMatrix\20const&\2c\20SkPoint3\20const&\2c\20SkRect\20const&\2c\20bool\2c\20SkMatrix*\2c\20float*\29
+4813:SkDrawShadowMetrics::GetLocalBounds\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\2c\20SkMatrix\20const&\2c\20SkRect*\29
+4814:SkDrawBase::drawPaint\28SkPaint\20const&\29\20const
+4815:SkDrawBase::DrawToMask\28SkPath\20const&\2c\20SkIRect\20const&\2c\20SkMaskFilter\20const*\2c\20SkMatrix\20const*\2c\20SkMaskBuilder*\2c\20SkMaskBuilder::CreateMode\2c\20SkStrokeRec::InitStyle\29
+4816:SkDraw::drawSprite\28SkBitmap\20const&\2c\20int\2c\20int\2c\20SkPaint\20const&\29\20const
+4817:SkDiscretePathEffectImpl::flatten\28SkWriteBuffer&\29\20const
+4818:SkDiscretePathEffect::Make\28float\2c\20float\2c\20unsigned\20int\29
+4819:SkDevice::getRelativeTransform\28SkDevice\20const&\29\20const
+4820:SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+4821:SkDevice::drawDrawable\28SkCanvas*\2c\20SkDrawable*\2c\20SkMatrix\20const*\29
+4822:SkDevice::drawDevice\28SkDevice*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+4823:SkDevice::drawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+4824:SkDevice::convertGlyphRunListToSlug\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+4825:SkDescriptor::findEntry\28unsigned\20int\2c\20unsigned\20int*\29\20const
+4826:SkDescriptor::computeChecksum\28\29
+4827:SkDescriptor::addEntry\28unsigned\20int\2c\20unsigned\20long\2c\20void\20const*\29
+4828:SkDeque::Iter::next\28\29
+4829:SkDeque::Iter::Iter\28SkDeque\20const&\2c\20SkDeque::Iter::IterStart\29
+4830:SkData::MakeFromStream\28SkStream*\2c\20unsigned\20long\29
+4831:SkDashPath::InternalFilter\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20float\20const*\2c\20int\2c\20float\2c\20int\2c\20float\2c\20float\2c\20SkDashPath::StrokeRecApplication\29
+4832:SkDashPath::CalcDashParameters\28float\2c\20float\20const*\2c\20int\2c\20float*\2c\20int*\2c\20float*\2c\20float*\29
+4833:SkDRect::setBounds\28SkDQuad\20const&\2c\20SkDQuad\20const&\2c\20double\2c\20double\29
+4834:SkDRect::setBounds\28SkDCubic\20const&\2c\20SkDCubic\20const&\2c\20double\2c\20double\29
+4835:SkDRect::setBounds\28SkDConic\20const&\2c\20SkDConic\20const&\2c\20double\2c\20double\29
+4836:SkDQuad::subDivide\28double\2c\20double\29\20const
+4837:SkDQuad::monotonicInY\28\29\20const
+4838:SkDQuad::isLinear\28int\2c\20int\29\20const
+4839:SkDQuad::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+4840:SkDPoint::approximatelyDEqual\28SkDPoint\20const&\29\20const
+4841:SkDCurveSweep::setCurveHullSweep\28SkPath::Verb\29
+4842:SkDCurve::nearPoint\28SkPath::Verb\2c\20SkDPoint\20const&\2c\20SkDPoint\20const&\29\20const
+4843:SkDCubic::monotonicInX\28\29\20const
+4844:SkDCubic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+4845:SkDCubic::hullIntersects\28SkDPoint\20const*\2c\20int\2c\20bool*\29\20const
+4846:SkDConic::subDivide\28double\2c\20double\29\20const
+4847:SkCubics::RootsReal\28double\2c\20double\2c\20double\2c\20double\2c\20double*\29
+4848:SkCubicEdge::setCubicWithoutUpdate\28SkPoint\20const*\2c\20int\2c\20bool\29
+4849:SkCubicClipper::ChopMonoAtY\28SkPoint\20const*\2c\20float\2c\20float*\29
+4850:SkCreateRasterPipelineBlitter\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkRasterPipeline\20const&\2c\20bool\2c\20SkArenaAlloc*\2c\20sk_sp<SkShader>\29
+4851:SkCreateRasterPipelineBlitter\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkMatrix\20const&\2c\20SkArenaAlloc*\2c\20sk_sp<SkShader>\2c\20SkSurfaceProps\20const&\29
+4852:SkContourMeasureIter::~SkContourMeasureIter\28\29
+4853:SkContourMeasureIter::SkContourMeasureIter\28SkPath\20const&\2c\20bool\2c\20float\29
+4854:SkContourMeasure::length\28\29\20const
+4855:SkContourMeasure::isClosed\28\29\20const
+4856:SkContourMeasure::getSegment\28float\2c\20float\2c\20SkPath*\2c\20bool\29\20const
+4857:SkConic::BuildUnitArc\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkRotationDirection\2c\20SkMatrix\20const*\2c\20SkConic*\29
+4858:SkComputeRadialSteps\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20float*\2c\20float*\2c\20int*\29
+4859:SkCompressedDataSize\28SkTextureCompressionType\2c\20SkISize\2c\20skia_private::TArray<unsigned\20long\2c\20true>*\2c\20bool\29
+4860:SkColorTypeValidateAlphaType\28SkColorType\2c\20SkAlphaType\2c\20SkAlphaType*\29
+4861:SkColorSpaceSingletonFactory::Make\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+4862:SkColorSpace::toProfile\28skcms_ICCProfile*\29\20const
+4863:SkColorSpace::makeLinearGamma\28\29\20const
+4864:SkColorSpace::isSRGB\28\29\20const
+4865:SkColorMatrix_RGB2YUV\28SkYUVColorSpace\2c\20float*\29
+4866:SkColorFilterShader::SkColorFilterShader\28sk_sp<SkShader>\2c\20float\2c\20sk_sp<SkColorFilter>\29
+4867:SkColorFilter::filterColor4f\28SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkColorSpace*\2c\20SkColorSpace*\29\20const
+4868:SkColor4fXformer::SkColor4fXformer\28SkGradientBaseShader\20const*\2c\20SkColorSpace*\2c\20bool\29
+4869:SkCoincidentSpans::extend\28SkOpPtT\20const*\2c\20SkOpPtT\20const*\2c\20SkOpPtT\20const*\2c\20SkOpPtT\20const*\29
+4870:SkCodecs::get_decoders_for_editing\28\29
+4871:SkCodec::outputScanline\28int\29\20const
+4872:SkCodec::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+4873:SkCodec::initializeColorXform\28SkImageInfo\20const&\2c\20SkEncodedInfo::Alpha\2c\20bool\29
+4874:SkCodec::MakeFromStream\28std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20SkCodec::Result*\2c\20SkPngChunkReader*\2c\20SkCodec::SelectionPolicy\29
+4875:SkChopQuadAtMaxCurvature\28SkPoint\20const*\2c\20SkPoint*\29
+4876:SkChopQuadAtHalf\28SkPoint\20const*\2c\20SkPoint*\29
+4877:SkChopMonoCubicAtX\28SkPoint\20const*\2c\20float\2c\20SkPoint*\29
+4878:SkChopCubicAtInflections\28SkPoint\20const*\2c\20SkPoint*\29
+4879:SkCharToGlyphCache::findGlyphIndex\28int\29\20const
+4880:SkCanvasPriv::WriteLattice\28void*\2c\20SkCanvas::Lattice\20const&\29
+4881:SkCanvasPriv::ReadLattice\28SkReadBuffer&\2c\20SkCanvas::Lattice*\29
+4882:SkCanvasPriv::ImageToColorFilter\28SkPaint*\29
+4883:SkCanvasPriv::GetDstClipAndMatrixCounts\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20int*\2c\20int*\29
+4884:SkCanvas::~SkCanvas\28\29
+4885:SkCanvas::wouldOverwriteEntireSurface\28SkRect\20const*\2c\20SkPaint\20const*\2c\20SkCanvas::ShaderOverrideOpacity\29\20const
+4886:SkCanvas::skew\28float\2c\20float\29
+4887:SkCanvas::only_axis_aligned_saveBehind\28SkRect\20const*\29
+4888:SkCanvas::internalDrawPaint\28SkPaint\20const&\29
+4889:SkCanvas::internalDrawDeviceWithFilter\28SkDevice*\2c\20SkDevice*\2c\20SkImageFilter\20const*\2c\20SkPaint\20const&\2c\20SkCanvas::DeviceCompatibleWithFilter\2c\20float\2c\20bool\29
+4890:SkCanvas::getDeviceClipBounds\28\29\20const
+4891:SkCanvas::experimental_DrawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+4892:SkCanvas::drawVertices\28sk_sp<SkVertices>\20const&\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+4893:SkCanvas::drawSlug\28sktext::gpu::Slug\20const*\29
+4894:SkCanvas::drawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+4895:SkCanvas::drawLine\28float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+4896:SkCanvas::drawImageNine\28SkImage\20const*\2c\20SkIRect\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+4897:SkCanvas::drawClippedToSaveBehind\28SkPaint\20const&\29
+4898:SkCanvas::drawAnnotation\28SkRect\20const&\2c\20char\20const*\2c\20SkData*\29
+4899:SkCanvas::didTranslate\28float\2c\20float\29
+4900:SkCanvas::clipShader\28sk_sp<SkShader>\2c\20SkClipOp\29
+4901:SkCanvas::clipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+4902:SkCanvas::SkCanvas\28sk_sp<SkDevice>\29
+4903:SkCanvas::ImageSetEntry::ImageSetEntry\28\29
+4904:SkCachedData::SkCachedData\28void*\2c\20unsigned\20long\29
+4905:SkCachedData::SkCachedData\28unsigned\20long\2c\20SkDiscardableMemory*\29
+4906:SkBulkGlyphMetricsAndPaths::glyphs\28SkSpan<unsigned\20short\20const>\29
+4907:SkBmpStandardCodec::decodeIcoMask\28SkStream*\2c\20SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\29
+4908:SkBmpMaskCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+4909:SkBmpCodec::SkBmpCodec\28SkEncodedInfo&&\2c\20std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20unsigned\20short\2c\20SkCodec::SkScanlineOrder\29
+4910:SkBmpBaseCodec::SkBmpBaseCodec\28SkEncodedInfo&&\2c\20std::__2::unique_ptr<SkStream\2c\20std::__2::default_delete<SkStream>>\2c\20unsigned\20short\2c\20SkCodec::SkScanlineOrder\29
+4911:SkBlurMask::ConvertRadiusToSigma\28float\29
+4912:SkBlurMask::ComputeBlurredScanline\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20unsigned\20int\2c\20float\29
+4913:SkBlurMask::BlurRect\28float\2c\20SkMaskBuilder*\2c\20SkRect\20const&\2c\20SkBlurStyle\2c\20SkIPoint*\2c\20SkMaskBuilder::CreateMode\29
+4914:SkBlitter::blitV\28int\2c\20int\2c\20int\2c\20unsigned\20char\29
+4915:SkBlitter::Choose\28SkPixmap\20const&\2c\20SkMatrix\20const&\2c\20SkPaint\20const&\2c\20SkArenaAlloc*\2c\20bool\2c\20sk_sp<SkShader>\2c\20SkSurfaceProps\20const&\29
+4916:SkBlitter::ChooseSprite\28SkPixmap\20const&\2c\20SkPaint\20const&\2c\20SkPixmap\20const&\2c\20int\2c\20int\2c\20SkArenaAlloc*\2c\20sk_sp<SkShader>\29
+4917:SkBlendShader::~SkBlendShader\28\29.1
+4918:SkBlendShader::~SkBlendShader\28\29
+4919:SkBitmapImageGetPixelRef\28SkImage\20const*\29
+4920:SkBitmapDevice::SkBitmapDevice\28SkBitmap\20const&\2c\20SkSurfaceProps\20const&\2c\20void*\29
+4921:SkBitmapDevice::Create\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\2c\20SkRasterHandleAllocator*\29
+4922:SkBitmapCache::Rec::install\28SkBitmap*\29
+4923:SkBitmapCache::Rec::diagnostic_only_getDiscardable\28\29\20const
+4924:SkBitmapCache::Find\28SkBitmapCacheDesc\20const&\2c\20SkBitmap*\29
+4925:SkBitmapCache::Alloc\28SkBitmapCacheDesc\20const&\2c\20SkImageInfo\20const&\2c\20SkPixmap*\29
+4926:SkBitmapCache::Add\28std::__2::unique_ptr<SkBitmapCache::Rec\2c\20SkBitmapCache::RecDeleter>\2c\20SkBitmap*\29
+4927:SkBitmap::setPixelRef\28sk_sp<SkPixelRef>\2c\20int\2c\20int\29
+4928:SkBitmap::setAlphaType\28SkAlphaType\29
+4929:SkBitmap::reset\28\29
+4930:SkBitmap::getAddr\28int\2c\20int\29\20const
+4931:SkBitmap::allocPixels\28SkImageInfo\20const&\2c\20unsigned\20long\29::$_0::operator\28\29\28\29\20const
+4932:SkBitmap::HeapAllocator::allocPixelRef\28SkBitmap*\29
+4933:SkBinaryWriteBuffer::writeFlattenable\28SkFlattenable\20const*\29
+4934:SkBinaryWriteBuffer::writeColor4f\28SkRGBA4f<\28SkAlphaType\293>\20const&\29
+4935:SkBigPicture::SkBigPicture\28SkRect\20const&\2c\20sk_sp<SkRecord>\2c\20std::__2::unique_ptr<SkBigPicture::SnapshotArray\2c\20std::__2::default_delete<SkBigPicture::SnapshotArray>>\2c\20sk_sp<SkBBoxHierarchy>\2c\20unsigned\20long\29
+4936:SkBezierQuad::IntersectWithHorizontalLine\28SkSpan<SkPoint\20const>\2c\20float\2c\20float*\29
+4937:SkBezierCubic::IntersectWithHorizontalLine\28SkSpan<SkPoint\20const>\2c\20float\2c\20float*\29
+4938:SkBasicEdgeBuilder::~SkBasicEdgeBuilder\28\29
+4939:SkBaseShadowTessellator::finishPathPolygon\28\29
+4940:SkBaseShadowTessellator::computeConvexShadow\28float\2c\20float\2c\20bool\29
+4941:SkBaseShadowTessellator::computeConcaveShadow\28float\2c\20float\29
+4942:SkBaseShadowTessellator::clipUmbraPoint\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint*\29
+4943:SkBaseShadowTessellator::addInnerPoint\28SkPoint\20const&\2c\20unsigned\20int\2c\20SkTDArray<SkPoint>\20const&\2c\20int*\29
+4944:SkBaseShadowTessellator::addEdge\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20int\2c\20SkTDArray<SkPoint>\20const&\2c\20bool\2c\20bool\29
+4945:SkBaseShadowTessellator::addArc\28SkPoint\20const&\2c\20float\2c\20bool\29
+4946:SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint\28\29
+4947:SkAutoCanvasMatrixPaint::SkAutoCanvasMatrixPaint\28SkCanvas*\2c\20SkMatrix\20const*\2c\20SkPaint\20const*\2c\20SkRect\20const&\29
+4948:SkAndroidCodecAdapter::~SkAndroidCodecAdapter\28\29
+4949:SkAndroidCodecAdapter::SkAndroidCodecAdapter\28SkCodec*\29
+4950:SkAndroidCodec::~SkAndroidCodec\28\29
+4951:SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29
+4952:SkAndroidCodec::SkAndroidCodec\28SkCodec*\29
+4953:SkAnalyticEdge::update\28int\2c\20bool\29
+4954:SkAnalyticEdge::updateLine\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+4955:SkAnalyticEdge::setLine\28SkPoint\20const&\2c\20SkPoint\20const&\29
+4956:SkAAClip::operator=\28SkAAClip\20const&\29
+4957:SkAAClip::op\28SkIRect\20const&\2c\20SkClipOp\29
+4958:SkAAClip::Builder::flushRow\28bool\29
+4959:SkAAClip::Builder::finish\28SkAAClip*\29
+4960:SkAAClip::Builder::Blitter::~Blitter\28\29
+4961:SkAAClip::Builder::Blitter::blitAntiH\28int\2c\20int\2c\20unsigned\20char\20const*\2c\20short\20const*\29
+4962:Sk2DPathEffect::onFilterPath\28SkPath*\2c\20SkPath\20const&\2c\20SkStrokeRec*\2c\20SkRect\20const*\2c\20SkMatrix\20const&\29\20const
+4963:SimpleImageInfo*\20emscripten::internal::raw_constructor<SimpleImageInfo>\28\29
+4964:SimpleFontStyle*\20emscripten::internal::MemberAccess<SimpleStrutStyle\2c\20SimpleFontStyle>::getWire<SimpleStrutStyle>\28SimpleFontStyle\20SimpleStrutStyle::*\20const&\2c\20SimpleStrutStyle\20const&\29
+4965:SharedGenerator::isTextureGenerator\28\29
+4966:RunBasedAdditiveBlitter::~RunBasedAdditiveBlitter\28\29.1
+4967:RgnOper::addSpan\28int\2c\20int\20const*\2c\20int\20const*\29
+4968:PorterDuffXferProcessor::onIsEqual\28GrXferProcessor\20const&\29\20const
+4969:PathSegment::init\28\29
+4970:PathAddVerbsPointsWeights\28SkPath&\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+4971:ParseSingleImage
+4972:ParseHeadersInternal
+4973:PS_Conv_ASCIIHexDecode
+4974:Op\28SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp\2c\20SkPath*\29
+4975:OpAsWinding::markReverse\28Contour*\2c\20Contour*\29
+4976:OpAsWinding::getDirection\28Contour&\29
+4977:OpAsWinding::checkContainerChildren\28Contour*\2c\20Contour*\29
+4978:OffsetEdge::computeCrossingDistance\28OffsetEdge\20const*\29
+4979:OT::sbix::accelerator_t::get_png_extents\28hb_font_t*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20bool\29\20const
+4980:OT::sbix::accelerator_t::choose_strike\28hb_font_t*\29\20const
+4981:OT::hmtxvmtx<OT::vmtx\2c\20OT::vhea\2c\20OT::VVAR>::accelerator_t::accelerator_t\28hb_face_t*\29
+4982:OT::hmtxvmtx<OT::hmtx\2c\20OT::hhea\2c\20OT::HVAR>::accelerator_t::get_advance_with_var_unscaled\28unsigned\20int\2c\20hb_font_t*\2c\20float*\29\20const
+4983:OT::hmtxvmtx<OT::hmtx\2c\20OT::hhea\2c\20OT::HVAR>::accelerator_t::accelerator_t\28hb_face_t*\29
+4984:OT::hb_ot_layout_lookup_accelerator_t*\20OT::hb_ot_layout_lookup_accelerator_t::create<OT::Layout::GPOS_impl::PosLookup>\28OT::Layout::GPOS_impl::PosLookup\20const&\29
+4985:OT::hb_kern_machine_t<hb_ot_shape_fallback_kern_driver_t>::kern\28hb_font_t*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20bool\29\20const
+4986:OT::hb_accelerate_subtables_context_t::return_t\20OT::Context::dispatch<OT::hb_accelerate_subtables_context_t>\28OT::hb_accelerate_subtables_context_t*\29\20const
+4987:OT::hb_accelerate_subtables_context_t::return_t\20OT::ChainContext::dispatch<OT::hb_accelerate_subtables_context_t>\28OT::hb_accelerate_subtables_context_t*\29\20const
+4988:OT::glyf_accelerator_t::get_extents\28hb_font_t*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\29\20const
+4989:OT::glyf_accelerator_t::get_advance_with_var_unscaled\28hb_font_t*\2c\20unsigned\20int\2c\20bool\29\20const
+4990:OT::cmap::accelerator_t::get_variation_glyph\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20hb_cache_t<21u\2c\2016u\2c\208u\2c\20true>*\29\20const
+4991:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\2c\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::accelerator_templ_t\28hb_face_t*\29
+4992:OT::cff2::accelerator_templ_t<CFF::cff2_private_dict_opset_t\2c\20CFF::cff2_private_dict_values_base_t<CFF::dict_val_t>>::_fini\28\29
+4993:OT::cff1::lookup_expert_subset_charset_for_sid\28unsigned\20int\29
+4994:OT::cff1::lookup_expert_charset_for_sid\28unsigned\20int\29
+4995:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\2c\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::~accelerator_templ_t\28\29
+4996:OT::cff1::accelerator_templ_t<CFF::cff1_private_dict_opset_t\2c\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>>::_fini\28\29
+4997:OT::TupleVariationData::unpack_points\28OT::IntType<unsigned\20char\2c\201u>\20const*&\2c\20hb_vector_t<unsigned\20int\2c\20false>&\2c\20OT::IntType<unsigned\20char\2c\201u>\20const*\29
+4998:OT::SBIXStrike::get_glyph_blob\28unsigned\20int\2c\20hb_blob_t*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20unsigned\20int\2c\20unsigned\20int*\29\20const
+4999:OT::RuleSet<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5000:OT::RuleSet<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ContextApplyLookupContext\20const&\29\20const
+5001:OT::RecordListOf<OT::Script>::sanitize\28hb_sanitize_context_t*\29\20const
+5002:OT::RecordListOf<OT::Feature>::sanitize\28hb_sanitize_context_t*\29\20const
+5003:OT::PaintTranslate::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5004:OT::PaintSolid::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5005:OT::PaintSkewAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5006:OT::PaintSkew::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5007:OT::PaintScaleUniformAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5008:OT::PaintScaleUniform::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5009:OT::PaintScaleAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5010:OT::PaintScale::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5011:OT::PaintRotateAroundCenter::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5012:OT::PaintLinearGradient<OT::Variable>::sanitize\28hb_sanitize_context_t*\29\20const
+5013:OT::PaintLinearGradient<OT::NoVariable>::sanitize\28hb_sanitize_context_t*\29\20const
+5014:OT::Lookup::serialize\28hb_serialize_context_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+5015:OT::Layout::propagate_attachment_offsets\28hb_glyph_position_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20hb_direction_t\2c\20unsigned\20int\29
+5016:OT::Layout::GSUB_impl::MultipleSubstFormat1_2<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5017:OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\29\20const
+5018:OT::Layout::GPOS_impl::reverse_cursive_minor_offset\28hb_glyph_position_t*\2c\20unsigned\20int\2c\20hb_direction_t\2c\20unsigned\20int\29
+5019:OT::Layout::GPOS_impl::MarkRecord::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+5020:OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5021:OT::Layout::GPOS_impl::AnchorMatrix::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int\29\20const
+5022:OT::IndexSubtableRecord::get_image_data\28unsigned\20int\2c\20void\20const*\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20unsigned\20int*\29\20const
+5023:OT::FeatureVariationRecord::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+5024:OT::FeatureParams::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int\29\20const
+5025:OT::ContextFormat3::sanitize\28hb_sanitize_context_t*\29\20const
+5026:OT::ContextFormat2_5<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5027:OT::ContextFormat2_5<OT::Layout::SmallTypes>::_apply\28OT::hb_ot_apply_context_t*\2c\20bool\29\20const
+5028:OT::ContextFormat1_4<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5029:OT::ColorStop::get_color_stop\28OT::hb_paint_context_t*\2c\20hb_color_stop_t*\2c\20unsigned\20int\2c\20OT::VarStoreInstancer\20const&\29\20const
+5030:OT::ColorLine<OT::NoVariable>::static_get_extend\28hb_color_line_t*\2c\20void*\2c\20void*\29
+5031:OT::ChainRuleSet<OT::Layout::SmallTypes>::would_apply\28OT::hb_would_apply_context_t*\2c\20OT::ChainContextApplyLookupContext\20const&\29\20const
+5032:OT::ChainRuleSet<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5033:OT::ChainRuleSet<OT::Layout::SmallTypes>::apply\28OT::hb_ot_apply_context_t*\2c\20OT::ChainContextApplyLookupContext\20const&\29\20const
+5034:OT::ChainContextFormat3::sanitize\28hb_sanitize_context_t*\29\20const
+5035:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5036:OT::ChainContextFormat2_5<OT::Layout::SmallTypes>::_apply\28OT::hb_ot_apply_context_t*\2c\20bool\29\20const
+5037:OT::ChainContextFormat1_4<OT::Layout::SmallTypes>::sanitize\28hb_sanitize_context_t*\29\20const
+5038:OT::CBDT::accelerator_t::get_extents\28hb_font_t*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20bool\29\20const
+5039:OT::Affine2x3::paint_glyph\28OT::hb_paint_context_t*\2c\20unsigned\20int\29\20const
+5040:MakeOnScreenGLSurface\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int\29
+5041:Load_SBit_Png
+5042:LineCubicIntersections::intersectRay\28double*\29
+5043:LineCubicIntersections::VerticalIntersect\28SkDCubic\20const&\2c\20double\2c\20double*\29
+5044:LineCubicIntersections::HorizontalIntersect\28SkDCubic\20const&\2c\20double\2c\20double*\29
+5045:Launch
+5046:JpegDecoderMgr::returnFalse\28char\20const*\29
+5047:JpegDecoderMgr::getEncodedColor\28SkEncodedInfo::Color*\29
+5048:JSObjectFromLineMetrics\28skia::textlayout::LineMetrics&\29
+5049:JSObjectFromGlyphInfo\28skia::textlayout::Paragraph::GlyphInfo&\29
+5050:Ins_DELTAP
+5051:HandleCoincidence\28SkOpContourHead*\2c\20SkOpCoincidence*\29
+5052:GrWritePixelsTask::~GrWritePixelsTask\28\29
+5053:GrWaitRenderTask::~GrWaitRenderTask\28\29
+5054:GrVertexBufferAllocPool::makeSpace\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+5055:GrVertexBufferAllocPool::makeSpaceAtLeast\28unsigned\20long\2c\20int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+5056:GrTriangulator::polysToTriangles\28GrTriangulator::Poly*\2c\20SkPathFillType\2c\20skgpu::VertexWriter\29\20const
+5057:GrTriangulator::polysToTriangles\28GrTriangulator::Poly*\2c\20GrEagerVertexAllocator*\29\20const
+5058:GrTriangulator::mergeEdgesBelow\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+5059:GrTriangulator::mergeEdgesAbove\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::EdgeList*\2c\20GrTriangulator::Vertex**\2c\20GrTriangulator::Comparator\20const&\29\20const
+5060:GrTriangulator::makeSortedVertex\28SkPoint\20const&\2c\20unsigned\20char\2c\20GrTriangulator::VertexList*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::Comparator\20const&\29\20const
+5061:GrTriangulator::makeEdge\28GrTriangulator::Vertex*\2c\20GrTriangulator::Vertex*\2c\20GrTriangulator::EdgeType\2c\20GrTriangulator::Comparator\20const&\29
+5062:GrTriangulator::computeBisector\28GrTriangulator::Edge*\2c\20GrTriangulator::Edge*\2c\20GrTriangulator::Vertex*\29\20const
+5063:GrTriangulator::appendQuadraticToContour\28SkPoint\20const*\2c\20float\2c\20GrTriangulator::VertexList*\29\20const
+5064:GrTriangulator::SortMesh\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\29
+5065:GrTriangulator::FindEnclosingEdges\28GrTriangulator::Vertex\20const&\2c\20GrTriangulator::EdgeList\20const&\2c\20GrTriangulator::Edge**\2c\20GrTriangulator::Edge**\29
+5066:GrTriangulator::Edge::intersect\28GrTriangulator::Edge\20const&\2c\20SkPoint*\2c\20unsigned\20char*\29\20const
+5067:GrTransferFromRenderTask::~GrTransferFromRenderTask\28\29
+5068:GrThreadSafeCache::~GrThreadSafeCache\28\29
+5069:GrThreadSafeCache::findVertsWithData\28skgpu::UniqueKey\20const&\29
+5070:GrThreadSafeCache::addVertsWithData\28skgpu::UniqueKey\20const&\2c\20sk_sp<GrThreadSafeCache::VertexData>\2c\20bool\20\28*\29\28SkData*\2c\20SkData*\29\29
+5071:GrThreadSafeCache::Entry::set\28skgpu::UniqueKey\20const&\2c\20sk_sp<GrThreadSafeCache::VertexData>\29
+5072:GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29
+5073:GrTextureResolveRenderTask::~GrTextureResolveRenderTask\28\29
+5074:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\28sk_sp<GrSurface>\2c\20GrSurfaceProxy::UseAllocator\2c\20GrDDLProvider\29
+5075:GrTextureRenderTargetProxy::GrTextureRenderTargetProxy\28GrCaps\20const&\2c\20std::__2::function<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>&&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20int\2c\20skgpu::Mipmapped\2c\20GrMipmapStatus\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\2c\20GrDDLProvider\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5076:GrTextureProxyPriv::setDeferredUploader\28std::__2::unique_ptr<GrDeferredProxyUploader\2c\20std::__2::default_delete<GrDeferredProxyUploader>>\29
+5077:GrTextureProxy::setUniqueKey\28GrProxyProvider*\2c\20skgpu::UniqueKey\20const&\29
+5078:GrTextureProxy::clearUniqueKey\28\29
+5079:GrTextureProxy::ProxiesAreCompatibleAsDynamicState\28GrSurfaceProxy\20const*\2c\20GrSurfaceProxy\20const*\29
+5080:GrTextureProxy::GrTextureProxy\28sk_sp<GrSurface>\2c\20GrSurfaceProxy::UseAllocator\2c\20GrDDLProvider\29.1
+5081:GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29::$_1::operator\28\29\28int\2c\20GrSamplerState::WrapMode\2c\20GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29::Span\2c\20GrTextureEffect::Sampling::Sampling\28GrSurfaceProxy\20const&\2c\20GrSamplerState\2c\20SkRect\20const&\2c\20SkRect\20const*\2c\20float\20const*\2c\20bool\2c\20GrCaps\20const&\2c\20SkPoint\29::Span\2c\20float\29\20const
+5082:GrTextureEffect::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::$_2::operator\28\29\28GrTextureEffect::ShaderMode\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29\20const
+5083:GrTexture::markMipmapsDirty\28\29
+5084:GrTexture::computeScratchKey\28skgpu::ScratchKey*\29\20const
+5085:GrTDeferredProxyUploader<skia_private::TArray<skgpu::ganesh::ClipStack::Element\2c\20true>>::~GrTDeferredProxyUploader\28\29
+5086:GrSurfaceProxyPriv::exactify\28bool\29
+5087:GrSurfaceProxy::GrSurfaceProxy\28GrBackendFormat\20const&\2c\20SkISize\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrInternalSurfaceFlags\2c\20GrSurfaceProxy::UseAllocator\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5088:GrStyledShape::~GrStyledShape\28\29
+5089:GrStyledShape::setInheritedKey\28GrStyledShape\20const&\2c\20GrStyle::Apply\2c\20float\29
+5090:GrStyledShape::asRRect\28SkRRect*\2c\20SkPathDirection*\2c\20unsigned\20int*\2c\20bool*\29\20const
+5091:GrStyledShape::GrStyledShape\28SkPath\20const&\2c\20SkPaint\20const&\2c\20GrStyledShape::DoSimplify\29
+5092:GrStyle::~GrStyle\28\29
+5093:GrStyle::applyToPath\28SkPath*\2c\20SkStrokeRec::InitStyle*\2c\20SkPath\20const&\2c\20float\29\20const
+5094:GrStyle::applyPathEffect\28SkPath*\2c\20SkStrokeRec*\2c\20SkPath\20const&\29\20const
+5095:GrStencilSettings::SetClipBitSettings\28bool\29
+5096:GrStagingBufferManager::detachBuffers\28\29
+5097:GrSkSLFP::Impl::emitCode\28GrFragmentProcessor::ProgramImpl::EmitArgs&\29::FPCallbacks::defineStruct\28char\20const*\29
+5098:GrShape::simplify\28unsigned\20int\29
+5099:GrShape::segmentMask\28\29\20const
+5100:GrShape::conservativeContains\28SkRect\20const&\29\20const
+5101:GrShape::closed\28\29\20const
+5102:GrSWMaskHelper::toTextureView\28GrRecordingContext*\2c\20SkBackingFit\29
+5103:GrSWMaskHelper::drawShape\28GrStyledShape\20const&\2c\20SkMatrix\20const&\2c\20GrAA\2c\20unsigned\20char\29
+5104:GrSWMaskHelper::drawShape\28GrShape\20const&\2c\20SkMatrix\20const&\2c\20GrAA\2c\20unsigned\20char\29
+5105:GrResourceProvider::writePixels\28sk_sp<GrTexture>\2c\20GrColorType\2c\20SkISize\2c\20GrMipLevel\20const*\2c\20int\29\20const
+5106:GrResourceProvider::wrapBackendSemaphore\28GrBackendSemaphore\20const&\2c\20GrSemaphoreWrapType\2c\20GrWrapOwnership\29
+5107:GrResourceProvider::prepareLevels\28GrBackendFormat\20const&\2c\20GrColorType\2c\20SkISize\2c\20GrMipLevel\20const*\2c\20int\2c\20skia_private::AutoSTArray<14\2c\20GrMipLevel>*\2c\20skia_private::AutoSTArray<14\2c\20std::__2::unique_ptr<char\20\5b\5d\2c\20std::__2::default_delete<char\20\5b\5d>>>*\29\20const
+5108:GrResourceProvider::getExactScratch\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5109:GrResourceProvider::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5110:GrResourceProvider::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20GrColorType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrMipLevel\20const*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5111:GrResourceProvider::createApproxTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5112:GrResourceCache::~GrResourceCache\28\29
+5113:GrResourceCache::removeResource\28GrGpuResource*\29
+5114:GrResourceCache::processFreedGpuResources\28\29
+5115:GrResourceCache::insertResource\28GrGpuResource*\29
+5116:GrResourceCache::didChangeBudgetStatus\28GrGpuResource*\29
+5117:GrResourceAllocator::~GrResourceAllocator\28\29
+5118:GrResourceAllocator::planAssignment\28\29
+5119:GrResourceAllocator::expire\28unsigned\20int\29
+5120:GrRenderTask::makeSkippable\28\29
+5121:GrRenderTask::isInstantiated\28\29\20const
+5122:GrRenderTarget::GrRenderTarget\28GrGpu*\2c\20SkISize\20const&\2c\20int\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\2c\20sk_sp<GrAttachment>\29
+5123:GrRecordingContextPriv::createDevice\28skgpu::Budgeted\2c\20SkImageInfo\20const&\2c\20SkBackingFit\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrSurfaceOrigin\2c\20SkSurfaceProps\20const&\2c\20skgpu::ganesh::Device::InitContents\29
+5124:GrRecordingContext::init\28\29
+5125:GrRRectEffect::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20GrClipEdgeType\2c\20SkRRect\20const&\2c\20GrShaderCaps\20const&\29
+5126:GrQuadUtils::TessellationHelper::reset\28GrQuad\20const&\2c\20GrQuad\20const*\29
+5127:GrQuadUtils::TessellationHelper::outset\28skvx::Vec<4\2c\20float>\20const&\2c\20GrQuad*\2c\20GrQuad*\29
+5128:GrQuadUtils::TessellationHelper::adjustDegenerateVertices\28skvx::Vec<4\2c\20float>\20const&\2c\20GrQuadUtils::TessellationHelper::Vertices*\29
+5129:GrQuadUtils::TessellationHelper::OutsetRequest::reset\28GrQuadUtils::TessellationHelper::EdgeVectors\20const&\2c\20GrQuad::Type\2c\20skvx::Vec<4\2c\20float>\20const&\29
+5130:GrQuadUtils::TessellationHelper::EdgeVectors::reset\28skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20skvx::Vec<4\2c\20float>\20const&\2c\20GrQuad::Type\29
+5131:GrQuadUtils::ClipToW0\28DrawQuad*\2c\20DrawQuad*\29
+5132:GrQuad::bounds\28\29\20const
+5133:GrProxyProvider::~GrProxyProvider\28\29
+5134:GrProxyProvider::wrapBackendTexture\28GrBackendTexture\20const&\2c\20GrWrapOwnership\2c\20GrWrapCacheable\2c\20GrIOType\2c\20sk_sp<skgpu::RefCntedCallback>\29
+5135:GrProxyProvider::removeUniqueKeyFromProxy\28GrTextureProxy*\29
+5136:GrProxyProvider::processInvalidUniqueKeyImpl\28skgpu::UniqueKey\20const&\2c\20GrTextureProxy*\2c\20GrProxyProvider::InvalidateGPUResource\2c\20GrProxyProvider::RemoveTableEntry\29
+5137:GrProxyProvider::createLazyProxy\28std::__2::function<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>&&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20skgpu::Mipmapped\2c\20GrMipmapStatus\2c\20GrInternalSurfaceFlags\2c\20SkBackingFit\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20GrSurfaceProxy::UseAllocator\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5138:GrProxyProvider::contextID\28\29\20const
+5139:GrProxyProvider::adoptUniqueKeyFromSurface\28GrTextureProxy*\2c\20GrSurface\20const*\29
+5140:GrPixmapBase<void\2c\20GrPixmap>::clip\28SkISize\2c\20SkIPoint*\29
+5141:GrPixmap::GrPixmap\28GrImageInfo\2c\20sk_sp<SkData>\2c\20unsigned\20long\29
+5142:GrPipeline::GrPipeline\28GrPipeline::InitArgs\20const&\2c\20sk_sp<GrXferProcessor\20const>\2c\20GrAppliedHardClip\20const&\29
+5143:GrPersistentCacheUtils::GetType\28SkReadBuffer*\29
+5144:GrPathUtils::QuadUVMatrix::set\28SkPoint\20const*\29
+5145:GrPathTessellationShader::MakeStencilOnlyPipeline\28GrTessellationShader::ProgramArgs\20const&\2c\20GrAAType\2c\20GrAppliedHardClip\20const&\2c\20GrPipeline::InputFlags\29
+5146:GrPaint::setCoverageSetOpXPFactory\28SkRegion::Op\2c\20bool\29
+5147:GrOvalOpFactory::MakeOvalOp\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20GrStyle\20const&\2c\20GrShaderCaps\20const*\29
+5148:GrOpsRenderPass::drawIndexed\28int\2c\20int\2c\20unsigned\20short\2c\20unsigned\20short\2c\20int\29
+5149:GrOpsRenderPass::drawIndexedInstanced\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+5150:GrOpsRenderPass::drawIndexPattern\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+5151:GrOpFlushState::reset\28\29
+5152:GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp\28GrOp\20const*\2c\20SkRect\20const&\2c\20GrPipeline\20const*\2c\20GrUserStencilSettings\20const*\29
+5153:GrOpFlushState::addASAPUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\29
+5154:GrOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+5155:GrOp::combineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+5156:GrOnFlushResourceProvider::instantiateProxy\28GrSurfaceProxy*\29
+5157:GrMeshDrawTarget::allocMesh\28\29
+5158:GrMeshDrawOp::PatternHelper::init\28GrMeshDrawTarget*\2c\20GrPrimitiveType\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>\2c\20int\2c\20int\2c\20int\2c\20int\29
+5159:GrMeshDrawOp::CombinedQuadCountWillOverflow\28GrAAType\2c\20bool\2c\20int\29
+5160:GrMemoryPool::allocate\28unsigned\20long\29
+5161:GrMakeUniqueKeyInvalidationListener\28skgpu::UniqueKey*\2c\20unsigned\20int\29::Listener::changed\28\29
+5162:GrIndexBufferAllocPool::makeSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+5163:GrIndexBufferAllocPool::makeSpaceAtLeast\28int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+5164:GrImageInfo::refColorSpace\28\29\20const
+5165:GrImageInfo::minRowBytes\28\29\20const
+5166:GrImageInfo::makeDimensions\28SkISize\29\20const
+5167:GrImageInfo::bpp\28\29\20const
+5168:GrImageInfo::GrImageInfo\28GrColorType\2c\20SkAlphaType\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int\29
+5169:GrImageContext::abandonContext\28\29
+5170:GrGpuResource::makeBudgeted\28\29
+5171:GrGpuResource::getResourceName\28\29\20const
+5172:GrGpuResource::abandon\28\29
+5173:GrGpuResource::CreateUniqueID\28\29
+5174:GrGpu::~GrGpu\28\29
+5175:GrGpu::regenerateMipMapLevels\28GrTexture*\29
+5176:GrGpu::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5177:GrGpu::createTextureCommon\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrTextureType\2c\20skgpu::Renderable\2c\20int\2c\20skgpu::Budgeted\2c\20skgpu::Protected\2c\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5178:GrGeometryProcessor::AttributeSet::addToKey\28skgpu::KeyBuilder*\29\20const
+5179:GrGLTextureParameters::invalidate\28\29
+5180:GrGLTexture::MakeWrapped\28GrGLGpu*\2c\20GrMipmapStatus\2c\20GrGLTexture::Desc\20const&\2c\20sk_sp<GrGLTextureParameters>\2c\20GrWrapCacheable\2c\20GrIOType\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5181:GrGLTexture::GrGLTexture\28GrGLGpu*\2c\20skgpu::Budgeted\2c\20GrGLTexture::Desc\20const&\2c\20GrMipmapStatus\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5182:GrGLTexture::GrGLTexture\28GrGLGpu*\2c\20GrGLTexture::Desc\20const&\2c\20sk_sp<GrGLTextureParameters>\2c\20GrMipmapStatus\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5183:GrGLSLVaryingHandler::getFragDecls\28SkString*\2c\20SkString*\29\20const
+5184:GrGLSLVaryingHandler::addAttribute\28GrShaderVar\20const&\29
+5185:GrGLSLUniformHandler::liftUniformToVertexShader\28GrProcessor\20const&\2c\20SkString\29
+5186:GrGLSLShaderBuilder::finalize\28unsigned\20int\29
+5187:GrGLSLShaderBuilder::emitFunction\28char\20const*\2c\20char\20const*\29
+5188:GrGLSLShaderBuilder::emitFunctionPrototype\28char\20const*\29
+5189:GrGLSLShaderBuilder::appendTextureLookupAndBlend\28char\20const*\2c\20SkBlendMode\2c\20GrResourceHandle<GrGLSLUniformHandler::SamplerHandleKind>\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29
+5190:GrGLSLShaderBuilder::appendColorGamutXform\28SkString*\2c\20char\20const*\2c\20GrGLSLColorSpaceXformHelper*\29::$_0::operator\28\29\28char\20const*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20skcms_TFType\29\20const
+5191:GrGLSLShaderBuilder::addLayoutQualifier\28char\20const*\2c\20GrGLSLShaderBuilder::InterfaceQualifier\29
+5192:GrGLSLShaderBuilder::GrGLSLShaderBuilder\28GrGLSLProgramBuilder*\29
+5193:GrGLSLProgramDataManager::setRuntimeEffectUniforms\28SkSpan<SkRuntimeEffect::Uniform\20const>\2c\20SkSpan<GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\20const>\2c\20SkSpan<GrGLSLProgramDataManager::Specialized\20const>\2c\20void\20const*\29\20const
+5194:GrGLSLProgramBuilder::~GrGLSLProgramBuilder\28\29
+5195:GrGLSLBlend::SetBlendModeUniformData\28GrGLSLProgramDataManager\20const&\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20SkBlendMode\29
+5196:GrGLSLBlend::BlendExpression\28GrProcessor\20const*\2c\20GrGLSLUniformHandler*\2c\20GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>*\2c\20char\20const*\2c\20char\20const*\2c\20SkBlendMode\29
+5197:GrGLRenderTarget::GrGLRenderTarget\28GrGLGpu*\2c\20SkISize\20const&\2c\20GrGLFormat\2c\20int\2c\20GrGLRenderTarget::IDs\20const&\2c\20skgpu::Protected\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5198:GrGLProgramDataManager::set4fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+5199:GrGLProgramDataManager::set2fv\28GrResourceHandle<GrGLSLProgramDataManager::UniformHandleKind>\2c\20int\2c\20float\20const*\29\20const
+5200:GrGLProgramBuilder::uniformHandler\28\29
+5201:GrGLProgramBuilder::CreateProgram\28GrDirectContext*\2c\20GrProgramDesc\20const&\2c\20GrProgramInfo\20const&\2c\20GrGLPrecompiledProgram\20const*\29
+5202:GrGLProgram::~GrGLProgram\28\29
+5203:GrGLMakeAssembledInterface\28void*\2c\20void\20\28*\20\28*\29\28void*\2c\20char\20const*\29\29\28\29\29
+5204:GrGLGpu::~GrGLGpu\28\29
+5205:GrGLGpu::uploadTexData\28SkISize\2c\20unsigned\20int\2c\20SkIRect\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20long\2c\20GrMipLevel\20const*\2c\20int\29
+5206:GrGLGpu::uploadCompressedTexData\28SkTextureCompressionType\2c\20GrGLFormat\2c\20SkISize\2c\20skgpu::Mipmapped\2c\20unsigned\20int\2c\20void\20const*\2c\20unsigned\20long\29
+5207:GrGLGpu::uploadColorToTex\28GrGLFormat\2c\20SkISize\2c\20unsigned\20int\2c\20std::__2::array<float\2c\204ul>\2c\20unsigned\20int\29
+5208:GrGLGpu::readOrTransferPixelsFrom\28GrSurface*\2c\20SkIRect\2c\20GrColorType\2c\20GrColorType\2c\20void*\2c\20int\29
+5209:GrGLGpu::getCompatibleStencilIndex\28GrGLFormat\29
+5210:GrGLGpu::deleteSync\28__GLsync*\29
+5211:GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29
+5212:GrGLGpu::createCompressedTexture2D\28SkISize\2c\20SkTextureCompressionType\2c\20GrGLFormat\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrGLTextureParameters::SamplerOverriddenState*\29
+5213:GrGLGpu::bindFramebuffer\28unsigned\20int\2c\20unsigned\20int\29
+5214:GrGLGpu::ProgramCache::reset\28\29
+5215:GrGLGpu::ProgramCache::findOrCreateProgramImpl\28GrDirectContext*\2c\20GrProgramDesc\20const&\2c\20GrProgramInfo\20const&\2c\20GrThreadSafePipelineBuilder::Stats::ProgramCacheResult*\29
+5216:GrGLFunction<void\20\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29>::GrGLFunction\28void\20\28*\29\28unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29\29::'lambda'\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29::__invoke\28void\20const*\2c\20unsigned\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void\20const*\29
+5217:GrGLFunction<void\20\28int\2c\20float\29>::GrGLFunction\28void\20\28*\29\28int\2c\20float\29\29::'lambda'\28void\20const*\2c\20int\2c\20float\29::__invoke\28void\20const*\2c\20int\2c\20float\29
+5218:GrGLFormatIsCompressed\28GrGLFormat\29
+5219:GrGLContext::~GrGLContext\28\29.1
+5220:GrGLContext::~GrGLContext\28\29
+5221:GrGLCaps::~GrGLCaps\28\29
+5222:GrGLCaps::getTexSubImageExternalFormatAndType\28GrGLFormat\2c\20GrColorType\2c\20GrColorType\2c\20unsigned\20int*\2c\20unsigned\20int*\29\20const
+5223:GrGLCaps::getTexSubImageDefaultFormatTypeAndColorType\28GrGLFormat\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20GrColorType*\29\20const
+5224:GrGLCaps::getRenderTargetSampleCount\28int\2c\20GrGLFormat\29\20const
+5225:GrGLCaps::formatSupportsTexStorage\28GrGLFormat\29\20const
+5226:GrGLCaps::canCopyAsDraw\28GrGLFormat\2c\20bool\2c\20bool\29\20const
+5227:GrGLCaps::canCopyAsBlit\28GrGLFormat\2c\20int\2c\20GrTextureType\20const*\2c\20GrGLFormat\2c\20int\2c\20GrTextureType\20const*\2c\20SkRect\20const&\2c\20bool\2c\20SkIRect\20const&\2c\20SkIRect\20const&\29\20const
+5228:GrFragmentProcessor::~GrFragmentProcessor\28\29
+5229:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29::SwizzleFragmentProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29
+5230:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20skgpu::Swizzle\20const&\29
+5231:GrFragmentProcessor::ProgramImpl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+5232:GrFragmentProcessor::HighPrecision\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::HighPrecisionFragmentProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+5233:GrFragmentProcessor::Compose\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29::ComposeProcessor::Make\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+5234:GrFragmentProcessor::ClampOutput\28std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\29
+5235:GrFixedClip::preApply\28SkRect\20const&\2c\20GrAA\29\20const
+5236:GrFixedClip::getConservativeBounds\28\29\20const
+5237:GrFixedClip::apply\28GrAppliedHardClip*\2c\20SkIRect*\29\20const
+5238:GrFinishCallbacks::check\28\29
+5239:GrEagerDynamicVertexAllocator::unlock\28int\29
+5240:GrDynamicAtlas::readView\28GrCaps\20const&\29\20const
+5241:GrDynamicAtlas::instantiate\28GrOnFlushResourceProvider*\2c\20sk_sp<GrTexture>\29
+5242:GrDriverBugWorkarounds::GrDriverBugWorkarounds\28\29
+5243:GrDrawingManager::getLastRenderTask\28GrSurfaceProxy\20const*\29\20const
+5244:GrDrawingManager::flush\28SkSpan<GrSurfaceProxy*>\2c\20SkSurfaces::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20skgpu::MutableTextureState\20const*\29
+5245:GrDrawOpAtlasConfig::atlasDimensions\28skgpu::MaskFormat\29\20const
+5246:GrDrawOpAtlasConfig::GrDrawOpAtlasConfig\28int\2c\20unsigned\20long\29
+5247:GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29
+5248:GrDrawOpAtlas::Make\28GrProxyProvider*\2c\20GrBackendFormat\20const&\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20int\2c\20int\2c\20int\2c\20skgpu::AtlasGenerationCounter*\2c\20GrDrawOpAtlas::AllowMultitexturing\2c\20skgpu::PlotEvictionCallback*\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5249:GrDistanceFieldA8TextGeoProc::onTextureSampler\28int\29\20const
+5250:GrDistanceFieldA8TextGeoProc::addNewViews\28GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\29
+5251:GrDisableColorXPFactory::MakeXferProcessor\28\29
+5252:GrDirectContextPriv::validPMUPMConversionExists\28\29
+5253:GrDirectContext::~GrDirectContext\28\29
+5254:GrDirectContext::onGetSmallPathAtlasMgr\28\29
+5255:GrDirectContext::getResourceCacheLimits\28int*\2c\20unsigned\20long*\29\20const
+5256:GrCopyRenderTask::~GrCopyRenderTask\28\29
+5257:GrCopyRenderTask::onIsUsed\28GrSurfaceProxy*\29\20const
+5258:GrCopyBaseMipMapToView\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20skgpu::Budgeted\29
+5259:GrContext_Base::threadSafeProxy\28\29
+5260:GrContext_Base::maxSurfaceSampleCountForColorType\28SkColorType\29\20const
+5261:GrContext_Base::backend\28\29\20const
+5262:GrColorInfo::makeColorType\28GrColorType\29\20const
+5263:GrColorInfo::isLinearlyBlended\28\29\20const
+5264:GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis\28GrProcessorAnalysisColor\20const&\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\20const*\2c\20int\29
+5265:GrClip::IsPixelAligned\28SkRect\20const&\29
+5266:GrCaps::surfaceSupportsWritePixels\28GrSurface\20const*\29\20const
+5267:GrCaps::getDstSampleFlagsForProxy\28GrRenderTargetProxy\20const*\2c\20bool\29\20const
+5268:GrCPixmap::GrCPixmap\28GrPixmap\20const&\29
+5269:GrBufferAllocPool::makeSpaceAtLeast\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\2c\20unsigned\20long*\29
+5270:GrBufferAllocPool::createBlock\28unsigned\20long\29
+5271:GrBufferAllocPool::CpuBufferCache::makeBuffer\28unsigned\20long\2c\20bool\29
+5272:GrBlurUtils::draw_shape_with_mask_filter\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrClip\20const*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkMaskFilterBase\20const*\2c\20GrStyledShape\20const&\29
+5273:GrBlurUtils::draw_mask\28skgpu::ganesh::SurfaceDrawContext*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkIRect\20const&\2c\20GrPaint&&\2c\20GrSurfaceProxyView\29
+5274:GrBlurUtils::create_integral_table\28float\2c\20SkBitmap*\29
+5275:GrBlurUtils::convolve_gaussian\28GrRecordingContext*\2c\20GrSurfaceProxyView\2c\20GrColorType\2c\20SkAlphaType\2c\20SkIRect\2c\20SkIRect\2c\20GrBlurUtils::\28anonymous\20namespace\29::Direction\2c\20int\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkColorSpace>\2c\20SkBackingFit\29
+5276:GrBlurUtils::\28anonymous\20namespace\29::make_texture_effect\28GrCaps\20const*\2c\20GrSurfaceProxyView\2c\20SkAlphaType\2c\20GrSamplerState\20const&\2c\20SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkISize\20const&\29
+5277:GrBitmapTextGeoProc::addNewViews\28GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\29
+5278:GrBicubicEffect::Make\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState::WrapMode\2c\20GrSamplerState::WrapMode\2c\20SkCubicResampler\2c\20GrBicubicEffect::Direction\2c\20GrCaps\20const&\29
+5279:GrBicubicEffect::MakeSubset\28GrSurfaceProxyView\2c\20SkAlphaType\2c\20SkMatrix\20const&\2c\20GrSamplerState::WrapMode\2c\20GrSamplerState::WrapMode\2c\20SkRect\20const&\2c\20SkRect\20const&\2c\20SkCubicResampler\2c\20GrBicubicEffect::Direction\2c\20GrCaps\20const&\29
+5280:GrBackendTextures::MakeGL\28int\2c\20int\2c\20skgpu::Mipmapped\2c\20GrGLTextureInfo\20const&\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+5281:GrBackendTexture::operator=\28GrBackendTexture\20const&\29
+5282:GrBackendRenderTargets::MakeGL\28int\2c\20int\2c\20int\2c\20int\2c\20GrGLFramebufferInfo\20const&\29
+5283:GrBackendRenderTargets::GetGLFramebufferInfo\28GrBackendRenderTarget\20const&\2c\20GrGLFramebufferInfo*\29
+5284:GrBackendRenderTarget::~GrBackendRenderTarget\28\29
+5285:GrBackendRenderTarget::isProtected\28\29\20const
+5286:GrBackendFormatBytesPerBlock\28GrBackendFormat\20const&\29
+5287:GrBackendFormat::makeTexture2D\28\29\20const
+5288:GrBackendFormat::isMockStencilFormat\28\29\20const
+5289:GrBackendFormat::MakeMock\28GrColorType\2c\20SkTextureCompressionType\2c\20bool\29
+5290:GrAuditTrail::opsCombined\28GrOp\20const*\2c\20GrOp\20const*\29
+5291:GrAttachment::ComputeSharedAttachmentUniqueKey\28GrCaps\20const&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20GrAttachment::UsageFlags\2c\20int\2c\20skgpu::Mipmapped\2c\20skgpu::Protected\2c\20GrMemoryless\2c\20skgpu::UniqueKey*\29
+5292:GrAtlasManager::~GrAtlasManager\28\29
+5293:GrAtlasManager::getViews\28skgpu::MaskFormat\2c\20unsigned\20int*\29
+5294:GrAtlasManager::freeAll\28\29
+5295:GrAATriangulator::makeEvent\28GrAATriangulator::SSEdge*\2c\20GrTriangulator::Vertex*\2c\20GrAATriangulator::SSEdge*\2c\20GrTriangulator::Vertex*\2c\20GrAATriangulator::EventList*\2c\20GrTriangulator::Comparator\20const&\29\20const
+5296:GrAATriangulator::collapseOverlapRegions\28GrTriangulator::VertexList*\2c\20GrTriangulator::Comparator\20const&\2c\20GrAATriangulator::EventComparator\29
+5297:GrAAConvexTessellator::quadTo\28SkPoint\20const*\29
+5298:GetVariationDesignPosition\28AutoFTAccess&\2c\20SkFontArguments::VariationPosition::Coordinate*\2c\20int\29
+5299:GetShapedLines\28skia::textlayout::Paragraph&\29
+5300:GetLargeValue
+5301:FontMgrRunIterator::endOfCurrentRun\28\29\20const
+5302:FontMgrRunIterator::atEnd\28\29\20const
+5303:FinishRow
+5304:FindUndone\28SkOpContourHead*\29
+5305:FT_Stream_Close
+5306:FT_Sfnt_Table_Info
+5307:FT_Render_Glyph_Internal
+5308:FT_Remove_Module
+5309:FT_Outline_Get_Orientation
+5310:FT_Outline_EmboldenXY
+5311:FT_New_Library
+5312:FT_New_GlyphSlot
+5313:FT_List_Iterate
+5314:FT_List_Find
+5315:FT_List_Finalize
+5316:FT_GlyphLoader_CheckSubGlyphs
+5317:FT_Get_Postscript_Name
+5318:FT_Get_Paint_Layers
+5319:FT_Get_PS_Font_Info
+5320:FT_Get_Kerning
+5321:FT_Get_Glyph_Name
+5322:FT_Get_FSType_Flags
+5323:FT_Get_Colorline_Stops
+5324:FT_Get_Color_Glyph_ClipBox
+5325:FT_Bitmap_Convert
+5326:FT_Add_Default_Modules
+5327:EllipticalRRectOp::~EllipticalRRectOp\28\29.1
+5328:EllipticalRRectOp::~EllipticalRRectOp\28\29
+5329:EllipticalRRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+5330:EllipticalRRectOp::RRect&\20skia_private::TArray<EllipticalRRectOp::RRect\2c\20true>::emplace_back<EllipticalRRectOp::RRect>\28EllipticalRRectOp::RRect&&\29
+5331:EllipticalRRectOp::EllipticalRRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20SkPoint\2c\20bool\29
+5332:EllipseOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkStrokeRec\20const&\29
+5333:EllipseOp::EllipseOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20EllipseOp::DeviceSpaceParams\20const&\2c\20SkStrokeRec\20const&\29
+5334:EllipseGeometryProcessor::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+5335:DIEllipseOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20SkStrokeRec\20const&\29
+5336:DIEllipseOp::DIEllipseOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20DIEllipseOp::DeviceSpaceParams\20const&\2c\20SkMatrix\20const&\29
+5337:CustomXP::makeProgramImpl\28\29\20const::Impl::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrXferProcessor\20const&\29
+5338:CustomXP::makeProgramImpl\28\29\20const::Impl::emitBlendCodeForDstRead\28GrGLSLXPFragmentBuilder*\2c\20GrGLSLUniformHandler*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20GrXferProcessor\20const&\29
+5339:Cr_z_deflateReset
+5340:Cr_z_deflate
+5341:Cr_z_crc32_z
+5342:CoverageSetOpXP::onIsEqual\28GrXferProcessor\20const&\29\20const
+5343:CircularRRectOp::~CircularRRectOp\28\29.1
+5344:CircularRRectOp::~CircularRRectOp\28\29
+5345:CircularRRectOp::CircularRRectOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20bool\29
+5346:CircleOp::Make\28GrRecordingContext*\2c\20GrPaint&&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20float\2c\20GrStyle\20const&\2c\20CircleOp::ArcParams\20const*\29
+5347:CircleOp::CircleOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20float\2c\20GrStyle\20const&\2c\20CircleOp::ArcParams\20const*\29
+5348:CircleGeometryProcessor::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+5349:CheckDecBuffer
+5350:CFF::path_procs_t<cff1_path_procs_extents_t\2c\20CFF::cff1_cs_interp_env_t\2c\20cff1_extents_param_t>::rlineto\28CFF::cff1_cs_interp_env_t&\2c\20cff1_extents_param_t&\29
+5351:CFF::dict_interpreter_t<CFF::cff1_private_dict_opset_t\2c\20CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>\2c\20CFF::interp_env_t<CFF::number_t>>::interpret\28CFF::cff1_private_dict_values_base_t<CFF::dict_val_t>&\29
+5352:CFF::cff2_cs_opset_t<cff2_cs_opset_extents_t\2c\20cff2_extents_param_t\2c\20CFF::number_t\2c\20cff2_path_procs_extents_t>::process_blend\28CFF::cff2_cs_interp_env_t<CFF::number_t>&\2c\20cff2_extents_param_t&\29
+5353:CFF::FDSelect3_4<OT::IntType<unsigned\20short\2c\202u>\2c\20OT::IntType<unsigned\20char\2c\201u>>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int\29\20const
+5354:CFF::Charset::get_sid\28unsigned\20int\2c\20unsigned\20int\2c\20CFF::code_pair_t*\29\20const
+5355:CFF::CFFIndex<OT::IntType<unsigned\20short\2c\202u>>::get_size\28\29\20const
+5356:CFF::CFF2FDSelect::get_fd\28unsigned\20int\29\20const
+5357:ButtCapDashedCircleOp::ButtCapDashedCircleOp\28GrProcessorSet*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+5358:BuildHuffmanTable
+5359:AsWinding\28SkPath\20const&\2c\20SkPath*\29
+5360:AngleWinding\28SkOpSpanBase*\2c\20SkOpSpanBase*\2c\20int*\2c\20bool*\29
+5361:AddIntersectTs\28SkOpContour*\2c\20SkOpContour*\2c\20SkOpCoincidence*\29
+5362:ActiveEdgeList::replace\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\2c\20unsigned\20short\29
+5363:ActiveEdgeList::remove\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\29
+5364:ActiveEdgeList::insert\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20unsigned\20short\2c\20unsigned\20short\29
+5365:AAT::hb_aat_apply_context_t::return_t\20AAT::ChainSubtable<AAT::ObsoleteTypes>::dispatch<AAT::hb_aat_apply_context_t>\28AAT::hb_aat_apply_context_t*\29\20const
+5366:AAT::hb_aat_apply_context_t::return_t\20AAT::ChainSubtable<AAT::ExtendedTypes>::dispatch<AAT::hb_aat_apply_context_t>\28AAT::hb_aat_apply_context_t*\29\20const
+5367:AAT::TrackData::sanitize\28hb_sanitize_context_t*\2c\20void\20const*\29\20const
+5368:AAT::TrackData::get_tracking\28void\20const*\2c\20float\29\20const
+5369:AAT::StateTable<AAT::ObsoleteTypes\2c\20AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+5370:AAT::StateTable<AAT::ExtendedTypes\2c\20AAT::LigatureEntry<true>::EntryData>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+5371:AAT::StateTable<AAT::ExtendedTypes\2c\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>::sanitize\28hb_sanitize_context_t*\2c\20unsigned\20int*\29\20const
+5372:AAT::RearrangementSubtable<AAT::ExtendedTypes>::driver_context_t::transition\28AAT::StateTableDriver<AAT::ExtendedTypes\2c\20void>*\2c\20AAT::Entry<void>\20const&\29
+5373:AAT::NoncontextualSubtable<AAT::ExtendedTypes>::apply\28AAT::hb_aat_apply_context_t*\29\20const
+5374:AAT::Lookup<OT::IntType<unsigned\20int\2c\204u>>::sanitize\28hb_sanitize_context_t*\29\20const
+5375:AAT::Lookup<OT::IntType<unsigned\20int\2c\204u>>::get_value\28unsigned\20int\2c\20unsigned\20int\29\20const
+5376:AAT::InsertionSubtable<AAT::ExtendedTypes>::driver_context_t::transition\28AAT::StateTableDriver<AAT::ExtendedTypes\2c\20AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>*\2c\20AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData>\20const&\29
+5377:ycck_cmyk_convert
+5378:ycc_rgb_convert
+5379:ycc_rgb565_convert
+5380:ycc_rgb565D_convert
+5381:xyzd50_to_lab\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+5382:xyzd50_to_hcl\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+5383:wuffs_gif__decoder__tell_me_more
+5384:wuffs_gif__decoder__set_report_metadata
+5385:wuffs_gif__decoder__num_decoded_frame_configs
+5386:wuffs_base__pixel_swizzler__xxxxxxxx__index_binary_alpha__src_over
+5387:wuffs_base__pixel_swizzler__xxxxxxxx__index__src
+5388:wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over
+5389:wuffs_base__pixel_swizzler__xxxx__index__src
+5390:wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over
+5391:wuffs_base__pixel_swizzler__xxx__index__src
+5392:wuffs_base__pixel_swizzler__transparent_black_src_over
+5393:wuffs_base__pixel_swizzler__transparent_black_src
+5394:wuffs_base__pixel_swizzler__copy_1_1
+5395:wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over
+5396:wuffs_base__pixel_swizzler__bgr_565__index__src
+5397:void\20std::__2::vector<SkString\2c\20std::__2::allocator<SkString>>::__emplace_back_slow_path<char\20const*&\2c\20int>\28char\20const*&\2c\20int&&\29
+5398:void\20std::__2::vector<SkJpegMetadataDecoder::Segment\2c\20std::__2::allocator<SkJpegMetadataDecoder::Segment>>::__emplace_back_slow_path<unsigned\20char\20const&\2c\20sk_sp<SkData>\20const&>\28unsigned\20char\20const&\2c\20sk_sp<SkData>\20const&\29
+5399:void\20mergeT<unsigned\20short>\28void\20const*\2c\20int\2c\20unsigned\20char\20const*\2c\20int\2c\20void*\29
+5400:void\20mergeT<unsigned\20char>\28void\20const*\2c\20int\2c\20unsigned\20char\20const*\2c\20int\2c\20void*\29
+5401:void\20emscripten::internal::raw_destructor<sk_sp<SkTextBlob>>\28sk_sp<SkTextBlob>*\29
+5402:void\20emscripten::internal::raw_destructor<SkVertices::Builder>\28SkVertices::Builder*\29
+5403:void\20emscripten::internal::raw_destructor<SkPictureRecorder>\28SkPictureRecorder*\29
+5404:void\20emscripten::internal::raw_destructor<SkPath>\28SkPath*\29
+5405:void\20emscripten::internal::raw_destructor<SkPaint>\28SkPaint*\29
+5406:void\20emscripten::internal::raw_destructor<SkContourMeasureIter>\28SkContourMeasureIter*\29
+5407:void\20emscripten::internal::raw_destructor<SimpleImageInfo>\28SimpleImageInfo*\29
+5408:void\20emscripten::internal::MemberAccess<SimpleParagraphStyle\2c\20SimpleTextStyle>::setWire<SimpleParagraphStyle>\28SimpleTextStyle\20SimpleParagraphStyle::*\20const&\2c\20SimpleParagraphStyle&\2c\20SimpleTextStyle*\29
+5409:void\20emscripten::internal::MemberAccess<SimpleParagraphStyle\2c\20SimpleStrutStyle>::setWire<SimpleParagraphStyle>\28SimpleStrutStyle\20SimpleParagraphStyle::*\20const&\2c\20SimpleParagraphStyle&\2c\20SimpleStrutStyle*\29
+5410:void\20emscripten::internal::MemberAccess<SimpleImageInfo\2c\20sk_sp<SkColorSpace>>::setWire<SimpleImageInfo>\28sk_sp<SkColorSpace>\20SimpleImageInfo::*\20const&\2c\20SimpleImageInfo&\2c\20sk_sp<SkColorSpace>*\29
+5411:void\20const*\20emscripten::internal::getActualType<skia::textlayout::TypefaceFontProvider>\28skia::textlayout::TypefaceFontProvider*\29
+5412:void\20const*\20emscripten::internal::getActualType<skia::textlayout::ParagraphBuilderImpl>\28skia::textlayout::ParagraphBuilderImpl*\29
+5413:void\20const*\20emscripten::internal::getActualType<skia::textlayout::Paragraph>\28skia::textlayout::Paragraph*\29
+5414:void\20const*\20emscripten::internal::getActualType<skia::textlayout::FontCollection>\28skia::textlayout::FontCollection*\29
+5415:void\20const*\20emscripten::internal::getActualType<SkVertices>\28SkVertices*\29
+5416:void\20const*\20emscripten::internal::getActualType<SkVertices::Builder>\28SkVertices::Builder*\29
+5417:void\20const*\20emscripten::internal::getActualType<SkTypeface>\28SkTypeface*\29
+5418:void\20const*\20emscripten::internal::getActualType<SkTextBlob>\28SkTextBlob*\29
+5419:void\20const*\20emscripten::internal::getActualType<SkSurface>\28SkSurface*\29
+5420:void\20const*\20emscripten::internal::getActualType<SkShader>\28SkShader*\29
+5421:void\20const*\20emscripten::internal::getActualType<SkRuntimeEffect>\28SkRuntimeEffect*\29
+5422:void\20const*\20emscripten::internal::getActualType<SkPictureRecorder>\28SkPictureRecorder*\29
+5423:void\20const*\20emscripten::internal::getActualType<SkPicture>\28SkPicture*\29
+5424:void\20const*\20emscripten::internal::getActualType<SkPathEffect>\28SkPathEffect*\29
+5425:void\20const*\20emscripten::internal::getActualType<SkPath>\28SkPath*\29
+5426:void\20const*\20emscripten::internal::getActualType<SkPaint>\28SkPaint*\29
+5427:void\20const*\20emscripten::internal::getActualType<SkMaskFilter>\28SkMaskFilter*\29
+5428:void\20const*\20emscripten::internal::getActualType<SkImageFilter>\28SkImageFilter*\29
+5429:void\20const*\20emscripten::internal::getActualType<SkImage>\28SkImage*\29
+5430:void\20const*\20emscripten::internal::getActualType<SkFontMgr>\28SkFontMgr*\29
+5431:void\20const*\20emscripten::internal::getActualType<SkFont>\28SkFont*\29
+5432:void\20const*\20emscripten::internal::getActualType<SkContourMeasureIter>\28SkContourMeasureIter*\29
+5433:void\20const*\20emscripten::internal::getActualType<SkContourMeasure>\28SkContourMeasure*\29
+5434:void\20const*\20emscripten::internal::getActualType<SkColorSpace>\28SkColorSpace*\29
+5435:void\20const*\20emscripten::internal::getActualType<SkColorFilter>\28SkColorFilter*\29
+5436:void\20const*\20emscripten::internal::getActualType<SkCanvas>\28SkCanvas*\29
+5437:void\20const*\20emscripten::internal::getActualType<SkBlender>\28SkBlender*\29
+5438:void\20const*\20emscripten::internal::getActualType<SkAnimatedImage>\28SkAnimatedImage*\29
+5439:void\20const*\20emscripten::internal::getActualType<GrDirectContext>\28GrDirectContext*\29
+5440:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5441:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5442:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5443:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5444:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5445:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5446:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5447:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5448:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5449:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5450:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5451:void\20\28anonymous\20namespace\29::downsample_3_3<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5452:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5453:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5454:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5455:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5456:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5457:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5458:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5459:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5460:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5461:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5462:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5463:void\20\28anonymous\20namespace\29::downsample_3_2<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5464:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5465:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5466:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5467:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5468:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5469:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5470:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5471:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5472:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5473:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5474:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5475:void\20\28anonymous\20namespace\29::downsample_3_1<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5476:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5477:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5478:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5479:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5480:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5481:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5482:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5483:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5484:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5485:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5486:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5487:void\20\28anonymous\20namespace\29::downsample_2_3<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5488:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5489:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5490:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5491:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5492:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5493:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5494:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5495:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5496:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5497:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5498:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5499:void\20\28anonymous\20namespace\29::downsample_2_2<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5500:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5501:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5502:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5503:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5504:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5505:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5506:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5507:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5508:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5509:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5510:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5511:void\20\28anonymous\20namespace\29::downsample_2_1<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5512:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5513:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5514:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5515:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5516:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5517:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5518:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5519:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5520:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5521:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5522:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5523:void\20\28anonymous\20namespace\29::downsample_1_3<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5524:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_RGBA_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5525:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_F16F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5526:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_Alpha_F16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5527:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_8>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5528:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_88>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5529:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_8888>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5530:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_565>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5531:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_4444>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5532:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_16>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5533:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_1616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5534:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_16161616>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5535:void\20\28anonymous\20namespace\29::downsample_1_2<\28anonymous\20namespace\29::ColorTypeFilter_1010102>\28void*\2c\20void\20const*\2c\20unsigned\20long\2c\20int\29
+5536:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5537:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5538:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5539:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5540:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5541:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5542:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5543:void\20SkSwizzler::SkipLeading8888ZerosThen<&sample4\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5544:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5545:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5546:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5547:void\20SkSwizzler::SkipLeading8888ZerosThen<©\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5548:virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29.1
+5549:virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29
+5550:virtual\20thunk\20to\20std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29.1
+5551:virtual\20thunk\20to\20std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>::~basic_ostream\28\29
+5552:virtual\20thunk\20to\20std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29.1
+5553:virtual\20thunk\20to\20std::__2::basic_istream<char\2c\20std::__2::char_traits<char>>::~basic_istream\28\29
+5554:virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.1
+5555:virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29
+5556:virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29.1
+5557:virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29
+5558:virtual\20thunk\20to\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+5559:virtual\20thunk\20to\20GrTextureRenderTargetProxy::instantiate\28GrResourceProvider*\29
+5560:virtual\20thunk\20to\20GrTextureRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+5561:virtual\20thunk\20to\20GrTextureRenderTargetProxy::callbackDesc\28\29\20const
+5562:virtual\20thunk\20to\20GrTextureProxy::~GrTextureProxy\28\29.1
+5563:virtual\20thunk\20to\20GrTextureProxy::~GrTextureProxy\28\29
+5564:virtual\20thunk\20to\20GrTextureProxy::onUninstantiatedGpuMemorySize\28\29\20const
+5565:virtual\20thunk\20to\20GrTextureProxy::instantiate\28GrResourceProvider*\29
+5566:virtual\20thunk\20to\20GrTextureProxy::getUniqueKey\28\29\20const
+5567:virtual\20thunk\20to\20GrTextureProxy::createSurface\28GrResourceProvider*\29\20const
+5568:virtual\20thunk\20to\20GrTextureProxy::callbackDesc\28\29\20const
+5569:virtual\20thunk\20to\20GrTextureProxy::asTextureProxy\28\29\20const
+5570:virtual\20thunk\20to\20GrTextureProxy::asTextureProxy\28\29
+5571:virtual\20thunk\20to\20GrTexture::onGpuMemorySize\28\29\20const
+5572:virtual\20thunk\20to\20GrTexture::computeScratchKey\28skgpu::ScratchKey*\29\20const
+5573:virtual\20thunk\20to\20GrTexture::asTexture\28\29\20const
+5574:virtual\20thunk\20to\20GrTexture::asTexture\28\29
+5575:virtual\20thunk\20to\20GrRenderTargetProxy::~GrRenderTargetProxy\28\29.1
+5576:virtual\20thunk\20to\20GrRenderTargetProxy::~GrRenderTargetProxy\28\29
+5577:virtual\20thunk\20to\20GrRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+5578:virtual\20thunk\20to\20GrRenderTargetProxy::instantiate\28GrResourceProvider*\29
+5579:virtual\20thunk\20to\20GrRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+5580:virtual\20thunk\20to\20GrRenderTargetProxy::callbackDesc\28\29\20const
+5581:virtual\20thunk\20to\20GrRenderTargetProxy::asRenderTargetProxy\28\29\20const
+5582:virtual\20thunk\20to\20GrRenderTargetProxy::asRenderTargetProxy\28\29
+5583:virtual\20thunk\20to\20GrRenderTarget::onRelease\28\29
+5584:virtual\20thunk\20to\20GrRenderTarget::onAbandon\28\29
+5585:virtual\20thunk\20to\20GrRenderTarget::asRenderTarget\28\29\20const
+5586:virtual\20thunk\20to\20GrRenderTarget::asRenderTarget\28\29
+5587:virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29.1
+5588:virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29
+5589:virtual\20thunk\20to\20GrGLTextureRenderTarget::onRelease\28\29
+5590:virtual\20thunk\20to\20GrGLTextureRenderTarget::onGpuMemorySize\28\29\20const
+5591:virtual\20thunk\20to\20GrGLTextureRenderTarget::onAbandon\28\29
+5592:virtual\20thunk\20to\20GrGLTextureRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+5593:virtual\20thunk\20to\20GrGLTexture::~GrGLTexture\28\29.1
+5594:virtual\20thunk\20to\20GrGLTexture::~GrGLTexture\28\29
+5595:virtual\20thunk\20to\20GrGLTexture::onRelease\28\29
+5596:virtual\20thunk\20to\20GrGLTexture::onAbandon\28\29
+5597:virtual\20thunk\20to\20GrGLTexture::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+5598:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+5599:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+5600:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::onFinalize\28\29
+5601:virtual\20thunk\20to\20GrGLRenderTarget::~GrGLRenderTarget\28\29.1
+5602:virtual\20thunk\20to\20GrGLRenderTarget::~GrGLRenderTarget\28\29
+5603:virtual\20thunk\20to\20GrGLRenderTarget::onRelease\28\29
+5604:virtual\20thunk\20to\20GrGLRenderTarget::onGpuMemorySize\28\29\20const
+5605:virtual\20thunk\20to\20GrGLRenderTarget::onAbandon\28\29
+5606:virtual\20thunk\20to\20GrGLRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+5607:virtual\20thunk\20to\20GrGLRenderTarget::backendFormat\28\29\20const
+5608:tt_vadvance_adjust
+5609:tt_slot_init
+5610:tt_size_select
+5611:tt_size_reset_iterator
+5612:tt_size_request
+5613:tt_size_init
+5614:tt_size_done
+5615:tt_sbit_decoder_load_png
+5616:tt_sbit_decoder_load_compound
+5617:tt_sbit_decoder_load_byte_aligned
+5618:tt_sbit_decoder_load_bit_aligned
+5619:tt_property_set
+5620:tt_property_get
+5621:tt_name_ascii_from_utf16
+5622:tt_name_ascii_from_other
+5623:tt_hadvance_adjust
+5624:tt_glyph_load
+5625:tt_get_var_blend
+5626:tt_get_interface
+5627:tt_get_glyph_name
+5628:tt_get_cmap_info
+5629:tt_get_advances
+5630:tt_face_set_sbit_strike
+5631:tt_face_load_strike_metrics
+5632:tt_face_load_sbit_image
+5633:tt_face_load_sbit
+5634:tt_face_load_post
+5635:tt_face_load_pclt
+5636:tt_face_load_os2
+5637:tt_face_load_name
+5638:tt_face_load_maxp
+5639:tt_face_load_kern
+5640:tt_face_load_hmtx
+5641:tt_face_load_hhea
+5642:tt_face_load_head
+5643:tt_face_load_gasp
+5644:tt_face_load_font_dir
+5645:tt_face_load_cpal
+5646:tt_face_load_colr
+5647:tt_face_load_cmap
+5648:tt_face_load_bhed
+5649:tt_face_load_any
+5650:tt_face_init
+5651:tt_face_goto_table
+5652:tt_face_get_paint_layers
+5653:tt_face_get_paint
+5654:tt_face_get_kerning
+5655:tt_face_get_colr_layer
+5656:tt_face_get_colr_glyph_paint
+5657:tt_face_get_colorline_stops
+5658:tt_face_get_color_glyph_clipbox
+5659:tt_face_free_sbit
+5660:tt_face_free_ps_names
+5661:tt_face_free_name
+5662:tt_face_free_cpal
+5663:tt_face_free_colr
+5664:tt_face_done
+5665:tt_face_colr_blend_layer
+5666:tt_driver_init
+5667:tt_cvt_ready_iterator
+5668:tt_cmap_unicode_init
+5669:tt_cmap_unicode_char_next
+5670:tt_cmap_unicode_char_index
+5671:tt_cmap_init
+5672:tt_cmap8_validate
+5673:tt_cmap8_get_info
+5674:tt_cmap8_char_next
+5675:tt_cmap8_char_index
+5676:tt_cmap6_validate
+5677:tt_cmap6_get_info
+5678:tt_cmap6_char_next
+5679:tt_cmap6_char_index
+5680:tt_cmap4_validate
+5681:tt_cmap4_init
+5682:tt_cmap4_get_info
+5683:tt_cmap4_char_next
+5684:tt_cmap4_char_index
+5685:tt_cmap2_validate
+5686:tt_cmap2_get_info
+5687:tt_cmap2_char_next
+5688:tt_cmap2_char_index
+5689:tt_cmap14_variants
+5690:tt_cmap14_variant_chars
+5691:tt_cmap14_validate
+5692:tt_cmap14_init
+5693:tt_cmap14_get_info
+5694:tt_cmap14_done
+5695:tt_cmap14_char_variants
+5696:tt_cmap14_char_var_isdefault
+5697:tt_cmap14_char_var_index
+5698:tt_cmap14_char_next
+5699:tt_cmap13_validate
+5700:tt_cmap13_get_info
+5701:tt_cmap13_char_next
+5702:tt_cmap13_char_index
+5703:tt_cmap12_validate
+5704:tt_cmap12_get_info
+5705:tt_cmap12_char_next
+5706:tt_cmap12_char_index
+5707:tt_cmap10_validate
+5708:tt_cmap10_get_info
+5709:tt_cmap10_char_next
+5710:tt_cmap10_char_index
+5711:tt_cmap0_validate
+5712:tt_cmap0_get_info
+5713:tt_cmap0_char_next
+5714:tt_cmap0_char_index
+5715:transform_scanline_rgbA\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5716:transform_scanline_memcpy\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5717:transform_scanline_bgra_1010102_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5718:transform_scanline_bgra_1010102\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5719:transform_scanline_bgr_101010x_xr\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5720:transform_scanline_bgr_101010x\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5721:transform_scanline_bgrA\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5722:transform_scanline_RGBX\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5723:transform_scanline_F32_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5724:transform_scanline_F32\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5725:transform_scanline_F16_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5726:transform_scanline_F16\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5727:transform_scanline_BGRX\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5728:transform_scanline_BGRA\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5729:transform_scanline_A8_to_GrayAlpha\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5730:transform_scanline_565\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5731:transform_scanline_444\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5732:transform_scanline_4444\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5733:transform_scanline_101010x\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5734:transform_scanline_1010102_premul\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5735:transform_scanline_1010102\28char*\2c\20char\20const*\2c\20int\2c\20int\29
+5736:t2_hints_stems
+5737:t2_hints_open
+5738:t1_make_subfont
+5739:t1_hints_stem
+5740:t1_hints_open
+5741:t1_decrypt
+5742:t1_decoder_parse_metrics
+5743:t1_decoder_init
+5744:t1_decoder_done
+5745:t1_cmap_unicode_init
+5746:t1_cmap_unicode_char_next
+5747:t1_cmap_unicode_char_index
+5748:t1_cmap_std_done
+5749:t1_cmap_std_char_next
+5750:t1_cmap_std_char_index
+5751:t1_cmap_standard_init
+5752:t1_cmap_expert_init
+5753:t1_cmap_custom_init
+5754:t1_cmap_custom_done
+5755:t1_cmap_custom_char_next
+5756:t1_cmap_custom_char_index
+5757:t1_builder_start_point
+5758:t1_builder_init
+5759:t1_builder_add_point1
+5760:t1_builder_add_point
+5761:t1_builder_add_contour
+5762:swizzle_small_index_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5763:swizzle_small_index_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5764:swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5765:swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5766:swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5767:swizzle_rgba16_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5768:swizzle_rgba16_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5769:swizzle_rgba16_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5770:swizzle_rgba16_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5771:swizzle_rgb_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5772:swizzle_rgb_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5773:swizzle_rgb_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5774:swizzle_rgb16_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5775:swizzle_rgb16_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5776:swizzle_rgb16_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5777:swizzle_mask32_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5778:swizzle_mask32_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5779:swizzle_mask32_to_rgba_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5780:swizzle_mask32_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5781:swizzle_mask32_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5782:swizzle_mask32_to_bgra_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5783:swizzle_mask32_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5784:swizzle_mask24_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5785:swizzle_mask24_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5786:swizzle_mask24_to_rgba_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5787:swizzle_mask24_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5788:swizzle_mask24_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5789:swizzle_mask24_to_bgra_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5790:swizzle_mask24_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5791:swizzle_mask16_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5792:swizzle_mask16_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5793:swizzle_mask16_to_rgba_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5794:swizzle_mask16_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5795:swizzle_mask16_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5796:swizzle_mask16_to_bgra_opaque\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5797:swizzle_mask16_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20SkMasks*\2c\20unsigned\20int\2c\20unsigned\20int\29
+5798:swizzle_index_to_n32_skipZ\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5799:swizzle_index_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5800:swizzle_index_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5801:swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5802:swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5803:swizzle_grayalpha_to_a8\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5804:swizzle_gray_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5805:swizzle_gray_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5806:swizzle_cmyk_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5807:swizzle_cmyk_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5808:swizzle_cmyk_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5809:swizzle_bit_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5810:swizzle_bit_to_grayscale\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5811:swizzle_bit_to_f16\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5812:swizzle_bit_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5813:swizzle_bgr_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+5814:string_read
+5815:std::exception::what\28\29\20const
+5816:std::bad_variant_access::what\28\29\20const
+5817:std::bad_optional_access::what\28\29\20const
+5818:std::bad_array_new_length::what\28\29\20const
+5819:std::bad_alloc::what\28\29\20const
+5820:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::~unique_ptr\5babi:v160004\5d\28\29
+5821:std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>::operator=\5babi:v160004\5d\28std::__2::unique_ptr<SkEncodedInfo::ICCProfile\2c\20std::__2::default_delete<SkEncodedInfo::ICCProfile>>&&\29
+5822:std::__2::time_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20tm\20const*\2c\20char\2c\20char\29\20const
+5823:std::__2::time_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20tm\20const*\2c\20char\2c\20char\29\20const
+5824:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_year\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5825:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_weekday\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5826:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_time\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5827:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_monthname\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5828:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get_date\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5829:std::__2::time_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\2c\20char\29\20const
+5830:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_year\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5831:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_weekday\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5832:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_time\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5833:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_monthname\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5834:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get_date\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\29\20const
+5835:std::__2::time_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\2c\20char\29\20const
+5836:std::__2::numpunct<wchar_t>::~numpunct\28\29.1
+5837:std::__2::numpunct<wchar_t>::do_truename\28\29\20const
+5838:std::__2::numpunct<wchar_t>::do_grouping\28\29\20const
+5839:std::__2::numpunct<wchar_t>::do_falsename\28\29\20const
+5840:std::__2::numpunct<char>::~numpunct\28\29.1
+5841:std::__2::numpunct<char>::do_truename\28\29\20const
+5842:std::__2::numpunct<char>::do_thousands_sep\28\29\20const
+5843:std::__2::numpunct<char>::do_grouping\28\29\20const
+5844:std::__2::numpunct<char>::do_falsename\28\29\20const
+5845:std::__2::numpunct<char>::do_decimal_point\28\29\20const
+5846:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20void\20const*\29\20const
+5847:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20unsigned\20long\29\20const
+5848:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20unsigned\20long\20long\29\20const
+5849:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\29\20const
+5850:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20long\29\20const
+5851:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20double\29\20const
+5852:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20double\29\20const
+5853:std::__2::num_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20bool\29\20const
+5854:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20void\20const*\29\20const
+5855:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20unsigned\20long\29\20const
+5856:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20unsigned\20long\20long\29\20const
+5857:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\29\20const
+5858:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\20long\29\20const
+5859:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20long\20double\29\20const
+5860:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20double\29\20const
+5861:std::__2::num_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20char\2c\20bool\29\20const
+5862:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20void*&\29\20const
+5863:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20short&\29\20const
+5864:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20long\20long&\29\20const
+5865:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20long&\29\20const
+5866:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+5867:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long&\29\20const
+5868:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20float&\29\20const
+5869:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20double&\29\20const
+5870:std::__2::num_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20bool&\29\20const
+5871:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20void*&\29\20const
+5872:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20short&\29\20const
+5873:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20unsigned\20long\20long&\29\20const
+5874:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20long&\29\20const
+5875:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+5876:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long&\29\20const
+5877:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20float&\29\20const
+5878:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20double&\29\20const
+5879:std::__2::num_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20bool&\29\20const
+5880:std::__2::money_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\29\20const
+5881:std::__2::money_put<wchar_t\2c\20std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_put\28std::__2::ostreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20wchar_t\2c\20long\20double\29\20const
+5882:std::__2::money_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20char\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29\20const
+5883:std::__2::money_put<char\2c\20std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_put\28std::__2::ostreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20char\2c\20long\20double\29\20const
+5884:std::__2::money_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>&\29\20const
+5885:std::__2::money_get<wchar_t\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>>::do_get\28std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20std::__2::istreambuf_iterator<wchar_t\2c\20std::__2::char_traits<wchar_t>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+5886:std::__2::money_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>&\29\20const
+5887:std::__2::money_get<char\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>>::do_get\28std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20std::__2::istreambuf_iterator<char\2c\20std::__2::char_traits<char>>\2c\20bool\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20long\20double&\29\20const
+5888:std::__2::messages<wchar_t>::do_get\28long\2c\20int\2c\20int\2c\20std::__2::basic_string<wchar_t\2c\20std::__2::char_traits<wchar_t>\2c\20std::__2::allocator<wchar_t>>\20const&\29\20const
+5889:std::__2::messages<char>::do_get\28long\2c\20int\2c\20int\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\20const&\29\20const
+5890:std::__2::locale::id::__init\28\29
+5891:std::__2::locale::__imp::~__imp\28\29.1
+5892:std::__2::ios_base::~ios_base\28\29.1
+5893:std::__2::ctype<wchar_t>::do_widen\28char\20const*\2c\20char\20const*\2c\20wchar_t*\29\20const
+5894:std::__2::ctype<wchar_t>::do_toupper\28wchar_t\29\20const
+5895:std::__2::ctype<wchar_t>::do_toupper\28wchar_t*\2c\20wchar_t\20const*\29\20const
+5896:std::__2::ctype<wchar_t>::do_tolower\28wchar_t\29\20const
+5897:std::__2::ctype<wchar_t>::do_tolower\28wchar_t*\2c\20wchar_t\20const*\29\20const
+5898:std::__2::ctype<wchar_t>::do_scan_not\28unsigned\20long\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+5899:std::__2::ctype<wchar_t>::do_scan_is\28unsigned\20long\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+5900:std::__2::ctype<wchar_t>::do_narrow\28wchar_t\2c\20char\29\20const
+5901:std::__2::ctype<wchar_t>::do_narrow\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20char\2c\20char*\29\20const
+5902:std::__2::ctype<wchar_t>::do_is\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20unsigned\20long*\29\20const
+5903:std::__2::ctype<wchar_t>::do_is\28unsigned\20long\2c\20wchar_t\29\20const
+5904:std::__2::ctype<char>::~ctype\28\29.1
+5905:std::__2::ctype<char>::do_widen\28char\20const*\2c\20char\20const*\2c\20char*\29\20const
+5906:std::__2::ctype<char>::do_toupper\28char\29\20const
+5907:std::__2::ctype<char>::do_toupper\28char*\2c\20char\20const*\29\20const
+5908:std::__2::ctype<char>::do_tolower\28char\29\20const
+5909:std::__2::ctype<char>::do_tolower\28char*\2c\20char\20const*\29\20const
+5910:std::__2::ctype<char>::do_narrow\28char\2c\20char\29\20const
+5911:std::__2::ctype<char>::do_narrow\28char\20const*\2c\20char\20const*\2c\20char\2c\20char*\29\20const
+5912:std::__2::collate<wchar_t>::do_transform\28wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+5913:std::__2::collate<wchar_t>::do_hash\28wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+5914:std::__2::collate<wchar_t>::do_compare\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+5915:std::__2::collate<char>::do_transform\28char\20const*\2c\20char\20const*\29\20const
+5916:std::__2::collate<char>::do_hash\28char\20const*\2c\20char\20const*\29\20const
+5917:std::__2::collate<char>::do_compare\28char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\29\20const
+5918:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::~codecvt\28\29.1
+5919:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_unshift\28__mbstate_t&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+5920:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_out\28__mbstate_t&\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*&\2c\20char*\2c\20char*\2c\20char*&\29\20const
+5921:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_max_length\28\29\20const
+5922:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+5923:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_in\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*&\2c\20wchar_t*\2c\20wchar_t*\2c\20wchar_t*&\29\20const
+5924:std::__2::codecvt<wchar_t\2c\20char\2c\20__mbstate_t>::do_encoding\28\29\20const
+5925:std::__2::codecvt<char\2c\20char\2c\20__mbstate_t>::do_length\28__mbstate_t&\2c\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\29\20const
+5926:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringbuf\28\29.1
+5927:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::underflow\28\29
+5928:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::seekpos\28std::__2::fpos<__mbstate_t>\2c\20unsigned\20int\29
+5929:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::seekoff\28long\20long\2c\20std::__2::ios_base::seekdir\2c\20unsigned\20int\29
+5930:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::pbackfail\28int\29
+5931:std::__2::basic_stringbuf<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::overflow\28int\29
+5932:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::~basic_streambuf\28\29.1
+5933:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::xsputn\28char\20const*\2c\20long\29
+5934:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::xsgetn\28char*\2c\20long\29
+5935:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::uflow\28\29
+5936:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::setbuf\28char*\2c\20long\29
+5937:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::seekpos\28std::__2::fpos<__mbstate_t>\2c\20unsigned\20int\29
+5938:std::__2::basic_streambuf<char\2c\20std::__2::char_traits<char>>::seekoff\28long\20long\2c\20std::__2::ios_base::seekdir\2c\20unsigned\20int\29
+5939:std::__2::bad_function_call::what\28\29\20const
+5940:std::__2::__time_get_c_storage<wchar_t>::__x\28\29\20const
+5941:std::__2::__time_get_c_storage<wchar_t>::__weeks\28\29\20const
+5942:std::__2::__time_get_c_storage<wchar_t>::__r\28\29\20const
+5943:std::__2::__time_get_c_storage<wchar_t>::__months\28\29\20const
+5944:std::__2::__time_get_c_storage<wchar_t>::__c\28\29\20const
+5945:std::__2::__time_get_c_storage<wchar_t>::__am_pm\28\29\20const
+5946:std::__2::__time_get_c_storage<wchar_t>::__X\28\29\20const
+5947:std::__2::__time_get_c_storage<char>::__x\28\29\20const
+5948:std::__2::__time_get_c_storage<char>::__weeks\28\29\20const
+5949:std::__2::__time_get_c_storage<char>::__r\28\29\20const
+5950:std::__2::__time_get_c_storage<char>::__months\28\29\20const
+5951:std::__2::__time_get_c_storage<char>::__c\28\29\20const
+5952:std::__2::__time_get_c_storage<char>::__am_pm\28\29\20const
+5953:std::__2::__time_get_c_storage<char>::__X\28\29\20const
+5954:std::__2::__shared_ptr_pointer<_IO_FILE*\2c\20void\20\28*\29\28_IO_FILE*\29\2c\20std::__2::allocator<_IO_FILE>>::__on_zero_shared\28\29
+5955:std::__2::__shared_ptr_pointer<SkUnicode*\2c\20std::__2::default_delete<SkUnicode>\2c\20std::__2::allocator<SkUnicode>>::__on_zero_shared\28\29
+5956:std::__2::__shared_ptr_emplace<skia::textlayout::Run\2c\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\28\29.1
+5957:std::__2::__shared_ptr_emplace<skia::textlayout::Run\2c\20std::__2::allocator<skia::textlayout::Run>>::~__shared_ptr_emplace\28\29
+5958:std::__2::__shared_ptr_emplace<skia::textlayout::Run\2c\20std::__2::allocator<skia::textlayout::Run>>::__on_zero_shared\28\29
+5959:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\2c\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\28\29.1
+5960:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\2c\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::~__shared_ptr_emplace\28\29
+5961:std::__2::__shared_ptr_emplace<skia::textlayout::Run::GlyphData\2c\20std::__2::allocator<skia::textlayout::Run::GlyphData>>::__on_zero_shared\28\29
+5962:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\2c\20std::__2::allocator<SkUnicode_client::Data>>::~__shared_ptr_emplace\28\29.1
+5963:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\2c\20std::__2::allocator<SkUnicode_client::Data>>::~__shared_ptr_emplace\28\29
+5964:std::__2::__shared_ptr_emplace<SkUnicode_client::Data\2c\20std::__2::allocator<SkUnicode_client::Data>>::__on_zero_shared\28\29
+5965:std::__2::__shared_ptr_emplace<SkSL::SymbolTable\2c\20std::__2::allocator<SkSL::SymbolTable>>::~__shared_ptr_emplace\28\29.1
+5966:std::__2::__shared_ptr_emplace<SkSL::SymbolTable\2c\20std::__2::allocator<SkSL::SymbolTable>>::~__shared_ptr_emplace\28\29
+5967:std::__2::__shared_ptr_emplace<SkSL::SymbolTable\2c\20std::__2::allocator<SkSL::SymbolTable>>::__on_zero_shared\28\29
+5968:std::__2::__shared_ptr_emplace<SkSL::Context\2c\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\28\29.1
+5969:std::__2::__shared_ptr_emplace<SkSL::Context\2c\20std::__2::allocator<SkSL::Context>>::~__shared_ptr_emplace\28\29
+5970:std::__2::__shared_ptr_emplace<SkSL::Context\2c\20std::__2::allocator<SkSL::Context>>::__on_zero_shared\28\29
+5971:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+5972:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+5973:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+5974:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+5975:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+5976:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_2::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+5977:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+5978:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+5979:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+5980:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+5981:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+5982:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_1::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+5983:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+5984:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+5985:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+5986:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+5987:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+5988:std::__2::__function::__func<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+5989:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::operator\28\29\28skia::textlayout::Cluster\20const*&&\2c\20unsigned\20long&&\2c\20bool&&\29
+5990:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>*\29\20const
+5991:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_1\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_1>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28\29\20const
+5992:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::operator\28\29\28skia::textlayout::Cluster\20const*&&\2c\20unsigned\20long&&\2c\20bool&&\29
+5993:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>*\29\20const
+5994:std::__2::__function::__func<skia::textlayout::TextLine::justify\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::justify\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Cluster\20const*\2c\20unsigned\20long\2c\20bool\29>::__clone\28\29\20const
+5995:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+5996:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+5997:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+5998:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+5999:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6000:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForRange\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\2c\20std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6001:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6002:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6003:std::__2::__function::__func<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getRectsForPlaceholders\28std::__2::vector<skia::textlayout::TextBox\2c\20std::__2::allocator<skia::textlayout::TextBox>>&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6004:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6005:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6006:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6007:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6008:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6009:std::__2::__function::__func<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getMetrics\28\29\20const::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6010:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6011:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6012:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6013:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6014:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6015:std::__2::__function::__func<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::getGlyphPositionAtCoordinate\28float\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6016:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6017:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6018:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6019:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6020:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6021:std::__2::__function::__func<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::TextLine::ensureTextBlobCachePopulated\28\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6022:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6023:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6024:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6025:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6026:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6027:std::__2::__function::__func<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6028:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::operator\28\29\28skia::textlayout::Run\20const*&&\2c\20float&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float*&&\29
+6029:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28std::__2::__function::__base<bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>*\29\20const
+6030:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0>\2c\20bool\20\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29>::__clone\28\29\20const
+6031:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29
+6032:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>*\29\20const
+6033:std::__2::__function::__func<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29>::__clone\28\29\20const
+6034:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20skia::textlayout::SkRange<unsigned\20long>&&\2c\20float&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\2c\20SkPoint&&\2c\20SkPoint&&\2c\20skia::textlayout::InternalLineMetrics&&\2c\20bool&&\29
+6035:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>*\29\20const
+6036:std::__2::__function::__func<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::breakShapedTextIntoLines\28float\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPoint\2c\20SkPoint\2c\20skia::textlayout::InternalLineMetrics\2c\20bool\29>::__clone\28\29\20const
+6037:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0>\2c\20void\20\28skia::textlayout::Cluster*\29>::operator\28\29\28skia::textlayout::Cluster*&&\29
+6038:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0>\2c\20void\20\28skia::textlayout::Cluster*\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::Cluster*\29>*\29\20const
+6039:std::__2::__function::__func<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphImpl::applySpacingAndBuildClusterTable\28\29::$_0>\2c\20void\20\28skia::textlayout::Cluster*\29>::__clone\28\29\20const
+6040:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0>\2c\20void\20\28skia::textlayout::ParagraphImpl*\2c\20char\20const*\2c\20bool\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::ParagraphImpl*\2c\20char\20const*\2c\20bool\29>*\29\20const
+6041:std::__2::__function::__func<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::ParagraphCache::ParagraphCache\28\29::$_0>\2c\20void\20\28skia::textlayout::ParagraphImpl*\2c\20char\20const*\2c\20bool\29>::__clone\28\29\20const
+6042:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0>\2c\20float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\2c\20SkSpan<skia::textlayout::Block>&&\2c\20float&\2c\20unsigned\20long&&\2c\20unsigned\20char&&\29
+6043:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0>\2c\20float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>::__clone\28std::__2::__function::__base<float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>*\29\20const
+6044:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0>\2c\20float\20\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29>::__clone\28\29\20const
+6045:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::operator\28\29\28skia::textlayout::Block&&\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>&&\29
+6046:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>*\29\20const
+6047:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>\2c\20void\20\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29>::__clone\28\29\20const
+6048:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29>\2c\20skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>::operator\28\29\28sk_sp<SkTypeface>&&\29
+6049:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29>\2c\20skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>::__clone\28std::__2::__function::__base<skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>*\29\20const
+6050:std::__2::__function::__func<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::shape\28\29::$_0::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20SkSpan<skia::textlayout::Block>\2c\20float&\2c\20unsigned\20long\2c\20unsigned\20char\29\20const::'lambda'\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29::operator\28\29\28skia::textlayout::Block\2c\20skia_private::TArray<SkShaper::Feature\2c\20true>\29\20const::'lambda'\28sk_sp<SkTypeface>\29>\2c\20skia::textlayout::OneLineShaper::Resolved\20\28sk_sp<SkTypeface>\29>::__clone\28\29\20const
+6051:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\29>::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>&&\29
+6052:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\29>::__clone\28std::__2::__function::__base<void\20\28skia::textlayout::SkRange<unsigned\20long>\29>*\29\20const
+6053:std::__2::__function::__func<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0\2c\20std::__2::allocator<skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29::$_0>\2c\20void\20\28skia::textlayout::SkRange<unsigned\20long>\29>::__clone\28\29\20const
+6054:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::operator\28\29\28sktext::gpu::AtlasSubRun\20const*&&\2c\20SkPoint&&\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20sktext::gpu::RendererData&&\29
+6055:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28std::__2::__function::__base<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>*\29\20const
+6056:std::__2::__function::__func<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceDrawContext::drawGlyphRunList\28SkCanvas*\2c\20GrClip\20const*\2c\20SkMatrix\20const&\2c\20sktext::GlyphRunList\20const&\2c\20SkStrikeDeviceInfo\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28\29\20const
+6057:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::~__func\28\29.1
+6058:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::~__func\28\29
+6059:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::operator\28\29\28void*&&\2c\20void\20const*&&\29
+6060:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::destroy_deallocate\28\29
+6061:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::destroy\28\29
+6062:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::__clone\28std::__2::__function::__base<void\20\28void*\2c\20void\20const*\29>*\29\20const
+6063:std::__2::__function::__func<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SurfaceContext::transferPixels\28GrColorType\2c\20SkIRect\20const&\29::$_0>\2c\20void\20\28void*\2c\20void\20const*\29>::__clone\28\29\20const
+6064:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6065:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6066:std::__2::__function::__func<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6067:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6068:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6069:std::__2::__function::__func<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::onExecute\28GrOpFlushState*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6070:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+6071:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6072:std::__2::__function::__func<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6073:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+6074:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6075:std::__2::__function::__func<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6076:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::operator\28\29\28GrSurfaceProxy*&&\2c\20skgpu::Mipmapped&&\29
+6077:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6078:std::__2::__function::__func<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::OpsTask::addDrawOp\28GrDrawingManager*\2c\20std::__2::unique_ptr<GrOp\2c\20std::__2::default_delete<GrOp>>\2c\20bool\2c\20GrProcessorSet::Analysis\20const&\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrTextureResolveManager\2c\20GrCaps\20const&\29::$_0>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6079:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::operator\28\29\28sktext::gpu::AtlasSubRun\20const*&&\2c\20SkPoint&&\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20sktext::gpu::RendererData&&\29
+6080:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28std::__2::__function::__base<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>*\29\20const
+6081:std::__2::__function::__func<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29::$_0>\2c\20void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>::__clone\28\29\20const
+6082:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1\2c\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1>\2c\20std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>::operator\28\29\28sktext::gpu::GlyphVector*&&\2c\20int&&\2c\20int&&\2c\20skgpu::MaskFormat&&\2c\20int&&\29
+6083:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1\2c\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1>\2c\20std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>::__clone\28std::__2::__function::__base<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>*\29\20const
+6084:std::__2::__function::__func<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1\2c\20std::__2::allocator<skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29::$_1>\2c\20std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>::__clone\28\29\20const
+6085:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0>\2c\20bool\20\28GrSurfaceProxy\20const*\29>::operator\28\29\28GrSurfaceProxy\20const*&&\29
+6086:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0>\2c\20bool\20\28GrSurfaceProxy\20const*\29>::__clone\28std::__2::__function::__base<bool\20\28GrSurfaceProxy\20const*\29>*\29\20const
+6087:std::__2::__function::__func<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0\2c\20std::__2::allocator<skgpu::ganesh::AtlasPathRenderer::makeAtlasClipEffect\28skgpu::ganesh::SurfaceDrawContext\20const*\2c\20GrOp\20const*\2c\20std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>\2c\20SkIRect\20const&\2c\20SkMatrix\20const&\2c\20SkPath\20const&\29::$_0>\2c\20bool\20\28GrSurfaceProxy\20const*\29>::__clone\28\29\20const
+6088:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29\2c\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29>\2c\20void\20\28int\2c\20char\20const*\29>::operator\28\29\28int&&\2c\20char\20const*&&\29
+6089:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29\2c\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20char\20const*\29>*\29\20const
+6090:std::__2::__function::__func<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29\2c\20std::__2::allocator<skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29::'lambda'\28int\2c\20char\20const*\29>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28\29\20const
+6091:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6092:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrOp>\28GrOp\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6093:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28std::__2::__function::__base<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>*\29\20const
+6094:std::__2::__function::__func<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29\2c\20std::__2::allocator<bool\20\28anonymous\20namespace\29::refs_atlas<GrFragmentProcessor>\28GrFragmentProcessor\20const*\2c\20GrSurfaceProxy\20const*\29::'lambda'\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\2c\20void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>::__clone\28\29\20const
+6095:std::__2::__function::__func<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6096:std::__2::__function::__func<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6097:std::__2::__function::__func<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::render_sw_mask\28GrRecordingContext*\2c\20SkIRect\20const&\2c\20skgpu::ganesh::ClipStack::Element\20const**\2c\20int\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6098:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1>\2c\20void\20\28\29>::operator\28\29\28\29
+6099:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6100:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_1>\2c\20void\20\28\29>::__clone\28\29\20const
+6101:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6102:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint_bounds\28SkMatrix*\2c\20SkRect*\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6103:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6104:std::__2::__function::__func<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::colrv1_traverse_paint\28SkCanvas*\2c\20SkSpan<unsigned\20int>\20const&\2c\20unsigned\20int\2c\20FT_FaceRec_*\2c\20FT_Opaque_Paint_\2c\20skia_private::THashSet<FT_Opaque_Paint_\2c\20\28anonymous\20namespace\29::OpaquePaintHasher>*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6105:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6106:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6107:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6108:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6109:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6110:std::__2::__function::__func<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6111:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6112:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6113:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::MeshGP\28sk_sp<SkMeshSpecification>\2c\20sk_sp<GrColorSpaceXform>\2c\20SkMatrix\20const&\2c\20std::__2::optional<SkRGBA4f<\28SkAlphaType\292>>\20const&\2c\20bool\2c\20sk_sp<SkData\20const>\2c\20SkSpan<std::__2::unique_ptr<GrFragmentProcessor\2c\20std::__2::default_delete<GrFragmentProcessor>>>\29::'lambda'\28GrTextureEffect\20const&\29>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6114:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6115:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6116:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6117:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6118:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6119:std::__2::__function::__func<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29\2c\20std::__2::allocator<\28anonymous\20namespace\29::MeshGP::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29::'lambda'\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6120:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::~__func\28\29.1
+6121:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::~__func\28\29
+6122:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6123:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::destroy_deallocate\28\29
+6124:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::destroy\28\29
+6125:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6126:std::__2::__function::__func<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0\2c\20std::__2::allocator<SkTaskGroup::add\28std::__2::function<void\20\28\29>\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6127:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0\2c\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0>\2c\20void\20\28int\2c\20char\20const*\29>::operator\28\29\28int&&\2c\20char\20const*&&\29
+6128:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0\2c\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20char\20const*\29>*\29\20const
+6129:std::__2::__function::__func<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0\2c\20std::__2::allocator<SkShaderUtils::BuildShaderErrorMessage\28char\20const*\2c\20char\20const*\29::$_0>\2c\20void\20\28int\2c\20char\20const*\29>::__clone\28\29\20const
+6130:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::operator\28\29\28unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\29
+6131:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base<void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>*\29\20const
+6132:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_1\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_1>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+6133:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_0\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_0>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base<void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>*\29\20const
+6134:std::__2::__function::__func<SkRasterPipeline::compile\28\29\20const::$_0\2c\20std::__2::allocator<SkRasterPipeline::compile\28\29\20const::$_0>\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+6135:std::__2::__function::__func<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0\2c\20std::__2::allocator<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0>\2c\20void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>::operator\28\29\28SkVertices\20const*&&\2c\20SkBlendMode&&\2c\20SkPaint\20const&\2c\20float&&\2c\20float&&\2c\20bool&&\29
+6136:std::__2::__function::__func<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0\2c\20std::__2::allocator<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0>\2c\20void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>::__clone\28std::__2::__function::__base<void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>*\29\20const
+6137:std::__2::__function::__func<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0\2c\20std::__2::allocator<SkDevice::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29::$_0>\2c\20void\20\28SkVertices\20const*\2c\20SkBlendMode\2c\20SkPaint\20const&\2c\20float\2c\20float\2c\20bool\29>::__clone\28\29\20const
+6138:std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::operator\28\29\28SkIRect\20const&\29
+6139:std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28SkIRect\20const&\29>*\29\20const
+6140:std::__2::__function::__func<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0\2c\20std::__2::allocator<SkBlitter::blitRegion\28SkRegion\20const&\29::$_0>\2c\20void\20\28SkIRect\20const&\29>::__clone\28\29\20const
+6141:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0\2c\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0>\2c\20SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>::operator\28\29\28SkImageInfo\20const&\2c\20void*&&\2c\20unsigned\20long&&\2c\20SkCodec::Options\20const&\2c\20int&&\29
+6142:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0\2c\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0>\2c\20SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>::__clone\28std::__2::__function::__base<SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>*\29\20const
+6143:std::__2::__function::__func<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0\2c\20std::__2::allocator<SkAndroidCodec::getAndroidPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkAndroidCodec::AndroidOptions\20const*\29::$_0>\2c\20SkCodec::Result\20\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int\29>::__clone\28\29\20const
+6144:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29.1
+6145:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29
+6146:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6147:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy_deallocate\28\29
+6148:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy\28\29
+6149:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6150:std::__2::__function::__func<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0\2c\20std::__2::allocator<GrThreadSafeCache::CreateLazyView\28GrDirectContext*\2c\20GrColorType\2c\20SkISize\2c\20GrSurfaceOrigin\2c\20SkBackingFit\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6151:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29.1
+6152:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29
+6153:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6154:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy_deallocate\28\29
+6155:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy\28\29
+6156:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6157:std::__2::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createNonMippedProxyFromBitmap\28SkBitmap\20const&\2c\20SkBackingFit\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6158:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29.1
+6159:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::~__func\28\29
+6160:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6161:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy_deallocate\28\29
+6162:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::destroy\28\29
+6163:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6164:std::__2::__function::__func<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0\2c\20std::__2::allocator<GrProxyProvider::createMippedProxyFromBitmap\28SkBitmap\20const&\2c\20skgpu::Budgeted\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6165:std::__2::__function::__func<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0\2c\20std::__2::allocator<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0>\2c\20bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>::operator\28\29\28GrTextureProxy*&&\2c\20SkIRect&&\2c\20GrColorType&&\2c\20void\20const*&&\2c\20unsigned\20long&&\29
+6166:std::__2::__function::__func<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0\2c\20std::__2::allocator<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0>\2c\20bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>*\29\20const
+6167:std::__2::__function::__func<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0\2c\20std::__2::allocator<GrOpFlushState::doUpload\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&\2c\20bool\29::$_0>\2c\20bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>::__clone\28\29\20const
+6168:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0\2c\20std::__2::allocator<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0>\2c\20void\20\28GrBackendTexture\29>::operator\28\29\28GrBackendTexture&&\29
+6169:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0\2c\20std::__2::allocator<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0>\2c\20void\20\28GrBackendTexture\29>::__clone\28std::__2::__function::__base<void\20\28GrBackendTexture\29>*\29\20const
+6170:std::__2::__function::__func<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0\2c\20std::__2::allocator<GrGLTexture::onStealBackendTexture\28GrBackendTexture*\2c\20std::__2::function<void\20\28GrBackendTexture\29>*\29::$_0>\2c\20void\20\28GrBackendTexture\29>::__clone\28\29\20const
+6171:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0\2c\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6172:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0\2c\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6173:std::__2::__function::__func<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0\2c\20std::__2::allocator<GrGLSLProgramBuilder::emitTextureSamplersForFPs\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\2c\20int*\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6174:std::__2::__function::__func<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::operator\28\29\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29
+6175:std::__2::__function::__func<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28std::__2::__function::__base<void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>*\29\20const
+6176:std::__2::__function::__func<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::updateUniforms\28GrRenderTarget\20const*\2c\20GrProgramInfo\20const&\29::$_0>\2c\20void\20\28GrFragmentProcessor\20const&\2c\20GrFragmentProcessor::ProgramImpl&\29>::__clone\28\29\20const
+6177:std::__2::__function::__func<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6178:std::__2::__function::__func<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6179:std::__2::__function::__func<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0\2c\20std::__2::allocator<GrGLProgram::bindTextures\28GrGeometryProcessor\20const&\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPipeline\20const&\29::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6180:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0\2c\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0>\2c\20void\20\28\29>::operator\28\29\28\29
+6181:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0\2c\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0>\2c\20void\20\28\29>::__clone\28std::__2::__function::__base<void\20\28\29>*\29\20const
+6182:std::__2::__function::__func<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0\2c\20std::__2::allocator<GrGLGpu::createRenderTargetObjects\28GrGLTexture::Desc\20const&\2c\20int\2c\20GrGLRenderTarget::IDs*\29::$_0>\2c\20void\20\28\29>::__clone\28\29\20const
+6183:std::__2::__function::__func<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0\2c\20std::__2::allocator<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::operator\28\29\28GrTextureEffect\20const&\29
+6184:std::__2::__function::__func<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0\2c\20std::__2::allocator<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base<void\20\28GrTextureEffect\20const&\29>*\29\20const
+6185:std::__2::__function::__func<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0\2c\20std::__2::allocator<GrFragmentProcessor::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+6186:std::__2::__function::__func<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::operator\28\29\28GrResourceProvider*&&\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29
+6187:std::__2::__function::__func<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28std::__2::__function::__base<GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>*\29\20const
+6188:std::__2::__function::__func<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0\2c\20std::__2::allocator<GrDynamicAtlas::reset\28SkISize\2c\20GrCaps\20const&\29::$_0>\2c\20GrSurfaceProxy::LazyCallbackResult\20\28GrResourceProvider*\2c\20GrSurfaceProxy::LazySurfaceDesc\20const&\29>::__clone\28\29\20const
+6189:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29.1
+6190:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29
+6191:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+6192:std::__2::__function::__func<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDrawOpAtlas::updatePlot\28GrDeferredUploadTarget*\2c\20skgpu::AtlasLocator*\2c\20skgpu::Plot*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+6193:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29.1
+6194:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::~__func\28\29
+6195:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+6196:std::__2::__function::__func<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0\2c\20std::__2::allocator<GrDrawOpAtlas::addToAtlas\28GrResourceProvider*\2c\20GrDeferredUploadTarget*\2c\20int\2c\20int\2c\20void\20const*\2c\20skgpu::AtlasLocator*\29::$_0>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+6197:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::operator\28\29\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29
+6198:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28std::__2::__function::__base<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>*\29\20const
+6199:std::__2::__function::__func<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29\2c\20std::__2::allocator<GrDeferredProxyUploader::scheduleUpload\28GrOpFlushState*\2c\20GrTextureProxy*\29::'lambda'\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>::__clone\28\29\20const
+6200:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::operator\28\29\28int&&\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*&&\29
+6201:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28std::__2::__function::__base<void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>*\29\20const
+6202:std::__2::__function::__func<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0\2c\20std::__2::allocator<GetShapedLines\28skia::textlayout::Paragraph&\29::$_0>\2c\20void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>::__clone\28\29\20const
+6203:start_pass_upsample
+6204:start_pass_phuff_decoder
+6205:start_pass_merged_upsample
+6206:start_pass_main
+6207:start_pass_huff_decoder
+6208:start_pass_dpost
+6209:start_pass_2_quant
+6210:start_pass_1_quant
+6211:start_pass
+6212:start_output_pass
+6213:start_input_pass.1
+6214:stackSave
+6215:stackRestore
+6216:srgb_to_hwb\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+6217:srgb_to_hsl\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+6218:srcover_p\28unsigned\20char\2c\20unsigned\20char\29
+6219:sn_write
+6220:sktext::gpu::post_purge_blob_message\28unsigned\20int\2c\20unsigned\20int\29
+6221:sktext::gpu::VertexFiller::isLCD\28\29\20const
+6222:sktext::gpu::TextBlob::~TextBlob\28\29.1
+6223:sktext::gpu::TextBlob::~TextBlob\28\29
+6224:sktext::gpu::SubRun::~SubRun\28\29
+6225:sktext::gpu::SlugImpl::~SlugImpl\28\29.1
+6226:sktext::gpu::SlugImpl::~SlugImpl\28\29
+6227:sktext::gpu::SlugImpl::sourceBounds\28\29\20const
+6228:sktext::gpu::SlugImpl::sourceBoundsWithOrigin\28\29\20const
+6229:sktext::gpu::SlugImpl::doFlatten\28SkWriteBuffer&\29\20const
+6230:sktext::gpu::SDFMaskFilterImpl::getTypeName\28\29\20const
+6231:sktext::gpu::SDFMaskFilterImpl::filterMask\28SkMaskBuilder*\2c\20SkMask\20const&\2c\20SkMatrix\20const&\2c\20SkIPoint*\29\20const
+6232:sktext::gpu::SDFMaskFilterImpl::computeFastBounds\28SkRect\20const&\2c\20SkRect*\29\20const
+6233:skip_variable
+6234:skif::\28anonymous\20namespace\29::RasterBackend::~RasterBackend\28\29
+6235:skif::\28anonymous\20namespace\29::RasterBackend::makeImage\28SkIRect\20const&\2c\20sk_sp<SkImage>\29\20const
+6236:skif::\28anonymous\20namespace\29::RasterBackend::makeDevice\28SkISize\2c\20sk_sp<SkColorSpace>\2c\20SkSurfaceProps\20const*\29\20const
+6237:skif::\28anonymous\20namespace\29::RasterBackend::getCachedBitmap\28SkBitmap\20const&\29\20const
+6238:skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.1
+6239:skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29
+6240:skif::\28anonymous\20namespace\29::GaneshBackend::makeImage\28SkIRect\20const&\2c\20sk_sp<SkImage>\29\20const
+6241:skif::\28anonymous\20namespace\29::GaneshBackend::makeDevice\28SkISize\2c\20sk_sp<SkColorSpace>\2c\20SkSurfaceProps\20const*\29\20const
+6242:skif::\28anonymous\20namespace\29::GaneshBackend::getCachedBitmap\28SkBitmap\20const&\29\20const
+6243:skif::\28anonymous\20namespace\29::GaneshBackend::findAlgorithm\28SkSize\2c\20SkTileMode\2c\20SkColorType\29\20const
+6244:skia_png_zalloc
+6245:skia_png_write_rows
+6246:skia_png_write_info
+6247:skia_png_write_end
+6248:skia_png_user_version_check
+6249:skia_png_set_text
+6250:skia_png_set_sRGB
+6251:skia_png_set_keep_unknown_chunks
+6252:skia_png_set_iCCP
+6253:skia_png_set_gray_to_rgb
+6254:skia_png_set_filter
+6255:skia_png_set_filler
+6256:skia_png_read_update_info
+6257:skia_png_read_info
+6258:skia_png_read_image
+6259:skia_png_read_end
+6260:skia_png_push_fill_buffer
+6261:skia_png_process_data
+6262:skia_png_default_write_data
+6263:skia_png_default_read_data
+6264:skia_png_default_flush
+6265:skia_png_create_read_struct
+6266:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\28\29.1
+6267:skia::textlayout::TypefaceFontStyleSet::~TypefaceFontStyleSet\28\29
+6268:skia::textlayout::TypefaceFontStyleSet::getStyle\28int\2c\20SkFontStyle*\2c\20SkString*\29
+6269:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\28\29.1
+6270:skia::textlayout::TypefaceFontProvider::~TypefaceFontProvider\28\29
+6271:skia::textlayout::TypefaceFontProvider::onMatchFamily\28char\20const*\29\20const
+6272:skia::textlayout::TypefaceFontProvider::onGetFamilyName\28int\2c\20SkString*\29\20const
+6273:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::~ShapeHandler\28\29.1
+6274:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::~ShapeHandler\28\29
+6275:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::runBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6276:skia::textlayout::TextLine::shapeEllipsis\28SkString\20const&\2c\20skia::textlayout::Cluster\20const*\29::ShapeHandler::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6277:skia::textlayout::SkRange<unsigned\20long>*\20emscripten::internal::raw_constructor<skia::textlayout::SkRange<unsigned\20long>>\28\29
+6278:skia::textlayout::PositionWithAffinity*\20emscripten::internal::raw_constructor<skia::textlayout::PositionWithAffinity>\28\29
+6279:skia::textlayout::ParagraphImpl::~ParagraphImpl\28\29.1
+6280:skia::textlayout::ParagraphImpl::visit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::VisitorInfo\20const*\29>\20const&\29
+6281:skia::textlayout::ParagraphImpl::updateTextAlign\28skia::textlayout::TextAlign\29
+6282:skia::textlayout::ParagraphImpl::updateForegroundPaint\28unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\29
+6283:skia::textlayout::ParagraphImpl::updateFontSize\28unsigned\20long\2c\20unsigned\20long\2c\20float\29
+6284:skia::textlayout::ParagraphImpl::updateBackgroundPaint\28unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\29
+6285:skia::textlayout::ParagraphImpl::unresolvedGlyphs\28\29
+6286:skia::textlayout::ParagraphImpl::unresolvedCodepoints\28\29
+6287:skia::textlayout::ParagraphImpl::paint\28skia::textlayout::ParagraphPainter*\2c\20float\2c\20float\29
+6288:skia::textlayout::ParagraphImpl::paint\28SkCanvas*\2c\20float\2c\20float\29
+6289:skia::textlayout::ParagraphImpl::markDirty\28\29
+6290:skia::textlayout::ParagraphImpl::lineNumber\28\29
+6291:skia::textlayout::ParagraphImpl::layout\28float\29
+6292:skia::textlayout::ParagraphImpl::getWordBoundary\28unsigned\20int\29
+6293:skia::textlayout::ParagraphImpl::getRectsForRange\28unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29
+6294:skia::textlayout::ParagraphImpl::getRectsForPlaceholders\28\29
+6295:skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29::$_0::operator\28\29\28skia::textlayout::Run\20const*\2c\20float\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20float*\29\20const::'lambda'\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29::operator\28\29\28skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::TextStyle\20const&\2c\20skia::textlayout::TextLine::ClipContext\20const&\29\20const::'lambda'\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29::__invoke\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29
+6296:skia::textlayout::ParagraphImpl::getPath\28int\2c\20SkPath*\29
+6297:skia::textlayout::ParagraphImpl::getLineNumberAt\28unsigned\20long\29\20const
+6298:skia::textlayout::ParagraphImpl::getLineNumberAtUTF16Offset\28unsigned\20long\29
+6299:skia::textlayout::ParagraphImpl::getLineMetrics\28std::__2::vector<skia::textlayout::LineMetrics\2c\20std::__2::allocator<skia::textlayout::LineMetrics>>&\29
+6300:skia::textlayout::ParagraphImpl::getLineMetricsAt\28int\2c\20skia::textlayout::LineMetrics*\29\20const
+6301:skia::textlayout::ParagraphImpl::getGlyphPositionAtCoordinate\28float\2c\20float\29
+6302:skia::textlayout::ParagraphImpl::getFonts\28\29\20const
+6303:skia::textlayout::ParagraphImpl::getFontAt\28unsigned\20long\29\20const
+6304:skia::textlayout::ParagraphImpl::getFontAtUTF16Offset\28unsigned\20long\29
+6305:skia::textlayout::ParagraphImpl::getClosestUTF16GlyphInfoAt\28float\2c\20float\2c\20skia::textlayout::Paragraph::GlyphInfo*\29
+6306:skia::textlayout::ParagraphImpl::getClosestGlyphClusterAt\28float\2c\20float\2c\20skia::textlayout::Paragraph::GlyphClusterInfo*\29
+6307:skia::textlayout::ParagraphImpl::getActualTextRange\28int\2c\20bool\29\20const
+6308:skia::textlayout::ParagraphImpl::extendedVisit\28std::__2::function<void\20\28int\2c\20skia::textlayout::Paragraph::ExtendedVisitorInfo\20const*\29>\20const&\29
+6309:skia::textlayout::ParagraphImpl::containsEmoji\28SkTextBlob*\29
+6310:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\28SkTextBlob*\29::$_0::__invoke\28SkPath\20const*\2c\20SkMatrix\20const&\2c\20void*\29
+6311:skia::textlayout::ParagraphImpl::containsColorFontOrBitmap\28SkTextBlob*\29
+6312:skia::textlayout::ParagraphBuilderImpl::~ParagraphBuilderImpl\28\29.1
+6313:skia::textlayout::ParagraphBuilderImpl::setWordsUtf8\28std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>\29
+6314:skia::textlayout::ParagraphBuilderImpl::setWordsUtf16\28std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>\29
+6315:skia::textlayout::ParagraphBuilderImpl::setLineBreaksUtf8\28std::__2::vector<SkUnicode::LineBreakBefore\2c\20std::__2::allocator<SkUnicode::LineBreakBefore>>\29
+6316:skia::textlayout::ParagraphBuilderImpl::setLineBreaksUtf16\28std::__2::vector<SkUnicode::LineBreakBefore\2c\20std::__2::allocator<SkUnicode::LineBreakBefore>>\29
+6317:skia::textlayout::ParagraphBuilderImpl::setGraphemeBreaksUtf8\28std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>\29
+6318:skia::textlayout::ParagraphBuilderImpl::setGraphemeBreaksUtf16\28std::__2::vector<unsigned\20long\2c\20std::__2::allocator<unsigned\20long>>\29
+6319:skia::textlayout::ParagraphBuilderImpl::pushStyle\28skia::textlayout::TextStyle\20const&\29
+6320:skia::textlayout::ParagraphBuilderImpl::pop\28\29
+6321:skia::textlayout::ParagraphBuilderImpl::peekStyle\28\29
+6322:skia::textlayout::ParagraphBuilderImpl::getText\28\29
+6323:skia::textlayout::ParagraphBuilderImpl::getParagraphStyle\28\29\20const
+6324:skia::textlayout::ParagraphBuilderImpl::addText\28std::__2::basic_string<char16_t\2c\20std::__2::char_traits<char16_t>\2c\20std::__2::allocator<char16_t>>\20const&\29
+6325:skia::textlayout::ParagraphBuilderImpl::addText\28char\20const*\2c\20unsigned\20long\29
+6326:skia::textlayout::ParagraphBuilderImpl::addText\28char\20const*\29
+6327:skia::textlayout::ParagraphBuilderImpl::addPlaceholder\28skia::textlayout::PlaceholderStyle\20const&\29
+6328:skia::textlayout::ParagraphBuilderImpl::SetUnicode\28std::__2::unique_ptr<SkUnicode\2c\20std::__2::default_delete<SkUnicode>>\29
+6329:skia::textlayout::ParagraphBuilderImpl::Reset\28\29
+6330:skia::textlayout::ParagraphBuilderImpl::RequiresClientICU\28\29
+6331:skia::textlayout::ParagraphBuilderImpl::Build\28\29
+6332:skia::textlayout::Paragraph::getMinIntrinsicWidth\28\29
+6333:skia::textlayout::Paragraph::getMaxWidth\28\29
+6334:skia::textlayout::Paragraph::getMaxIntrinsicWidth\28\29
+6335:skia::textlayout::Paragraph::getLongestLine\28\29
+6336:skia::textlayout::Paragraph::getIdeographicBaseline\28\29
+6337:skia::textlayout::Paragraph::getHeight\28\29
+6338:skia::textlayout::Paragraph::getAlphabeticBaseline\28\29
+6339:skia::textlayout::Paragraph::didExceedMaxLines\28\29
+6340:skia::textlayout::Paragraph::FontInfo::~FontInfo\28\29.1
+6341:skia::textlayout::Paragraph::FontInfo::~FontInfo\28\29
+6342:skia::textlayout::OneLineShaper::~OneLineShaper\28\29.1
+6343:skia::textlayout::OneLineShaper::runBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6344:skia::textlayout::OneLineShaper::commitRunBuffer\28SkShaper::RunHandler::RunInfo\20const&\29
+6345:skia::textlayout::LangIterator::~LangIterator\28\29.1
+6346:skia::textlayout::LangIterator::~LangIterator\28\29
+6347:skia::textlayout::LangIterator::endOfCurrentRun\28\29\20const
+6348:skia::textlayout::LangIterator::currentLanguage\28\29\20const
+6349:skia::textlayout::LangIterator::consume\28\29
+6350:skia::textlayout::LangIterator::atEnd\28\29\20const
+6351:skia::textlayout::FontCollection::~FontCollection\28\29.1
+6352:skia::textlayout::CanvasParagraphPainter::translate\28float\2c\20float\29
+6353:skia::textlayout::CanvasParagraphPainter::save\28\29
+6354:skia::textlayout::CanvasParagraphPainter::restore\28\29
+6355:skia::textlayout::CanvasParagraphPainter::drawTextShadow\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20unsigned\20int\2c\20float\29
+6356:skia::textlayout::CanvasParagraphPainter::drawTextBlob\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20std::__2::variant<SkPaint\2c\20int>\20const&\29
+6357:skia::textlayout::CanvasParagraphPainter::drawRect\28SkRect\20const&\2c\20std::__2::variant<SkPaint\2c\20int>\20const&\29
+6358:skia::textlayout::CanvasParagraphPainter::drawPath\28SkPath\20const&\2c\20skia::textlayout::ParagraphPainter::DecorationStyle\20const&\29
+6359:skia::textlayout::CanvasParagraphPainter::drawLine\28float\2c\20float\2c\20float\2c\20float\2c\20skia::textlayout::ParagraphPainter::DecorationStyle\20const&\29
+6360:skia::textlayout::CanvasParagraphPainter::drawFilledRect\28SkRect\20const&\2c\20skia::textlayout::ParagraphPainter::DecorationStyle\20const&\29
+6361:skia::textlayout::CanvasParagraphPainter::clipRect\28SkRect\20const&\29
+6362:skgpu::tess::FixedCountWedges::WriteVertexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6363:skgpu::tess::FixedCountWedges::WriteIndexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6364:skgpu::tess::FixedCountStrokes::WriteVertexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6365:skgpu::tess::FixedCountCurves::WriteVertexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6366:skgpu::tess::FixedCountCurves::WriteIndexBuffer\28skgpu::VertexWriter\2c\20unsigned\20long\29
+6367:skgpu::ganesh::texture_proxy_view_from_planes\28GrRecordingContext*\2c\20SkImage_Lazy\20const*\2c\20skgpu::Budgeted\29::$_0::__invoke\28void*\2c\20void*\29
+6368:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::~SmallPathOp\28\29.1
+6369:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6370:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6371:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6372:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6373:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::name\28\29\20const
+6374:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::fixedFunctionFlags\28\29\20const
+6375:skgpu::ganesh::\28anonymous\20namespace\29::SmallPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6376:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::name\28\29\20const
+6377:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+6378:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6379:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6380:skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+6381:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::~HullShader\28\29.1
+6382:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::~HullShader\28\29
+6383:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::name\28\29\20const
+6384:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::emitVertexCode\28GrShaderCaps\20const&\2c\20GrPathTessellationShader\20const&\2c\20GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6385:skgpu::ganesh::\28anonymous\20namespace\29::HullShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6386:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\28\29.1
+6387:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::~AAFlatteningConvexPathOp\28\29
+6388:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6389:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6390:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6391:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6392:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6393:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::name\28\29\20const
+6394:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::fixedFunctionFlags\28\29\20const
+6395:skgpu::ganesh::\28anonymous\20namespace\29::AAFlatteningConvexPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6396:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::~AAConvexPathOp\28\29.1
+6397:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::~AAConvexPathOp\28\29
+6398:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6399:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6400:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6401:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6402:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6403:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::name\28\29\20const
+6404:skgpu::ganesh::\28anonymous\20namespace\29::AAConvexPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6405:skgpu::ganesh::TriangulatingPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6406:skgpu::ganesh::TriangulatingPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6407:skgpu::ganesh::TriangulatingPathRenderer::name\28\29\20const
+6408:skgpu::ganesh::TessellationPathRenderer::onStencilPath\28skgpu::ganesh::PathRenderer::StencilPathArgs\20const&\29
+6409:skgpu::ganesh::TessellationPathRenderer::onGetStencilSupport\28GrStyledShape\20const&\29\20const
+6410:skgpu::ganesh::TessellationPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6411:skgpu::ganesh::TessellationPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6412:skgpu::ganesh::TessellationPathRenderer::name\28\29\20const
+6413:skgpu::ganesh::SurfaceDrawContext::willReplaceOpsTask\28skgpu::ganesh::OpsTask*\2c\20skgpu::ganesh::OpsTask*\29
+6414:skgpu::ganesh::SurfaceDrawContext::canDiscardPreviousOpsOnFullClear\28\29\20const
+6415:skgpu::ganesh::SurfaceContext::~SurfaceContext\28\29.1
+6416:skgpu::ganesh::SurfaceContext::asyncRescaleAndReadPixelsYUV420\28GrDirectContext*\2c\20SkYUVColorSpace\2c\20bool\2c\20sk_sp<SkColorSpace>\2c\20SkIRect\20const&\2c\20SkISize\2c\20SkImage::RescaleGamma\2c\20SkImage::RescaleMode\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::$_0::__invoke\28void*\29
+6417:skgpu::ganesh::SurfaceContext::asyncReadPixels\28GrDirectContext*\2c\20SkIRect\20const&\2c\20SkColorType\2c\20void\20\28*\29\28void*\2c\20std::__2::unique_ptr<SkImage::AsyncReadResult\20const\2c\20std::__2::default_delete<SkImage::AsyncReadResult\20const>>\29\2c\20void*\29::$_0::__invoke\28void*\29
+6418:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\28\29.1
+6419:skgpu::ganesh::StrokeTessellateOp::~StrokeTessellateOp\28\29
+6420:skgpu::ganesh::StrokeTessellateOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6421:skgpu::ganesh::StrokeTessellateOp::usesStencil\28\29\20const
+6422:skgpu::ganesh::StrokeTessellateOp::onPrepare\28GrOpFlushState*\29
+6423:skgpu::ganesh::StrokeTessellateOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6424:skgpu::ganesh::StrokeTessellateOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6425:skgpu::ganesh::StrokeTessellateOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6426:skgpu::ganesh::StrokeTessellateOp::name\28\29\20const
+6427:skgpu::ganesh::StrokeTessellateOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6428:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\28\29.1
+6429:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::~NonAAStrokeRectOp\28\29
+6430:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6431:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::programInfo\28\29
+6432:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6433:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6434:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6435:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::name\28\29\20const
+6436:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::NonAAStrokeRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6437:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::~AAStrokeRectOp\28\29.1
+6438:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::~AAStrokeRectOp\28\29
+6439:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6440:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::programInfo\28\29
+6441:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6442:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6443:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6444:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6445:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::name\28\29\20const
+6446:skgpu::ganesh::StrokeRectOp::\28anonymous\20namespace\29::AAStrokeRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6447:skgpu::ganesh::StencilClip::~StencilClip\28\29.1
+6448:skgpu::ganesh::StencilClip::~StencilClip\28\29
+6449:skgpu::ganesh::StencilClip::preApply\28SkRect\20const&\2c\20GrAA\29\20const
+6450:skgpu::ganesh::StencilClip::getConservativeBounds\28\29\20const
+6451:skgpu::ganesh::StencilClip::apply\28GrAppliedHardClip*\2c\20SkIRect*\29\20const
+6452:skgpu::ganesh::SoftwarePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6453:skgpu::ganesh::SoftwarePathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6454:skgpu::ganesh::SoftwarePathRenderer::name\28\29\20const
+6455:skgpu::ganesh::SmallPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6456:skgpu::ganesh::SmallPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6457:skgpu::ganesh::SmallPathRenderer::name\28\29\20const
+6458:skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29.1
+6459:skgpu::ganesh::SmallPathAtlasMgr::preFlush\28GrOnFlushResourceProvider*\29
+6460:skgpu::ganesh::SmallPathAtlasMgr::postFlush\28skgpu::AtlasToken\29
+6461:skgpu::ganesh::SmallPathAtlasMgr::evict\28skgpu::PlotLocator\29
+6462:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::~RegionOpImpl\28\29.1
+6463:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::~RegionOpImpl\28\29
+6464:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6465:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::programInfo\28\29
+6466:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+6467:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6468:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6469:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6470:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::name\28\29\20const
+6471:skgpu::ganesh::RegionOp::\28anonymous\20namespace\29::RegionOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6472:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_quad_generic\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6473:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_uv_strict\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6474:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_uv\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6475:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_cov_uv_strict\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6476:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_cov_uv\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6477:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_color_uv_strict\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6478:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_color_uv\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6479:skgpu::ganesh::QuadPerEdgeAA::\28anonymous\20namespace\29::write_2d_color\28skgpu::VertexWriter*\2c\20skgpu::ganesh::QuadPerEdgeAA::VertexSpec\20const&\2c\20GrQuad\20const*\2c\20GrQuad\20const*\2c\20float\20const*\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRect\20const&\2c\20SkRect\20const&\29
+6480:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\28\29.1
+6481:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::~QuadPerEdgeAAGeometryProcessor\28\29
+6482:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::onTextureSampler\28int\29\20const
+6483:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::name\28\29\20const
+6484:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+6485:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6486:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6487:skgpu::ganesh::QuadPerEdgeAA::QuadPerEdgeAAGeometryProcessor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+6488:skgpu::ganesh::PathWedgeTessellator::prepare\28GrMeshDrawTarget*\2c\20SkMatrix\20const&\2c\20skgpu::ganesh::PathTessellator::PathDrawList\20const&\2c\20int\29
+6489:skgpu::ganesh::PathTessellator::~PathTessellator\28\29
+6490:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\28\29.1
+6491:skgpu::ganesh::PathTessellateOp::~PathTessellateOp\28\29
+6492:skgpu::ganesh::PathTessellateOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6493:skgpu::ganesh::PathTessellateOp::usesStencil\28\29\20const
+6494:skgpu::ganesh::PathTessellateOp::onPrepare\28GrOpFlushState*\29
+6495:skgpu::ganesh::PathTessellateOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6496:skgpu::ganesh::PathTessellateOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6497:skgpu::ganesh::PathTessellateOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6498:skgpu::ganesh::PathTessellateOp::name\28\29\20const
+6499:skgpu::ganesh::PathTessellateOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6500:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\28\29.1
+6501:skgpu::ganesh::PathStencilCoverOp::~PathStencilCoverOp\28\29
+6502:skgpu::ganesh::PathStencilCoverOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6503:skgpu::ganesh::PathStencilCoverOp::onPrepare\28GrOpFlushState*\29
+6504:skgpu::ganesh::PathStencilCoverOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6505:skgpu::ganesh::PathStencilCoverOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6506:skgpu::ganesh::PathStencilCoverOp::name\28\29\20const
+6507:skgpu::ganesh::PathStencilCoverOp::fixedFunctionFlags\28\29\20const
+6508:skgpu::ganesh::PathStencilCoverOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6509:skgpu::ganesh::PathRenderer::onStencilPath\28skgpu::ganesh::PathRenderer::StencilPathArgs\20const&\29
+6510:skgpu::ganesh::PathRenderer::onGetStencilSupport\28GrStyledShape\20const&\29\20const
+6511:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\28\29.1
+6512:skgpu::ganesh::PathInnerTriangulateOp::~PathInnerTriangulateOp\28\29
+6513:skgpu::ganesh::PathInnerTriangulateOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6514:skgpu::ganesh::PathInnerTriangulateOp::onPrepare\28GrOpFlushState*\29
+6515:skgpu::ganesh::PathInnerTriangulateOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6516:skgpu::ganesh::PathInnerTriangulateOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6517:skgpu::ganesh::PathInnerTriangulateOp::name\28\29\20const
+6518:skgpu::ganesh::PathInnerTriangulateOp::fixedFunctionFlags\28\29\20const
+6519:skgpu::ganesh::PathInnerTriangulateOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6520:skgpu::ganesh::PathCurveTessellator::prepare\28GrMeshDrawTarget*\2c\20SkMatrix\20const&\2c\20skgpu::ganesh::PathTessellator::PathDrawList\20const&\2c\20int\29
+6521:skgpu::ganesh::OpsTask::~OpsTask\28\29.1
+6522:skgpu::ganesh::OpsTask::onPrepare\28GrOpFlushState*\29
+6523:skgpu::ganesh::OpsTask::onPrePrepare\28GrRecordingContext*\29
+6524:skgpu::ganesh::OpsTask::onMakeSkippable\28\29
+6525:skgpu::ganesh::OpsTask::onIsUsed\28GrSurfaceProxy*\29\20const
+6526:skgpu::ganesh::OpsTask::gatherProxyIntervals\28GrResourceAllocator*\29\20const
+6527:skgpu::ganesh::OpsTask::endFlush\28GrDrawingManager*\29
+6528:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::~NonAALatticeOp\28\29.1
+6529:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6530:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6531:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6532:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6533:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6534:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::name\28\29\20const
+6535:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::NonAALatticeOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6536:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::~LatticeGP\28\29.1
+6537:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::~LatticeGP\28\29
+6538:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::onTextureSampler\28int\29\20const
+6539:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::name\28\29\20const
+6540:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+6541:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6542:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6543:skgpu::ganesh::LatticeOp::\28anonymous\20namespace\29::LatticeGP::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+6544:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::~FillRRectOpImpl\28\29.1
+6545:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::~FillRRectOpImpl\28\29
+6546:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6547:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+6548:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6549:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6550:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6551:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::name\28\29\20const
+6552:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6553:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::clipToShape\28skgpu::ganesh::SurfaceDrawContext*\2c\20SkClipOp\2c\20SkMatrix\20const&\2c\20GrShape\20const&\2c\20GrAA\29
+6554:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::~Processor\28\29.1
+6555:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::~Processor\28\29
+6556:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::name\28\29\20const
+6557:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6558:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+6559:skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6560:skgpu::ganesh::DrawableOp::~DrawableOp\28\29.1
+6561:skgpu::ganesh::DrawableOp::~DrawableOp\28\29
+6562:skgpu::ganesh::DrawableOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6563:skgpu::ganesh::DrawableOp::name\28\29\20const
+6564:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\28\29.1
+6565:skgpu::ganesh::DrawAtlasPathOp::~DrawAtlasPathOp\28\29
+6566:skgpu::ganesh::DrawAtlasPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6567:skgpu::ganesh::DrawAtlasPathOp::onPrepare\28GrOpFlushState*\29
+6568:skgpu::ganesh::DrawAtlasPathOp::onPrePrepare\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6569:skgpu::ganesh::DrawAtlasPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6570:skgpu::ganesh::DrawAtlasPathOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6571:skgpu::ganesh::DrawAtlasPathOp::name\28\29\20const
+6572:skgpu::ganesh::DrawAtlasPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6573:skgpu::ganesh::Device::~Device\28\29.1
+6574:skgpu::ganesh::Device::~Device\28\29
+6575:skgpu::ganesh::Device::strikeDeviceInfo\28\29\20const
+6576:skgpu::ganesh::Device::snapSpecial\28SkIRect\20const&\2c\20bool\29
+6577:skgpu::ganesh::Device::snapSpecialScaled\28SkIRect\20const&\2c\20SkISize\20const&\29
+6578:skgpu::ganesh::Device::replaceClip\28SkIRect\20const&\29
+6579:skgpu::ganesh::Device::recordingContext\28\29\20const
+6580:skgpu::ganesh::Device::pushClipStack\28\29
+6581:skgpu::ganesh::Device::popClipStack\28\29
+6582:skgpu::ganesh::Device::onWritePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+6583:skgpu::ganesh::Device::onReadPixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+6584:skgpu::ganesh::Device::onDrawGlyphRunList\28SkCanvas*\2c\20sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+6585:skgpu::ganesh::Device::onClipShader\28sk_sp<SkShader>\29
+6586:skgpu::ganesh::Device::makeSurface\28SkImageInfo\20const&\2c\20SkSurfaceProps\20const&\29
+6587:skgpu::ganesh::Device::makeSpecial\28SkImage\20const*\29
+6588:skgpu::ganesh::Device::isClipWideOpen\28\29\20const
+6589:skgpu::ganesh::Device::isClipRect\28\29\20const
+6590:skgpu::ganesh::Device::isClipEmpty\28\29\20const
+6591:skgpu::ganesh::Device::isClipAntiAliased\28\29\20const
+6592:skgpu::ganesh::Device::drawVertices\28SkVertices\20const*\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\2c\20bool\29
+6593:skgpu::ganesh::Device::drawSpecial\28SkSpecialImage*\2c\20SkMatrix\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+6594:skgpu::ganesh::Device::drawSlug\28SkCanvas*\2c\20sktext::gpu::Slug\20const*\2c\20SkPaint\20const&\29
+6595:skgpu::ganesh::Device::drawShadow\28SkPath\20const&\2c\20SkDrawShadowRec\20const&\29
+6596:skgpu::ganesh::Device::drawRegion\28SkRegion\20const&\2c\20SkPaint\20const&\29
+6597:skgpu::ganesh::Device::drawRect\28SkRect\20const&\2c\20SkPaint\20const&\29
+6598:skgpu::ganesh::Device::drawPoints\28SkCanvas::PointMode\2c\20unsigned\20long\2c\20SkPoint\20const*\2c\20SkPaint\20const&\29
+6599:skgpu::ganesh::Device::drawPaint\28SkPaint\20const&\29
+6600:skgpu::ganesh::Device::drawOval\28SkRect\20const&\2c\20SkPaint\20const&\29
+6601:skgpu::ganesh::Device::drawMesh\28SkMesh\20const&\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+6602:skgpu::ganesh::Device::drawImageRect\28SkImage\20const*\2c\20SkRect\20const*\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+6603:skgpu::ganesh::Device::drawImageLattice\28SkImage\20const*\2c\20SkCanvas::Lattice\20const&\2c\20SkRect\20const&\2c\20SkFilterMode\2c\20SkPaint\20const&\29
+6604:skgpu::ganesh::Device::drawEdgeAAQuad\28SkRect\20const&\2c\20SkPoint\20const*\2c\20SkCanvas::QuadAAFlags\2c\20SkRGBA4f<\28SkAlphaType\293>\20const&\2c\20SkBlendMode\29
+6605:skgpu::ganesh::Device::drawEdgeAAImageSet\28SkCanvas::ImageSetEntry\20const*\2c\20int\2c\20SkPoint\20const*\2c\20SkMatrix\20const*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+6606:skgpu::ganesh::Device::drawDrawable\28SkCanvas*\2c\20SkDrawable*\2c\20SkMatrix\20const*\29
+6607:skgpu::ganesh::Device::drawDevice\28SkDevice*\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\29
+6608:skgpu::ganesh::Device::drawDRRect\28SkRRect\20const&\2c\20SkRRect\20const&\2c\20SkPaint\20const&\29
+6609:skgpu::ganesh::Device::drawAtlas\28SkRSXform\20const*\2c\20SkRect\20const*\2c\20unsigned\20int\20const*\2c\20int\2c\20sk_sp<SkBlender>\2c\20SkPaint\20const&\29
+6610:skgpu::ganesh::Device::drawAsTiledImageRect\28SkCanvas*\2c\20SkImage\20const*\2c\20SkRect\20const*\2c\20SkRect\20const&\2c\20SkSamplingOptions\20const&\2c\20SkPaint\20const&\2c\20SkCanvas::SrcRectConstraint\29
+6611:skgpu::ganesh::Device::drawArc\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+6612:skgpu::ganesh::Device::devClipBounds\28\29\20const
+6613:skgpu::ganesh::Device::createImageFilteringBackend\28SkSurfaceProps\20const&\2c\20SkColorType\29\20const
+6614:skgpu::ganesh::Device::createDevice\28SkDevice::CreateInfo\20const&\2c\20SkPaint\20const*\29
+6615:skgpu::ganesh::Device::convertGlyphRunListToSlug\28sktext::GlyphRunList\20const&\2c\20SkPaint\20const&\2c\20SkPaint\20const&\29
+6616:skgpu::ganesh::Device::clipRegion\28SkRegion\20const&\2c\20SkClipOp\29
+6617:skgpu::ganesh::Device::clipRect\28SkRect\20const&\2c\20SkClipOp\2c\20bool\29
+6618:skgpu::ganesh::Device::clipRRect\28SkRRect\20const&\2c\20SkClipOp\2c\20bool\29
+6619:skgpu::ganesh::Device::clipPath\28SkPath\20const&\2c\20SkClipOp\2c\20bool\29
+6620:skgpu::ganesh::Device::android_utils_clipWithStencil\28\29
+6621:skgpu::ganesh::DefaultPathRenderer::onStencilPath\28skgpu::ganesh::PathRenderer::StencilPathArgs\20const&\29
+6622:skgpu::ganesh::DefaultPathRenderer::onGetStencilSupport\28GrStyledShape\20const&\29\20const
+6623:skgpu::ganesh::DefaultPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6624:skgpu::ganesh::DefaultPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6625:skgpu::ganesh::DefaultPathRenderer::name\28\29\20const
+6626:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::name\28\29\20const
+6627:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6628:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+6629:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingLineEffect::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6630:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::name\28\29\20const
+6631:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+6632:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Impl::setData\28GrGLSLProgramDataManager\20const&\2c\20GrShaderCaps\20const&\2c\20GrGeometryProcessor\20const&\29
+6633:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashingCircleEffect::Impl::onEmitCode\28GrGeometryProcessor::ProgramImpl::EmitArgs&\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+6634:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::~DashOpImpl\28\29.1
+6635:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::~DashOpImpl\28\29
+6636:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6637:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::programInfo\28\29
+6638:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+6639:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6640:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+6641:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6642:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::name\28\29\20const
+6643:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::fixedFunctionFlags\28\29\20const
+6644:skgpu::ganesh::DashOp::\28anonymous\20namespace\29::DashOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6645:skgpu::ganesh::DashLinePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6646:skgpu::ganesh::DashLinePathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6647:skgpu::ganesh::DashLinePathRenderer::name\28\29\20const
+6648:skgpu::ganesh::ClipStack::~ClipStack\28\29.1
+6649:skgpu::ganesh::ClipStack::preApply\28SkRect\20const&\2c\20GrAA\29\20const
+6650:skgpu::ganesh::ClipStack::apply\28GrRecordingContext*\2c\20skgpu::ganesh::SurfaceDrawContext*\2c\20GrDrawOp*\2c\20GrAAType\2c\20GrAppliedClip*\2c\20SkRect*\29\20const
+6651:skgpu::ganesh::ClearOp::~ClearOp\28\29
+6652:skgpu::ganesh::ClearOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6653:skgpu::ganesh::ClearOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6654:skgpu::ganesh::ClearOp::name\28\29\20const
+6655:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\28\29.1
+6656:skgpu::ganesh::AtlasTextOp::~AtlasTextOp\28\29
+6657:skgpu::ganesh::AtlasTextOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+6658:skgpu::ganesh::AtlasTextOp::onPrepareDraws\28GrMeshDrawTarget*\29
+6659:skgpu::ganesh::AtlasTextOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+6660:skgpu::ganesh::AtlasTextOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+6661:skgpu::ganesh::AtlasTextOp::name\28\29\20const
+6662:skgpu::ganesh::AtlasTextOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+6663:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\28\29.1
+6664:skgpu::ganesh::AtlasRenderTask::~AtlasRenderTask\28\29
+6665:skgpu::ganesh::AtlasRenderTask::onMakeClosed\28GrRecordingContext*\2c\20SkIRect*\29
+6666:skgpu::ganesh::AtlasRenderTask::onExecute\28GrOpFlushState*\29
+6667:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29.1
+6668:skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29
+6669:skgpu::ganesh::AtlasPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6670:skgpu::ganesh::AtlasPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6671:skgpu::ganesh::AtlasPathRenderer::name\28\29\20const
+6672:skgpu::ganesh::AALinearizingConvexPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6673:skgpu::ganesh::AALinearizingConvexPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6674:skgpu::ganesh::AALinearizingConvexPathRenderer::name\28\29\20const
+6675:skgpu::ganesh::AAHairLinePathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6676:skgpu::ganesh::AAHairLinePathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6677:skgpu::ganesh::AAHairLinePathRenderer::name\28\29\20const
+6678:skgpu::ganesh::AAConvexPathRenderer::onDrawPath\28skgpu::ganesh::PathRenderer::DrawPathArgs\20const&\29
+6679:skgpu::ganesh::AAConvexPathRenderer::onCanDrawPath\28skgpu::ganesh::PathRenderer::CanDrawPathArgs\20const&\29\20const
+6680:skgpu::ganesh::AAConvexPathRenderer::name\28\29\20const
+6681:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::~TAsyncReadResult\28\29.1
+6682:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::rowBytes\28int\29\20const
+6683:skgpu::TAsyncReadResult<GrGpuBuffer\2c\20GrDirectContext::DirectContextID\2c\20skgpu::ganesh::SurfaceContext::PixelTransferResult>::data\28int\29\20const
+6684:skgpu::StringKeyBuilder::~StringKeyBuilder\28\29.1
+6685:skgpu::StringKeyBuilder::~StringKeyBuilder\28\29
+6686:skgpu::StringKeyBuilder::appendComment\28char\20const*\29
+6687:skgpu::StringKeyBuilder::addBits\28unsigned\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+6688:skgpu::RectanizerSkyline::~RectanizerSkyline\28\29.1
+6689:skgpu::RectanizerSkyline::~RectanizerSkyline\28\29
+6690:skgpu::RectanizerSkyline::reset\28\29
+6691:skgpu::RectanizerSkyline::percentFull\28\29\20const
+6692:skgpu::RectanizerPow2::reset\28\29
+6693:skgpu::RectanizerPow2::percentFull\28\29\20const
+6694:skgpu::RectanizerPow2::addRect\28int\2c\20int\2c\20SkIPoint16*\29
+6695:skgpu::Plot::~Plot\28\29.1
+6696:skgpu::Plot::~Plot\28\29
+6697:skgpu::KeyBuilder::~KeyBuilder\28\29
+6698:skgpu::KeyBuilder::addBits\28unsigned\20int\2c\20unsigned\20int\2c\20std::__2::basic_string_view<char\2c\20std::__2::char_traits<char>>\29
+6699:skgpu::DefaultShaderErrorHandler\28\29::DefaultShaderErrorHandler::compileError\28char\20const*\2c\20char\20const*\29
+6700:sk_write_fn\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20long\29
+6701:sk_sp<SkColorSpace>*\20emscripten::internal::MemberAccess<SimpleImageInfo\2c\20sk_sp<SkColorSpace>>::getWire<SimpleImageInfo>\28sk_sp<SkColorSpace>\20SimpleImageInfo::*\20const&\2c\20SimpleImageInfo\20const&\29
+6702:sk_read_user_chunk\28png_struct_def*\2c\20png_unknown_chunk_t*\29
+6703:sk_mmap_releaseproc\28void\20const*\2c\20void*\29
+6704:sk_ft_stream_io\28FT_StreamRec_*\2c\20unsigned\20long\2c\20unsigned\20char*\2c\20unsigned\20long\29
+6705:sk_ft_realloc\28FT_MemoryRec_*\2c\20long\2c\20long\2c\20void*\29
+6706:sk_ft_free\28FT_MemoryRec_*\2c\20void*\29
+6707:sk_ft_alloc\28FT_MemoryRec_*\2c\20long\29
+6708:sk_dataref_releaseproc\28void\20const*\2c\20void*\29
+6709:sfnt_table_info
+6710:sfnt_stream_close
+6711:sfnt_load_face
+6712:sfnt_is_postscript
+6713:sfnt_is_alphanumeric
+6714:sfnt_init_face
+6715:sfnt_get_ps_name
+6716:sfnt_get_name_index
+6717:sfnt_get_name_id
+6718:sfnt_get_interface
+6719:sfnt_get_glyph_name
+6720:sfnt_get_charset_id
+6721:sfnt_done_face
+6722:setup_syllables_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6723:setup_syllables_myanmar\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6724:setup_syllables_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6725:setup_syllables_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6726:setup_masks_use\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6727:setup_masks_myanmar\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6728:setup_masks_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6729:setup_masks_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6730:setup_masks_hangul\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6731:setup_masks_arabic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6732:sep_upsample
+6733:self_destruct
+6734:save_marker
+6735:sample8\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6736:sample6\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6737:sample4\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6738:sample2\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6739:sample1\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+6740:rgb_rgb_convert
+6741:rgb_rgb565_convert
+6742:rgb_rgb565D_convert
+6743:rgb_gray_convert
+6744:reverse_hit_compare_y\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+6745:reverse_hit_compare_x\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+6746:reset_marker_reader
+6747:reset_input_controller
+6748:reset_error_mgr
+6749:request_virt_sarray
+6750:request_virt_barray
+6751:reorder_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6752:reorder_myanmar\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6753:reorder_marks_hebrew\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6754:reorder_marks_arabic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20unsigned\20int\2c\20unsigned\20int\29
+6755:reorder_khmer\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6756:release_data\28void*\2c\20void*\29
+6757:record_stch\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6758:record_rphf_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6759:record_pref_use\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+6760:realize_virt_arrays
+6761:read_restart_marker
+6762:read_markers
+6763:read_data_from_FT_Stream
+6764:quantize_ord_dither
+6765:quantize_fs_dither
+6766:quantize3_ord_dither
+6767:psnames_get_service
+6768:pshinter_get_t2_funcs
+6769:pshinter_get_t1_funcs
+6770:pshinter_get_globals_funcs
+6771:psh_globals_new
+6772:psh_globals_destroy
+6773:psaux_get_glyph_name
+6774:ps_table_release
+6775:ps_table_new
+6776:ps_table_done
+6777:ps_table_add
+6778:ps_property_set
+6779:ps_property_get
+6780:ps_parser_to_token_array
+6781:ps_parser_to_int
+6782:ps_parser_to_fixed_array
+6783:ps_parser_to_fixed
+6784:ps_parser_to_coord_array
+6785:ps_parser_to_bytes
+6786:ps_parser_skip_spaces
+6787:ps_parser_load_field_table
+6788:ps_parser_init
+6789:ps_hints_t2mask
+6790:ps_hints_t2counter
+6791:ps_hints_t1stem3
+6792:ps_hints_t1reset
+6793:ps_hints_close
+6794:ps_hints_apply
+6795:ps_hinter_init
+6796:ps_hinter_done
+6797:ps_get_standard_strings
+6798:ps_get_macintosh_name
+6799:ps_decoder_init
+6800:ps_builder_init
+6801:progress_monitor\28jpeg_common_struct*\29
+6802:process_data_simple_main
+6803:process_data_crank_post
+6804:process_data_context_main
+6805:prescan_quantize
+6806:preprocess_text_use\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6807:preprocess_text_thai\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6808:preprocess_text_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6809:preprocess_text_hangul\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6810:prepare_for_output_pass
+6811:premultiply_data
+6812:premul_rgb\28SkRGBA4f<\28SkAlphaType\292>\29
+6813:premul_polar\28SkRGBA4f<\28SkAlphaType\292>\29
+6814:postprocess_glyphs_arabic\28hb_ot_shape_plan_t\20const*\2c\20hb_buffer_t*\2c\20hb_font_t*\29
+6815:post_process_prepass
+6816:post_process_2pass
+6817:post_process_1pass
+6818:portable::xy_to_unit_angle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6819:portable::xy_to_radius\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6820:portable::xy_to_2pt_conical_well_behaved\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6821:portable::xy_to_2pt_conical_strip\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6822:portable::xy_to_2pt_conical_smaller\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6823:portable::xy_to_2pt_conical_greater\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6824:portable::xy_to_2pt_conical_focal_on_circle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6825:portable::xor_\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6826:portable::white_color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6827:portable::unpremul_polar\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6828:portable::unpremul\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6829:portable::trace_var\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6830:portable::trace_scope\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6831:portable::trace_line\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6832:portable::trace_exit\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6833:portable::trace_enter\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6834:portable::tan_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6835:portable::swizzle_copy_to_indirect_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6836:portable::swizzle_copy_slot_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6837:portable::swizzle_copy_4_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6838:portable::swizzle_copy_3_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6839:portable::swizzle_copy_2_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6840:portable::swizzle_4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6841:portable::swizzle_3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6842:portable::swizzle_2\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6843:portable::swizzle_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6844:portable::swizzle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6845:portable::swap_src_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6846:portable::swap_rb_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6847:portable::swap_rb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6848:portable::sub_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6849:portable::sub_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6850:portable::sub_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6851:portable::sub_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6852:portable::sub_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6853:portable::sub_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6854:portable::sub_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6855:portable::sub_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6856:portable::sub_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6857:portable::sub_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6858:portable::store_u16_be\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6859:portable::store_src_rg\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6860:portable::store_src_a\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6861:portable::store_src\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6862:portable::store_rgf32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6863:portable::store_rgf16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6864:portable::store_rg88\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6865:portable::store_rg1616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6866:portable::store_return_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6867:portable::store_r8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6868:portable::store_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6869:portable::store_f32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6870:portable::store_f16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6871:portable::store_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6872:portable::store_device_xy01\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6873:portable::store_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6874:portable::store_af16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6875:portable::store_a8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6876:portable::store_a16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6877:portable::store_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6878:portable::store_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6879:portable::store_4444\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6880:portable::store_16161616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6881:portable::store_10x6\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6882:portable::store_1010102_xr\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6883:portable::store_1010102\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6884:portable::start_pipeline\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkRasterPipelineStage*\29
+6885:portable::stack_rewind\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6886:portable::stack_checkpoint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6887:portable::srcover_rgba_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6888:portable::srcover\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6889:portable::srcout\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6890:portable::srcin\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6891:portable::srcatop\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6892:portable::sqrt_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6893:portable::splat_4_constants\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6894:portable::splat_3_constants\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6895:portable::splat_2_constants\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6896:portable::softlight\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6897:portable::smoothstep_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6898:portable::sin_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6899:portable::shuffle\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6900:portable::set_base_pointer\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6901:portable::seed_shader\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6902:portable::screen\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6903:portable::scale_u8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6904:portable::scale_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6905:portable::saturation\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6906:portable::rgb_to_hsl\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6907:portable::repeat_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6908:portable::repeat_x_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6909:portable::repeat_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6910:portable::refract_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6911:portable::reenable_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6912:portable::rect_memset64\28unsigned\20long\20long*\2c\20unsigned\20long\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+6913:portable::rect_memset32\28unsigned\20int*\2c\20unsigned\20int\2c\20int\2c\20unsigned\20long\2c\20int\29
+6914:portable::rect_memset16\28unsigned\20short*\2c\20unsigned\20short\2c\20int\2c\20unsigned\20long\2c\20int\29
+6915:portable::premul_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6916:portable::premul\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6917:portable::pow_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6918:portable::plus_\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6919:portable::parametric\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6920:portable::overlay\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6921:portable::negate_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6922:portable::multiply\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6923:portable::mul_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6924:portable::mul_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6925:portable::mul_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6926:portable::mul_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6927:portable::mul_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6928:portable::mul_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6929:portable::mul_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6930:portable::mul_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6931:portable::mul_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6932:portable::mul_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6933:portable::mul_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6934:portable::mul_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6935:portable::move_src_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6936:portable::move_dst_src\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6937:portable::modulate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6938:portable::mod_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6939:portable::mod_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6940:portable::mod_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6941:portable::mod_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6942:portable::mod_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6943:portable::mix_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6944:portable::mix_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6945:portable::mix_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6946:portable::mix_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6947:portable::mix_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6948:portable::mix_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6949:portable::mix_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6950:portable::mix_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6951:portable::mix_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6952:portable::mix_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6953:portable::mirror_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6954:portable::mirror_x_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6955:portable::mirror_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6956:portable::mipmap_linear_update\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6957:portable::mipmap_linear_init\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6958:portable::mipmap_linear_finish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6959:portable::min_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6960:portable::min_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6961:portable::min_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6962:portable::min_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6963:portable::min_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6964:portable::min_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6965:portable::min_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6966:portable::min_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6967:portable::min_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6968:portable::min_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6969:portable::min_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6970:portable::min_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6971:portable::min_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6972:portable::min_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6973:portable::min_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6974:portable::min_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6975:portable::merge_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6976:portable::merge_inv_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6977:portable::merge_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6978:portable::memset32\28unsigned\20int*\2c\20unsigned\20int\2c\20int\29
+6979:portable::memset16\28unsigned\20short*\2c\20unsigned\20short\2c\20int\29
+6980:portable::max_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6981:portable::max_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6982:portable::max_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6983:portable::max_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6984:portable::max_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6985:portable::max_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6986:portable::max_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6987:portable::max_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6988:portable::max_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6989:portable::max_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6990:portable::max_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6991:portable::max_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6992:portable::max_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6993:portable::max_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6994:portable::max_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6995:portable::max_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6996:portable::matrix_translate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6997:portable::matrix_scale_translate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6998:portable::matrix_perspective\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+6999:portable::matrix_multiply_4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7000:portable::matrix_multiply_3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7001:portable::matrix_multiply_2\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7002:portable::matrix_4x5\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7003:portable::matrix_4x3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7004:portable::matrix_3x4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7005:portable::matrix_3x3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7006:portable::matrix_2x3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7007:portable::mask_off_return_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7008:portable::mask_off_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7009:portable::mask_2pt_conical_nan\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7010:portable::mask_2pt_conical_degenerates\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7011:portable::luminosity\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7012:portable::log_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7013:portable::log2_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7014:portable::load_src_rg\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7015:portable::load_rgf32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7016:portable::load_rgf16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7017:portable::load_rgf16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7018:portable::load_rg88_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7019:portable::load_rg88\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7020:portable::load_rg1616_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7021:portable::load_rg1616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7022:portable::load_return_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7023:portable::load_loop_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7024:portable::load_f32_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7025:portable::load_f32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7026:portable::load_f16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7027:portable::load_f16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7028:portable::load_condition_mask\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7029:portable::load_af16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7030:portable::load_af16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7031:portable::load_a8_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7032:portable::load_a8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7033:portable::load_a16_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7034:portable::load_a16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7035:portable::load_8888_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7036:portable::load_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7037:portable::load_565_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7038:portable::load_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7039:portable::load_4444_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7040:portable::load_4444\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7041:portable::load_16161616_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7042:portable::load_16161616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7043:portable::load_10x6_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7044:portable::load_10x6\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7045:portable::load_1010102_xr_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7046:portable::load_1010102_xr\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7047:portable::load_1010102_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7048:portable::load_1010102\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7049:portable::lighten\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7050:portable::lerp_u8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7051:portable::lerp_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7052:portable::just_return\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7053:portable::jump\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7054:portable::invsqrt_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7055:portable::invsqrt_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7056:portable::invsqrt_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7057:portable::invsqrt_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7058:portable::inverted_CMYK_to_RGB1\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7059:portable::inverted_CMYK_to_BGR1\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7060:portable::inverse_mat4\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7061:portable::inverse_mat3\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7062:portable::inverse_mat2\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7063:portable::init_lane_masks\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7064:portable::hue\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7065:portable::hsl_to_rgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7066:portable::hardlight\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7067:portable::gray_to_RGB1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7068:portable::grayA_to_rgbA\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7069:portable::grayA_to_RGBA\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7070:portable::gradient\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7071:portable::gauss_a_to_rgba\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7072:portable::gather_rgf16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7073:portable::gather_rg88\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7074:portable::gather_rg1616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7075:portable::gather_f32\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7076:portable::gather_f16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7077:portable::gather_af16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7078:portable::gather_a8\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7079:portable::gather_a16\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7080:portable::gather_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7081:portable::gather_565\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7082:portable::gather_4444\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7083:portable::gather_16161616\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7084:portable::gather_10x6\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7085:portable::gather_1010102_xr\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7086:portable::gather_1010102\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7087:portable::gamma_\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7088:portable::force_opaque_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7089:portable::force_opaque\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7090:portable::floor_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7091:portable::floor_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7092:portable::floor_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7093:portable::floor_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7094:portable::exp_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7095:portable::exp2_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7096:portable::exclusion\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7097:portable::exchange_src\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7098:portable::evenly_spaced_gradient\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7099:portable::evenly_spaced_2_stop_gradient\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7100:portable::emboss\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7101:portable::dstover\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7102:portable::dstout\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7103:portable::dstin\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7104:portable::dstatop\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7105:portable::dot_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7106:portable::dot_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7107:portable::dot_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7108:portable::div_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7109:portable::div_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7110:portable::div_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7111:portable::div_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7112:portable::div_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7113:portable::div_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7114:portable::div_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7115:portable::div_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7116:portable::div_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7117:portable::div_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7118:portable::div_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7119:portable::div_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7120:portable::div_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7121:portable::div_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7122:portable::div_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7123:portable::dither\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7124:portable::difference\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7125:portable::decal_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7126:portable::decal_x_and_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7127:portable::decal_x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7128:portable::darken\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7129:portable::css_oklab_to_linear_srgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7130:portable::css_lab_to_xyz\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7131:portable::css_hwb_to_srgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7132:portable::css_hsl_to_srgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7133:portable::css_hcl_to_lab\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7134:portable::cos_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7135:portable::copy_uniform\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7136:portable::copy_to_indirect_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7137:portable::copy_slot_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7138:portable::copy_slot_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7139:portable::copy_immutable_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7140:portable::copy_constant\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7141:portable::copy_4_uniforms\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7142:portable::copy_4_slots_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7143:portable::copy_4_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7144:portable::copy_4_immutables_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7145:portable::copy_3_uniforms\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7146:portable::copy_3_slots_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7147:portable::copy_3_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7148:portable::copy_3_immutables_unmasked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7149:portable::copy_2_uniforms\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7150:portable::copy_2_slots_masked\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7151:portable::continue_op\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7152:portable::colordodge\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7153:portable::colorburn\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7154:portable::color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7155:portable::cmpne_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7156:portable::cmpne_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7157:portable::cmpne_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7158:portable::cmpne_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7159:portable::cmpne_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7160:portable::cmpne_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7161:portable::cmpne_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7162:portable::cmpne_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7163:portable::cmpne_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7164:portable::cmpne_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7165:portable::cmpne_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7166:portable::cmpne_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7167:portable::cmplt_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7168:portable::cmplt_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7169:portable::cmplt_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7170:portable::cmplt_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7171:portable::cmplt_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7172:portable::cmplt_imm_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7173:portable::cmplt_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7174:portable::cmplt_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7175:portable::cmplt_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7176:portable::cmplt_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7177:portable::cmplt_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7178:portable::cmplt_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7179:portable::cmplt_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7180:portable::cmplt_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7181:portable::cmplt_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7182:portable::cmplt_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7183:portable::cmplt_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7184:portable::cmplt_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7185:portable::cmple_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7186:portable::cmple_n_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7187:portable::cmple_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7188:portable::cmple_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7189:portable::cmple_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7190:portable::cmple_imm_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7191:portable::cmple_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7192:portable::cmple_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7193:portable::cmple_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7194:portable::cmple_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7195:portable::cmple_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7196:portable::cmple_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7197:portable::cmple_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7198:portable::cmple_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7199:portable::cmple_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7200:portable::cmple_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7201:portable::cmple_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7202:portable::cmple_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7203:portable::cmpeq_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7204:portable::cmpeq_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7205:portable::cmpeq_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7206:portable::cmpeq_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7207:portable::cmpeq_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7208:portable::cmpeq_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7209:portable::cmpeq_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7210:portable::cmpeq_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7211:portable::cmpeq_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7212:portable::cmpeq_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7213:portable::cmpeq_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7214:portable::cmpeq_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7215:portable::clear\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7216:portable::clamp_x_and_y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7217:portable::clamp_x_1\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7218:portable::clamp_gamut\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7219:portable::clamp_01\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7220:portable::ceil_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7221:portable::ceil_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7222:portable::ceil_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7223:portable::ceil_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7224:portable::cast_to_uint_from_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7225:portable::cast_to_uint_from_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7226:portable::cast_to_uint_from_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7227:portable::cast_to_uint_from_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7228:portable::cast_to_int_from_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7229:portable::cast_to_int_from_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7230:portable::cast_to_int_from_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7231:portable::cast_to_int_from_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7232:portable::cast_to_float_from_uint\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7233:portable::cast_to_float_from_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7234:portable::cast_to_float_from_4_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7235:portable::cast_to_float_from_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7236:portable::cast_to_float_from_3_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7237:portable::cast_to_float_from_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7238:portable::cast_to_float_from_2_uints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7239:portable::cast_to_float_from_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7240:portable::case_op\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7241:portable::callback\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7242:portable::byte_tables\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7243:portable::bt709_luminance_or_luma_to_rgb\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7244:portable::bt709_luminance_or_luma_to_alpha\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7245:portable::branch_if_no_lanes_active\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7246:portable::branch_if_no_active_lanes_eq\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7247:portable::blit_row_s32a_opaque\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+7248:portable::black_color\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7249:portable::bitwise_xor_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7250:portable::bitwise_xor_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7251:portable::bitwise_xor_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7252:portable::bitwise_xor_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7253:portable::bitwise_xor_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7254:portable::bitwise_xor_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7255:portable::bitwise_or_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7256:portable::bitwise_or_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7257:portable::bitwise_or_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7258:portable::bitwise_or_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7259:portable::bitwise_or_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7260:portable::bitwise_and_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7261:portable::bitwise_and_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7262:portable::bitwise_and_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7263:portable::bitwise_and_imm_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7264:portable::bitwise_and_imm_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7265:portable::bitwise_and_imm_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7266:portable::bitwise_and_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7267:portable::bitwise_and_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7268:portable::bitwise_and_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7269:portable::bilinear_setup\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7270:portable::bilinear_py\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7271:portable::bilinear_px\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7272:portable::bilinear_ny\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7273:portable::bilinear_nx\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7274:portable::bilerp_clamp_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7275:portable::bicubic_setup\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7276:portable::bicubic_p3y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7277:portable::bicubic_p3x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7278:portable::bicubic_p1y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7279:portable::bicubic_p1x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7280:portable::bicubic_n3y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7281:portable::bicubic_n3x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7282:portable::bicubic_n1y\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7283:portable::bicubic_n1x\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7284:portable::bicubic_clamp_8888\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7285:portable::atan_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7286:portable::atan2_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7287:portable::asin_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7288:portable::alter_2pt_conical_unswap\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7289:portable::alter_2pt_conical_compensate_focal\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7290:portable::alpha_to_red_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7291:portable::alpha_to_red\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7292:portable::alpha_to_gray_dst\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7293:portable::alpha_to_gray\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7294:portable::add_n_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7295:portable::add_n_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7296:portable::add_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7297:portable::add_imm_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7298:portable::add_imm_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7299:portable::add_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7300:portable::add_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7301:portable::add_4_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7302:portable::add_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7303:portable::add_3_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7304:portable::add_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7305:portable::add_2_floats\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7306:portable::acos_float\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7307:portable::accumulate\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7308:portable::abs_int\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7309:portable::abs_4_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7310:portable::abs_3_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7311:portable::abs_2_ints\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7312:portable::RGB_to_RGB1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7313:portable::RGB_to_BGR1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+7314:portable::RGBA_to_rgbA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7315:portable::RGBA_to_bgrA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7316:portable::RGBA_to_BGRA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+7317:portable::PQish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7318:portable::HLGish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7319:portable::HLGinvish\28portable::Params*\2c\20SkRasterPipelineStage*\2c\20float\2c\20float\2c\20float\2c\20float\29
+7320:pop_arg_long_double
+7321:png_read_filter_row_up
+7322:png_read_filter_row_sub
+7323:png_read_filter_row_paeth_multibyte_pixel
+7324:png_read_filter_row_paeth_1byte_pixel
+7325:png_read_filter_row_avg
+7326:pass2_no_dither
+7327:pass2_fs_dither
+7328:override_features_khmer\28hb_ot_shape_planner_t*\29
+7329:override_features_indic\28hb_ot_shape_planner_t*\29
+7330:override_features_hangul\28hb_ot_shape_planner_t*\29
+7331:output_message\28jpeg_common_struct*\29
+7332:output_message
+7333:null_convert
+7334:noop_upsample
+7335:non-virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29.1
+7336:non-virtual\20thunk\20to\20std::__2::basic_stringstream<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>::~basic_stringstream\28\29
+7337:non-virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29.1
+7338:non-virtual\20thunk\20to\20std::__2::basic_iostream<char\2c\20std::__2::char_traits<char>>::~basic_iostream\28\29
+7339:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.3
+7340:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.2
+7341:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29.1
+7342:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::~GaneshBackend\28\29
+7343:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::findAlgorithm\28SkSize\2c\20SkTileMode\2c\20SkColorType\29\20const
+7344:non-virtual\20thunk\20to\20skif::\28anonymous\20namespace\29::GaneshBackend::blur\28SkSize\2c\20sk_sp<SkSpecialImage>\2c\20SkIRect\20const&\2c\20SkTileMode\2c\20SkIRect\20const&\29\20const
+7345:non-virtual\20thunk\20to\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29.1
+7346:non-virtual\20thunk\20to\20skgpu::ganesh::SmallPathAtlasMgr::~SmallPathAtlasMgr\28\29
+7347:non-virtual\20thunk\20to\20skgpu::ganesh::SmallPathAtlasMgr::evict\28skgpu::PlotLocator\29
+7348:non-virtual\20thunk\20to\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29.1
+7349:non-virtual\20thunk\20to\20skgpu::ganesh::AtlasPathRenderer::~AtlasPathRenderer\28\29
+7350:non-virtual\20thunk\20to\20skgpu::ganesh::AtlasPathRenderer::preFlush\28GrOnFlushResourceProvider*\29
+7351:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::vertexStride\28SkMatrix\20const&\29\20const
+7352:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+7353:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+7354:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::instanceFlags\28\29\20const
+7355:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::TransformedMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+7356:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29.1
+7357:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29
+7358:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+7359:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+7360:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::glyphCount\28\29\20const
+7361:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::SDFTSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+7362:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::vertexStride\28SkMatrix\20const&\29\20const
+7363:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+7364:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::makeAtlasTextOp\28GrClip\20const*\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>&&\2c\20skgpu::ganesh::SurfaceDrawContext*\29\20const
+7365:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::instanceFlags\28\29\20const
+7366:non-virtual\20thunk\20to\20\28anonymous\20namespace\29::DirectMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+7367:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29.1
+7368:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::~GrTextureRenderTargetProxy\28\29
+7369:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize\28\29\20const
+7370:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::instantiate\28GrResourceProvider*\29
+7371:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::createSurface\28GrResourceProvider*\29\20const
+7372:non-virtual\20thunk\20to\20GrTextureRenderTargetProxy::callbackDesc\28\29\20const
+7373:non-virtual\20thunk\20to\20GrOpFlushState::~GrOpFlushState\28\29.1
+7374:non-virtual\20thunk\20to\20GrOpFlushState::~GrOpFlushState\28\29
+7375:non-virtual\20thunk\20to\20GrOpFlushState::writeView\28\29\20const
+7376:non-virtual\20thunk\20to\20GrOpFlushState::usesMSAASurface\28\29\20const
+7377:non-virtual\20thunk\20to\20GrOpFlushState::threadSafeCache\28\29\20const
+7378:non-virtual\20thunk\20to\20GrOpFlushState::strikeCache\28\29\20const
+7379:non-virtual\20thunk\20to\20GrOpFlushState::smallPathAtlasManager\28\29\20const
+7380:non-virtual\20thunk\20to\20GrOpFlushState::sampledProxyArray\28\29
+7381:non-virtual\20thunk\20to\20GrOpFlushState::rtProxy\28\29\20const
+7382:non-virtual\20thunk\20to\20GrOpFlushState::resourceProvider\28\29\20const
+7383:non-virtual\20thunk\20to\20GrOpFlushState::renderPassBarriers\28\29\20const
+7384:non-virtual\20thunk\20to\20GrOpFlushState::recordDraw\28GrGeometryProcessor\20const*\2c\20GrSimpleMesh\20const*\2c\20int\2c\20GrSurfaceProxy\20const*\20const*\2c\20GrPrimitiveType\29
+7385:non-virtual\20thunk\20to\20GrOpFlushState::putBackVertices\28int\2c\20unsigned\20long\29
+7386:non-virtual\20thunk\20to\20GrOpFlushState::putBackIndirectDraws\28int\29
+7387:non-virtual\20thunk\20to\20GrOpFlushState::putBackIndices\28int\29
+7388:non-virtual\20thunk\20to\20GrOpFlushState::putBackIndexedIndirectDraws\28int\29
+7389:non-virtual\20thunk\20to\20GrOpFlushState::makeVertexSpace\28unsigned\20long\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+7390:non-virtual\20thunk\20to\20GrOpFlushState::makeVertexSpaceAtLeast\28unsigned\20long\2c\20int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+7391:non-virtual\20thunk\20to\20GrOpFlushState::makeIndexSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\29
+7392:non-virtual\20thunk\20to\20GrOpFlushState::makeIndexSpaceAtLeast\28int\2c\20int\2c\20sk_sp<GrBuffer\20const>*\2c\20int*\2c\20int*\29
+7393:non-virtual\20thunk\20to\20GrOpFlushState::makeDrawIndirectSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+7394:non-virtual\20thunk\20to\20GrOpFlushState::makeDrawIndexedIndirectSpace\28int\2c\20sk_sp<GrBuffer\20const>*\2c\20unsigned\20long*\29
+7395:non-virtual\20thunk\20to\20GrOpFlushState::dstProxyView\28\29\20const
+7396:non-virtual\20thunk\20to\20GrOpFlushState::detachAppliedClip\28\29
+7397:non-virtual\20thunk\20to\20GrOpFlushState::deferredUploadTarget\28\29
+7398:non-virtual\20thunk\20to\20GrOpFlushState::colorLoadOp\28\29\20const
+7399:non-virtual\20thunk\20to\20GrOpFlushState::caps\28\29\20const
+7400:non-virtual\20thunk\20to\20GrOpFlushState::atlasManager\28\29\20const
+7401:non-virtual\20thunk\20to\20GrOpFlushState::appliedClip\28\29\20const
+7402:non-virtual\20thunk\20to\20GrGpuBuffer::~GrGpuBuffer\28\29
+7403:non-virtual\20thunk\20to\20GrGpuBuffer::unref\28\29\20const
+7404:non-virtual\20thunk\20to\20GrGpuBuffer::ref\28\29\20const
+7405:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29.1
+7406:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::~GrGLTextureRenderTarget\28\29
+7407:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onSetLabel\28\29
+7408:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onRelease\28\29
+7409:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onGpuMemorySize\28\29\20const
+7410:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::onAbandon\28\29
+7411:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::dumpMemoryStatistics\28SkTraceMemoryDump*\29\20const
+7412:non-virtual\20thunk\20to\20GrGLTextureRenderTarget::backendFormat\28\29\20const
+7413:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+7414:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+7415:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::hasSecondaryOutput\28\29\20const
+7416:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\28skgpu::BlendEquation\29
+7417:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::dstColor\28\29
+7418:non-virtual\20thunk\20to\20GrGLBuffer::~GrGLBuffer\28\29.1
+7419:non-virtual\20thunk\20to\20GrGLBuffer::~GrGLBuffer\28\29
+7420:new_color_map_2_quant
+7421:new_color_map_1_quant
+7422:merged_2v_upsample
+7423:merged_1v_upsample
+7424:lin_srgb_to_oklab\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+7425:lin_srgb_to_okhcl\28SkRGBA4f<\28SkAlphaType\292>\2c\20bool*\29
+7426:legalstub$dynCall_vijiii
+7427:legalstub$dynCall_viji
+7428:legalstub$dynCall_vij
+7429:legalstub$dynCall_viijii
+7430:legalstub$dynCall_viij
+7431:legalstub$dynCall_viiij
+7432:legalstub$dynCall_viiiiij
+7433:legalstub$dynCall_jiji
+7434:legalstub$dynCall_jiiiiji
+7435:legalstub$dynCall_jiiiiii
+7436:legalstub$dynCall_jii
+7437:legalstub$dynCall_ji
+7438:legalstub$dynCall_iijj
+7439:legalstub$dynCall_iij
+7440:legalstub$dynCall_iiij
+7441:legalstub$dynCall_iiiij
+7442:legalstub$dynCall_iiiiijj
+7443:legalstub$dynCall_iiiiij
+7444:legalstub$dynCall_iiiiiijj
+7445:legalfunc$glWaitSync
+7446:legalfunc$glClientWaitSync
+7447:lcd_to_a8\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29
+7448:jpeg_start_decompress
+7449:jpeg_skip_scanlines
+7450:jpeg_save_markers
+7451:jpeg_resync_to_restart
+7452:jpeg_read_scanlines
+7453:jpeg_read_raw_data
+7454:jpeg_read_header
+7455:jpeg_idct_islow
+7456:jpeg_idct_ifast
+7457:jpeg_idct_float
+7458:jpeg_idct_9x9
+7459:jpeg_idct_7x7
+7460:jpeg_idct_6x6
+7461:jpeg_idct_5x5
+7462:jpeg_idct_4x4
+7463:jpeg_idct_3x3
+7464:jpeg_idct_2x2
+7465:jpeg_idct_1x1
+7466:jpeg_idct_16x16
+7467:jpeg_idct_15x15
+7468:jpeg_idct_14x14
+7469:jpeg_idct_13x13
+7470:jpeg_idct_12x12
+7471:jpeg_idct_11x11
+7472:jpeg_idct_10x10
+7473:jpeg_crop_scanline
+7474:is_deleted_glyph\28hb_glyph_info_t\20const*\29
+7475:internal_memalign
+7476:int_upsample
+7477:initial_reordering_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7478:hit_compare_y\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+7479:hit_compare_x\28SkOpRayHit\20const*\2c\20SkOpRayHit\20const*\29
+7480:hb_unicode_script_nil\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+7481:hb_unicode_general_category_nil\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+7482:hb_ucd_script\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+7483:hb_ucd_mirroring\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+7484:hb_ucd_general_category\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+7485:hb_ucd_decompose\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20void*\29
+7486:hb_ucd_compose\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+7487:hb_ucd_combining_class\28hb_unicode_funcs_t*\2c\20unsigned\20int\2c\20void*\29
+7488:hb_syllabic_clear_var\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7489:hb_paint_sweep_gradient_nil\28hb_paint_funcs_t*\2c\20void*\2c\20hb_color_line_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7490:hb_paint_push_transform_nil\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7491:hb_paint_push_clip_rectangle_nil\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7492:hb_paint_image_nil\28hb_paint_funcs_t*\2c\20void*\2c\20hb_blob_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20float\2c\20hb_glyph_extents_t*\2c\20void*\29
+7493:hb_paint_extents_push_transform\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7494:hb_paint_extents_push_group\28hb_paint_funcs_t*\2c\20void*\2c\20void*\29
+7495:hb_paint_extents_push_clip_rectangle\28hb_paint_funcs_t*\2c\20void*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7496:hb_paint_extents_push_clip_glyph\28hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_font_t*\2c\20void*\29
+7497:hb_paint_extents_pop_transform\28hb_paint_funcs_t*\2c\20void*\2c\20void*\29
+7498:hb_paint_extents_pop_group\28hb_paint_funcs_t*\2c\20void*\2c\20hb_paint_composite_mode_t\2c\20void*\29
+7499:hb_paint_extents_pop_clip\28hb_paint_funcs_t*\2c\20void*\2c\20void*\29
+7500:hb_paint_extents_paint_sweep_gradient\28hb_paint_funcs_t*\2c\20void*\2c\20hb_color_line_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7501:hb_paint_extents_paint_image\28hb_paint_funcs_t*\2c\20void*\2c\20hb_blob_t*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20float\2c\20hb_glyph_extents_t*\2c\20void*\29
+7502:hb_paint_extents_paint_color\28hb_paint_funcs_t*\2c\20void*\2c\20int\2c\20unsigned\20int\2c\20void*\29
+7503:hb_outline_recording_pen_quadratic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7504:hb_outline_recording_pen_move_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+7505:hb_outline_recording_pen_line_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+7506:hb_outline_recording_pen_cubic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7507:hb_outline_recording_pen_close_path\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20void*\29
+7508:hb_ot_paint_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+7509:hb_ot_map_t::lookup_map_t::cmp\28void\20const*\2c\20void\20const*\29
+7510:hb_ot_map_t::feature_map_t::cmp\28void\20const*\2c\20void\20const*\29
+7511:hb_ot_map_builder_t::feature_info_t::cmp\28void\20const*\2c\20void\20const*\29
+7512:hb_ot_get_variation_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+7513:hb_ot_get_nominal_glyphs\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20void*\29
+7514:hb_ot_get_nominal_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+7515:hb_ot_get_glyph_v_origin\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7516:hb_ot_get_glyph_v_advances\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+7517:hb_ot_get_glyph_name\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20char*\2c\20unsigned\20int\2c\20void*\29
+7518:hb_ot_get_glyph_h_advances\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+7519:hb_ot_get_glyph_from_name\28hb_font_t*\2c\20void*\2c\20char\20const*\2c\20int\2c\20unsigned\20int*\2c\20void*\29
+7520:hb_ot_get_glyph_extents\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+7521:hb_ot_get_font_v_extents\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+7522:hb_ot_get_font_h_extents\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+7523:hb_ot_draw_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_draw_funcs_t*\2c\20void*\2c\20void*\29
+7524:hb_font_paint_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_paint_funcs_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+7525:hb_font_get_variation_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+7526:hb_font_get_nominal_glyphs_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20void*\29
+7527:hb_font_get_nominal_glyph_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+7528:hb_font_get_nominal_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+7529:hb_font_get_glyph_v_origin_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7530:hb_font_get_glyph_v_origin_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7531:hb_font_get_glyph_v_kerning_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+7532:hb_font_get_glyph_v_advances_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+7533:hb_font_get_glyph_v_advance_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+7534:hb_font_get_glyph_v_advance_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+7535:hb_font_get_glyph_name_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20char*\2c\20unsigned\20int\2c\20void*\29
+7536:hb_font_get_glyph_name_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20char*\2c\20unsigned\20int\2c\20void*\29
+7537:hb_font_get_glyph_h_origin_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7538:hb_font_get_glyph_h_origin_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7539:hb_font_get_glyph_h_kerning_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20void*\29
+7540:hb_font_get_glyph_h_advances_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+7541:hb_font_get_glyph_h_advance_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+7542:hb_font_get_glyph_h_advance_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+7543:hb_font_get_glyph_from_name_default\28hb_font_t*\2c\20void*\2c\20char\20const*\2c\20int\2c\20unsigned\20int*\2c\20void*\29
+7544:hb_font_get_glyph_extents_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+7545:hb_font_get_glyph_extents_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+7546:hb_font_get_glyph_contour_point_nil\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7547:hb_font_get_glyph_contour_point_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20int*\2c\20int*\2c\20void*\29
+7548:hb_font_get_font_v_extents_default\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+7549:hb_font_get_font_h_extents_default\28hb_font_t*\2c\20void*\2c\20hb_font_extents_t*\2c\20void*\29
+7550:hb_font_draw_glyph_default\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_draw_funcs_t*\2c\20void*\2c\20void*\29
+7551:hb_draw_quadratic_to_nil\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7552:hb_draw_quadratic_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7553:hb_draw_move_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+7554:hb_draw_line_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20void*\29
+7555:hb_draw_extents_quadratic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7556:hb_draw_extents_cubic_to\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7557:hb_draw_cubic_to_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20void*\29
+7558:hb_draw_close_path_default\28hb_draw_funcs_t*\2c\20void*\2c\20hb_draw_state_t*\2c\20void*\29
+7559:hb_blob_t*\20hb_sanitize_context_t::sanitize_blob<OT::hhea>\28hb_blob_t*\29
+7560:hb_aat_map_builder_t::feature_info_t::cmp\28void\20const*\2c\20void\20const*\29
+7561:hb_aat_map_builder_t::feature_event_t::cmp\28void\20const*\2c\20void\20const*\29
+7562:h2v2_upsample
+7563:h2v2_merged_upsample_565D
+7564:h2v2_merged_upsample_565
+7565:h2v2_merged_upsample
+7566:h2v2_fancy_upsample
+7567:h2v1_upsample
+7568:h2v1_merged_upsample_565D
+7569:h2v1_merged_upsample_565
+7570:h2v1_merged_upsample
+7571:h2v1_fancy_upsample
+7572:grayscale_convert
+7573:gray_rgb_convert
+7574:gray_rgb565_convert
+7575:gray_rgb565D_convert
+7576:gray_raster_render
+7577:gray_raster_new
+7578:gray_raster_done
+7579:gray_move_to
+7580:gray_line_to
+7581:gray_cubic_to
+7582:gray_conic_to
+7583:get_sk_marker_list\28jpeg_decompress_struct*\29
+7584:get_sfnt_table
+7585:get_interesting_appn
+7586:fullsize_upsample
+7587:ft_smooth_transform
+7588:ft_smooth_set_mode
+7589:ft_smooth_render
+7590:ft_smooth_overlap_spans
+7591:ft_smooth_lcd_spans
+7592:ft_smooth_init
+7593:ft_smooth_get_cbox
+7594:ft_gzip_free
+7595:ft_gzip_alloc
+7596:ft_ansi_stream_io
+7597:ft_ansi_stream_close
+7598:fquad_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+7599:format_message
+7600:fmt_fp
+7601:fline_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+7602:first_axis_intersection\28double\20const*\2c\20bool\2c\20double\2c\20double*\29
+7603:finish_pass1
+7604:finish_output_pass
+7605:finish_input_pass
+7606:final_reordering_indic\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7607:fcubic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+7608:fconic_dxdy_at_t\28SkPoint\20const*\2c\20float\2c\20double\29
+7609:fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7610:fast_swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7611:fast_swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7612:fast_swizzle_rgb_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7613:fast_swizzle_rgb_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7614:fast_swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7615:fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7616:fast_swizzle_gray_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7617:fast_swizzle_cmyk_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7618:fast_swizzle_cmyk_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7619:error_exit
+7620:error_callback
+7621:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28sk_sp<SkTextBlob>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20sk_sp<SkTextBlob>*\2c\20float\2c\20float\2c\20SkPaint*\29
+7622:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint*\29
+7623:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20SkPaint*\29
+7624:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\2c\20float\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\2c\20float\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\29
+7625:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28float\2c\20float\29\2c\20void\2c\20SkCanvas*\2c\20float\2c\20float>::invoke\28void\20\28SkCanvas::*\20const&\29\28float\2c\20float\29\2c\20SkCanvas*\2c\20float\2c\20float\29
+7626:emscripten::internal::MethodInvoker<void\20\28SkCanvas::*\29\28SkPath\20const&\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas*\2c\20SkPath\20const&\2c\20SkPaint\20const&>::invoke\28void\20\28SkCanvas::*\20const&\29\28SkPath\20const&\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20SkPath*\2c\20SkPaint*\29
+7627:emscripten::internal::MethodInvoker<skia::textlayout::SkRange<unsigned\20long>\20\28skia::textlayout::Paragraph::*\29\28unsigned\20int\29\2c\20skia::textlayout::SkRange<unsigned\20long>\2c\20skia::textlayout::Paragraph*\2c\20unsigned\20int>::invoke\28skia::textlayout::SkRange<unsigned\20long>\20\28skia::textlayout::Paragraph::*\20const&\29\28unsigned\20int\29\2c\20skia::textlayout::Paragraph*\2c\20unsigned\20int\29
+7628:emscripten::internal::MethodInvoker<skia::textlayout::PositionWithAffinity\20\28skia::textlayout::Paragraph::*\29\28float\2c\20float\29\2c\20skia::textlayout::PositionWithAffinity\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float>::invoke\28skia::textlayout::PositionWithAffinity\20\28skia::textlayout::Paragraph::*\20const&\29\28float\2c\20float\29\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+7629:emscripten::internal::MethodInvoker<int\20\28skia::textlayout::Paragraph::*\29\28unsigned\20long\29\20const\2c\20int\2c\20skia::textlayout::Paragraph\20const*\2c\20unsigned\20long>::invoke\28int\20\28skia::textlayout::Paragraph::*\20const&\29\28unsigned\20long\29\20const\2c\20skia::textlayout::Paragraph\20const*\2c\20unsigned\20long\29
+7630:emscripten::internal::MethodInvoker<bool\20\28SkPath::*\29\28float\2c\20float\29\20const\2c\20bool\2c\20SkPath\20const*\2c\20float\2c\20float>::invoke\28bool\20\28SkPath::*\20const&\29\28float\2c\20float\29\20const\2c\20SkPath\20const*\2c\20float\2c\20float\29
+7631:emscripten::internal::MethodInvoker<SkPath&\20\28SkPath::*\29\28bool\29\2c\20SkPath&\2c\20SkPath*\2c\20bool>::invoke\28SkPath&\20\28SkPath::*\20const&\29\28bool\29\2c\20SkPath*\2c\20bool\29
+7632:emscripten::internal::Invoker<void\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28void\20\28*\29\28unsigned\20long\2c\20unsigned\20long\29\2c\20unsigned\20long\2c\20unsigned\20long\29
+7633:emscripten::internal::Invoker<void\2c\20emscripten::val>::invoke\28void\20\28*\29\28emscripten::val\29\2c\20emscripten::_EM_VAL*\29
+7634:emscripten::internal::Invoker<unsigned\20long\2c\20unsigned\20long>::invoke\28unsigned\20long\20\28*\29\28unsigned\20long\29\2c\20unsigned\20long\29
+7635:emscripten::internal::Invoker<sk_sp<SkTextBlob>\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&>::invoke\28sk_sp<SkTextBlob>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont*\29
+7636:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\2c\20int\2c\20int\29\2c\20sk_sp<GrDirectContext>*\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>*\2c\20int\2c\20int\29
+7637:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>\29\2c\20sk_sp<GrDirectContext>*\2c\20int\2c\20int\2c\20sk_sp<SkColorSpace>*\29
+7638:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20int\2c\20int>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20int\2c\20int\29\2c\20sk_sp<GrDirectContext>*\2c\20int\2c\20int\29
+7639:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20sk_sp<GrDirectContext>\2c\20SimpleImageInfo>::invoke\28sk_sp<SkSurface>\20\28*\29\28sk_sp<GrDirectContext>\2c\20SimpleImageInfo\29\2c\20sk_sp<GrDirectContext>*\2c\20SimpleImageInfo*\29
+7640:emscripten::internal::Invoker<sk_sp<SkSurface>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkSurface>\20\28*\29\28SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\29
+7641:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+7642:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+7643:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+7644:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+7645:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int>::invoke\28sk_sp<SkShader>\20\28*\29\28float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29\2c\20float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29
+7646:emscripten::internal::Invoker<sk_sp<SkShader>\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkShader>\20\28*\29\28float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>*\29
+7647:emscripten::internal::Invoker<sk_sp<SkRuntimeEffect>\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val>::invoke\28sk_sp<SkRuntimeEffect>\20\28*\29\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\2c\20emscripten::_EM_VAL*\29
+7648:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20unsigned\20long\2c\20int\2c\20float>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28unsigned\20long\2c\20int\2c\20float\29\2c\20unsigned\20long\2c\20int\2c\20float\29
+7649:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20unsigned\20long\2c\20SkPath>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28unsigned\20long\2c\20SkPath\29\2c\20unsigned\20long\2c\20SkPath*\29
+7650:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20float\2c\20unsigned\20long>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28float\2c\20unsigned\20long\29\2c\20float\2c\20unsigned\20long\29
+7651:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20float\2c\20float\2c\20unsigned\20int>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28float\2c\20float\2c\20unsigned\20int\29\2c\20float\2c\20float\2c\20unsigned\20int\29
+7652:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20float>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28float\29\2c\20float\29
+7653:emscripten::internal::Invoker<sk_sp<SkPathEffect>\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style>::invoke\28sk_sp<SkPathEffect>\20\28*\29\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style\29\2c\20SkPath*\2c\20float\2c\20float\2c\20SkPath1DPathEffect::Style\29
+7654:emscripten::internal::Invoker<sk_sp<SkMaskFilter>\2c\20SkBlurStyle\2c\20float\2c\20bool>::invoke\28sk_sp<SkMaskFilter>\20\28*\29\28SkBlurStyle\2c\20float\2c\20bool\29\2c\20SkBlurStyle\2c\20float\2c\20bool\29
+7655:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>\29\2c\20unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>*\29
+7656:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>\29\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>*\29
+7657:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkShader>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkShader>\29\2c\20sk_sp<SkShader>*\29
+7658:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkImage>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkImage>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\29
+7659:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20sk_sp<SkImage>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28sk_sp<SkImage>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+7660:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>*\29
+7661:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29\2c\20float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>*\29
+7662:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\29\2c\20float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>*\29
+7663:emscripten::internal::Invoker<sk_sp<SkImageFilter>\2c\20SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>>::invoke\28sk_sp<SkImageFilter>\20\28*\29\28SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29\2c\20SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>*\2c\20sk_sp<SkImageFilter>*\29
+7664:emscripten::internal::Invoker<sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long>::invoke\28sk_sp<SkImage>\20\28*\29\28SimpleImageInfo\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\29\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\29
+7665:emscripten::internal::Invoker<sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20emscripten::val>::invoke\28sk_sp<SkImage>\20\28*\29\28SimpleImageInfo\2c\20emscripten::val\29\2c\20SimpleImageInfo*\2c\20emscripten::_EM_VAL*\29
+7666:emscripten::internal::Invoker<sk_sp<SkColorFilter>\2c\20unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>>::invoke\28sk_sp<SkColorFilter>\20\28*\29\28unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>\29\2c\20unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>*\29
+7667:emscripten::internal::Invoker<sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>\20const&\2c\20sk_sp<SkColorFilter>>::invoke\28sk_sp<SkColorFilter>\20\28*\29\28sk_sp<SkColorFilter>\20const&\2c\20sk_sp<SkColorFilter>\29\2c\20sk_sp<SkColorFilter>*\2c\20sk_sp<SkColorFilter>*\29
+7668:emscripten::internal::Invoker<sk_sp<SkColorFilter>\2c\20float\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>>::invoke\28sk_sp<SkColorFilter>\20\28*\29\28float\2c\20sk_sp<SkColorFilter>\2c\20sk_sp<SkColorFilter>\29\2c\20float\2c\20sk_sp<SkColorFilter>*\2c\20sk_sp<SkColorFilter>*\29
+7669:emscripten::internal::Invoker<emscripten::val\2c\20unsigned\20long\2c\20int>::invoke\28emscripten::val\20\28*\29\28unsigned\20long\2c\20int\29\2c\20unsigned\20long\2c\20int\29
+7670:emscripten::internal::Invoker<emscripten::val\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>>::invoke\28emscripten::val\20\28*\29\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\29
+7671:emscripten::internal::Invoker<emscripten::val\2c\20emscripten::val\2c\20emscripten::val\2c\20float>::invoke\28emscripten::val\20\28*\29\28emscripten::val\2c\20emscripten::val\2c\20float\29\2c\20emscripten::_EM_VAL*\2c\20emscripten::_EM_VAL*\2c\20float\29
+7672:emscripten::internal::Invoker<emscripten::val\2c\20SkPath\20const&\2c\20SkPath\20const&\2c\20float>::invoke\28emscripten::val\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\2c\20float\29\2c\20SkPath*\2c\20SkPath*\2c\20float\29
+7673:emscripten::internal::Invoker<emscripten::val\2c\20SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp>::invoke\28emscripten::val\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\2c\20SkPathOp\29\2c\20SkPath*\2c\20SkPath*\2c\20SkPathOp\29
+7674:emscripten::internal::Invoker<bool\2c\20unsigned\20long\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long>::invoke\28bool\20\28*\29\28unsigned\20long\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\29\2c\20unsigned\20long\2c\20SkPath*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\29
+7675:emscripten::internal::Invoker<bool\2c\20sk_sp<SkColorSpace>\2c\20sk_sp<SkColorSpace>>::invoke\28bool\20\28*\29\28sk_sp<SkColorSpace>\2c\20sk_sp<SkColorSpace>\29\2c\20sk_sp<SkColorSpace>*\2c\20sk_sp<SkColorSpace>*\29
+7676:emscripten::internal::Invoker<bool\2c\20SkPath\20const&\2c\20SkPath\20const&>::invoke\28bool\20\28*\29\28SkPath\20const&\2c\20SkPath\20const&\29\2c\20SkPath*\2c\20SkPath*\29
+7677:emscripten::internal::Invoker<SkVertices::Builder*\2c\20SkVertices::VertexMode&&\2c\20int&&\2c\20int&&\2c\20unsigned\20int&&>::invoke\28SkVertices::Builder*\20\28*\29\28SkVertices::VertexMode&&\2c\20int&&\2c\20int&&\2c\20unsigned\20int&&\29\2c\20SkVertices::VertexMode\2c\20int\2c\20int\2c\20unsigned\20int\29
+7678:emscripten::internal::Invoker<SkPath\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int>::invoke\28SkPath\20\28*\29\28unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+7679:emscripten::internal::Invoker<SkFont*\2c\20sk_sp<SkTypeface>&&\2c\20float&&\2c\20float&&\2c\20float&&>::invoke\28SkFont*\20\28*\29\28sk_sp<SkTypeface>&&\2c\20float&&\2c\20float&&\2c\20float&&\29\2c\20sk_sp<SkTypeface>*\2c\20float\2c\20float\2c\20float\29
+7680:emscripten::internal::Invoker<SkFont*\2c\20sk_sp<SkTypeface>&&\2c\20float&&>::invoke\28SkFont*\20\28*\29\28sk_sp<SkTypeface>&&\2c\20float&&\29\2c\20sk_sp<SkTypeface>*\2c\20float\29
+7681:emscripten::internal::Invoker<SkFont*\2c\20sk_sp<SkTypeface>&&>::invoke\28SkFont*\20\28*\29\28sk_sp<SkTypeface>&&\29\2c\20sk_sp<SkTypeface>*\29
+7682:emscripten::internal::Invoker<SkContourMeasureIter*\2c\20SkPath\20const&\2c\20bool&&\2c\20float&&>::invoke\28SkContourMeasureIter*\20\28*\29\28SkPath\20const&\2c\20bool&&\2c\20float&&\29\2c\20SkPath*\2c\20bool\2c\20float\29
+7683:emscripten::internal::Invoker<SkCanvas*\2c\20float&&\2c\20float&&>::invoke\28SkCanvas*\20\28*\29\28float&&\2c\20float&&\29\2c\20float\2c\20float\29
+7684:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long\29\2c\20void\2c\20skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long>::invoke\28void\20\28**\29\28skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long\29\2c\20skia::textlayout::TypefaceFontProvider*\2c\20sk_sp<SkTypeface>*\2c\20unsigned\20long\29
+7685:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\29
+7686:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29
+7687:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20SimpleTextStyle*\2c\20SkPaint*\2c\20SkPaint*\29
+7688:emscripten::internal::FunctionInvoker<void\20\28*\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\29\2c\20void\2c\20skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle>::invoke\28void\20\28**\29\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\29\2c\20skia::textlayout::ParagraphBuilderImpl*\2c\20SimpleTextStyle*\29
+7689:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+7690:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+7691:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+7692:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20bool\2c\20bool\2c\20float\2c\20float\29
+7693:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20void\2c\20SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool>::invoke\28void\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20bool\29
+7694:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20void\2c\20SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool>::invoke\28void\20\28**\29\28SkPath&\2c\20SkPath\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath*\2c\20SkPath*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20bool\29
+7695:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkContourMeasure&\2c\20float\2c\20unsigned\20long\29\2c\20void\2c\20SkContourMeasure&\2c\20float\2c\20unsigned\20long>::invoke\28void\20\28**\29\28SkContourMeasure&\2c\20float\2c\20unsigned\20long\29\2c\20SkContourMeasure*\2c\20float\2c\20unsigned\20long\29
+7696:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont*\2c\20SkPaint*\29
+7697:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint*\29
+7698:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7699:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7700:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7701:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20void\2c\20SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*>::invoke\28void\20\28**\29\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29\2c\20SkCanvas*\2c\20sk_sp<SkImage>*\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+7702:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont*\2c\20SkPaint*\29
+7703:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20void\2c\20SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&>::invoke\28void\20\28**\29\28SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29\2c\20SkCanvas*\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint*\29
+7704:emscripten::internal::FunctionInvoker<void\20\28*\29\28SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29\2c\20void\2c\20SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int>::invoke\28void\20\28**\29\28SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29\2c\20SkCanvas*\2c\20SkPath*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29
+7705:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\20\28*\29\28SkFontMgr&\2c\20unsigned\20long\2c\20int\29\2c\20sk_sp<SkTypeface>\2c\20SkFontMgr&\2c\20unsigned\20long\2c\20int>::invoke\28sk_sp<SkTypeface>\20\28**\29\28SkFontMgr&\2c\20unsigned\20long\2c\20int\29\2c\20SkFontMgr*\2c\20unsigned\20long\2c\20int\29
+7706:emscripten::internal::FunctionInvoker<sk_sp<SkTypeface>\20\28*\29\28SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29\2c\20sk_sp<SkTypeface>\2c\20SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val>::invoke\28sk_sp<SkTypeface>\20\28**\29\28SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29\2c\20SkFontMgr*\2c\20emscripten::internal::BindingType<std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20void>::'unnamed'*\2c\20emscripten::_EM_VAL*\29
+7707:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29
+7708:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>*\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29
+7709:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20SkRuntimeEffect*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+7710:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29\2c\20SkRuntimeEffect*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29
+7711:emscripten::internal::FunctionInvoker<sk_sp<SkShader>\20\28*\29\28SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20sk_sp<SkShader>\2c\20SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long>::invoke\28sk_sp<SkShader>\20\28**\29\28SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29\2c\20SkPicture*\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+7712:emscripten::internal::FunctionInvoker<sk_sp<SkPicture>\20\28*\29\28SkPictureRecorder&\29\2c\20sk_sp<SkPicture>\2c\20SkPictureRecorder&>::invoke\28sk_sp<SkPicture>\20\28**\29\28SkPictureRecorder&\29\2c\20SkPictureRecorder*\29
+7713:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\20\28*\29\28SkSurface&\2c\20unsigned\20long\29\2c\20sk_sp<SkImage>\2c\20SkSurface&\2c\20unsigned\20long>::invoke\28sk_sp<SkImage>\20\28**\29\28SkSurface&\2c\20unsigned\20long\29\2c\20SkSurface*\2c\20unsigned\20long\29
+7714:emscripten::internal::FunctionInvoker<sk_sp<SkImage>\20\28*\29\28SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo\29\2c\20sk_sp<SkImage>\2c\20SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo>::invoke\28sk_sp<SkImage>\20\28**\29\28SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo\29\2c\20SkSurface*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo*\29
+7715:emscripten::internal::FunctionInvoker<sk_sp<SkBlender>\20\28*\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29\2c\20sk_sp<SkBlender>\2c\20SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool>::invoke\28sk_sp<SkBlender>\20\28**\29\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29\2c\20SkRuntimeEffect*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+7716:emscripten::internal::FunctionInvoker<int\20\28*\29\28SkCanvas&\2c\20SkPaint\29\2c\20int\2c\20SkCanvas&\2c\20SkPaint>::invoke\28int\20\28**\29\28SkCanvas&\2c\20SkPaint\29\2c\20SkCanvas*\2c\20SkPaint*\29
+7717:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29\2c\20emscripten::val\2c\20skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle>::invoke\28emscripten::val\20\28**\29\28skia::textlayout::Paragraph&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29\2c\20skia::textlayout::Paragraph*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20skia::textlayout::RectHeightStyle\2c\20skia::textlayout::RectWidthStyle\29
+7718:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28skia::textlayout::Paragraph&\2c\20float\2c\20float\29\2c\20emscripten::val\2c\20skia::textlayout::Paragraph&\2c\20float\2c\20float>::invoke\28emscripten::val\20\28**\29\28skia::textlayout::Paragraph&\2c\20float\2c\20float\29\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+7719:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29\2c\20emscripten::val\2c\20sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*>::invoke\28emscripten::val\20\28**\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29\2c\20sk_sp<SkImage>*\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29
+7720:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29\2c\20emscripten::val\2c\20sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int>::invoke\28emscripten::val\20\28**\29\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29\2c\20sk_sp<SkImage>*\2c\20SkEncodedImageFormat\2c\20int\29
+7721:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28sk_sp<SkImage>\29\2c\20emscripten::val\2c\20sk_sp<SkImage>>::invoke\28emscripten::val\20\28**\29\28sk_sp<SkImage>\29\2c\20sk_sp<SkImage>*\29
+7722:emscripten::internal::FunctionInvoker<emscripten::val\20\28*\29\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29\2c\20emscripten::val\2c\20SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float>::invoke\28emscripten::val\20\28**\29\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29\2c\20SkFont*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29
+7723:emscripten::internal::FunctionInvoker<bool\20\28*\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29\2c\20bool\2c\20sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*>::invoke\28bool\20\28**\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29\2c\20sk_sp<SkImage>*\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29
+7724:emscripten::internal::FunctionInvoker<bool\20\28*\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20bool\2c\20sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int>::invoke\28bool\20\28**\29\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20sk_sp<SkImage>*\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+7725:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20float\29\2c\20bool\2c\20SkPath&\2c\20float\2c\20float\2c\20float>::invoke\28bool\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20float\29\2c\20SkPath*\2c\20float\2c\20float\2c\20float\29
+7726:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20float\2c\20float\2c\20bool\29\2c\20bool\2c\20SkPath&\2c\20float\2c\20float\2c\20bool>::invoke\28bool\20\28**\29\28SkPath&\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath*\2c\20float\2c\20float\2c\20bool\29
+7727:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkPath&\2c\20StrokeOpts\29\2c\20bool\2c\20SkPath&\2c\20StrokeOpts>::invoke\28bool\20\28**\29\28SkPath&\2c\20StrokeOpts\29\2c\20SkPath*\2c\20StrokeOpts*\29
+7728:emscripten::internal::FunctionInvoker<bool\20\28*\29\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20bool\2c\20SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int>::invoke\28bool\20\28**\29\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29\2c\20SkCanvas*\2c\20SimpleImageInfo*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+7729:emscripten::internal::FunctionInvoker<SkPath\20\28*\29\28SkPath\20const&\29\2c\20SkPath\2c\20SkPath\20const&>::invoke\28SkPath\20\28**\29\28SkPath\20const&\29\2c\20SkPath*\29
+7730:emscripten::internal::FunctionInvoker<SkPath\20\28*\29\28SkContourMeasure&\2c\20float\2c\20float\2c\20bool\29\2c\20SkPath\2c\20SkContourMeasure&\2c\20float\2c\20float\2c\20bool>::invoke\28SkPath\20\28**\29\28SkContourMeasure&\2c\20float\2c\20float\2c\20bool\29\2c\20SkContourMeasure*\2c\20float\2c\20float\2c\20bool\29
+7731:emscripten::internal::FunctionInvoker<SkPaint\20\28*\29\28SkPaint\20const&\29\2c\20SkPaint\2c\20SkPaint\20const&>::invoke\28SkPaint\20\28**\29\28SkPaint\20const&\29\2c\20SkPaint*\29
+7732:emscripten::internal::FunctionInvoker<SimpleImageInfo\20\28*\29\28SkSurface&\29\2c\20SimpleImageInfo\2c\20SkSurface&>::invoke\28SimpleImageInfo\20\28**\29\28SkSurface&\29\2c\20SkSurface*\29
+7733:emscripten::internal::FunctionInvoker<RuntimeEffectUniform\20\28*\29\28SkRuntimeEffect&\2c\20int\29\2c\20RuntimeEffectUniform\2c\20SkRuntimeEffect&\2c\20int>::invoke\28RuntimeEffectUniform\20\28**\29\28SkRuntimeEffect&\2c\20int\29\2c\20SkRuntimeEffect*\2c\20int\29
+7734:emit_message
+7735:embind_init_Skia\28\29::$_9::__invoke\28SkAnimatedImage&\29
+7736:embind_init_Skia\28\29::$_99::__invoke\28SkPath&\2c\20unsigned\20long\2c\20bool\29
+7737:embind_init_Skia\28\29::$_98::__invoke\28SkPath&\2c\20unsigned\20long\2c\20int\2c\20bool\29
+7738:embind_init_Skia\28\29::$_97::__invoke\28SkPath&\2c\20float\2c\20float\2c\20float\2c\20bool\29
+7739:embind_init_Skia\28\29::$_96::__invoke\28SkPath&\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20int\29
+7740:embind_init_Skia\28\29::$_95::__invoke\28SkPath&\2c\20unsigned\20long\2c\20float\2c\20float\29
+7741:embind_init_Skia\28\29::$_94::__invoke\28unsigned\20long\2c\20SkPath\29
+7742:embind_init_Skia\28\29::$_93::__invoke\28float\2c\20unsigned\20long\29
+7743:embind_init_Skia\28\29::$_92::__invoke\28unsigned\20long\2c\20int\2c\20float\29
+7744:embind_init_Skia\28\29::$_91::__invoke\28\29
+7745:embind_init_Skia\28\29::$_90::__invoke\28\29
+7746:embind_init_Skia\28\29::$_8::__invoke\28emscripten::val\29
+7747:embind_init_Skia\28\29::$_89::__invoke\28sk_sp<SkColorSpace>\2c\20sk_sp<SkColorSpace>\29
+7748:embind_init_Skia\28\29::$_88::__invoke\28SkPaint&\2c\20unsigned\20int\2c\20sk_sp<SkColorSpace>\29
+7749:embind_init_Skia\28\29::$_87::__invoke\28SkPaint&\2c\20unsigned\20int\29
+7750:embind_init_Skia\28\29::$_86::__invoke\28SkPaint&\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+7751:embind_init_Skia\28\29::$_85::__invoke\28SkPaint&\2c\20unsigned\20long\29
+7752:embind_init_Skia\28\29::$_84::__invoke\28SkPaint\20const&\29
+7753:embind_init_Skia\28\29::$_83::__invoke\28SkBlurStyle\2c\20float\2c\20bool\29
+7754:embind_init_Skia\28\29::$_82::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+7755:embind_init_Skia\28\29::$_81::__invoke\28unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20sk_sp<SkImageFilter>\29
+7756:embind_init_Skia\28\29::$_80::__invoke\28unsigned\20long\2c\20float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+7757:embind_init_Skia\28\29::$_7::__invoke\28GrDirectContext&\2c\20unsigned\20long\29
+7758:embind_init_Skia\28\29::$_79::__invoke\28sk_sp<SkImage>\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+7759:embind_init_Skia\28\29::$_78::__invoke\28sk_sp<SkImage>\2c\20float\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\29
+7760:embind_init_Skia\28\29::$_77::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+7761:embind_init_Skia\28\29::$_76::__invoke\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29
+7762:embind_init_Skia\28\29::$_75::__invoke\28float\2c\20float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20sk_sp<SkImageFilter>\29
+7763:embind_init_Skia\28\29::$_74::__invoke\28sk_sp<SkShader>\29
+7764:embind_init_Skia\28\29::$_73::__invoke\28SkColorChannel\2c\20SkColorChannel\2c\20float\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29
+7765:embind_init_Skia\28\29::$_72::__invoke\28float\2c\20float\2c\20sk_sp<SkImageFilter>\29
+7766:embind_init_Skia\28\29::$_71::__invoke\28sk_sp<SkColorFilter>\2c\20sk_sp<SkImageFilter>\29
+7767:embind_init_Skia\28\29::$_70::__invoke\28float\2c\20float\2c\20SkTileMode\2c\20sk_sp<SkImageFilter>\29
+7768:embind_init_Skia\28\29::$_6::__invoke\28GrDirectContext&\29
+7769:embind_init_Skia\28\29::$_69::__invoke\28SkBlendMode\2c\20sk_sp<SkImageFilter>\2c\20sk_sp<SkImageFilter>\29
+7770:embind_init_Skia\28\29::$_68::__invoke\28SkImageFilter\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+7771:embind_init_Skia\28\29::$_67::__invoke\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+7772:embind_init_Skia\28\29::$_66::__invoke\28sk_sp<SkImage>\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\2c\20GrDirectContext*\29
+7773:embind_init_Skia\28\29::$_65::__invoke\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20unsigned\20long\29
+7774:embind_init_Skia\28\29::$_64::__invoke\28sk_sp<SkImage>\2c\20SkTileMode\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20long\29
+7775:embind_init_Skia\28\29::$_63::__invoke\28sk_sp<SkImage>\29
+7776:embind_init_Skia\28\29::$_62::__invoke\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\2c\20GrDirectContext*\29
+7777:embind_init_Skia\28\29::$_61::__invoke\28sk_sp<SkImage>\2c\20SkEncodedImageFormat\2c\20int\29
+7778:embind_init_Skia\28\29::$_60::__invoke\28sk_sp<SkImage>\29
+7779:embind_init_Skia\28\29::$_5::__invoke\28GrDirectContext&\29
+7780:embind_init_Skia\28\29::$_59::__invoke\28sk_sp<SkImage>\29
+7781:embind_init_Skia\28\29::$_58::__invoke\28SkFontMgr&\2c\20unsigned\20long\2c\20int\29
+7782:embind_init_Skia\28\29::$_57::__invoke\28SkFontMgr&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29
+7783:embind_init_Skia\28\29::$_56::__invoke\28SkFontMgr&\2c\20int\29
+7784:embind_init_Skia\28\29::$_55::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20int\29
+7785:embind_init_Skia\28\29::$_54::__invoke\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20float\2c\20float\29
+7786:embind_init_Skia\28\29::$_53::__invoke\28SkFont&\29
+7787:embind_init_Skia\28\29::$_52::__invoke\28SkFont&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+7788:embind_init_Skia\28\29::$_51::__invoke\28SkFont&\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPaint*\29
+7789:embind_init_Skia\28\29::$_50::__invoke\28SkContourMeasure&\2c\20float\2c\20float\2c\20bool\29
+7790:embind_init_Skia\28\29::$_4::__invoke\28unsigned\20long\2c\20unsigned\20long\29
+7791:embind_init_Skia\28\29::$_49::__invoke\28SkContourMeasure&\2c\20float\2c\20unsigned\20long\29
+7792:embind_init_Skia\28\29::$_48::__invoke\28unsigned\20long\29
+7793:embind_init_Skia\28\29::$_47::__invoke\28unsigned\20long\2c\20SkBlendMode\2c\20sk_sp<SkColorSpace>\29
+7794:embind_init_Skia\28\29::$_46::__invoke\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+7795:embind_init_Skia\28\29::$_45::__invoke\28SkCanvas&\2c\20SkPaint\29
+7796:embind_init_Skia\28\29::$_44::__invoke\28SkCanvas&\2c\20SkPaint\20const*\2c\20unsigned\20long\2c\20SkImageFilter\20const*\2c\20unsigned\20int\29
+7797:embind_init_Skia\28\29::$_43::__invoke\28SkCanvas&\2c\20SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20int\29
+7798:embind_init_Skia\28\29::$_42::__invoke\28SkCanvas&\2c\20SimpleImageInfo\29
+7799:embind_init_Skia\28\29::$_41::__invoke\28SkCanvas\20const&\2c\20unsigned\20long\29
+7800:embind_init_Skia\28\29::$_40::__invoke\28SkCanvas\20const&\2c\20unsigned\20long\29
+7801:embind_init_Skia\28\29::$_3::__invoke\28unsigned\20long\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\29
+7802:embind_init_Skia\28\29::$_39::__invoke\28SkCanvas\20const&\2c\20unsigned\20long\29
+7803:embind_init_Skia\28\29::$_38::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29
+7804:embind_init_Skia\28\29::$_37::__invoke\28SkCanvas&\2c\20SkPath\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20int\29
+7805:embind_init_Skia\28\29::$_36::__invoke\28SkCanvas&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const&\29
+7806:embind_init_Skia\28\29::$_35::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+7807:embind_init_Skia\28\29::$_34::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+7808:embind_init_Skia\28\29::$_33::__invoke\28SkCanvas&\2c\20SkCanvas::PointMode\2c\20unsigned\20long\2c\20int\2c\20SkPaint&\29
+7809:embind_init_Skia\28\29::$_32::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkBlendMode\2c\20SkPaint\20const&\29
+7810:embind_init_Skia\28\29::$_31::__invoke\28SkCanvas&\2c\20skia::textlayout::Paragraph*\2c\20float\2c\20float\29
+7811:embind_init_Skia\28\29::$_30::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+7812:embind_init_Skia\28\29::$_2::__invoke\28SimpleImageInfo\2c\20unsigned\20long\2c\20int\2c\20unsigned\20long\29
+7813:embind_init_Skia\28\29::$_29::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+7814:embind_init_Skia\28\29::$_28::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7815:embind_init_Skia\28\29::$_27::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\20const*\2c\20bool\29
+7816:embind_init_Skia\28\29::$_26::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFilterMode\2c\20SkPaint\20const*\29
+7817:embind_init_Skia\28\29::$_25::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+7818:embind_init_Skia\28\29::$_24::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7819:embind_init_Skia\28\29::$_23::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7820:embind_init_Skia\28\29::$_22::__invoke\28SkCanvas&\2c\20int\2c\20unsigned\20long\2c\20unsigned\20long\2c\20float\2c\20float\2c\20SkFont\20const&\2c\20SkPaint\20const&\29
+7821:embind_init_Skia\28\29::$_21::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkPaint\20const&\29
+7822:embind_init_Skia\28\29::$_20::__invoke\28SkCanvas&\2c\20unsigned\20int\2c\20SkBlendMode\29
+7823:embind_init_Skia\28\29::$_1::__invoke\28unsigned\20long\2c\20unsigned\20long\29
+7824:embind_init_Skia\28\29::$_19::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkBlendMode\29
+7825:embind_init_Skia\28\29::$_18::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+7826:embind_init_Skia\28\29::$_17::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20float\2c\20float\2c\20SkPaint\20const*\29
+7827:embind_init_Skia\28\29::$_16::__invoke\28SkCanvas&\2c\20sk_sp<SkImage>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20int\2c\20SkBlendMode\2c\20SkFilterMode\2c\20SkMipmapMode\2c\20SkPaint\20const*\29
+7828:embind_init_Skia\28\29::$_15::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\2c\20SkPaint\20const&\29
+7829:embind_init_Skia\28\29::$_14::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+7830:embind_init_Skia\28\29::$_146::__invoke\28SkVertices::Builder&\29
+7831:embind_init_Skia\28\29::$_145::__invoke\28SkVertices::Builder&\29
+7832:embind_init_Skia\28\29::$_144::__invoke\28SkVertices::Builder&\29
+7833:embind_init_Skia\28\29::$_143::__invoke\28SkVertices::Builder&\29
+7834:embind_init_Skia\28\29::$_142::__invoke\28SkVertices&\2c\20unsigned\20long\29
+7835:embind_init_Skia\28\29::$_141::__invoke\28SkTypeface&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+7836:embind_init_Skia\28\29::$_140::__invoke\28unsigned\20long\2c\20int\29
+7837:embind_init_Skia\28\29::$_13::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29
+7838:embind_init_Skia\28\29::$_139::__invoke\28\29
+7839:embind_init_Skia\28\29::$_138::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+7840:embind_init_Skia\28\29::$_137::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+7841:embind_init_Skia\28\29::$_136::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+7842:embind_init_Skia\28\29::$_135::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20SkFont\20const&\29
+7843:embind_init_Skia\28\29::$_134::__invoke\28SkSurface&\29
+7844:embind_init_Skia\28\29::$_133::__invoke\28SkSurface&\29
+7845:embind_init_Skia\28\29::$_132::__invoke\28SkSurface&\29
+7846:embind_init_Skia\28\29::$_131::__invoke\28SkSurface&\2c\20SimpleImageInfo\29
+7847:embind_init_Skia\28\29::$_130::__invoke\28SkSurface&\2c\20unsigned\20long\29
+7848:embind_init_Skia\28\29::$_12::__invoke\28SkCanvas&\2c\20unsigned\20long\2c\20SkClipOp\2c\20bool\29
+7849:embind_init_Skia\28\29::$_129::__invoke\28SkSurface&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20SimpleImageInfo\29
+7850:embind_init_Skia\28\29::$_128::__invoke\28SkSurface&\29
+7851:embind_init_Skia\28\29::$_127::__invoke\28SkSurface&\29
+7852:embind_init_Skia\28\29::$_126::__invoke\28SimpleImageInfo\2c\20unsigned\20long\2c\20unsigned\20long\29
+7853:embind_init_Skia\28\29::$_125::__invoke\28SkRuntimeEffect&\2c\20int\29
+7854:embind_init_Skia\28\29::$_124::__invoke\28SkRuntimeEffect&\2c\20int\29
+7855:embind_init_Skia\28\29::$_123::__invoke\28SkRuntimeEffect&\29
+7856:embind_init_Skia\28\29::$_122::__invoke\28SkRuntimeEffect&\29
+7857:embind_init_Skia\28\29::$_121::__invoke\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\29
+7858:embind_init_Skia\28\29::$_120::__invoke\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+7859:embind_init_Skia\28\29::$_11::__invoke\28SkCanvas&\2c\20unsigned\20long\29
+7860:embind_init_Skia\28\29::$_119::__invoke\28SkRuntimeEffect&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20bool\2c\20unsigned\20long\29
+7861:embind_init_Skia\28\29::$_118::__invoke\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29
+7862:embind_init_Skia\28\29::$_117::__invoke\28std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\2c\20emscripten::val\29
+7863:embind_init_Skia\28\29::$_116::__invoke\28unsigned\20long\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+7864:embind_init_Skia\28\29::$_115::__invoke\28float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29
+7865:embind_init_Skia\28\29::$_114::__invoke\28float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20float\2c\20float\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+7866:embind_init_Skia\28\29::$_113::__invoke\28float\2c\20float\2c\20float\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+7867:embind_init_Skia\28\29::$_112::__invoke\28unsigned\20long\2c\20unsigned\20long\2c\20SkColorType\2c\20unsigned\20long\2c\20int\2c\20SkTileMode\2c\20unsigned\20int\2c\20unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+7868:embind_init_Skia\28\29::$_111::__invoke\28float\2c\20float\2c\20int\2c\20float\2c\20int\2c\20int\29
+7869:embind_init_Skia\28\29::$_110::__invoke\28unsigned\20long\2c\20sk_sp<SkColorSpace>\29
+7870:embind_init_Skia\28\29::$_10::__invoke\28SkAnimatedImage&\29
+7871:embind_init_Skia\28\29::$_109::__invoke\28SkPicture&\29
+7872:embind_init_Skia\28\29::$_108::__invoke\28SkPicture&\2c\20unsigned\20long\29
+7873:embind_init_Skia\28\29::$_107::__invoke\28SkPicture&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkFilterMode\2c\20unsigned\20long\2c\20unsigned\20long\29
+7874:embind_init_Skia\28\29::$_106::__invoke\28SkPictureRecorder&\29
+7875:embind_init_Skia\28\29::$_105::__invoke\28SkPictureRecorder&\2c\20unsigned\20long\2c\20bool\29
+7876:embind_init_Skia\28\29::$_104::__invoke\28SkPath&\2c\20unsigned\20long\29
+7877:embind_init_Skia\28\29::$_103::__invoke\28SkPath&\2c\20unsigned\20long\29
+7878:embind_init_Skia\28\29::$_102::__invoke\28SkPath&\2c\20int\2c\20unsigned\20long\29
+7879:embind_init_Skia\28\29::$_101::__invoke\28SkPath&\2c\20unsigned\20long\2c\20float\2c\20float\2c\20bool\29
+7880:embind_init_Skia\28\29::$_100::__invoke\28SkPath&\2c\20unsigned\20long\2c\20bool\29
+7881:embind_init_Skia\28\29::$_0::__invoke\28unsigned\20long\2c\20unsigned\20long\29
+7882:embind_init_Paragraph\28\29::$_9::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+7883:embind_init_Paragraph\28\29::$_8::__invoke\28skia::textlayout::ParagraphBuilderImpl&\29
+7884:embind_init_Paragraph\28\29::$_7::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20float\2c\20float\2c\20skia::textlayout::PlaceholderAlignment\2c\20skia::textlayout::TextBaseline\2c\20float\29
+7885:embind_init_Paragraph\28\29::$_6::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\2c\20SkPaint\2c\20SkPaint\29
+7886:embind_init_Paragraph\28\29::$_5::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20SimpleTextStyle\29
+7887:embind_init_Paragraph\28\29::$_4::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20std::__2::basic_string<char\2c\20std::__2::char_traits<char>\2c\20std::__2::allocator<char>>\29
+7888:embind_init_Paragraph\28\29::$_3::__invoke\28emscripten::val\2c\20emscripten::val\2c\20float\29
+7889:embind_init_Paragraph\28\29::$_2::__invoke\28SimpleParagraphStyle\2c\20sk_sp<skia::textlayout::FontCollection>\29
+7890:embind_init_Paragraph\28\29::$_18::__invoke\28skia::textlayout::FontCollection&\2c\20sk_sp<skia::textlayout::TypefaceFontProvider>\20const&\29
+7891:embind_init_Paragraph\28\29::$_17::__invoke\28\29
+7892:embind_init_Paragraph\28\29::$_16::__invoke\28skia::textlayout::TypefaceFontProvider&\2c\20sk_sp<SkTypeface>\2c\20unsigned\20long\29
+7893:embind_init_Paragraph\28\29::$_15::__invoke\28\29
+7894:embind_init_Paragraph\28\29::$_14::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+7895:embind_init_Paragraph\28\29::$_13::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+7896:embind_init_Paragraph\28\29::$_12::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+7897:embind_init_Paragraph\28\29::$_11::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+7898:embind_init_Paragraph\28\29::$_10::__invoke\28skia::textlayout::ParagraphBuilderImpl&\2c\20unsigned\20long\2c\20unsigned\20long\29
+7899:dispose_external_texture\28void*\29
+7900:deleteJSTexture\28void*\29
+7901:deflate_slow
+7902:deflate_fast
+7903:decompress_smooth_data
+7904:decompress_onepass
+7905:decompress_data
+7906:decompose_unicode\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\29
+7907:decompose_khmer\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\29
+7908:decompose_indic\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int*\29
+7909:decode_mcu_DC_refine
+7910:decode_mcu_DC_first
+7911:decode_mcu_AC_refine
+7912:decode_mcu_AC_first
+7913:decode_mcu
+7914:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::Make\28SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20bool\2c\20bool\29::'lambda'\28void*\29>\28skgpu::ganesh::\28anonymous\20namespace\29::QuadEdgeEffect::Make\28SkArenaAlloc*\2c\20SkMatrix\20const&\2c\20bool\2c\20bool\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7915:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::\28anonymous\20namespace\29::HullShader*\20SkArenaAlloc::make<skgpu::ganesh::\28anonymous\20namespace\29::HullShader\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&>\28SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&\29::'lambda'\28void*\29>\28skgpu::ganesh::\28anonymous\20namespace\29::HullShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7916:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList*\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator::PathStrokeList\2c\20skgpu::ganesh::StrokeTessellator::PathStrokeList>\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\29::'lambda'\28void*\29>\28skgpu::ganesh::StrokeTessellator::PathStrokeList&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7917:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator*\20SkArenaAlloc::make<skgpu::ganesh::StrokeTessellator\2c\20skgpu::tess::PatchAttribs&>\28skgpu::tess::PatchAttribs&\29::'lambda'\28void*\29>\28skgpu::ganesh::StrokeTessellator&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7918:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList*\20SkArenaAlloc::make<skgpu::ganesh::PathTessellator::PathDrawList\2c\20SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&>\28SkMatrix\20const&\2c\20SkPath\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29::'lambda'\28void*\29>\28skgpu::ganesh::PathTessellator::PathDrawList&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7919:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::Make\28SkArenaAlloc*\2c\20GrAAType\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::ProcessorFlags\29::'lambda'\28void*\29>\28skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::Processor::Make\28SkArenaAlloc*\2c\20GrAAType\2c\20skgpu::ganesh::FillRRectOp::\28anonymous\20namespace\29::FillRRectOpImpl::ProcessorFlags\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7920:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::RectanizerSkyline*\20SkArenaAlloc::make<skgpu::RectanizerSkyline\2c\20int&\2c\20int&>\28int&\2c\20int&\29::'lambda'\28void*\29>\28skgpu::RectanizerSkyline&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7921:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<skgpu::RectanizerPow2*\20SkArenaAlloc::make<skgpu::RectanizerPow2\2c\20int&\2c\20int&>\28int&\2c\20int&\29::'lambda'\28void*\29>\28skgpu::RectanizerPow2&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7922:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<sk_sp<SkShader>*\20SkArenaAlloc::make<sk_sp<SkShader>>\28\29::'lambda'\28void*\29>\28sk_sp<SkShader>&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7923:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::TextureOpImpl::Desc*\20SkArenaAlloc::make<\28anonymous\20namespace\29::TextureOpImpl::Desc>\28\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::TextureOpImpl::Desc&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7924:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::TentPass*\20SkArenaAlloc::make<\28anonymous\20namespace\29::TentPass\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&>\28skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::TentPass&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7925:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::SimpleTriangleShader*\20SkArenaAlloc::make<\28anonymous\20namespace\29::SimpleTriangleShader\2c\20SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&>\28SkMatrix\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::SimpleTriangleShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7926:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass*\20SkArenaAlloc::make<\28anonymous\20namespace\29::GaussPass\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&>\28skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20skvx::Vec<4\2c\20unsigned\20int>*&\2c\20int&\2c\20int&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::GaussPass&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7927:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::DrawAtlasPathShader*\20SkArenaAlloc::make<\28anonymous\20namespace\29::DrawAtlasPathShader\2c\20bool&\2c\20skgpu::ganesh::AtlasInstancedHelper*\2c\20GrShaderCaps\20const&>\28bool&\2c\20skgpu::ganesh::AtlasInstancedHelper*&&\2c\20GrShaderCaps\20const&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::DrawAtlasPathShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7928:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<\28anonymous\20namespace\29::BoundingBoxShader*\20SkArenaAlloc::make<\28anonymous\20namespace\29::BoundingBoxShader\2c\20SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&>\28SkRGBA4f<\28SkAlphaType\292>&\2c\20GrShaderCaps\20const&\29::'lambda'\28void*\29>\28\28anonymous\20namespace\29::BoundingBoxShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7929:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<Sprite_D32_S32*\20SkArenaAlloc::make<Sprite_D32_S32\2c\20SkPixmap\20const&\2c\20unsigned\20char>\28SkPixmap\20const&\2c\20unsigned\20char&&\29::'lambda'\28void*\29>\28Sprite_D32_S32&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7930:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTriColorShader*\20SkArenaAlloc::make<SkTriColorShader\2c\20bool\2c\20bool\20const&>\28bool&&\2c\20bool\20const&\29::'lambda'\28void*\29>\28SkTriColorShader&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7931:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTCubic*\20SkArenaAlloc::make<SkTCubic>\28\29::'lambda'\28void*\29>\28SkTCubic&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7932:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkTConic*\20SkArenaAlloc::make<SkTConic>\28\29::'lambda'\28void*\29>\28SkTConic&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7933:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy*\20SkArenaAlloc::make<SkSpriteBlitter_Memcpy\2c\20SkPixmap\20const&>\28SkPixmap\20const&\29::'lambda'\28void*\29>\28SkSpriteBlitter_Memcpy&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7934:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::CallbackCtx*\20SkArenaAlloc::make<SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::CallbackCtx>\28\29::'lambda'\28void*\29>\28SkShaderBase::appendStages\28SkStageRec\20const&\2c\20SkShaders::MatrixRec\20const&\29\20const::CallbackCtx&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7935:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter*\20SkArenaAlloc::make<SkRasterPipelineSpriteBlitter\2c\20SkPixmap\20const&\2c\20SkArenaAlloc*&\2c\20sk_sp<SkShader>&>\28SkPixmap\20const&\2c\20SkArenaAlloc*&\2c\20sk_sp<SkShader>&\29::'lambda'\28void*\29>\28SkRasterPipelineSpriteBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7936:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkRasterPipelineBlitter*\20SkArenaAlloc::make<SkRasterPipelineBlitter\2c\20SkPixmap\20const&\2c\20SkArenaAlloc*&>\28SkPixmap\20const&\2c\20SkArenaAlloc*&\29::'lambda'\28void*\29>\28SkRasterPipelineBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7937:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkNullBlitter*\20SkArenaAlloc::make<SkNullBlitter>\28\29::'lambda'\28void*\29>\28SkNullBlitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7938:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkMipmapAccessor*\20SkArenaAlloc::make<SkMipmapAccessor\2c\20SkImage_Base\20const*\2c\20SkMatrix\20const&\2c\20SkMipmapMode&>\28SkImage_Base\20const*&&\2c\20SkMatrix\20const&\2c\20SkMipmapMode&\29::'lambda'\28void*\29>\28SkMipmapAccessor&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7939:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph::PathData*\20SkArenaAlloc::make<SkGlyph::PathData>\28\29::'lambda'\28void*\29>\28SkGlyph::PathData&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7940:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph::DrawableData*\20SkArenaAlloc::make<SkGlyph::DrawableData>\28\29::'lambda'\28void*\29>\28SkGlyph::DrawableData&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7941:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkGlyph*\20SkArenaAlloc::make<SkGlyph\2c\20SkGlyph>\28SkGlyph&&\29::'lambda'\28void*\29>\28SkGlyph&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7942:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>::Node*\20SkArenaAlloc::make<SkArenaAllocList<std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>::Node\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\29::'lambda'\28void*\29>\28SkArenaAllocList<std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7943:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node*\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::InlineUpload>::Node\2c\20std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>\2c\20skgpu::AtlasToken>\28std::__2::function<void\20\28std::__2::function<bool\20\28GrTextureProxy*\2c\20SkIRect\2c\20GrColorType\2c\20void\20const*\2c\20unsigned\20long\29>&\29>&&\2c\20skgpu::AtlasToken&&\29::'lambda'\28void*\29>\28SkArenaAllocList<GrOpFlushState::InlineUpload>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7944:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node*\20SkArenaAlloc::make<SkArenaAllocList<GrOpFlushState::Draw>::Node>\28\29::'lambda'\28void*\29>\28SkArenaAllocList<GrOpFlushState::Draw>::Node&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7945:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<SkA8_Coverage_Blitter*\20SkArenaAlloc::make<SkA8_Coverage_Blitter\2c\20SkPixmap\20const&\2c\20SkPaint\20const&>\28SkPixmap\20const&\2c\20SkPaint\20const&\29::'lambda'\28void*\29>\28SkA8_Coverage_Blitter&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7946:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrSimpleMesh*\20SkArenaAlloc::make<GrSimpleMesh>\28\29::'lambda'\28void*\29>\28GrSimpleMesh&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7947:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrResourceAllocator::Register*\20SkArenaAlloc::make<GrResourceAllocator::Register\2c\20GrSurfaceProxy*&\2c\20skgpu::ScratchKey\2c\20GrResourceProvider*&>\28GrSurfaceProxy*&\2c\20skgpu::ScratchKey&&\2c\20GrResourceProvider*&\29::'lambda'\28void*\29>\28GrResourceAllocator::Register&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7948:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrInnerFanTriangulator*\20SkArenaAlloc::make<GrInnerFanTriangulator\2c\20SkPath\20const&\2c\20SkArenaAlloc*\20const&>\28SkPath\20const&\2c\20SkArenaAlloc*\20const&\29::'lambda'\28void*\29>\28GrInnerFanTriangulator&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7949:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrDistanceFieldLCDTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28GrDistanceFieldLCDTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20GrDistanceFieldLCDTextGeoProc::DistanceAdjust\2c\20unsigned\20int\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7950:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29>\28GrBitmapTextGeoProc::Make\28SkArenaAlloc*\2c\20GrShaderCaps\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\2c\20sk_sp<GrColorSpaceXform>\2c\20GrSurfaceProxyView\20const*\2c\20int\2c\20GrSamplerState\2c\20skgpu::MaskFormat\2c\20SkMatrix\20const&\2c\20bool\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7951:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<GrAppliedClip*\20SkArenaAlloc::make<GrAppliedClip\2c\20GrAppliedClip>\28GrAppliedClip&&\29::'lambda'\28void*\29>\28GrAppliedClip&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7952:decltype\28fp\28nullptr\29\29\20SkArenaAlloc::make<EllipseGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29>\28EllipseGeometryProcessor::Make\28SkArenaAlloc*\2c\20bool\2c\20bool\2c\20bool\2c\20SkMatrix\20const&\29::'lambda'\28void*\29&&\29::'lambda'\28char*\29::__invoke\28char*\29
+7953:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_construct\5babi:v160004\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>&\2c\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7954:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&&\29::'lambda'\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&\29
+7955:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7956:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul\2c\201ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7957:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<1ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\29
+7958:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_construct\5babi:v160004\5d<std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__ctor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>&\2c\20std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_constructor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7959:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&&\29::'lambda'\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&>\28std::__2::__variant_detail::__move_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&&\29
+7960:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<void\20std::__2::__variant_detail::__assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>>::__generic_assign\5babi:v160004\5d<std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\29::'lambda'\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20auto&&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__copy_assignment<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7961:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::not_equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7962:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul\2c\200ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&>\28std::__2::__variant_detail::__visitation::__variant::__value_visitor<std::__2::__convert_to_bool<std::__2::equal_to<void>>>&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>\20const&\29
+7963:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20sk_sp<SkStrike>\2c\20std::__2::unique_ptr<SkStrikeSpec\2c\20std::__2::default_delete<SkStrikeSpec>>>&\29
+7964:decltype\28auto\29\20std::__2::__variant_detail::__visitation::__base::__dispatcher<0ul>::__dispatch\5babi:v160004\5d<std::__2::__variant_detail::__dtor<std::__2::__variant_detail::__traits<SkPaint\2c\20int>\2c\20\28std::__2::__variant_detail::_Trait\291>::__destroy\5babi:v160004\5d\28\29::'lambda'\28auto&\29&&\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&>\28auto\2c\20std::__2::__variant_detail::__base<\28std::__2::__variant_detail::_Trait\291\2c\20SkPaint\2c\20int>&\29
+7965:deallocate_buffer_var\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+7966:ddquad_xy_at_t\28SkDCurve\20const&\2c\20double\29
+7967:ddquad_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+7968:ddline_xy_at_t\28SkDCurve\20const&\2c\20double\29
+7969:ddline_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+7970:ddcubic_xy_at_t\28SkDCurve\20const&\2c\20double\29
+7971:ddcubic_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+7972:ddconic_xy_at_t\28SkDCurve\20const&\2c\20double\29
+7973:ddconic_dxdy_at_t\28SkDCurve\20const&\2c\20double\29
+7974:data_destroy_use\28void*\29
+7975:data_create_use\28hb_ot_shape_plan_t\20const*\29
+7976:data_create_khmer\28hb_ot_shape_plan_t\20const*\29
+7977:data_create_indic\28hb_ot_shape_plan_t\20const*\29
+7978:data_create_hangul\28hb_ot_shape_plan_t\20const*\29
+7979:copy\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+7980:convert_bytes_to_data
+7981:consume_markers
+7982:consume_data
+7983:computeTonalColors\28unsigned\20long\2c\20unsigned\20long\29
+7984:compose_unicode\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+7985:compose_indic\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+7986:compose_hebrew\28hb_ot_shape_normalize_context_t\20const*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\29
+7987:compare_ppem
+7988:compare_offsets
+7989:compare_myanmar_order\28hb_glyph_info_t\20const*\2c\20hb_glyph_info_t\20const*\29
+7990:compare_combining_class\28hb_glyph_info_t\20const*\2c\20hb_glyph_info_t\20const*\29
+7991:color_quantize3
+7992:color_quantize
+7993:collect_features_use\28hb_ot_shape_planner_t*\29
+7994:collect_features_myanmar\28hb_ot_shape_planner_t*\29
+7995:collect_features_khmer\28hb_ot_shape_planner_t*\29
+7996:collect_features_indic\28hb_ot_shape_planner_t*\29
+7997:collect_features_hangul\28hb_ot_shape_planner_t*\29
+7998:collect_features_arabic\28hb_ot_shape_planner_t*\29
+7999:clip\28SkPath\20const&\2c\20SkHalfPlane\20const&\29::$_0::__invoke\28SkEdgeClipper*\2c\20bool\2c\20void*\29
+8000:check_for_passthrough_local_coords_and_dead_varyings\28SkSL::Program\20const&\2c\20unsigned\20int*\29::Visitor::visitStatement\28SkSL::Statement\20const&\29
+8001:check_for_passthrough_local_coords_and_dead_varyings\28SkSL::Program\20const&\2c\20unsigned\20int*\29::Visitor::visitProgramElement\28SkSL::ProgramElement\20const&\29
+8002:check_for_passthrough_local_coords_and_dead_varyings\28SkSL::Program\20const&\2c\20unsigned\20int*\29::Visitor::visitExpression\28SkSL::Expression\20const&\29
+8003:cff_slot_init
+8004:cff_slot_done
+8005:cff_size_request
+8006:cff_size_init
+8007:cff_size_done
+8008:cff_sid_to_glyph_name
+8009:cff_set_var_design
+8010:cff_set_mm_weightvector
+8011:cff_set_mm_blend
+8012:cff_set_instance
+8013:cff_random
+8014:cff_ps_has_glyph_names
+8015:cff_ps_get_font_info
+8016:cff_ps_get_font_extra
+8017:cff_parse_vsindex
+8018:cff_parse_private_dict
+8019:cff_parse_multiple_master
+8020:cff_parse_maxstack
+8021:cff_parse_font_matrix
+8022:cff_parse_font_bbox
+8023:cff_parse_cid_ros
+8024:cff_parse_blend
+8025:cff_metrics_adjust
+8026:cff_hadvance_adjust
+8027:cff_glyph_load
+8028:cff_get_var_design
+8029:cff_get_var_blend
+8030:cff_get_standard_encoding
+8031:cff_get_ros
+8032:cff_get_ps_name
+8033:cff_get_name_index
+8034:cff_get_mm_weightvector
+8035:cff_get_mm_var
+8036:cff_get_mm_blend
+8037:cff_get_is_cid
+8038:cff_get_interface
+8039:cff_get_glyph_name
+8040:cff_get_glyph_data
+8041:cff_get_cmap_info
+8042:cff_get_cid_from_glyph_index
+8043:cff_get_advances
+8044:cff_free_glyph_data
+8045:cff_fd_select_get
+8046:cff_face_init
+8047:cff_face_done
+8048:cff_driver_init
+8049:cff_done_blend
+8050:cff_decoder_prepare
+8051:cff_decoder_init
+8052:cff_cmap_unicode_init
+8053:cff_cmap_unicode_char_next
+8054:cff_cmap_unicode_char_index
+8055:cff_cmap_encoding_init
+8056:cff_cmap_encoding_done
+8057:cff_cmap_encoding_char_next
+8058:cff_cmap_encoding_char_index
+8059:cff_builder_start_point
+8060:cff_builder_init
+8061:cff_builder_add_point1
+8062:cff_builder_add_point
+8063:cff_builder_add_contour
+8064:cff_blend_check_vector
+8065:cf2_free_instance
+8066:cf2_decoder_parse_charstrings
+8067:cf2_builder_moveTo
+8068:cf2_builder_lineTo
+8069:cf2_builder_cubeTo
+8070:bw_to_a8\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29
+8071:bw_square_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8072:bw_pt_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8073:bw_poly_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8074:bw_line_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8075:bool\20\28anonymous\20namespace\29::FindVisitor<\28anonymous\20namespace\29::SpotVerticesFactory>\28SkResourceCache::Rec\20const&\2c\20void*\29
+8076:bool\20\28anonymous\20namespace\29::FindVisitor<\28anonymous\20namespace\29::AmbientVerticesFactory>\28SkResourceCache::Rec\20const&\2c\20void*\29
+8077:bool\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+8078:bool\20OT::hb_accelerate_subtables_context_t::apply_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+8079:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+8080:bool\20OT::hb_accelerate_subtables_context_t::apply_cached_to<OT::ChainContextFormat2_5<OT::Layout::SmallTypes>>\28void\20const*\2c\20OT::hb_ot_apply_context_t*\29
+8081:bool\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\2c\20&_hb_arabic_pua_trad_map\28unsigned\20int\29>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8082:bool\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\2c\20&_hb_arabic_pua_simp_map\28unsigned\20int\29>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8083:bool\20OT::cmap::accelerator_t::get_glyph_from_symbol<OT::CmapSubtable\2c\20&OT::_hb_symbol_pua_map\28unsigned\20int\29>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8084:bool\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtableFormat12>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8085:bool\20OT::cmap::accelerator_t::get_glyph_from<OT::CmapSubtable>\28void\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\29
+8086:blur_y_radius_4\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8087:blur_y_radius_3\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8088:blur_y_radius_2\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8089:blur_y_radius_1\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8090:blur_x_radius_4\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8091:blur_x_radius_3\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8092:blur_x_radius_2\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8093:blur_x_radius_1\28skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>\20const&\2c\20skvx::Vec<8\2c\20unsigned\20short>*\2c\20skvx::Vec<8\2c\20unsigned\20short>*\29
+8094:blit_row_s32a_blend\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+8095:blit_row_s32_opaque\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+8096:blit_row_s32_blend\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+8097:argb32_to_a8\28unsigned\20char*\2c\20unsigned\20char\20const*\2c\20int\29
+8098:arabic_fallback_shape\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+8099:alwaysSaveTypefaceBytes\28SkTypeface*\2c\20void*\29
+8100:alloc_sarray
+8101:alloc_barray
+8102:afm_parser_parse
+8103:afm_parser_init
+8104:afm_parser_done
+8105:afm_compare_kern_pairs
+8106:af_property_set
+8107:af_property_get
+8108:af_latin_metrics_scale
+8109:af_latin_metrics_init
+8110:af_latin_hints_init
+8111:af_latin_hints_apply
+8112:af_latin_get_standard_widths
+8113:af_indic_metrics_init
+8114:af_indic_hints_apply
+8115:af_get_interface
+8116:af_face_globals_free
+8117:af_dummy_hints_init
+8118:af_dummy_hints_apply
+8119:af_cjk_metrics_init
+8120:af_autofitter_load_glyph
+8121:af_autofitter_init
+8122:access_virt_sarray
+8123:access_virt_barray
+8124:aa_square_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8125:aa_poly_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8126:aa_line_hair_proc\28PtProcRec\20const&\2c\20SkPoint\20const*\2c\20int\2c\20SkBlitter*\29
+8127:_hb_ot_font_destroy\28void*\29
+8128:_hb_glyph_info_is_default_ignorable\28hb_glyph_info_t\20const*\29
+8129:_hb_face_for_data_reference_table\28hb_face_t*\2c\20unsigned\20int\2c\20void*\29
+8130:_hb_face_for_data_closure_destroy\28void*\29
+8131:_hb_clear_substitution_flags\28hb_ot_shape_plan_t\20const*\2c\20hb_font_t*\2c\20hb_buffer_t*\29
+8132:_embind_initialize_bindings
+8133:__wasm_call_ctors
+8134:__stdio_write
+8135:__stdio_seek
+8136:__stdio_read
+8137:__stdio_close
+8138:__getTypeName
+8139:__cxxabiv1::__vmi_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+8140:__cxxabiv1::__vmi_class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+8141:__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+8142:__cxxabiv1::__si_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+8143:__cxxabiv1::__si_class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+8144:__cxxabiv1::__si_class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+8145:__cxxabiv1::__class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+8146:__cxxabiv1::__class_type_info::search_above_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+8147:__cxxabiv1::__class_type_info::has_unambiguous_public_base\28__cxxabiv1::__dynamic_cast_info*\2c\20void*\2c\20int\29\20const
+8148:__cxxabiv1::__class_type_info::can_catch\28__cxxabiv1::__shim_type_info\20const*\2c\20void*&\29\20const
+8149:__cxx_global_array_dtor.87
+8150:__cxx_global_array_dtor.72
+8151:__cxx_global_array_dtor.6
+8152:__cxx_global_array_dtor.57
+8153:__cxx_global_array_dtor.5
+8154:__cxx_global_array_dtor.44
+8155:__cxx_global_array_dtor.42
+8156:__cxx_global_array_dtor.40
+8157:__cxx_global_array_dtor.38
+8158:__cxx_global_array_dtor.36
+8159:__cxx_global_array_dtor.34
+8160:__cxx_global_array_dtor.32
+8161:__cxx_global_array_dtor.3.1
+8162:__cxx_global_array_dtor.3
+8163:__cxx_global_array_dtor.2
+8164:__cxx_global_array_dtor.17
+8165:__cxx_global_array_dtor.16
+8166:__cxx_global_array_dtor.15
+8167:__cxx_global_array_dtor.138
+8168:__cxx_global_array_dtor.135
+8169:__cxx_global_array_dtor.111
+8170:__cxx_global_array_dtor.11
+8171:__cxx_global_array_dtor.10
+8172:__cxx_global_array_dtor.1.1
+8173:__cxx_global_array_dtor.1
+8174:__cxx_global_array_dtor
+8175:__cxa_pure_virtual
+8176:__cxa_is_pointer_type
+8177:\28anonymous\20namespace\29::skhb_nominal_glyphs\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20unsigned\20int\2c\20void*\29
+8178:\28anonymous\20namespace\29::skhb_nominal_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8179:\28anonymous\20namespace\29::skhb_glyph_h_advances\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\20const*\2c\20unsigned\20int\2c\20int*\2c\20unsigned\20int\2c\20void*\29
+8180:\28anonymous\20namespace\29::skhb_glyph_h_advance\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20void*\29
+8181:\28anonymous\20namespace\29::skhb_glyph_extents\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20hb_glyph_extents_t*\2c\20void*\29
+8182:\28anonymous\20namespace\29::skhb_glyph\28hb_font_t*\2c\20void*\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int*\2c\20void*\29
+8183:\28anonymous\20namespace\29::skhb_get_table\28hb_face_t*\2c\20unsigned\20int\2c\20void*\29::$_0::__invoke\28void*\29
+8184:\28anonymous\20namespace\29::skhb_get_table\28hb_face_t*\2c\20unsigned\20int\2c\20void*\29
+8185:\28anonymous\20namespace\29::make_morphology\28\28anonymous\20namespace\29::MorphType\2c\20SkSize\2c\20sk_sp<SkImageFilter>\2c\20SkImageFilters::CropRect\20const&\29
+8186:\28anonymous\20namespace\29::make_drop_shadow_graph\28SkPoint\2c\20SkSize\2c\20unsigned\20int\2c\20bool\2c\20sk_sp<SkImageFilter>\2c\20std::__2::optional<SkRect>\20const&\29
+8187:\28anonymous\20namespace\29::extension_compare\28SkString\20const&\2c\20SkString\20const&\29
+8188:\28anonymous\20namespace\29::YUVPlanesRec::~YUVPlanesRec\28\29.1
+8189:\28anonymous\20namespace\29::YUVPlanesRec::getCategory\28\29\20const
+8190:\28anonymous\20namespace\29::YUVPlanesRec::diagnostic_only_getDiscardable\28\29\20const
+8191:\28anonymous\20namespace\29::YUVPlanesRec::bytesUsed\28\29\20const
+8192:\28anonymous\20namespace\29::YUVPlanesRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+8193:\28anonymous\20namespace\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\28\29.1
+8194:\28anonymous\20namespace\29::UniqueKeyInvalidator::~UniqueKeyInvalidator\28\29
+8195:\28anonymous\20namespace\29::TriangulatingPathOp::~TriangulatingPathOp\28\29.1
+8196:\28anonymous\20namespace\29::TriangulatingPathOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+8197:\28anonymous\20namespace\29::TriangulatingPathOp::programInfo\28\29
+8198:\28anonymous\20namespace\29::TriangulatingPathOp::onPrepareDraws\28GrMeshDrawTarget*\29
+8199:\28anonymous\20namespace\29::TriangulatingPathOp::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+8200:\28anonymous\20namespace\29::TriangulatingPathOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+8201:\28anonymous\20namespace\29::TriangulatingPathOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+8202:\28anonymous\20namespace\29::TriangulatingPathOp::name\28\29\20const
+8203:\28anonymous\20namespace\29::TriangulatingPathOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+8204:\28anonymous\20namespace\29::TransformedMaskSubRun::unflattenSize\28\29\20const
+8205:\28anonymous\20namespace\29::TransformedMaskSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+8206:\28anonymous\20namespace\29::TransformedMaskSubRun::instanceFlags\28\29\20const
+8207:\28anonymous\20namespace\29::TransformedMaskSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+8208:\28anonymous\20namespace\29::TransformedMaskSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+8209:\28anonymous\20namespace\29::TransformedMaskSubRun::doFlatten\28SkWriteBuffer&\29\20const
+8210:\28anonymous\20namespace\29::TransformedMaskSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+8211:\28anonymous\20namespace\29::TransformedMaskSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+8212:\28anonymous\20namespace\29::TextureOpImpl::~TextureOpImpl\28\29.1
+8213:\28anonymous\20namespace\29::TextureOpImpl::~TextureOpImpl\28\29
+8214:\28anonymous\20namespace\29::TextureOpImpl::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+8215:\28anonymous\20namespace\29::TextureOpImpl::programInfo\28\29
+8216:\28anonymous\20namespace\29::TextureOpImpl::onPrepareDraws\28GrMeshDrawTarget*\29
+8217:\28anonymous\20namespace\29::TextureOpImpl::onPrePrepareDraws\28GrRecordingContext*\2c\20GrSurfaceProxyView\20const&\2c\20GrAppliedClip*\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+8218:\28anonymous\20namespace\29::TextureOpImpl::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+8219:\28anonymous\20namespace\29::TextureOpImpl::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+8220:\28anonymous\20namespace\29::TextureOpImpl::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+8221:\28anonymous\20namespace\29::TextureOpImpl::name\28\29\20const
+8222:\28anonymous\20namespace\29::TextureOpImpl::fixedFunctionFlags\28\29\20const
+8223:\28anonymous\20namespace\29::TextureOpImpl::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+8224:\28anonymous\20namespace\29::TentPass::startBlur\28\29
+8225:\28anonymous\20namespace\29::TentPass::blurSegment\28int\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\2c\20int\29
+8226:\28anonymous\20namespace\29::TentPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker::makePass\28void*\2c\20SkArenaAlloc*\29\20const
+8227:\28anonymous\20namespace\29::TentPass::MakeMaker\28double\2c\20SkArenaAlloc*\29::Maker::bufferSizeBytes\28\29\20const
+8228:\28anonymous\20namespace\29::StaticVertexAllocator::~StaticVertexAllocator\28\29.1
+8229:\28anonymous\20namespace\29::StaticVertexAllocator::~StaticVertexAllocator\28\29
+8230:\28anonymous\20namespace\29::StaticVertexAllocator::unlock\28int\29
+8231:\28anonymous\20namespace\29::StaticVertexAllocator::lock\28unsigned\20long\2c\20int\29
+8232:\28anonymous\20namespace\29::SkUnicodeHbScriptRunIterator::currentScript\28\29\20const
+8233:\28anonymous\20namespace\29::SkUnicodeHbScriptRunIterator::consume\28\29
+8234:\28anonymous\20namespace\29::SkShaderImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8235:\28anonymous\20namespace\29::SkShaderImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8236:\28anonymous\20namespace\29::SkShaderImageFilter::getTypeName\28\29\20const
+8237:\28anonymous\20namespace\29::SkShaderImageFilter::flatten\28SkWriteBuffer&\29\20const
+8238:\28anonymous\20namespace\29::SkShaderImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8239:\28anonymous\20namespace\29::SkMorphologyImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8240:\28anonymous\20namespace\29::SkMorphologyImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8241:\28anonymous\20namespace\29::SkMorphologyImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8242:\28anonymous\20namespace\29::SkMorphologyImageFilter::getTypeName\28\29\20const
+8243:\28anonymous\20namespace\29::SkMorphologyImageFilter::flatten\28SkWriteBuffer&\29\20const
+8244:\28anonymous\20namespace\29::SkMorphologyImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8245:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8246:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8247:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8248:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::getTypeName\28\29\20const
+8249:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::flatten\28SkWriteBuffer&\29\20const
+8250:\28anonymous\20namespace\29::SkMatrixTransformImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8251:\28anonymous\20namespace\29::SkImageImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8252:\28anonymous\20namespace\29::SkImageImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8253:\28anonymous\20namespace\29::SkImageImageFilter::getTypeName\28\29\20const
+8254:\28anonymous\20namespace\29::SkImageImageFilter::flatten\28SkWriteBuffer&\29\20const
+8255:\28anonymous\20namespace\29::SkImageImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8256:\28anonymous\20namespace\29::SkFTGeometrySink::Quad\28FT_Vector_\20const*\2c\20FT_Vector_\20const*\2c\20void*\29
+8257:\28anonymous\20namespace\29::SkFTGeometrySink::Move\28FT_Vector_\20const*\2c\20void*\29
+8258:\28anonymous\20namespace\29::SkFTGeometrySink::Line\28FT_Vector_\20const*\2c\20void*\29
+8259:\28anonymous\20namespace\29::SkFTGeometrySink::Cubic\28FT_Vector_\20const*\2c\20FT_Vector_\20const*\2c\20FT_Vector_\20const*\2c\20void*\29
+8260:\28anonymous\20namespace\29::SkEmptyTypeface::onGetFontDescriptor\28SkFontDescriptor*\2c\20bool*\29\20const
+8261:\28anonymous\20namespace\29::SkEmptyTypeface::onGetFamilyName\28SkString*\29\20const
+8262:\28anonymous\20namespace\29::SkEmptyTypeface::onCreateScalerContext\28SkScalerContextEffects\20const&\2c\20SkDescriptor\20const*\29\20const
+8263:\28anonymous\20namespace\29::SkEmptyTypeface::onCreateFamilyNameIterator\28\29\20const
+8264:\28anonymous\20namespace\29::SkEmptyTypeface::onCharsToGlyphs\28int\20const*\2c\20int\2c\20unsigned\20short*\29\20const
+8265:\28anonymous\20namespace\29::SkEmptyTypeface::MakeFromStream\28std::__2::unique_ptr<SkStreamAsset\2c\20std::__2::default_delete<SkStreamAsset>>\2c\20SkFontArguments\20const&\29
+8266:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8267:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8268:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8269:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::getTypeName\28\29\20const
+8270:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::flatten\28SkWriteBuffer&\29\20const
+8271:\28anonymous\20namespace\29::SkDisplacementMapImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8272:\28anonymous\20namespace\29::SkCropImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8273:\28anonymous\20namespace\29::SkCropImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8274:\28anonymous\20namespace\29::SkCropImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8275:\28anonymous\20namespace\29::SkCropImageFilter::onAffectsTransparentBlack\28\29\20const
+8276:\28anonymous\20namespace\29::SkCropImageFilter::getTypeName\28\29\20const
+8277:\28anonymous\20namespace\29::SkCropImageFilter::flatten\28SkWriteBuffer&\29\20const
+8278:\28anonymous\20namespace\29::SkCropImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8279:\28anonymous\20namespace\29::SkComposeImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8280:\28anonymous\20namespace\29::SkComposeImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8281:\28anonymous\20namespace\29::SkComposeImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8282:\28anonymous\20namespace\29::SkComposeImageFilter::getTypeName\28\29\20const
+8283:\28anonymous\20namespace\29::SkComposeImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8284:\28anonymous\20namespace\29::SkColorFilterImageFilter::onIsColorFilterNode\28SkColorFilter**\29\20const
+8285:\28anonymous\20namespace\29::SkColorFilterImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8286:\28anonymous\20namespace\29::SkColorFilterImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8287:\28anonymous\20namespace\29::SkColorFilterImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8288:\28anonymous\20namespace\29::SkColorFilterImageFilter::onAffectsTransparentBlack\28\29\20const
+8289:\28anonymous\20namespace\29::SkColorFilterImageFilter::getTypeName\28\29\20const
+8290:\28anonymous\20namespace\29::SkColorFilterImageFilter::flatten\28SkWriteBuffer&\29\20const
+8291:\28anonymous\20namespace\29::SkColorFilterImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8292:\28anonymous\20namespace\29::SkBlurImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8293:\28anonymous\20namespace\29::SkBlurImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8294:\28anonymous\20namespace\29::SkBlurImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8295:\28anonymous\20namespace\29::SkBlurImageFilter::getTypeName\28\29\20const
+8296:\28anonymous\20namespace\29::SkBlurImageFilter::flatten\28SkWriteBuffer&\29\20const
+8297:\28anonymous\20namespace\29::SkBlurImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8298:\28anonymous\20namespace\29::SkBlendImageFilter::~SkBlendImageFilter\28\29.1
+8299:\28anonymous\20namespace\29::SkBlendImageFilter::~SkBlendImageFilter\28\29
+8300:\28anonymous\20namespace\29::SkBlendImageFilter::onGetOutputLayerBounds\28skif::Mapping\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8301:\28anonymous\20namespace\29::SkBlendImageFilter::onGetInputLayerBounds\28skif::Mapping\20const&\2c\20skif::LayerSpace<SkIRect>\20const&\2c\20std::__2::optional<skif::LayerSpace<SkIRect>>\29\20const
+8302:\28anonymous\20namespace\29::SkBlendImageFilter::onFilterImage\28skif::Context\20const&\29\20const
+8303:\28anonymous\20namespace\29::SkBlendImageFilter::onAffectsTransparentBlack\28\29\20const
+8304:\28anonymous\20namespace\29::SkBlendImageFilter::getTypeName\28\29\20const
+8305:\28anonymous\20namespace\29::SkBlendImageFilter::flatten\28SkWriteBuffer&\29\20const
+8306:\28anonymous\20namespace\29::SkBlendImageFilter::computeFastBounds\28SkRect\20const&\29\20const
+8307:\28anonymous\20namespace\29::SkBidiIterator_icu::~SkBidiIterator_icu\28\29.1
+8308:\28anonymous\20namespace\29::SkBidiIterator_icu::~SkBidiIterator_icu\28\29
+8309:\28anonymous\20namespace\29::SkBidiIterator_icu::getLevelAt\28int\29
+8310:\28anonymous\20namespace\29::SkBidiIterator_icu::getLength\28\29
+8311:\28anonymous\20namespace\29::SimpleTriangleShader::name\28\29\20const
+8312:\28anonymous\20namespace\29::SimpleTriangleShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::emitVertexCode\28GrShaderCaps\20const&\2c\20GrPathTessellationShader\20const&\2c\20GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+8313:\28anonymous\20namespace\29::SimpleTriangleShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+8314:\28anonymous\20namespace\29::ShaperHarfBuzz::~ShaperHarfBuzz\28\29.1
+8315:\28anonymous\20namespace\29::ShaperHarfBuzz::shape\28char\20const*\2c\20unsigned\20long\2c\20SkShaper::FontRunIterator&\2c\20SkShaper::BiDiRunIterator&\2c\20SkShaper::ScriptRunIterator&\2c\20SkShaper::LanguageRunIterator&\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+8316:\28anonymous\20namespace\29::ShaperHarfBuzz::shape\28char\20const*\2c\20unsigned\20long\2c\20SkShaper::FontRunIterator&\2c\20SkShaper::BiDiRunIterator&\2c\20SkShaper::ScriptRunIterator&\2c\20SkShaper::LanguageRunIterator&\2c\20SkShaper::Feature\20const*\2c\20unsigned\20long\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+8317:\28anonymous\20namespace\29::ShaperHarfBuzz::shape\28char\20const*\2c\20unsigned\20long\2c\20SkFont\20const&\2c\20bool\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+8318:\28anonymous\20namespace\29::ShapeDontWrapOrReorder::~ShapeDontWrapOrReorder\28\29
+8319:\28anonymous\20namespace\29::ShapeDontWrapOrReorder::wrap\28char\20const*\2c\20unsigned\20long\2c\20SkShaper::BiDiRunIterator\20const&\2c\20SkShaper::LanguageRunIterator\20const&\2c\20SkShaper::ScriptRunIterator\20const&\2c\20SkShaper::FontRunIterator\20const&\2c\20\28anonymous\20namespace\29::RunIteratorQueue&\2c\20SkShaper::Feature\20const*\2c\20unsigned\20long\2c\20float\2c\20SkShaper::RunHandler*\29\20const
+8320:\28anonymous\20namespace\29::ShadowInvalidator::~ShadowInvalidator\28\29.1
+8321:\28anonymous\20namespace\29::ShadowInvalidator::~ShadowInvalidator\28\29
+8322:\28anonymous\20namespace\29::ShadowInvalidator::changed\28\29
+8323:\28anonymous\20namespace\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\28\29.1
+8324:\28anonymous\20namespace\29::ShadowCircularRRectOp::~ShadowCircularRRectOp\28\29
+8325:\28anonymous\20namespace\29::ShadowCircularRRectOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+8326:\28anonymous\20namespace\29::ShadowCircularRRectOp::programInfo\28\29
+8327:\28anonymous\20namespace\29::ShadowCircularRRectOp::onPrepareDraws\28GrMeshDrawTarget*\29
+8328:\28anonymous\20namespace\29::ShadowCircularRRectOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+8329:\28anonymous\20namespace\29::ShadowCircularRRectOp::onCreateProgramInfo\28GrCaps\20const*\2c\20SkArenaAlloc*\2c\20GrSurfaceProxyView\20const&\2c\20bool\2c\20GrAppliedClip&&\2c\20GrDstProxyView\20const&\2c\20GrXferBarrierFlags\2c\20GrLoadOp\29
+8330:\28anonymous\20namespace\29::ShadowCircularRRectOp::onCombineIfPossible\28GrOp*\2c\20SkArenaAlloc*\2c\20GrCaps\20const&\29
+8331:\28anonymous\20namespace\29::ShadowCircularRRectOp::name\28\29\20const
+8332:\28anonymous\20namespace\29::ShadowCircularRRectOp::finalize\28GrCaps\20const&\2c\20GrAppliedClip\20const*\2c\20GrClampType\29
+8333:\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29.1
+8334:\28anonymous\20namespace\29::SDFTSubRun::~SDFTSubRun\28\29
+8335:\28anonymous\20namespace\29::SDFTSubRun::vertexStride\28SkMatrix\20const&\29\20const
+8336:\28anonymous\20namespace\29::SDFTSubRun::unflattenSize\28\29\20const
+8337:\28anonymous\20namespace\29::SDFTSubRun::testingOnly_packedGlyphIDToGlyph\28sktext::gpu::StrikeCache*\29\20const
+8338:\28anonymous\20namespace\29::SDFTSubRun::regenerateAtlas\28int\2c\20int\2c\20std::__2::function<std::__2::tuple<bool\2c\20int>\20\28sktext::gpu::GlyphVector*\2c\20int\2c\20int\2c\20skgpu::MaskFormat\2c\20int\29>\29\20const
+8339:\28anonymous\20namespace\29::SDFTSubRun::glyphs\28\29\20const
+8340:\28anonymous\20namespace\29::SDFTSubRun::glyphCount\28\29\20const
+8341:\28anonymous\20namespace\29::SDFTSubRun::fillVertexData\28void*\2c\20int\2c\20int\2c\20unsigned\20int\2c\20SkMatrix\20const&\2c\20SkPoint\2c\20SkIRect\29\20const
+8342:\28anonymous\20namespace\29::SDFTSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+8343:\28anonymous\20namespace\29::SDFTSubRun::doFlatten\28SkWriteBuffer&\29\20const
+8344:\28anonymous\20namespace\29::SDFTSubRun::canReuse\28SkPaint\20const&\2c\20SkMatrix\20const&\29\20const
+8345:\28anonymous\20namespace\29::SDFTSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+8346:\28anonymous\20namespace\29::RectsBlurRec::~RectsBlurRec\28\29.1
+8347:\28anonymous\20namespace\29::RectsBlurRec::~RectsBlurRec\28\29
+8348:\28anonymous\20namespace\29::RectsBlurRec::getCategory\28\29\20const
+8349:\28anonymous\20namespace\29::RectsBlurRec::diagnostic_only_getDiscardable\28\29\20const
+8350:\28anonymous\20namespace\29::RectsBlurRec::bytesUsed\28\29\20const
+8351:\28anonymous\20namespace\29::RectsBlurRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+8352:\28anonymous\20namespace\29::RRectBlurRec::~RRectBlurRec\28\29.1
+8353:\28anonymous\20namespace\29::RRectBlurRec::~RRectBlurRec\28\29
+8354:\28anonymous\20namespace\29::RRectBlurRec::getCategory\28\29\20const
+8355:\28anonymous\20namespace\29::RRectBlurRec::diagnostic_only_getDiscardable\28\29\20const
+8356:\28anonymous\20namespace\29::RRectBlurRec::bytesUsed\28\29\20const
+8357:\28anonymous\20namespace\29::RRectBlurRec::Visitor\28SkResourceCache::Rec\20const&\2c\20void*\29
+8358:\28anonymous\20namespace\29::PathSubRun::~PathSubRun\28\29.1
+8359:\28anonymous\20namespace\29::PathSubRun::~PathSubRun\28\29
+8360:\28anonymous\20namespace\29::PathSubRun::unflattenSize\28\29\20const
+8361:\28anonymous\20namespace\29::PathSubRun::draw\28SkCanvas*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20std::__2::function<void\20\28sktext::gpu::AtlasSubRun\20const*\2c\20SkPoint\2c\20SkPaint\20const&\2c\20sk_sp<SkRefCnt>\2c\20sktext::gpu::RendererData\29>\20const&\29\20const
+8362:\28anonymous\20namespace\29::PathSubRun::doFlatten\28SkWriteBuffer&\29\20const
+8363:\28anonymous\20namespace\29::PathSubRun::MakeFromBuffer\28SkReadBuffer&\2c\20sktext::gpu::SubRunAllocator*\2c\20SkStrikeClient\20const*\29
+8364:\28anonymous\20namespace\29::MipMapRec::~MipMapRec\28\29.1
+8365:\28anonymous\20namespace\29::MipMapRec::~MipMapRec\28\29
+8366:\28anonymous\20namespace\29::MipMapRec::getCategory\28\29\20const
+8367:\28anonymous\20namespace\29::MipMapRec::diagnostic_only_getDiscardable\28\29\20const
+8368:\28anonymous\20namespace\29::MipMapRec::bytesUsed\28\29\20const
+8369:\28anonymous\20namespace\29::MipMapRec::Finder\28SkResourceCache::Rec\20const&\2c\20void*\29
+8370:\28anonymous\20namespace\29::MiddleOutShader::~MiddleOutShader\28\29.1
+8371:\28anonymous\20namespace\29::MiddleOutShader::~MiddleOutShader\28\29
+8372:\28anonymous\20namespace\29::MiddleOutShader::name\28\29\20const
+8373:\28anonymous\20namespace\29::MiddleOutShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const::Impl::emitVertexCode\28GrShaderCaps\20const&\2c\20GrPathTessellationShader\20const&\2c\20GrGLSLVertexBuilder*\2c\20GrGLSLVaryingHandler*\2c\20GrGeometryProcessor::ProgramImpl::GrGPArgs*\29
+8374:\28anonymous\20namespace\29::MiddleOutShader::makeProgramImpl\28GrShaderCaps\20const&\29\20const
+8375:\28anonymous\20namespace\29::MiddleOutShader::addToKey\28GrShaderCaps\20const&\2c\20skgpu::KeyBuilder*\29\20const
+8376:\28anonymous\20namespace\29::MeshOp::~MeshOp\28\29.1
+8377:\28anonymous\20namespace\29::MeshOp::visitProxies\28std::__2::function<void\20\28GrSurfaceProxy*\2c\20skgpu::Mipmapped\29>\20const&\29\20const
+8378:\28anonymous\20namespace\29::MeshOp::programInfo\28\29
+8379:\28anonymous\20namespace\29::MeshOp::onPrepareDraws\28GrMeshDrawTarget*\29
+8380:\28anonymous\20namespace\29::MeshOp::onExecute\28GrOpFlushState*\2c\20SkRect\20const&\29
+8381:\28anonymous\20namespace\29::MeshOp::onCreateProgramInfo\28GrCaps\20const