Add DDLTileHelper option to tile separately in x & y
afaik Chrome only tiles in Y which should yield less threaded text blob contention
Change-Id: I9ff484ed2ce66428e2d7ca6188eba79cd99b1547
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/376608
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
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);