| Index: src/core/SkMallocPixelRef.cpp | 
| diff --git a/src/core/SkMallocPixelRef.cpp b/src/core/SkMallocPixelRef.cpp | 
| index 0196e046b17061505f63572e699c3552937791a3..fffc0448486cb26ad96d4b5a09da5f0a6724b2f6 100644 | 
| --- a/src/core/SkMallocPixelRef.cpp | 
| +++ b/src/core/SkMallocPixelRef.cpp | 
| @@ -48,9 +48,10 @@ SkMallocPixelRef* SkMallocPixelRef::NewDirect(const SkImageInfo& info, | 
| } | 
|  | 
|  | 
| -SkMallocPixelRef* SkMallocPixelRef::NewAllocate(const SkImageInfo& info, | 
| -                                                size_t requestedRowBytes, | 
| -                                                SkColorTable* ctable) { | 
| + SkMallocPixelRef* SkMallocPixelRef::NewUsing(void*(*alloc)(size_t), | 
| +                                              const SkImageInfo& info, | 
| +                                              size_t requestedRowBytes, | 
| +                                              SkColorTable* ctable) { | 
| if (!is_valid(info, ctable)) { | 
| return nullptr; | 
| } | 
| @@ -78,7 +79,7 @@ SkMallocPixelRef* SkMallocPixelRef::NewAllocate(const SkImageInfo& info, | 
|  | 
| size_t size = sk_64_asS32(bigSize); | 
| SkASSERT(size >= info.getSafeSize(rowBytes)); | 
| -    void* addr = sk_malloc_flags(size, 0); | 
| +    void* addr = alloc(size); | 
| if (nullptr == addr) { | 
| return nullptr; | 
| } | 
| @@ -86,6 +87,19 @@ SkMallocPixelRef* SkMallocPixelRef::NewAllocate(const SkImageInfo& info, | 
| return new SkMallocPixelRef(info, addr, rowBytes, ctable, sk_free_releaseproc, nullptr); | 
| } | 
|  | 
| +SkMallocPixelRef* SkMallocPixelRef::NewAllocate(const SkImageInfo& info, | 
| +                                                size_t rowBytes, | 
| +                                                SkColorTable* ctable) { | 
| +    auto sk_malloc_nothrow = [](size_t size) { return sk_malloc_flags(size, 0); }; | 
| +    return NewUsing(sk_malloc_nothrow, info, rowBytes, ctable); | 
| +} | 
| + | 
| +SkMallocPixelRef* SkMallocPixelRef::NewZeroed(const SkImageInfo& info, | 
| +                                              size_t rowBytes, | 
| +                                              SkColorTable* ctable) { | 
| +    return NewUsing(sk_calloc, info, rowBytes, ctable); | 
| +} | 
| + | 
| SkMallocPixelRef* SkMallocPixelRef::NewWithProc(const SkImageInfo& info, | 
| size_t rowBytes, | 
| SkColorTable* ctable, | 
| @@ -201,3 +215,8 @@ SkPixelRef* SkMallocPixelRef::PRFactory::create(const SkImageInfo& info, size_t | 
| SkColorTable* ctable) { | 
| return SkMallocPixelRef::NewAllocate(info, rowBytes, ctable); | 
| } | 
| + | 
| +SkPixelRef* SkMallocPixelRef::ZeroedPRFactory::create(const SkImageInfo& info, size_t rowBytes, | 
| +                                                      SkColorTable* ctable) { | 
| +    return SkMallocPixelRef::NewZeroed(info, rowBytes, ctable); | 
| +} | 
|  |