diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkTileGrid.cpp | 9 | ||||
-rw-r--r-- | src/core/SkTileGrid.h | 12 |
2 files changed, 12 insertions, 9 deletions
diff --git a/src/core/SkTileGrid.cpp b/src/core/SkTileGrid.cpp index c39e21b356..bbed00603d 100644 --- a/src/core/SkTileGrid.cpp +++ b/src/core/SkTileGrid.cpp @@ -91,13 +91,8 @@ void SkTileGrid::search(const SkIRect& query, SkTDArray<void*>* results) { *results = this->tile(tileStartX, tileStartY); } else { results->reset(); - SkTDArray<int> curPositions; - curPositions.setCount(queryTileCount); - // Note: Reserving space for 1024 tile pointers on the stack. If the - // malloc becomes a bottleneck, we may consider increasing that number. - // Typical large web page, say 2k x 16k, would require 512 tiles of - // size 256 x 256 pixels. - SkAutoSTArray<1024, SkTDArray<void *>*> storage(queryTileCount); + SkAutoSTArray<kStackAllocationTileCount, int> curPositions(queryTileCount); + SkAutoSTArray<kStackAllocationTileCount, SkTDArray<void *>*> storage(queryTileCount); SkTDArray<void *>** tileRange = storage.get(); int tile = 0; for (int x = tileStartX; x < tileEndX; ++x) { diff --git a/src/core/SkTileGrid.h b/src/core/SkTileGrid.h index e272673c63..77d972850f 100644 --- a/src/core/SkTileGrid.h +++ b/src/core/SkTileGrid.h @@ -25,7 +25,15 @@ */ class SkTileGrid : public SkBBoxHierarchy { public: - typedef void* (*SkTileGridNextDatumFunctionPtr)(SkTDArray<void*>** tileData, SkTDArray<int>& tileIndices); + enum { + // Number of tiles for which data is allocated on the stack in + // SkTileGrid::search. If malloc becomes a bottleneck, we may consider + // increasing this number. Typical large web page, say 2k x 16k, would + // require 512 tiles of size 256 x 256 pixels. + kStackAllocationTileCount = 1024 + }; + + typedef void* (*SkTileGridNextDatumFunctionPtr)(SkTDArray<void*>** tileData, SkAutoSTArray<kStackAllocationTileCount, int>& tileIndices); SkTileGrid(int xTileCount, int yTileCount, const SkTileGridPicture::TileGridInfo& info, SkTileGridNextDatumFunctionPtr nextDatumFunction); @@ -91,7 +99,7 @@ private: * such that 'a < b' is true if 'a' was inserted into the tile grid before 'b'. */ template <typename T> -void* SkTileGridNextDatum(SkTDArray<void*>** tileData, SkTDArray<int>& tileIndices) { +void* SkTileGridNextDatum(SkTDArray<void*>** tileData, SkAutoSTArray<SkTileGrid::kStackAllocationTileCount, int>& tileIndices) { T* minVal = NULL; int tileCount = tileIndices.count(); int minIndex = tileCount; |