commit 63d4e507c859
Author: Jonathan Watt <jwatt@jwatt.org>
Date: Thu Jan 18 12:45:18 2018 +0000
Bug 1435286 - Stop recording draw events for reference DrawTargets returned from PrintTarget. r=bobowen a=RyanVM
MozReview-Commit-ID: 1cE71hBCGx5
--HG--
extra : source : 2ec583a00c078700add6a3615f6b6af12756695c
---
gfx/src/nsDeviceContext.cpp | 9 ++++-----
gfx/thebes/PrintTarget.cpp | 24 +-----------------------
gfx/thebes/PrintTarget.h | 13 ++-----------
gfx/thebes/PrintTargetCG.h | 2 +-
gfx/thebes/PrintTargetCG.mm | 23 +----------------------
gfx/thebes/PrintTargetEMF.cpp | 4 ++--
gfx/thebes/PrintTargetEMF.h | 2 +-
gfx/thebes/PrintTargetSkPDF.cpp | 23 +----------------------
gfx/thebes/PrintTargetSkPDF.h | 2 +-
gfx/thebes/PrintTargetThebes.cpp | 23 +----------------------
gfx/thebes/PrintTargetThebes.h | 2 +-
11 files changed, 16 insertions(+), 111 deletions(-)
diff --git gfx/src/nsDeviceContext.cpp gfx/src/nsDeviceContext.cpp
index 913f46d272cc..ca5db861a303 100644
--- gfx/src/nsDeviceContext.cpp
+++ gfx/src/nsDeviceContext.cpp
@@ -382,14 +382,13 @@ nsDeviceContext::CreateRenderingContextCommon(bool aWantReferenceContext)
MOZ_ASSERT(IsPrinterContext());
MOZ_ASSERT(mWidth > 0 && mHeight > 0);
- // This will usually be null, depending on the pref print.print_via_parent.
- RefPtr<DrawEventRecorder> recorder;
- mDeviceContextSpec->GetDrawEventRecorder(getter_AddRefs(recorder));
-
RefPtr<gfx::DrawTarget> dt;
if (aWantReferenceContext) {
- dt = mPrintTarget->GetReferenceDrawTarget(recorder);
+ dt = mPrintTarget->GetReferenceDrawTarget();
} else {
+ // This will be null if e10s is disabled or print.print_via_parent=false.
+ RefPtr<DrawEventRecorder> recorder;
+ mDeviceContextSpec->GetDrawEventRecorder(getter_AddRefs(recorder));
dt = mPrintTarget->MakeDrawTarget(gfx::IntSize(mWidth, mHeight), recorder);
}
diff --git gfx/thebes/PrintTarget.cpp gfx/thebes/PrintTarget.cpp
index bb81158e5b77..c76a930221bf 100644
--- gfx/thebes/PrintTarget.cpp
+++ gfx/thebes/PrintTarget.cpp
@@ -25,7 +25,6 @@ PrintTarget::PrintTarget(cairo_surface_t* aCairoSurface, const IntSize& aSize)
, mIsFinished(false)
#ifdef DEBUG
, mHasActivePage(false)
- , mRecorder(nullptr)
#endif
{
@@ -92,7 +91,7 @@ PrintTarget::MakeDrawTarget(const IntSize& aSize,
}
already_AddRefed<DrawTarget>
-PrintTarget::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
+PrintTarget::GetReferenceDrawTarget()
{
if (!mRefDT) {
const IntSize size(1, 1);
@@ -136,27 +135,6 @@ PrintTarget::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
mRefDT = dt.forget();
}
- if (aRecorder) {
- if (!mRecordingRefDT) {
- RefPtr<DrawTarget> dt = CreateWrapAndRecordDrawTarget(aRecorder, mRefDT);
- if (!dt || !dt->IsValid()) {
- return nullptr;
- }
- mRecordingRefDT = dt.forget();
-#ifdef DEBUG
- mRecorder = aRecorder;
-#endif
- }
-#ifdef DEBUG
- else {
- MOZ_ASSERT(aRecorder == mRecorder,
- "Caching mRecordingRefDT assumes the aRecorder is an invariant");
- }
-#endif
-
- return do_AddRef(mRecordingRefDT);
- }
-
return do_AddRef(mRefDT);
}
diff --git gfx/thebes/PrintTarget.h gfx/thebes/PrintTarget.h
index c5720c6cdb1f..818dc31fe0c4 100644
--- gfx/thebes/PrintTarget.h
+++ gfx/thebes/PrintTarget.h
@@ -130,10 +130,9 @@ public:
/**
* Returns a reference DrawTarget. Unlike MakeDrawTarget, this method is not
* restricted to being called between BeginPage()/EndPage() calls, and the
- * returned DrawTarget it is still valid to use after EndPage() has been
- * called.
+ * returned DrawTarget is still valid to use after EndPage() has been called.
*/
- virtual already_AddRefed<DrawTarget> GetReferenceDrawTarget(DrawEventRecorder* aRecorder);
+ virtual already_AddRefed<DrawTarget> GetReferenceDrawTarget();
protected:
@@ -150,18 +149,10 @@ protected:
cairo_surface_t* mCairoSurface;
RefPtr<DrawTarget> mRefDT; // reference DT
- // Early on during printing we expect to be called without a recorder in
- // order to gather metrics for reflow. However, in a content process, once
- // we go on to paint we then expect to be called with a recorder. Hence why
- // we have this separate recording reference DrawTarget (which wraps mRefDT).
- RefPtr<DrawTarget> mRecordingRefDT;
-
IntSize mSize;
bool mIsFinished;
#ifdef DEBUG
bool mHasActivePage;
- // owned by mRecordingRefDT, so kept alive for our entire lifetime if set:
- DrawEventRecorder* mRecorder;
#endif
};
diff --git gfx/thebes/PrintTargetCG.h gfx/thebes/PrintTargetCG.h
index 8e0d2c505024..7808ebbd2a58 100644
--- gfx/thebes/PrintTargetCG.h
+++ gfx/thebes/PrintTargetCG.h
@@ -34,7 +34,7 @@ public:
virtual nsresult EndPage() final;
virtual already_AddRefed<DrawTarget>
- GetReferenceDrawTarget(DrawEventRecorder* aRecorder) final;
+ GetReferenceDrawTarget() final;
private:
PrintTargetCG(PMPrintSession aPrintSession,
diff --git gfx/thebes/PrintTargetCG.mm gfx/thebes/PrintTargetCG.mm
index 7a7858f71456..93432711ed3d 100644
--- gfx/thebes/PrintTargetCG.mm
+++ gfx/thebes/PrintTargetCG.mm
@@ -65,7 +65,7 @@ PutBytesNull(void* info, const void* buffer, size_t count)
}
already_AddRefed<DrawTarget>
-PrintTargetCG::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
+PrintTargetCG::GetReferenceDrawTarget()
{
if (!mRefDT) {
const IntSize size(1, 1);
@@ -97,27 +97,6 @@ PrintTargetCG::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
mRefDT = dt.forget();
}
- if (aRecorder) {
- if (!mRecordingRefDT) {
- RefPtr<DrawTarget> dt = CreateWrapAndRecordDrawTarget(aRecorder, mRefDT);
- if (!dt || !dt->IsValid()) {
- return nullptr;
- }
- mRecordingRefDT = dt.forget();
-#ifdef DEBUG
- mRecorder = aRecorder;
-#endif
- }
-#ifdef DEBUG
- else {
- MOZ_ASSERT(aRecorder == mRecorder,
- "Caching mRecordingRefDT assumes the aRecorder is an invariant");
- }
-#endif
-
- return do_AddRef(mRecordingRefDT);
- }
-
return do_AddRef(mRefDT);
}
diff --git gfx/thebes/PrintTargetSkPDF.cpp gfx/thebes/PrintTargetSkPDF.cpp
index bdc6f9fec21f..e89afaea5d47 100644
--- gfx/thebes/PrintTargetSkPDF.cpp
+++ gfx/thebes/PrintTargetSkPDF.cpp
@@ -122,7 +122,7 @@ PrintTargetSkPDF::MakeDrawTarget(const IntSize& aSize,
}
already_AddRefed<DrawTarget>
-PrintTargetSkPDF::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
+PrintTargetSkPDF::GetReferenceDrawTarget()
{
if (!mRefDT) {
SkDocument::PDFMetadata metadata;
@@ -145,27 +145,6 @@ PrintTargetSkPDF::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
mRefDT = dt.forget();
}
- if (aRecorder) {
- if (!mRecordingRefDT) {
- RefPtr<DrawTarget> dt = CreateWrapAndRecordDrawTarget(aRecorder, mRefDT);
- if (!dt || !dt->IsValid()) {
- return nullptr;
- }
- mRecordingRefDT = dt.forget();
-#ifdef DEBUG
- mRecorder = aRecorder;
-#endif
- }
-#ifdef DEBUG
- else {
- MOZ_ASSERT(aRecorder == mRecorder,
- "Caching mRecordingRefDT assumes the aRecorder is an invariant");
- }
-#endif
-
- return do_AddRef(mRecordingRefDT);
- }
-
return do_AddRef(mRefDT);
}
diff --git gfx/thebes/PrintTargetSkPDF.h gfx/thebes/PrintTargetSkPDF.h
index fe5f28b31202..84ef2ff21ace 100644
--- gfx/thebes/PrintTargetSkPDF.h
+++ gfx/thebes/PrintTargetSkPDF.h
@@ -44,7 +44,7 @@ public:
DrawEventRecorder* aRecorder = nullptr) final;
virtual already_AddRefed<DrawTarget>
- GetReferenceDrawTarget(DrawEventRecorder* aRecorder) override final;
+ GetReferenceDrawTarget() override final;
private:
PrintTargetSkPDF(const IntSize& aSize,
diff --git gfx/thebes/PrintTargetThebes.cpp gfx/thebes/PrintTargetThebes.cpp
index 3cb6d1e5d6b7..f12a7d5b3fb9 100644
--- gfx/thebes/PrintTargetThebes.cpp
+++ gfx/thebes/PrintTargetThebes.cpp
@@ -57,7 +57,7 @@ PrintTargetThebes::MakeDrawTarget(const IntSize& aSize,
}
already_AddRefed<DrawTarget>
-PrintTargetThebes::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
+PrintTargetThebes::GetReferenceDrawTarget()
{
if (!mRefDT) {
RefPtr<gfx::DrawTarget> dt =
@@ -68,27 +68,6 @@ PrintTargetThebes::GetReferenceDrawTarget(DrawEventRecorder* aRecorder)
mRefDT = dt->CreateSimilarDrawTarget(IntSize(1,1), dt->GetFormat());
}
- if (aRecorder) {
- if (!mRecordingRefDT) {
- RefPtr<DrawTarget> dt = CreateWrapAndRecordDrawTarget(aRecorder, mRefDT);
- if (!dt || !dt->IsValid()) {
- return nullptr;
- }
- mRecordingRefDT = dt.forget();
-#ifdef DEBUG
- mRecorder = aRecorder;
-#endif
- }
-#ifdef DEBUG
- else {
- MOZ_ASSERT(aRecorder == mRecorder,
- "Caching mRecordingRefDT assumes the aRecorder is an invariant");
- }
-#endif
-
- return do_AddRef(mRecordingRefDT);
- }
-
return do_AddRef(mRefDT);
}
diff --git gfx/thebes/PrintTargetThebes.h gfx/thebes/PrintTargetThebes.h
index 02f0e0ea51c3..94ffbc78fa6c 100644
--- gfx/thebes/PrintTargetThebes.h
+++ gfx/thebes/PrintTargetThebes.h
@@ -43,7 +43,7 @@ public:
MakeDrawTarget(const IntSize& aSize,
DrawEventRecorder* aRecorder = nullptr) override;
- virtual already_AddRefed<DrawTarget> GetReferenceDrawTarget(DrawEventRecorder* aRecorder) final;
+ virtual already_AddRefed<DrawTarget> GetReferenceDrawTarget() final;
private: