diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-24 00:03:42 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-24 00:03:42 +0000 |
commit | f644820b750a77da065fa6a8178765667db25109 (patch) | |
tree | 4ad1ea2a31e73ae2795b06b65c5854b5da2b6f1a /cc | |
parent | 080fbdc705b4950fb7aa2ab5d95b3be841e61625 (diff) | |
download | chromium_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.cc | 12 |
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; |