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