1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282 |
- /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef MOZILLA_GFX_RECORDEDEVENT_H_
- #define MOZILLA_GFX_RECORDEDEVENT_H_
- #include "2D.h"
- #include <ostream>
- #include <sstream>
- #include <cstring>
- #include <vector>
- namespace mozilla {
- namespace gfx {
- struct PathOp;
- class PathRecording;
- const uint32_t kMagicInt = 0xc001feed;
- // A change in major revision means a change in event binary format, causing
- // loss of backwards compatibility. Old streams will not work in a player
- // using a newer major revision. And new streams will not work in a player
- // using an older major revision.
- const uint16_t kMajorRevision = 6;
- // A change in minor revision means additions of new events. New streams will
- // not play in older players.
- const uint16_t kMinorRevision = 0;
- struct ReferencePtr
- {
- ReferencePtr()
- : mLongPtr(0)
- {}
- MOZ_IMPLICIT ReferencePtr(const void* aLongPtr)
- : mLongPtr(uint64_t(aLongPtr))
- {}
- template <typename T>
- MOZ_IMPLICIT ReferencePtr(const RefPtr<T>& aPtr)
- : mLongPtr(uint64_t(aPtr.get()))
- {}
- ReferencePtr &operator =(const void* aLongPtr) {
- mLongPtr = uint64_t(aLongPtr);
- return *this;
- }
- template <typename T>
- ReferencePtr &operator =(const RefPtr<T>& aPtr) {
- mLongPtr = uint64_t(aPtr.get());
- return *this;
- }
- operator void*() const {
- return (void*)mLongPtr;
- }
- uint64_t mLongPtr;
- };
- struct RecordedFontDetails
- {
- uint64_t fontDataKey;
- uint32_t size;
- uint32_t index;
- Float glyphSize;
- };
- // Used by the Azure drawing debugger (player2d)
- inline std::string StringFromPtr(ReferencePtr aPtr)
- {
- std::stringstream stream;
- stream << aPtr;
- return stream.str();
- }
- class Translator
- {
- public:
- virtual ~Translator() {}
- virtual DrawTarget *LookupDrawTarget(ReferencePtr aRefPtr) = 0;
- virtual Path *LookupPath(ReferencePtr aRefPtr) = 0;
- virtual SourceSurface *LookupSourceSurface(ReferencePtr aRefPtr) = 0;
- virtual FilterNode *LookupFilterNode(ReferencePtr aRefPtr) = 0;
- virtual GradientStops *LookupGradientStops(ReferencePtr aRefPtr) = 0;
- virtual ScaledFont *LookupScaledFont(ReferencePtr aRefPtr) = 0;
- virtual NativeFontResource *LookupNativeFontResource(uint64_t aKey) = 0;
- virtual void AddDrawTarget(ReferencePtr aRefPtr, DrawTarget *aDT) = 0;
- virtual void RemoveDrawTarget(ReferencePtr aRefPtr) = 0;
- virtual void AddPath(ReferencePtr aRefPtr, Path *aPath) = 0;
- virtual void RemovePath(ReferencePtr aRefPtr) = 0;
- virtual void AddSourceSurface(ReferencePtr aRefPtr, SourceSurface *aPath) = 0;
- virtual void RemoveSourceSurface(ReferencePtr aRefPtr) = 0;
- virtual void AddFilterNode(mozilla::gfx::ReferencePtr aRefPtr, FilterNode *aSurface) = 0;
- virtual void RemoveFilterNode(mozilla::gfx::ReferencePtr aRefPtr) = 0;
- virtual void AddGradientStops(ReferencePtr aRefPtr, GradientStops *aPath) = 0;
- virtual void RemoveGradientStops(ReferencePtr aRefPtr) = 0;
- virtual void AddScaledFont(ReferencePtr aRefPtr, ScaledFont *aScaledFont) = 0;
- virtual void RemoveScaledFont(ReferencePtr aRefPtr) = 0;
- virtual void AddNativeFontResource(uint64_t aKey,
- NativeFontResource *aNativeFontResource) = 0;
- virtual already_AddRefed<DrawTarget> CreateDrawTarget(ReferencePtr aRefPtr,
- const IntSize &aSize,
- SurfaceFormat aFormat);
- virtual DrawTarget *GetReferenceDrawTarget() = 0;
- virtual FontType GetDesiredFontType() = 0;
- };
- struct ColorPatternStorage
- {
- Color mColor;
- };
- struct LinearGradientPatternStorage
- {
- Point mBegin;
- Point mEnd;
- ReferencePtr mStops;
- Matrix mMatrix;
- };
- struct RadialGradientPatternStorage
- {
- Point mCenter1;
- Point mCenter2;
- Float mRadius1;
- Float mRadius2;
- ReferencePtr mStops;
- Matrix mMatrix;
- };
- struct SurfacePatternStorage
- {
- ExtendMode mExtend;
- SamplingFilter mSamplingFilter;
- ReferencePtr mSurface;
- Matrix mMatrix;
- IntRect mSamplingRect;
- };
- struct PatternStorage
- {
- PatternType mType;
- union {
- char *mStorage;
- char mColor[sizeof(ColorPatternStorage)];
- char mLinear[sizeof(LinearGradientPatternStorage)];
- char mRadial[sizeof(RadialGradientPatternStorage)];
- char mSurface[sizeof(SurfacePatternStorage)];
- };
- };
- class RecordedEvent {
- public:
- enum EventType {
- DRAWTARGETCREATION = 0,
- DRAWTARGETDESTRUCTION,
- FILLRECT,
- STROKERECT,
- STROKELINE,
- CLEARRECT,
- COPYSURFACE,
- SETTRANSFORM,
- PUSHCLIP,
- PUSHCLIPRECT,
- POPCLIP,
- FILL,
- FILLGLYPHS,
- MASK,
- STROKE,
- DRAWSURFACE,
- DRAWSURFACEWITHSHADOW,
- PATHCREATION,
- PATHDESTRUCTION,
- SOURCESURFACECREATION,
- SOURCESURFACEDESTRUCTION,
- GRADIENTSTOPSCREATION,
- GRADIENTSTOPSDESTRUCTION,
- SNAPSHOT,
- SCALEDFONTCREATION,
- SCALEDFONTDESTRUCTION,
- MASKSURFACE,
- FILTERNODECREATION,
- FILTERNODEDESTRUCTION,
- DRAWFILTER,
- FILTERNODESETATTRIBUTE,
- FILTERNODESETINPUT,
- CREATESIMILARDRAWTARGET,
- FONTDATA,
- FONTDESC,
- PUSHLAYER,
- POPLAYER,
- };
- static const uint32_t kTotalEventTypes = RecordedEvent::FILTERNODESETINPUT + 1;
- virtual ~RecordedEvent() {}
- static std::string GetEventName(EventType aType);
- /**
- * Play back this event using the translator. Note that derived classes should
- * only return false when there is a fatal error, as it will probably mean the
- * translation will abort.
- * @param aTranslator Translator to be used for retrieving other referenced
- * objects and making playback decisions.
- * @return true unless a fatal problem has occurred and playback should abort.
- */
- virtual bool PlayEvent(Translator *aTranslator) const { return true; }
- virtual void RecordToStream(std::ostream &aStream) const {}
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const { }
- void RecordPatternData(std::ostream &aStream, const PatternStorage &aPatternStorage) const;
- void ReadPatternData(std::istream &aStream, PatternStorage &aPatternStorage) const;
- void StorePattern(PatternStorage &aDestination, const Pattern &aSource) const;
- void RecordStrokeOptions(std::ostream &aStream, const StrokeOptions &aStrokeOptions) const;
- void ReadStrokeOptions(std::istream &aStream, StrokeOptions &aStrokeOptions);
- virtual std::string GetName() const = 0;
- virtual ReferencePtr GetObjectRef() const = 0;
- virtual ReferencePtr GetDestinedDT() { return nullptr; }
- void OutputSimplePatternInfo(const PatternStorage &aStorage, std::stringstream &aOutput) const;
- static RecordedEvent *LoadEventFromStream(std::istream &aStream, EventType aType);
- EventType GetType() { return (EventType)mType; }
- protected:
- friend class DrawEventRecorderPrivate;
- MOZ_IMPLICIT RecordedEvent(int32_t aType) : mType(aType)
- {}
- int32_t mType;
- std::vector<Float> mDashPatternStorage;
- };
- class RecordedDrawingEvent : public RecordedEvent
- {
- public:
- virtual ReferencePtr GetDestinedDT() { return mDT; }
- protected:
- RecordedDrawingEvent(EventType aType, DrawTarget *aTarget)
- : RecordedEvent(aType), mDT(aTarget)
- {
- }
- RecordedDrawingEvent(EventType aType, std::istream &aStream);
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual ReferencePtr GetObjectRef() const;
- ReferencePtr mDT;
- };
- class RecordedDrawTargetCreation : public RecordedEvent {
- public:
- RecordedDrawTargetCreation(ReferencePtr aRefPtr, BackendType aType, const IntSize &aSize, SurfaceFormat aFormat,
- bool aHasExistingData = false, SourceSurface *aExistingData = nullptr)
- : RecordedEvent(DRAWTARGETCREATION), mRefPtr(aRefPtr), mBackendType(aType), mSize(aSize), mFormat(aFormat)
- , mHasExistingData(aHasExistingData), mExistingData(aExistingData)
- {}
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "DrawTarget Creation"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- ReferencePtr mRefPtr;
- BackendType mBackendType;
- IntSize mSize;
- SurfaceFormat mFormat;
- bool mHasExistingData;
- RefPtr<SourceSurface> mExistingData;
-
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedDrawTargetCreation(std::istream &aStream);
- };
- class RecordedDrawTargetDestruction : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedDrawTargetDestruction(ReferencePtr aRefPtr)
- : RecordedEvent(DRAWTARGETDESTRUCTION), mRefPtr(aRefPtr)
- {}
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "DrawTarget Destruction"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- ReferencePtr mRefPtr;
- BackendType mBackendType;
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedDrawTargetDestruction(std::istream &aStream);
- };
- class RecordedCreateSimilarDrawTarget : public RecordedEvent
- {
- public:
- RecordedCreateSimilarDrawTarget(ReferencePtr aRefPtr, const IntSize &aSize,
- SurfaceFormat aFormat)
- : RecordedEvent(CREATESIMILARDRAWTARGET)
- , mRefPtr(aRefPtr) , mSize(aSize), mFormat(aFormat)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "CreateSimilarDrawTarget"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- ReferencePtr mRefPtr;
- IntSize mSize;
- SurfaceFormat mFormat;
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedCreateSimilarDrawTarget(std::istream &aStream);
- };
- class RecordedFillRect : public RecordedDrawingEvent {
- public:
- RecordedFillRect(DrawTarget *aDT, const Rect &aRect, const Pattern &aPattern, const DrawOptions &aOptions)
- : RecordedDrawingEvent(FILLRECT, aDT), mRect(aRect), mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "FillRect"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedFillRect(std::istream &aStream);
- Rect mRect;
- PatternStorage mPattern;
- DrawOptions mOptions;
- };
- class RecordedStrokeRect : public RecordedDrawingEvent {
- public:
- RecordedStrokeRect(DrawTarget *aDT, const Rect &aRect, const Pattern &aPattern,
- const StrokeOptions &aStrokeOptions, const DrawOptions &aOptions)
- : RecordedDrawingEvent(STROKERECT, aDT), mRect(aRect),
- mStrokeOptions(aStrokeOptions), mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "StrokeRect"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedStrokeRect(std::istream &aStream);
- Rect mRect;
- PatternStorage mPattern;
- StrokeOptions mStrokeOptions;
- DrawOptions mOptions;
- };
- class RecordedStrokeLine : public RecordedDrawingEvent {
- public:
- RecordedStrokeLine(DrawTarget *aDT, const Point &aBegin, const Point &aEnd,
- const Pattern &aPattern, const StrokeOptions &aStrokeOptions,
- const DrawOptions &aOptions)
- : RecordedDrawingEvent(STROKELINE, aDT), mBegin(aBegin), mEnd(aEnd),
- mStrokeOptions(aStrokeOptions), mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "StrokeLine"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedStrokeLine(std::istream &aStream);
- Point mBegin;
- Point mEnd;
- PatternStorage mPattern;
- StrokeOptions mStrokeOptions;
- DrawOptions mOptions;
- };
- class RecordedFill : public RecordedDrawingEvent {
- public:
- RecordedFill(DrawTarget *aDT, ReferencePtr aPath, const Pattern &aPattern, const DrawOptions &aOptions)
- : RecordedDrawingEvent(FILL, aDT), mPath(aPath), mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "Fill"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedFill(std::istream &aStream);
- ReferencePtr mPath;
- PatternStorage mPattern;
- DrawOptions mOptions;
- };
- class RecordedFillGlyphs : public RecordedDrawingEvent {
- public:
- RecordedFillGlyphs(DrawTarget *aDT, ReferencePtr aScaledFont, const Pattern &aPattern, const DrawOptions &aOptions,
- const Glyph *aGlyphs, uint32_t aNumGlyphs)
- : RecordedDrawingEvent(FILLGLYPHS, aDT), mScaledFont(aScaledFont), mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- mNumGlyphs = aNumGlyphs;
- mGlyphs = new Glyph[aNumGlyphs];
- memcpy(mGlyphs, aGlyphs, sizeof(Glyph) * aNumGlyphs);
- }
- virtual ~RecordedFillGlyphs();
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "FillGlyphs"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedFillGlyphs(std::istream &aStream);
- ReferencePtr mScaledFont;
- PatternStorage mPattern;
- DrawOptions mOptions;
- Glyph *mGlyphs;
- uint32_t mNumGlyphs;
- };
- class RecordedMask : public RecordedDrawingEvent {
- public:
- RecordedMask(DrawTarget *aDT, const Pattern &aSource, const Pattern &aMask, const DrawOptions &aOptions)
- : RecordedDrawingEvent(MASK, aDT), mOptions(aOptions)
- {
- StorePattern(mSource, aSource);
- StorePattern(mMask, aMask);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "Mask"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedMask(std::istream &aStream);
- PatternStorage mSource;
- PatternStorage mMask;
- DrawOptions mOptions;
- };
- class RecordedStroke : public RecordedDrawingEvent {
- public:
- RecordedStroke(DrawTarget *aDT, ReferencePtr aPath, const Pattern &aPattern,
- const StrokeOptions &aStrokeOptions, const DrawOptions &aOptions)
- : RecordedDrawingEvent(STROKE, aDT), mPath(aPath),
- mStrokeOptions(aStrokeOptions), mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "Stroke"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedStroke(std::istream &aStream);
- ReferencePtr mPath;
- PatternStorage mPattern;
- StrokeOptions mStrokeOptions;
- DrawOptions mOptions;
- };
- class RecordedClearRect : public RecordedDrawingEvent {
- public:
- RecordedClearRect(DrawTarget *aDT, const Rect &aRect)
- : RecordedDrawingEvent(CLEARRECT, aDT), mRect(aRect)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "ClearRect"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedClearRect(std::istream &aStream);
- Rect mRect;
- };
- class RecordedCopySurface : public RecordedDrawingEvent {
- public:
- RecordedCopySurface(DrawTarget *aDT, ReferencePtr aSourceSurface,
- const IntRect &aSourceRect, const IntPoint &aDest)
- : RecordedDrawingEvent(COPYSURFACE, aDT), mSourceSurface(aSourceSurface),
- mSourceRect(aSourceRect), mDest(aDest)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "CopySurface"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedCopySurface(std::istream &aStream);
- ReferencePtr mSourceSurface;
- IntRect mSourceRect;
- IntPoint mDest;
- };
- class RecordedPushClip : public RecordedDrawingEvent {
- public:
- RecordedPushClip(DrawTarget *aDT, ReferencePtr aPath)
- : RecordedDrawingEvent(PUSHCLIP, aDT), mPath(aPath)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "PushClip"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedPushClip(std::istream &aStream);
- ReferencePtr mPath;
- };
- class RecordedPushClipRect : public RecordedDrawingEvent {
- public:
- RecordedPushClipRect(DrawTarget *aDT, const Rect &aRect)
- : RecordedDrawingEvent(PUSHCLIPRECT, aDT), mRect(aRect)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "PushClipRect"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedPushClipRect(std::istream &aStream);
- Rect mRect;
- };
- class RecordedPopClip : public RecordedDrawingEvent {
- public:
- MOZ_IMPLICIT RecordedPopClip(DrawTarget *aDT)
- : RecordedDrawingEvent(POPCLIP, aDT)
- {}
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "PopClip"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedPopClip(std::istream &aStream);
- };
- class RecordedPushLayer : public RecordedDrawingEvent {
- public:
- RecordedPushLayer(DrawTarget* aDT, bool aOpaque, Float aOpacity,
- SourceSurface* aMask, const Matrix& aMaskTransform,
- const IntRect& aBounds, bool aCopyBackground)
- : RecordedDrawingEvent(PUSHLAYER, aDT), mOpaque(aOpaque)
- , mOpacity(aOpacity), mMask(aMask), mMaskTransform(aMaskTransform)
- , mBounds(aBounds), mCopyBackground(aCopyBackground)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "PushLayer"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedPushLayer(std::istream &aStream);
- bool mOpaque;
- Float mOpacity;
- ReferencePtr mMask;
- Matrix mMaskTransform;
- IntRect mBounds;
- bool mCopyBackground;
- };
- class RecordedPopLayer : public RecordedDrawingEvent {
- public:
- MOZ_IMPLICIT RecordedPopLayer(DrawTarget* aDT)
- : RecordedDrawingEvent(POPLAYER, aDT)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "PopLayer"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedPopLayer(std::istream &aStream);
- };
- class RecordedSetTransform : public RecordedDrawingEvent {
- public:
- RecordedSetTransform(DrawTarget *aDT, const Matrix &aTransform)
- : RecordedDrawingEvent(SETTRANSFORM, aDT), mTransform(aTransform)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "SetTransform"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedSetTransform(std::istream &aStream);
- Matrix mTransform;
- };
- class RecordedDrawSurface : public RecordedDrawingEvent {
- public:
- RecordedDrawSurface(DrawTarget *aDT, ReferencePtr aRefSource, const Rect &aDest,
- const Rect &aSource, const DrawSurfaceOptions &aDSOptions,
- const DrawOptions &aOptions)
- : RecordedDrawingEvent(DRAWSURFACE, aDT), mRefSource(aRefSource), mDest(aDest)
- , mSource(aSource), mDSOptions(aDSOptions), mOptions(aOptions)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "DrawSurface"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedDrawSurface(std::istream &aStream);
- ReferencePtr mRefSource;
- Rect mDest;
- Rect mSource;
- DrawSurfaceOptions mDSOptions;
- DrawOptions mOptions;
- };
- class RecordedDrawSurfaceWithShadow : public RecordedDrawingEvent {
- public:
- RecordedDrawSurfaceWithShadow(DrawTarget *aDT, ReferencePtr aRefSource, const Point &aDest,
- const Color &aColor, const Point &aOffset,
- Float aSigma, CompositionOp aOp)
- : RecordedDrawingEvent(DRAWSURFACEWITHSHADOW, aDT), mRefSource(aRefSource), mDest(aDest)
- , mColor(aColor), mOffset(aOffset), mSigma(aSigma), mOp(aOp)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "DrawSurfaceWithShadow"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedDrawSurfaceWithShadow(std::istream &aStream);
- ReferencePtr mRefSource;
- Point mDest;
- Color mColor;
- Point mOffset;
- Float mSigma;
- CompositionOp mOp;
- };
- class RecordedDrawFilter : public RecordedDrawingEvent {
- public:
- RecordedDrawFilter(DrawTarget *aDT, ReferencePtr aNode,
- const Rect &aSourceRect,
- const Point &aDestPoint,
- const DrawOptions &aOptions)
- : RecordedDrawingEvent(DRAWFILTER, aDT), mNode(aNode), mSourceRect(aSourceRect)
- , mDestPoint(aDestPoint), mOptions(aOptions)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "DrawFilter"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedDrawFilter(std::istream &aStream);
- ReferencePtr mNode;
- Rect mSourceRect;
- Point mDestPoint;
- DrawOptions mOptions;
- };
- class RecordedPathCreation : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedPathCreation(PathRecording *aPath);
- ~RecordedPathCreation();
-
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "Path Creation"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- FillRule mFillRule;
- std::vector<PathOp> mPathOps;
- MOZ_IMPLICIT RecordedPathCreation(std::istream &aStream);
- };
- class RecordedPathDestruction : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedPathDestruction(PathRecording *aPath)
- : RecordedEvent(PATHDESTRUCTION), mRefPtr(aPath)
- {
- }
-
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "Path Destruction"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- MOZ_IMPLICIT RecordedPathDestruction(std::istream &aStream);
- };
- class RecordedSourceSurfaceCreation : public RecordedEvent {
- public:
- RecordedSourceSurfaceCreation(ReferencePtr aRefPtr, uint8_t *aData, int32_t aStride,
- const IntSize &aSize, SurfaceFormat aFormat)
- : RecordedEvent(SOURCESURFACECREATION), mRefPtr(aRefPtr), mData(aData)
- , mStride(aStride), mSize(aSize), mFormat(aFormat), mDataOwned(false)
- {
- }
- ~RecordedSourceSurfaceCreation();
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "SourceSurface Creation"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- uint8_t *mData;
- int32_t mStride;
- IntSize mSize;
- SurfaceFormat mFormat;
- bool mDataOwned;
- MOZ_IMPLICIT RecordedSourceSurfaceCreation(std::istream &aStream);
- };
- class RecordedSourceSurfaceDestruction : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedSourceSurfaceDestruction(ReferencePtr aRefPtr)
- : RecordedEvent(SOURCESURFACEDESTRUCTION), mRefPtr(aRefPtr)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "SourceSurface Destruction"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- MOZ_IMPLICIT RecordedSourceSurfaceDestruction(std::istream &aStream);
- };
- class RecordedFilterNodeCreation : public RecordedEvent {
- public:
- RecordedFilterNodeCreation(ReferencePtr aRefPtr, FilterType aType)
- : RecordedEvent(FILTERNODECREATION), mRefPtr(aRefPtr), mType(aType)
- {
- }
- ~RecordedFilterNodeCreation();
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "FilterNode Creation"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- FilterType mType;
- MOZ_IMPLICIT RecordedFilterNodeCreation(std::istream &aStream);
- };
- class RecordedFilterNodeDestruction : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedFilterNodeDestruction(ReferencePtr aRefPtr)
- : RecordedEvent(FILTERNODEDESTRUCTION), mRefPtr(aRefPtr)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "FilterNode Destruction"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- MOZ_IMPLICIT RecordedFilterNodeDestruction(std::istream &aStream);
- };
- class RecordedGradientStopsCreation : public RecordedEvent {
- public:
- RecordedGradientStopsCreation(ReferencePtr aRefPtr, GradientStop *aStops,
- uint32_t aNumStops, ExtendMode aExtendMode)
- : RecordedEvent(GRADIENTSTOPSCREATION), mRefPtr(aRefPtr), mStops(aStops)
- , mNumStops(aNumStops), mExtendMode(aExtendMode), mDataOwned(false)
- {
- }
- ~RecordedGradientStopsCreation();
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "GradientStops Creation"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- GradientStop *mStops;
- uint32_t mNumStops;
- ExtendMode mExtendMode;
- bool mDataOwned;
- MOZ_IMPLICIT RecordedGradientStopsCreation(std::istream &aStream);
- };
- class RecordedGradientStopsDestruction : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedGradientStopsDestruction(ReferencePtr aRefPtr)
- : RecordedEvent(GRADIENTSTOPSDESTRUCTION), mRefPtr(aRefPtr)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "GradientStops Destruction"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- MOZ_IMPLICIT RecordedGradientStopsDestruction(std::istream &aStream);
- };
- class RecordedSnapshot : public RecordedEvent {
- public:
- RecordedSnapshot(ReferencePtr aRefPtr, DrawTarget *aDT)
- : RecordedEvent(SNAPSHOT), mRefPtr(aRefPtr), mDT(aDT)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "Snapshot"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- ReferencePtr mDT;
- MOZ_IMPLICIT RecordedSnapshot(std::istream &aStream);
- };
- class RecordedFontData : public RecordedEvent {
- public:
- static void FontDataProc(const uint8_t *aData, uint32_t aSize,
- uint32_t aIndex, Float aGlyphSize, void* aBaton)
- {
- auto recordedFontData = static_cast<RecordedFontData*>(aBaton);
- recordedFontData->SetFontData(aData, aSize, aIndex, aGlyphSize);
- }
- explicit RecordedFontData(ScaledFont *aScaledFont)
- : RecordedEvent(FONTDATA), mData(nullptr)
- {
- mGetFontFileDataSucceeded = aScaledFont->GetFontFileData(&FontDataProc, this);
- }
- ~RecordedFontData();
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "Font Data"; }
- virtual ReferencePtr GetObjectRef() const { return nullptr; };
- void SetFontData(const uint8_t *aData, uint32_t aSize, uint32_t aIndex,
- Float aGlyphSize);
- bool GetFontDetails(RecordedFontDetails& fontDetails);
- private:
- friend class RecordedEvent;
- uint8_t *mData;
- RecordedFontDetails mFontDetails;
- bool mGetFontFileDataSucceeded = false;
- MOZ_IMPLICIT RecordedFontData(std::istream &aStream);
- };
- class RecordedFontDescriptor : public RecordedEvent {
- public:
- static void FontDescCb(const uint8_t *aData, uint32_t aSize,
- Float aFontSize, void* aBaton)
- {
- auto recordedFontDesc = static_cast<RecordedFontDescriptor*>(aBaton);
- recordedFontDesc->SetFontDescriptor(aData, aSize, aFontSize);
- }
- explicit RecordedFontDescriptor(ScaledFont* aScaledFont)
- : RecordedEvent(FONTDESC)
- , mType(aScaledFont->GetType())
- , mRefPtr(aScaledFont)
- {
- mHasDesc = aScaledFont->GetFontDescriptor(FontDescCb, this);
- }
- ~RecordedFontDescriptor();
- bool IsValid() const { return mHasDesc; }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "Font Desc"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- void SetFontDescriptor(const uint8_t* aData, uint32_t aSize, Float aFontSize);
- bool mHasDesc;
- FontType mType;
- Float mFontSize;
- std::vector<uint8_t> mData;
- ReferencePtr mRefPtr;
- MOZ_IMPLICIT RecordedFontDescriptor(std::istream &aStream);
- };
- class RecordedScaledFontCreation : public RecordedEvent {
- public:
- static void FontInstanceDataProc(const uint8_t* aData, uint32_t aSize, void* aBaton)
- {
- auto recordedScaledFontCreation = static_cast<RecordedScaledFontCreation*>(aBaton);
- recordedScaledFontCreation->SetFontInstanceData(aData, aSize);
- }
- RecordedScaledFontCreation(ScaledFont* aScaledFont,
- RecordedFontDetails aFontDetails)
- : RecordedEvent(SCALEDFONTCREATION), mRefPtr(aScaledFont)
- , mFontDataKey(aFontDetails.fontDataKey)
- , mGlyphSize(aFontDetails.glyphSize) , mIndex(aFontDetails.index)
- {
- aScaledFont->GetFontInstanceData(FontInstanceDataProc, this);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "ScaledFont Creation"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- void SetFontInstanceData(const uint8_t *aData, uint32_t aSize);
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- uint64_t mFontDataKey;
- Float mGlyphSize;
- uint32_t mIndex;
- std::vector<uint8_t> mInstanceData;
- MOZ_IMPLICIT RecordedScaledFontCreation(std::istream &aStream);
- };
- class RecordedScaledFontDestruction : public RecordedEvent {
- public:
- MOZ_IMPLICIT RecordedScaledFontDestruction(ReferencePtr aRefPtr)
- : RecordedEvent(SCALEDFONTDESTRUCTION), mRefPtr(aRefPtr)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "ScaledFont Destruction"; }
- virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
- private:
- friend class RecordedEvent;
- ReferencePtr mRefPtr;
- MOZ_IMPLICIT RecordedScaledFontDestruction(std::istream &aStream);
- };
- class RecordedMaskSurface : public RecordedDrawingEvent {
- public:
- RecordedMaskSurface(DrawTarget *aDT, const Pattern &aPattern, ReferencePtr aRefMask,
- const Point &aOffset, const DrawOptions &aOptions)
- : RecordedDrawingEvent(MASKSURFACE, aDT), mRefMask(aRefMask), mOffset(aOffset)
- , mOptions(aOptions)
- {
- StorePattern(mPattern, aPattern);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
-
- virtual std::string GetName() const { return "MaskSurface"; }
- private:
- friend class RecordedEvent;
- MOZ_IMPLICIT RecordedMaskSurface(std::istream &aStream);
- PatternStorage mPattern;
- ReferencePtr mRefMask;
- Point mOffset;
- DrawOptions mOptions;
- };
- class RecordedFilterNodeSetAttribute : public RecordedEvent
- {
- public:
- enum ArgType {
- ARGTYPE_UINT32,
- ARGTYPE_BOOL,
- ARGTYPE_FLOAT,
- ARGTYPE_SIZE,
- ARGTYPE_INTSIZE,
- ARGTYPE_INTPOINT,
- ARGTYPE_RECT,
- ARGTYPE_INTRECT,
- ARGTYPE_POINT,
- ARGTYPE_MATRIX,
- ARGTYPE_MATRIX5X4,
- ARGTYPE_POINT3D,
- ARGTYPE_COLOR,
- ARGTYPE_FLOAT_ARRAY
- };
- template<typename T>
- RecordedFilterNodeSetAttribute(FilterNode *aNode, uint32_t aIndex, T aArgument, ArgType aArgType)
- : RecordedEvent(FILTERNODESETATTRIBUTE), mNode(aNode), mIndex(aIndex), mArgType(aArgType)
- {
- mPayload.resize(sizeof(T));
- memcpy(&mPayload.front(), &aArgument, sizeof(T));
- }
- RecordedFilterNodeSetAttribute(FilterNode *aNode, uint32_t aIndex, const Float *aFloat, uint32_t aSize)
- : RecordedEvent(FILTERNODESETATTRIBUTE), mNode(aNode), mIndex(aIndex), mArgType(ARGTYPE_FLOAT_ARRAY)
- {
- mPayload.resize(sizeof(Float) * aSize);
- memcpy(&mPayload.front(), aFloat, sizeof(Float) * aSize);
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "SetAttribute"; }
- virtual ReferencePtr GetObjectRef() const { return mNode; }
- private:
- friend class RecordedEvent;
- ReferencePtr mNode;
- uint32_t mIndex;
- ArgType mArgType;
- std::vector<uint8_t> mPayload;
- MOZ_IMPLICIT RecordedFilterNodeSetAttribute(std::istream &aStream);
- };
- class RecordedFilterNodeSetInput : public RecordedEvent
- {
- public:
- RecordedFilterNodeSetInput(FilterNode* aNode, uint32_t aIndex, FilterNode* aInputNode)
- : RecordedEvent(FILTERNODESETINPUT), mNode(aNode), mIndex(aIndex)
- , mInputFilter(aInputNode), mInputSurface(nullptr)
- {
- }
- RecordedFilterNodeSetInput(FilterNode *aNode, uint32_t aIndex, SourceSurface *aInputSurface)
- : RecordedEvent(FILTERNODESETINPUT), mNode(aNode), mIndex(aIndex)
- , mInputFilter(nullptr), mInputSurface(aInputSurface)
- {
- }
- virtual bool PlayEvent(Translator *aTranslator) const;
- virtual void RecordToStream(std::ostream &aStream) const;
- virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
- virtual std::string GetName() const { return "SetInput"; }
- virtual ReferencePtr GetObjectRef() const { return mNode; }
- private:
- friend class RecordedEvent;
- ReferencePtr mNode;
- uint32_t mIndex;
- ReferencePtr mInputFilter;
- ReferencePtr mInputSurface;
- MOZ_IMPLICIT RecordedFilterNodeSetInput(std::istream &aStream);
- };
- } // namespace gfx
- } // namespace mozilla
- #endif
|