Squash 1 - SkPath

1. fixes two aspects in SkPath to provide a fast path for drawing full ovals
2. force calling moveTo()
3. detect the direction of oval whule using addOval in SkPath
Squash 2 - GrShapePathRenderer addition

1. Add a new GrShapePathRenderer
2. compute correct ending point for miter join
3. Correct onGetStencilSupport in GrShapePathRenderer
4. fix clipping when using GrShapePathRenderer
5. bug fix for join and cap for GrShapePathRenderer
6. do not use GrShapePathRenderer if fill type is inverse
Squash -3 Add SkLightDeferredCanvas

1. add SkLightDeferredCanvas
2. do no skip save, savelayer and restore in SkLightDeferredCanvas
3. fix path problem in SkLightDeferredCanvas
4. return full layer save strategy in SkLightDeferredCanvas
5. bug fix: allocate points using sizeof(SkPoint) in SkRecordQueue
6. parallelize SkLightDeferredCanvas
7. reduce copy and pasted code and attempt to optimize playback thread
Squash-4 : GrHairLinePathRenderer

1. add GrHairlinePathRenderer
2. use GrHairlinePathRenderer to stroke rect if width <= 1.0
3. bug fix in worst case point count in GrHairlinePathRenderer
4. add conic curve line tessellation in GrHairlinePathRenderer
Batch GrOvalRenderer

The patch batches the following draws: circle, oval, rrect.  It does not
batch oval when derive is not supported in shader, and it does not support
DRRect drawing.

To support Batching, color attributes are added to gCircleVertexAttribs,
gEllipseVertexAttribs, and gDIEllipseVertexAttribs.  Two index buffers
are created for circle/oval and rrect.

The following scenarios have speed up
1. draw circles back-to-back with rotation, scale and translate
2. draw oval back-to-back with rotation, scale and translate
3. draw rrect with radii_x == radii_y with scale and translate
4. draw rrect with radii_x != radii_y with scale and translate

If you mix draw oval, circle, rrect, there will not be any batching because
each draw has different shader.

draw oval without derivative support is not batched - most modern gl/gles
drivers support derivative.

draw DRRect is not batched because a GrEffect is installed before we have
a chance to set draw state with identity matrix
Squash 5 - Use of local coordinate matrix in GrOvalRenderer

1. this is little hacky because the way skia constructs color stages
2. use local coord if shader is bitmap for draw circle
3. use local coord for draw oval in GrOvalRender
4. add local coord for draw rrect in GrOvalRenderer
5. restore transfomation matrix if drawDIEllipse fails
6. rename GrDrawState::AutoLocalMatrix
Squash 6 : Image shaders related bug fixes in GrOvalRenderer

1. bug fix for check shader is a bitmap
2. rename shaderIsBitmap() to canOptimizeForBitmapShader()
3. bug fix for batch imuse drage shader
4. bug fix for batch image shader in drawCircle
5. bug fix for batch image shader in DIEllipse
6. bug fix for batch image shader in draw rrect
7. do not optimize draw image if target driver does not support Npot
Squash 7 : Batching draw Path

1. batching SkGpuDevice::drawPath() if the path is a rect
2. bug fix in canDrawRect()
3. do not use drawRect/drawRRect if path is inversed fill or is not closed
Squash 8: SkPath patches

1. add isRRect in SkPath
2. route SkGpuDevice::drawPath() to drawRRect
3. do not use GrOvalRenderer if paint has maskfilter or has path effect
4. do not use drawRect/drawRRect if path is inversed fill or is not closed (split between this squash and squash 7)
Always use GrOvalRenderer instead of GrDefaultPathRenderer for oval and rrect

BUG=https://codereview.chromium.org/271663002/

When drawing ovals with OpenGL device, skia uses GrOvalRenderer if multisampling
is disabled (fSampleCnt = 0) and use edge effect for antialiasing. If
multisampling is enabled, skia uses the default GrDefaultPathRenderer instead.

However, GrOvalRenderer is much faster (at least 300%) for drawing ovals and
circles even ignoring the multisampling and using edge effect for antialiasing.
For round rectangles it is also faster but almost negligibly.

This patch forces ovals and round rects to be drawn with GrOvalRenderer
regardless of the multisampling value.
use bigger tolerance when determine whether it is a hairline
fast_len() is a imprecise computation of distance.  Use relaxed tolerance