Chromium Code Reviews| Index: src/core/SkTileGrid.cpp |
| diff --git a/src/core/SkTileGrid.cpp b/src/core/SkTileGrid.cpp |
| index 2eea6dbf36b4a274f517944bffb6bf2ac391bdd4..b834c2d4756c9d542d7901ad95527e709c64b9c5 100644 |
| --- a/src/core/SkTileGrid.cpp |
| +++ b/src/core/SkTileGrid.cpp |
| @@ -12,7 +12,7 @@ SkTileGrid::SkTileGrid(int xTiles, int yTiles, const SkTileGridFactory::TileGrid |
| , fYTiles(yTiles) |
| , fInfo(info) |
| , fCount(0) |
| - , fTiles(SkNEW_ARRAY(SkTDArray<Entry>, xTiles * yTiles)) { |
| + , fTiles(SkNEW_ARRAY(SkTDArray<unsigned>, xTiles * yTiles)) { |
| // Margin is offset by 1 as a provision for AA and |
| // to cancel-out the outset applied by getClipDeviceBounds. |
| fInfo.fMargin.fHeight++; |
| @@ -23,7 +23,7 @@ SkTileGrid::~SkTileGrid() { |
| SkDELETE_ARRAY(fTiles); |
| } |
|
robertphillips
2014/10/02 12:27:35
data -> opIndex everywhere ?
mtklein
2014/10/02 14:32:09
Done.
|
| -void SkTileGrid::insert(void* data, const SkRect& fbounds, bool) { |
| +void SkTileGrid::insert(unsigned data, const SkRect& fbounds, bool) { |
| SkASSERT(!fbounds.isEmpty()); |
| SkIRect dilatedBounds; |
| if (fbounds.isLargest()) { |
| @@ -51,10 +51,9 @@ void SkTileGrid::insert(void* data, const SkRect& fbounds, bool) { |
| int maxY = SkMax32(0, SkMin32((dilatedBounds.bottom() - 1) / fInfo.fTileInterval.height(), |
| fYTiles - 1)); |
| - Entry entry = { fCount++, data }; |
| for (int y = minY; y <= maxY; y++) { |
| for (int x = minX; x <= maxX; x++) { |
| - fTiles[y * fXTiles + x].push(entry); |
| + fTiles[y * fXTiles + x].push(data); |
| } |
| } |
| } |
| @@ -69,7 +68,7 @@ static int divide_ceil(int x, int y) { |
| // require 512 tiles of size 256 x 256 pixels. |
| static const int kStackAllocationTileCount = 1024; |
| -void SkTileGrid::search(const SkRect& query, SkTDArray<void*>* results) const { |
| +void SkTileGrid::search(const SkRect& query, SkTDArray<unsigned>* results) const { |
| SkIRect adjusted; |
| query.roundOut(&adjusted); |
| @@ -102,11 +101,9 @@ void SkTileGrid::search(const SkRect& query, SkTDArray<void*>* results) const { |
| if (tilesHit == 1) { |
| // A performance shortcut. The merging code below would work fine here too. |
| - const SkTDArray<Entry>& tile = fTiles[startY * fXTiles + startX]; |
| + const SkTDArray<unsigned>& tile = fTiles[startY * fXTiles + startX]; |
| results->setCount(tile.count()); |
|
robertphillips
2014/10/02 12:27:35
*results = tile; ?
mtklein
2014/10/02 14:32:09
Done.
|
| - for (int i = 0; i < tile.count(); i++) { |
| - (*results)[i] = tile[i].data; |
| - } |
| + memcpy(results->begin(), tile.begin(), tile.count() * sizeof(unsigned)); |
| return; |
| } |
| @@ -114,12 +111,12 @@ void SkTileGrid::search(const SkRect& query, SkTDArray<void*>* results) const { |
| // We do a simple k-way merge based on the order the data was inserted. |
| // Gather pointers to the starts and ends of the tiles to merge. |
| - SkAutoSTArray<kStackAllocationTileCount, const Entry*> starts(tilesHit), ends(tilesHit); |
| + SkAutoSTArray<kStackAllocationTileCount, const unsigned*> starts(tilesHit), ends(tilesHit); |
| int i = 0; |
| for (int x = startX; x < endX; x++) { |
| for (int y = startY; y < endY; y++) { |
| starts[i] = fTiles[y * fXTiles + x].begin(); |
| - ends[i] = fTiles[y * fXTiles + x].end(); |
| + ends[i] = fTiles[y * fXTiles + x].end(); |
| i++; |
| } |
| } |
| @@ -129,10 +126,10 @@ void SkTileGrid::search(const SkRect& query, SkTDArray<void*>* results) const { |
| while (true) { |
| // The tiles themselves are already ordered, so the earliest is at the front of some tile. |
| // It may be at the front of several, even all, tiles. |
|
robertphillips
2014/10/02 12:27:35
It seems like earliest shouldn't be a pointer anym
mtklein
2014/10/02 14:32:09
Agreed, though I'm going to follow up on this one.
|
| - const Entry* earliest = NULL; |
| + const unsigned* earliest = NULL; |
| for (int i = 0; i < starts.count(); i++) { |
| if (starts[i] < ends[i]) { |
| - if (NULL == earliest || starts[i]->order < earliest->order) { |
| + if (NULL == earliest || *starts[i]< *earliest) { |
| earliest = starts[i]; |
| } |
| } |
| @@ -144,9 +141,9 @@ void SkTileGrid::search(const SkRect& query, SkTDArray<void*>* results) const { |
| } |
| // We did find an earliest entry. Output it, and step forward every tile that contains it. |
| - results->push(earliest->data); |
| + results->push(*earliest); |
| for (int i = 0; i < starts.count(); i++) { |
| - if (starts[i] < ends[i] && starts[i]->order == earliest->order) { |
| + if (starts[i] < ends[i] && *starts[i] == *earliest) { |
| starts[i]++; |
| } |
| } |
| @@ -159,11 +156,3 @@ void SkTileGrid::clear() { |
| } |
| } |
| -void SkTileGrid::rewindInserts() { |
| - SkASSERT(fClient); |
| - for (int i = 0; i < fXTiles * fYTiles; i++) { |
| - while (!fTiles[i].isEmpty() && fClient->shouldRewind(fTiles[i].top().data)) { |
| - fTiles[i].pop(); |
| - } |
| - } |
| -} |