| // Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_BENCHMARKING_DL_COMPLEXITY_H_ |
| #define FLUTTER_DISPLAY_LIST_BENCHMARKING_DL_COMPLEXITY_H_ |
| |
| #include "flutter/display_list/display_list.h" |
| |
| #include "third_party/skia/include/gpu/GrTypes.h" |
| |
| namespace flutter { |
| |
| class DisplayListComplexityCalculator { |
| public: |
| static DisplayListComplexityCalculator* GetForSoftware(); |
| static DisplayListComplexityCalculator* GetForBackend(GrBackendApi backend); |
| |
| virtual ~DisplayListComplexityCalculator() = default; |
| |
| // Returns a calculated complexity score for a given DisplayList object |
| virtual unsigned int Compute(const DisplayList* display_list) = 0; |
| |
| // Returns whether a given complexity score meets the threshold for |
| // cacheability for this particular ComplexityCalculator |
| virtual bool ShouldBeCached(unsigned int complexity_score) = 0; |
| |
| // Sets a ceiling for the complexity score being calculated. By default |
| // this is the largest number representable by an unsigned int. |
| // |
| // This setting has no effect on non-accumulator based scorers such as |
| // the Naive calculator. |
| virtual void SetComplexityCeiling(unsigned int ceiling) = 0; |
| }; |
| |
| class DisplayListNaiveComplexityCalculator |
| : public DisplayListComplexityCalculator { |
| public: |
| static DisplayListComplexityCalculator* GetInstance(); |
| |
| unsigned int Compute(const DisplayList* display_list) override { |
| return display_list->op_count(true); |
| } |
| |
| bool ShouldBeCached(unsigned int complexity_score) override { |
| return complexity_score > 5u; |
| } |
| |
| void SetComplexityCeiling(unsigned int ceiling) override {} |
| |
| private: |
| DisplayListNaiveComplexityCalculator() {} |
| static DisplayListNaiveComplexityCalculator* instance_; |
| }; |
| |
| } // namespace flutter |
| |
| #endif // FLUTTER_DISPLAY_LIST_BENCHMARKING_DL_COMPLEXITY_H_ |