xref: /aosp_15_r20/external/skia/tools/text/SkTextBlobTrace.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 // Copyright 2019 Google LLC.
2 // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3 #ifndef SkTextBlobTrace_DEFINED
4 #define SkTextBlobTrace_DEFINED
5 
6 #include "include/core/SkPaint.h"
7 #include "include/core/SkPoint.h"
8 #include "include/core/SkRefCnt.h"
9 #include "include/core/SkTextBlob.h"
10 #include "include/core/SkTypes.h"
11 #include "src/core/SkWriteBuffer.h"
12 
13 #include <cstddef>
14 #include <cstdint>
15 #include <vector>
16 
17 class SkFontMgr;
18 class SkRefCntSet;
19 class SkStream;
20 class SkWStream;
21 namespace sktext {
22 class GlyphRunList;
23 }
24 
25 namespace SkTextBlobTrace {
26 
27 struct Record {
28     uint32_t origUniqueID;
29     SkPaint paint;
30     SkPoint offset;
31     sk_sp<SkTextBlob> blob;
32 };
33 
34 std::vector<SkTextBlobTrace::Record> CreateBlobTrace(SkStream* stream,
35                                                      sk_sp<SkFontMgr> lastResortMgr);
36 
37 void DumpTrace(const std::vector<SkTextBlobTrace::Record>&);
38 
39 class Capture {
40 public:
41     Capture();
42     ~Capture();
43     void capture(const sktext::GlyphRunList&, const SkPaint&);
44     // If `dst` is nullptr, write to a file.
45     void dump(SkWStream* dst = nullptr) const;
46 
47 private:
48     size_t fBlobCount = 0;
49     sk_sp<SkRefCntSet> fTypefaceSet;
50     SkBinaryWriteBuffer fWriteBuffer;
51 
52     Capture(const Capture&) = delete;
53     Capture& operator=(const Capture&) = delete;
54 };
55 
56 }  // namespace SkTextBlobTrace
57 #endif  // SkTextBlobTrace_DEFINED
58