Convert all uses of UpdateResources api to use webrender transactions.

This commit is contained in:
Josh Matthews 2020-04-28 10:43:01 -04:00
parent 8842250033
commit eb2f7f7f0a
15 changed files with 109 additions and 39 deletions

View file

@ -81,7 +81,7 @@ use net_traits::request::{Destination, Referrer};
use net_traits::{CoreResourceMsg, FetchChannels, FetchMetadata, FetchResponseListener, Metadata};
use net_traits::{NetworkError, ResourceFetchTiming, ResourceTimingType};
use script_layout_interface::HTMLMediaData;
use script_traits::WebrenderIpcSender;
use script_traits::{ImageUpdate, WebrenderIpcSender};
use servo_config::pref;
use servo_media::player::audio::AudioRenderer;
use servo_media::player::video::{VideoFrame, VideoFrameRenderer};
@ -95,9 +95,9 @@ use std::mem;
use std::rc::Rc;
use std::sync::{Arc, Mutex};
use time::{self, Duration, Timespec};
use webrender_api::ImageKey;
use webrender_api::{ExternalImageData, ExternalImageId, ExternalImageType, TextureTarget};
use webrender_api::{ImageData, ImageDescriptor, ImageDescriptorFlags, ImageFormat};
use webrender_api::{ImageKey, Transaction};
#[derive(PartialEq)]
enum FrameStatus {
@ -177,10 +177,10 @@ impl MediaFrameRenderer {
impl VideoFrameRenderer for MediaFrameRenderer {
fn render(&mut self, frame: VideoFrame) {
let mut txn = Transaction::new();
let mut updates = vec![];
if let Some(old_image_key) = mem::replace(&mut self.very_old_frame, self.old_frame.take()) {
txn.delete_image(old_image_key);
updates.push(ImageUpdate::DeleteImage(old_image_key));
}
let descriptor = ImageDescriptor::new(
@ -195,12 +195,11 @@ impl VideoFrameRenderer for MediaFrameRenderer {
if *width == frame.get_width() && *height == frame.get_height() =>
{
if !frame.is_gl_texture() {
txn.update_image(
updates.push(ImageUpdate::UpdateImage(
*image_key,
descriptor,
ImageData::Raw(frame.get_data()),
&webrender_api::DirtyRect::All,
);
));
}
self.current_frame_holder
@ -208,7 +207,7 @@ impl VideoFrameRenderer for MediaFrameRenderer {
.set(frame);
if let Some(old_image_key) = self.old_frame.take() {
txn.delete_image(old_image_key);
updates.push(ImageUpdate::DeleteImage(old_image_key));
}
}
Some((ref mut image_key, ref mut width, ref mut height)) => {
@ -241,7 +240,7 @@ impl VideoFrameRenderer for MediaFrameRenderer {
.get_or_insert_with(|| FrameHolder::new(frame.clone()))
.set(frame);
txn.add_image(new_image_key, descriptor, image_data, None);
updates.push(ImageUpdate::AddImage(new_image_key, descriptor, image_data));
},
None => {
let image_key = self.api.generate_image_key();
@ -265,10 +264,10 @@ impl VideoFrameRenderer for MediaFrameRenderer {
self.current_frame_holder = Some(FrameHolder::new(frame));
txn.add_image(image_key, descriptor, image_data, None);
updates.push(ImageUpdate::AddImage(image_key, descriptor, image_data));
},
}
self.api.update_resources(txn.resource_updates);
self.api.update_images(updates);
}
}