De-virtualize CXFA_FFWidget::PreFinalize().
PDFium's use of virtual pre-finalizers was an artifact of converting
virtual dtors mostly as-is into pre-finalizers. Improve performance
by only implementing these on the sub-classes that actually require
them.
Bug: chromium:1252634
Change-Id: Ib0926716cb305ed3206d6696f1b5c78e03135b4f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85491
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffimage.cpp b/xfa/fxfa/cxfa_ffimage.cpp
index f3cdb3f..0bbb8f4 100644
--- a/xfa/fxfa/cxfa_ffimage.cpp
+++ b/xfa/fxfa/cxfa_ffimage.cpp
@@ -21,7 +21,6 @@
void CXFA_FFImage::PreFinalize() {
GetNode()->SetImageImage(nullptr);
- CXFA_FFWidget::PreFinalize();
}
bool CXFA_FFImage::IsLoaded() {
diff --git a/xfa/fxfa/cxfa_ffimage.h b/xfa/fxfa/cxfa_ffimage.h
index 5e192fa..1fe358e 100644
--- a/xfa/fxfa/cxfa_ffimage.h
+++ b/xfa/fxfa/cxfa_ffimage.h
@@ -7,15 +7,19 @@
#ifndef XFA_FXFA_CXFA_FFIMAGE_H_
#define XFA_FXFA_CXFA_FFIMAGE_H_
+#include "v8/include/cppgc/prefinalizer.h"
#include "xfa/fxfa/cxfa_ffwidget.h"
class CXFA_FFImage final : public CXFA_FFWidget {
+ CPPGC_USING_PRE_FINALIZER(CXFA_FFImage, PreFinalize);
+
public:
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFImage() override;
+ void PreFinalize();
+
// CXFA_FFWidget:
- void PreFinalize() override;
void RenderWidget(CFGAS_GEGraphics* pGS,
const CFX_Matrix& matrix,
HighlightOption highlight) override;
diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp
index 41a3017..61df5ce 100644
--- a/xfa/fxfa/cxfa_ffimageedit.cpp
+++ b/xfa/fxfa/cxfa_ffimageedit.cpp
@@ -29,7 +29,6 @@
void CXFA_FFImageEdit::PreFinalize() {
m_pNode->SetImageEditImage(nullptr);
- CXFA_FFField::PreFinalize();
}
void CXFA_FFImageEdit::Trace(cppgc::Visitor* visitor) const {
diff --git a/xfa/fxfa/cxfa_ffimageedit.h b/xfa/fxfa/cxfa_ffimageedit.h
index df5bc6b..9bffd3a 100644
--- a/xfa/fxfa/cxfa_ffimageedit.h
+++ b/xfa/fxfa/cxfa_ffimageedit.h
@@ -8,15 +8,19 @@
#define XFA_FXFA_CXFA_FFIMAGEEDIT_H_
#include "v8/include/cppgc/member.h"
+#include "v8/include/cppgc/prefinalizer.h"
#include "xfa/fxfa/cxfa_fffield.h"
class CXFA_FFImageEdit final : public CXFA_FFField {
+ CPPGC_USING_PRE_FINALIZER(CXFA_FFImageEdit, PreFinalize);
+
public:
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFImageEdit() override;
+ void PreFinalize();
+
// CXFA_FFField:
- void PreFinalize() override;
void Trace(cppgc::Visitor* visitor) const override;
void RenderWidget(CFGAS_GEGraphics* pGS,
const CFX_Matrix& matrix,
diff --git a/xfa/fxfa/cxfa_fflistbox.cpp b/xfa/fxfa/cxfa_fflistbox.cpp
index 5d985f1..e0d9a53 100644
--- a/xfa/fxfa/cxfa_fflistbox.cpp
+++ b/xfa/fxfa/cxfa_fflistbox.cpp
@@ -37,7 +37,6 @@
GetNormalWidget()->GetFWLApp()->GetNoteDriver();
pNoteDriver->UnregisterEventTarget(GetNormalWidget());
}
- CXFA_FFDropDown::PreFinalize();
}
void CXFA_FFListBox::Trace(cppgc::Visitor* visitor) const {
diff --git a/xfa/fxfa/cxfa_fflistbox.h b/xfa/fxfa/cxfa_fflistbox.h
index ae8bca9..88a335f 100644
--- a/xfa/fxfa/cxfa_fflistbox.h
+++ b/xfa/fxfa/cxfa_fflistbox.h
@@ -8,15 +8,19 @@
#define XFA_FXFA_CXFA_FFLISTBOX_H_
#include "v8/include/cppgc/member.h"
+#include "v8/include/cppgc/prefinalizer.h"
#include "xfa/fxfa/cxfa_ffdropdown.h"
class CXFA_FFListBox final : public CXFA_FFDropDown {
+ CPPGC_USING_PRE_FINALIZER(CXFA_FFListBox, PreFinalize);
+
public:
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFListBox() override;
+ void PreFinalize();
+
// CXFA_FFField:
- void PreFinalize() override;
void Trace(cppgc::Visitor* visitor) const override;
bool LoadWidget() override;
bool OnKillFocus(CXFA_FFWidget* pNewWidget) override WARN_UNUSED_RESULT;
@@ -26,7 +30,7 @@
const CFX_Matrix& matrix) override;
FormFieldType GetFormFieldType() override;
- // CXFA_FFDropDown
+ // CXFA_FFDropDown:
void InsertItem(const WideString& wsLabel, int32_t nIndex) override;
void DeleteItem(int32_t nIndex) override;
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 9a83b6f..a60cd29 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -42,7 +42,6 @@
GetNormalWidget()->GetFWLApp()->GetNoteDriver();
pNoteDriver->UnregisterEventTarget(GetNormalWidget());
}
- CXFA_FFField::PreFinalize();
}
void CXFA_FFTextEdit::Trace(cppgc::Visitor* visitor) const {
diff --git a/xfa/fxfa/cxfa_fftextedit.h b/xfa/fxfa/cxfa_fftextedit.h
index 9513f28..2fb39ed 100644
--- a/xfa/fxfa/cxfa_fftextedit.h
+++ b/xfa/fxfa/cxfa_fftextedit.h
@@ -9,6 +9,7 @@
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string.h"
+#include "v8/include/cppgc/prefinalizer.h"
#include "xfa/fxfa/cxfa_fffield.h"
class CFWL_Event;
@@ -19,11 +20,14 @@
class IFWL_WidgetDelegate;
class CXFA_FFTextEdit : public CXFA_FFField {
+ CPPGC_USING_PRE_FINALIZER(CXFA_FFTextEdit, PreFinalize);
+
public:
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFTextEdit() override;
- void PreFinalize() override;
+ void PreFinalize();
+
void Trace(cppgc::Visitor* visitor) const override;
// CXFA_FFField
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 8aa5c2e..2928913 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -222,8 +222,6 @@
CXFA_FFWidget::~CXFA_FFWidget() = default;
-void CXFA_FFWidget::PreFinalize() {}
-
void CXFA_FFWidget::Trace(cppgc::Visitor* visitor) const {
visitor->Trace(m_pLayoutItem);
visitor->Trace(m_pDocView);
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index bddabe5..5df2c70 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -16,7 +16,6 @@
#include "core/fxge/cfx_graphstatedata.h"
#include "fxjs/gc/heap.h"
#include "v8/include/cppgc/garbage-collected.h"
-#include "v8/include/cppgc/prefinalizer.h"
#include "v8/include/cppgc/visitor.h"
#include "xfa/fwl/cfwl_app.h"
#include "xfa/fwl/cfwl_messagemouse.h"
@@ -65,8 +64,6 @@
class CXFA_FFWidget : public cppgc::GarbageCollected<CXFA_FFWidget>,
public CFWL_Widget::AdapterIface {
- CPPGC_USING_PRE_FINALIZER(CXFA_FFWidget, PreFinalize);
-
public:
enum FocusOption { kDoNotDrawFocus = 0, kDrawFocus };
enum HighlightOption { kNoHighlight = 0, kHighlight };
@@ -88,7 +85,6 @@
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFWidget() override;
- virtual void PreFinalize();
void Trace(cppgc::Visitor* visitor) const override;
// CFWL_Widget::AdapterIface: