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));
