diff --git a/BUILD.gn b/BUILD.gn
index a50a4ea..77cc79d 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -890,11 +890,11 @@
     "core/fxge/android/cfx_androidfontinfo.cpp",
     "core/fxge/android/cfx_androidfontinfo.h",
     "core/fxge/android/fx_android_imp.cpp",
+    "core/fxge/cfx_defaultrenderdevice.h",
     "core/fxge/cfx_facecache.h",
     "core/fxge/cfx_fontcache.h",
     "core/fxge/cfx_fontmapper.h",
     "core/fxge/cfx_fontmgr.h",
-    "core/fxge/cfx_fxgedevice.h",
     "core/fxge/cfx_gemodule.h",
     "core/fxge/cfx_graphstate.h",
     "core/fxge/cfx_graphstatedata.h",
@@ -902,7 +902,7 @@
     "core/fxge/cfx_renderdevice.h",
     "core/fxge/cfx_substfont.h",
     "core/fxge/cfx_unicodeencoding.h",
-    "core/fxge/cfx_windowsdevice.h",
+    "core/fxge/cfx_windowsrenderdevice.h",
     "core/fxge/dib/cfx_bitmapcomposer.cpp",
     "core/fxge/dib/cfx_bitmapcomposer.h",
     "core/fxge/dib/cfx_bitmapstorer.cpp",
diff --git a/core/fpdfapi/page/cpdf_path.h b/core/fpdfapi/page/cpdf_path.h
index 4bbb4b8..f604abd 100644
--- a/core/fpdfapi/page/cpdf_path.h
+++ b/core/fpdfapi/page/cpdf_path.h
@@ -11,7 +11,7 @@
 
 #include "core/fxcrt/cfx_shared_copy_on_write.h"
 #include "core/fxcrt/fx_system.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 
diff --git a/core/fpdfapi/render/cpdf_devicebuffer.cpp b/core/fpdfapi/render/cpdf_devicebuffer.cpp
index 605e09b..be87128 100644
--- a/core/fpdfapi/render/cpdf_devicebuffer.cpp
+++ b/core/fpdfapi/render/cpdf_devicebuffer.cpp
@@ -9,7 +9,7 @@
 #include "core/fpdfapi/page/cpdf_pageobject.h"
 #include "core/fpdfapi/render/cpdf_rendercontext.h"
 #include "core/fpdfapi/render/cpdf_renderoptions.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/fx_dib.h"
 #include "third_party/base/ptr_util.h"
diff --git a/core/fpdfapi/render/cpdf_dibsource.h b/core/fpdfapi/render/cpdf_dibsource.h
index 00f8c3a..d0730cc 100644
--- a/core/fpdfapi/render/cpdf_dibsource.h
+++ b/core/fpdfapi/render/cpdf_dibsource.h
@@ -18,7 +18,7 @@
 #include "core/fpdfapi/render/cpdf_imageloader.h"
 #include "core/fpdfapi/render/cpdf_rendercontext.h"
 #include "core/fpdfapi/render/cpdf_renderoptions.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_renderdevice.h"
 
 class CCodec_Jbig2Context;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index dd10448..2854812 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -27,7 +27,7 @@
 #include "core/fpdfdoc/cpdf_occontext.h"
 #include "core/fxcrt/cfx_maybe_owned.h"
 #include "core/fxcrt/fx_safe_types.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/dib/cfx_dibsource.h"
@@ -222,8 +222,8 @@
 }
 
 void CPDF_ImageRenderer::CalculateDrawImage(
-    CFX_FxgeDevice* pBitmapDevice1,
-    CFX_FxgeDevice* pBitmapDevice2,
+    CFX_DefaultRenderDevice* pBitmapDevice1,
+    CFX_DefaultRenderDevice* pBitmapDevice2,
     const CFX_RetainPtr<CFX_DIBSource>& pDIBSource,
     CFX_Matrix* pNewMatrix,
     const FX_RECT& rect) const {
@@ -273,7 +273,7 @@
     return false;
 
   CFX_Matrix new_matrix = GetDrawMatrix(rect);
-  CFX_FxgeDevice bitmap_device1;
+  CFX_DefaultRenderDevice bitmap_device1;
   if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32, nullptr))
     return true;
 
@@ -294,7 +294,7 @@
                                      &patternDevice, false);
   }
 
-  CFX_FxgeDevice bitmap_device2;
+  CFX_DefaultRenderDevice bitmap_device2;
   if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb,
                              nullptr)) {
     return true;
@@ -321,7 +321,7 @@
     return false;
 
   CFX_Matrix new_matrix = GetDrawMatrix(rect);
-  CFX_FxgeDevice bitmap_device1;
+  CFX_DefaultRenderDevice bitmap_device1;
   if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32, nullptr))
     return true;
 
@@ -339,7 +339,7 @@
                          m_Flags, true, FXDIB_BLEND_NORMAL)) {
     image_render.Continue(nullptr);
   }
-  CFX_FxgeDevice bitmap_device2;
+  CFX_DefaultRenderDevice bitmap_device2;
   if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb,
                              nullptr))
     return true;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.h b/core/fpdfapi/render/cpdf_imagerenderer.h
index 30cbf38..4468b47 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.h
+++ b/core/fpdfapi/render/cpdf_imagerenderer.h
@@ -15,7 +15,7 @@
 
 class CFX_DIBitmap;
 class CFX_DIBSource;
-class CFX_FxgeDevice;
+class CFX_DefaultRenderDevice;
 class CFX_ImageTransformer;
 class CPDF_ImageObject;
 class CPDF_PageObject;
@@ -55,8 +55,8 @@
   bool NotDrawing() const;
   FX_RECT GetDrawRect() const;
   CFX_Matrix GetDrawMatrix(const FX_RECT& rect) const;
-  void CalculateDrawImage(CFX_FxgeDevice* bitmap_device1,
-                          CFX_FxgeDevice* bitmap_device2,
+  void CalculateDrawImage(CFX_DefaultRenderDevice* bitmap_device1,
+                          CFX_DefaultRenderDevice* bitmap_device2,
                           const CFX_RetainPtr<CFX_DIBSource>& pDIBSource,
                           CFX_Matrix* pNewMatrix,
                           const FX_RECT& rect) const;
diff --git a/core/fpdfapi/render/cpdf_rendercontext.cpp b/core/fpdfapi/render/cpdf_rendercontext.cpp
index e4ef9af..c8626af 100644
--- a/core/fpdfapi/render/cpdf_rendercontext.cpp
+++ b/core/fpdfapi/render/cpdf_rendercontext.cpp
@@ -35,7 +35,7 @@
     const CPDF_PageObject* pObj,
     const CPDF_RenderOptions* pOptions,
     CFX_Matrix* pFinalMatrix) {
-  CFX_FxgeDevice device;
+  CFX_DefaultRenderDevice device;
   device.Attach(pBuffer, false, nullptr, false);
 
   FX_RECT rect(0, 0, device.GetWidth(), device.GetHeight());
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 44af9a2..d485d1d 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -48,7 +48,7 @@
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/cfx_maybe_owned.h"
 #include "core/fxcrt/fx_safe_types.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
@@ -819,7 +819,7 @@
   ASSERT(type == kCoonsPatchMeshShading ||
          type == kTensorProductPatchMeshShading);
 
-  CFX_FxgeDevice device;
+  CFX_DefaultRenderDevice device;
   device.Attach(pBitmap, false, nullptr, false);
   CPDF_MeshStream stream(type, funcs, pShadingStream, pCS);
   if (!stream.Load())
@@ -904,7 +904,7 @@
                        pPattern->colored() ? FXDIB_Argb : FXDIB_8bppMask)) {
     return nullptr;
   }
-  CFX_FxgeDevice bitmap_device;
+  CFX_DefaultRenderDevice bitmap_device;
   bitmap_device.Attach(pBitmap, false, nullptr, false);
   pBitmap->Clear(0);
   CFX_FloatRect cell_bbox = pPattern->bbox();
@@ -1538,7 +1538,7 @@
   float scaleY = fabs(deviceCTM.d);
   int width = FXSYS_round((float)rect.Width() * scaleX);
   int height = FXSYS_round((float)rect.Height() * scaleY);
-  CFX_FxgeDevice bitmap_device;
+  CFX_DefaultRenderDevice bitmap_device;
   CFX_RetainPtr<CFX_DIBitmap> oriDevice;
   if (!isolated && (m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) {
     oriDevice = pdfium::MakeRetain<CFX_DIBitmap>();
@@ -1563,7 +1563,7 @@
       return true;
 
     pTextMask->Clear(0);
-    CFX_FxgeDevice text_device;
+    CFX_DefaultRenderDevice text_device;
     text_device.Attach(pTextMask, false, nullptr, false);
     for (uint32_t i = 0; i < pPageObj->m_ClipPath.GetTextCount(); i++) {
       CPDF_TextObject* textobj = pPageObj->m_ClipPath.GetText(i);
@@ -1659,7 +1659,7 @@
   FinalMatrix.Scale(scaleX, scaleY);
   pBackdrop->Clear(pBackdrop->HasAlpha() ? 0 : 0xffffffff);
 
-  CFX_FxgeDevice device;
+  CFX_DefaultRenderDevice device;
   device.Attach(pBackdrop, false, nullptr, false);
   m_pContext->Render(&device, pObj, &m_Options, &FinalMatrix);
   return pBackdrop;
@@ -1885,7 +1885,7 @@
         matrix.TransformRect(rect_f);
 
         FX_RECT rect = rect_f.GetOuterRect();
-        CFX_FxgeDevice bitmap_device;
+        CFX_DefaultRenderDevice bitmap_device;
         if (!bitmap_device.Create((int)(rect.Width() * sa),
                                   (int)(rect.Height() * sd), FXDIB_Argb,
                                   nullptr)) {
@@ -2537,7 +2537,7 @@
                  pGroup);
   form.ParseContent(nullptr, nullptr, nullptr);
 
-  CFX_FxgeDevice bitmap_device;
+  CFX_DefaultRenderDevice bitmap_device;
   bool bLuminosity = pSMaskDict->GetStringFor("S") != "Alpha";
   int width = pClipRect->right - pClipRect->left;
   int height = pClipRect->bottom - pClipRect->top;
diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
index 927d232..74d506c 100644
--- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
+++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
@@ -8,7 +8,7 @@
 
 #include "core/fpdfapi/render/cpdf_rendercontext.h"
 #include "core/fpdfapi/render/cpdf_renderoptions.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "third_party/base/ptr_util.h"
 
@@ -44,7 +44,7 @@
     if (dpiv > max_dpi)
       m_Matrix.Scale(1.0f, (float)(max_dpi) / (float)dpiv);
   }
-  m_pBitmapDevice = pdfium::MakeUnique<CFX_FxgeDevice>();
+  m_pBitmapDevice = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
   FXDIB_Format dibFormat = FXDIB_Rgb;
   int32_t bpp = 24;
   if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_ALPHA_OUTPUT) {
diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.h b/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
index f802349..92fabef 100644
--- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
+++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
@@ -10,7 +10,7 @@
 #include <memory>
 
 #include "core/fxcrt/fx_coordinates.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 
 class CFX_RenderDevice;
 class CPDF_PageObject;
@@ -39,7 +39,7 @@
   CPDF_RenderContext* m_pContext;
   FX_RECT m_Rect;
   const CPDF_PageObject* m_pObject;
-  std::unique_ptr<CFX_FxgeDevice> m_pBitmapDevice;
+  std::unique_ptr<CFX_DefaultRenderDevice> m_pBitmapDevice;
   CFX_Matrix m_Matrix;
 };
 
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 128d50c..08a6e09 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -10,7 +10,7 @@
 #include <utility>
 
 #include "core/fxcodec/fx_codec.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
@@ -1561,14 +1561,15 @@
 }
 
 #ifndef _SKIA_SUPPORT_
-CFX_FxgeDevice::CFX_FxgeDevice() {}
+CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() {}
 
-CFX_FxgeDevice::~CFX_FxgeDevice() {}
+CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() {}
 
-bool CFX_FxgeDevice::Attach(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
-                            bool bRgbByteOrder,
-                            const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice,
-                            bool bGroupKnockout) {
+bool CFX_DefaultRenderDevice::Attach(
+    const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
+    bool bRgbByteOrder,
+    const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice,
+    bool bGroupKnockout) {
   if (!pBitmap)
     return false;
 
@@ -1578,10 +1579,11 @@
   return true;
 }
 
-bool CFX_FxgeDevice::Create(int width,
-                            int height,
-                            FXDIB_Format format,
-                            const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice) {
+bool CFX_DefaultRenderDevice::Create(
+    int width,
+    int height,
+    FXDIB_Format format,
+    const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice) {
   auto pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
   if (!pBitmap->Create(width, height, format))
     return false;
diff --git a/core/fxge/cfx_fxgedevice.h b/core/fxge/cfx_defaultrenderdevice.h
similarity index 81%
rename from core/fxge/cfx_fxgedevice.h
rename to core/fxge/cfx_defaultrenderdevice.h
index 4e8a7f4..e2dc1f3 100644
--- a/core/fxge/cfx_fxgedevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -4,18 +4,18 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXGE_CFX_FXGEDEVICE_H_
-#define CORE_FXGE_CFX_FXGEDEVICE_H_
+#ifndef CORE_FXGE_CFX_DEFAULTRENDERDEVICE_H_
+#define CORE_FXGE_CFX_DEFAULTRENDERDEVICE_H_
 
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/fx_dib.h"
 
 class SkPictureRecorder;
 
-class CFX_FxgeDevice : public CFX_RenderDevice {
+class CFX_DefaultRenderDevice : public CFX_RenderDevice {
  public:
-  CFX_FxgeDevice();
-  ~CFX_FxgeDevice() override;
+  CFX_DefaultRenderDevice();
+  ~CFX_DefaultRenderDevice() override;
 
   bool Attach(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
               bool bRgbByteOrder,
@@ -40,4 +40,4 @@
 #endif
 };
 
-#endif  // CORE_FXGE_CFX_FXGEDEVICE_H_
+#endif  // CORE_FXGE_CFX_DEFAULTRENDERDEVICE_H_
diff --git a/core/fxge/cfx_windowsdevice.h b/core/fxge/cfx_windowsrenderdevice.h
similarity index 76%
rename from core/fxge/cfx_windowsdevice.h
rename to core/fxge/cfx_windowsrenderdevice.h
index 2d17cb7..7156dcd 100644
--- a/core/fxge/cfx_windowsdevice.h
+++ b/core/fxge/cfx_windowsrenderdevice.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXGE_CFX_WINDOWSDEVICE_H_
-#define CORE_FXGE_CFX_WINDOWSDEVICE_H_
+#ifndef CORE_FXGE_CFX_WINDOWSRENDERDEVICE_H_
+#define CORE_FXGE_CFX_WINDOWSRENDERDEVICE_H_
 
 #ifdef _WIN32
 #ifndef _WINDOWS_
@@ -27,14 +27,14 @@
 #endif
 extern int g_pdfium_print_postscript_level;
 
-class CFX_WindowsDevice : public CFX_RenderDevice {
+class CFX_WindowsRenderDevice : public CFX_RenderDevice {
  public:
   static IFX_RenderDeviceDriver* CreateDriver(HDC hDC);
 
-  explicit CFX_WindowsDevice(HDC hDC);
-  ~CFX_WindowsDevice() override;
+  explicit CFX_WindowsRenderDevice(HDC hDC);
+  ~CFX_WindowsRenderDevice() override;
 };
 
 #endif  // _WIN32
 
-#endif  // CORE_FXGE_CFX_WINDOWSDEVICE_H_
+#endif  // CORE_FXGE_CFX_WINDOWSRENDERDEVICE_H_
diff --git a/core/fxge/ge/cfx_renderdevice.cpp b/core/fxge/ge/cfx_renderdevice.cpp
index 6a3f9c7..d2924bb 100644
--- a/core/fxge/ge/cfx_renderdevice.cpp
+++ b/core/fxge/ge/cfx_renderdevice.cpp
@@ -12,8 +12,8 @@
 #include <vector>
 
 #include "core/fxcrt/fx_safe_types.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_facecache.h"
-#include "core/fxge/cfx_fxgedevice.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
@@ -626,7 +626,7 @@
       return false;
     Backdrop->Copy(bitmap);
   }
-  CFX_FxgeDevice bitmap_device;
+  CFX_DefaultRenderDevice bitmap_device;
   bitmap_device.Attach(bitmap, false, Backdrop, true);
 
   CFX_Matrix matrix;
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 3ca022b..e4d580d 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -14,7 +14,7 @@
 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/fx_memory.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
@@ -2331,26 +2331,28 @@
 }
 #endif  // _SKIA_SUPPORT_
 
-CFX_FxgeDevice::CFX_FxgeDevice() {}
+CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() {}
 
 #ifdef _SKIA_SUPPORT_
-void CFX_FxgeDevice::Clear(uint32_t color) {
+void CFX_DefaultRenderDevice::Clear(uint32_t color) {
   CFX_SkiaDeviceDriver* skDriver =
       static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver());
   skDriver->Clear(color);
 }
 
-SkPictureRecorder* CFX_FxgeDevice::CreateRecorder(int size_x, int size_y) {
+SkPictureRecorder* CFX_DefaultRenderDevice::CreateRecorder(int size_x,
+                                                           int size_y) {
   CFX_SkiaDeviceDriver* skDriver = new CFX_SkiaDeviceDriver(size_x, size_y);
   SetDeviceDriver(pdfium::WrapUnique(skDriver));
   return skDriver->GetRecorder();
 }
 #endif  // _SKIA_SUPPORT_
 
-bool CFX_FxgeDevice::Attach(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
-                            bool bRgbByteOrder,
-                            const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice,
-                            bool bGroupKnockout) {
+bool CFX_DefaultRenderDevice::Attach(
+    const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
+    bool bRgbByteOrder,
+    const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice,
+    bool bGroupKnockout) {
   if (!pBitmap)
     return false;
   SetBitmap(pBitmap);
@@ -2360,7 +2362,7 @@
 }
 
 #ifdef _SKIA_SUPPORT_
-bool CFX_FxgeDevice::AttachRecorder(SkPictureRecorder* recorder) {
+bool CFX_DefaultRenderDevice::AttachRecorder(SkPictureRecorder* recorder) {
   if (!recorder)
     return false;
   SetDeviceDriver(pdfium::MakeUnique<CFX_SkiaDeviceDriver>(recorder));
@@ -2368,10 +2370,11 @@
 }
 #endif  // _SKIA_SUPPORT_
 
-bool CFX_FxgeDevice::Create(int width,
-                            int height,
-                            FXDIB_Format format,
-                            const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice) {
+bool CFX_DefaultRenderDevice::Create(
+    int width,
+    int height,
+    FXDIB_Format format,
+    const CFX_RetainPtr<CFX_DIBitmap>& pOriDevice) {
   auto pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
   if (!pBitmap->Create(width, height, format)) {
     return false;
@@ -2382,12 +2385,12 @@
   return true;
 }
 
-CFX_FxgeDevice::~CFX_FxgeDevice() {
+CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() {
   Flush();
 }
 
 #ifdef _SKIA_SUPPORT_
-void CFX_FxgeDevice::DebugVerifyBitmapIsPreMultiplied() const {
+void CFX_DefaultRenderDevice::DebugVerifyBitmapIsPreMultiplied() const {
 #ifdef SK_DEBUG
   CFX_SkiaDeviceDriver* skDriver =
       static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver());
@@ -2396,7 +2399,7 @@
 #endif  // SK_DEBUG
 }
 
-bool CFX_FxgeDevice::SetBitsWithMask(
+bool CFX_DefaultRenderDevice::SetBitsWithMask(
     const CFX_RetainPtr<CFX_DIBSource>& pBitmap,
     const CFX_RetainPtr<CFX_DIBSource>& pMask,
     int left,
diff --git a/core/fxge/skia/fx_skia_device_unittest.cpp b/core/fxge/skia/fx_skia_device_unittest.cpp
index a47a50c..99b76d2 100644
--- a/core/fxge/skia/fx_skia_device_unittest.cpp
+++ b/core/fxge/skia/fx_skia_device_unittest.cpp
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/skia/fx_skia_device.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
-#include "core/fxge/skia/fx_skia_device.h"
 #include "fpdfsdk/fsdk_define.h"
 #include "public/fpdfview.h"
 #include "testing/fx_string_testhelpers.h"
@@ -124,7 +124,7 @@
   if (!bitmap)
     return;
   FPDFBitmap_FillRect(bitmap, 0, 0, w, h, 0x00000000);
-  CFX_FxgeDevice geDevice;
+  CFX_DefaultRenderDevice geDevice;
   CFX_RetainPtr<CFX_DIBitmap> pBitmap(CFXBitmapFromFPDFBitmap(bitmap));
   geDevice.Attach(pBitmap, false, nullptr, false);
   CFX_SkiaDeviceDriver* driver =
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index 43d53e1..2747339 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -15,7 +15,7 @@
 #include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/fx_system.h"
-#include "core/fxge/cfx_windowsdevice.h"
+#include "core/fxge/cfx_windowsrenderdevice.h"
 #include "core/fxge/dib/cfx_dibextractor.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
 #include "core/fxge/dib/cstretchengine.h"
@@ -1358,14 +1358,14 @@
   return false;
 }
 
-CFX_WindowsDevice::CFX_WindowsDevice(HDC hDC) {
+CFX_WindowsRenderDevice::CFX_WindowsRenderDevice(HDC hDC) {
   SetDeviceDriver(pdfium::WrapUnique(CreateDriver(hDC)));
 }
 
-CFX_WindowsDevice::~CFX_WindowsDevice() {}
+CFX_WindowsRenderDevice::~CFX_WindowsRenderDevice() {}
 
 // static
-IFX_RenderDeviceDriver* CFX_WindowsDevice::CreateDriver(HDC hDC) {
+IFX_RenderDeviceDriver* CFX_WindowsRenderDevice::CreateDriver(HDC hDC) {
   int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
   int obj_type = ::GetObjectType(hDC);
   bool use_printer = device_type == DT_RASPRINTER ||
diff --git a/core/fxge/win32/fx_win32_print.cpp b/core/fxge/win32/fx_win32_print.cpp
index f060c04..e036a8c 100644
--- a/core/fxge/win32/fx_win32_print.cpp
+++ b/core/fxge/win32/fx_win32_print.cpp
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "core/fxcrt/fx_system.h"
-#include "core/fxge/cfx_windowsdevice.h"
+#include "core/fxge/cfx_windowsrenderdevice.h"
 #include "core/fxge/dib/cfx_dibextractor.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
 #include "core/fxge/dib/cstretchengine.h"
diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp
index 927bcdd..fc6ceab 100644
--- a/fpdfsdk/fpdf_progressive.cpp
+++ b/fpdfsdk/fpdf_progressive.cpp
@@ -12,7 +12,7 @@
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/render/cpdf_progressiverenderer.h"
 #include "core/fxcrt/fx_memory.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "fpdfsdk/fsdk_define.h"
 #include "fpdfsdk/fsdk_pauseadapter.h"
@@ -51,8 +51,8 @@
   pPage->SetRenderContext(std::move(pOwnedContext));
 
   CFX_RetainPtr<CFX_DIBitmap> pBitmap(CFXBitmapFromFPDFBitmap(bitmap));
-  auto pOwnedDevice = pdfium::MakeUnique<CFX_FxgeDevice>();
-  CFX_FxgeDevice* pDevice = pOwnedDevice.get();
+  auto pOwnedDevice = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
+  CFX_DefaultRenderDevice* pDevice = pOwnedDevice.get();
   pContext->m_pDevice = std::move(pOwnedDevice);
   pDevice->Attach(pBitmap, !!(flags & FPDF_REVERSE_BYTE_ORDER), nullptr, false);
 
diff --git a/fpdfsdk/fpdfformfill.cpp b/fpdfsdk/fpdfformfill.cpp
index a050dc0..de200cf 100644
--- a/fpdfsdk/fpdfformfill.cpp
+++ b/fpdfsdk/fpdfformfill.cpp
@@ -16,7 +16,7 @@
 #include "core/fpdfdoc/cpdf_formfield.h"
 #include "core/fpdfdoc/cpdf_interform.h"
 #include "core/fpdfdoc/cpdf_occontext.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
 #include "fpdfsdk/cpdfsdk_interform.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
@@ -109,7 +109,7 @@
       pPage->GetDisplayMatrix(start_x, start_y, size_x, size_y, rotate);
   FX_RECT clip(start_x, start_y, start_x + size_x, start_y + size_y);
 
-  auto pDevice = pdfium::MakeUnique<CFX_FxgeDevice>();
+  auto pDevice = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
 #ifdef _SKIA_SUPPORT_
   pDevice->AttachRecorder(static_cast<SkPictureRecorder*>(recorder));
 #endif
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index bda9111..5fb963a 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -28,7 +28,7 @@
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/fx_safe_types.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
@@ -50,7 +50,7 @@
 #endif  // PDF_ENABLE_XFA
 
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-#include "core/fxge/cfx_windowsdevice.h"
+#include "core/fxge/cfx_windowsrenderdevice.h"
 #endif
 
 namespace {
@@ -807,7 +807,7 @@
     pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
     pBitmap->Create(size_x, size_y, FXDIB_Argb);
     pBitmap->Clear(0x00ffffff);
-    CFX_FxgeDevice* pDevice = new CFX_FxgeDevice;
+    CFX_DefaultRenderDevice* pDevice = new CFX_DefaultRenderDevice;
     pContext->m_pDevice = pdfium::WrapUnique(pDevice);
     pDevice->Attach(pBitmap, false, nullptr, false);
     if (bHasMask) {
@@ -815,7 +815,7 @@
       pContext->m_pOptions->m_Flags |= RENDER_BREAKFORMASKS;
     }
   } else {
-    pContext->m_pDevice = pdfium::MakeUnique<CFX_WindowsDevice>(dc);
+    pContext->m_pDevice = pdfium::MakeUnique<CFX_WindowsRenderDevice>(dc);
   }
 
   FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
@@ -842,7 +842,7 @@
     // pause after each image mask.
     pPage->SetRenderContext(pdfium::MakeUnique<CPDF_PageRenderContext>());
     pContext = pPage->GetRenderContext();
-    pContext->m_pDevice = pdfium::MakeUnique<CFX_WindowsDevice>(dc);
+    pContext->m_pDevice = pdfium::MakeUnique<CFX_WindowsRenderDevice>(dc);
     pContext->m_pOptions = pdfium::MakeUnique<CPDF_RenderOptions>();
     pContext->m_pOptions->m_Flags |= RENDER_BREAKFORMASKS;
     FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
@@ -858,7 +858,7 @@
       pContext->m_pRenderer->Continue(nullptr);
     }
   } else if (bNewBitmap) {
-    CFX_WindowsDevice WinDC(dc);
+    CFX_WindowsRenderDevice WinDC(dc);
     if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) {
       auto pDst = pdfium::MakeRetain<CFX_DIBitmap>();
       int pitch = pBitmap->GetPitch();
@@ -894,7 +894,7 @@
   CPDF_PageRenderContext* pContext = new CPDF_PageRenderContext;
   pPage->SetRenderContext(pdfium::WrapUnique(pContext));
 
-  CFX_FxgeDevice* pDevice = new CFX_FxgeDevice;
+  CFX_DefaultRenderDevice* pDevice = new CFX_DefaultRenderDevice;
   pContext->m_pDevice.reset(pDevice);
 
   CFX_RetainPtr<CFX_DIBitmap> pBitmap(CFXBitmapFromFPDFBitmap(bitmap));
@@ -924,7 +924,7 @@
   CPDF_PageRenderContext* pContext = new CPDF_PageRenderContext;
   pPage->SetRenderContext(pdfium::WrapUnique(pContext));
 
-  CFX_FxgeDevice* pDevice = new CFX_FxgeDevice;
+  CFX_DefaultRenderDevice* pDevice = new CFX_DefaultRenderDevice;
   pContext->m_pDevice.reset(pDevice);
 
   CFX_RetainPtr<CFX_DIBitmap> pBitmap(CFXBitmapFromFPDFBitmap(bitmap));
@@ -959,7 +959,7 @@
 
   CPDF_PageRenderContext* pContext = new CPDF_PageRenderContext;
   pPage->SetRenderContext(pdfium::WrapUnique(pContext));
-  CFX_FxgeDevice* skDevice = new CFX_FxgeDevice;
+  CFX_DefaultRenderDevice* skDevice = new CFX_DefaultRenderDevice;
   FPDF_RECORDER recorder = skDevice->CreateRecorder(size_x, size_y);
   pContext->m_pDevice.reset(skDevice);
   FPDF_RenderPage_Retail(pContext, page, 0, 0, size_x, size_y, 0, 0, true,
@@ -1114,7 +1114,7 @@
   if (!bitmap)
     return;
 
-  CFX_FxgeDevice device;
+  CFX_DefaultRenderDevice device;
   CFX_RetainPtr<CFX_DIBitmap> pBitmap(CFXBitmapFromFPDFBitmap(bitmap));
   device.Attach(pBitmap, false, nullptr, false);
   if (!pBitmap->HasAlpha())
diff --git a/fxbarcode/oned/BC_OneDimWriter.cpp b/fxbarcode/oned/BC_OneDimWriter.cpp
index 5df7dca..66d62ca 100644
--- a/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -26,7 +26,7 @@
 #include <memory>
 #include <vector>
 
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index d44eb39..054d7a1 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -27,7 +27,7 @@
 #include <memory>
 #include <vector>
 
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index 052e0d0..3eb1ff8 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -27,7 +27,7 @@
 #include <memory>
 #include <vector>
 
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/common/BC_CommonBitMatrix.h"
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index e5062a6..aaf0c52 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -24,7 +24,7 @@
 
 #include <vector>
 
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index d5706dd..b41ee1f 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -119,7 +119,7 @@
   ASSERT(pDIB);
 
   m_pRenderDevice.reset();
-  CFX_FxgeDevice* device = new CFX_FxgeDevice;
+  CFX_DefaultRenderDevice* device = new CFX_DefaultRenderDevice;
   device->Attach(pDIB, false, nullptr, false);
   m_pRenderDevice = pdfium::MakeUnique<CFDE_RenderDevice>(device, false);
 }
diff --git a/xfa/fde/cfde_textout.h b/xfa/fde/cfde_textout.h
index c505c07..360c305 100644
--- a/xfa/fde/cfde_textout.h
+++ b/xfa/fde/cfde_textout.h
@@ -12,7 +12,7 @@
 #include <vector>
 
 #include "core/fxcrt/cfx_char.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/fx_dib.h"
 #include "xfa/fgas/font/cfgas_fontmgr.h"
diff --git a/xfa/fwl/cfx_barcode_unittest.cpp b/xfa/fwl/cfx_barcode_unittest.cpp
index a6b9087..3283dd1 100644
--- a/xfa/fwl/cfx_barcode_unittest.cpp
+++ b/xfa/fwl/cfx_barcode_unittest.cpp
@@ -10,7 +10,7 @@
 
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
@@ -22,7 +22,7 @@
     BC_Library_Init();
     barcode_ = pdfium::MakeUnique<CFX_Barcode>();
 
-    auto device = pdfium::MakeUnique<CFX_FxgeDevice>();
+    auto device = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
     auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
     if (bitmap->Create(640, 480, FXDIB_Rgb32))
       bitmap_ = bitmap;
diff --git a/xfa/fxgraphics/cfx_graphics.cpp b/xfa/fxgraphics/cfx_graphics.cpp
index c02c306..79e4b7a 100644
--- a/xfa/fxgraphics/cfx_graphics.cpp
+++ b/xfa/fxgraphics/cfx_graphics.cpp
@@ -8,7 +8,7 @@
 
 #include <memory>
 
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/cfx_unicodeencoding.h"
@@ -367,7 +367,7 @@
 
   FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top),
                FXSYS_round(rectf.right), FXSYS_round(rectf.bottom));
-  CFX_FxgeDevice device;
+  CFX_DefaultRenderDevice device;
   device.Attach(bmp, false, nullptr, false);
   device.FillRect(&rect, m_info.fillColor->m_info.pattern->m_backArgb);
   for (int32_t j = rect.bottom; j < rect.top; j += mask->GetHeight()) {
diff --git a/xfa/fxgraphics/cfx_graphics.h b/xfa/fxgraphics/cfx_graphics.h
index 264ec94..b2e2cd1 100644
--- a/xfa/fxgraphics/cfx_graphics.h
+++ b/xfa/fxgraphics/cfx_graphics.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "core/fxcrt/fx_system.h"
-#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/fx_dib.h"
