зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
0bbd0a6539
Коммит
b8fcd696e6
|
@ -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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче