style: Simplify Debug impl for PropertyDeclaration reusing to_css.
These two functions appear in the data from bug 1328497, and the second part of one is identical to the other.
I think the way to fix this is another one (either using static arrays to get
the interesting data, or making rust generate the equivalent code).
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14844)
<!-- Reviewable:end -->
These two functions appear in the data from bug 1328497.
I think the way to fix this is another one (either using static arrays to get
the interesting data, or making rust generate the equivalent code).
Reimplement AtomicRefCell with pure atomics
While reviewing @bzbarsky's patches in [1], I started typing out some lore about how mutable AtomicRefCell borrows are actually cheaper than immutable ones, so we should prefer them where possible. But then I decided that this was a really dumb state of affairs and that we should just fix AtomicRefCell instead, and implement a proper AtomicRef{,Mut}::map while we were at it. So here we are.
This PR adds a from-scratch implementation of AtomicRefCell that aims to be 100% sound, even in unrealistic overflow scenarios. We should probably get this on crates.io eventually, but I want to land it landed in-tree first.
With this implementation, each operation (borrow or release) is one atomic instruction, and all borrow/release pairs (mutable or immutable) take 12 ns on my machine, which is what I'd expect. This is a 50% improvement over the previous implementation in the immutable case.
There may be some places where we could get away with Ordering::Release instead of Ordering::AcqRel, but it didn't seem worth it to try to reason it out.
r? @Manishearth
CC @emilio @SimonSapin @heycam @upsuper
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1298588
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14828)
<!-- Reviewable:end -->
Actually, I think most of the functions in DOMTraversalContext deserve a nice
comment, but that's probably fine as a followup, I want to land the require-docs
thing now.