From 32e2eaa965d935252472258d97575bbcd4d86481 Mon Sep 17 00:00:00 2001 From: Gian-Carlo Pascutto Date: Wed, 15 Aug 2012 09:09:25 +0200 Subject: [PATCH] Bug 673470 - Make the PrefixSet/LookupCache construction infallible again. r=dcamp f=jlebar --- .../telemetry/TelemetryHistograms.h | 2 +- .../components/url-classifier/LookupCache.cpp | 14 +++------- .../nsUrlClassifierPrefixSet.cpp | 26 ++++++------------- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/toolkit/components/telemetry/TelemetryHistograms.h b/toolkit/components/telemetry/TelemetryHistograms.h index 774ad9f7ff9..cdc46b45ceb 100644 --- a/toolkit/components/telemetry/TelemetryHistograms.h +++ b/toolkit/components/telemetry/TelemetryHistograms.h @@ -355,7 +355,7 @@ HISTOGRAM(URLCLASSIFIER_PS_FALLOCATE_TIME, 1, 1000, 10, EXPONENTIAL, "Time spent HISTOGRAM(URLCLASSIFIER_PS_CONSTRUCT_TIME, 1, 5000, 15, EXPONENTIAL, "Time spent constructing PrefixSet from DB (ms)") HISTOGRAM(URLCLASSIFIER_LC_PREFIXES, 1, 1500000, 15, LINEAR, "Size of the prefix cache in entries") HISTOGRAM(URLCLASSIFIER_LC_COMPLETIONS, 1, 200, 10, EXPONENTIAL, "Size of the completion cache in entries") -HISTOGRAM_BOOLEAN(URLCLASSIFIER_PS_OOM, "Did UrlClassifier run out of memory during PrefixSet construction?") +HISTOGRAM_BOOLEAN(URLCLASSIFIER_PS_FAILURE, "Did UrlClassifier fail to construct the PrefixSet?") #endif /** diff --git a/toolkit/components/url-classifier/LookupCache.cpp b/toolkit/components/url-classifier/LookupCache.cpp index 7019b19d922..2c3370e7428 100644 --- a/toolkit/components/url-classifier/LookupCache.cpp +++ b/toolkit/components/url-classifier/LookupCache.cpp @@ -713,12 +713,8 @@ LookupCache::ConstructPrefixSet(AddPrefixArray& aAddPrefixes) { Telemetry::AutoTimer timer; - FallibleTArray array; - nsresult rv; - if (!array.SetCapacity(aAddPrefixes.Length())) { - rv = NS_ERROR_OUT_OF_MEMORY; - goto error_bailout; - } + nsTArray array; + array.SetCapacity(aAddPrefixes.Length()); for (uint32 i = 0; i < aAddPrefixes.Length(); i++) { array.AppendElement(aAddPrefixes[i].PrefixHash().ToUint32()); @@ -735,7 +731,7 @@ LookupCache::ConstructPrefixSet(AddPrefixArray& aAddPrefixes) #endif // construct new one, replace old entries - rv = mPrefixSet->SetPrefixes(array.Elements(), array.Length()); + nsresult rv = mPrefixSet->SetPrefixes(array.Elements(), array.Length()); if (NS_FAILED(rv)) { goto error_bailout; } @@ -756,9 +752,7 @@ LookupCache::ConstructPrefixSet(AddPrefixArray& aAddPrefixes) sentinel.Clear(); sentinel.AppendElement(0); mPrefixSet->SetPrefixes(sentinel.Elements(), sentinel.Length()); - if (rv == NS_ERROR_OUT_OF_MEMORY) { - Telemetry::Accumulate(Telemetry::URLCLASSIFIER_PS_OOM, 1); - } + Telemetry::Accumulate(Telemetry::URLCLASSIFIER_PS_FAILURE, 1); return rv; } diff --git a/toolkit/components/url-classifier/nsUrlClassifierPrefixSet.cpp b/toolkit/components/url-classifier/nsUrlClassifierPrefixSet.cpp index 69f5596be22..5025cbae6d6 100644 --- a/toolkit/components/url-classifier/nsUrlClassifierPrefixSet.cpp +++ b/toolkit/components/url-classifier/nsUrlClassifierPrefixSet.cpp @@ -165,34 +165,24 @@ nsUrlClassifierPrefixSet::MakePrefixSet(const PRUint32* aPrefixes, PRUint32 aLen } #endif - FallibleTArray newIndexPrefixes; - FallibleTArray newIndexStarts; - FallibleTArray newDeltas; + nsTArray newIndexPrefixes; + nsTArray newIndexStarts; + nsTArray newDeltas; - if (!newIndexPrefixes.AppendElement(aPrefixes[0])) { - return NS_ERROR_OUT_OF_MEMORY; - } - if (!newIndexStarts.AppendElement(newDeltas.Length())) { - return NS_ERROR_OUT_OF_MEMORY; - } + newIndexPrefixes.AppendElement(aPrefixes[0]); + newIndexStarts.AppendElement(newDeltas.Length()); PRUint32 numOfDeltas = 0; PRUint32 currentItem = aPrefixes[0]; for (PRUint32 i = 1; i < aLength; i++) { if ((numOfDeltas >= DELTAS_LIMIT) || (aPrefixes[i] - currentItem >= MAX_INDEX_DIFF)) { - if (!newIndexStarts.AppendElement(newDeltas.Length())) { - return NS_ERROR_OUT_OF_MEMORY; - } - if (!newIndexPrefixes.AppendElement(aPrefixes[i])) { - return NS_ERROR_OUT_OF_MEMORY; - } + newIndexStarts.AppendElement(newDeltas.Length()); + newIndexPrefixes.AppendElement(aPrefixes[i]); numOfDeltas = 0; } else { PRUint16 delta = aPrefixes[i] - currentItem; - if (!newDeltas.AppendElement(delta)) { - return NS_ERROR_OUT_OF_MEMORY; - } + newDeltas.AppendElement(delta); numOfDeltas++; } currentItem = aPrefixes[i];