[banshee/stable] Delay initializing the MediaProfileManager
- From: Aaron Bockover <abock src gnome org>
- To: svn-commits-list gnome org
- Subject: [banshee/stable] Delay initializing the MediaProfileManager
- Date: Fri, 24 Apr 2009 21:15:23 -0400 (EDT)
commit e499b85aaaeea28ce6e34b31db2d9f16fc9dd8fb
Author: Aaron Bockover <abockover novell com>
Date: Fri Apr 24 21:12:10 2009 -0400
Delay initializing the MediaProfileManager
This is a performance patch that delays the core initialization of
MediaProfileManager until it's actually needed by something, which
introduces a startup time savings of 0.73s on an MSi Wind Netbook.
---
.../Banshee.GStreamer/Banshee.GStreamer/Service.cs | 7 ++-
.../Banshee.MediaProfiles/MediaProfileManager.cs | 50 ++++++++++++++++++-
2 files changed, 53 insertions(+), 4 deletions(-)
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs
index 70ffb3a..fc5ae10 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs
@@ -59,7 +59,12 @@ namespace Banshee.GStreamer
}
gstreamer_initialize (debugging, native_log_handler);
-
+
+ ServiceManager.MediaProfileManager.Initialized += OnMediaProfileManagerInitialized;
+ }
+
+ private void OnMediaProfileManagerInitialized (object o, EventArgs args)
+ {
MediaProfileManager profile_manager = ServiceManager.MediaProfileManager;
if (profile_manager != null) {
Pipeline.AddSExprFunction ("gst-element-is-available", SExprTestElement);
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
index 330922a..2e75926 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
@@ -66,13 +66,28 @@ namespace Banshee.MediaProfiles
}
private XmlDocument document;
- private List<Profile> profiles = new List<Profile>();
- private Dictionary<string, PipelineVariable> preset_variables = new Dictionary<string, PipelineVariable>();
+ private List<Profile> profiles;
+ private Dictionary<string, PipelineVariable> preset_variables;
public event TestProfileHandler TestProfile;
+ public event EventHandler Initialized;
public MediaProfileManager()
{
+ }
+
+ private void Initialize ()
+ {
+ if (profiles != null) {
+ return;
+ }
+
+
+ uint timer = Hyena.Log.DebugTimerStart ();
+
+ profiles = new List<Profile> ();
+ preset_variables = new Dictionary<string, PipelineVariable> ();
+
string path = Banshee.Base.Paths.GetInstalledDataDirectory ("audio-profiles");
if(File.Exists(path)) {
LoadFromFile(path);
@@ -88,6 +103,13 @@ namespace Banshee.MediaProfiles
}
}
}
+
+ Hyena.Log.DebugTimerPrint (timer, "Initialized MediaProfileManager: {0}");
+
+ EventHandler handler = Initialized;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
}
private void LoadFromFile(string path)
@@ -145,6 +167,7 @@ namespace Banshee.MediaProfiles
private Dictionary<string, string> mimetype_extensions = new Dictionary<string, string> ();
public void Add(Profile profile)
{
+ Initialize ();
foreach (string mimetype in profile.MimeTypes) {
mimetype_extensions[mimetype] = profile.OutputFileExtension;
}
@@ -153,6 +176,7 @@ namespace Banshee.MediaProfiles
public void Remove(Profile profile)
{
+ Initialize ();
profiles.Remove(profile);
}
@@ -162,6 +186,7 @@ namespace Banshee.MediaProfiles
throw new ArgumentNullException("id");
}
+ Initialize ();
return preset_variables[id];
}
@@ -179,6 +204,8 @@ namespace Banshee.MediaProfiles
public IEnumerable<Profile> GetAvailableProfiles()
{
+ Initialize ();
+
foreach(Profile profile in this) {
if(profile.Available == null) {
profile.Available = OnTestProfile(profile);
@@ -192,11 +219,15 @@ namespace Banshee.MediaProfiles
public ProfileConfiguration GetActiveProfileConfiguration (string id)
{
+ Initialize ();
+
return ProfileConfiguration.LoadActive (this, id);
}
public ProfileConfiguration GetActiveProfileConfiguration(string id, string [] mimetypes)
{
+ Initialize ();
+
ProfileConfiguration config = GetActiveProfileConfiguration (id);
if (config != null) {
// Ensure the profile configuration is valid for the mimetype restriction
@@ -222,6 +253,8 @@ namespace Banshee.MediaProfiles
public void TestAll()
{
+ Initialize ();
+
foreach(Profile profile in this) {
profile.Available = OnTestProfile(profile);
}
@@ -229,6 +262,8 @@ namespace Banshee.MediaProfiles
public Profile GetProfileForMimeType(string mimetype)
{
+ Initialize ();
+
foreach(Profile profile in GetAvailableProfiles()) {
if(profile.HasMimeType(mimetype)) {
return profile;
@@ -246,6 +281,8 @@ namespace Banshee.MediaProfiles
if (extension[0] == '.')
extension = extension.Substring (1, extension.Length - 1);
+ Initialize ();
+
foreach (Profile profile in this) {
if (profile.OutputFileExtension == extension) {
return profile;
@@ -256,6 +293,8 @@ namespace Banshee.MediaProfiles
public string GetExtensionForMimeType (string mimetype)
{
+ Initialize ();
+
if (mimetype != null && mimetype_extensions.ContainsKey (mimetype))
return mimetype_extensions[mimetype];
return null;
@@ -263,20 +302,24 @@ namespace Banshee.MediaProfiles
public IEnumerator<Profile> GetEnumerator()
{
+ Initialize ();
return profiles.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
+ Initialize ();
return profiles.GetEnumerator();
}
public int ProfileCount {
- get { return profiles.Count; }
+ get { Initialize (); return profiles.Count; }
}
public int AvailableProfileCount {
get {
+ Initialize ();
+
int count = 0;
#pragma warning disable 0168, 0219
foreach(Profile profile in GetAvailableProfiles()) {
@@ -293,6 +336,7 @@ namespace Banshee.MediaProfiles
public override string ToString()
{
+ Initialize ();
StringBuilder builder = new StringBuilder();
builder.Append("Preset Pipeline Variables:\n\n");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]