| Index: src/gpu/gl/GrGpuGL.cpp | 
| diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp | 
| index 113866759e3a79055e3bea236c6efbe98f2af07b..d313167a82757b7802d70389d2976f83e842ccf9 100644 | 
| --- a/src/gpu/gl/GrGpuGL.cpp | 
| +++ b/src/gpu/gl/GrGpuGL.cpp | 
| @@ -12,6 +12,7 @@ | 
| #include "GrGLShaderBuilder.h" | 
| #include "GrTemplates.h" | 
| #include "GrTypes.h" | 
| +#include "SkStrokeRec.h" | 
| #include "SkTemplates.h" | 
|  | 
| static const GrGLuint GR_MAX_GLUINT = ~0U; | 
| @@ -1276,9 +1277,9 @@ GrIndexBuffer* GrGpuGL::onCreateIndexBuffer(uint32_t size, bool dynamic) { | 
| } | 
| } | 
|  | 
| -GrPath* GrGpuGL::onCreatePath(const SkPath& inPath) { | 
| +GrPath* GrGpuGL::onCreatePath(const SkPath& inPath, const SkStrokeRec& stroke) { | 
| SkASSERT(this->caps()->pathRenderingSupport()); | 
| -    return SkNEW_ARGS(GrGLPath, (this, inPath)); | 
| +    return SkNEW_ARGS(GrGLPath, (this, inPath, stroke)); | 
| } | 
|  | 
| void GrGpuGL::flushScissor() { | 
| @@ -1700,7 +1701,7 @@ void GrGpuGL::onGpuStencilPath(const GrPath* path, SkPath::FillType fill) { | 
| GL_CALL(StencilFillPath(id, fillMode, writeMask)); | 
| } | 
|  | 
| -void GrGpuGL::onGpuFillPath(const GrPath* path, SkPath::FillType fill) { | 
| +void GrGpuGL::onGpuDrawPath(const GrPath* path, SkPath::FillType fill) { | 
| SkASSERT(this->caps()->pathRenderingSupport()); | 
|  | 
| GrGLuint id = static_cast<const GrGLPath*>(path)->pathID(); | 
| @@ -1709,16 +1710,27 @@ void GrGpuGL::onGpuFillPath(const GrPath* path, SkPath::FillType fill) { | 
| SkASSERT(!fCurrentProgram->hasVertexShader()); | 
|  | 
| flushPathStencilSettings(fill); | 
| +    const SkStrokeRec& stroke = path->getStroke(); | 
|  | 
| SkPath::FillType nonInvertedFill = SkPath::ConvertToNonInverseFillType(fill); | 
| SkASSERT(!fHWPathStencilSettings.isTwoSided()); | 
| GrGLenum fillMode = | 
| gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face)); | 
| GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face); | 
| -    GL_CALL(StencilFillPath(id, fillMode, writeMask)); | 
| + | 
| +    if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) { | 
| +        GL_CALL(StencilFillPath(id, fillMode, writeMask)); | 
| +    } | 
| +    if (stroke.needToApply()) { | 
| +        GL_CALL(StencilStrokePath(id, 0xffff, writeMask)); | 
| +    } | 
|  | 
| if (nonInvertedFill == fill) { | 
| -        GL_CALL(CoverFillPath(id, GR_GL_BOUNDING_BOX)); | 
| +        if (stroke.needToApply()) { | 
| +            GL_CALL(CoverStrokePath(id, GR_GL_BOUNDING_BOX)); | 
| +        } else { | 
| +            GL_CALL(CoverFillPath(id, GR_GL_BOUNDING_BOX)); | 
| +        } | 
| } else { | 
| GrDrawState* drawState = this->drawState(); | 
| GrDrawState::AutoViewMatrixRestore avmr; | 
|  |