aboutsummaryrefslogblamecommitdiff
path: root/www/waterfox/files/patch-bug1435286
blob: 4aa4aa1f8aa3362a166308f007bf8f3b574cdb62 (plain) (tree)





































































































































































































































































































                                                                                                                    
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: