Hello community,

here is the log from the commit of package kcachegrind for openSUSE:Factory 
checked in at 2015-10-03 20:19:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kcachegrind (Old)
 and      /work/SRC/openSUSE:Factory/.kcachegrind.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kcachegrind"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kcachegrind/kcachegrind.changes  2015-07-14 
17:32:31.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kcachegrind.new/kcachegrind.changes     
2015-10-03 20:19:06.000000000 +0200
@@ -1,0 +2,23 @@
+Sun Sep 13 19:01:39 UTC 2015 - [email protected]
+
+- Update to KDE Applications 15.08.1
+   * KDE Applications 15.08.1 
+   * https://www.kde.org/announcements/announce-applications-15.08.1.php
+
+
+-------------------------------------------------------------------
+Wed Aug 19 19:42:50 UTC 2015 - [email protected]
+
+- Update to KDE Applications 15.08.0
+   * KDE Applications 15.08.0
+   * https://www.kde.org/announcements/announce-applications-15.08.0.php
+
+-------------------------------------------------------------------
+Fri Aug  7 06:48:12 UTC 2015 - [email protected]
+
+- Update to KDE Applications 15.07.90
+   * KDE Applications 15.08.0 RC1
+   * https://www.kde.org/announcements/announce-applications-15.07.90.php
+
+
+-------------------------------------------------------------------

Old:
----
  kcachegrind-15.04.3.tar.xz

New:
----
  kcachegrind-15.08.1.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kcachegrind.spec ++++++
--- /var/tmp/diff_new_pack.N2ywVa/_old  2015-10-03 20:19:07.000000000 +0200
+++ /var/tmp/diff_new_pack.N2ywVa/_new  2015-10-03 20:19:07.000000000 +0200
@@ -22,7 +22,7 @@
 License:        GPL-2.0 and BSD-4-Clause and GFDL-1.2
 Group:          Development/Tools/Other
 Url:            http://www.kde.org/
-Version:        15.04.3
+Version:        15.08.1
 Release:        0
 Source0:        %{name}-%{version}.tar.xz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ kcachegrind-15.04.3.tar.xz -> kcachegrind-15.08.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/README_DEVELOPER 
new/kcachegrind-15.08.1/README_DEVELOPER
--- old/kcachegrind-15.04.3/README_DEVELOPER    1970-01-01 01:00:00.000000000 
+0100
+++ new/kcachegrind-15.08.1/README_DEVELOPER    2015-06-16 22:05:36.000000000 
+0200
@@ -0,0 +1,79 @@
+A short guide into the internal design of KCachegrind
+=====================================================
+
+
+Basics of the data model
+------------------------
+
+KCachegrind is a visualization of constant data. This makes the
+data model quite simple. However, as the visualization may require
+a lot of aggregation/summation of a huge number of raw data points in
+all kind of different ways, this aggregation is done in a lazy way.
+Only when the visualization asks for aggregated data, and the data was
+never requested before, aggregation is done.
+This makes the loading of large files faster: only the hierarchy of
+records (e.g. instructions belonging to a source line, source lines
+belong to a function, multiple functions are part of an ELF object)
+is built while loading a file, but no aggregation of data is done.
+Further, this reduces memory consumption.
+
+Important classes of the data model:
+
+* TraceData is a representation of profile data from one profile session,
+  possibly consisting of multiple parts, where each part corresponds to a
+  loaded file
+
+* any record/entry of a some profile data is inherited from CostItem,
+  and this is a complete hierarchy, which gets automatically built
+  when loading a file. E.g. TraceData itself inherits from CostItem.
+
+* every record/entry usually consists of different fields, and
+  are indexed by so-called EventType's. So-called "derived" event
+  types are not actually backed by real fields with concrete data,
+  but get calculated on-demand using a given formula referencing
+  fields with real data.
+
+
+Basics of the GUI
+-----------------
+
+At any time, every view visualizes some CostItem from loaded profile data.
+More concretely, the "visualization state" consists of e.g. the
+current CostItem to show, a curent EventType to show, from which
+part(s) to show, which sub-CostItem should be shown selected and so on.
+
+Every view is inherited from the TraceItemView class, which manages the
+visualization state. TraceItemView's can be setup in a hierarchical
+fashion, and make sure to keep the visualization state consistent between
+each other. E.g. item selection by mouse are forwarded to the parent view,
+which passes the new selection back to all its sub-views.
+
+When a subclass of TraceItemView is asked to change its visualization state,
+it actually only starts a timer, and all state change wishes get merged
+until a time-out happens.
+Then, TraceViewItem::doUpdate() gets called with an argument telling what
+parts of the visualization state should be changed. There, one can do
+special handling if only one thing is to be changed, such as selection of
+another CostItem - in such cases, it is not required to refresh the whole
+view. Otherwise, TraceViewItem::refresh() gets called, which is expected
+to do a complete refresh of the visualization.
+
+The basic visualization task of subclasses of TraceItemView's is to visualize
+one CostItem (the "active" CostItem), typically e.g. a function
+(TraceFunction). Further, there is a "selected" CostItem. This usually is
+a subitem of the active, visualized CostItem, e.g. a source line from the
+active function (TraceLine), or another function in the call graph around
+the active function.
+
+TraceItemView's may not be able to show a given CostItem, but want to show
+another CostItem instead, or show nothing. In the latter case, they get
+grayed out. This behavior is encoded through TraceItemView::canShow, which,
+given a CostItem to visualize, returns the replacement it can visualize
+instead, or 0 if it cannot show anything.
+
+Every top-level window visualizes exactly one profile data (_data),
+and consists of some subviews (FunctionSelection on the left, MultiView on
+the right, with various TabViews embedded) which all inherit from
+TraceItemView, always synced to show some visualization state at a given
+time.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/converters/README 
new/kcachegrind-15.08.1/converters/README
--- old/kcachegrind-15.04.3/converters/README   2015-05-15 09:47:33.000000000 
+0200
+++ new/kcachegrind-15.08.1/converters/README   2015-06-16 22:05:36.000000000 
+0200
@@ -17,8 +17,8 @@
 * Jörg Beyer <[email protected]> for
   hotshot2calltree
 
-If you want to write a converter, have a look at the calltree format
-description on the web site (kcachegrind.sf.net).
+If you want to write a converter, have a look at the callgrind format
+description on the web site (kcachegrind.github.io).
 
 Josef
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/doc/index.docbook 
new/kcachegrind-15.08.1/doc/index.docbook
--- old/kcachegrind-15.04.3/doc/index.docbook   2015-05-15 09:47:33.000000000 
+0200
+++ new/kcachegrind-15.08.1/doc/index.docbook   2015-06-16 22:05:36.000000000 
+0200
@@ -406,7 +406,7 @@
 
 <para>
 To explore the &GUI; further, in addition to this manual, also have a look at
-the documentation section <ulink url="http://kcachegrind.sf.net";>on the Web
+the documentation section <ulink url="https://kcachegrind.github.io";>on the Web
 site</ulink>.
 Also, every widget in &kcachegrind; has <quote>What's this</quote> help.
 </para>
@@ -1157,7 +1157,7 @@
 <para>
 &kcachegrind; is part of the &package; package of &kde;. For less supported
 interim releases, &callgrind; and further documentation, see
-<ulink url="http://kcachegrind.sf.net";>the Web page</ulink>. Look there for
+<ulink url="https://kcachegrind.github.io";>the Web page</ulink>. Look there for
 further installation and compile instructions.
 </para>
 </sect1>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/kcachegrind/kcachegrind.desktop 
new/kcachegrind-15.08.1/kcachegrind/kcachegrind.desktop
--- old/kcachegrind-15.04.3/kcachegrind/kcachegrind.desktop     2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/kcachegrind/kcachegrind.desktop     2015-06-16 
22:05:36.000000000 +0200
@@ -174,5 +174,5 @@
 Comment[zh_CN]=性能测试数据的可视化表现
 Comment[zh_TW]=效能分析資料視覺化
 X-DBUS-StartupType=Multi
-X-DBUS-ServiceName=net.sf.kcachegrind
+X-DBUS-ServiceName=io.github.kcachegrind
 Categories=Qt;KDE;Development;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/kcachegrind/main.cpp 
new/kcachegrind-15.08.1/kcachegrind/main.cpp
--- old/kcachegrind-15.04.3/kcachegrind/main.cpp        2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/kcachegrind/main.cpp        2015-06-16 
22:05:36.000000000 +0200
@@ -41,8 +41,8 @@
                        KCACHEGRIND_VERSION,
                        ki18n("KDE Frontend for Callgrind/Cachegrind"),
                        KAboutData::License_GPL,
-                       ki18n("(C) 2002 - 2011"), KLocalizedString(),
-                       "http://kcachegrind.sf.net";);
+                       ki18n("(C) 2002 - 2015"), KLocalizedString(),
+                       "https://kcachegrind.github.io";);
   aboutData.addAuthor(ki18n("Josef Weidendorfer"),
                       ki18n("Author/Maintainer"),
                       "[email protected]");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/kcachegrind.lsm.cmake 
new/kcachegrind-15.08.1/kcachegrind.lsm.cmake
--- old/kcachegrind-15.04.3/kcachegrind.lsm.cmake       2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/kcachegrind.lsm.cmake       2015-06-16 
22:05:36.000000000 +0200
@@ -5,7 +5,7 @@
 Keywords:       Profiling, Performance Analysis, Visualisation, Development
 Author:         Josef Weidendorfer <[email protected]> 
 Maintained-by:  Josef Weidendorfer <[email protected]> 
-Home-page:      http://kcachegrind.sourceforge.net
+Home-page:      https://kcachegrind.github.io
 Platforms:      Linux and other Unices
 Copying-policy: GNU Public License
 End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/kcachegrind.spec.cmake 
new/kcachegrind-15.08.1/kcachegrind.spec.cmake
--- old/kcachegrind-15.04.3/kcachegrind.spec.cmake      2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/kcachegrind.spec.cmake      2015-06-16 
22:05:36.000000000 +0200
@@ -5,7 +5,7 @@
 Copyright: GPL
 Group:     Development/Tools
 Vendor:    (none)
-URL:       http://kcachegrind.sourceforge.net
+URL:       https://kcachegrind.github.io
 Packager:  Josef Weidendorfer <[email protected]>
 Source:    kcachegrind-${KCACHEGRIND_VERSION}.tar.gz
 BuildRoot: /var/tmp/build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libcore/addr.h 
new/kcachegrind-15.08.1/libcore/addr.h
--- old/kcachegrind-15.04.3/libcore/addr.h      2015-05-15 09:47:33.000000000 
+0200
+++ new/kcachegrind-15.08.1/libcore/addr.h      2015-06-16 22:05:36.000000000 
+0200
@@ -55,6 +55,9 @@
   Addr operator+(int d) const { return Addr(_v + d); }
   Addr operator-(int d) const { return Addr(_v - d); }
 
+  // return decremented address until it is a multiple of <a>, a power of 2
+  Addr alignedDown(int a) { return Addr(_v & ~( ((uint64)a) -1)); }
+
  private:
   uint64 _v;
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libcore/cachegrindloader.cpp 
new/kcachegrind-15.08.1/libcore/cachegrindloader.cpp
--- old/kcachegrind-15.04.3/libcore/cachegrindloader.cpp        2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libcore/cachegrindloader.cpp        2015-06-16 
22:05:36.000000000 +0200
@@ -944,6 +944,19 @@
        case '#':
            continue;
 
+       case 'a':
+           // "arch: arm"
+           if (line.stripPrefix("rch: arm")) {
+               TraceData::Arch a = _data->architecture();
+               if ((a != TraceData::ArchUnknown) &&
+                   (a != TraceData::ArchARM)) {
+                   error(QString("Redefined architecture!"));
+               }
+               _data->setArchitecture(TraceData::ArchARM);
+               continue;
+           }
+           break;
+
        case 't':
 
            // totals:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libcore/globalconfig.cpp 
new/kcachegrind-15.08.1/libcore/globalconfig.cpp
--- old/kcachegrind-15.04.3/libcore/globalconfig.cpp    2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libcore/globalconfig.cpp    2015-06-16 
22:05:36.000000000 +0200
@@ -474,3 +474,8 @@
     else
        _objectSourceDirs.insert(obj, dirs);
 }
+
+void GlobalConfig::clearObjectSourceDirs()
+{
+    _objectSourceDirs.clear();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libcore/globalconfig.h 
new/kcachegrind-15.08.1/libcore/globalconfig.h
--- old/kcachegrind-15.04.3/libcore/globalconfig.h      2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libcore/globalconfig.h      2015-06-16 
22:05:36.000000000 +0200
@@ -73,6 +73,7 @@
     QStringList objectSourceDirs(QString);
     void setGeneralSourceDirs(QStringList);
     void setObjectSourceDirs(QString, QStringList);
+    void clearObjectSourceDirs();
 
     void setPercentPrecision(int);
     void setMaxSymbolLength(int);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libcore/tracedata.cpp 
new/kcachegrind-15.08.1/libcore/tracedata.cpp
--- old/kcachegrind-15.04.3/libcore/tracedata.cpp       2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libcore/tracedata.cpp       2015-06-16 
22:05:36.000000000 +0200
@@ -3080,6 +3080,8 @@
   _maxPartNumber = 0;
   _fixPool = 0;
   _dynPool = 0;
+
+  _arch = ArchUnknown;
 }
 
 TraceData::~TraceData()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libcore/tracedata.h 
new/kcachegrind-15.08.1/libcore/tracedata.h
--- old/kcachegrind-15.04.3/libcore/tracedata.h 2015-05-15 09:47:33.000000000 
+0200
+++ new/kcachegrind-15.08.1/libcore/tracedata.h 2015-06-16 22:05:36.000000000 
+0200
@@ -1363,6 +1363,9 @@
 class TraceData: public ProfileCostArray
 {
  public:
+  // profiled architecture (must be same for every part)
+  enum Arch { ArchUnknown, ArchARM };
+
   TraceData(Logger* l = 0);
   virtual ~TraceData();
 
@@ -1446,6 +1449,8 @@
 
   void setCommand(const QString& command) { _command = command; }
   QString command() const { return _command; }
+  void setArchitecture(Arch a) { _arch = a; }
+  Arch architecture() const { return _arch; }
   ProfileCostArray* totals() { return &_totals; }
   void setMaxThreadID(int tid) { _maxThreadID = tid; }
   int maxThreadID() const { return _maxThreadID; }
@@ -1493,6 +1498,7 @@
   TraceFileMap _fileMap;
   TraceFunctionMap _functionMap;
   QString _command;
+  Arch _arch;
   QString _traceName;
 
   // Max of all costs of calls: This allows to see if the incl. cost can
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libviews/functionselection.cpp 
new/kcachegrind-15.08.1/libviews/functionselection.cpp
--- old/kcachegrind-15.04.3/libviews/functionselection.cpp      2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libviews/functionselection.cpp      2015-06-16 
22:05:36.000000000 +0200
@@ -162,7 +162,7 @@
   functionList->setItemDelegate(new AutoToolTipDelegate(functionList));
   vboxLayout->addWidget(functionList);
 
-  // order has to match mapping in groupTypeSelected()
+  // only to adjust size, will be repopulated on data change
   QStringList args;
   args << tr("(No Grouping)")
        << ProfileContext::i18nTypeName(ProfileContext::Object)
@@ -351,9 +351,12 @@
        addGroupAction(m,  ProfileContext::Function, tr("No Grouping"));
        m->addSeparator();
     }
-    addGroupAction(m, ProfileContext::Object);
-    addGroupAction(m, ProfileContext::File);
-    addGroupAction(m, ProfileContext::Class);
+    if (_data->objectMap().count()>1)
+       addGroupAction(m, ProfileContext::Object);
+    if (_data->fileMap().count()>1)
+       addGroupAction(m, ProfileContext::File);
+    if (_data->classMap().count()>1)
+       addGroupAction(m, ProfileContext::Class);
     addGroupAction(m, ProfileContext::FunctionCycle);
 
     connect(m, SIGNAL(triggered(QAction*)),
@@ -368,16 +371,12 @@
 
 void FunctionSelection::groupTypeSelected(int cg)
 {
-    switch(cg) {
-    case 0: selectedGroupType( ProfileContext::Function ); break;
-    case 1: selectedGroupType( ProfileContext::Object ); break;
-    case 2: selectedGroupType( ProfileContext::File ); break;
-    case 3: selectedGroupType( ProfileContext::Class ); break;
-    case 4: selectedGroupType( ProfileContext::FunctionCycle ); break;
-    default: break;
-    }
-}
+    int t = groupBox->itemData(cg).toInt();
+    if (t == 0)
+       t = ProfileContext::Function; // always works
 
+    selectedGroupType((ProfileContext::Type) t);
+}
 
 CostItem* FunctionSelection::canShow(CostItem* i)
 {
@@ -501,6 +500,24 @@
        return;
     }
 
+    if (changeType & dataChanged) {
+       groupBox->clear();
+       groupBox->addItem(tr("(No Grouping)"), ProfileContext::Function);
+       if (_data) {
+           if (_data->objectMap().count()>1)
+               
groupBox->addItem(ProfileContext::i18nTypeName(ProfileContext::Object),
+                                 ProfileContext::Object);
+           if (_data->fileMap().count()>1)
+               
groupBox->addItem(ProfileContext::i18nTypeName(ProfileContext::File),
+                                 ProfileContext::File);
+           if (_data->classMap().count()>1)
+               
groupBox->addItem(ProfileContext::i18nTypeName(ProfileContext::Class),
+                                 ProfileContext::Class);
+           
groupBox->addItem(ProfileContext::i18nTypeName(ProfileContext::FunctionCycle),
+                             ProfileContext::FunctionCycle);
+       }
+    }
+
     if (changeType & groupTypeChanged) {
        if (_activeItem && (_activeItem->type() == ProfileContext::Function)) {
            TraceFunction* f = (TraceFunction*) _activeItem;
@@ -517,14 +534,8 @@
            }
        }
 
-       int id;
-       switch(_groupType) {
-       case ProfileContext::Object: id = 1; break;
-       case ProfileContext::File:   id = 2; break;
-       case ProfileContext::Class:  id = 3; break;
-       case ProfileContext::FunctionCycle: id = 4; break;
-       default: id = 0; break;
-       }
+       int id = groupBox->findData(_groupType);
+       if (id < 0) id = 0; // if not found, default to first entry
        groupBox->setCurrentIndex(id);
 
        if (_groupType == ProfileContext::Function)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libviews/instrview.cpp 
new/kcachegrind-15.08.1/libviews/instrview.cpp
--- old/kcachegrind-15.04.3/libviews/instrview.cpp      2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libviews/instrview.cpp      2015-06-16 
22:05:36.000000000 +0200
@@ -34,6 +34,7 @@
 #include <QScrollBar>
 #include <QHeaderView>
 #include <QKeyEvent>
+#include <QProcessEnvironment>
 
 #include "config.h"
 #include "globalconfig.h"
@@ -45,7 +46,31 @@
 #define DEFAULT_SHOWHEXCODE true
 
 
-// Helpers for parsing output of 'objdump'
+// Helpers
+
+// check environment variables
+
+QProcessEnvironment env;
+
+static
+QString getSysRoot()
+{
+    if (env.isEmpty())
+       env = QProcessEnvironment::systemEnvironment();
+
+    return env.value("SYSROOT");
+}
+
+static
+QString getObjDump()
+{
+    if (env.isEmpty())
+       env = QProcessEnvironment::systemEnvironment();
+
+    return env.value("OBJDUMP", "objdump");
+}
+
+// parsing output of 'objdump'
 
 static Addr parseAddr(char* buf)
 {
@@ -554,6 +579,7 @@
        new InstrItem(this, this, 3, tr("      --dump-instr=yes"));
        new InstrItem(this, this, 4, tr("To see (conditional) jumps, 
additionally specify"));
        new InstrItem(this, this, 5, tr("      --collect-jumps=yes"));
+       setColumnWidths();
        return;
     }
 
@@ -728,7 +754,17 @@
     QString filename = o->shortName();
 
     if (QDir::isAbsolutePath(dir)) {
-       return QFile::exists(dir + '/' + filename);
+       if (QFile::exists(dir + '/' + filename))
+           return true;
+
+       QString sysRoot = getSysRoot();
+       if (!sysRoot.isEmpty()) {
+           if (!dir.startsWith('/') && !sysRoot.endsWith('/'))
+               sysRoot += '/';
+           dir = sysRoot + dir;
+           return QFile::exists(dir + '/' + filename);
+       }
+       return false;
     }
 
     QFileInfo fi(dir, filename);
@@ -759,6 +795,7 @@
     Addr costAddr, nextCostAddr, objAddr, addr;
     Addr dumpStartAddr, dumpEndAddr;
     TraceInstrMap::Iterator costIt;
+    bool isArm = (function->data()->architecture() == TraceData::ArchARM);
 
     // should not happen
     if (it == itEnd) return false;
@@ -767,9 +804,16 @@
     TraceInstrMap::Iterator tmpIt = itEnd;
     --tmpIt;
     nextCostAddr = (*it).addr();
+
+    if (isArm) {
+       // for Arm: address always even (even for Thumb encoding)
+       nextCostAddr = nextCostAddr.alignedDown(2);
+    }
+
     dumpStartAddr = (nextCostAddr<20) ? Addr(0) : nextCostAddr -20;
     dumpEndAddr   = (*tmpIt).addr() +20;
 
+
     QString dir = function->object()->directory();
     if (!searchFile(dir, function->object())) {
        new InstrItem(this, this, 1,
@@ -779,6 +823,9 @@
                      QString("    '%1'").arg(function->object()->name()));
        new InstrItem(this, this, 3,
                      tr("This file can not be found."));
+       if (isArm)
+           new InstrItem(this, this, 4,
+                         tr("If cross-compiled, set SYSROOT variable."));
        return false;
     }
     function->object()->setDirectory(dir);
@@ -790,13 +837,13 @@
        << QString("--start-address=0x%1").arg(dumpStartAddr.toString())
        << QString("--stop-address=0x%1").arg(dumpEndAddr.toString())
        << objfile;
-    QString objdumpCmd = "objdump " + objdumpArgs.join(" ");
 
-    if (1) qDebug("Running '%s'...", qPrintable(objdumpCmd));
+    QString objdumpCmd = getObjDump() + " " + objdumpArgs.join(" ");
+    qDebug("Running '%s'...", qPrintable(objdumpCmd));
 
     // and run...
     QProcess objdump;
-    objdump.start("objdump", objdumpArgs);
+    objdump.start(getObjDump(), objdumpArgs);
     if (!objdump.waitForStarted() ||
        !objdump.waitForFinished()) {
 
@@ -873,6 +920,8 @@
          }
          costAddr = nextCostAddr;
          nextCostAddr = (it == itEnd) ? Addr(0) : (*it).addr();
+         if (isArm)
+             nextCostAddr = nextCostAddr.alignedDown(2);
 
          if (0) qDebug() << "Got nextCostAddr: 0x" << nextCostAddr.toString()
                           << ", costAddr 0x" << costAddr.toString();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libviews/sourceitem.cpp 
new/kcachegrind-15.08.1/libviews/sourceitem.cpp
--- old/kcachegrind-15.04.3/libviews/sourceitem.cpp     2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libviews/sourceitem.cpp     2015-06-16 
22:05:36.000000000 +0200
@@ -27,6 +27,7 @@
 #include <QPainter>
 #include <QPolygon>
 #include <QTextDocument>
+#include <QLineEdit>
 
 #include "globalguiconfig.h"
 #include "listutils.h"
@@ -64,6 +65,9 @@
   QString s = src;
   setText(4, s.replace( QRegExp("\t"), "        " ));
 
+  // to allow text selection after double click
+  setFlags(flags() | Qt::ItemIsEditable);
+
   updateGroup();
   updateCost();
 }
@@ -302,6 +306,16 @@
     _parent = parent;
 }
 
+QWidget* SourceItemDelegate::createEditor(QWidget *parent,
+                                         const QStyleOptionViewItem &option,
+                                         const QModelIndex &index) const
+{
+    QWidget* w = QItemDelegate::createEditor(parent, option, index);
+    QLineEdit* e = qobject_cast<QLineEdit*>(w);
+    if (e) e->setReadOnly(true);
+    return w;
+}
+
 QSize SourceItemDelegate::sizeHint(const QStyleOptionViewItem &option,
                                    const QModelIndex &index) const
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libviews/sourceitem.h 
new/kcachegrind-15.08.1/libviews/sourceitem.h
--- old/kcachegrind-15.04.3/libviews/sourceitem.h       2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libviews/sourceitem.h       2015-06-16 
22:05:36.000000000 +0200
@@ -89,6 +89,9 @@
                    const QModelIndex & index ) const;
     QSize sizeHint(const QStyleOptionViewItem &option,
                    const QModelIndex &index) const;
+    QWidget* createEditor(QWidget *parent,
+                         const QStyleOptionViewItem &option,
+                         const QModelIndex &index) const;
 
 protected:
     void paintArrows(QPainter *p,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/libviews/sourceview.cpp 
new/kcachegrind-15.08.1/libviews/sourceview.cpp
--- old/kcachegrind-15.04.3/libviews/sourceview.cpp     2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/libviews/sourceview.cpp     2015-06-16 
22:05:36.000000000 +0200
@@ -50,7 +50,6 @@
 
   _arrowLevels = 0;
 
-
   setColumnCount(5);
   setRootIsDecorated(false);
   setAllColumnsShowFocus(true);
@@ -63,7 +62,7 @@
                << tr( "Cost" )
                << tr( "Cost 2" )
                << ""
-               <<  tr( "Source (unknown)");
+              <<  tr( "Source");
   setHeaderLabels(headerLabels);
 
   // sorting will be enabled after refresh()
@@ -314,7 +313,6 @@
 
   _arrowLevels = 0;
   if (!_data || !_activeItem) {
-      headerItem()->setText(4, tr("(No Source)"));
       return;
   }
 
@@ -658,9 +656,9 @@
 
   // do it here, because the source directory could have been set before
   if (topLevelItemCount()==0) {
-      headerItem()->setText(4, validSourceFile ?
-                                tr("Source ('%1')").arg(filename) :
-                                tr("Source (unknown)"));
+      if (validSourceFile && (nextCostLineno != 0))
+         new SourceItem(this, this, fileno, 0, true,
+                        tr("--- From '%1' ---").arg(filename));
   }
   else {
     new SourceItem(this, this, fileno, 0, true,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/qcachegrind/qcgmain.cpp 
new/kcachegrind-15.08.1/qcachegrind/qcgmain.cpp
--- old/kcachegrind-15.04.3/qcachegrind/qcgmain.cpp     2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/qcachegrind/qcgmain.cpp     2015-06-16 
22:05:36.000000000 +0200
@@ -35,7 +35,7 @@
     QApplication app(argc, argv);
     Loader::initLoaders();
 
-    QCoreApplication::setOrganizationName("kcachegrind.sf.net");
+    QCoreApplication::setOrganizationName("kcachegrind.github.io");
     QCoreApplication::setApplicationName("QCachegrind");
     ConfigStorage::setStorage(new QCGConfigStorage);
     // creates global config object of type GlobalGUIConfig
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/qcachegrind/qcgtoplevel.cpp 
new/kcachegrind-15.08.1/qcachegrind/qcgtoplevel.cpp
--- old/kcachegrind-15.04.3/qcachegrind/qcgtoplevel.cpp 2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/qcachegrind/qcgtoplevel.cpp 2015-06-16 
22:05:36.000000000 +0200
@@ -174,10 +174,11 @@
     delete lConfig;
 
     ConfigGroup* pConfig = ConfigStorage::group("TracePositions");
-    if (_eventType)
-       pConfig->setValue(QString("EventType%1").arg(key), _eventType->name());
-    if (_eventType2)
-       pConfig->setValue(QString("EventType2%1").arg(key), 
_eventType2->name());
+    QString eventType, eventType2;
+    if (_eventType) eventType = _eventType->name();
+    if (_eventType2) eventType2 = _eventType2->name();
+    pConfig->setValue(QString("EventType%1").arg(key), eventType);
+    pConfig->setValue(QString("EventType2%1").arg(key), eventType2);
     if (_groupType != ProfileContext::InvalidType)
        pConfig->setValue(QString("GroupType%1").arg(key),
                          ProfileContext::typeName(_groupType));
@@ -618,12 +619,12 @@
              "phase of developing a computer program. "
              "QCachegrind is open-source, and it is distributed under the "
              "terms of the GPL v2. For details and source code, see the "
-             "<a href=\"http://kcachegrind.sf.net\";>homepage</a> of the "
+             "<a href=\"https://kcachegrind.github.io\";>homepage</a> of the "
              "KCachegrind project.</p>"
               "Main author and maintainer: "
              "<a href=\"mailto:[email protected]\";>"
               "Josef Weidendorfer</a><br>"
-              "(with lots of bug fixes and porting to Qt4 by the KDE team)");
+              "(with lots of bug fixes/porting help by the KDE community)");
     QMessageBox::about(this, tr("About QCachegrind"), text);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/qcachegrind/qcgtoplevel.h 
new/kcachegrind-15.08.1/qcachegrind/qcgtoplevel.h
--- old/kcachegrind-15.04.3/qcachegrind/qcgtoplevel.h   2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/qcachegrind/qcgtoplevel.h   2015-06-16 
22:05:36.000000000 +0200
@@ -51,7 +51,7 @@
 class QCGTopLevel : public QMainWindow, public Logger, public TopLevelBase
 {
   Q_OBJECT
-  Q_CLASSINFO("D-Bus Interface", "net.sf.qcachegrind")
+  Q_CLASSINFO("D-Bus Interface", "io.github.qcachegrind")
 
 public:
   QCGTopLevel();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kcachegrind-15.04.3/qcachegrind/sourcesettings.cpp 
new/kcachegrind-15.08.1/qcachegrind/sourcesettings.cpp
--- old/kcachegrind-15.04.3/qcachegrind/sourcesettings.cpp      2015-05-15 
09:47:33.000000000 +0200
+++ new/kcachegrind-15.08.1/qcachegrind/sourcesettings.cpp      2015-06-16 
22:05:36.000000000 +0200
@@ -200,6 +200,10 @@
        QTreeWidgetItem* item = ui.dirList->topLevelItem(idx);
        dirs[item->text(0)] << item->text(1);
     }
+
+    c->setGeneralSourceDirs(QStringList());
+    c->clearObjectSourceDirs();
+
     QHash<QString, QStringList>::const_iterator oit = dirs.constBegin();
     for(;oit != dirs.constEnd(); ++oit) {
        if (oit.key() == _always)


Reply via email to