From e0e0ae6c10ba0bf557cccf3db5c24f6ec58b10da Mon Sep 17 00:00:00 2001 From: Philippe Canal <pcanal@fnal.gov> Date: Fri, 5 Feb 2021 18:18:29 -0600 Subject: [PATCH] Switch off dubious 'optimization' For iteration over the list of baskets, the existing code try to reduce the range of the iteration to stop as soon as all non-nullptr slot have been seen. However to know the number of non-nullptr slot, the code (has to) call GetEntries which scan the entire array anyway ... --- tree/tree/src/TBranch.cxx | 16 +++++++--------- tree/tree/src/TTree.cxx | 4 +--- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/tree/tree/src/TBranch.cxx b/tree/tree/src/TBranch.cxx index 5f14ce12cbf..0d2f68d7684 100644 --- a/tree/tree/src/TBranch.cxx +++ b/tree/tree/src/TBranch.cxx @@ -2839,13 +2839,13 @@ void TBranch::Streamer(TBuffer& b) br->fParent = this; } - fNBaskets = fBaskets.GetEntries(); - for (Int_t j=fWriteBasket,n=0;j>=0 && n<fNBaskets;--j) { + fNBaskets = 0; + for (Int_t j = fWriteBasket; j>=0; --j) { TBasket *bk = (TBasket*)fBaskets.UncheckedAt(j); if (bk) { bk->SetBranch(this); // GetTree()->IncrementTotalBuffers(bk->GetBufferSize()); - ++n; + ++fNBaskets; } } if (fWriteBasket >= fMaxBaskets) { @@ -2913,13 +2913,13 @@ void TBranch::Streamer(TBuffer& b) TLeaf *leaf = (TLeaf*)fLeaves.UncheckedAt(i); leaf->SetBranch(this); } - fNBaskets = fBaskets.GetEntries(); - for (j=fWriteBasket,n=0;j>=0 && n<fNBaskets;--j) { + fNBaskets = 0; + for (j = fWriteBasket; j >= 0; --j) { TBasket *bk = (TBasket*)fBaskets.UncheckedAt(j); if (bk) { bk->SetBranch(this); //GetTree()->IncrementTotalBuffers(bk->GetBufferSize()); - ++n; + ++fNBaskets; } } if (fWriteBasket >= fMaxBaskets) { @@ -2968,13 +2968,11 @@ void TBranch::Streamer(TBuffer& b) leaf->SetBranch(this); } fBaskets.Streamer(b); - Int_t nbaskets = fBaskets.GetEntries(); - for (j=fWriteBasket,n=0;j>0 && n<nbaskets;--j) { + for (j = fWriteBasket; j > 0; --j) { TBasket *bk = (TBasket*)fBaskets.UncheckedAt(j); if (bk) { bk->SetBranch(this); //GetTree()->IncrementTotalBuffers(bk->GetBufferSize()); - ++n; } } fBasketEntry = new Long64_t[fMaxBaskets]; diff --git a/tree/tree/src/TTree.cxx b/tree/tree/src/TTree.cxx index e4c73667a54..31240e96517 100644 --- a/tree/tree/src/TTree.cxx +++ b/tree/tree/src/TTree.cxx @@ -9326,13 +9326,11 @@ static void TBranch__SetTree(TTree *tree, TObjArray &branches) TBranch* br = (TBranch*) branches.UncheckedAt(i); br->SetTree(tree); - Int_t nBaskets = br->GetListOfBaskets()->GetEntries(); Int_t writeBasket = br->GetWriteBasket(); - for (Int_t j=writeBasket,n=0;j>=0 && n<nBaskets;--j) { + for (Int_t j = writeBasket; j >= 0; --j) { TBasket *bk = (TBasket*)br->GetListOfBaskets()->UncheckedAt(j); if (bk) { tree->IncrementTotalBuffers(bk->GetBufferSize()); - ++n; } } -- GitLab