author | Emilio Cobos Álvarez <ecoal95@gmail.com> |
Thu, 11 Aug 2016 21:54:14 -0700 | |
changeset 310491 | 70b776aa432ecffa3b29880de7d2c4bf29500461 |
parent 310490 | 66d066d5f608c969d486c310d297d2c7fac79aaa |
child 310492 | 1976d34e92f8c9c7fb9a336db9377e18725f2b4f |
push id | 30585 |
push user | ryanvm@gmail.com |
push date | Mon, 22 Aug 2016 13:41:00 +0000 |
treeherder | mozilla-central@194fe275b4e6 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | heycam |
bugs | 1292618 |
milestone | 51.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/style/ServoBindings.cpp +++ b/layout/style/ServoBindings.cpp @@ -704,21 +704,35 @@ Gecko_CreateGradient(uint8_t aShape, } return result; } void Gecko_EnsureTArrayCapacity(void* aArray, size_t aCapacity, size_t aElemSize) { - auto base = reinterpret_cast<nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils> *>(aArray); + auto base = + reinterpret_cast<nsTArray_base<nsTArrayInfallibleAllocator, + nsTArray_CopyWithMemutils>*>(aArray); + base->EnsureCapacity<nsTArrayInfallibleAllocator>(aCapacity, aElemSize); } void +Gecko_ClearPODTArray(void* aArray, size_t aElementSize, size_t aElementAlign) +{ + auto base = + reinterpret_cast<nsTArray_base<nsTArrayInfallibleAllocator, + nsTArray_CopyWithMemutils>*>(aArray); + + base->template ShiftData<nsTArrayInfallibleAllocator>(0, base->Length(), 0, + aElementSize, aElementAlign); +} + +void Gecko_EnsureImageLayersLength(nsStyleImageLayers* aLayers, size_t aLen) { aLayers->mLayers.EnsureLengthAtLeast(aLen); } void Gecko_InitializeImageLayer(nsStyleImageLayers::Layer* aLayer, nsStyleImageLayers::LayerType aLayerType)
--- a/layout/style/ServoBindings.h +++ b/layout/style/ServoBindings.h @@ -219,16 +219,21 @@ nsChangeHint Gecko_CalcStyleDifference(n ServoComputedValuesBorrowed newstyle); void Gecko_StoreStyleDifference(RawGeckoNode* node, nsChangeHint change); // `array` must be an nsTArray // If changing this signature, please update the // friend function declaration in nsTArray.h void Gecko_EnsureTArrayCapacity(void* array, size_t capacity, size_t elem_size); +// Same here, `array` must be an nsTArray<T>, for some T. +// +// Important note: Only valid for POD types, since destructors won't be run +// otherwise. This is ensured with rust traits for the relevant structs. +void Gecko_ClearPODTArray(void* array, size_t elem_size, size_t elem_align); void Gecko_EnsureImageLayersLength(nsStyleImageLayers* layers, size_t len); void Gecko_InitializeImageLayer(nsStyleImageLayers::Layer* layer, nsStyleImageLayers::LayerType layer_type); // Clean up pointer-based coordinates void Gecko_ResetStyleCoord(nsStyleUnit* unit, nsStyleUnion* value);
--- a/xpcom/glue/nsTArray.h +++ b/xpcom/glue/nsTArray.h @@ -323,17 +323,23 @@ struct nsTArray_SafeElementAtHelper<mozi { if (aIndex < static_cast<const Derived*>(this)->Length()) { return static_cast<const Derived*>(this)->ElementAt(aIndex); } return nullptr; } }; -extern "C" void Gecko_EnsureTArrayCapacity(void* aArray, size_t aCapacity, size_t aElemSize); +// Servo bindings. +extern "C" void Gecko_EnsureTArrayCapacity(void* aArray, + size_t aCapacity, + size_t aElementSize); +extern "C" void Gecko_ClearPODTArray(void* aArray, + size_t aElementSize, + size_t aElementAlign); MOZ_NORETURN MOZ_COLD void InvalidArrayIndex_CRASH(size_t aIndex, size_t aLength); // // This class serves as a base class for nsTArray. It shouldn't be used // directly. It holds common implementation code that does not depend on the // element type of the nsTArray. @@ -341,17 +347,20 @@ InvalidArrayIndex_CRASH(size_t aIndex, s template<class Alloc, class Copy> class nsTArray_base { // Allow swapping elements with |nsTArray_base|s created using a // different allocator. This is kosher because all allocators use // the same free(). template<class Allocator, class Copier> friend class nsTArray_base; - friend void Gecko_EnsureTArrayCapacity(void* aArray, size_t aCapacity, size_t aElemSize); + friend void Gecko_EnsureTArrayCapacity(void* aArray, size_t aCapacity, + size_t aElemSize); + friend void Gecko_ClearPODTArray(void* aTArray, size_t aElementSize, + size_t aElementAlign); protected: typedef nsTArrayHeader Header; public: typedef size_t size_type; typedef size_t index_type;