From 6806bdaca8b22927ba7ef537fd5336311c7258e1 Mon Sep 17 00:00:00 2001 From: "robertphillips@google.com" Date: Tue, 4 Sep 2012 13:39:01 +0000 Subject: Added bench to test multiple readPixels case https://codereview.appspot.com/6501081/ git-svn-id: http://skia.googlecode.com/svn/trunk@5381 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/ReadPixBench.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 bench/ReadPixBench.cpp (limited to 'bench/ReadPixBench.cpp') diff --git a/bench/ReadPixBench.cpp b/bench/ReadPixBench.cpp new file mode 100644 index 0000000000..abcfbeabd1 --- /dev/null +++ b/bench/ReadPixBench.cpp @@ -0,0 +1,66 @@ + +/* + * Copyright 2012 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkBenchmark.h" +#include "SkCanvas.h" + + +/** + * This bench mark tests the use case where the user writes the a canvas + * and then reads small chunks from it repeatedly. This can cause trouble + * for the GPU as readbacks are very expensive. + */ +class ReadPixBench : public SkBenchmark { +public: + ReadPixBench(void* param) : INHERITED(param) {} + +protected: + virtual const char* onGetName() SK_OVERRIDE { + return "readpix"; + } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + canvas->clear(SK_ColorBLACK); + + SkISize size = canvas->getDeviceSize(); + + int offX = (size.width() - kWindowSize) / kNumStepsX; + int offY = (size.height() - kWindowSize) / kNumStepsY; + + SkPaint paint; + + paint.setColor(SK_ColorBLUE); + + canvas->drawCircle(SkIntToScalar(size.width()/2), + SkIntToScalar(size.height()/2), + SkIntToScalar(size.width()/2), + paint); + + SkBitmap bitmap; + + bitmap.setConfig(SkBitmap::kARGB_8888_Config, kWindowSize, kWindowSize); + + for (int x = 0; x < kNumStepsX; ++x) { + for (int y = 0; y < kNumStepsY; ++y) { + canvas->readPixels(&bitmap, x * offX, y * offY); + } + } + } + +private: + static const int kNumStepsX = 30; + static const int kNumStepsY = 30; + static const int kWindowSize = 5; + + typedef SkBenchmark INHERITED; +}; + +//////////////////////////////////////////////////////////////////////////////// + +static SkBenchmark* fact(void* p) { return new ReadPixBench(p); } +static BenchRegistry gReg(fact); -- cgit v1.2.3