From bd38cfc305bc753d04bd8c2bd53765738e905665 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Thu, 2 Feb 2012 22:58:15 +0000 Subject: [PATCH] Only age the renderer caches when a new block is created Originally committed to SVN as r6441. --- aegisub/src/audio_renderer.cpp | 10 ++++++++-- aegisub/src/audio_renderer.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/aegisub/src/audio_renderer.cpp b/aegisub/src/audio_renderer.cpp index 585523de3..b6da0d76d 100644 --- a/aegisub/src/audio_renderer.cpp +++ b/aegisub/src/audio_renderer.cpp @@ -200,6 +200,7 @@ const wxBitmap *AudioRenderer::GetCachedBitmap(int i, AudioRenderingStyle style) if (created) { renderer->Render(*bmp, i*cache_bitmap_width, style); + needs_age = true; } assert(bmp->IsOk()); @@ -243,14 +244,19 @@ void AudioRenderer::Render(wxDC &dc, wxPoint origin, int start, int length, Audi renderer->RenderBlank(dc, wxRect(origin.x-1, origin.y, lastx-origin.x+1, pixel_height), style); } - bitmaps[style].Age(cache_bitmap_maxsize); - renderer->AgeCache(cache_renderer_maxsize); + if (needs_age) + { + bitmaps[style].Age(cache_bitmap_maxsize); + renderer->AgeCache(cache_renderer_maxsize); + needs_age = false; + } } void AudioRenderer::Invalidate() { for_each(bitmaps, bind(&AudioRendererBitmapCache::Age, _1, 0)); + needs_age = false; } diff --git a/aegisub/src/audio_renderer.h b/aegisub/src/audio_renderer.h index 41e52727d..dec7a8d86 100644 --- a/aegisub/src/audio_renderer.h +++ b/aegisub/src/audio_renderer.h @@ -115,6 +115,8 @@ class AudioRenderer { size_t cache_bitmap_maxsize; /// The maximum allowed size of the renderer's cache, in bytes size_t cache_renderer_maxsize; + /// Do the caches need to be aged? + bool needs_age; /// Actual renderer for bitmaps AudioRendererBitmapProvider *renderer;