Flutter Engine
The Flutter Engine
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 Result draw (SkCanvas *canvas, GraphiteTestContext *) const =0
 
virtual SkISize size () const =0
 
virtual Name name () const =0
 
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) { }
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition: switches.h:57

Member Function Documentation

◆ draw()

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

Implements DM::Src.

Reimplemented in DM::BisectSrc.

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
static Result Fatal(const char *fmt,...) SK_PRINTF_LIKE(1
SkISize size() const override
Definition: DMSrcSink.cpp:1202
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
Definition: SkCanvas.cpp:1361
virtual GrRecordingContext * recordingContext() const
Definition: SkCanvas.cpp:1637
virtual skgpu::graphite::Recorder * recorder() const
Definition: SkCanvas.cpp:1641
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)
Definition: SkPicture.cpp:147
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)
Definition: SkTypeface.cpp:241
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< const SkImage > image
Definition: SkRecords.h:269
sk_sp< SkFontMgr > TestFontMgr()
SkDeserialTypefaceProc fTypefaceProc
SkDeserialImageProc fImageProc
static constexpr SkRect MakeWH(float w, float h)
Definition: SkRect.h:609
std::shared_ptr< const fml::Mapping > data
Definition: texture_gles.cc:63

◆ 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)
Definition: DMSrcSink.cpp:1189
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: