/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkPictureAnalyzer_DEFINED #define SkPictureAnalyzer_DEFINED #include "SkCanvas.h" #include "SkRefCnt.h" #include "SkRegion.h" #include "SkTypes.h" #if SK_SUPPORT_GPU #include "GrContext.h" class SkPath; class SkPicture; /** \class SkPictureGpuAnalyzer Gathers GPU-related statistics for one or more SkPictures. */ class SK_API SkPictureGpuAnalyzer final : public SkNoncopyable { public: explicit SkPictureGpuAnalyzer(sk_sp = nullptr); explicit SkPictureGpuAnalyzer(const sk_sp& picture, sk_sp = nullptr); /** * Process the given picture and accumulate its stats. */ void analyzePicture(const SkPicture*); /** * Process an explicit clipPath op. */ void analyzeClipPath(const SkPath&, SkClipOp, bool doAntiAlias); /** * Reset all accumulated stats. */ void reset(); /** * Returns true if the analyzed pictures are suitable for rendering on the GPU. */ bool suitableForGpuRasterization(const char** whyNot = nullptr) const; /** * Returns the number of commands which are slow to draw on the GPU, capped at the predicate * max. */ uint32_t numSlowGpuCommands() { return fNumSlowPaths; } private: uint32_t fNumSlowPaths; typedef SkNoncopyable INHERITED; }; #endif // SK_SUPPORT_GPU #endif // SkPictureAnalyzer_DEFINED