| Index: experimental/svg/model/SkSVGRenderContext.cpp
 | 
| diff --git a/experimental/svg/model/SkSVGRenderContext.cpp b/experimental/svg/model/SkSVGRenderContext.cpp
 | 
| index 4a1d77d6e450ea463cdd9210ac64a30041c36ceb..d8f762142f6350849c49ae5435857aa84330504e 100644
 | 
| --- a/experimental/svg/model/SkSVGRenderContext.cpp
 | 
| +++ b/experimental/svg/model/SkSVGRenderContext.cpp
 | 
| @@ -113,6 +113,10 @@ void applySvgPaint(const SkSVGPaint& svgPaint, SkPaint* p) {
 | 
|      }
 | 
|  }
 | 
|  
 | 
| +inline uint8_t opacity_to_alpha(SkScalar o) {
 | 
| +    return SkTo<uint8_t>(SkScalarRoundToInt(o * 255));
 | 
| +}
 | 
| +
 | 
|  // Commit the selected attribute to the paint cache.
 | 
|  template <SkSVGAttribute>
 | 
|  void commitToPaint(const SkSVGPresentationAttributes&,
 | 
| @@ -137,7 +141,7 @@ template <>
 | 
|  void commitToPaint<SkSVGAttribute::kFillOpacity>(const SkSVGPresentationAttributes& attrs,
 | 
|                                                   const SkSVGLengthContext&,
 | 
|                                                   SkSVGPresentationContext* pctx) {
 | 
| -    pctx->fFillPaint.setAlpha(static_cast<uint8_t>(*attrs.fFillOpacity.get() * 255));
 | 
| +    pctx->fFillPaint.setAlpha(opacity_to_alpha(*attrs.fFillOpacity.get()));
 | 
|  }
 | 
|  
 | 
|  template <>
 | 
| @@ -164,7 +168,7 @@ template <>
 | 
|  void commitToPaint<SkSVGAttribute::kStrokeOpacity>(const SkSVGPresentationAttributes& attrs,
 | 
|                                                     const SkSVGLengthContext&,
 | 
|                                                     SkSVGPresentationContext* pctx) {
 | 
| -    pctx->fStrokePaint.setAlpha(static_cast<uint8_t>(*attrs.fStrokeOpacity.get() * 255));
 | 
| +    pctx->fStrokePaint.setAlpha(opacity_to_alpha(*attrs.fStrokeOpacity.get()));
 | 
|  }
 | 
|  
 | 
|  template <>
 | 
| @@ -246,7 +250,7 @@ void SkSVGRenderContext::applyPresentationAttributes(const SkSVGPresentationAttr
 | 
|  
 | 
|      if (auto* opacity = attrs.fOpacity.getMaybeNull()) {
 | 
|          SkPaint opacityPaint;
 | 
| -        opacityPaint.setAlpha(static_cast<uint8_t>(opacity->value() * 255));
 | 
| +        opacityPaint.setAlpha(opacity_to_alpha(opacity->value()));
 | 
|          // Balanced in the destructor, via restoreToCount().
 | 
|          fCanvas->saveLayer(nullptr, &opacityPaint);
 | 
|      }
 | 
| 
 |