Bug 1624627 - Add a slow transaction indicator. r=jrmuizel

It moves when DL building + IPC + scene building takes more than 100ms.

Depends on D69247

Differential Revision: https://phabricator.services.mozilla.com/D69254

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Nicolas Silva 2020-04-02 18:32:58 +00:00
Родитель fdb6027218
Коммит 5ca5cd78ce
3 изменённых файлов: 23 добавлений и 2 удалений

Просмотреть файл

@ -693,6 +693,7 @@ pub struct BackendProfileCounters {
pub resources: ResourceProfileCounters,
pub ipc: IpcProfileCounters,
pub intern: InternProfileCounters,
pub scene_changed: bool,
}
#[derive(Clone)]
@ -844,12 +845,14 @@ impl BackendProfileCounters {
filter_data: ResourceProfileCounter::new("Interned filter data", None, None),
backdrop: ResourceProfileCounter::new("Interned backdrops", None, None),
},
scene_changed: false,
}
}
pub fn reset(&mut self) {
self.total_time.reset();
self.resources.texture_cache.rasterized_blob_pixels.reset();
self.scene_changed = false;
}
}
@ -1772,7 +1775,7 @@ impl Profiler {
style: ProfileStyle,
) {
self.draw_state.x_left = 20.0;
self.draw_state.y_left = 40.0;
self.draw_state.y_left = 50.0;
self.draw_state.x_right = 450.0;
self.draw_state.y_right = 40.0;

Просмотреть файл

@ -915,6 +915,7 @@ impl RenderBackend {
let scene_build_time =
txn.scene_build_end_time - txn.scene_build_start_time;
profile_counters.scene_build_time.set(scene_build_time);
profile_counters.scene_changed = true;
}
if let Some(doc) = self.documents.get_mut(&txn.document_id) {

Просмотреть файл

@ -1883,6 +1883,7 @@ pub struct Renderer {
new_frame_indicator: ChangeIndicator,
new_scene_indicator: ChangeIndicator,
slow_frame_indicator: ChangeIndicator,
slow_txn_indicator: ChangeIndicator,
last_time: u64,
@ -2465,6 +2466,7 @@ impl Renderer {
new_frame_indicator: ChangeIndicator::new(),
new_scene_indicator: ChangeIndicator::new(),
slow_frame_indicator: ChangeIndicator::new(),
slow_txn_indicator: ChangeIndicator::new(),
max_recorded_profiles: options.max_recorded_profiles,
clear_color: options.clear_color,
enable_clear_scissor: options.enable_clear_scissor,
@ -3346,6 +3348,16 @@ impl Renderer {
self.slow_frame_indicator.changed();
}
if self.backend_profile_counters.scene_changed {
let txn_time_ns = self.backend_profile_counters.ipc.total_send_time.get()
+ self.backend_profile_counters.ipc.build_time.get()
+ self.backend_profile_counters.scene_build_time.get();
let txn_time_ms = txn_time_ns as f64 / 1000000.0;
if txn_time_ms > 100.0 {
self.slow_txn_indicator.changed();
}
}
if self.max_recorded_profiles > 0 {
while self.cpu_profiles.len() >= self.max_recorded_profiles {
self.cpu_profiles.pop_front();
@ -3412,8 +3424,13 @@ impl Renderer {
if self.debug_flags.contains(DebugFlags::SLOW_FRAME_INDICATOR) {
if let Some(debug_renderer) = self.debug.get_mut(&mut self.device) {
self.slow_frame_indicator.draw(
self.slow_txn_indicator.draw(
x, 0.0,
ColorU::new(250, 80, 80, 255),
debug_renderer,
);
self.slow_frame_indicator.draw(
x, 10.0,
ColorU::new(220, 30, 10, 255),
debug_renderer,
);