Replacing SkTDArray with SkAutoSTArray to reduce memory allocation overhead in SkTileGrid::search
BUG=https://code.google.com/p/skia/issues/detail?id=1735 R=tomhudson@chromium.org Author: junov@chromium.org Review URL: https://codereview.chromium.org/35633002 git-svn-id: http://skia.googlecode.com/svn/trunk@11936 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
381010e550
commit
ac90d1d0b1
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user