Merge "Fix potential leak in TextLayouCache"

This commit is contained in:
Fabrice Di Meglio
2011-09-19 11:41:01 -07:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 3 deletions

View File

@@ -236,6 +236,22 @@ TextLayoutCacheKey::TextLayoutCacheKey(const SkPaint* paint,
hinting = paint->getHinting();
}
TextLayoutCacheKey::TextLayoutCacheKey(const TextLayoutCacheKey& other) :
text(NULL),
textCopy(other.textCopy),
contextCount(other.contextCount),
dirFlags(other.dirFlags),
typeface(other.typeface),
textSize(other.textSize),
textSkewX(other.textSkewX),
textScaleX(other.textScaleX),
flags(other.flags),
hinting(other.hinting) {
if (other.text) {
textCopy.setTo(other.text);
}
}
bool TextLayoutCacheKey::operator<(const TextLayoutCacheKey& rhs) const {
LTE_INT(count) {
LTE_INT(contextCount) {
@@ -247,7 +263,7 @@ bool TextLayoutCacheKey::operator<(const TextLayoutCacheKey& rhs) const {
LTE_INT(flags) {
LTE_INT(hinting) {
LTE_INT(dirFlags) {
return strncmp16(text, rhs.text, contextCount) < 0;
return strncmp16(getText(), rhs.getText(), contextCount) < 0;
}
}
}
@@ -263,7 +279,7 @@ bool TextLayoutCacheKey::operator<(const TextLayoutCacheKey& rhs) const {
void TextLayoutCacheKey::internalTextCopy() {
textCopy.setTo(text, contextCount);
text = textCopy.string();
text = NULL;
}
size_t TextLayoutCacheKey::getSize() {

View File

@@ -72,6 +72,8 @@ public:
const UChar* text, size_t start, size_t count,
size_t contextCount, int dirFlags);
TextLayoutCacheKey(const TextLayoutCacheKey& other);
bool operator<(const TextLayoutCacheKey& rhs) const;
/**
@@ -86,7 +88,7 @@ public:
size_t getSize();
private:
const UChar* text;
const UChar* text; // if text is NULL, use textCopy
String16 textCopy;
size_t start;
size_t count;
@@ -98,6 +100,10 @@ private:
SkScalar textScaleX;
uint32_t flags;
SkPaint::Hinting hinting;
inline const UChar* getText() const {
return text ? text : textCopy.string();
}
}; // TextLayoutCacheKey
/*