Pre-allocate some opList dependency list storage

There is a perf regression (mainly on the Nexus5) for the https://skia-review.googlesource.com/c/skia/+/46200 (Add method to iterate over a GrOp's GrSurfaceProxies)

This is another candidate.

Change-Id: I276ea44d899166a7d2e74f461f5a6c2c17a21cde
Reviewed-on: https://skia-review.googlesource.com/46561
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This commit is contained in:
Robert Phillips 2017-09-14 14:37:54 -04:00 committed by Skia Commit-Bot
parent 2d802ddba6
commit 51066f4dc2
2 changed files with 11 additions and 5 deletions

View File

@ -81,7 +81,7 @@ void GrOpList::addDependency(GrOpList* dependedOn) {
return; // don't add duplicate dependencies
}
*fDependencies.push() = dependedOn;
fDependencies.push_back(dependedOn);
}
// Convert from a GrSurface-based dependency to a GrOpList one

View File

@ -77,7 +77,13 @@ public:
* Does this opList depend on 'dependedOn'?
*/
bool dependsOn(GrOpList* dependedOn) const {
return fDependencies.find(dependedOn) >= 0;
for (int i = 0; i < fDependencies.count(); ++i) {
if (fDependencies[i] == dependedOn) {
return true;
}
}
return false;
}
/*
@ -169,11 +175,11 @@ private:
void addDependency(GrOpList* dependedOn);
uint32_t fUniqueID;
uint32_t fFlags;
uint32_t fUniqueID;
uint32_t fFlags;
// 'this' GrOpList relies on the output of the GrOpLists in 'fDependencies'
SkTDArray<GrOpList*> fDependencies;
SkSTArray<1, GrOpList*, true> fDependencies;
// These are used rarely, most clients never produce any
SkTArray<std::unique_ptr<GrPrepareCallback>> fPrepareCallbacks;