diff options
author | tomhudson@chromium.org <tomhudson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-14 16:36:28 +0000 |
---|---|---|
committer | tomhudson@chromium.org <tomhudson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-14 16:36:28 +0000 |
commit | e98e66f09edc584a322915053fa4f524f5e53ef7 (patch) | |
tree | 138023fae4ded86f4058223ccbbd8dfc31f959f2 /skia | |
parent | 8ebd568216aa055ae926bb5f6151cc053d5a8986 (diff) | |
download | chromium_src-e98e66f09edc584a322915053fa4f524f5e53ef7.zip chromium_src-e98e66f09edc584a322915053fa4f524f5e53ef7.tar.gz chromium_src-e98e66f09edc584a322915053fa4f524f5e53ef7.tar.bz2 |
New class to simplify rasterization.
skia::PaintSimplifier subclasses SkDrawFilter to reduce the quality of draws. The intent is to be able to place less of a burden on the rasterizer during Android flings or other situations where we need a lot of pixels but they won't spend long on screen.
This CL does not actually invoke the PaintSimplifier. The code is extracted from https://codereview.chromium.org/12210081/; deciding when to simplify will be a separate CL.
BUG=174945
TBR=reed
Review URL: https://chromiumcodereview.appspot.com/12207157
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182475 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r-- | skia/ext/paint_simplifier.cc | 41 | ||||
-rw-r--r-- | skia/ext/paint_simplifier.h | 33 | ||||
-rw-r--r-- | skia/skia.gyp | 2 |
3 files changed, 76 insertions, 0 deletions
diff --git a/skia/ext/paint_simplifier.cc b/skia/ext/paint_simplifier.cc new file mode 100644 index 0000000..6b69766 --- /dev/null +++ b/skia/ext/paint_simplifier.cc @@ -0,0 +1,41 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "skia/ext/paint_simplifier.h" +#include "third_party/skia/include/core/SkPaint.h" + +namespace skia { + +PaintSimplifier::PaintSimplifier() + : INHERITED() { + +} + +PaintSimplifier::~PaintSimplifier() { + +} + +bool PaintSimplifier::filter(SkPaint* paint, Type type) { + + // Preserve a modicum of text quality; black & white text is + // just too blocky, even during a fling. + if (type != kText_Type) { + paint->setAntiAlias(false); + } + paint->setSubpixelText(false); + paint->setLCDRenderText(false); + + paint->setFilterBitmap(false); + paint->setMaskFilter(NULL); + + // Uncomment this line to shade simplified tiles pink during debugging. + //paint->setColor(SkColorSetRGB(255, 127, 127)); + + return true; +} + + +} // namespace skia + + diff --git a/skia/ext/paint_simplifier.h b/skia/ext/paint_simplifier.h new file mode 100644 index 0000000..0eff833 --- /dev/null +++ b/skia/ext/paint_simplifier.h @@ -0,0 +1,33 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SKIA_EXT_PAINT_SIMPLIFIER_H +#define SKIA_EXT_PAINT_SIMPLIFIER_H + +#include "base/values.h" +#include "third_party/skia/include/core/SkDrawFilter.h" + +class SkPaint; + +namespace skia { + +/* + When installed on a SkCanvas, reduces the quality of all draws + to that canvas. This improves rasterization speed during flings. + We turn off blurs, filters, and antialiasing *except for* text. +*/ +class SK_API PaintSimplifier : public SkDrawFilter { + public: + PaintSimplifier(); + virtual ~PaintSimplifier(); + virtual bool filter(SkPaint*, Type) OVERRIDE; + + private: + typedef SkDrawFilter INHERITED; +}; + +} // namespace skia + +#endif // SKIA_EXT_PAINT_SIMPLIFIER_H + diff --git a/skia/skia.gyp b/skia/skia.gyp index f8bad83..340da93 100644 --- a/skia/skia.gyp +++ b/skia/skia.gyp @@ -168,6 +168,8 @@ 'ext/lazy_pixel_ref.cc', 'ext/lazy_pixel_ref.h', 'ext/SkThread_chrome.cc', + 'ext/paint_simplifier.cc', + 'ext/paint_simplifier.h', 'ext/platform_canvas.cc', 'ext/platform_canvas.h', 'ext/platform_device.cc', |