Fix a leak of RenderObjects in Paragraph/ParagraphBuilder (#3189)

The RenderView destructor does not delete its descendants.
RenderObject::destroy must be called to delete the object tree along with
other cleanup tasks.

Also associate a CustomFontData with dynamically loaded fonts in order to get
the desired FontDataCache behavior at RenderObject::destroy time.
This commit is contained in:
Jason Simmons 2016-10-31 11:16:04 -07:00 committed by GitHub
parent 3f564f28f3
commit cdd7db2674
3 changed files with 11 additions and 7 deletions

View File

@ -42,9 +42,11 @@ Paragraph::Paragraph(PassOwnPtr<RenderView> renderView)
: m_renderView(renderView) {}
Paragraph::~Paragraph() {
PassOwnPtr<RenderView> renderView = m_renderView.release();
Threads::UI()->PostTask(
[renderView]() { /* renderView's destructor runs. */ });
if (m_renderView) {
RenderView* renderView = m_renderView.leakPtr();
Threads::UI()->PostTask(
[renderView]() { renderView->destroy(); });
}
}
double Paragraph::width() {

View File

@ -208,9 +208,11 @@ ParagraphBuilder::ParagraphBuilder(tonic::Int32List& encoded,
}
ParagraphBuilder::~ParagraphBuilder() {
PassOwnPtr<RenderView> renderView = m_renderView.release();
Threads::UI()->PostTask(
[renderView]() { /* renderView's destructor runs. */ });
if (m_renderView) {
RenderView* renderView = m_renderView.leakPtr();
Threads::UI()->PostTask(
[renderView]() { renderView->destroy(); });
}
}
void ParagraphBuilder::pushStyle(tonic::Int32List& encoded,

View File

@ -186,7 +186,7 @@ PassRefPtr<FontData> AssetFontSelector::getFontData(
font_description.orientation(),
font_description.useSubpixelPositioning());
font_data = SimpleFontData::create(platform_data);
font_data = SimpleFontData::create(platform_data, CustomFontData::create());
font_platform_data_cache_.set(key, font_data);
}