A saveLayer call is especially expensive in older devices because
it creates an offscreen render target, and a render target switch
can sometimes cost about 1ms.

Even without saveLayer call, a clip is still expensive
because it applies to all subsequent draws until it’s restored.
Therefore a single clip may slow down the performance on
hundreds of draw operations.

In addition to performance issues, Flutter also suffered from
some correctness issues as the clip was not managed and implemented
in a single place. In several places, saveLayer was inserted
in the wrong place and it therefore only increased the performance
cost without fixing any bleeding edge artifacts.

So, we unified the clipBehavior control and its implementation in
this breaking change. The default clipBehavior is Clip.none
for most widgets to save performance, except the following:

ClipPath defaults to Clip.antiAlias

ClipRRect defaults to Clip.antiAlias

ClipRect defaults to Clip.hardEdge