Bug 1335321 - stylo: Do CachedBorderImageData::PurgeCachedImages work on the main thread. r=bholley
MozReview-Commit-ID: 82vKTooB2fh
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -2049,20 +2049,39 @@ CachedBorderImageData::SetCachedSVGViewp
}
const mozilla::Maybe<nsSize>&
CachedBorderImageData::GetCachedSVGViewportSize()
{
return mCachedSVGViewportSize;
}
+struct PurgeCachedImagesTask : mozilla::Runnable
+{
+ NS_IMETHOD Run() final
+ {
+ mSubImages.Clear();
+ return NS_OK;
+ }
+
+ nsCOMArray<imgIContainer> mSubImages;
+};
+
void
CachedBorderImageData::PurgeCachedImages()
{
- mSubImages.Clear();
+ if (ServoStyleSet::IsInServoTraversal()) {
+ RefPtr<PurgeCachedImagesTask> task = new PurgeCachedImagesTask();
+ task->mSubImages.SwapElements(mSubImages);
+ // This will run the task immediately if we're already on the main thread,
+ // but that is fine.
+ NS_DispatchToMainThread(task.forget());
+ } else {
+ mSubImages.Clear();
+ }
}
void
CachedBorderImageData::SetSubImage(uint8_t aIndex, imgIContainer* aSubImage)
{
mSubImages.ReplaceObjectAt(aSubImage, aIndex);
}