summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
authortomhudson@chromium.org <tomhudson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-14 16:36:28 +0000
committertomhudson@chromium.org <tomhudson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-14 16:36:28 +0000
commite98e66f09edc584a322915053fa4f524f5e53ef7 (patch)
tree138023fae4ded86f4058223ccbbd8dfc31f959f2 /skia
parent8ebd568216aa055ae926bb5f6151cc053d5a8986 (diff)
downloadchromium_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.cc41
-rw-r--r--skia/ext/paint_simplifier.h33
-rw-r--r--skia/skia.gyp2
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',