diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 9478331..21fd738 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -1833,7 +1833,8 @@
     // one. About all it can be consistently used for is GrCaps access and 'defaultBackendFormat'
     // calls.
     constexpr int kNumDivisions = 3;
-    DDLTileHelper tiles(gpuThreadCtx, dstCharacterization, viewport, kNumDivisions,
+    DDLTileHelper tiles(gpuThreadCtx, dstCharacterization, viewport,
+                        kNumDivisions, kNumDivisions,
                         /* addRandomPaddingToDst */ false);
 
     tiles.createBackendTextures(gpuTaskGroup, gpuThreadCtx);
diff --git a/experimental/ddlbench/ddlbench.cpp b/experimental/ddlbench/ddlbench.cpp
index 4e28c2f..d44cf89 100644
--- a/experimental/ddlbench/ddlbench.cpp
+++ b/experimental/ddlbench/ddlbench.cpp
@@ -26,6 +26,8 @@
 using sk_gpu_test::TestContext;
 
 static DEFINE_int(ddlNumRecordingThreads, 1, "number of DDL recording threads");
+static DEFINE_int(numTilesX, 3, "number of tiles horizontally");
+static DEFINE_int(numTilesY, 3, "number of tiles vertically");
 static DEFINE_string(src, "", "input .skp file");
 
 static void exitf(const char* format, ...) {
diff --git a/tools/DDLTileHelper.cpp b/tools/DDLTileHelper.cpp
index 1035982..315c8a8 100644
--- a/tools/DDLTileHelper.cpp
+++ b/tools/DDLTileHelper.cpp
@@ -262,24 +262,25 @@
 DDLTileHelper::DDLTileHelper(GrDirectContext* direct,
                              const SkSurfaceCharacterization& dstChar,
                              const SkIRect& viewport,
-                             int numDivisions,
+                             int numXDivisions, int numYDivisions,
                              bool addRandomPaddingToDst)
-        : fNumDivisions(numDivisions)
-        , fTiles(numDivisions * numDivisions)
+        : fNumXDivisions(numXDivisions)
+        , fNumYDivisions(numYDivisions)
+        , fTiles(numXDivisions * numYDivisions)
         , fDstCharacterization(dstChar) {
-    SkASSERT(fNumDivisions > 0);
+    SkASSERT(fNumXDivisions > 0 && fNumYDivisions > 0);
 
-    int xTileSize = viewport.width()/fNumDivisions;
-    int yTileSize = viewport.height()/fNumDivisions;
+    int xTileSize = viewport.width()/fNumXDivisions;
+    int yTileSize = viewport.height()/fNumYDivisions;
 
     SkRandom rand;
 
     // Create the destination tiles
-    for (int y = 0, yOff = 0; y < fNumDivisions; ++y, yOff += yTileSize) {
-        int ySize = (y < fNumDivisions-1) ? yTileSize : viewport.height()-yOff;
+    for (int y = 0, yOff = 0; y < fNumYDivisions; ++y, yOff += yTileSize) {
+        int ySize = (y < fNumYDivisions-1) ? yTileSize : viewport.height()-yOff;
 
-        for (int x = 0, xOff = 0; x < fNumDivisions; ++x, xOff += xTileSize) {
-            int xSize = (x < fNumDivisions-1) ? xTileSize : viewport.width()-xOff;
+        for (int x = 0, xOff = 0; x < fNumXDivisions; ++x, xOff += xTileSize) {
+            int xSize = (x < fNumXDivisions-1) ? xTileSize : viewport.width()-xOff;
 
             SkIRect clip = SkIRect::MakeXYWH(xOff, yOff, xSize, ySize);
 
@@ -291,7 +292,7 @@
             int32_t rPad = addRandomPaddingToDst ? rand.nextRangeU(0, kMaxPad) : 0;
             int32_t bPad = addRandomPaddingToDst ? rand.nextRangeU(0, kMaxPad) : 0;
 
-            fTiles[y*fNumDivisions+x].init(y*fNumDivisions+x, direct, dstChar, clip,
+            fTiles[y*fNumXDivisions+x].init(y*fNumXDivisions+x, direct, dstChar, clip,
                                            {lPad, tPad, rPad, bPad});
         }
     }
diff --git a/tools/DDLTileHelper.h b/tools/DDLTileHelper.h
index f760a4c..755ffa9 100644
--- a/tools/DDLTileHelper.h
+++ b/tools/DDLTileHelper.h
@@ -108,7 +108,7 @@
     DDLTileHelper(GrDirectContext*,
                   const SkSurfaceCharacterization& dstChar,
                   const SkIRect& viewport,
-                  int numDivisions,
+                  int numXDivisions, int numYDivisions,
                   bool addRandomPaddingToDst);
 
     void createSKPPerTile(SkData* compressedPictureData, const DDLPromiseImageHelper&);
@@ -137,14 +137,15 @@
     void dropCallbackContexts();
     void resetAllTiles();
 
-    int numTiles() const { return fNumDivisions * fNumDivisions; }
+    int numTiles() const { return fNumXDivisions * fNumYDivisions; }
 
     void createBackendTextures(SkTaskGroup*, GrDirectContext*);
     void deleteBackendTextures(SkTaskGroup*, GrDirectContext*);
 
 private:
-    int                                    fNumDivisions; // number of tiles along a side
-    SkAutoTArray<TileData>                 fTiles;        // 'fNumDivisions' x 'fNumDivisions'
+    int                                    fNumXDivisions; // number of tiles horizontally
+    int                                    fNumYDivisions; // number of tiles vertically
+    SkAutoTArray<TileData>                 fTiles;        // 'fNumXDivisions' x 'fNumYDivisions'
 
     sk_sp<SkDeferredDisplayList>           fComposeDDL;
 
diff --git a/tools/skpbench/skpbench.cpp b/tools/skpbench/skpbench.cpp
index 34ab43b..b544af3 100644
--- a/tools/skpbench/skpbench.cpp
+++ b/tools/skpbench/skpbench.cpp
@@ -271,7 +271,8 @@
 
     promiseImageHelper.uploadAllToGPU(nullptr, context);
 
-    DDLTileHelper tiles(context, dstCharacterization, viewport, FLAGS_ddlTilingWidthHeight,
+    DDLTileHelper tiles(context, dstCharacterization, viewport,
+                        FLAGS_ddlTilingWidthHeight, FLAGS_ddlTilingWidthHeight,
                         /* addRandomPaddingToDst */ false);
 
     tiles.createBackendTextures(nullptr, context);
