Coverage Report

Created: 2024-05-20 07:14

/src/skia/include/core/SkFlattenable.h
Line
Count
Source
1
/*
2
 * Copyright 2006 The Android Open Source Project
3
 *
4
 * Use of this source code is governed by a BSD-style license that can be
5
 * found in the LICENSE file.
6
 */
7
8
#ifndef SkFlattenable_DEFINED
9
#define SkFlattenable_DEFINED
10
11
#include "include/core/SkRefCnt.h"
12
#include "include/core/SkTypes.h"
13
14
#include <cstddef>
15
16
class SkData;
17
class SkReadBuffer;
18
class SkWriteBuffer;
19
struct SkDeserialProcs;
20
struct SkSerialProcs;
21
22
/** \class SkFlattenable
23
24
 SkFlattenable is the base class for objects that need to be flattened
25
 into a data stream for either transport or as part of the key to the
26
 font cache.
27
 */
28
class SK_API SkFlattenable : public SkRefCnt {
29
public:
30
    enum Type {
31
        kSkColorFilter_Type,
32
        kSkBlender_Type,
33
        kSkDrawable_Type,
34
        kSkDrawLooper_Type,  // no longer supported by Skia
35
        kSkImageFilter_Type,
36
        kSkMaskFilter_Type,
37
        kSkPathEffect_Type,
38
        kSkShader_Type,
39
    };
40
41
    typedef sk_sp<SkFlattenable> (*Factory)(SkReadBuffer&);
42
43
1.67M
    SkFlattenable() {}
44
45
    /** Implement this to return a factory function pointer that can be called
46
     to recreate your class given a buffer (previously written to by your
47
     override of flatten().
48
     */
49
    virtual Factory getFactory() const = 0;
50
51
    /**
52
     *  Returns the name of the object's class.
53
     */
54
    virtual const char* getTypeName() const = 0;
55
56
    static Factory NameToFactory(const char name[]);
57
    static const char* FactoryToName(Factory);
58
59
    static void Register(const char name[], Factory);
60
61
    /**
62
     *  Override this if your subclass needs to record data that it will need to recreate itself
63
     *  from its CreateProc (returned by getFactory()).
64
     *
65
     *  DEPRECATED public : will move to protected ... use serialize() instead
66
     */
67
240
    virtual void flatten(SkWriteBuffer&) const {}
68
69
    virtual Type getFlattenableType() const = 0;
70
71
    //
72
    // public ways to serialize / deserialize
73
    //
74
    sk_sp<SkData> serialize(const SkSerialProcs* = nullptr) const;
75
    size_t serialize(void* memory, size_t memory_size,
76
                     const SkSerialProcs* = nullptr) const;
77
    static sk_sp<SkFlattenable> Deserialize(Type, const void* data, size_t length,
78
                                            const SkDeserialProcs* procs = nullptr);
79
80
protected:
81
    class PrivateInitializer {
82
    public:
83
        static void InitEffects();
84
        static void InitImageFilters();
85
    };
86
87
private:
88
    static void RegisterFlattenablesIfNeeded();
89
    static void Finalize();
90
91
    friend class SkGraphics;
92
93
    using INHERITED = SkRefCnt;
94
};
95
96
#if defined(SK_DISABLE_EFFECT_DESERIALIZATION)
97
    #define SK_REGISTER_FLATTENABLE(type) do{}while(false)
98
99
    #define SK_FLATTENABLE_HOOKS(type)                                   \
100
        static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);           \
101
        friend class SkFlattenable::PrivateInitializer;                  \
102
        Factory getFactory() const override { return nullptr; }          \
103
        const char* getTypeName() const override { return #type; }
104
#else
105
    #define SK_REGISTER_FLATTENABLE(type)                                \
106
156
        SkFlattenable::Register(#type, type::CreateProc)
107
108
    #define SK_FLATTENABLE_HOOKS(type)                                   \
109
        static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);           \
110
        friend class SkFlattenable::PrivateInitializer;                  \
111
19.5k
        Factory getFactory() const override { return type::CreateProc; } \
Unexecuted instantiation: SkImageShader::getFactory() const
Unexecuted instantiation: SkBlendModeBlender::getFactory() const
SkBlurMaskFilterImpl::getFactory() const
Line
Count
Source
111
12.7k
        Factory getFactory() const override { return type::CreateProc; } \
Unexecuted instantiation: SkLocalMatrixImageFilter::getFactory() const
Unexecuted instantiation: SkColorFilterShader::getFactory() const
SkComposePathEffect::getFactory() const
Line
Count
Source
111
4.00k
        Factory getFactory() const override { return type::CreateProc; } \
SkSumPathEffect::getFactory() const
Line
Count
Source
111
1.81k
        Factory getFactory() const override { return type::CreateProc; } \
Unexecuted instantiation: SkRecordedDrawable::getFactory() const
Unexecuted instantiation: SkRuntimeBlender::getFactory() const
Unexecuted instantiation: SkRuntimeColorFilter::getFactory() const
Unexecuted instantiation: SkLocalMatrixShader::getFactory() const
Unexecuted instantiation: SkCTMShader::getFactory() const
Unexecuted instantiation: SkRuntimeShader::getFactory() const
Unexecuted instantiation: SkColorShader::getFactory() const
Unexecuted instantiation: SkColor4Shader::getFactory() const
Unexecuted instantiation: SkWorkingColorSpaceShader::getFactory() const
Unexecuted instantiation: SkLinearGradient::getFactory() const
Unexecuted instantiation: SkBlendModeColorFilter::getFactory() const
Unexecuted instantiation: SkComposeColorFilter::getFactory() const
Unexecuted instantiation: SkGaussianColorFilter::getFactory() const
Unexecuted instantiation: SkMatrixColorFilter::getFactory() const
Unexecuted instantiation: SkWorkingFormatColorFilter::getFactory() const
SkDashImpl::getFactory() const
Line
Count
Source
111
795
        Factory getFactory() const override { return type::CreateProc; } \
Unexecuted instantiation: SkEmbossMaskFilter::getFactory() const
Unexecuted instantiation: SkTrimPE::getFactory() const
Unexecuted instantiation: SkPictureShader::getFactory() const
Unexecuted instantiation: SkBlendShader::getFactory() const
Unexecuted instantiation: SkCoordClampShader::getFactory() const
Unexecuted instantiation: SkEmptyShader::getFactory() const
Unexecuted instantiation: SkPerlinNoiseShader::getFactory() const
Unexecuted instantiation: SkShaderMaskFilterImpl::getFactory() const
Unexecuted instantiation: SkConicalGradient::getFactory() const
Unexecuted instantiation: SkRadialGradient::getFactory() const
Unexecuted instantiation: SkSweepGradient::getFactory() const
Unexecuted instantiation: SkColorSpaceXformColorFilter::getFactory() const
Unexecuted instantiation: SkTableColorFilter::getFactory() const
Unexecuted instantiation: SkBlendImageFilter.cpp:(anonymous namespace)::SkBlendImageFilter::getFactory() const
Unexecuted instantiation: SkBlurImageFilter.cpp:(anonymous namespace)::SkBlurImageFilter::getFactory() const
Unexecuted instantiation: SkColorFilterImageFilter.cpp:(anonymous namespace)::SkColorFilterImageFilter::getFactory() const
Unexecuted instantiation: SkComposeImageFilter.cpp:(anonymous namespace)::SkComposeImageFilter::getFactory() const
Unexecuted instantiation: SkCropImageFilter.cpp:(anonymous namespace)::SkCropImageFilter::getFactory() const
Unexecuted instantiation: SkDisplacementMapImageFilter.cpp:(anonymous namespace)::SkDisplacementMapImageFilter::getFactory() const
Unexecuted instantiation: SkImageImageFilter.cpp:(anonymous namespace)::SkImageImageFilter::getFactory() const
Unexecuted instantiation: SkLightingImageFilter.cpp:(anonymous namespace)::SkLightingImageFilter::getFactory() const
Unexecuted instantiation: SkMagnifierImageFilter.cpp:(anonymous namespace)::SkMagnifierImageFilter::getFactory() const
Unexecuted instantiation: SkMatrixConvolutionImageFilter.cpp:(anonymous namespace)::SkMatrixConvolutionImageFilter::getFactory() const
Unexecuted instantiation: SkMatrixTransformImageFilter.cpp:(anonymous namespace)::SkMatrixTransformImageFilter::getFactory() const
Unexecuted instantiation: SkMergeImageFilter.cpp:(anonymous namespace)::SkMergeImageFilter::getFactory() const
Unexecuted instantiation: SkMorphologyImageFilter.cpp:(anonymous namespace)::SkMorphologyImageFilter::getFactory() const
Unexecuted instantiation: SkPictureImageFilter.cpp:(anonymous namespace)::SkPictureImageFilter::getFactory() const
Unexecuted instantiation: SkRuntimeImageFilter::getFactory() const
Unexecuted instantiation: SkShaderImageFilter.cpp:(anonymous namespace)::SkShaderImageFilter::getFactory() const
sktext::gpu::SDFMaskFilterImpl::getFactory() const
Line
Count
Source
111
240
        Factory getFactory() const override { return type::CreateProc; } \
112
19.5k
        const char* getTypeName() const override { return #type; }
Unexecuted instantiation: SkImageShader::getTypeName() const
Unexecuted instantiation: SkBlendModeBlender::getTypeName() const
SkBlurMaskFilterImpl::getTypeName() const
Line
Count
Source
112
12.7k
        const char* getTypeName() const override { return #type; }
Unexecuted instantiation: SkLocalMatrixImageFilter::getTypeName() const
Unexecuted instantiation: SkColorFilterShader::getTypeName() const
SkComposePathEffect::getTypeName() const
Line
Count
Source
112
4.00k
        const char* getTypeName() const override { return #type; }
SkSumPathEffect::getTypeName() const
Line
Count
Source
112
1.81k
        const char* getTypeName() const override { return #type; }
Unexecuted instantiation: SkRecordedDrawable::getTypeName() const
Unexecuted instantiation: SkRuntimeBlender::getTypeName() const
Unexecuted instantiation: SkRuntimeColorFilter::getTypeName() const
Unexecuted instantiation: SkLocalMatrixShader::getTypeName() const
Unexecuted instantiation: SkCTMShader::getTypeName() const
Unexecuted instantiation: SkRuntimeShader::getTypeName() const
Unexecuted instantiation: SkColorShader::getTypeName() const
Unexecuted instantiation: SkColor4Shader::getTypeName() const
Unexecuted instantiation: SkWorkingColorSpaceShader::getTypeName() const
Unexecuted instantiation: SkLinearGradient::getTypeName() const
Unexecuted instantiation: SkBlendModeColorFilter::getTypeName() const
Unexecuted instantiation: SkComposeColorFilter::getTypeName() const
Unexecuted instantiation: SkGaussianColorFilter::getTypeName() const
Unexecuted instantiation: SkMatrixColorFilter::getTypeName() const
Unexecuted instantiation: SkWorkingFormatColorFilter::getTypeName() const
SkDashImpl::getTypeName() const
Line
Count
Source
112
795
        const char* getTypeName() const override { return #type; }
Unexecuted instantiation: SkEmbossMaskFilter::getTypeName() const
Unexecuted instantiation: SkTrimPE::getTypeName() const
Unexecuted instantiation: SkPictureShader::getTypeName() const
Unexecuted instantiation: SkBlendShader::getTypeName() const
Unexecuted instantiation: SkCoordClampShader::getTypeName() const
Unexecuted instantiation: SkEmptyShader::getTypeName() const
Unexecuted instantiation: SkPerlinNoiseShader::getTypeName() const
Unexecuted instantiation: SkShaderMaskFilterImpl::getTypeName() const
Unexecuted instantiation: SkConicalGradient::getTypeName() const
Unexecuted instantiation: SkRadialGradient::getTypeName() const
Unexecuted instantiation: SkSweepGradient::getTypeName() const
Unexecuted instantiation: SkColorSpaceXformColorFilter::getTypeName() const
Unexecuted instantiation: SkTableColorFilter::getTypeName() const
Unexecuted instantiation: SkBlendImageFilter.cpp:(anonymous namespace)::SkBlendImageFilter::getTypeName() const
Unexecuted instantiation: SkBlurImageFilter.cpp:(anonymous namespace)::SkBlurImageFilter::getTypeName() const
Unexecuted instantiation: SkColorFilterImageFilter.cpp:(anonymous namespace)::SkColorFilterImageFilter::getTypeName() const
Unexecuted instantiation: SkComposeImageFilter.cpp:(anonymous namespace)::SkComposeImageFilter::getTypeName() const
Unexecuted instantiation: SkCropImageFilter.cpp:(anonymous namespace)::SkCropImageFilter::getTypeName() const
Unexecuted instantiation: SkDisplacementMapImageFilter.cpp:(anonymous namespace)::SkDisplacementMapImageFilter::getTypeName() const
Unexecuted instantiation: SkImageImageFilter.cpp:(anonymous namespace)::SkImageImageFilter::getTypeName() const
Unexecuted instantiation: SkLightingImageFilter.cpp:(anonymous namespace)::SkLightingImageFilter::getTypeName() const
Unexecuted instantiation: SkMagnifierImageFilter.cpp:(anonymous namespace)::SkMagnifierImageFilter::getTypeName() const
Unexecuted instantiation: SkMatrixConvolutionImageFilter.cpp:(anonymous namespace)::SkMatrixConvolutionImageFilter::getTypeName() const
Unexecuted instantiation: SkMatrixTransformImageFilter.cpp:(anonymous namespace)::SkMatrixTransformImageFilter::getTypeName() const
Unexecuted instantiation: SkMergeImageFilter.cpp:(anonymous namespace)::SkMergeImageFilter::getTypeName() const
Unexecuted instantiation: SkMorphologyImageFilter.cpp:(anonymous namespace)::SkMorphologyImageFilter::getTypeName() const
Unexecuted instantiation: SkPictureImageFilter.cpp:(anonymous namespace)::SkPictureImageFilter::getTypeName() const
Unexecuted instantiation: SkRuntimeImageFilter::getTypeName() const
Unexecuted instantiation: SkShaderImageFilter.cpp:(anonymous namespace)::SkShaderImageFilter::getTypeName() const
sktext::gpu::SDFMaskFilterImpl::getTypeName() const
Line
Count
Source
112
240
        const char* getTypeName() const override { return #type; }
113
#endif
114
115
#endif