Skip to content

Commit

Permalink
New class to simplify rasterization.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
tomhudson@chromium.org committed Feb 14, 2013
1 parent 8ebd568 commit e98e66f
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
41 changes: 41 additions & 0 deletions skia/ext/paint_simplifier.cc
Original file line number Diff line number Diff line change
@@ -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


33 changes: 33 additions & 0 deletions skia/ext/paint_simplifier.h
Original file line number Diff line number Diff line change
@@ -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

2 changes: 2 additions & 0 deletions skia/skia.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down

0 comments on commit e98e66f

Please sign in to comment.