xref: /third_party/skia/src/core/SkTextBlobTrace.h (revision cb93a386)
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/SkTypes.h"
7
8#include "include/core/SkPaint.h"
9#include "include/core/SkPoint.h"
10#include "include/core/SkStream.h"
11#include "include/core/SkTextBlob.h"
12#include "src/core/SkGlyphRun.h"
13#include "src/core/SkWriteBuffer.h"
14
15#include <cstdint>
16#include <vector>
17
18namespace SkTextBlobTrace {
19
20struct Record {
21    uint32_t origUniqueID;
22    SkPaint paint;
23    SkPoint offset;
24    sk_sp<SkTextBlob> blob;
25};
26
27std::vector<SkTextBlobTrace::Record> CreateBlobTrace(SkStream* stream);
28
29void DumpTrace(const std::vector<SkTextBlobTrace::Record>&);
30
31class Capture {
32public:
33    Capture();
34    ~Capture();
35    void capture(const SkGlyphRunList&, const SkPaint&);
36    // If `dst` is nullptr, write to a file.
37    void dump(SkWStream* dst = nullptr) const;
38
39private:
40    size_t fBlobCount = 0;
41    sk_sp<SkRefCntSet> fTypefaceSet;
42    SkBinaryWriteBuffer fWriteBuffer;
43
44    Capture(const Capture&) = delete;
45    Capture& operator=(const Capture&) = delete;
46};
47
48}  // namespace SkTextBlobTrace
49#endif  // SkTextBlobTrace_DEFINED
50