| Index: src/core/SkDrawLooper.cpp | 
| diff --git a/src/core/SkDrawLooper.cpp b/src/core/SkDrawLooper.cpp | 
| index bac2d969c0505d318fe7881c638c1a4750544fd3..c620cd08da5bac8718770e3f69b37916a17b49fb 100644 | 
| --- a/src/core/SkDrawLooper.cpp | 
| +++ b/src/core/SkDrawLooper.cpp | 
| @@ -10,14 +10,17 @@ | 
| #include "SkMatrix.h" | 
| #include "SkPaint.h" | 
| #include "SkRect.h" | 
| +#include "SkSmallAllocator.h" | 
|  | 
| -bool SkDrawLooper::canComputeFastBounds(const SkPaint& paint) { | 
| +bool SkDrawLooper::canComputeFastBounds(const SkPaint& paint) const { | 
| SkCanvas canvas; | 
| +    SkSmallAllocator<1, 32> allocator; | 
| +    void* buffer = allocator.reserveT<SkDrawLooper::Context>(this->contextSize()); | 
|  | 
| -    this->init(&canvas); | 
| +    SkDrawLooper::Context* context = this->createContext(&canvas, buffer); | 
| for (;;) { | 
| SkPaint p(paint); | 
| -        if (this->next(&canvas, &p)) { | 
| +        if (context->next(&canvas, &p)) { | 
| p.setLooper(NULL); | 
| if (!p.canComputeFastBounds()) { | 
| return false; | 
| @@ -30,14 +33,16 @@ bool SkDrawLooper::canComputeFastBounds(const SkPaint& paint) { | 
| } | 
|  | 
| void SkDrawLooper::computeFastBounds(const SkPaint& paint, const SkRect& src, | 
| -                                     SkRect* dst) { | 
| +                                     SkRect* dst) const { | 
| SkCanvas canvas; | 
| +    SkSmallAllocator<1, 32> allocator; | 
| +    void* buffer = allocator.reserveT<SkDrawLooper::Context>(this->contextSize()); | 
|  | 
| *dst = src;   // catch case where there are no loops | 
| -    this->init(&canvas); | 
| +    SkDrawLooper::Context* context = this->createContext(&canvas, buffer); | 
| for (bool firstTime = true;; firstTime = false) { | 
| SkPaint p(paint); | 
| -        if (this->next(&canvas, &p)) { | 
| +        if (context->next(&canvas, &p)) { | 
| SkRect r(src); | 
|  | 
| p.setLooper(NULL); | 
|  |