Global Metrics

path: .metrics.nexits.sum
old: 1.0
new: 7.0

path: .metrics.mi.mi_original
old: 75.70516622931807
new: 45.512626480625045

path: .metrics.mi.mi_visual_studio
old: 44.272027034688925
new: 26.615571041301195

path: .metrics.mi.mi_sei
old: 65.77279863506146
new: 18.791589844624088

path: .metrics.cognitive.sum
old: 0.0
new: 14.0

path: .metrics.cognitive.average
old: 0.0
new: 2.0

path: .metrics.loc.cloc
old: 9.0
new: 17.0

path: .metrics.loc.blank
old: 11.0
new: 17.0

path: .metrics.loc.lloc
old: 1.0
new: 37.0

path: .metrics.loc.sloc
old: 46.0
new: 132.0

path: .metrics.loc.ploc
old: 26.0
new: 98.0

path: .metrics.halstead.difficulty
old: 8.068965517241379
new: 22.533333333333335

path: .metrics.halstead.time
old: 206.54286693665577
new: 3240.4474484172188

path: .metrics.halstead.N2
old: 39.0
new: 169.0

path: .metrics.halstead.volume
old: 460.7494723971552
new: 2588.5231096823936

path: .metrics.halstead.estimated_program_length
old: 183.90099886735345
new: 553.5999636849383

path: .metrics.halstead.N1
old: 47.0
new: 225.0

path: .metrics.halstead.bugs
old: 0.07999580553992665
new: 0.5013377456696639

path: .metrics.halstead.length
old: 86.0
new: 394.0

path: .metrics.halstead.purity_ratio
old: 2.1383837077599237
new: 1.4050760499617725

path: .metrics.halstead.vocabulary
old: 41.0
new: 95.0

path: .metrics.halstead.effort
old: 3717.771604859804
new: 58328.05407150994

path: .metrics.halstead.n2
old: 29.0
new: 75.0

path: .metrics.halstead.n1
old: 12.0
new: 20.0

path: .metrics.halstead.level
old: 0.12393162393162394
new: 0.04437869822485207

path: .metrics.nargs.average
old: 0.0
new: 1.4285714285714286

path: .metrics.nargs.sum
old: 0.0
new: 10.0

path: .metrics.nom.total
old: 1.0
new: 7.0

path: .metrics.nom.functions
old: 1.0
new: 7.0

path: .metrics.cyclomatic.average
old: 1.2
new: 2.4

path: .metrics.cyclomatic.sum
old: 6.0
new: 24.0

Spaces Data

Minimal test - lines (21, 131)

path: .spaces[0].spaces[0].metrics.cognitive.average
old: 0.0
new: 2.0

path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 0.0
new: 14.0

path: .spaces[0].spaces[0].metrics.halstead.time
old: 187.19436776055704
new: 3306.3692251412576

path: .spaces[0].spaces[0].metrics.halstead.effort
old: 3369.4986196900268
new: 59514.64605254264

path: .spaces[0].spaces[0].metrics.halstead.n1
old: 12.0
new: 20.0

path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.07491847591154338
new: 0.5081141804170053

path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 36.0
new: 85.0

path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 8.25
new: 24.307692307692307

path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.12121212121212122
new: 0.04113924050632912

path: .spaces[0].spaces[0].metrics.halstead.N1
old: 46.0
new: 224.0

path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.9374512661514127
new: 1.2510274077083685

path: .spaces[0].spaces[0].metrics.halstead.volume
old: 408.42407511394265
new: 2448.387337604602

path: .spaces[0].spaces[0].metrics.halstead.length
old: 79.0
new: 382.0

path: .spaces[0].spaces[0].metrics.halstead.n2
old: 24.0
new: 65.0

path: .spaces[0].spaces[0].metrics.halstead.N2
old: 33.0
new: 158.0

path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 153.0586500259616
new: 477.8924697445968

path: .spaces[0].spaces[0].metrics.nargs.average
old: 0.0
new: 1.4285714285714286

path: .spaces[0].spaces[0].metrics.nargs.sum
old: 0.0
new: 10.0

path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 4.0
new: 22.0

path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.3333333333333333
new: 2.75

path: .spaces[0].spaces[0].metrics.nom.total
old: 1.0
new: 7.0

path: .spaces[0].spaces[0].metrics.nom.functions
old: 1.0
new: 7.0

path: .spaces[0].spaces[0].metrics.nexits.sum
old: 1.0
new: 7.0

path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 84.26581617538443
new: 49.06904948098064

path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 60.46262233930203
new: 19.75157722517374

path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 49.278255073324225
new: 28.695350573672886

path: .spaces[0].spaces[0].metrics.loc.lloc
old: 1.0
new: 37.0

path: .spaces[0].spaces[0].metrics.loc.blank
old: 10.0
new: 16.0

path: .spaces[0].spaces[0].metrics.loc.cloc
old: 1.0
new: 10.0

path: .spaces[0].spaces[0].metrics.loc.sloc
old: 29.0
new: 111.0

path: .spaces[0].spaces[0].metrics.loc.ploc
old: 18.0
new: 85.0

Code

namespace widget {

using namespace mozilla::layers;

WindowSurfaceProvider::WindowSurfaceProvider()
    : mIsX11Display(false),
      mXDisplay(nullptr),
      mXWindow(0),
      mXVisual(nullptr),
      mXDepth(0),
      mWindowSurface(nullptr)
#ifdef MOZ_WAYLAND
      ,
      mWidget(nullptr)
#endif
      ,
      mIsShaped(false) {
}

void WindowSurfaceProvider::Initialize(Display* aDisplay, Window aWindow,
                                       Visual* aVisual, int aDepth,
                                       bool aIsShaped) {
  // We should not be initialized
  MOZ_ASSERT(!mXDisplay);

  // This should also be a valid initialization
  MOZ_ASSERT(aDisplay && aWindow != X11None && aVisual);

  mXDisplay = aDisplay;
  mXWindow = aWindow;
  mXVisual = aVisual;
  mXDepth = aDepth;
  mIsShaped = aIsShaped;
  mIsX11Display = true;
}

#ifdef MOZ_WAYLAND
void WindowSurfaceProvider::Initialize(nsWindow* aWidget) {
  mWidget = aWidget;
  mIsX11Display = false;
}
#endif

void WindowSurfaceProvider::CleanupResources() { mWindowSurface = nullptr; }

UniquePtr WindowSurfaceProvider::CreateWindowSurface() {
#ifdef MOZ_WAYLAND
  if (!mIsX11Display) {
    LOGDRAW(("Drawing to nsWindow %p will use wl_surface\n", mWidget));
    return MakeUnique(mWidget);
  }
#endif

  // We should be initialized
  MOZ_ASSERT(mXDisplay);

  // Blit to the window with the following priority:
  // 1. XRender (iff XRender is enabled && we are in-process)
  // 2. MIT-SHM
  // 3. XPutImage
  if (!mIsShaped && gfx::gfxVars::UseXRender()) {
    LOGDRAW(("Drawing to Window 0x%lx will use XRender\n", mXWindow));
    return MakeUnique(mXDisplay, mXWindow, mXVisual,
                                            mXDepth);
  }

#ifdef MOZ_HAVE_SHMIMAGE
  if (!mIsShaped && nsShmImage::UseShm()) {
    LOGDRAW(("Drawing to Window 0x%lx will use MIT-SHM\n", mXWindow));
    return MakeUnique(mXDisplay, mXWindow, mXVisual,
                                           mXDepth);
  }
#endif  // MOZ_HAVE_SHMIMAGE

  LOGDRAW(("Drawing to Window 0x%lx will use XPutImage\n", mXWindow));
  return MakeUnique(mXDisplay, mXWindow, mXVisual,
                                           mXDepth, mIsShaped);
}

already_AddRefed
WindowSurfaceProvider::StartRemoteDrawingInRegion(
    const LayoutDeviceIntRegion& aInvalidRegion,
    layers::BufferMode* aBufferMode) {
  if (aInvalidRegion.IsEmpty()) return nullptr;

  if (!mWindowSurface) {
    mWindowSurface = CreateWindowSurface();
    if (!mWindowSurface) return nullptr;
  }

  *aBufferMode = BufferMode::BUFFER_NONE;
  RefPtr dt = nullptr;
  if (!(dt = mWindowSurface->Lock(aInvalidRegion)) && mIsX11Display &&
      !mWindowSurface->IsFallback()) {
    // We can't use WindowSurfaceX11Image fallback on Wayland but
    // Lock() call on WindowSurfaceWayland should never fail.
    gfxWarningOnce()
        << "Failed to lock WindowSurface, falling back to XPutImage backend.";
    mWindowSurface = MakeUnique(
        mXDisplay, mXWindow, mXVisual, mXDepth, mIsShaped);
    dt = mWindowSurface->Lock(aInvalidRegion);
  }
  return dt.forget();
}

void WindowSurfaceProvider::EndRemoteDrawingInRegion(
    gfx::DrawTarget* aDrawTarget, const LayoutDeviceIntRegion& aInvalidRegion) {
  if (mWindowSurface) mWindowSurface->Commit(aInvalidRegion);
}

}  // namespace widget

Minimal test - lines (20, 132)

path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 7.0

path: .spaces[0].metrics.mi.mi_original
old: 82.78580204685679
new: 48.50893006937622

path: .spaces[0].metrics.mi.mi_visual_studio
old: 48.41274973500397
new: 28.367795362208316

path: .spaces[0].metrics.mi.mi_sei
old: 63.41386871645268
new: 19.8620484126619

path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 10.0

path: .spaces[0].metrics.nargs.average
old: 0.0
new: 1.4285714285714286

path: .spaces[0].metrics.nom.functions
old: 1.0
new: 7.0

path: .spaces[0].metrics.nom.total
old: 1.0
new: 7.0

path: .spaces[0].metrics.cyclomatic.average
old: 1.25
new: 2.5555555555555554

path: .spaces[0].metrics.cyclomatic.sum
old: 5.0
new: 23.0

path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 2.0

path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 14.0

path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 37.0

path: .spaces[0].metrics.loc.blank
old: 9.0
new: 15.0

path: .spaces[0].metrics.loc.ploc
old: 20.0
new: 87.0

path: .spaces[0].metrics.loc.cloc
old: 2.0
new: 11.0

path: .spaces[0].metrics.loc.sloc
old: 31.0
new: 113.0

path: .spaces[0].metrics.halstead.difficulty
old: 8.16
new: 24.09090909090909

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.964394503123728
new: 1.263980660873451

path: .spaces[0].metrics.halstead.vocabulary
old: 37.0
new: 86.0

path: .spaces[0].metrics.halstead.estimated_program_length
old: 159.11595475302198
new: 485.3685737754052

path: .spaces[0].metrics.halstead.level
old: 0.12254901960784312
new: 0.04150943396226416

path: .spaces[0].metrics.halstead.n2
old: 25.0
new: 66.0

path: .spaces[0].metrics.halstead.n1
old: 12.0
new: 20.0

path: .spaces[0].metrics.halstead.time
old: 191.29112758589503
new: 3302.7106133256843

path: .spaces[0].metrics.halstead.N2
old: 34.0
new: 159.0

path: .spaces[0].metrics.halstead.volume
old: 421.96572261594497
new: 2467.685665805606

path: .spaces[0].metrics.halstead.effort
old: 3443.240296546111
new: 59448.79103986232

path: .spaces[0].metrics.halstead.N1
old: 47.0
new: 225.0

path: .spaces[0].metrics.halstead.bugs
old: 0.07600759076519305
new: 0.5077392806551302

path: .spaces[0].metrics.halstead.length
old: 81.0
new: 384.0

Code

namespace mozilla {
namespace widget {

using namespace mozilla::layers;

WindowSurfaceProvider::WindowSurfaceProvider()
    : mIsX11Display(false),
      mXDisplay(nullptr),
      mXWindow(0),
      mXVisual(nullptr),
      mXDepth(0),
      mWindowSurface(nullptr)
#ifdef MOZ_WAYLAND
      ,
      mWidget(nullptr)
#endif
      ,
      mIsShaped(false) {
}

void WindowSurfaceProvider::Initialize(Display* aDisplay, Window aWindow,
                                       Visual* aVisual, int aDepth,
                                       bool aIsShaped) {
  // We should not be initialized
  MOZ_ASSERT(!mXDisplay);

  // This should also be a valid initialization
  MOZ_ASSERT(aDisplay && aWindow != X11None && aVisual);

  mXDisplay = aDisplay;
  mXWindow = aWindow;
  mXVisual = aVisual;
  mXDepth = aDepth;
  mIsShaped = aIsShaped;
  mIsX11Display = true;
}

#ifdef MOZ_WAYLAND
void WindowSurfaceProvider::Initialize(nsWindow* aWidget) {
  mWidget = aWidget;
  mIsX11Display = false;
}
#endif

void WindowSurfaceProvider::CleanupResources() { mWindowSurface = nullptr; }

UniquePtr WindowSurfaceProvider::CreateWindowSurface() {
#ifdef MOZ_WAYLAND
  if (!mIsX11Display) {
    LOGDRAW(("Drawing to nsWindow %p will use wl_surface\n", mWidget));
    return MakeUnique(mWidget);
  }
#endif

  // We should be initialized
  MOZ_ASSERT(mXDisplay);

  // Blit to the window with the following priority:
  // 1. XRender (iff XRender is enabled && we are in-process)
  // 2. MIT-SHM
  // 3. XPutImage
  if (!mIsShaped && gfx::gfxVars::UseXRender()) {
    LOGDRAW(("Drawing to Window 0x%lx will use XRender\n", mXWindow));
    return MakeUnique(mXDisplay, mXWindow, mXVisual,
                                            mXDepth);
  }

#ifdef MOZ_HAVE_SHMIMAGE
  if (!mIsShaped && nsShmImage::UseShm()) {
    LOGDRAW(("Drawing to Window 0x%lx will use MIT-SHM\n", mXWindow));
    return MakeUnique(mXDisplay, mXWindow, mXVisual,
                                           mXDepth);
  }
#endif  // MOZ_HAVE_SHMIMAGE

  LOGDRAW(("Drawing to Window 0x%lx will use XPutImage\n", mXWindow));
  return MakeUnique(mXDisplay, mXWindow, mXVisual,
                                           mXDepth, mIsShaped);
}

already_AddRefed
WindowSurfaceProvider::StartRemoteDrawingInRegion(
    const LayoutDeviceIntRegion& aInvalidRegion,
    layers::BufferMode* aBufferMode) {
  if (aInvalidRegion.IsEmpty()) return nullptr;

  if (!mWindowSurface) {
    mWindowSurface = CreateWindowSurface();
    if (!mWindowSurface) return nullptr;
  }

  *aBufferMode = BufferMode::BUFFER_NONE;
  RefPtr dt = nullptr;
  if (!(dt = mWindowSurface->Lock(aInvalidRegion)) && mIsX11Display &&
      !mWindowSurface->IsFallback()) {
    // We can't use WindowSurfaceX11Image fallback on Wayland but
    // Lock() call on WindowSurfaceWayland should never fail.
    gfxWarningOnce()
        << "Failed to lock WindowSurface, falling back to XPutImage backend.";
    mWindowSurface = MakeUnique(
        mXDisplay, mXWindow, mXVisual, mXDepth, mIsShaped);
    dt = mWindowSurface->Lock(aInvalidRegion);
  }
  return dt.forget();
}

void WindowSurfaceProvider::EndRemoteDrawingInRegion(
    gfx::DrawTarget* aDrawTarget, const LayoutDeviceIntRegion& aInvalidRegion) {
  if (mWindowSurface) mWindowSurface->Commit(aInvalidRegion);
}

}  // namespace widget
}  // namespace mozilla

Minimal test - lines (25, 38)

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_sei
old: 65.57001885232592
new: 71.28958129324434

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 50.960570559729845
new: 59.54118611256694

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_original
old: 87.14257565713804
new: 101.81542825248948

path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.sum
old: 3.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.5
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 147.06147499796518
new: 59.71535681027101

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N1
old: 44.0
new: 19.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N2
old: 32.0
new: 18.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.bugs
old: 0.07319945434815657
new: 0.021942098735436923

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.level
old: 0.11979166666666669
new: 0.28888888888888886

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.time
old: 180.788641988553
new: 29.6706202025703

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.effort
old: 3254.195555793954
new: 534.0711636462654

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n1
old: 12.0
new: 5.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n2
old: 23.0
new: 13.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.volume
old: 389.82550928781745
new: 154.28722505336555

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.9350194078679628
new: 1.6139285624397568

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.vocabulary
old: 35.0
new: 18.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.length
old: 76.0
new: 37.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.difficulty
old: 8.347826086956522
new: 3.4615384615384617

path: .spaces[0].spaces[0].spaces[0].metrics.loc.sloc
old: 25.0
new: 14.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.cloc
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.lloc
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.ploc
old: 16.0
new: 14.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.blank
old: 8.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.nexits.sum
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.nexits.average
old: 1.0
new: 0.0

Code

WindowSurfaceProvider::WindowSurfaceProvider()
    : mIsX11Display(false),
      mXDisplay(nullptr),
      mXWindow(0),
      mXVisual(nullptr),
      mXDepth(0),
      mWindowSurface(nullptr)
#ifdef MOZ_WAYLAND
      ,
      mWidget(nullptr)
#endif
      ,
      mIsShaped(false) {
}