| Index: src/gpu/gl/GrGLPath.cpp
 | 
| diff --git a/src/gpu/gl/GrGLPath.cpp b/src/gpu/gl/GrGLPath.cpp
 | 
| index ed5a31d9d2f67bf97d90c702c8d2327160e79e48..05460187ef989f6fdffbe9e3eabeeb355b9b214f 100644
 | 
| --- a/src/gpu/gl/GrGLPath.cpp
 | 
| +++ b/src/gpu/gl/GrGLPath.cpp
 | 
| @@ -8,6 +8,7 @@
 | 
|  #include "GrGLPath.h"
 | 
|  #include "GrGLPathRendering.h"
 | 
|  #include "GrGLGpu.h"
 | 
| +#include "GrStyle.h"
 | 
|  
 | 
|  namespace {
 | 
|  inline GrGLubyte verb_to_gl_path_cmd(SkPath::Verb verb) {
 | 
| @@ -251,9 +252,7 @@ void GrGLPath::InitPathObjectPathData(GrGLGpu* gpu,
 | 
|      SkAssertResult(init_path_object_for_general_path<false>(gpu, pathID, skPath));
 | 
|  }
 | 
|  
 | 
| -void GrGLPath::InitPathObjectStroke(GrGLGpu* gpu, GrGLuint pathID, const GrStrokeInfo& stroke) {
 | 
| -    SkASSERT(stroke.needToApply());
 | 
| -    SkASSERT(!stroke.isDashed());
 | 
| +void GrGLPath::InitPathObjectStroke(GrGLGpu* gpu, GrGLuint pathID, const SkStrokeRec& stroke) {
 | 
|      SkASSERT(!stroke.isHairlineStyle());
 | 
|      GR_GL_CALL(gpu->glInterface(),
 | 
|                 PathParameterf(pathID, GR_GL_PATH_STROKE_WIDTH, SkScalarToFloat(stroke.getWidth())));
 | 
| @@ -270,8 +269,8 @@ void GrGLPath::InitPathObjectEmptyPath(GrGLGpu* gpu, GrGLuint pathID) {
 | 
|      GR_GL_CALL(gpu->glInterface(), PathCommands(pathID, 0, nullptr, 0, GR_GL_FLOAT, nullptr));
 | 
|  }
 | 
|  
 | 
| -GrGLPath::GrGLPath(GrGLGpu* gpu, const SkPath& origSkPath, const GrStrokeInfo& origStroke)
 | 
| -    : INHERITED(gpu, origSkPath, origStroke),
 | 
| +GrGLPath::GrGLPath(GrGLGpu* gpu, const SkPath& origSkPath, const GrStyle& style)
 | 
| +    : INHERITED(gpu, origSkPath, style),
 | 
|        fPathID(gpu->glPathRendering()->genPaths(1)) {
 | 
|  
 | 
|      if (origSkPath.isEmpty()) {
 | 
| @@ -281,21 +280,21 @@ GrGLPath::GrGLPath(GrGLGpu* gpu, const SkPath& origSkPath, const GrStrokeInfo& o
 | 
|      } else {
 | 
|          const SkPath* skPath = &origSkPath;
 | 
|          SkTLazy<SkPath> tmpPath;
 | 
| -        const GrStrokeInfo* stroke = &origStroke;
 | 
| -        GrStrokeInfo tmpStroke(SkStrokeRec::kFill_InitStyle);
 | 
| +        SkStrokeRec stroke(SkStrokeRec::kFill_InitStyle);
 | 
|  
 | 
| -        if (stroke->isDashed()) {
 | 
| +        if (style.pathEffect()) {
 | 
|              // Skia stroking and NVPR stroking differ with respect to dashing
 | 
|              // pattern.
 | 
| -            // Convert a dashing to either a stroke or a fill.
 | 
| -            if (stroke->applyDashToPath(tmpPath.init(), &tmpStroke, *skPath)) {
 | 
| +            // Convert a dashing (or other path effect) to either a stroke or a fill.
 | 
| +            if (style.applyPathEffectToPath(tmpPath.init(), &stroke, *skPath, SK_Scalar1)) {
 | 
|                  skPath = tmpPath.get();
 | 
| -                stroke = &tmpStroke;
 | 
|              }
 | 
| +        } else {
 | 
| +            stroke = style.strokeRec();
 | 
|          }
 | 
|  
 | 
|          bool didInit = false;
 | 
| -        if (stroke->needToApply() && stroke->getCap() != SkPaint::kButt_Cap) {
 | 
| +        if (stroke.needToApply() && stroke.getCap() != SkPaint::kButt_Cap) {
 | 
|              // Skia stroking and NVPR stroking differ with respect to stroking
 | 
|              // end caps of empty subpaths.
 | 
|              // Convert stroke to fill if path contains empty subpaths.
 | 
| @@ -304,10 +303,9 @@ GrGLPath::GrGLPath(GrGLGpu* gpu, const SkPath& origSkPath, const GrStrokeInfo& o
 | 
|                  if (!tmpPath.isValid()) {
 | 
|                      tmpPath.init();
 | 
|                  }
 | 
| -                SkAssertResult(stroke->applyToPath(tmpPath.get(), *skPath));
 | 
| +                SkAssertResult(stroke.applyToPath(tmpPath.get(), *skPath));
 | 
|                  skPath = tmpPath.get();
 | 
| -                tmpStroke.setFillStyle();
 | 
| -                stroke = &tmpStroke;
 | 
| +                stroke.setFillStyle();
 | 
|              }
 | 
|          }
 | 
|  
 | 
| @@ -315,18 +313,16 @@ GrGLPath::GrGLPath(GrGLGpu* gpu, const SkPath& origSkPath, const GrStrokeInfo& o
 | 
|              InitPathObjectPathData(gpu, fPathID, *skPath);
 | 
|          }
 | 
|  
 | 
| -        fShouldStroke = stroke->needToApply();
 | 
| -        fShouldFill = stroke->isFillStyle() ||
 | 
| -                stroke->getStyle() == SkStrokeRec::kStrokeAndFill_Style;
 | 
| +        fShouldStroke = stroke.needToApply();
 | 
| +        fShouldFill = stroke.isFillStyle() ||
 | 
| +                stroke.getStyle() == SkStrokeRec::kStrokeAndFill_Style;
 | 
|  
 | 
|          fFillType = convert_skpath_filltype(skPath->getFillType());
 | 
|          fBounds = skPath->getBounds();
 | 
| -
 | 
| +        SkScalar radius = stroke.getInflationRadius();
 | 
| +        fBounds.outset(radius, radius);
 | 
|          if (fShouldStroke) {
 | 
| -            InitPathObjectStroke(gpu, fPathID, *stroke);
 | 
| -
 | 
| -            // FIXME: try to account for stroking, without rasterizing the stroke.
 | 
| -            fBounds.outset(stroke->getWidth(), stroke->getWidth());
 | 
| +            InitPathObjectStroke(gpu, fPathID, stroke);
 | 
|          }
 | 
|      }
 | 
|  
 | 
| 
 |