summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-24 00:03:42 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-24 00:03:42 +0000
commitf644820b750a77da065fa6a8178765667db25109 (patch)
tree4ad1ea2a31e73ae2795b06b65c5854b5da2b6f1a /cc
parent080fbdc705b4950fb7aa2ab5d95b3be841e61625 (diff)
downloadchromium_src-f644820b750a77da065fa6a8178765667db25109.zip
chromium_src-f644820b750a77da065fa6a8178765667db25109.tar.gz
chromium_src-f644820b750a77da065fa6a8178765667db25109.tar.bz2
cc: Don't leak a ref to SkColorFilter.
The SkColorFilter* we get in GLRenderer is a refcounted object with a reference on it. Since we just store it in a raw pointer, we leak that reference. Instead, store it in a RefPtr. R=senorblanco BUG=259815 Review URL: https://chromiumcodereview.appspot.com/19267024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213283 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/output/gl_renderer.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 3cb6c2b..60a0b92 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -752,9 +752,15 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
SkScalar color_matrix[20];
bool use_color_matrix = false;
if (quad->filter) {
- SkColorFilter* cf;
- if ((quad->filter->asColorFilter(&cf)) && cf->asColorMatrix(color_matrix) &&
- !quad->filter->getInput(0)) {
+ skia::RefPtr<SkColorFilter> cf;
+
+ {
+ SkColorFilter* colorfilter_rawptr = NULL;
+ quad->filter->asColorFilter(&colorfilter_rawptr);
+ cf = skia::AdoptRef(colorfilter_rawptr);
+ }
+
+ if (cf && cf->asColorMatrix(color_matrix) && !quad->filter->getInput(0)) {
// We have a single color matrix as a filter; apply it locally
// in the compositor.
use_color_matrix = true;