Auto merge of #20180 - emilio:moar-refcount-hackery, r=jdm

style: Copy less urls for stylo.

Bug: 1442246
Reviewed-by: jdm
MozReview-Commit-ID: NmHue1mGDq

<!-- 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/20180)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-03-03 13:25:15 -05:00 committed by GitHub
commit 5bfd74e42d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 1669 additions and 108 deletions

View file

@ -1140,10 +1140,7 @@ extern "C" {
pub fn Gecko_ReleaseImageValueArbitraryThread(aPtr: *mut ImageValue); pub fn Gecko_ReleaseImageValueArbitraryThread(aPtr: *mut ImageValue);
} }
extern "C" { extern "C" {
pub fn Gecko_ImageValue_Create( pub fn Gecko_ImageValue_Create(aURI: ServoBundledURI) -> *mut ImageValue;
aURI: ServoBundledURI,
aURIString: ServoRawOffsetArc<RustString>,
) -> *mut ImageValue;
} }
extern "C" { extern "C" {
pub fn Gecko_ImageValue_SizeOfIncludingThis(aImageValue: *mut ImageValue) -> usize; pub fn Gecko_ImageValue_SizeOfIncludingThis(aImageValue: *mut ImageValue) -> usize;

File diff suppressed because it is too large Load diff

View file

@ -81,7 +81,7 @@ impl SpecifiedUrl {
let image_value = image_request.mImageValue.mRawPtr.as_ref().unwrap(); let image_value = image_request.mImageValue.mRawPtr.as_ref().unwrap();
let ref url_value_data = image_value._base; let ref url_value_data = image_value._base;
let mut result = try!(Self::from_url_value_data(url_value_data)); let mut result = Self::from_url_value_data(url_value_data)?;
result.build_image_value(); result.build_image_value();
Ok(result) Ok(result)
} }
@ -108,10 +108,11 @@ impl SpecifiedUrl {
/// Create a bundled URI suitable for sending to Gecko /// Create a bundled URI suitable for sending to Gecko
/// to be constructed into a css::URLValue /// to be constructed into a css::URLValue
pub fn for_ffi(&self) -> ServoBundledURI { pub fn for_ffi(&self) -> ServoBundledURI {
let (ptr, len) = self.as_slice_components(); let arc_offset = Arc::into_raw_offset(self.serialization.clone());
ServoBundledURI { ServoBundledURI {
mURLString: ptr, mURLString: unsafe {
mURLStringLength: len as u32, mem::transmute::<_, RawOffsetArc<RustString>>(arc_offset)
},
mExtraData: self.extra_data.get(), mExtraData: self.extra_data.get(),
} }
} }
@ -123,10 +124,7 @@ impl SpecifiedUrl {
debug_assert_eq!(self.image_value, None); debug_assert_eq!(self.image_value, None);
self.image_value = { self.image_value = {
unsafe { unsafe {
let arc_offset = Arc::into_raw_offset(self.serialization.clone()); let ptr = Gecko_ImageValue_Create(self.for_ffi());
let ptr = Gecko_ImageValue_Create(
self.for_ffi(),
mem::transmute::<_, RawOffsetArc<RustString>>(arc_offset));
// We do not expect Gecko_ImageValue_Create returns null. // We do not expect Gecko_ImageValue_Create returns null.
debug_assert!(!ptr.is_null()); debug_assert!(!ptr.is_null());
Some(RefPtr::from_addrefed(ptr)) Some(RefPtr::from_addrefed(ptr))