[canvaskit] Attempt to turn off rtti
This removes a little bit of hackery in paragraph bindings
that was needed to work around rtti and virtual methods
and embind.
Bug: skia:10794
Change-Id: I5ed15e805105bed866b9d6ebc0de1f70823d35ec
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/324057
Auto-Submit: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/modules/canvaskit/CHANGELOG.md b/modules/canvaskit/CHANGELOG.md
index d834064..47e1041 100644
--- a/modules/canvaskit/CHANGELOG.md
+++ b/modules/canvaskit/CHANGELOG.md
@@ -8,6 +8,7 @@
### Changed
- We now compile CanvasKit with emsdk 2.0.6 when testing and deploying to npm.
+ - We no longer compile with rtti on, saving about 1% in code size.
## [0.19.0] - 2020-10-08
diff --git a/modules/canvaskit/compile.sh b/modules/canvaskit/compile.sh
index b18f275..505fd1b 100755
--- a/modules/canvaskit/compile.sh
+++ b/modules/canvaskit/compile.sh
@@ -267,7 +267,6 @@
--args="cc=\"${EMCC}\" \
cxx=\"${EMCXX}\" \
ar=\"${EMAR}\" \
- extra_cflags_cc=[\"-frtti\"] \
extra_cflags=[\"-s\", \"WARN_UNALIGNED=1\", \"-s\", \"MAIN_MODULE=1\",
\"-DSKNX_NO_SIMD\", \"-DSK_DISABLE_AAA\",
\"-DSK_FORCE_8_BYTE_ALIGNMENT\",
@@ -347,6 +346,8 @@
-Ithird_party/externals/icu/source/common/ \
-DSK_DISABLE_AAA \
-DSK_FORCE_8_BYTE_ALIGNMENT \
+ -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 \
+ -fno-rtti \
$WASM_GPU \
$WASM_PATHOPS \
$WASM_RT_SHADER \
diff --git a/modules/canvaskit/paragraph_bindings.cpp b/modules/canvaskit/paragraph_bindings.cpp
index c0b83c6..332d1f3 100644
--- a/modules/canvaskit/paragraph_bindings.cpp
+++ b/modules/canvaskit/paragraph_bindings.cpp
@@ -267,7 +267,7 @@
return Float32Array(typed_memory_view(boxes.size() * 5, fPtr));
}
-Float32Array GetRectsForRange(para::ParagraphImpl& self,
+Float32Array GetRectsForRange(para::Paragraph& self,
unsigned start,
unsigned end,
para::RectHeightStyle heightStyle,
@@ -276,33 +276,28 @@
return TextBoxesToFloat32Array(boxes);
}
-Float32Array GetRectsForPlaceholders(para::ParagraphImpl& self) {
+Float32Array GetRectsForPlaceholders(para::Paragraph& self) {
std::vector<para::TextBox> boxes = self.getRectsForPlaceholders();
return TextBoxesToFloat32Array(boxes);
}
EMSCRIPTEN_BINDINGS(Paragraph) {
- class_<para::Paragraph>("Paragraph");
-
- // This "base<>" tells Emscripten that ParagraphImpl is a Paragraph and can get substituted
- // in properly in drawParagraph. However, Emscripten will not let us bind pure virtual methods
- // so we have to "expose" the ParagraphImpl in those cases.
- class_<para::ParagraphImpl, base<para::Paragraph>>("ParagraphImpl")
+ class_<para::Paragraph>("Paragraph")
.function("didExceedMaxLines", ¶::Paragraph::didExceedMaxLines)
.function("getAlphabeticBaseline", ¶::Paragraph::getAlphabeticBaseline)
- .function("getGlyphPositionAtCoordinate", ¶::ParagraphImpl::getGlyphPositionAtCoordinate)
+ .function("getGlyphPositionAtCoordinate", ¶::Paragraph::getGlyphPositionAtCoordinate)
.function("getHeight", ¶::Paragraph::getHeight)
.function("getIdeographicBaseline", ¶::Paragraph::getIdeographicBaseline)
- .function("getLineMetrics", ¶::ParagraphImpl::getLineMetrics)
+ .function("getLineMetrics", ¶::Paragraph::getLineMetrics)
.function("getLongestLine", ¶::Paragraph::getLongestLine)
.function("getMaxIntrinsicWidth", ¶::Paragraph::getMaxIntrinsicWidth)
.function("getMaxWidth", ¶::Paragraph::getMaxWidth)
.function("getMinIntrinsicWidth", ¶::Paragraph::getMinIntrinsicWidth)
.function("_getRectsForPlaceholders", &GetRectsForPlaceholders)
.function("_getRectsForRange", &GetRectsForRange)
- .function("getWordBoundary", ¶::ParagraphImpl::getWordBoundary)
- .function("layout", ¶::ParagraphImpl::layout);
+ .function("getWordBoundary", ¶::Paragraph::getWordBoundary)
+ .function("layout", ¶::Paragraph::layout);
class_<para::ParagraphBuilderImpl>("ParagraphBuilder")
.class_function(