diff --git a/tests/LayerDrawLooperTest.cpp b/tests/LayerDrawLooperTest.cpp
index 68dd5e0..1facb23 100644
--- a/tests/LayerDrawLooperTest.cpp
+++ b/tests/LayerDrawLooperTest.cpp
@@ -15,6 +15,7 @@
 #include "SkRect.h"
 #include "SkRefCnt.h"
 #include "SkScalar.h"
+#include "SkSmallAllocator.h"
 #include "SkXfermode.h"
 #include "Test.h"
 
@@ -57,10 +58,12 @@
     SkCanvas canvas(&device);
     SkPaint paint;
     SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper());
-    looper->init(&canvas);
+    SkSmallAllocator<1, 32> allocator;
+    void* buffer = allocator.reserveT<SkDrawLooper::Context>(looper->contextSize());
+    SkDrawLooper::Context* context = looper->createContext(&canvas, buffer);
 
     // The back layer should come first.
-    REPORTER_ASSERT(reporter, looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
     REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrc_Mode));
     canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
     REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX());
@@ -68,14 +71,14 @@
     paint.reset();
 
     // Then the front layer.
-    REPORTER_ASSERT(reporter, looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
     REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrcOver_Mode));
     canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
     REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX());
     REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY());
 
     // Only two layers were added, so that should be the end.
-    REPORTER_ASSERT(reporter, !looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, !context->next(&canvas, &paint));
 }
 
 static void test_backToFront(skiatest::Reporter* reporter) {
@@ -95,10 +98,12 @@
     SkCanvas canvas(&device);
     SkPaint paint;
     SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper());
-    looper->init(&canvas);
+    SkSmallAllocator<1, 32> allocator;
+    void* buffer = allocator.reserveT<SkDrawLooper::Context>(looper->contextSize());
+    SkDrawLooper::Context* context = looper->createContext(&canvas, buffer);
 
     // The back layer should come first.
-    REPORTER_ASSERT(reporter, looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
     REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrcOver_Mode));
     canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
     REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX());
@@ -106,14 +111,14 @@
     paint.reset();
 
     // Then the front layer.
-    REPORTER_ASSERT(reporter, looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
     REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrc_Mode));
     canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
     REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX());
     REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY());
 
     // Only two layers were added, so that should be the end.
-    REPORTER_ASSERT(reporter, !looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, !context->next(&canvas, &paint));
 }
 
 static void test_mixed(skiatest::Reporter* reporter) {
@@ -133,10 +138,12 @@
     SkCanvas canvas(&device);
     SkPaint paint;
     SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper());
-    looper->init(&canvas);
+    SkSmallAllocator<1, 32> allocator;
+    void* buffer = allocator.reserveT<SkDrawLooper::Context>(looper->contextSize());
+    SkDrawLooper::Context* context = looper->createContext(&canvas, buffer);
 
     // The back layer should come first.
-    REPORTER_ASSERT(reporter, looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
     REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrcOver_Mode));
     canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
     REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX());
@@ -144,14 +151,14 @@
     paint.reset();
 
     // Then the front layer.
-    REPORTER_ASSERT(reporter, looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
     REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrc_Mode));
     canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
     REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX());
     REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY());
 
     // Only two layers were added, so that should be the end.
-    REPORTER_ASSERT(reporter, !looper->next(&canvas, &paint));
+    REPORTER_ASSERT(reporter, !context->next(&canvas, &paint));
 }
 
 DEF_TEST(LayerDrawLooper, reporter) {
