Bug 1372225 - Add recording for IntoLumaSource. r=mchang

This lets us avoid using the default implementation and allows us to
do the actual work on during playback.
This commit is contained in:
Jeff Muizelaar 2017-06-12 10:21:16 -04:00
parent fd0bdd7710
commit 07374b97fe
4 changed files with 72 additions and 1 deletions

View File

@ -480,6 +480,18 @@ DrawTargetRecording::Snapshot()
return retSurf.forget();
}
already_AddRefed<SourceSurface>
DrawTargetRecording::IntoLuminanceSource(LuminanceType aLuminanceType, float aOpacity)
{
RefPtr<SourceSurface> surf = mFinalDT->IntoLuminanceSource(aLuminanceType, aOpacity);
RefPtr<SourceSurface> retSurf = new SourceSurfaceRecording(surf, mRecorder);
mRecorder->RecordEvent(RecordedIntoLuminanceSource(retSurf, this, aLuminanceType, aOpacity));
return retSurf.forget();
}
void
DrawTargetRecording::DetachAllSnapshots()
{

View File

@ -26,6 +26,7 @@ public:
virtual bool IsRecording() const override { return true; }
virtual already_AddRefed<SourceSurface> Snapshot() override;
virtual already_AddRefed<SourceSurface> IntoLuminanceSource(LuminanceType aLuminanceType, float aOpacity) override;
virtual void DetachAllSnapshots() override;

View File

@ -1497,6 +1497,38 @@ RecordedGradientStopsDestruction::OutputSimpleEventInfo(stringstream &aStringStr
aStringStream << "[" << mRefPtr << "] GradientStops Destroyed";
}
bool
RecordedIntoLuminanceSource::PlayEvent(Translator *aTranslator) const
{
RefPtr<SourceSurface> src = aTranslator->LookupDrawTarget(mDT)->IntoLuminanceSource(mLuminanceType, mOpacity);
aTranslator->AddSourceSurface(mRefPtr, src);
return true;
}
void
RecordedIntoLuminanceSource::RecordToStream(ostream &aStream) const
{
WriteElement(aStream, mRefPtr);
WriteElement(aStream, mDT);
WriteElement(aStream, mLuminanceType);
WriteElement(aStream, mOpacity);
}
RecordedIntoLuminanceSource::RecordedIntoLuminanceSource(istream &aStream)
: RecordedEvent(SNAPSHOT)
{
ReadElement(aStream, mRefPtr);
ReadElement(aStream, mDT);
ReadElement(aStream, mLuminanceType);
ReadElement(aStream, mOpacity);
}
void
RecordedIntoLuminanceSource::OutputSimpleEventInfo(stringstream &aStringStream) const
{
aStringStream << "[" << mRefPtr << "] Into Luminance Source (DT: " << mDT << ")";
}
bool
RecordedSnapshot::PlayEvent(Translator *aTranslator) const
{
@ -1524,7 +1556,6 @@ RecordedSnapshot::OutputSimpleEventInfo(stringstream &aStringStream) const
{
aStringStream << "[" << mRefPtr << "] Snapshot Created (DT: " << mDT << ")";
}
RecordedFontData::~RecordedFontData()
{
delete[] mData;

View File

@ -1015,6 +1015,33 @@ private:
MOZ_IMPLICIT RecordedSnapshot(std::istream &aStream);
};
class RecordedIntoLuminanceSource : public RecordedEvent {
public:
RecordedIntoLuminanceSource(ReferencePtr aRefPtr, DrawTarget *aDT,
LuminanceType aLuminanceType, float aOpacity)
: RecordedEvent(SNAPSHOT), mRefPtr(aRefPtr), mDT(aDT),
mLuminanceType(aLuminanceType), mOpacity(aOpacity)
{
}
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 "IntoLuminanceSource"; }
virtual ReferencePtr GetObjectRef() const { return mRefPtr; }
private:
friend class RecordedEvent;
ReferencePtr mRefPtr;
ReferencePtr mDT;
LuminanceType mLuminanceType;
float mOpacity;
MOZ_IMPLICIT RecordedIntoLuminanceSource(std::istream &aStream);
};
class RecordedFontData : public RecordedEvent {
public: