Bug 1626570 - Improve handling of copying arrays in gfx/. r=jrmuizel

Differential Revision: https://phabricator.services.mozilla.com/D73635
This commit is contained in:
Simon Giesecke 2020-05-05 12:55:27 +00:00
Родитель f87a1f858f
Коммит 2e6385ca34
8 изменённых файлов: 29 добавлений и 22 удалений

Просмотреть файл

@ -219,7 +219,7 @@ class PolygonTyped {
return PolygonTyped<Units>();
}
nsTArray<Point4DType> clippedPoints(mPoints);
nsTArray<Point4DType> clippedPoints(mPoints.Clone());
size_t pos, neg;
nsTArray<Point4DType> backPoints(4), frontPoints(4);
@ -385,7 +385,7 @@ class PolygonTyped {
}
Point4DType mNormal;
nsTArray<Point4DType> mPoints;
CopyableTArray<Point4DType> mPoints;
};
typedef PolygonTyped<UnknownUnits> Polygon;

Просмотреть файл

@ -30,7 +30,7 @@ void gfxVars::SetValuesForInitialize(
}
} else {
// Save the values for Initialize call
gGfxVarInitUpdates = new nsTArray<GfxVarUpdate>(aInitUpdates);
gGfxVarInitUpdates = new nsTArray<GfxVarUpdate>(aInitUpdates.Clone());
}
}

Просмотреть файл

@ -2077,7 +2077,7 @@ static void ReportArrayContents(
printf_stderr("%s:\n", title);
nsTArray<GLContext::NamedResource> copy(aArray);
nsTArray<GLContext::NamedResource> copy(aArray.Clone());
copy.Sort();
GLContext* lastContext = nullptr;

Просмотреть файл

@ -228,7 +228,7 @@ struct ToAlphaAttributes {
// Complex PrimitiveAttributes:
class ImplicitlyCopyableFloatArray : public nsTArray<float> {
class ImplicitlyCopyableFloatArray : public CopyableTArray<float> {
public:
ImplicitlyCopyableFloatArray() = default;
@ -415,10 +415,14 @@ class FilterPrimitiveDescription final {
FilterPrimitiveDescription(FilterPrimitiveDescription&& aOther) = default;
FilterPrimitiveDescription& operator=(FilterPrimitiveDescription&& aOther) =
default;
FilterPrimitiveDescription(const FilterPrimitiveDescription& aOther) =
default;
FilterPrimitiveDescription& operator=(
const FilterPrimitiveDescription& aOther) = default;
FilterPrimitiveDescription(const FilterPrimitiveDescription& aOther)
: mAttributes(aOther.mAttributes),
mInputPrimitives(aOther.mInputPrimitives.Clone()),
mFilterPrimitiveSubregion(aOther.mFilterPrimitiveSubregion),
mFilterSpaceBounds(aOther.mFilterSpaceBounds),
mInputColorSpaces(aOther.mInputColorSpaces.Clone()),
mOutputColorSpace(aOther.mOutputColorSpace),
mIsTainted(aOther.mIsTainted) {}
const PrimitiveAttributes& Attributes() const { return mAttributes; }
PrimitiveAttributes& Attributes() { return mAttributes; }
@ -498,7 +502,7 @@ struct FilterDescription final {
return !(*this == aOther);
}
nsTArray<FilterPrimitiveDescription> mPrimitives;
CopyableTArray<FilterPrimitiveDescription> mPrimitives;
};
already_AddRefed<FilterNode> FilterNodeGraphFromDescription(

Просмотреть файл

@ -32,10 +32,10 @@ struct nsFont final {
mozilla::FontFamilyList fontlist;
// Font features from CSS font-feature-settings
nsTArray<gfxFontFeature> fontFeatureSettings;
CopyableTArray<gfxFontFeature> fontFeatureSettings;
// Font variations from CSS font-variation-settings
nsTArray<gfxFontVariation> fontVariationSettings;
CopyableTArray<gfxFontVariation> fontVariationSettings;
// The logical size of the font, in nscoord units
nscoord size = 0;

Просмотреть файл

@ -67,6 +67,9 @@ class UncheckedArray : public T {
using T::Elements;
using T::Length;
UncheckedArray() = default;
MOZ_IMPLICIT UncheckedArray(T&& aSrc) : T(std::move(aSrc)) {}
E& operator[](size_t aIndex) { return Elements()[aIndex]; }
const E& operator[](size_t aIndex) const { return Elements()[aIndex]; }
E& LastElement() { return Elements()[Length() - 1]; }
@ -102,9 +105,10 @@ struct Strip {
struct Band {
using Strip = regiondetails::Strip;
#ifndef DEBUG
using StripArray = regiondetails::UncheckedArray<AutoTArray<Strip, 2>, Strip>;
using StripArray =
regiondetails::UncheckedArray<CopyableAutoTArray<Strip, 2>, Strip>;
#else
using StripArray = AutoTArray<Strip, 2>;
using StripArray = CopyableAutoTArray<Strip, 2>;
#endif
MOZ_IMPLICIT Band(const nsRectAbsolute& aRect)
@ -348,7 +352,7 @@ struct Band {
}
}
mStrips = newStrips;
mStrips = std::move(newStrips);
}
bool Intersects(const Band& aOther) const {
@ -1900,7 +1904,7 @@ class nsRegion {
nsRegion& Copy(const nsRegion& aRegion) {
mBounds = aRegion.mBounds;
mBands = aRegion.mBands;
mBands = aRegion.mBands.Clone();
return *this;
}

Просмотреть файл

@ -72,7 +72,7 @@ class EnumerateFontsResult final : public Runnable {
: Runnable("EnumerateFontsResult"),
mRv(aRv),
mEnumerateFontsPromise(std::move(aEnumerateFontsPromise)),
mFontList(aFontList),
mFontList(std::move(aFontList)),
mWorkerThread(do_GetCurrentThread()) {
MOZ_ASSERT(!NS_IsMainThread());
}

Просмотреть файл

@ -436,9 +436,7 @@ static void NotifyDidRender(layers::CompositorBridgeParent* aBridge,
aBridge->GetWrBridge()->RecordFrame();
}
auto info = aInfo->Raw();
for (const auto& epoch : info.epochs) {
for (const auto& epoch : aInfo->Raw().epochs) {
aBridge->NotifyPipelineRendered(epoch.pipeline_id, epoch.epoch,
aCompositeStartId, aCompositeStart,
aRenderStart, aEnd, &aStats);
@ -1123,8 +1121,9 @@ void wr_finished_scene_build(mozilla::wr::WrWindowId aWindowId,
for (size_t i = 0; i < aDocumentIdsCount; ++i) {
renderRoots[i] = wr::RenderRootFromId(aDocumentIds[i]);
}
layers::CompositorThreadHolder::Loop()->PostTask(NewRunnableFunction(
"NotifyDidSceneBuild", &NotifyDidSceneBuild, cbp, renderRoots, info));
layers::CompositorThreadHolder::Loop()->PostTask(
NewRunnableFunction("NotifyDidSceneBuild", &NotifyDidSceneBuild, cbp,
std::move(renderRoots), info));
}
}