17f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett/*
27f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett * Copyright 2015 Google Inc.
37f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett *
47f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett * Use of this source code is governed by a BSD-style license that can be
57f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett * found in the LICENSE file.
67f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett */
77f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett
87f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#ifndef BitmapRegionDecoderBench_DEFINED
97f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#define BitmapRegionDecoderBench_DEFINED
107f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett
117f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#include "Benchmark.h"
125cb4885b4cd1ac5eb3fc92dac5f5509d7c810464msarett#include "SkBitmapRegionDecoder.h"
137f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#include "SkData.h"
147f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#include "SkImageInfo.h"
157f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#include "SkRefCnt.h"
167f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#include "SkString.h"
177f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett
187f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett/**
197f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett *  Benchmark Android's BitmapRegionDecoder for a particular colorType, sampleSize, and subset.
207f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett *
217f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett *  nanobench.cpp handles creating benchmarks for interesting scaled subsets.  We strive to test
227f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett *  on real use cases.
237f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett */
247f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarettclass BitmapRegionDecoderBench : public Benchmark {
257f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarettpublic:
267f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    // Calls encoded->ref()
27d1227a7417922ce26252d55815d0d1e98f0eb070msarett    BitmapRegionDecoderBench(const char* basename, SkData* encoded, SkColorType colorType,
287f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett            uint32_t sampleSize, const SkIRect& subset);
297f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett
307f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarettprotected:
317f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    const char* onGetName() override;
327f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    bool isSuitableFor(Backend backend) override;
33a1ebeb25e9acfcd801e089e063311d716b83b8a5mtklein    void onDraw(int n, SkCanvas* canvas) override;
348a6697af95b340aad6dee7e6228048fa305c1e59joshualitt    void onDelayedSetup() override;
357f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett
367f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarettprivate:
377f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    SkString                                       fName;
38145dbcd165d9d27298eb8888bc240e2d06a95464Ben Wagner    std::unique_ptr<SkBitmapRegionDecoder>         fBRD;
39ffae30db4ade45b469ac3432ec373b6f6daee6e7bungeman    sk_sp<SkData>                                  fData;
407f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    const SkColorType                              fColorType;
417f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    const uint32_t                                 fSampleSize;
427f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    const SkIRect                                  fSubset;
437f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett    typedef Benchmark INHERITED;
447f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett};
457f69144aaabbedf51ad2a1feddc9e0689f2c5ee9msarett#endif // BitmapRegionDecoderBench_DEFINED
46