Global Metrics

path: .metrics.nargs.average
old: 0.7
new: 1.4

path: .metrics.nargs.sum
old: 14.0
new: 7.0

path: .metrics.nom.total
old: 20.0
new: 5.0

path: .metrics.nom.functions
old: 20.0
new: 5.0

path: .metrics.halstead.N2
old: 255.0
new: 184.0

path: .metrics.halstead.difficulty
old: 39.84375
new: 24.76923076923077

path: .metrics.halstead.bugs
old: 1.0490905746560086
new: 0.5712030409107883

path: .metrics.halstead.length
old: 660.0
new: 432.0

path: .metrics.halstead.level
old: 0.025098039215686273
new: 0.040372670807453416

path: .metrics.halstead.volume
old: 4431.40204165964
new: 2863.8820598743914

path: .metrics.halstead.estimated_program_length
old: 621.8506523353572
new: 582.5000389496093

path: .metrics.halstead.vocabulary
old: 105.0
new: 99.0

path: .metrics.halstead.N1
old: 405.0
new: 248.0

path: .metrics.halstead.effort
old: 176563.6750973763
new: 70936.15563688877

path: .metrics.halstead.purity_ratio
old: 0.9421979580838744
new: 1.3483797197907623

path: .metrics.halstead.time
old: 9809.093060965351
new: 3940.8975353827095

path: .metrics.halstead.n2
old: 80.0
new: 78.0

path: .metrics.halstead.n1
old: 25.0
new: 21.0

path: .metrics.cyclomatic.sum
old: 49.0
new: 22.0

path: .metrics.cyclomatic.average
old: 1.6333333333333333
new: 3.142857142857143

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

path: .metrics.loc.sloc
old: 280.0
new: 130.0

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

path: .metrics.loc.lloc
old: 55.0
new: 41.0

path: .metrics.loc.ploc
old: 167.0
new: 96.0

path: .metrics.nexits.average
old: 0.9
new: 1.4

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

path: .metrics.mi.mi_sei
old: 1.8768356722009116
new: 19.030726252248584

path: .metrics.mi.mi_original
old: 24.78475766383923
new: 45.69428849810956

path: .metrics.mi.mi_visual_studio
old: 14.494010329730544
new: 26.721806139245352

path: .metrics.cognitive.average
old: 1.0
new: 3.8

path: .metrics.cognitive.sum
old: 20.0
new: 19.0

Spaces Data

Minimal test - lines (18, 130)

path: .spaces[0].metrics.cognitive.average
old: 1.0
new: 3.8

path: .spaces[0].metrics.cognitive.sum
old: 20.0
new: 19.0

path: .spaces[0].metrics.halstead.difficulty
old: 40.74675324675325
new: 26.47826086956522

path: .spaces[0].metrics.halstead.effort
old: 178353.06284215234
new: 72366.94450064648

path: .spaces[0].metrics.halstead.level
old: 0.02454183266932271
new: 0.03776683087027914

path: .spaces[0].metrics.halstead.vocabulary
old: 102.0
new: 90.0

path: .spaces[0].metrics.halstead.estimated_program_length
old: 598.6389683778755
new: 513.7268533960477

path: .spaces[0].metrics.halstead.n1
old: 25.0
new: 21.0

path: .spaces[0].metrics.halstead.n2
old: 77.0
new: 69.0

path: .spaces[0].metrics.halstead.volume
old: 4377.1110243333005
new: 2733.0701535547933

path: .spaces[0].metrics.halstead.N2
old: 251.0
new: 174.0

path: .spaces[0].metrics.halstead.bugs
old: 1.0561666742042155
new: 0.5788582615854655

path: .spaces[0].metrics.halstead.N1
old: 405.0
new: 247.0

path: .spaces[0].metrics.halstead.time
old: 9908.503491230686
new: 4020.385805591471

path: .spaces[0].metrics.halstead.purity_ratio
old: 0.912559403015054
new: 1.220253808541681

path: .spaces[0].metrics.halstead.length
old: 656.0
new: 421.0

path: .spaces[0].metrics.nom.functions
old: 20.0
new: 5.0

path: .spaces[0].metrics.nom.total
old: 20.0
new: 5.0

path: .spaces[0].metrics.nargs.average
old: 0.7
new: 1.4

path: .spaces[0].metrics.nargs.sum
old: 14.0
new: 7.0

path: .spaces[0].metrics.mi.mi_visual_studio
old: 15.25938878768836
new: 28.32618531731518

path: .spaces[0].metrics.mi.mi_sei
old: 3.258472024854626
new: 20.501841928902188

path: .spaces[0].metrics.mi.mi_original
old: 26.0935548269471
new: 48.43777689260895

path: .spaces[0].metrics.cyclomatic.average
old: 1.6551724137931034
new: 3.5

path: .spaces[0].metrics.cyclomatic.sum
old: 48.0
new: 21.0

path: .spaces[0].metrics.nexits.average
old: 0.9
new: 1.4

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

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

path: .spaces[0].metrics.loc.ploc
old: 161.0
new: 86.0

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

path: .spaces[0].metrics.loc.cloc
old: 73.0
new: 12.0

path: .spaces[0].metrics.loc.lloc
old: 55.0
new: 41.0

Code

namespace mozilla::widget {

NS_IMPL_ISUPPORTS(IconLoader, imgINotificationObserver)

IconLoader::IconLoader(Listener* aListener) : mListener(aListener) {}

IconLoader::~IconLoader() { Destroy(); }

void IconLoader::Destroy() {
  if (mIconRequest) {
    mIconRequest->CancelAndForgetObserver(NS_BINDING_ABORTED);
    mIconRequest = nullptr;
  }
  mListener = nullptr;
}

nsresult IconLoader::LoadIcon(nsIURI* aIconURI, nsINode* aNode,
                              bool aIsInternalIcon) {
  if (mIconRequest) {
    // Another icon request is already in flight.  Kill it.
    mIconRequest->Cancel(NS_BINDING_ABORTED);
    mIconRequest = nullptr;
  }

  if (!aNode) {
    return NS_ERROR_FAILURE;
  }

  RefPtr document = aNode->OwnerDoc();

  nsCOMPtr loadGroup = document->GetDocumentLoadGroup();
  if (!loadGroup) {
    return NS_ERROR_FAILURE;
  }

  RefPtr loader = nsContentUtils::GetImgLoaderForDocument(document);
  if (!loader) {
    return NS_ERROR_FAILURE;
  }

  nsresult rv;
  if (aIsInternalIcon) {
    rv = loader->LoadImage(
        aIconURI, nullptr, nullptr, nullptr, 0, loadGroup, this, nullptr,
        nullptr, nsIRequest::LOAD_NORMAL, nullptr,
        nsIContentPolicy::TYPE_INTERNAL_IMAGE, u""_ns,
        /* aUseUrgentStartForChannel */ false, /* aLinkPreload */ false,
        getter_AddRefs(mIconRequest));
  } else {
    // TODO: nsIContentPolicy::TYPE_INTERNAL_IMAGE may not be the correct
    // policy. See bug 1691868 for more details.
    rv = loader->LoadImage(
        aIconURI, nullptr, nullptr, aNode->NodePrincipal(), 0, loadGroup, this,
        aNode, document, nsIRequest::LOAD_NORMAL, nullptr,
        nsIContentPolicy::TYPE_INTERNAL_IMAGE, u""_ns,
        /* aUseUrgentStartForChannel */ false,
        /* aLinkPreload */ false, getter_AddRefs(mIconRequest));
  }
  if (NS_FAILED(rv)) {
    return rv;
  }

  return NS_OK;
}

//
// imgINotificationObserver
//

void IconLoader::Notify(imgIRequest* aRequest, int32_t aType,
                        const nsIntRect* aData) {
  if (aType == imgINotificationObserver::LOAD_COMPLETE) {
    // Make sure the image loaded successfully.
    uint32_t status = imgIRequest::STATUS_ERROR;
    if (NS_FAILED(aRequest->GetImageStatus(&status)) ||
        (status & imgIRequest::STATUS_ERROR)) {
      mIconRequest->Cancel(NS_BINDING_ABORTED);
      mIconRequest = nullptr;
      return;
    }

    nsCOMPtr image;
    aRequest->GetImage(getter_AddRefs(image));
    MOZ_ASSERT(image);

    // Ask the image to decode at its intrinsic size.
    int32_t width = 0, height = 0;
    image->GetWidth(&width);
    image->GetHeight(&height);
    image->RequestDecodeForSize(nsIntSize(width, height),
                                imgIContainer::FLAG_HIGH_QUALITY_SCALING);
  }

  if (aType == imgINotificationObserver::FRAME_COMPLETE) {
    nsCOMPtr image;
    aRequest->GetImage(getter_AddRefs(image));
    MOZ_ASSERT(image);

    if (mListener) {
      mListener->OnComplete(image);
    }
    return;
  }

  if (aType == imgINotificationObserver::DECODE_COMPLETE) {
    if (mIconRequest && mIconRequest == aRequest) {
      mIconRequest->Cancel(NS_BINDING_ABORTED);
      mIconRequest = nullptr;
    }
  }
}

}  // namespace mozilla::widget

Minimal test - lines (22, 22)

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

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

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

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

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

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

path: .spaces[0].spaces[0].metrics.halstead.N1
old: 404.0
new: 6.0

path: .spaces[0].spaces[0].metrics.halstead.volume
old: 4354.470309719673
new: 34.86917501586544

path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.02432
new: 0.32

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

path: .spaces[0].spaces[0].metrics.halstead.n2
old: 76.0
new: 4.0

path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 0.9035762932203067
new: 1.7826945885851644

path: .spaces[0].spaces[0].metrics.halstead.time
old: 9947.163536457589
new: 6.053676218032194

path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 101.0
new: 9.0

path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 590.9388957660806
new: 19.60964047443681

path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 41.11842105263158
new: 3.125

path: .spaces[0].spaces[0].metrics.halstead.effort
old: 179048.94365623657
new: 108.9661719245795

path: .spaces[0].spaces[0].metrics.halstead.length
old: 654.0
new: 11.0

path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 1.0589121237956889
new: 0.007604544540941429

path: .spaces[0].spaces[0].metrics.halstead.N2
old: 250.0
new: 5.0

path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 15.481980398569773
new: 89.06530020579255

path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 26.474186481554312
new: 152.30166335190526

path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 3.619709529493512
new: 144.12582230432585

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

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

path: .spaces[0].spaces[0].metrics.nargs.average
old: 0.7
new: 1.0

path: .spaces[0].spaces[0].metrics.nargs.sum
old: 14.0
new: 1.0

path: .spaces[0].spaces[0].metrics.loc.sloc
old: 261.0
new: 1.0

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

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

path: .spaces[0].spaces[0].metrics.loc.ploc
old: 159.0
new: 1.0

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

Code

IconLoader::IconLoader(Listener* aListener) : mListener(aListener) {}