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>
This commit is contained in:
parent
e7f071acc1
commit
96f6d9a37f
@ -1833,7 +1833,8 @@ Result GPUDDLSink::ddlDraw(const Src& src,
|
||||
// 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);
|
||||
|
@ -26,6 +26,8 @@ using sk_gpu_test::GrContextFactory;
|
||||
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, ...) {
|
||||
|
@ -262,24 +262,25 @@ void DDLTileHelper::TileData::DeleteBackendTexture(GrDirectContext*, TileData* t
|
||||
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 @@ DDLTileHelper::DDLTileHelper(GrDirectContext* direct,
|
||||
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});
|
||||
}
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ public:
|
||||
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 @@ public:
|
||||
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;
|
||||
|
||||
|
@ -271,7 +271,8 @@ static void run_ddl_benchmark(sk_gpu_test::TestContext* testContext, GrDirectCon
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user