Optimize CPP code generation.
Previously, we were limiting our calls to appendVAList to 512-byte
chunks to avoid a potential buffer overflow. This had two problems:
1 - it did not avoid the buffer overflow :(
see chromium:1092743
2 - every call to appendVAList is expensive; it incurs a resize of the
code buffer (alloc new, memcpy, free old)
This CL removes the 512-byte cap as the buffer overflow issue was
resolved at http://review.skia.org/297276
This CL also includes a few more minor improvements.
- `codeAppendf` now uses a raw string so the gencode is easier to read.
- Optimized `SkStringPrintf("%s", foo)` to `SkString(foo)`.
- Optimized `strA = strB` to `strA.swap(strB)` where safe to do so.
Change-Id: Ia0909a68719848dd2ca655066a9bc6929c8fd09f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/297358
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
diff --git a/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp b/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp
index 8ae5c9f..4fec9b1 100644
--- a/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp
+++ b/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp
@@ -27,14 +27,19 @@
(void)matrix;
matrixVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag,
kFloat3x3_GrSLType, "matrix");
- fragBuilder->codeAppendf("float3 p = %s * float3(sk_FragCoord.xy, 1);",
- args.fUniformHandler->getUniformCStr(matrixVar));
- SkString _input276 = SkStringPrintf("%s", args.fInputColor);
+ fragBuilder->codeAppendf(
+ R"SkSL(float3 p = %s * float3(sk_FragCoord.xy, 1);)SkSL",
+ args.fUniformHandler->getUniformCStr(matrixVar));
+ SkString _input276(args.fInputColor);
SkString _sample276;
SkString _coords276("p.xy / p.z");
_sample276 =
this->invokeChild(_outer.fp_index, _input276.c_str(), args, _coords276.c_str());
- fragBuilder->codeAppendf("\n%s = %s;\n", args.fOutputColor, _sample276.c_str());
+ fragBuilder->codeAppendf(
+ R"SkSL(
+%s = %s;
+)SkSL",
+ args.fOutputColor, _sample276.c_str());
}
private: