Add NULL pointer check for canvas in GLES20RenderLayer

The canvas member in GLES20RenderLayer is possibly NULL
when some lower level OpenGL API leads to some error.
Such error includes something like insufficient memory
for texture creation. Once the NULL pointer of
canvas is encountered in start API, it should be
correctly detected. A NULL pointer is returned by
start API to indicate failure of canvas creation,
which should be further processed by callers.

Change-Id: Iddfdda0f577a4a01fc0e729b12ccffa4479e60ae
Signed-off-by: Allen Shen <ashen@nvidia.com>
[HWUI] Infinite recursion in PathTessellator::recursiveQuadraticBezierVertices()

Symptom: In some cases like the distance between the calculating point is very
         small, the recursion may not terminate.
         If the calculated dx and dy are 0, d is 0 too. Then the termination
         condition(d*d < TH*TH*(dx*dx*sq + dy*dy*sq)) will never be met.
         Infinite recursion will cause stack-overflow.

Solution: We added one more threshold to terminate the recursion when d is very
          small (possibly 0).

Change-Id: I7d27a72811109766766f8f8cc5d8d88e75db7f60
Optimize drawBitmapMesh using TRIANGLE_STRIP

Draw BitmapMesh using STRIP instead of TRIANGLES.
Depending on where the bottleneck is located in the pipeline,
there is a potential for saving two-thirds of the time spent rendering.
The speedup is due to avoiding redundant operations,
i.e., mapping each vertex four times to texture and color attribute,
sending each vertex twice to the GPU, vertex processing of GPU ...

In this patch:
1. Refactoring mesh using Strip.
2. Batch triangles by adding extra vertexs at the start and end of rows.
3. Optimize computing positions of texture and color attribute.

Benchmark: Drawing Bitmap(1152x768 px) with 200x200 meshes
Performance: ~46% improvements (from 26.4 fps to 38.7 fps)
Memory: Reduce 80800 vertices with xy, uv, rgba data.

Change-Id: I08c5c20d981d88528ce7b02012feefae468d6ec4
Signed-off-by: kui.zheng <kui.zheng@arm.com>