Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Jan 2015 14:52:28 +0000 (UTC)
From:      Michael Gmelin <grembo@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r377332 - in head/devel/ice: . files
Message-ID:  <201501181452.t0IEqSqU074402@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: grembo
Date: Sun Jan 18 14:52:27 2015
New Revision: 377332
URL: https://svnweb.freebsd.org/changeset/ports/377332
QAT: https://qat.redports.org/buildarchive/r377332/

Log:
  Import fix to extremely poor stringify performance in IcePy, see [1].
  
  [1] https://www.zeroc.com/forums/patches/6379-ice-3-5-1-patch-fix-extremely-poor-icepy-stringify-performance.html
  
  Approved by:	mentors (implicit)

Added:
  head/devel/ice/files/patch-py-modules-IcePy-Types.h   (contents, props changed)
Modified:
  head/devel/ice/Makefile
  head/devel/ice/files/patch-py-modules-IcePy-Types.cpp

Modified: head/devel/ice/Makefile
==============================================================================
--- head/devel/ice/Makefile	Sun Jan 18 14:35:00 2015	(r377331)
+++ head/devel/ice/Makefile	Sun Jan 18 14:52:27 2015	(r377332)
@@ -3,7 +3,7 @@
 
 PORTNAME=		Ice
 PORTVERSION=		3.5.1
-PORTREVISION=		5
+PORTREVISION=		6
 CATEGORIES=		devel
 MASTER_SITES=		http://download.zeroc.com/Ice/3.5/
 

Modified: head/devel/ice/files/patch-py-modules-IcePy-Types.cpp
==============================================================================
--- head/devel/ice/files/patch-py-modules-IcePy-Types.cpp	Sun Jan 18 14:35:00 2015	(r377331)
+++ head/devel/ice/files/patch-py-modules-IcePy-Types.cpp	Sun Jan 18 14:52:27 2015	(r377332)
@@ -1,6 +1,24 @@
---- py/modules/IcePy/Types.cpp.orig	2013-03-11 15:19:47.000000000 +0000
-+++ py/modules/IcePy/Types.cpp	2014-09-08 14:21:13.335195726 +0000
-@@ -1232,11 +1232,15 @@ IcePy::StructInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMa
+--- py/modules/IcePy/Types.cpp.orig	2015-01-18 15:25:00.277654935 +0100
++++ py/modules/IcePy/Types.cpp	2015-01-18 15:24:52.737609935 +0100
+@@ -915,7 +915,7 @@
+ }
+ 
+ void
+-IcePy::PrimitiveInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory*)
++IcePy::PrimitiveInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory*)
+ {
+     if(!validate(value))
+     {
+@@ -1050,7 +1050,7 @@
+ }
+ 
+ void
+-IcePy::EnumInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory*)
++IcePy::EnumInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory*)
+ {
+     if(!validate(value))
+     {
+@@ -1232,11 +1232,15 @@
  {
      assert(PyObject_IsInstance(p, pythonType.get()) == 1); // validate() should have caught this.
  
@@ -17,7 +35,7 @@
          }
          else
          {
-@@ -1266,7 +1270,9 @@ IcePy::StructInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMa
+@@ -1266,7 +1270,9 @@
  
      if(optional && _variableLength)
      {
@@ -28,7 +46,16 @@
      }
  }
  
-@@ -1402,11 +1408,15 @@ IcePy::SequenceInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Object
+@@ -1305,7 +1311,7 @@
+ }
+ 
+ void
+-IcePy::StructInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::StructInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(!validate(value))
+     {
+@@ -1402,11 +1408,15 @@
  {
      PrimitiveInfoPtr pi = PrimitiveInfoPtr::dynamicCast(elementType);
  
@@ -45,7 +72,7 @@
          }
          else if(elementType->wireSize() > 1)
          {
-@@ -1490,7 +1500,9 @@ IcePy::SequenceInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Object
+@@ -1490,7 +1500,9 @@
  
      if(optional && elementType->variableLength())
      {
@@ -56,7 +83,25 @@
      }
  }
  
-@@ -2480,11 +2492,15 @@ IcePy::DictionaryInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Obje
+@@ -1559,7 +1571,7 @@
+ }
+ 
+ void
+-IcePy::SequenceInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::SequenceInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(!validate(value))
+     {
+@@ -2397,7 +2409,7 @@
+ }
+ 
+ void
+-IcePy::CustomInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::CustomInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(!validate(value))
+     {
+@@ -2480,11 +2492,15 @@
  
      const Ice::Int sz = p == Py_None ? 0 : static_cast<Ice::Int>(PyDict_Size(p));
  
@@ -73,7 +118,7 @@
          }
          else
          {
-@@ -2523,7 +2539,9 @@ IcePy::DictionaryInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Obje
+@@ -2523,7 +2539,9 @@
  
      if(optional && _variableLength)
      {
@@ -84,7 +129,34 @@
      }
  }
  
-@@ -2958,9 +2976,13 @@ IcePy::ProxyInfo::optionalFormat() const
+@@ -2597,7 +2615,7 @@
+ }
+ 
+ void
+-IcePy::DictionaryInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::DictionaryInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(!validate(value))
+     {
+@@ -2798,7 +2816,7 @@
+ }
+ 
+ void
+-IcePy::ClassInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::ClassInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(!validate(value))
+     {
+@@ -2863,7 +2881,7 @@
+ }
+ 
+ void
+-IcePy::ClassInfo::printMembers(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::ClassInfo::printMembers(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(base)
+     {
+@@ -2958,9 +2976,13 @@
  void
  IcePy::ProxyInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMap*, bool optional, const Ice::StringSeq*)
  {
@@ -99,7 +171,7 @@
      }
  
      if(p == Py_None)
-@@ -2978,7 +3000,9 @@ IcePy::ProxyInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMap
+@@ -2978,7 +3000,9 @@
  
      if(optional)
      {
@@ -110,3 +182,48 @@
      }
  }
  
+@@ -3011,7 +3035,7 @@
+ }
+ 
+ void
+-IcePy::ProxyInfo::print(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory*)
++IcePy::ProxyInfo::print(PyObject* value, PrintHelper& out, PrintObjectHistory*)
+ {
+     if(!validate(value))
+     {
+@@ -3463,7 +3487,7 @@
+ }
+ 
+ void
+-IcePy::ExceptionInfo::print(PyObject* value, IceUtilInternal::Output& out)
++IcePy::ExceptionInfo::print(PyObject* value, PrintHelper& out)
+ {
+     if(!PyObject_IsInstance(value, pythonType.get()))
+     {
+@@ -3481,7 +3505,7 @@
+ }
+ 
+ void
+-IcePy::ExceptionInfo::printMembers(PyObject* value, IceUtilInternal::Output& out, PrintObjectHistory* history)
++IcePy::ExceptionInfo::printMembers(PyObject* value, PrintHelper& out, PrintObjectHistory* history)
+ {
+     if(base)
+     {
+@@ -4209,7 +4233,7 @@
+     assert(info);
+ 
+     ostringstream ostr;
+-    IceUtilInternal::Output out(ostr);
++    PrintHelper out(ostr);
+     PrintObjectHistory history;
+     history.index = 0;
+     info->print(value, out, &history);
+@@ -4234,7 +4258,7 @@
+     assert(info);
+ 
+     ostringstream ostr;
+-    IceUtilInternal::Output out(ostr);
++    PrintHelper out(ostr);
+     info->print(value, out);
+ 
+     string str = ostr.str();

Added: head/devel/ice/files/patch-py-modules-IcePy-Types.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ice/files/patch-py-modules-IcePy-Types.h	Sun Jan 18 14:52:27 2015	(r377332)
@@ -0,0 +1,150 @@
+--- py/modules/IcePy/Types.h.orig	2015-01-18 15:25:04.917707935 +0100
++++ py/modules/IcePy/Types.h	2015-01-18 15:24:54.689631935 +0100
+@@ -69,6 +69,50 @@
+     std::map<PyObject*, int> objects;
+ };
+ 
++struct PrintHelper
++{
++    std::ostream& os;
++    Ice::Long indent;
++
++    PrintHelper(std::ostream& o): os(o), indent(0) {}
++    void newline()
++    {
++        os << "\n" << std::string(indent * 4, ' ');
++        os.flush();
++    }
++
++    void sb()
++    {
++        newline();
++        os << "{";
++        ++indent;
++    }
++
++    void eb()
++    {
++        --indent;
++        newline();
++        os << "}";
++    }
++};
++
++template<typename T>
++inline PrintHelper&
++operator<<(PrintHelper& ph, const T& val)
++{
++  ph.os << val;
++  return ph;
++}
++
++template<>
++inline PrintHelper&
++operator<<(PrintHelper& ph, const IceUtilInternal::NextLine&)
++{
++    ph.newline();
++    return ph;
++}
++
++
+ //
+ // The delayed nature of class unmarshaling in the Ice protocol requires us to
+ // handle unmarshaling using a callback strategy. An instance of UnmarshalCallback
+@@ -127,7 +171,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0) = 0;
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*) = 0;
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*) = 0;
+ };
+ typedef IceUtil::Handle<TypeInfo> TypeInfoPtr;
+ 
+@@ -164,7 +208,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     const Kind kind;
+ };
+@@ -193,7 +237,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     const std::string id;
+     const PyObjectHandle pythonType;
+@@ -240,7 +284,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     virtual void destroy();
+ 
+@@ -278,7 +322,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     virtual void destroy();
+ 
+@@ -338,7 +382,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     virtual void destroy();
+ 
+@@ -371,7 +415,7 @@
+                            const Ice::StringSeq* = 0);
+     virtual void unmarshaled(PyObject*, PyObject*, void*);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     virtual void destroy();
+ 
+@@ -420,11 +464,11 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     virtual void destroy();
+ 
+-    void printMembers(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    void printMembers(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     const std::string id;
+     const Ice::Int compactId;
+@@ -462,7 +506,7 @@
+     virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, PyObject*, void*, bool,
+                            const Ice::StringSeq* = 0);
+ 
+-    virtual void print(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    virtual void print(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     virtual void destroy();
+ 
+@@ -482,8 +526,8 @@
+     void marshal(PyObject*, const Ice::OutputStreamPtr&, ObjectMap*);
+     PyObject* unmarshal(const Ice::InputStreamPtr&);
+ 
+-    void print(PyObject*, IceUtilInternal::Output&);
+-    void printMembers(PyObject*, IceUtilInternal::Output&, PrintObjectHistory*);
++    void print(PyObject*, PrintHelper&);
++    void printMembers(PyObject*, PrintHelper&, PrintObjectHistory*);
+ 
+     std::string id;
+     bool preserve;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501181452.t0IEqSqU074402>