[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", &para::Paragraph::didExceedMaxLines)
         .function("getAlphabeticBaseline", &para::Paragraph::getAlphabeticBaseline)
-        .function("getGlyphPositionAtCoordinate", &para::ParagraphImpl::getGlyphPositionAtCoordinate)
+        .function("getGlyphPositionAtCoordinate", &para::Paragraph::getGlyphPositionAtCoordinate)
         .function("getHeight", &para::Paragraph::getHeight)
         .function("getIdeographicBaseline", &para::Paragraph::getIdeographicBaseline)
-        .function("getLineMetrics", &para::ParagraphImpl::getLineMetrics)
+        .function("getLineMetrics", &para::Paragraph::getLineMetrics)
         .function("getLongestLine", &para::Paragraph::getLongestLine)
         .function("getMaxIntrinsicWidth", &para::Paragraph::getMaxIntrinsicWidth)
         .function("getMaxWidth", &para::Paragraph::getMaxWidth)
         .function("getMinIntrinsicWidth", &para::Paragraph::getMinIntrinsicWidth)
         .function("_getRectsForPlaceholders", &GetRectsForPlaceholders)
         .function("_getRectsForRange", &GetRectsForRange)
-        .function("getWordBoundary", &para::ParagraphImpl::getWordBoundary)
-        .function("layout", &para::ParagraphImpl::layout);
+        .function("getWordBoundary", &para::Paragraph::getWordBoundary)
+        .function("layout", &para::Paragraph::layout);
 
     class_<para::ParagraphBuilderImpl>("ParagraphBuilder")
             .class_function(