[gxml] Added performance/tw-serialize



commit c636ef5d92eb1504fc8f16b7b0bbd61a2a208eeb
Author: Daniel Espinosa <esodan gmail com>
Date:   Tue May 5 18:03:11 2015 -0500

    Added performance/tw-serialize
    
    * Fixes on containers removing xElement
    * Fixed a bug on Document.save_as()
    * There exists a bug on serialization to TwDocument,
      missing properties on saving to file

 gxml/Document.vala                  |    9 +++------
 gxml/SerializableGeeArrayList.vala  |    4 ++--
 gxml/SerializableGeeDualKeyMap.vala |    4 ++--
 gxml/SerializableGeeHashMap.vala    |    4 ++--
 gxml/SerializableGeeTreeMap.vala    |    4 ++--
 test/TwDocumentTest.vala            |    2 +-
 test/gxml-performance.vala          |   30 ++++++++++++++++++++++++++++++
 7 files changed, 42 insertions(+), 15 deletions(-)
---
diff --git a/gxml/Document.vala b/gxml/Document.vala
index a18090c..33e2414 100644
--- a/gxml/Document.vala
+++ b/gxml/Document.vala
@@ -119,12 +119,9 @@ public interface GXml.Document : Object, GXml.Node
    */
   public virtual bool save_as (GLib.File f, GLib.Cancellable? cancellable = null) throws GLib.Error
   {
-    if (f.query_exists ()) {
-      f = file;
-      save (cancellable);
-      return true;
-    }
-    return false;
+    file = f;
+    save (cancellable);
+    return true;
   }
   /**
    * Creates a new { link GXml.Document} using default implementation class.
diff --git a/gxml/SerializableGeeArrayList.vala b/gxml/SerializableGeeArrayList.vala
index 9725dd7..0ae57d0 100644
--- a/gxml/SerializableGeeArrayList.vala
+++ b/gxml/SerializableGeeArrayList.vala
@@ -83,13 +83,13 @@ public class GXml.SerializableArrayList<G> : Gee.ArrayList<G>, Serializable, Ser
 
   public virtual GXml.Node? serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     return default_serialize (node);
   }
   public GXml.Node? default_serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     if (element_type.is_a (typeof (Serializable))) {
       for (int i =0; i < size; i++) {
diff --git a/gxml/SerializableGeeDualKeyMap.vala b/gxml/SerializableGeeDualKeyMap.vala
index 5c51ef5..68ec52c 100644
--- a/gxml/SerializableGeeDualKeyMap.vala
+++ b/gxml/SerializableGeeDualKeyMap.vala
@@ -164,13 +164,13 @@ public class GXml.SerializableDualKeyMap<P,S,V> : Object, Serializable, Serializ
 
   public virtual GXml.Node? serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     return default_serialize (node);
   }
   public GXml.Node? default_serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     foreach (V v in values ()) {
         if (v is Serializable)
diff --git a/gxml/SerializableGeeHashMap.vala b/gxml/SerializableGeeHashMap.vala
index b0fe3b2..5176a57 100644
--- a/gxml/SerializableGeeHashMap.vala
+++ b/gxml/SerializableGeeHashMap.vala
@@ -80,13 +80,13 @@ public class GXml.SerializableHashMap<K,V> : Gee.HashMap<K,V>, Serializable, Ser
 
   public virtual GXml.Node? serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     return default_serialize (node);
   }
   public GXml.Node? default_serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     if (value_type.is_a (typeof (Serializable))) {
       foreach (V v in values) {
diff --git a/gxml/SerializableGeeTreeMap.vala b/gxml/SerializableGeeTreeMap.vala
index 354dfae..72d4323 100644
--- a/gxml/SerializableGeeTreeMap.vala
+++ b/gxml/SerializableGeeTreeMap.vala
@@ -83,13 +83,13 @@ public class GXml.SerializableTreeMap<K,V> : Gee.TreeMap<K,V>, Serializable, Ser
 
   public virtual GXml.Node? serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     return default_serialize (node);
   }
   public GXml.Node? default_serialize (GXml.Node node)
                               throws GLib.Error
-                              requires (node is xElement)
+                              requires (node is GXml.Element)
   {
     if (value_type.is_a (typeof (Serializable))) {
       foreach (V v in values) {
diff --git a/test/TwDocumentTest.vala b/test/TwDocumentTest.vala
index 43e7bd8..64d127b 100644
--- a/test/TwDocumentTest.vala
+++ b/test/TwDocumentTest.vala
@@ -259,7 +259,7 @@ class TwDocumentTest : GXmlTest {
                                var r = (GXml.Element) d.root;
                                r.set_attr ("name","The Great Book");
 #if DEBUG
-                               GLib.message (@"Creating chidls...");
+                               GLib.message (@"Creating childs...");
 #endif
                                for (int i = 0; i < 30000; i++){
                                        var b = (GXml.Element) d.create_element ("book");
diff --git a/test/gxml-performance.vala b/test/gxml-performance.vala
index cb884ce..69f5db0 100644
--- a/test/gxml-performance.vala
+++ b/test/gxml-performance.vala
@@ -141,6 +141,36 @@ public class Performance
 #endif
         assert_not_reached ();
       }
+    });Test.add_func ("/gxml/performance/tw-serialize",
+    () => {
+      try {
+        double time;
+        Test.timer_start ();
+        var d = new xDocument.from_path (GXmlTest.get_test_dir () + "/test-large.xml");
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "open document from path: %g seconds", time);
+        Test.timer_start ();
+        var bs = new BookStore ();
+        bs.deserialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "standard deserialize/performance: %g seconds", time);
+        Test.timer_start ();
+        var d2 = new TwDocument (GXmlTest.get_test_dir () + "/test-large.xml");
+        bs.serialize (d2);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "TwDocument serialize/performance: %g seconds", time);
+        Test.timer_start ();
+        var nf = GLib.File.new_for_path (GXmlTest.get_test_dir () + "/test-large-tw.xml");
+        d2.indent = true;
+        d2.save_as (nf);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "TwDocument Write to disk serialize/performance: %g seconds", time);
+      } catch (GLib.Error e) {
+#if DEBUG
+        GLib.message ("ERROR: "+e.message);
+#endif
+        assert_not_reached ();
+      }
     });
   }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]