# Global Metrics

path: .metrics.mi.mi_sei
old: -8.116368371432578
new: 26.501227169321144
path: .metrics.mi.mi_original
old: 21.59257555464083
new: 53.50731651657553
path: .metrics.mi.mi_visual_studio
old: 12.627237166456624
new: 31.29082837226639
path: .metrics.loc.lloc
old: 111.0
new: 22.0
path: .metrics.loc.cloc
old: 53.0
new: 9.0
path: .metrics.loc.ploc
old: 179.0
new: 70.0
path: .metrics.loc.blank
old: 43.0
new: 14.0
path: .metrics.loc.sloc
old: 275.0
new: 93.0
path: .metrics.cognitive.sum
old: 21.0
new: 9.0
path: .metrics.cognitive.average
old: 1.5
new: 1.125
path: .metrics.cyclomatic.average
old: 3.2666666666666666
new: 1.6363636363636365
path: .metrics.cyclomatic.sum
old: 49.0
new: 18.0
path: .metrics.halstead.N2
old: 481.0
new: 132.0
path: .metrics.halstead.difficulty
old: 37.774869109947645
new: 20.794520547945204
path: .metrics.halstead.time
old: 18174.21910011699
new: 2495.1896263006593
path: .metrics.halstead.estimated_program_length
old: 1594.4956240230836
new: 555.8991177875525
path: .metrics.halstead.level
old: 0.026472626472626472
new: 0.04808959156785244
path: .metrics.halstead.n1
old: 30.0
new: 23.0
path: .metrics.halstead.length
old: 1112.0
new: 328.0
path: .metrics.halstead.bugs
old: 1.5825748326444524
new: 0.42117519551186305
path: .metrics.halstead.vocabulary
old: 221.0
new: 96.0
path: .metrics.halstead.purity_ratio
old: 1.4338989424668018
new: 1.6948143834986358
path: .metrics.halstead.n2
old: 191.0
new: 73.0
path: .metrics.halstead.volume
old: 8660.147646043271
new: 2159.8677002365393
path: .metrics.halstead.N1
old: 631.0
new: 196.0
path: .metrics.halstead.effort
old: 327135.9438021058
new: 44913.41327341187
path: .metrics.nargs.average
old: 1.7857142857142858
new: 0.875
path: .metrics.nargs.sum
old: 25.0
new: 7.0
path: .metrics.nexits.average
old: 1.5714285714285714
new: 0.875
path: .metrics.nexits.sum
old: 22.0
new: 7.0
path: .metrics.nom.total
old: 14.0
new: 8.0
path: .metrics.nom.functions
old: 14.0
new: 8.0

# Spaces Data

## Minimal test - lines (10, 93)

path: .spaces[0].metrics.nexits.average
old: 1.0
new: 0.875
path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 7.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 8.0
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 8.0
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 17.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 1.7
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 22.0
path: .spaces[0].metrics.loc.sloc
old: 1.0
new: 84.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 13.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[0].metrics.loc.ploc
old: 1.0
new: 68.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 9.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 1.125
path: .spaces[0].metrics.nargs.average
old: 0.0
new: 0.875
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 7.0
path: .spaces[0].metrics.halstead.N1
old: 5.0
new: 196.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.944234353490973
new: 1.6585091118838766
path: .spaces[0].metrics.halstead.effort
old: 49.12871113600807
new: 44993.09814988915
path: .spaces[0].metrics.halstead.N2
old: 2.0
new: 130.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 13.60964047443681
new: 540.6739704741437
path: .spaces[0].metrics.halstead.volume
old: 19.651484454403228
new: 2136.7959656469097
path: .spaces[0].metrics.halstead.vocabulary
old: 7.0
new: 94.0
path: .spaces[0].metrics.halstead.n1
old: 5.0
new: 23.0
path: .spaces[0].metrics.halstead.length
old: 7.0
new: 326.0
path: .spaces[0].metrics.halstead.time
old: 2.7293728408893374
new: 2499.616563882731
path: .spaces[0].metrics.halstead.bugs
old: 0.004471319041702271
new: 0.4216732112090248
path: .spaces[0].metrics.halstead.level
old: 0.4
new: 0.04749163879598662
path: .spaces[0].metrics.halstead.difficulty
old: 2.5
new: 21.056338028169016
path: .spaces[0].metrics.halstead.n2
old: 2.0
new: 71.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 90.80912574437468
new: 32.42224645332833
path: .spaces[0].metrics.mi.mi_original
old: 155.2836050228807
new: 55.44204143519144
path: .spaces[0].metrics.mi.mi_sei
old: 148.4278547652622
new: 20.44631791108505

### Code

    namespace mozilla {
    namespace widget {

    AndroidCompositorWidget::AndroidCompositorWidget(
        const layers::CompositorOptions& aOptions, nsBaseWidget* aWidget)
        : InProcessCompositorWidget(aOptions, aWidget),
          mNativeWindow(nullptr),
          mFormat(WINDOW_FORMAT_RGBA_8888) {}

    AndroidCompositorWidget::~AndroidCompositorWidget() {
      if (mNativeWindow) {
        ANativeWindow_release(mNativeWindow);
      }
    }

    already_AddRefed
    AndroidCompositorWidget::StartRemoteDrawingInRegion(
        const LayoutDeviceIntRegion& aInvalidRegion,
        layers::BufferMode* aBufferMode) {
      if (!mNativeWindow) {
        EGLNativeWindowType window = GetEGLNativeWindow();
        JNIEnv* const env = jni::GetEnvForThread();
        mNativeWindow =
            ANativeWindow_fromSurface(env, reinterpret_cast(window));
        if (mNativeWindow) {
          mFormat = ANativeWindow_getFormat(mNativeWindow);
          ANativeWindow_acquire(mNativeWindow);
        } else {
          return nullptr;
        }
      }

      if (mFormat != WINDOW_FORMAT_RGBA_8888 &&
          mFormat != WINDOW_FORMAT_RGBX_8888) {
        gfxCriticalNoteOnce << "Non supported format: " << mFormat;
        return nullptr;
      }

      // XXX Handle inOutDirtyBounds
      if (ANativeWindow_lock(mNativeWindow, &mBuffer, nullptr) != 0) {
        return nullptr;
      }

      const int bpp = 4;
      gfx::SurfaceFormat format = gfx::SurfaceFormat::B8G8R8A8;
      if (mFormat == WINDOW_FORMAT_RGBX_8888) {
        format = gfx::SurfaceFormat::B8G8R8X8;
      }

      RefPtr dt = gfx::Factory::CreateDrawTargetForData(
          gfx::BackendType::SKIA, static_cast(mBuffer.bits),
          gfx::IntSize(mBuffer.width, mBuffer.height), mBuffer.stride * bpp, format,
          true);

      return dt.forget();
    }

    void AndroidCompositorWidget::EndRemoteDrawingInRegion(
        gfx::DrawTarget* aDrawTarget, const LayoutDeviceIntRegion& aInvalidRegion) {
      // XXX Needs convert BGRA to RGBA. RGBA is not supported by sw-wr
      const int bpp = 4;
      gfxUtils::ConvertBGRAtoRGBA((uint8_t*)mBuffer.bits,
                                  mBuffer.stride * mBuffer.height * bpp);
      ANativeWindow_unlockAndPost(mNativeWindow);
    }

    EGLNativeWindowType AndroidCompositorWidget::GetEGLNativeWindow() {
      return (EGLNativeWindowType)mWidget->GetNativeData(NS_JAVA_SURFACE);
    }

    EGLNativeWindowType AndroidCompositorWidget::GetPresentationEGLSurface() {
      return (EGLNativeWindowType)mWidget->GetNativeData(NS_PRESENTATION_SURFACE);
    }

    void AndroidCompositorWidget::SetPresentationEGLSurface(EGLSurface aVal) {
      mWidget->SetNativeData(NS_PRESENTATION_SURFACE, (uintptr_t)aVal);
    }

    ANativeWindow* AndroidCompositorWidget::GetPresentationANativeWindow() {
      return (ANativeWindow*)mWidget->GetNativeData(NS_PRESENTATION_WINDOW);
    }

    }  // namespace widget
    }  // namespace mozilla