skia2/bench
Ben Wagner 225c8861b7 [pdf] Differentiate text from byte strings.
In PDF there are two different physical encodings of strings (as a
sequence of bytes). There is the literal string encoding which is
delimited by '(' and ') which stores the bytes as-is except for '(',
')', and the escape character '\' (which can introduce octal encoded
bytes). There is also the hex string encoding delimited by '<' and '>'
and the bytes are encoded in hex pairs (with an implicit '0' at the end
for odd length encodings).

The interpretation of these bytes depends on the logical string type of
the dictionary key. There is a base abstract (well, almost abstract
except for legacy purposes) string type. The subtypes of the string type
are `text string`, `ASCII string`, and `byte string`. The `text string`
is logically further subtyped into `PDFDocEncoded string` and `UTF-16BE
with BOM`. In theory any of these logical string types may have its
encoded bytes written out in either of the two physical string
encodings.

In practice for Skia this means there are two types of string to keep
track of, since `ASCII string` and `byte string` can be treated the
same (in this change they are both treated as `byte string`). If the
type is `text string` then the bytes Skia has are interpreted as UTF-8
and may be converted to `UTF-16BE with BOM` or used directly as
`PDFDocEncoded string` if that is valid. If the type is `byte string`
then the bytes Skia has may not be converted and must be written as-is.

This means that when Skia sets a dictionary key to a string value it
must, at the very least, remember if the key's type was `text string`.
This change replaces all `String` methods with `ByteString` and
`TextString` methods and updates all the callers to the correct one
based on the key being written.

With the string handling corrected, the `/ActualText` string is now
emitted with this new common code as well for better output and to
reduce code duplication. A few no longer used public APIs involving
these strings are removed. The documentation for the URI annotation is
updated to reflect reality.

This change outputs `UTF-16BE with BOM` with the hex string encoding
only and does not attempt to fix the literal string encoding which
always escapes bytes > 0x7F. These changes may be attempted in a
separate change.

Bug: chromium:1323159
Change-Id: I00bdd5c90ad1ff2edfb74a9de41424c4eeac5ccb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/543084
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Herb Derby <herb@google.com>
2022-05-24 18:46:42 +00:00
..
graphite Reland "[graphite] Move Graphite into Skia base directories." 2022-04-11 18:37:20 +00:00
AAClipBench.cpp Simplify SkAAClip to use SkClipOp, not SkRegion::Op 2021-09-20 20:12:38 +00:00
AlternatingColorPatternBench.cpp Simplify common case of linear filtering with no mips 2021-01-15 16:47:16 +00:00
AndroidCodecBench.cpp Reland "Reland "SkSurface asynchronous read APIs allow client to extend pixel lifetime"" 2019-10-03 19:14:22 +00:00
AndroidCodecBench.h Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
BenchLogger.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
BenchLogger.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
Benchmark.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
Benchmark.h [graphite] Add support to nanobench for Graphite. 2022-03-14 20:10:30 +00:00
BezierBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
BigPath.cpp Move ToolUtils::make_big_path() to bench/ 2021-10-14 12:57:29 +00:00
BigPath.h Move ToolUtils::make_big_path() to bench/ 2021-10-14 12:57:29 +00:00
BigPathBench.cpp Move ToolUtils::make_big_path() to bench/ 2021-10-14 12:57:29 +00:00
BitmapRegionDecoderBench.cpp Move SkBitmapRegionCodec into client_utils/android 2020-05-20 20:06:48 +00:00
BitmapRegionDecoderBench.h Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
BlendmodeBench.cpp Re-enable blend micro benchs for non raster backends. 2022-01-05 16:24:48 +00:00
BlurBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
BlurImageFilterBench.cpp drawBitmap is deprecated 2021-01-24 17:39:15 +00:00
BlurRectBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
BlurRectsBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
BulkRectBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
CanvasSaveRestoreBench.cpp Microbench for canvas save/restore calls 2021-07-27 21:08:11 +00:00
ChartBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
ChecksumBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
ChromeBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
ClearBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
ClipMaskBench.cpp remove (unused) clipmask from savelayer 2020-06-15 14:26:44 +00:00
ClipStrategyBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
CmapBench.cpp Fix cases of variable shadowing in /bench/. 2021-08-13 17:51:39 +00:00
CodecBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
CodecBench.h Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
CodecBenchPriv.h rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ColorFilterBench.cpp Convert some SkRuntimeEffect::Make to use stage-specific factories 2021-04-21 16:19:57 +00:00
ColorPrivBench.cpp Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
CompositingImagesBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
ControlBench.cpp Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
CoverageBench.cpp Refactor SkMatrixProvider slightly 2021-12-09 20:10:58 +00:00
CreateBackendTextureBench.cpp mipMapped -> mipmapped 2022-04-18 14:26:19 +00:00
CubicMapBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
DashBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
DDLRecorderBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
DecodeBench.cpp Reland "bench: Add PhoneHub assets to skottie-vs-png decode bench" 2021-09-23 17:40:09 +00:00
DisplacementBench.cpp filter-quality is deprecated, pass sampling to drawImage 2021-01-28 03:22:51 +00:00
DrawBitmapAABench.cpp Simplify common case of linear filtering with no mips 2021-01-15 16:47:16 +00:00
EncodeBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
FilteringBench.cpp other ways to organize samplingoptions? 2020-11-21 02:00:26 +00:00
FindCubicConvex180ChopsBench.cpp Move src/gpu/tessellate/ types into skgpu::tess namespace 2022-05-06 19:57:42 +00:00
FontCacheBench.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
FSRectBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
GameBench.cpp drawBitmap is deprecated 2021-01-24 17:39:15 +00:00
GeometryBench.cpp Reland "[includes] Remove include link between SkPathRef.h and SkRRect.h" 2022-03-07 15:15:05 +00:00
GlyphQuadFillBench.cpp Moving GrTextBlob to sktext::gpu 2022-05-23 17:09:39 +00:00
GMBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
GMBench.h Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
GradientBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
GrMemoryPoolBench.cpp Move Ganesh specific headers into include/private/gpu/ganesh 2022-04-12 17:30:07 +00:00
GrMipmapBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
GrQuadBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
GrResourceCacheBench.cpp Plumbing label string through GrSurfaceProxy. 2022-04-11 14:29:33 +00:00
gUniqueGlyphIDs.h Make header files self-sufficient 2017-02-10 01:19:52 +00:00
HairlinePathBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
HardStopGradientBench_ScaleNumColors.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
HardStopGradientBench_ScaleNumHardStops.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
HardStopGradientBench_SpecialHardStops.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ImageBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
ImageCacheBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
ImageCacheBudgetBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
ImageCycleBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
ImageFilterCollapse.cpp drawBitmap is deprecated 2021-01-24 17:39:15 +00:00
ImageFilterDAGBench.cpp Add SkImageFilters::Blend rename for Xfermode filter 2020-10-13 14:28:26 +00:00
InterpBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
JSONBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
LightingBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
LineBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
MathBench.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
Matrix44Bench.cpp Add mapRect function and RectToRect constructor to SkM44 2021-05-05 19:57:26 +00:00
MatrixBench.cpp Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
MatrixConvolutionBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
MemsetBench.cpp Move sk_memset* from SkUtils to SkOpts 2021-11-03 17:03:21 +00:00
MergeBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
microbench.json Fix the other microbench schema 2014-07-25 08:30:11 -07:00
MipmapBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
MorphologyBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
MSKPBench.cpp MSKP support in nanobench 2021-04-30 20:04:08 +00:00
MSKPBench.h MSKP support in nanobench 2021-04-30 20:04:08 +00:00
MutexBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
nanobench.cpp Reland "[graphite] Move Graphite into Skia base directories." 2022-04-11 18:37:20 +00:00
nanobench.h [graphite] Use finished callbacks in nanobench to manage frames. 2022-03-28 20:14:30 +00:00
ParagraphBench.cpp Fix compilation with "skia_enable_skparagraph = false" 2021-08-31 18:50:20 +00:00
PatchBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
PathBench.cpp [includes] Remove include link between SkPath.h and SkPathRef.h 2022-03-09 00:55:54 +00:00
PathIterBench.cpp Fix shadowed-variable warning in PathIter bench code. 2021-08-19 13:21:20 +00:00
PathOpsBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
PathTextBench.cpp Fix when a glyph has a path 2021-12-07 14:58:29 +00:00
PDFBench.cpp [pdf] Differentiate text from byte strings. 2022-05-24 18:46:42 +00:00
PerlinNoiseBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
PictureNestingBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
PictureOverheadBench.cpp Fix cases of variable shadowing in /bench/. 2021-08-13 17:51:39 +00:00
PicturePlaybackBench.cpp Enable ClangTidy check modernize-make-unique. 2020-08-03 17:53:52 +00:00
PolyUtilsBench.cpp [includes] Enforce IWYU on src/utils 2022-04-28 17:32:20 +00:00
PremulAndUnpremulAlphaOpsBench.cpp Bitmap.asImage() 2020-12-23 15:54:57 +00:00
QuickRejectBench.cpp Revert "Revert "move onto new factories for SkMatrix"" 2020-05-21 16:58:39 +00:00
ReadPixBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
RecordingBench.cpp Reland "[includes] Remove link between SkImage.h and SkImageEncoder.h" 2022-03-10 04:47:51 +00:00
RecordingBench.h Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
RectanizerBench.cpp [graphite] More steps towards a shared DrawAtlas class. 2022-04-21 14:20:45 +00:00
RectBench.cpp Bitmap should use sampling options 2020-12-12 15:36:21 +00:00
RefCntBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
RegionBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
RegionContainBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
RepeatTileBench.cpp Bitmap should use sampling options 2020-12-12 15:36:21 +00:00
ResultsWriter.h Revert "Don't keep "outResultsFile" open in nanobench" 2021-06-19 22:12:48 +00:00
RotatedRectBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
RTreeBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
ScalarBench.cpp Fix cases of variable shadowing in /bench/. 2021-08-13 17:51:39 +00:00
ShaderMaskFilterBench.cpp Reland "remove drawing from ShaderMaskBench ctor" 2021-09-24 17:14:10 +00:00
ShadowBench.cpp Reland "[includes] Remove include link between SkPathRef.h and SkRRect.h" 2022-03-07 15:15:05 +00:00
ShaperBench.cpp Shaper Tests: fix g3 build 2019-05-03 18:10:46 +00:00
ShapesBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
Sk4fBench.cpp Remove SkNx entirely 2022-05-24 15:57:57 +00:00
SkGlyphCacheBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
SkGlyphCacheBench.h nanobench: option to execute directory of TextBlobTraces as benches 2019-10-25 13:28:49 +00:00
SKPAnimationBench.cpp Remove uses of SkCanvas::flush 2020-11-20 21:42:38 +00:00
SKPAnimationBench.h Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SKPBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
SKPBench.h Collect DMSAA stats 2021-05-01 00:46:22 +00:00
skpbench.json Fix scale type in JSON format 2014-06-26 15:39:31 -07:00
SkSLBench.cpp Remove automatic name mangling from DSL. 2022-05-18 15:54:42 +00:00
SkSLBench.h Add heap usage of SkSL::Compiler to nanobench output 2020-07-09 00:05:28 +00:00
SortBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
StreamBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
StrokeBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SwizzleBench.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
TableBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
TessellateBench.cpp Simplify CalcNumRadialSegmentsPerRadian signature 2022-05-11 17:44:05 +00:00
TextBlobBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
TileBench.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
TileImageFilterBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
TopoSortBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
TriangulatorBench.cpp Move all Ganesh source files into ganesh subdirectory. 2022-04-07 21:06:50 +00:00
TypefaceBench.cpp use std::make_unique 2019-12-12 22:32:45 +00:00
VertBench.cpp If we have no textures, suppress the shader 2021-07-23 23:59:08 +00:00
VertexColorSpaceBench.cpp Convert color data to skvx::float4 from Sk4f 2022-05-19 19:45:23 +00:00
WritePixelsBench.cpp [includes] Prepare for moving SkColorSpace to forward declare 2022-03-31 19:50:10 +00:00
WriterBench.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00