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&);
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
49#endif // SkTextBlobTrace_DEFINED
50