Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Side by Side Diff: Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

Issue 7749028: Compositor leaks all resources if tab is closed and it's not the last in the process (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/835/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 180
181 m_headsUpDisplay = CCHeadsUpDisplay::create(this); 181 m_headsUpDisplay = CCHeadsUpDisplay::create(this);
182 } 182 }
183 183
184 LayerRendererChromium::~LayerRendererChromium() 184 LayerRendererChromium::~LayerRendererChromium()
185 { 185 {
186 m_headsUpDisplay.clear(); // Explicitly destroy the HUD before the TextureMa nager dies. 186 m_headsUpDisplay.clear(); // Explicitly destroy the HUD before the TextureMa nager dies.
187 cleanupSharedObjects(); 187 cleanupSharedObjects();
188 } 188 }
189 189
190 void LayerRendererChromium::clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImp l* layer)
191 {
192 for (size_t i = 0; i < layer->children().size(); ++i)
193 clearRenderSurfacesOnCCLayerImplRecursive(layer->children()[i].get());
194 layer->clearRenderSurface();
195 }
196
197 void LayerRendererChromium::clearRootCCLayerImpl()
198 {
199 if (m_rootCCLayerImpl)
200 clearRenderSurfacesOnCCLayerImplRecursive(m_rootCCLayerImpl.get());
201 m_computedRenderSurfaceLayerList.clear();
202 m_rootCCLayerImpl.clear();
203 }
204
190 GraphicsContext3D* LayerRendererChromium::context() 205 GraphicsContext3D* LayerRendererChromium::context()
191 { 206 {
192 return m_context.get(); 207 return m_context.get();
193 } 208 }
194 209
195 #if USE(SKIA) 210 #if USE(SKIA)
196 GrContext* LayerRendererChromium::skiaContext() 211 GrContext* LayerRendererChromium::skiaContext()
197 { 212 {
198 if (!m_skiaContext && m_contextSupportsTextureFormatBGRA && m_contextSupport sReadFormatBGRA) { 213 if (!m_skiaContext && m_contextSupportsTextureFormatBGRA && m_contextSupport sReadFormatBGRA) {
199 m_context->makeContextCurrent(); 214 m_context->makeContextCurrent();
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 m_context->prepareTexture(); 610 m_context->prepareTexture();
596 611
597 m_headsUpDisplay->onPresent(); 612 m_headsUpDisplay->onPresent();
598 } 613 }
599 614
600 void LayerRendererChromium::setRootLayer(PassRefPtr<LayerChromium> layer) 615 void LayerRendererChromium::setRootLayer(PassRefPtr<LayerChromium> layer)
601 { 616 {
602 m_rootLayer = layer; 617 m_rootLayer = layer;
603 if (m_rootLayer) 618 if (m_rootLayer)
604 m_rootLayer->setLayerRenderer(this); 619 m_rootLayer->setLayerRenderer(this);
620 else
621 clearRootCCLayerImpl();
605 m_rootLayerContentTiler->invalidateEntireLayer(); 622 m_rootLayerContentTiler->invalidateEntireLayer();
606 } 623 }
607 624
608 void LayerRendererChromium::setLayerRendererRecursive(LayerChromium* layer) 625 void LayerRendererChromium::setLayerRendererRecursive(LayerChromium* layer)
609 { 626 {
610 const Vector<RefPtr<LayerChromium> >& children = layer->children(); 627 const Vector<RefPtr<LayerChromium> >& children = layer->children();
611 for (size_t i = 0; i < children.size(); ++i) 628 for (size_t i = 0; i < children.size(); ++i)
612 setLayerRendererRecursive(children[i].get()); 629 setLayerRendererRecursive(children[i].get());
613 630
614 if (layer->maskLayer()) 631 if (layer->maskLayer())
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
1306 return m_videoLayerYUVProgram.get(); 1323 return m_videoLayerYUVProgram.get();
1307 } 1324 }
1308 1325
1309 1326
1310 void LayerRendererChromium::cleanupSharedObjects() 1327 void LayerRendererChromium::cleanupSharedObjects()
1311 { 1328 {
1312 makeContextCurrent(); 1329 makeContextCurrent();
1313 1330
1314 m_sharedGeometry.clear(); 1331 m_sharedGeometry.clear();
1315 m_borderProgram.clear(); 1332 m_borderProgram.clear();
1316 m_canvasLayerProgram.clear();
1317 m_headsUpDisplayProgram.clear(); 1333 m_headsUpDisplayProgram.clear();
1318 m_videoLayerRGBAProgram.clear();
1319 m_videoLayerYUVProgram.clear();
1320 m_pluginLayerProgram.clear();
1321 m_renderSurfaceProgram.clear(); 1334 m_renderSurfaceProgram.clear();
1322 m_renderSurfaceMaskProgram.clear(); 1335 m_renderSurfaceMaskProgram.clear();
1323 m_tilerProgram.clear(); 1336 m_tilerProgram.clear();
1324 m_tilerProgramSwizzle.clear(); 1337 m_tilerProgramSwizzle.clear();
1338 m_tilerProgramAA.clear();
1339 m_tilerProgramSwizzleAA.clear();
1340 m_canvasLayerProgram.clear();
1341 m_videoLayerRGBAProgram.clear();
1342 m_videoLayerYUVProgram.clear();
1343 m_pluginLayerProgram.clear();
1325 if (m_offscreenFramebufferId) 1344 if (m_offscreenFramebufferId)
1326 GLC(m_context.get(), m_context->deleteFramebuffer(m_offscreenFramebuffer Id)); 1345 GLC(m_context.get(), m_context->deleteFramebuffer(m_offscreenFramebuffer Id));
1327 1346
1328 // Clear tilers before the texture manager, as they have references to textu res. 1347 // Clear tilers before the texture manager, as they have references to textu res.
1329 m_rootLayerContentTiler.clear(); 1348 m_rootLayerContentTiler.clear();
1330 1349
1331 m_contentsTextureManager.clear(); 1350 m_contentsTextureManager.clear();
1332 m_renderSurfaceTextureManager.clear(); 1351 m_renderSurfaceTextureManager.clear();
1333 } 1352 }
1334 1353
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1457 PassOwnPtr<CCLayerTreeHostImplProxy> LayerRendererChromium::createLayerTreeHostI mplProxy() 1476 PassOwnPtr<CCLayerTreeHostImplProxy> LayerRendererChromium::createLayerTreeHostI mplProxy()
1458 { 1477 {
1459 OwnPtr<CCLayerTreeHostImplProxy> proxy = LayerRendererChromiumImplProxy::cre ate(this); 1478 OwnPtr<CCLayerTreeHostImplProxy> proxy = LayerRendererChromiumImplProxy::cre ate(this);
1460 proxy->start(); 1479 proxy->start();
1461 return proxy.release(); 1480 return proxy.release();
1462 } 1481 }
1463 1482
1464 } // namespace WebCore 1483 } // namespace WebCore
1465 1484
1466 #endif // USE(ACCELERATED_COMPOSITING) 1485 #endif // USE(ACCELERATED_COMPOSITING)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698