start to use font for measure, not paint
-- lots more where this came from
Bug: skia:2664
Change-Id: I8bb47f02c156b0b88fbb92fec73af0eb6641b1bf
Reviewed-on: https://skia-review.googlesource.com/c/173769
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/bench/FontCacheBench.cpp b/bench/FontCacheBench.cpp
index beae47a..2eb2b71 100644
--- a/bench/FontCacheBench.cpp
+++ b/bench/FontCacheBench.cpp
@@ -36,15 +36,14 @@
}
void onDraw(int loops, SkCanvas* canvas) override {
- SkPaint paint;
- this->setupPaint(&paint);
- paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+ SkFont font;
+ font.setEdging(SkFont::Edging::kAntiAlias);
const uint16_t* array = gUniqueGlyphIDs;
while (*array != gUniqueGlyphIDs_Sentinel) {
int count = count_glyphs(array);
for (int i = 0; i < loops; ++i) {
- paint.measureText(array, count * sizeof(uint16_t));
+ (void)font.measureText(array, count * sizeof(uint16_t), kGlyphID_SkTextEncoding);
}
array += count + 1; // skip the sentinel
}
diff --git a/bench/PicturePlaybackBench.cpp b/bench/PicturePlaybackBench.cpp
index 54ecd3c..40dde4b 100644
--- a/bench/PicturePlaybackBench.cpp
+++ b/bench/PicturePlaybackBench.cpp
@@ -17,130 +17,8 @@
// This is designed to emulate about 4 screens of textual content
-
-class PicturePlaybackBench : public Benchmark {
-public:
- PicturePlaybackBench(const char name[]) {
- fName.printf("picture_playback_%s", name);
- fPictureWidth = SkIntToScalar(PICTURE_WIDTH);
- fPictureHeight = SkIntToScalar(PICTURE_HEIGHT);
- fTextSize = SkIntToScalar(TEXT_SIZE);
- }
-
- enum {
- PICTURE_WIDTH = 1000,
- PICTURE_HEIGHT = 4000,
- TEXT_SIZE = 10
- };
-protected:
- virtual const char* onGetName() {
- return fName.c_str();
- }
-
- virtual void onDraw(int loops, SkCanvas* canvas) {
-
- SkPictureRecorder recorder;
- SkCanvas* pCanvas = recorder.beginRecording(PICTURE_WIDTH, PICTURE_HEIGHT, nullptr, 0);
- this->recordCanvas(pCanvas);
- sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
-
- const SkPoint translateDelta = getTranslateDelta(loops);
-
- for (int i = 0; i < loops; i++) {
- picture->playback(canvas);
- canvas->translate(translateDelta.fX, translateDelta.fY);
- }
- }
-
- virtual void recordCanvas(SkCanvas* canvas) = 0;
- virtual SkPoint getTranslateDelta(int N) {
- SkIPoint canvasSize = onGetSize();
- return SkPoint::Make(SkIntToScalar((PICTURE_WIDTH - canvasSize.fX)/N),
- SkIntToScalar((PICTURE_HEIGHT- canvasSize.fY)/N));
- }
-
- SkString fName;
- SkScalar fPictureWidth;
- SkScalar fPictureHeight;
- SkScalar fTextSize;
-private:
- typedef Benchmark INHERITED;
-};
-
-
-class TextPlaybackBench : public PicturePlaybackBench {
-public:
- TextPlaybackBench() : INHERITED("drawText") { }
-protected:
- void recordCanvas(SkCanvas* canvas) override {
- SkPaint paint;
- paint.setTextSize(fTextSize);
- paint.setColor(SK_ColorBLACK);
-
- const char* text = "Hamburgefons";
- size_t len = strlen(text);
- const SkScalar textWidth = paint.measureText(text, len);
-
- for (SkScalar x = 0; x < fPictureWidth; x += textWidth) {
- for (SkScalar y = 0; y < fPictureHeight; y += fTextSize) {
- canvas->drawText(text, len, x, y, paint);
- }
- }
- }
-private:
- typedef PicturePlaybackBench INHERITED;
-};
-
-class PosTextPlaybackBench : public PicturePlaybackBench {
-public:
- PosTextPlaybackBench(bool drawPosH)
- : INHERITED(drawPosH ? "drawPosTextH" : "drawPosText")
- , fDrawPosH(drawPosH) { }
-protected:
- void recordCanvas(SkCanvas* canvas) override {
- SkPaint paint;
- paint.setTextSize(fTextSize);
- paint.setColor(SK_ColorBLACK);
-
- const char* text = "Hamburgefons";
- size_t len = strlen(text);
- const SkScalar textWidth = paint.measureText(text, len);
-
- SkScalar* adv = new SkScalar[len];
- paint.getTextWidths(text, len, adv);
-
- for (SkScalar x = 0; x < fPictureWidth; x += textWidth) {
- for (SkScalar y = 0; y < fPictureHeight; y += fTextSize) {
-
- SkPoint* pos = new SkPoint[len];
- SkScalar advX = 0;
-
- for (size_t i = 0; i < len; i++) {
- if (fDrawPosH)
- pos[i].set(x + advX, y);
- else
- pos[i].set(x + advX, y + i);
- advX += adv[i];
- }
-
- canvas->drawPosText(text, len, pos, paint);
- delete[] pos;
- }
- }
- delete[] adv;
- }
-private:
- bool fDrawPosH;
- typedef PicturePlaybackBench INHERITED;
-};
-
-
///////////////////////////////////////////////////////////////////////////////
-DEF_BENCH( return new TextPlaybackBench(); )
-DEF_BENCH( return new PosTextPlaybackBench(true); )
-DEF_BENCH( return new PosTextPlaybackBench(false); )
-
// Chrome draws into small tiles with impl-side painting.
// This benchmark measures the relative performance of our bounding-box hierarchies,
// both when querying tiles perfectly and when not.