зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset bc69bea83b66 (bug 1527522) for wrench bustages. CLOSED TREE
This commit is contained in:
Родитель
769f057698
Коммит
01b4b3830e
|
@ -1,3 +1,5 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "Inflector"
|
||||
version = "0.11.2"
|
||||
|
@ -3087,7 +3089,6 @@ dependencies = [
|
|||
"core-foundation 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cstr 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
|
|
@ -24,7 +24,7 @@ use webrender::{ExternalImage, ExternalImageHandler, ExternalImageSource};
|
|||
use webrender::DebugFlags;
|
||||
use webrender::{ApiRecordingReceiver, BinaryRecorder};
|
||||
use webrender::{AsyncPropertySampler, PipelineInfo, SceneBuilderHooks};
|
||||
use webrender::{UploadMethod, VertexUsageHint, ProfilerHooks, set_profiler_hooks};
|
||||
use webrender::{UploadMethod, VertexUsageHint};
|
||||
use webrender::{Device, Shaders, WrShaders, ShaderPrecacheFlags};
|
||||
use thread_profiler::register_thread_with_profiler;
|
||||
use moz2d_renderer::Moz2dBlobImageHandler;
|
||||
|
@ -779,26 +779,6 @@ extern "C" {
|
|||
pub fn gecko_profiler_end_marker(name: *const c_char);
|
||||
}
|
||||
|
||||
/// Simple implementation of the WR ProfilerHooks trait to allow profile
|
||||
/// markers to be seen in the Gecko profiler.
|
||||
struct GeckoProfilerHooks;
|
||||
|
||||
impl ProfilerHooks for GeckoProfilerHooks {
|
||||
fn begin_marker(&self, label: &CStr) {
|
||||
unsafe {
|
||||
gecko_profiler_start_marker(label.as_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
fn end_marker(&self, label: &CStr) {
|
||||
unsafe {
|
||||
gecko_profiler_end_marker(label.as_ptr());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const PROFILER_HOOKS: GeckoProfilerHooks = GeckoProfilerHooks {};
|
||||
|
||||
#[allow(improper_ctypes)] // this is needed so that rustc doesn't complain about passing the &mut Transaction to an extern function
|
||||
extern "C" {
|
||||
// These callbacks are invoked from the scene builder thread (aka the APZ
|
||||
|
@ -1140,9 +1120,6 @@ pub extern "C" fn wr_window_new(window_id: WrWindowId,
|
|||
..Default::default()
|
||||
};
|
||||
|
||||
// Ensure the WR profiler callbacks are hooked up to the Gecko profiler.
|
||||
set_profiler_hooks(Some(&PROFILER_HOOKS));
|
||||
|
||||
let notifier = Box::new(CppNotifier {
|
||||
window_id: window_id,
|
||||
});
|
||||
|
|
|
@ -28,7 +28,6 @@ bincode = "1.0"
|
|||
bitflags = "1.0"
|
||||
byteorder = "1.0"
|
||||
cfg-if = "0.1.2"
|
||||
cstr = "0.1.2"
|
||||
fxhash = "0.2.1"
|
||||
gleam = "0.6.8"
|
||||
image = { optional = true, version = "0.21" }
|
||||
|
|
|
@ -374,8 +374,6 @@ impl FrameBuilder {
|
|||
);
|
||||
|
||||
{
|
||||
profile_marker!("UpdateVisibility");
|
||||
|
||||
let visibility_context = FrameVisibilityContext {
|
||||
device_pixel_scale,
|
||||
clip_scroll_tree,
|
||||
|
@ -441,19 +439,15 @@ impl FrameBuilder {
|
|||
)
|
||||
.unwrap();
|
||||
|
||||
{
|
||||
profile_marker!("PreparePrims");
|
||||
|
||||
self.prim_store.prepare_primitives(
|
||||
&mut prim_list,
|
||||
&pic_context,
|
||||
&mut pic_state,
|
||||
&frame_context,
|
||||
&mut frame_state,
|
||||
data_stores,
|
||||
scratch,
|
||||
);
|
||||
}
|
||||
self.prim_store.prepare_primitives(
|
||||
&mut prim_list,
|
||||
&pic_context,
|
||||
&mut pic_state,
|
||||
&frame_context,
|
||||
&mut frame_state,
|
||||
data_stores,
|
||||
scratch,
|
||||
);
|
||||
|
||||
let pic = &mut self.prim_store.pictures[self.root_pic_index.0];
|
||||
pic.restore_context(
|
||||
|
@ -506,7 +500,6 @@ impl FrameBuilder {
|
|||
debug_flags: DebugFlags,
|
||||
) -> Frame {
|
||||
profile_scope!("build");
|
||||
profile_marker!("BuildFrame");
|
||||
debug_assert!(
|
||||
DeviceIntRect::new(DeviceIntPoint::zero(), self.window_size)
|
||||
.contains_rect(&self.screen_rect)
|
||||
|
@ -553,86 +546,79 @@ impl FrameBuilder {
|
|||
debug_flags,
|
||||
);
|
||||
|
||||
{
|
||||
profile_marker!("BlockOnResources");
|
||||
|
||||
resource_cache.block_until_all_resources_added(gpu_cache,
|
||||
&mut render_tasks,
|
||||
texture_cache_profile);
|
||||
}
|
||||
resource_cache.block_until_all_resources_added(gpu_cache,
|
||||
&mut render_tasks,
|
||||
texture_cache_profile);
|
||||
|
||||
let mut passes = vec![];
|
||||
let mut deferred_resolves = vec![];
|
||||
let mut has_texture_cache_tasks = false;
|
||||
let mut prim_headers = PrimitiveHeaders::new();
|
||||
|
||||
{
|
||||
profile_marker!("Batching");
|
||||
|
||||
// Add passes as required for our cached render tasks.
|
||||
if !render_tasks.cacheable_render_tasks.is_empty() {
|
||||
passes.push(RenderPass::new_off_screen(screen_size));
|
||||
for cacheable_render_task in &render_tasks.cacheable_render_tasks {
|
||||
render_tasks.assign_to_passes(
|
||||
*cacheable_render_task,
|
||||
0,
|
||||
screen_size,
|
||||
&mut passes,
|
||||
);
|
||||
}
|
||||
passes.reverse();
|
||||
}
|
||||
|
||||
if let Some(main_render_task_id) = main_render_task_id {
|
||||
let passes_start = passes.len();
|
||||
passes.push(RenderPass::new_main_framebuffer(screen_size));
|
||||
// Add passes as required for our cached render tasks.
|
||||
if !render_tasks.cacheable_render_tasks.is_empty() {
|
||||
passes.push(RenderPass::new_off_screen(screen_size));
|
||||
for cacheable_render_task in &render_tasks.cacheable_render_tasks {
|
||||
render_tasks.assign_to_passes(
|
||||
main_render_task_id,
|
||||
passes_start,
|
||||
*cacheable_render_task,
|
||||
0,
|
||||
screen_size,
|
||||
&mut passes,
|
||||
);
|
||||
passes[passes_start..].reverse();
|
||||
}
|
||||
passes.reverse();
|
||||
}
|
||||
|
||||
// Used to generated a unique z-buffer value per primitive.
|
||||
let mut z_generator = ZBufferIdGenerator::new();
|
||||
let use_dual_source_blending = self.config.dual_source_blending_is_enabled &&
|
||||
self.config.dual_source_blending_is_supported;
|
||||
if let Some(main_render_task_id) = main_render_task_id {
|
||||
let passes_start = passes.len();
|
||||
passes.push(RenderPass::new_main_framebuffer(screen_size));
|
||||
render_tasks.assign_to_passes(
|
||||
main_render_task_id,
|
||||
passes_start,
|
||||
screen_size,
|
||||
&mut passes,
|
||||
);
|
||||
passes[passes_start..].reverse();
|
||||
}
|
||||
|
||||
for pass in &mut passes {
|
||||
let mut ctx = RenderTargetContext {
|
||||
device_pixel_scale,
|
||||
prim_store: &self.prim_store,
|
||||
resource_cache,
|
||||
use_dual_source_blending,
|
||||
clip_scroll_tree,
|
||||
data_stores,
|
||||
surfaces: &surfaces,
|
||||
scratch,
|
||||
screen_world_rect,
|
||||
globals: &self.globals,
|
||||
};
|
||||
|
||||
pass.build(
|
||||
&mut ctx,
|
||||
gpu_cache,
|
||||
&mut render_tasks,
|
||||
&mut deferred_resolves,
|
||||
&self.clip_store,
|
||||
&mut transform_palette,
|
||||
&mut prim_headers,
|
||||
&mut z_generator,
|
||||
);
|
||||
let mut deferred_resolves = vec![];
|
||||
let mut has_texture_cache_tasks = false;
|
||||
let mut prim_headers = PrimitiveHeaders::new();
|
||||
// Used to generated a unique z-buffer value per primitive.
|
||||
let mut z_generator = ZBufferIdGenerator::new();
|
||||
let use_dual_source_blending = self.config.dual_source_blending_is_enabled &&
|
||||
self.config.dual_source_blending_is_supported;
|
||||
|
||||
match pass.kind {
|
||||
RenderPassKind::MainFramebuffer(ref color) => {
|
||||
has_texture_cache_tasks |= color.must_be_drawn();
|
||||
}
|
||||
RenderPassKind::OffScreen { ref texture_cache, ref color, .. } => {
|
||||
has_texture_cache_tasks |= !texture_cache.is_empty();
|
||||
has_texture_cache_tasks |= color.must_be_drawn();
|
||||
}
|
||||
for pass in &mut passes {
|
||||
let mut ctx = RenderTargetContext {
|
||||
device_pixel_scale,
|
||||
prim_store: &self.prim_store,
|
||||
resource_cache,
|
||||
use_dual_source_blending,
|
||||
clip_scroll_tree,
|
||||
data_stores,
|
||||
surfaces: &surfaces,
|
||||
scratch,
|
||||
screen_world_rect,
|
||||
globals: &self.globals,
|
||||
};
|
||||
|
||||
pass.build(
|
||||
&mut ctx,
|
||||
gpu_cache,
|
||||
&mut render_tasks,
|
||||
&mut deferred_resolves,
|
||||
&self.clip_store,
|
||||
&mut transform_palette,
|
||||
&mut prim_headers,
|
||||
&mut z_generator,
|
||||
);
|
||||
|
||||
match pass.kind {
|
||||
RenderPassKind::MainFramebuffer(ref color) => {
|
||||
has_texture_cache_tasks |= color.must_be_drawn();
|
||||
}
|
||||
RenderPassKind::OffScreen { ref texture_cache, ref color, .. } => {
|
||||
has_texture_cache_tasks |= !texture_cache.is_empty();
|
||||
has_texture_cache_tasks |= color.must_be_drawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,8 +56,6 @@ extern crate bitflags;
|
|||
#[macro_use]
|
||||
extern crate cfg_if;
|
||||
#[macro_use]
|
||||
extern crate cstr;
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
@ -72,9 +70,6 @@ extern crate thread_profiler;
|
|||
extern crate wr_malloc_size_of;
|
||||
use wr_malloc_size_of as malloc_size_of;
|
||||
|
||||
#[macro_use]
|
||||
mod profiler;
|
||||
|
||||
mod batch;
|
||||
mod border;
|
||||
mod box_shadow;
|
||||
|
@ -108,6 +103,7 @@ mod internal_types;
|
|||
mod picture;
|
||||
mod prim_store;
|
||||
mod print_tree;
|
||||
mod profiler;
|
||||
mod record;
|
||||
mod render_backend;
|
||||
mod render_task;
|
||||
|
@ -211,7 +207,6 @@ pub use device::{ProgramBinary, ProgramCache, ProgramCacheObserver};
|
|||
pub use device::Device;
|
||||
pub use frame_builder::ChasePrimitive;
|
||||
pub use picture::FRAMES_BEFORE_PICTURE_CACHING;
|
||||
pub use profiler::{ProfilerHooks, set_profiler_hooks};
|
||||
pub use renderer::{AsyncPropertySampler, CpuProfile, DebugFlags, OutputImageHandler, RendererKind};
|
||||
pub use renderer::{ExternalImage, ExternalImageHandler, ExternalImageSource, GpuProfile};
|
||||
pub use renderer::{GraphicsApi, GraphicsApiInfo, PipelineInfo, Renderer, RendererOptions};
|
||||
|
|
|
@ -1646,8 +1646,6 @@ impl<'a> PictureUpdateState<'a> {
|
|||
clip_store: &ClipStore,
|
||||
clip_data_store: &ClipDataStore,
|
||||
) {
|
||||
profile_marker!("UpdatePictures");
|
||||
|
||||
let mut state = PictureUpdateState {
|
||||
surfaces,
|
||||
surface_stack: vec![SurfaceIndex(0)],
|
||||
|
|
|
@ -7,10 +7,9 @@ use debug_render::DebugRenderer;
|
|||
use device::query::{GpuSampler, GpuTimer, NamedTag};
|
||||
use euclid::{Point2D, Rect, Size2D, vec2};
|
||||
use internal_types::FastHashMap;
|
||||
use renderer::{MAX_VERTEX_TEXTURE_WIDTH, wr_has_been_initialized};
|
||||
use renderer::MAX_VERTEX_TEXTURE_WIDTH;
|
||||
use std::collections::vec_deque::VecDeque;
|
||||
use std::{f32, mem};
|
||||
use std::ffi::CStr;
|
||||
use time::precise_time_ns;
|
||||
|
||||
const GRAPH_WIDTH: f32 = 1024.0;
|
||||
|
@ -21,68 +20,6 @@ const PROFILE_PADDING: f32 = 10.0;
|
|||
|
||||
const ONE_SECOND_NS: u64 = 1000000000;
|
||||
|
||||
/// Defines the interface for hooking up an external profiler to WR.
|
||||
pub trait ProfilerHooks : Send + Sync {
|
||||
/// Called at the beginning of a profile scope. The label must
|
||||
/// be a C string (null terminated).
|
||||
fn begin_marker(&self, label: &CStr);
|
||||
|
||||
/// Called at the end of a profile scope. The label must
|
||||
/// be a C string (null terminated).
|
||||
fn end_marker(&self, label: &CStr);
|
||||
}
|
||||
|
||||
/// The current global profiler callbacks, if set by embedder.
|
||||
static mut PROFILER_HOOKS: Option<&'static ProfilerHooks> = None;
|
||||
|
||||
/// Set the profiler callbacks, or None to disable the profiler.
|
||||
/// This function must only ever be called before any WR instances
|
||||
/// have been created, or the hooks will not be set.
|
||||
pub fn set_profiler_hooks(hooks: Option<&'static ProfilerHooks>) {
|
||||
if !wr_has_been_initialized() {
|
||||
unsafe {
|
||||
PROFILER_HOOKS = hooks;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A simple RAII style struct to manage a profile scope.
|
||||
pub struct ProfileScope {
|
||||
name: &'static CStr,
|
||||
}
|
||||
|
||||
impl ProfileScope {
|
||||
/// Begin a new profile scope
|
||||
pub fn new(name: &'static CStr) -> Self {
|
||||
unsafe {
|
||||
if let Some(ref hooks) = PROFILER_HOOKS {
|
||||
hooks.begin_marker(name);
|
||||
}
|
||||
}
|
||||
|
||||
ProfileScope {
|
||||
name,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for ProfileScope {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
if let Some(ref hooks) = PROFILER_HOOKS {
|
||||
hooks.end_marker(self.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A helper macro to define profile scopes.
|
||||
macro_rules! profile_marker {
|
||||
($string:expr) => {
|
||||
let _scope = $crate::profiler::ProfileScope::new(cstr!($string));
|
||||
};
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct GpuProfileTag {
|
||||
pub label: &'static str,
|
||||
|
|
|
@ -84,7 +84,6 @@ use std::os::raw::c_void;
|
|||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::mpsc::{channel, Receiver};
|
||||
use std::thread;
|
||||
use std::cell::RefCell;
|
||||
|
@ -107,14 +106,6 @@ cfg_if! {
|
|||
}
|
||||
}
|
||||
|
||||
/// Is only false if no WR instances have ever been created.
|
||||
static HAS_BEEN_INITIALIZED: AtomicBool = AtomicBool::new(false);
|
||||
|
||||
/// Returns true if a WR instance has ever been initialized in this process.
|
||||
pub fn wr_has_been_initialized() -> bool {
|
||||
HAS_BEEN_INITIALIZED.load(Ordering::SeqCst)
|
||||
}
|
||||
|
||||
pub const MAX_VERTEX_TEXTURE_WIDTH: usize = 1024;
|
||||
/// Enabling this toggle would force the GPU cache scattered texture to
|
||||
/// be resized every frame, which enables GPU debuggers to see if this
|
||||
|
@ -1638,8 +1629,6 @@ impl Renderer {
|
|||
mut options: RendererOptions,
|
||||
shaders: Option<&mut WrShaders>
|
||||
) -> Result<(Self, RenderApiSender), RendererError> {
|
||||
HAS_BEEN_INITIALIZED.store(true, Ordering::SeqCst);
|
||||
|
||||
let (api_tx, api_rx) = channel::msg_channel()?;
|
||||
let (payload_tx, payload_rx) = channel::payload_channel()?;
|
||||
let (result_tx, result_rx) = channel();
|
||||
|
|
Загрузка…
Ссылка в новой задаче