Bug 1444434 - Free the Gecko profiler screenshots structures in the WebRender renderer when profiling stops r=kvark

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Barret Rennie 2019-03-21 19:30:34 +00:00
Родитель 0bbd0a6539
Коммит b8fcd696e6
4 изменённых файлов: 22 добавлений и 4 удалений

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

@ -18,7 +18,7 @@ void RendererScreenshotGrabber::MaybeGrabScreenshot(
GrabScreenshot(aRenderer, aWindowSize);
} else if (mProfilerScreenshots) {
Destroy();
Destroy(aRenderer);
}
}
@ -30,14 +30,16 @@ void RendererScreenshotGrabber::MaybeProcessQueue(Renderer* aRenderer) {
ProcessQueue(aRenderer);
} else if (mProfilerScreenshots) {
Destroy();
Destroy(aRenderer);
}
}
void RendererScreenshotGrabber::Destroy() {
void RendererScreenshotGrabber::Destroy(Renderer* aRenderer) {
mQueue.Clear();
mCurrentFrameQueueItem = Nothing();
mProfilerScreenshots = nullptr;
wr_renderer_release_profiler_structures(aRenderer);
}
void RendererScreenshotGrabber::GrabScreenshot(

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

@ -44,8 +44,11 @@ class RendererScreenshotGrabber final {
private:
/**
* Drop all our allocated memory when we are no longer profiling.
*
* This will also instruct WebRender to drop all its Gecko profiler
* associated memory.
*/
void Destroy();
void Destroy(Renderer* aRenderer);
/**
* Actually grab a screenshot from WebRender.

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

@ -715,6 +715,11 @@ pub extern "C" fn wr_renderer_map_and_recycle_screenshot(
)
}
#[no_mangle]
pub extern "C" fn wr_renderer_release_profiler_structures(renderer: &mut Renderer) {
renderer.release_profiler_structures();
}
// Call wr_renderer_render() before calling this function.
#[no_mangle]
pub unsafe extern "C" fn wr_renderer_readback(renderer: &mut Renderer,

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

@ -2632,6 +2632,14 @@ impl Renderer {
}
}
pub fn release_profiler_structures(&mut self) {
if let Some(async_screenshots) = self.async_screenshots.take() {
self.device.begin_frame();
async_screenshots.deinit(&mut self.device);
self.device.end_frame();
}
}
#[cfg(not(feature = "debugger"))]
fn get_screenshot_for_debugger(&mut self) -> String {
// Avoid unused param warning.