am f441557d: Merge "Fix frame-allocated path lifecycles" into lmp-mr1-dev

* commit 'f441557d89cab8885940bb63a27159f576749f96':
  Fix frame-allocated path lifecycles
This commit is contained in:
Chris Craik
2014-12-10 21:01:30 +00:00
committed by Android Git Automerger
4 changed files with 19 additions and 8 deletions

View File

@@ -325,6 +325,7 @@ void AmbientShadow::createAmbientShadow(bool isCasterOpaque,
// At the end, update the real index and vertex buffer size.
shadowVertexBuffer.updateVertexCount(vertexBufferIndex);
shadowVertexBuffer.updateIndexCount(indexBufferIndex);
shadowVertexBuffer.computeBounds<AlphaVertex>();
ShadowTessellator::checkOverflow(vertexBufferIndex, totalVertexCount, "Ambient Vertex Buffer");
ShadowTessellator::checkOverflow(indexBufferIndex, totalIndexCount, "Ambient Index Buffer");

View File

@@ -77,18 +77,14 @@ public:
OpenGLRenderer& mRenderer;
const int mReplayFlags;
// Allocator with the lifetime of a single frame.
// replay uses an Allocator owned by the struct, while defer shares the DeferredDisplayList's Allocator
// Allocator with the lifetime of a single frame. replay uses an Allocator owned by the struct,
// while defer shares the DeferredDisplayList's Allocator
// TODO: move this allocator to be owned by object with clear frame lifecycle
LinearAllocator * const mAllocator;
SkPath* allocPathForFrame() {
mTempPaths.push_back();
return &mTempPaths.back();
return mRenderer.allocPathForFrame();
}
private:
// Paths kept alive for the duration of the frame
std::vector<SkPath> mTempPaths;
};
class DeferStateStruct : public PlaybackStateStruct {

View File

@@ -311,6 +311,11 @@ void OpenGLRenderer::finish() {
renderOverdraw();
endTiling();
for (size_t i = 0; i < mTempPaths.size(); i++) {
delete mTempPaths[i];
}
mTempPaths.clear();
// When finish() is invoked on FBO 0 we've reached the end
// of the current frame
if (getTargetFbo() == 0) {

View File

@@ -342,6 +342,12 @@ public:
uint8_t getAmbientShadowAlpha() const { return mAmbientShadowAlpha; }
uint8_t getSpotShadowAlpha() const { return mSpotShadowAlpha; }
SkPath* allocPathForFrame() {
SkPath* path = new SkPath();
mTempPaths.push_back(path);
return path;
}
protected:
/**
* Perform the setup specific to a frame. This method does not
@@ -1014,6 +1020,9 @@ private:
uint8_t mAmbientShadowAlpha;
uint8_t mSpotShadowAlpha;
// Paths kept alive for the duration of the frame
std::vector<SkPath*> mTempPaths;
friend class Layer;
friend class TextSetupFunctor;
friend class DrawBitmapOp;