do not use drawRect/drawRRect if path is inversed fill or is not closed or
not simple rrect
fix path problem in SkLIghtDeferredCanvas
return full layer save strategy from SkLightDeferredCanvas
Add conic curve line tessellation in GrHairLinePathRenderer
avoid data overflow and underflow in convex geomety computation

Intermediate data in computing mass center can result in overflow and
overflow in GrAAConvexPathRenderer.  Use doubles to hold temporary data.
This avoids overflow/underflow at cost of slower math.
Add layer rasterizer for GL

Rasterizer is added into GL by the following:
1. if can_rasterize_via_GPU and can_maskfilter_via_gpu, first rasterize on
   GPU, then mask filter on GPU
2. if can_rasterizer_via_CPU and can_maskfilter_via_gpu, first rasterize
   on CPU, upload to a texture and maskfilter via GPU.
3. if can_rasterizer_via_gpu and can_maskfilter_via_cpu, falls back to 4.
   This is because if we rasterize on GPU, we must download to CPU, do
   mask filtering and then again upload to texture. This is slow
4. if both have to be done CPU, do them on CPU and upload

The followings are not implemented for GL: drawPoints, drawVertices
and draw texts

If a rasterize layer's paint contains mask filter or other rasterizer,
fall back to CPU
create reference/create a scratch texture from a bitmap only it does not have

A bitmap can be backed by a valid texture.  During when converting
a bitmap to a GrEffect from a bitmap shader, we check whether there is
 a valid texture.  Only create/reference a new texture if bitmap does not
have
do not draw bitmap directly on non-msaa render target

If AA is specified, and both src and dst rects are not pixel-aligned,
do not draw bitmap on non-msaa render target directly
in drawBitmap(), drawBitmapRect(), drawBitmapRectToRect().  Instead,
we must convert these calls to drawRect() so that it goes to GrAARect or
GrAAConvex renderers
Parallelize SkLightDeferredCanvas:

SkMutex(fCondVar1) manages recording thread and SkCondVar(fCondVar2) manages
the flush and playback thread . fCondVar2 waits in flush recording and playback
upon reading a flush command signals using fCondVar2 thereby releasing the wait.

Currently playback of flush is causing a thread wait forcing the flashcanvas
to hang. As a workaround, we stopped recording of flush and directly invoking canvas
flush . Chromium and native flashcanvas work with this workaround. Work is in progress
to record and playback flush command as well.