diff options
author | robertphillips <robertphillips@google.com> | 2014-09-03 13:46:02 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-03 13:46:02 -0700 |
commit | 2ed8a75c284fd8e74912de67691acf97bfb7a7b7 (patch) | |
tree | ffaa372d83a6d7ccbc5b3a4b32425d668b736432 /src | |
parent | 6a2f5fe8677f27d737da0e4e6dd1f814fbdbb6fc (diff) |
Remove use of EXPERIMENTAL_getActiveOps from layer hoisting code
This is getting in the way of switching to the SkRecord backend and is of questionable value.
R=bsalomon@google.com
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/539693002
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkPicture.cpp | 9 | ||||
-rw-r--r-- | src/gpu/GrLayerHoister.cpp | 87 | ||||
-rw-r--r-- | src/gpu/GrLayerHoister.h | 2 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 7 |
4 files changed, 26 insertions, 79 deletions
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp index 6ae1c90e69..c0fc371054 100644 --- a/src/core/SkPicture.cpp +++ b/src/core/SkPicture.cpp @@ -326,15 +326,6 @@ const SkMatrix& SkPicture::OperationList::matrix(int index) const { return *((SkPictureStateTree::Draw*)fOps[index])->fMatrix; } -// fRecord TODO(robert) / kind of OK in a non-optimal sense -const SkPicture::OperationList* SkPicture::EXPERIMENTAL_getActiveOps(const SkRect& queryRect) const { - SkASSERT(NULL != fData.get()); - if (NULL != fData.get()) { - return fData->getActiveOps(queryRect); - } - return NULL; -} - // fRecord OK void SkPicture::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) const { SkASSERT(NULL != canvas); diff --git a/src/gpu/GrLayerHoister.cpp b/src/gpu/GrLayerHoister.cpp index 4c5b5a06e5..2dfefcd3fe 100644 --- a/src/gpu/GrLayerHoister.cpp +++ b/src/gpu/GrLayerHoister.cpp @@ -13,13 +13,9 @@ // Return true if any layers are suitable for hoisting bool GrLayerHoister::FindLayersToHoist(const GrAccelData *gpuData, - const SkPicture::OperationList* ops, const SkRect& query, bool pullForward[]) { bool anyHoisted = false; - for (int i = 0; i < gpuData->numSaveLayers(); ++i) { - pullForward[i] = false; - } // Layer hoisting pre-renders the entire layer since it will be cached and potentially // reused with different clips (e.g., in different tiles). Because of this the @@ -27,67 +23,32 @@ bool GrLayerHoister::FindLayersToHoist(const GrAccelData *gpuData, // is used to limit which clips are pre-rendered. static const int kSaveLayerMaxSize = 256; - if (NULL != ops) { - // In this case the picture has been generated with a BBH so we use - // the BBH to limit the pre-rendering to just the layers needed to cover - // the region being drawn - for (int i = 0; i < ops->numOps(); ++i) { - uint32_t offset = ops->offset(i); - - // For now we're saving all the layers in the GrAccelData so they - // can be nested. Additionally, the nested layers appear before - // their parent in the list. - for (int j = 0; j < gpuData->numSaveLayers(); ++j) { - const GrAccelData::SaveLayerInfo& info = gpuData->saveLayerInfo(j); - - if (pullForward[j]) { - continue; // already pulling forward - } - - if (offset < info.fSaveLayerOpID || offset > info.fRestoreOpID) { - continue; // the op isn't in this range - } - - // TODO: once this code is more stable unsuitable layers can - // just be omitted during the optimization stage - if (!info.fValid || - kSaveLayerMaxSize < info.fSize.fWidth || - kSaveLayerMaxSize < info.fSize.fHeight || - info.fIsNested) { - continue; // this layer is unsuitable - } - - pullForward[j] = true; - anyHoisted = true; - } + // Pre-render all the layers that intersect the query rect + for (int i = 0; i < gpuData->numSaveLayers(); ++i) { + pullForward[i] = false; + + const GrAccelData::SaveLayerInfo& info = gpuData->saveLayerInfo(i); + + SkRect layerRect = SkRect::MakeXYWH(SkIntToScalar(info.fOffset.fX), + SkIntToScalar(info.fOffset.fY), + SkIntToScalar(info.fSize.fWidth), + SkIntToScalar(info.fSize.fHeight)); + + if (!SkRect::Intersects(query, layerRect)) { + continue; } - } else { - // In this case there is no BBH associated with the picture. Pre-render - // all the layers that intersect the drawn region - for (int j = 0; j < gpuData->numSaveLayers(); ++j) { - const GrAccelData::SaveLayerInfo& info = gpuData->saveLayerInfo(j); - - SkRect layerRect = SkRect::MakeXYWH(SkIntToScalar(info.fOffset.fX), - SkIntToScalar(info.fOffset.fY), - SkIntToScalar(info.fSize.fWidth), - SkIntToScalar(info.fSize.fHeight)); - - if (!SkRect::Intersects(query, layerRect)) { - continue; - } - - // TODO: once this code is more stable unsuitable layers can - // just be omitted during the optimization stage - if (!info.fValid || - kSaveLayerMaxSize < info.fSize.fWidth || - kSaveLayerMaxSize < info.fSize.fHeight || - info.fIsNested) { - continue; - } - - pullForward[j] = true; - anyHoisted = true; + + // TODO: once this code is more stable unsuitable layers can + // just be omitted during the optimization stage + if (!info.fValid || + kSaveLayerMaxSize < info.fSize.fWidth || + kSaveLayerMaxSize < info.fSize.fHeight || + info.fIsNested) { + continue; } + + pullForward[i] = true; + anyHoisted = true; } return anyHoisted; diff --git a/src/gpu/GrLayerHoister.h b/src/gpu/GrLayerHoister.h index 25202ce345..4116aef84d 100644 --- a/src/gpu/GrLayerHoister.h +++ b/src/gpu/GrLayerHoister.h @@ -24,14 +24,12 @@ class GrLayerHoister { public: /** Find the layers in 'gpuData' that need hoisting. @param gpuData Acceleration structure containing layer information for a picture - @param ops If a BBH is being used the operations about to be executed; NULL otherwise. @param query The rectangle that is about to be drawn. @param pullForward A gpuData->numSaveLayers -sized Boolean array indicating which layers are to be hoisted Return true if any layers are suitable for hoisting; false otherwise */ static bool FindLayersToHoist(const GrAccelData *gpuData, - const SkPicture::OperationList* ops, const SkRect& query, bool pullForward[]); diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 1b6558ce43..6a7748f88b 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1871,10 +1871,7 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture return true; } - SkAutoTDelete<const SkPicture::OperationList> ops( - picture->EXPERIMENTAL_getActiveOps(clipBounds)); - - if (!GrLayerHoister::FindLayersToHoist(gpuData, ops.get(), clipBounds, pullForward.get())) { + if (!GrLayerHoister::FindLayersToHoist(gpuData, clipBounds, pullForward.get())) { return false; } @@ -1939,7 +1936,7 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture GrLayerHoister::DrawLayers(picture, atlased, nonAtlased); // Render the entire picture using new layers - SkPictureReplacementPlayback playback(picture, &replacements, ops.get()); + SkPictureReplacementPlayback playback(picture, &replacements, NULL); playback.draw(mainCanvas, NULL); |