use pinned value during lerp for vertical gradients

slight formatting clean up on associated gm

BUG=skia:

Review URL: https://codereview.chromium.org/1471543002
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index 92e22ee..9c4d621 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -610,19 +610,20 @@
             SkPoint pts[2];
             SkScalar pos[kStopCount];
         } configs[] = {
-            { { SkPoint::Make(0, 0), SkPoint::Make(10, 0) }, { 0, 0.999999f,    1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(10, 0) }, { 0, 0.000001f,    1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(10, 0) }, { 0, 0.999999999f, 1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(10, 0) }, { 0, 0.000000001f, 1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(0, 10) }, { 0, 0.999999f,    1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(0, 10) }, { 0, 0.000001f,    1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(0, 10) }, { 0, 0.999999999f, 1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(0, 10) }, { 0, 0.000000001f, 1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(10, 0) },       { 0, 0.999999f,    1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(10, 0) },       { 0, 0.000001f,    1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(10, 0) },       { 0, 0.999999999f, 1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(10, 0) },       { 0, 0.000000001f, 1 }},
 
-            { { SkPoint::Make(0, 0), SkPoint::Make(0.00001f, 0) } , { 0, 0.5f, 1 }},
-            { { SkPoint::Make(9.99999f, 0), SkPoint::Make(10, 0) }, { 0, 0.5f, 1 }},
-            { { SkPoint::Make(0, 0), SkPoint::Make(0, 0.00001f) },  { 0, 0.5f, 1 }},
-            { { SkPoint::Make(0, 9.99999f), SkPoint::Make(0, 10) }, { 0, 0.5f, 1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(0, 10) },       { 0, 0.999999f,    1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(0, 10) },       { 0, 0.000001f,    1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(0, 10) },       { 0, 0.999999999f, 1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(0, 10) },       { 0, 0.000000001f, 1 }},
+
+            { { SkPoint::Make(0, 0),        SkPoint::Make(0.00001f, 0) }, { 0, 0.5f, 1 }},
+            { { SkPoint::Make(9.99999f, 0), SkPoint::Make(10, 0) },       { 0, 0.5f, 1 }},
+            { { SkPoint::Make(0, 0),        SkPoint::Make(0, 0.00001f) }, { 0, 0.5f, 1 }},
+            { { SkPoint::Make(0, 9.99999f), SkPoint::Make(0, 10) },       { 0, 0.5f, 1 }},
         };
 
         SkPaint paint;
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index 013c1f1..bfa473c 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -727,6 +727,9 @@
  */
 
 static Sk4f lerp_color(float fx, const SkLinearGradient::LinearGradientContext::Rec* rec) {
+    SkASSERT(fx >= rec[0].fPos);
+    SkASSERT(fx <= rec[1].fPos);
+
     const float p0 = rec[0].fPos;
     const Sk4f c0 = rec[0].fColor;
     const Sk4f c1 = rec[1].fColor;
@@ -894,7 +897,8 @@
     const float invDx = 1 / dx;
 
     if (SkScalarNearlyZero(dx)) { // gradient is vertical
-        Sk4f c = lerp_color(fx, find_forward(fRecs.begin(), SkTPin(fx, 0.0f, 1.0f)));
+        const float pinFx = SkTPin(fx, 0.0f, 1.0f);
+        Sk4f c = lerp_color(pinFx, find_forward(fRecs.begin(), pinFx));
         if (fApplyAlphaAfterInterp) {
             fill<true>(dstC, count, c + dither0, c + dither1);
         } else {