make pixelsnap textblob* etc gm portable

TBR=reed@google.com

Review URL: https://codereview.chromium.org/1263553002
diff --git a/gm/bitmapshader.cpp b/gm/bitmapshader.cpp
index 3e66456..2b6906f 100644
--- a/gm/bitmapshader.cpp
+++ b/gm/bitmapshader.cpp
@@ -44,7 +44,7 @@
 
 protected:
     void onOnceBeforeDraw() override {
-        this->setBGColor(SK_ColorGRAY);
+        this->setBGColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
         draw_bm(&fBitmap);
         draw_mask(&fMask);
     }
diff --git a/gm/blurroundrect.cpp b/gm/blurroundrect.cpp
index 6b11f84..4b3f3bc 100644
--- a/gm/blurroundrect.cpp
+++ b/gm/blurroundrect.cpp
@@ -66,10 +66,11 @@
                     SkBlurMask::ConvertRadiusToSigma(SK_ScalarHalf),
                     SkBlurMaskFilter::kHighQuality_BlurFlag);
             paint->setMaskFilter(maskFilter)->unref();
-            SkColorFilter* colorFilter = SkColorFilter::CreateModeFilter(SK_ColorLTGRAY,
+            SkColorFilter* colorFilter = SkColorFilter::CreateModeFilter(
+                    sk_tool_utils::color_to_565(SK_ColorLTGRAY),
                     SkXfermode::kSrcIn_Mode);
             paint->setColorFilter(colorFilter)->unref();
-            paint->setColor(SK_ColorGRAY);
+            paint->setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
         }
         {
             SkLayerDrawLooper::LayerInfo info;
diff --git a/gm/gm.cpp b/gm/gm.cpp
index 8d269d9..575ffc1 100644
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -79,6 +79,7 @@
     paint.setAntiAlias(true);
     paint.setTextSize(20);
     paint.setColor(SK_ColorRED);
+    sk_tool_utils::set_portable_typeface(&paint);
     static const char kTxt[] = "GPU Only";
     bmpCanvas.drawText(kTxt, strlen(kTxt), 20, 40, paint);
     SkMatrix localM;
diff --git a/gm/imageblur2.cpp b/gm/imageblur2.cpp
index 480f093..58e4096 100644
--- a/gm/imageblur2.cpp
+++ b/gm/imageblur2.cpp
@@ -64,7 +64,8 @@
                 SkRandom rand;
                 SkPaint textPaint;
                 textPaint.setAntiAlias(false);
-                textPaint.setColor(rand.nextBits(24) | 0xFF000000);
+                textPaint.setColor(sk_tool_utils::color_to_565(rand.nextBits(24) | 0xFF000000));
+                sk_tool_utils::set_portable_typeface(&textPaint);
                 textPaint.setTextSize(textSize);
 
                 for (int i = 0; i < testStringCount; i++) {
diff --git a/gm/multipicturedraw.cpp b/gm/multipicturedraw.cpp
index 0e11b06..21c9d18 100644
--- a/gm/multipicturedraw.cpp
+++ b/gm/multipicturedraw.cpp
@@ -98,7 +98,7 @@
 
     SkPaint greyFill;
     greyFill.setStyle(SkPaint::kFill_Style);
-    greyFill.setColor(SK_ColorLTGRAY);
+    greyFill.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
 
     SkPaint stroke;
     stroke.setStyle(SkPaint::kStroke_Style);
@@ -154,7 +154,7 @@
 
     SkPaint fill;
     fill.setStyle(SkPaint::kFill_Style);
-    fill.setColor(SK_ColorLTGRAY);
+    fill.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
 
     SkPaint stroke;
     stroke.setStyle(SkPaint::kStroke_Style);
@@ -488,7 +488,7 @@
 
         void onOnceBeforeDraw() override {
             fPictures[0] = make_hex_plane_picture(SK_ColorWHITE);
-            fPictures[1] = make_hex_plane_picture(SK_ColorGRAY);
+            fPictures[1] = make_hex_plane_picture(sk_tool_utils::color_to_565(SK_ColorGRAY));
             fPictures[2] = make_sierpinski_picture();
             fPictures[3] = make_single_layer_hex_plane_picture();
         }
diff --git a/gm/ovals.cpp b/gm/ovals.cpp
index b0c207b..32c9e71 100755
--- a/gm/ovals.cpp
+++ b/gm/ovals.cpp
@@ -132,7 +132,7 @@
         hsv[1] = rand->nextRangeF(0.75f, 1.0f);
         hsv[2] = rand->nextRangeF(0.75f, 1.0f);
 
-        return SkHSVToColor(hsv);
+        return sk_tool_utils::color_to_565(SkHSVToColor(hsv));
     }
 
     void onDraw(SkCanvas* canvas) override {
@@ -150,7 +150,7 @@
         rectPaint.setAntiAlias(true);
         rectPaint.setStyle(SkPaint::kStroke_Style);
         rectPaint.setStrokeWidth(SkIntToScalar(0));
-        rectPaint.setColor(SK_ColorLTGRAY);
+        rectPaint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
 
         int testCount = 0;
         for (int i = 0; i < fPaints.count(); ++i) {
diff --git a/gm/pathinterior.cpp b/gm/pathinterior.cpp
index 24fea68..88efb3a 100644
--- a/gm/pathinterior.cpp
+++ b/gm/pathinterior.cpp
@@ -44,7 +44,7 @@
         bool hasInterior = false;
 #endif
 
-        paint.setColor(hasInterior ? 0xFF8888FF : SK_ColorGRAY);
+        paint.setColor(sk_tool_utils::color_to_565(hasInterior ? 0xFF8888FF : SK_ColorGRAY));
         canvas->drawPath(path, paint);
         paint.setStyle(SkPaint::kStroke_Style);
         paint.setColor(SK_ColorRED);
diff --git a/gm/pictureshader.cpp b/gm/pictureshader.cpp
index 220649b..3f719be 100644
--- a/gm/pictureshader.cpp
+++ b/gm/pictureshader.cpp
@@ -143,7 +143,7 @@
 
         SkPaint paint;
         paint.setStyle(SkPaint::kFill_Style);
-        paint.setColor(SK_ColorLTGRAY);
+        paint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
 
         canvas->save();
         canvas->concat(matrix);
@@ -193,9 +193,9 @@
     SkRect r = tile;
     r.inset(4, 4);
     SkPaint p;
-    p.setColor(0xFF303F9F);  // dark blue
+    p.setColor(sk_tool_utils::color_to_565(0xFF303F9F));  // dark blue
     c->drawRect(r, p);
-    p.setColor(0xFFC5CAE9);  // light blue
+    p.setColor(sk_tool_utils::color_to_565(0xFFC5CAE9));  // light blue
     p.setStrokeWidth(10);
     c->drawLine(20, 20, 80, 80, p);
 
@@ -207,11 +207,11 @@
 	      NULL,
 	      NULL));
 
-    p.setColor(0xFF8BC34A);  // green
+    p.setColor(sk_tool_utils::color_to_565(0xFF8BC34A));  // green
     canvas->drawPaint(p);
 
     canvas->clipRect(SkRect::MakeXYWH(0, 0, 400, 350));
-    p.setColor(0xFFB6B6B6);  // gray
+    p.setColor(sk_tool_utils::color_to_565(0xFFB6B6B6));  // gray
     canvas->drawPaint(p);
     p.setShader(shader.get());
 
diff --git a/gm/pixelsnap.cpp b/gm/pixelsnap.cpp
index 8a513f3..3358e9d 100644
--- a/gm/pixelsnap.cpp
+++ b/gm/pixelsnap.cpp
@@ -35,7 +35,9 @@
     void onDraw(SkCanvas* canvas) override {
         SkPaint bgPaint;
         bgPaint.setShader(
-            sk_tool_utils::create_checkerboard_shader(0xFFAAAAAA, 0xFF777777, 1))->unref();
+                sk_tool_utils::create_checkerboard_shader(
+                sk_tool_utils::color_to_565(0xFFAAAAAA), 
+                sk_tool_utils::color_to_565(0xFF777777), 1))->unref();
         canvas->drawPaint(bgPaint);
 
         SkString offset;
@@ -43,33 +45,31 @@
         labelPaint.setAntiAlias(true);
         labelPaint.setColor(SK_ColorWHITE);
         labelPaint.setTextSize(SkIntToScalar(kLabelTextSize));
+        sk_tool_utils::set_portable_typeface(&labelPaint);
         SkPaint linePaint;
         linePaint.setColor(SK_ColorWHITE);
 
-        // Drawing labels is useful for debugging, but bad for baselining (x-platform txt diffs).
-        if (false) {
-            // Draw row labels
-            canvas->save();
-                canvas->translate(0, SkIntToScalar(kLabelOffsetY));
-                for (int i = 0; i <= kSubPixelSteps; ++i) {
-                    offset.printf("%d", i);
-                    canvas->drawText(offset.c_str(), offset.size(),
-                                     0, i * kTrans + labelPaint.getTextSize(),
-                                     labelPaint);
-                }
-            canvas->restore();
+        // Draw row labels
+        canvas->save();
+            canvas->translate(0, SkIntToScalar(kLabelOffsetY));
+            for (int i = 0; i <= kSubPixelSteps; ++i) {
+                offset.printf("%d", i);
+                canvas->drawText(offset.c_str(), offset.size(),
+                                    0, i * kTrans + labelPaint.getTextSize(),
+                                    labelPaint);
+            }
+        canvas->restore();
 
-            // Draw col labels
-            canvas->save();
-                canvas->translate(SkIntToScalar(kLabelOffsetX), 0);
-                for (int i = 0; i <= kSubPixelSteps; ++i) {
-                    offset.printf("%d", i);
-                    canvas->drawText(offset.c_str(), offset.size(),
-                                     i * SkIntToScalar(kTrans), labelPaint.getTextSize(),
-                                     labelPaint);
-                }
-            canvas->restore();
-        }
+        // Draw col labels
+        canvas->save();
+            canvas->translate(SkIntToScalar(kLabelOffsetX), 0);
+            for (int i = 0; i <= kSubPixelSteps; ++i) {
+                offset.printf("%d", i);
+                canvas->drawText(offset.c_str(), offset.size(),
+                                    i * SkIntToScalar(kTrans), labelPaint.getTextSize(),
+                                    labelPaint);
+            }
+        canvas->restore();
 
         canvas->translate(SkIntToScalar(kLabelOffsetX), SkIntToScalar(kLabelOffsetY));
 
diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index 72ab727..c1d9b7e 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -6,6 +6,8 @@
  */
 
 #include "gm.h"
+#include "Resources.h"
+#include "SkTypeface.h"
 
 class SkJSCanvas {
 public:
@@ -215,19 +217,22 @@
         paint->setStyle(SkPaint::kFill_Style);
         SkScalar x = D/2;
         SkScalar y = D/2 - (fm.fAscent + fm.fDescent)/2;
-        SkString str;
-        str.appendS32(count);
-        canvas->drawText(str.c_str(), str.size(), x, y, *paint);
-
+        uint16_t glyphID = 3; // X
+        canvas->drawText((void*) &glyphID, sizeof(glyphID), x, y, *paint);
         canvas->restore();
     }
 
+    void onOnceBeforeDraw() override {
+        fEmFace.reset(GetResourceAsTypeface("/fonts/Em.ttf"));
+    }
+
     void onDraw(SkCanvas* canvas) override {
         if (false) { test_stroke(canvas); return; }
 
         SkPaint paint;
         paint.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&paint);
+        paint.setTypeface(fEmFace);
+        paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
         paint.setStrokeWidth(SkIntToScalar(4));
         paint.setTextSize(SkIntToScalar(40));
         paint.setTextAlign(SkPaint::kCenter_Align);
@@ -267,6 +272,7 @@
 
 private:
     typedef skiagm::GM INHERITED;
+    SkAutoTUnref<SkTypeface> fEmFace;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/gm/roundrects.cpp b/gm/roundrects.cpp
index 5e2813b..b27d0f4 100644
--- a/gm/roundrects.cpp
+++ b/gm/roundrects.cpp
@@ -133,7 +133,7 @@
         hsv[1] = rand->nextRangeF(0.75f, 1.0f);
         hsv[2] = rand->nextRangeF(0.75f, 1.0f);
 
-        return SkHSVToColor(hsv);
+        return sk_tool_utils::color_to_565(SkHSVToColor(hsv));
     }
 
     void onDraw(SkCanvas* canvas) override {
@@ -153,7 +153,7 @@
         rectPaint.setAntiAlias(true);
         rectPaint.setStyle(SkPaint::kStroke_Style);
         rectPaint.setStrokeWidth(SkIntToScalar(0));
-        rectPaint.setColor(SK_ColorLTGRAY);
+        rectPaint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
 
         int testCount = 0;
         for (int i = 0; i < fPaints.count(); ++i) {
diff --git a/gm/samplerstress.cpp b/gm/samplerstress.cpp
index ec07270..38b94bf 100644
--- a/gm/samplerstress.cpp
+++ b/gm/samplerstress.cpp
@@ -101,6 +101,7 @@
         paint.setTextSize(72);
         paint.setShader(fShader.get());
         paint.setMaskFilter(fMaskFilter.get());
+        sk_tool_utils::set_portable_typeface(&paint);
 
         SkRect temp;
         temp.set(SkIntToScalar(115),
@@ -131,7 +132,7 @@
                          SkIntToScalar(100), SkIntToScalar(100),
                          paint2);
 
-        paint2.setColor(SK_ColorGRAY);
+        paint2.setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
 
         canvas->drawPath(path, paint2);
     }
diff --git a/gm/strokerect.cpp b/gm/strokerect.cpp
index 8854c6b..c190495 100644
--- a/gm/strokerect.cpp
+++ b/gm/strokerect.cpp
@@ -17,7 +17,7 @@
     paint.setAntiAlias(true);
     paint.setStyle(doFill ? SkPaint::kStrokeAndFill_Style : SkPaint::kStroke_Style);
 
-    paint.setColor(SK_ColorGRAY);
+    paint.setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
     paint.setStrokeWidth(STROKE_WIDTH);
     paint.setStrokeJoin(join);
     canvas->drawRect(rect, paint);
diff --git a/gm/surface.cpp b/gm/surface.cpp
index 913de99..694a0d0 100644
--- a/gm/surface.cpp
+++ b/gm/surface.cpp
@@ -53,6 +53,7 @@
     paint.setColor(SK_ColorWHITE);
     paint.setTextSize(32);
     paint.setTextAlign(SkPaint::kCenter_Align);
+    sk_tool_utils::set_portable_typeface(&paint);
     canvas->drawText(label, strlen(label), W / 2, H * 3 / 4, paint);
 }
 
diff --git a/gm/textbloblooper.cpp b/gm/textbloblooper.cpp
index 2fbd30b..337942c 100644
--- a/gm/textbloblooper.cpp
+++ b/gm/textbloblooper.cpp
@@ -148,6 +148,7 @@
         paint.setSubpixelText(true);
         paint.setLCDRenderText(true);
         paint.setAntiAlias(true);
+        sk_tool_utils::set_portable_typeface(&paint);
         add_to_text_blob(&builder, text, paint, 0, 0);
         fBlob.reset(builder.build());
 
@@ -225,7 +226,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(SK_ColorGRAY);
+        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
 
         SkPaint paint;
         canvas->translate(10, 40);
diff --git a/gm/textblobshader.cpp b/gm/textblobshader.cpp
index 5b9b2e9..bd5ea22 100644
--- a/gm/textblobshader.cpp
+++ b/gm/textblobshader.cpp
@@ -33,6 +33,7 @@
         p.setSubpixelText(true);
         p.setTextSize(30);
         p.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+        sk_tool_utils::set_portable_typeface(&p);
 
         SkTextBlobBuilder builder;
         int glyphCount = fGlyphs.count();
diff --git a/gm/transparency.cpp b/gm/transparency.cpp
index 1a6275e..62c277a 100644
--- a/gm/transparency.cpp
+++ b/gm/transparency.cpp
@@ -63,7 +63,8 @@
  *  checkerboard pattern looks correct.
  */
 DEF_SIMPLE_GM(transparency_check, canvas, 1792, 1080) {
-    checkerboard(canvas, 0xFF999999, 0xFF666666, 8);
+    checkerboard(canvas, sk_tool_utils::color_to_565(0xFF999999),
+            sk_tool_utils::color_to_565(0xFF666666), 8);
     {
         SkAutoCanvasRestore autoCanvasRestore(canvas, true);
         SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(256, 9));