Revamp of CanvasRenderingContext2D draw methods to use computed draw bounds for early exit

Before this change, draw bounds were being computed in draw functions of
CanvasRenderingContext2D for the purpose of tracking invalidation
regions. With this change, the bounds are also used to skip draws that
do not intersect the current clip bounds.  This is somewhat redundant
with the quickReject mechanism that already exists in SkCanvas, except
that it allows for the draw to be terminated earlier in the execution
flow. The overhead that is avoided includes: constructing transient
objects (SkPaint, skia shaders, temporary bitmap copies, etc.),
resolving fonts, decoding images, superfluous compositor layer
invalidations, GraphicsContext state churn, etc.

A simple strokeRect call that is out of bounds will run 3x faster with
this change.  The overhead of performing the bounds check has no
measurable impact on the rendering performance of draws that are not
rejected.

A positive side-effect of this change is that CRC2D now uses the current
clip instead of the entire canvas for bounding invalidation regions,
resulting in more accurate rendering invalidations in many cases.

BUG=275460
TEST=canvas layout tests, tough_canvas_cases telemetry tests, gpu throughput tests
R=jamesr

Review URL: https://chromiumcodereview.appspot.com/23503033

git-svn-id: svn://svn.chromium.org/blink/trunk@158033 bbb929c8-8fbe-4397-9dbb-9b2b20218538