Coverage Report

Created: 2024-05-20 07:14

/src/skia/modules/skparagraph/include/ParagraphCache.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright 2019 Google LLC.
2
#ifndef ParagraphCache_DEFINED
3
#define ParagraphCache_DEFINED
4
5
#include "include/private/base/SkMutex.h"
6
#include "src/core/SkLRUCache.h"
7
#include <functional>  // std::function
8
9
#define PARAGRAPH_CACHE_STATS
10
11
namespace skia {
12
namespace textlayout {
13
14
class ParagraphImpl;
15
class ParagraphCacheKey;
16
class ParagraphCacheValue;
17
18
class ParagraphCache {
19
public:
20
    ParagraphCache();
21
    ~ParagraphCache();
22
23
    void abandon();
24
    void reset();
25
    bool updateParagraph(ParagraphImpl* paragraph);
26
    bool findParagraph(ParagraphImpl* paragraph);
27
28
    // For testing
29
0
    void setChecker(std::function<void(ParagraphImpl* impl, const char*, bool)> checker) {
30
0
        fChecker = std::move(checker);
31
0
    }
32
    void printStatistics();
33
0
    void turnOn(bool value) { fCacheIsOn = value; }
34
0
    int count() { return fLRUCacheMap.count(); }
35
36
    bool isPossiblyTextEditing(ParagraphImpl* paragraph);
37
38
 private:
39
40
    struct Entry;
41
    void updateFrom(const ParagraphImpl* paragraph, Entry* entry);
42
    void updateTo(ParagraphImpl* paragraph, const Entry* entry);
43
44
     mutable SkMutex fParagraphMutex;
45
     std::function<void(ParagraphImpl* impl, const char*, bool)> fChecker;
46
47
    static const int kMaxEntries = 128;
48
49
    struct KeyHash {
50
        uint32_t operator()(const ParagraphCacheKey& key) const;
51
    };
52
53
    SkLRUCache<ParagraphCacheKey, std::unique_ptr<Entry>, KeyHash> fLRUCacheMap;
54
    bool fCacheIsOn;
55
    ParagraphCacheValue* fLastCachedValue;
56
57
#ifdef PARAGRAPH_CACHE_STATS
58
    int fTotalRequests;
59
    int fCacheMisses;
60
    int fHashMisses; // cache hit but hash table missed
61
#endif
62
};
63
64
}  // namespace textlayout
65
}  // namespace skia
66
67
#endif  // ParagraphCache_DEFINED