aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2014-09-03 13:46:02 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-09-03 13:46:02 -0700
commit2ed8a75c284fd8e74912de67691acf97bfb7a7b7 (patch)
treeffaa372d83a6d7ccbc5b3a4b32425d668b736432 /src
parent6a2f5fe8677f27d737da0e4e6dd1f814fbdbb6fc (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.cpp9
-rw-r--r--src/gpu/GrLayerHoister.cpp87
-rw-r--r--src/gpu/GrLayerHoister.h2
-rw-r--r--src/gpu/SkGpuDevice.cpp7
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);