am 59301777: Merge "Fix leak in reused display lists" into honeycomb

* commit '59301777215d2e137994107d20ba40d72c7cd349':
  Fix leak in reused display lists
This commit is contained in:
Chet Haase
2011-02-03 17:16:32 -08:00
committed by Android Git Automerger
2 changed files with 14 additions and 3 deletions

View File

@@ -68,6 +68,10 @@ DisplayList::DisplayList(const DisplayListRenderer& recorder) {
}
DisplayList::~DisplayList() {
clearResources();
}
void DisplayList::clearResources() {
sk_free((void*) mReader.base());
Caches& caches = Caches::getInstance();
@@ -98,7 +102,7 @@ DisplayList::~DisplayList() {
mMatrices.clear();
}
void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) {
void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) {
const SkWriter32& writer = recorder.writeStream();
init();
@@ -106,6 +110,11 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
return;
}
if (reusing) {
// re-using display list - clear out previous allocations
clearResources();
}
size_t size = writer.size();
void* buffer = sk_malloc_throw(size);
writer.flatten(buffer);
@@ -531,7 +540,7 @@ DisplayList* DisplayListRenderer::getDisplayList() {
if (mDisplayList == NULL) {
mDisplayList = new DisplayList(*this);
} else {
mDisplayList->initFromDisplayListRenderer(*this);
mDisplayList->initFromDisplayListRenderer(*this, true);
}
return mDisplayList;
}

View File

@@ -102,13 +102,15 @@ public:
static const char* OP_NAMES[];
void initFromDisplayListRenderer(const DisplayListRenderer& recorder);
void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false);
bool replay(OpenGLRenderer& renderer, uint32_t level = 0);
private:
void init();
void clearResources();
class TextContainer {
public:
size_t length() const {