Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
DM::SKPSrc Class Reference

#include <DMSrcSink.h>

Inheritance diagram for DM::SKPSrc:
DM::Src DM::BisectSrc

Public Member Functions

 SKPSrc (Path path)
 
Result draw (SkCanvas *, GraphiteTestContext *) const override
 
SkISize size () const override
 
Name name () const override
 
- Public Member Functions inherited from DM::Src
virtual ~Src ()
 
virtual void modifyGrContextOptions (GrContextOptions *) const
 
virtual void modifyGraphiteContextOptions (skgpu::graphite::ContextOptions *) const
 
virtual bool veto (SinkFlags) const
 
virtual int pageCount () const
 
virtual Result draw (int page, SkCanvas *canvas, GraphiteTestContext *graphiteTestContext) const
 
virtual SkISize size (int page) const
 
virtual bool serial () const
 

Additional Inherited Members

- Public Types inherited from DM::Src
using GraphiteTestContext = skiatest::graphite::GraphiteTestContext
 

Detailed Description

Definition at line 266 of file DMSrcSink.h.

Constructor & Destructor Documentation

◆ SKPSrc()

DM::SKPSrc::SKPSrc ( Path  path)
explicit

Definition at line 1135 of file DMSrcSink.cpp.

1135: fPath(path) { }

Member Function Documentation

◆ draw()

Result DM::SKPSrc::draw ( SkCanvas canvas,
GraphiteTestContext  
) const
overridevirtual

Implements DM::Src.

Definition at line 1137 of file DMSrcSink.cpp.

1137 {
1138 struct DeserializationContext {
1139 GrDirectContext* fDirectContext = nullptr;
1140#if defined(SK_GRAPHITE)
1141 skgpu::graphite::Recorder* fRecorder = nullptr;
1142#endif
1143 } ctx {
1145#if defined(SK_GRAPHITE)
1146 canvas->recorder()
1147#endif
1148 };
1149
1150 SkDeserialProcs procs;
1151 procs.fImageProc = [](const void* data, size_t size, void* ctx) -> sk_sp<SkImage> {
1154 image = image->makeRasterImage(); // force decoding
1155
1156 if (image) {
1157 DeserializationContext* context = reinterpret_cast<DeserializationContext*>(ctx);
1158
1159 if (context->fDirectContext) {
1160 return SkImages::TextureFromImage(context->fDirectContext, image);
1161 }
1162 }
1163 return image;
1164 };
1165 procs.fImageCtx = &ctx;
1166
1167 // SKPs may have typefaces encoded in them (e.g. with FreeType). We can try falling back
1168 // to the Test FontMgr (possibly a native one) if we have do not have FreeType built-in.
1169 procs.fTypefaceProc = [](const void* data, size_t size, void*) -> sk_sp<SkTypeface> {
1170 SkStream** stream = reinterpret_cast<SkStream**>(const_cast<void*>(data));
1172 };
1173
1174
1175 std::unique_ptr<SkStream> stream = SkStream::MakeFromFile(fPath.c_str());
1176 if (!stream) {
1177 return Result::Fatal("Couldn't read %s.", fPath.c_str());
1178 }
1180 if (!pic) {
1181 return Result::Fatal("Couldn't parse file %s.", fPath.c_str());
1182 }
1183 stream = nullptr; // Might as well drop this when we're done with it.
1184 canvas->clipRect(SkRect::MakeWH(FLAGS_skpViewportSize, FLAGS_skpViewportSize));
1185 canvas->drawPicture(pic);
1186 return Result::Ok();
1187}
static GrDirectContext * GrAsDirectContext(GrContext_Base *base)
static Result Ok()
Definition DMSrcSink.h:50
SkISize size() const override
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
virtual GrRecordingContext * recordingContext() const
virtual skgpu::graphite::Recorder * recorder() const
void drawPicture(const SkPicture *picture)
Definition SkCanvas.h:1961
static sk_sp< SkData > MakeWithoutCopy(const void *data, size_t length)
Definition SkData.h:116
sk_sp< SkImage > makeRasterImage(GrDirectContext *, CachingHint cachingHint=kDisallow_CachingHint) const
Definition SkImage.cpp:267
static sk_sp< SkPicture > MakeFromStream(SkStream *stream, const SkDeserialProcs *procs=nullptr)
static std::unique_ptr< SkStreamAsset > MakeFromFile(const char path[])
Definition SkStream.cpp:922
const char * c_str() const
Definition SkString.h:133
static sk_sp< SkTypeface > MakeDeserialize(SkStream *, sk_sp< SkFontMgr > lastResortMgr)
sk_sp< SkImage > image
Definition examples.cpp:29
SK_API sk_sp< SkImage > DeferredFromEncodedData(sk_sp< SkData > encoded, std::optional< SkAlphaType > alphaType=std::nullopt)
SK_API sk_sp< SkImage > TextureFromImage(GrDirectContext *, const SkImage *, skgpu::Mipmapped=skgpu::Mipmapped::kNo, skgpu::Budgeted=skgpu::Budgeted::kYes)
sk_sp< SkFontMgr > TestFontMgr()
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switches.h:41
SkDeserialTypefaceProc fTypefaceProc
SkDeserialImageProc fImageProc
static constexpr SkRect MakeWH(float w, float h)
Definition SkRect.h:609

◆ name()

Name DM::SKPSrc::name ( ) const
overridevirtual

Implements DM::Src.

Definition at line 1210 of file DMSrcSink.cpp.

1210{ return SkOSPath::Basename(fPath.c_str()); }
static SkString Basename(const char *fullPath)
Definition SkOSPath.cpp:23

◆ size()

SkISize DM::SKPSrc::size ( ) const
overridevirtual

Implements DM::Src.

Definition at line 1202 of file DMSrcSink.cpp.

1202 {
1203 SkRect viewport = get_cull_rect_for_skp(fPath.c_str());
1204 if (!viewport.intersect((SkRect::MakeWH(FLAGS_skpViewportSize, FLAGS_skpViewportSize)))) {
1205 return {0, 0};
1206 }
1207 return viewport.roundOut().size();
1208}
static SkRect get_cull_rect_for_skp(const char *path)
bool intersect(const SkRect &r)
Definition SkRect.cpp:114
void roundOut(SkIRect *dst) const
Definition SkRect.h:1241

The documentation for this class was generated from the following files: