--- a/sysperfana/analyzetoolext/build.xml Wed Apr 21 15:14:16 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-
-<project name="com.nokia.s60tools.analyzetool" default="build.all">
-
- <!-- declare ant4eclipse -->
- <taskdef resource="net/sf/ant4eclipse/antlib.xml" />
-
- <!-- Name definitions -->
- <property name="feature.name" value="AnalyzeTool"/>
- <property name="project.name" value="com.nokia.carbide.extensions.analyzetool" />
- <property name="jar.filename" value="${ant.project.name}.jar"/>
-
- <!-- Folder definitions -->
- <property name="workspace.path" value="." />
- <property name="java.location" value="C:/APPS/j2sdk_1.5.0_12" />
- <property name="destination.path" value="." />
-
- <property name="carbide.folder" value="C:/Carbide_internal" />
- <property name="carbide.int.folder" location="c:/Carbide_ADT/plugins"/>
- <property name="carbide.dev.folder" location="c:/Carbide_development/plugins"/>
-
- <property name="test.folder" location="${ant.project.name}.tests"/>
- <property name="test.cache.folder" location="${ant.project.name}.cache.tests"/>
- <property name="test.ifsheets.folder" location="${ant.project.name}.ifsheets.tests"/>
- <property name="test.web.folder" location="${ant.project.name}.web.tests"/>
- <property name="reports.folder" location="reports"/>
- <property name="reports.emma" location="${reports.folder}/emma"/>
- <property name="instr.folder" location="instr"/>
- <property name="binaries.folder" location="${feature.name}.binaries"/>
-
-
- <!-- EMMA configuration -->
- <path id="emma.lib" >
- <pathelement location="${ant.home}/lib/emma.jar" />
- <pathelement location="${ant.home}/lib/emma_ant.jar" />
- </path>
-
- <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
-
- <!-- PMD configuration -->
- <path id="pmd.lib" >
- <pathelement location="${ant.home}/lib/pmd-4.2.5.jar" />
- <pathelement location="${ant.home}/lib/asm-3.1.jar" />
- <pathelement location="${ant.home}/lib/jaxen-1.1.1.jar" />
- </path>
-
- <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.lib" />
-
- <!-- Folders -->
- <delete dir="${instr.folder}"/>
- <mkdir dir="${instr.folder}"/>
-
- <delete dir="${reports.folder}"/>
- <mkdir dir="${reports.folder}"/>
-
- <!-- Carbide_classpath -->
- <path id="carbide_classpath">
- <fileset dir="${carbide.int.folder}" includes="**/*.jar" />
- <fileset dir="plugins" includes="**/*.jar" />
- </path>
-
- <!-- Delete old plugins and features -->
- <target name="delete">
- <delete dir="plugins" failonerror="false"/>
- <delete dir="features" failonerror="false"/>
- <delete dir="${ant.project.name}/bin/com" failonerror="false"/>
- <delete dir="${ant.project.name}.tests/bin/com" failonerror="false"/>
- <delete dir="${ant.project.name}.trace/bin/com" failonerror="false"/>
- </target>
-
-
- <!-- Target Plugin -->
- <target name="build.plugins" depends="">
- <buildPlugin workspace="${workspace.path}" targetPlatformLocation="${carbide.folder}" projectname="${ant.project.name}" destDir="${destination.path}" packageAsJar="true">
- <javacLibraryCompiler>
- <compilerSettings debug="true" fork="true"/>
- </javacLibraryCompiler>
- </buildPlugin>
- <buildPlugin workspace="${workspace.path}" targetPlatformLocation="${carbide.folder}" projectname="${ant.project.name}.corecomponents" destDir="${destination.path}" packageAsJar="true">
- <javacLibraryCompiler>
- <compilerSettings debug="true" fork="true"/>
- </javacLibraryCompiler>
- </buildPlugin>
- <buildPlugin workspace="${workspace.path}" targetPlatformLocation="${carbide.folder}" projectname="${ant.project.name}.help" destDir="${destination.path}" packageAsJar="true">
- <javacLibraryCompiler>
- <compilerSettings debug="true" fork="true"/>
- </javacLibraryCompiler>
- </buildPlugin>
- <buildPlugin workspace="${workspace.path}" targetPlatformLocation="${carbide.folder}" projectname="${ant.project.name}.trace" destDir="${destination.path}" packageAsJar="true">
- <javacLibraryCompiler>
- <compilerSettings debug="true" fork="true"/>
- </javacLibraryCompiler>
- </buildPlugin>
-
-
-
- <!-- Build MultiTestRunner feature -->
- <buildFeature workspace="${workspace.path}"
- targetPlatformLocation="${carbide.folder}"
- projectname="${project.name}"
- buildPluginTarget="build.plugin"
- destDir="${destination.path}" />
-
- </target>
-
- <!-- Empty target to do nothing -->
- <target name="build.plugin">
- </target>
-
-
-
- <!-- Instrumentation target, depends on build.mtrunner -->
- <target name="instr" depends="build.plugins">
- <!-- Instrument the source code -->
- <emma>
- <instr instrpath="${ant.project.name}/bin" destdir="${instr.folder}" metadatafile="${reports.emma}/metadata.emma" merge="true"/>
- </emma>
- </target>
-
-
- <target name="create.zip">
-
- <delete dir="${binaries.folder}/nightly_builds"/>
- <mkdir dir="${binaries.folder}/nightly_builds"/>
-
- <!-- Zip jars to AnalyzeTool.zip -->
- <tstamp>
- <format property="timestamp" pattern="dd-MM-yyyy" />
- </tstamp>
-
- <zip destfile="${binaries.folder}/nightly_builds/${feature.name}-${timestamp}.zip"
- basedir="."
- includes="plugins/*, features/com.nokia.carbide.extensions.*/"/>
- </target>
-
- <!-- Analyze target -->
- <target name="analyze">
- <!-- PMD -->
- <pmd shortFileNames="true">
- <!-- Rules -->
- <ruleset>basic</ruleset>
- <ruleset>codesize</ruleset>
- <ruleset>coupling</ruleset>
- <ruleset>design</ruleset>
- <ruleset>strictexception</ruleset>
- <ruleset>strings</ruleset>
- <ruleset>sunsecure</ruleset>
- <ruleset>unusedcode</ruleset>
- <ruleset>junit</ruleset>
-
- <!-- XML output -->
- <formatter type="xml" toFile="${reports.folder}/report.pmd.xml"/>
-
- <!-- Files to analyze -->
- <!-- Files to analyze -->
- <fileset dir="${ant.project.name}/src/">
- <include name="**/*.java"/>
- </fileset>
- <fileset dir="${ant.project.name}.tests/src/">
- <include name="**/*.java"/>
- </fileset>
- <fileset dir="${ant.project.name}.trace/src/">
- <include name="**/*.java"/>
- </fileset>
- </pmd>
- </target>
-
- <!-- Test target, depends on instrumentation and analyze -->
- <target name="test" depends="instr, analyze" description="Run unit tests">
- <!-- Test classpath -->
- <path id="test_classpath">
- <!-- Test classes -->
- <pathelement location="${test.folder}/src"/>
-
- <!-- Instrumented class files -->
- <pathelement location="${instr.folder}"/>
-
- <!-- EMMA -->
- <pathelement path="${ant.home}/lib/emma.jar"/>
-
- <path refid="carbide_classpath" />
- </path>
-
- <!-- Compile the tests -->
- <javac srcdir="${test.folder}" verbose="${javacVerbose}">
- <classpath refid="test_classpath"/>
- </javac>
-
- <!-- Run JUnit -->
- <junit printsummary="yes" fork="yes" haltonfailure="no">
- <classpath refid="test_classpath" />
-
- <!-- Plain format and XML -->
- <formatter type="plain" />
- <formatter type="xml" />
-
- <!-- Instrumentation arguments to JVM -->
- <jvmarg value="-Demma.coverage.out.file=${reports.emma}/coverage.emma" />
- <jvmarg value="-Demma.coverage.out.merge=true" />
-
- <!-- Test classes -->
- <test name="com.nokia.s60tools.analyzetool.tests.AllPureJUnitTests" todir="${reports.folder}"/>
- </junit>
-
- <!-- Create EMMA report -->
- <emma>
- <report sourcepath="src/" >
- <fileset dir="${reports.emma}" >
- <include name="*.emma" />
- </fileset>
- <xml outfile="${reports.emma}/coverage.xml" />
- </report>
- </emma>
- </target>
-
- <target name="copy_to_carbide">
- <!-- Copy the actual plug-ins to the carbide folders -->
- <copy todir="${carbide.int.folder}" failonerror="true" overwrite="true">
- <fileset dir="plugins"/>
- </copy>
- <copy todir="${carbide.dev.folder}" failonerror="true" overwrite="true">
- <fileset dir="plugins"/>
- </copy>
- </target>
-
-
- <!-- Target Build all -->
- <target name="build.all" depends="delete, build.plugins, instr, analyze, test, copy_to_carbide, create.zip" />
-
-</project>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.carbide.extensions.analyzetool/feature.xml Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.carbide.extensions.analyzetool/feature.xml Wed Apr 21 19:42:48 2010 +0300
@@ -2,20 +2,18 @@
<feature
id="com.nokia.carbide.extensions.analyzetool"
label="Carbide.c++ Extensions - AnalyzeTool"
- version="1.8.0"
+ version="1.9.0"
provider-name="Nokia"
plugin="com.nokia.s60tools.analyzetool">
<description>
- AnalyzeTool is a test software which is used for testing Symbian
-SW for memory leaks and pinpointing the leaking problems from
-source codes.
-The test software is used from Windows command prompt or from
-Carbide 2.0 onwards. S60 3.1, S60 3.2 or S60 5.0 phone with R&D certificates is
-required for the use of AnalyzeTool. Also HTI and XTI are required
-for some features.
-Test can not be run without access to source codes of a tested
-application.
+ AnalyzeTool is a test software which is used for testing Symbian
+SW for memory leaks and pinpointing the leaking problems from
+source codes.
+The test software is used from Windows command prompt or from
+Carbide 2.0 onwards.
+Test can not be run without access to source codes of a tested
+application.
Testing is also limited to user side SW instead of kernel SW.
</description>
@@ -24,928 +22,928 @@
</copyright>
<license url="license.txt">
- Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-All rights reserved.
-This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0"
-which accompanies this distribution, and is available at the URL "http://www.eclipse.org/legal/epl-v10.html".
-
-This Nokia Product includes Open Source Software. Certain software included in this Nokia Product is licensed and distributed under licenses containing obligation or permission to provide the source code of such software with the binary / executable form delivery of the said software. The source code is delivered to you in accordance with the referred license terms and conditions in the media attached to this document. The exact license terms, as well as the required copyright and other notices, permissions and acknowledgements are reproduced in and delivered to you as part of the referred source code.
-
-This product includes software developed by
- The Apache Software Foundation (http://www.apache.org/).
-
- Portions of this software were originally based on the following:
- - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
-
-
-
-The Apache Software License, Version 2.0
-http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
---------------------------------------------------------------------------
-
-GNU GENERAL PUBLIC LICENSE
-Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
-TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
---------------------------------------------------------------------------
-
-addr2line notices
-Copyright (c) 1983, 1993, 1998
-The Regents of the University of California. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-----
-
-Copyright (c) 1997 John D. Polstra.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0"
+which accompanies this distribution, and is available at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+This Nokia Product includes Open Source Software. Certain software included in this Nokia Product is licensed and distributed under licenses containing obligation or permission to provide the source code of such software with the binary / executable form delivery of the said software. The source code is delivered to you in accordance with the referred license terms and conditions in the media attached to this document. The exact license terms, as well as the required copyright and other notices, permissions and acknowledgements are reproduced in and delivered to you as part of the referred source code.
+
+This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Portions of this software were originally based on the following:
+ - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+
+
+
+The Apache Software License, Version 2.0
+http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+--------------------------------------------------------------------------
+
+GNU GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+--------------------------------------------------------------------------
+
+addr2line notices
+Copyright (c) 1983, 1993, 1998
+The Regents of the University of California. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+----
+
+Copyright (c) 1997 John D. Polstra.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
</license>
@@ -973,20 +971,21 @@
id="com.nokia.s60tools.analyzetool"
download-size="0"
install-size="0"
- version="1.8.0"
+ version="1.9.0"
unpack="false"/>
<plugin
id="com.nokia.s60tools.analyzetool.corecomponents"
download-size="0"
install-size="0"
- version="1.8.0"/>
+ version="1.9.0"/>
<plugin
id="com.nokia.s60tools.analyzetool.help"
download-size="0"
install-size="0"
- version="1.8.0"
+ version="1.9.0"
unpack="false"/>
+
</feature>
--- a/sysperfana/analyzetoolext/com.nokia.carbide.extensions.analyzetool/license.txt Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.carbide.extensions.analyzetool/license.txt Wed Apr 21 19:42:48 2010 +0300
@@ -1,4 +1,4 @@
-Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved.
This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0"
which accompanies this distribution, and is available at the URL "http://www.eclipse.org/legal/epl-v10.html".
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/META-INF/MANIFEST.MF Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/META-INF/MANIFEST.MF Wed Apr 21 19:42:48 2010 +0300
@@ -2,5 +2,6 @@
Bundle-ManifestVersion: 2
Bundle-Name: Carbide.c++ Extensions - AnalyzeTool Core Components Plug-in
Bundle-SymbolicName: com.nokia.s60tools.analyzetool.corecomponents
-Bundle-Version: 1.8.0
+Bundle-Version: 1.9.0
Bundle-Vendor: Nokia
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/about.html Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/about.html Wed Apr 21 19:42:48 2010 +0300
@@ -65,143 +65,6 @@
<p> </p>
-
-<h4>gSOAP Public License</h4>
-<p> Version 1.3a</p>
-<p> The gSOAP public license is derived from the Mozilla Public License (MPL1.1). The sections that were deleted from the original MPL1.1 text are 1.0.1, 2.1.(c),(d), 2.2.(c),(d), 8.2.(b), 10, and 11. Section 3.8 was added. The modified sections are 2.1.(b), 2.2.(b), 3.2 (simplified), 3.5 (deleted the last sentence), and 3.6 (simplified).</p>
-
-<p><b>1 DEFINITIONS.</b></p>
-<p>sep 0mm </p>
-<p><b>1.0.</b></p>
-<p><b>1.1.1. "Contributor"</b></p>
-<p>means each entity that creates or contributes to the creation of Modifications.</p>
-<p><b>1.2. "Contributor Version"</b></p>
-<p>means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.</p>
-<p><b>1.3. "Covered Code"</b></p>
-<p>means the Original Code, or Modifications or the combination of the Original Code, and Modifications, in each case including portions thereof. </p>
-<p><b>1.4. "Electronic Distribution Mechanism"</b></p>
-<p>means a mechanism generally accepted in the software development community for the electronic transfer of data.</p>
-<p><b>1.5. "Executable"</b></p>
-<p>means Covered Code in any form other than Source Code.</p>
-<p><b>1.6. "Initial Developer"</b></p>
-<p>means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.</p>
-<p><b>1.7. "Larger Work"</b></p>
-<p>means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.</p>
-<p><b>1.8. "License"</b></p>
-<p>means this document.</p>
-<p><b>1.8.1. "Licensable"</b></p>
-<p> means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.</p>
-<p><b>1.9. "Modifications"</b></p>
-<p>means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:</p>
-<p>sep 0mm</p>
-<p>A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.</p>
-<p>B. Any new file that contains any part of the Original Code, or previous Modifications.</p>
-
-<p><b>1.10. "Original Code"</b></p>
-<p>means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. </p>
-<p><b>1.10.1. "Patent Claims"</b></p>
-<p>means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. </p>
-<p><b>1.11. "Source Code"</b></p>
-<p>means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.</p>
-<p><b>1.12. "You" (or "Your")</b></p>
-<p>means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.<br></p>
-
-<p><b>2 SOURCE CODE LICENSE.</b></p>
-<p>sep 0mm</p>
-<p><b>2.1. The Initial Developer Grant.</b></p>
-<p>The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: </p>
-<p>sep 0mm</p>
-<p>(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and</p>
-<p>(b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell ("offer to sell and import") the Original Code, Modifications, or portions thereof, but solely to the extent that any such patent is reasonably necessary to enable You to utilize, alone or in combination with other software, the Original Code, Modifications, or any combination or portions thereof.</p>
-<p>(c) </p>
-<p>(d) </p>
-
-<p><b>2.2. Contributor Grant.</b></p>
-<p>Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license </p>
-<p>sep 0mm</p>
-<p>(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and</p>
-<p>(b) under patents now or hereafter owned or controlled by Contributor, to make, have made, use and sell ("offer to sell and import") the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to utilize, alone or in combination with other software, the Contributor Version (or portions thereof).</p>
-<p>(c)</p>
-<p>(d)<br></p>
-
-<p><b>3 DISTRIBUTION OBLIGATIONS.</b></p>
-<p>sep 0mm </p>
-<p><b>3.1. Application of License.</b></p>
-<p>The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.</p>
-<p><b>3.2. Availability of Source Code.</b></p>
-<p>Any Modification created by You will be provided to the Initial Developer in Source Code form and are subject to the terms of the License.</p>
-<p><b>3.3. Description of Modifications.</b></p>
-<p>You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.</p>
-<p><b>3.4. Intellectual Property Matters.</b></p>
-<p>sep 0mm</p>
-<p>(a) Third Party Claims.</p>
-<p>If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.</p>
-<p>(b) Contributor APIs.</p>
-<p>If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.</p>
-<p>(c) Representations.</p>
-<p>Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.</p>
-<p><b>3.5. Required Notices.</b></p>
-<p>You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor.</p>
-<p><b>3.6. Distribution of Executable Versions.</b></p>
-<p>You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. If you distribute executable versions containing Covered Code as part of a product, you must reproduce the notice in Exhibit B in the documentation and/or other materials provided with the product.</p>
-<p><b>3.7. Larger Works.</b></p>
-<p>You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.</p>
-<p><b>3.8. Restrictions.</b></p>
-<p>You may not remove any product identification, copyright, proprietary notices or labels from gSOAP.<br></p>
-
-<p><b>4 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION.</b></p>
-<p>If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.<br></p>
-
-<p><b>5 APPLICATION OF THIS LICENSE.</b></p>
-<p>This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.<br></p>
-
-<p><b>6 VERSIONS OF THE LICENSE.</b></p>
-<p>sep 0mm</p>
-<p><b>6.1. New Versions.</b></p>
-<p>Grantor may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.</p>
-<p><b>6.2. Effect of New Versions.</b></p>
-<p>Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License.</p>
-<p><b>6.3. Derivative Works.</b></p>
-<p>If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrase "gSOAP" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the gSOAP Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)<br></p>
-
-<p><b>7 DISCLAIMER OF WARRANTY.</b></p>
-<p>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, AND ANY WARRANTY THAT MAY ARISE BY REASON OF TRADE USAGE, CUSTOM, OR COURSE OF DEALING. WITHOUT LIMITING THE FOREGOING, YOU ACKNOWLEDGE THAT THE SOFTWARE IS PROVIDED "AS IS" AND THAT THE AUTHORS DO NOT WARRANT THE SOFTWARE WILL RUN UNINTERRUPTED OR ERROR FREE. LIMITED LIABILITY THE ENTIRE RISK AS TO RESULTS AND PERFORMANCE OF THE SOFTWARE IS ASSUMED BY YOU. UNDER NO CIRCUMSTANCES WILL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND OR NATURE WHATSOEVER, WHETHER BASED ON CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, ARISING OUT OF OR IN ANY WAY RELATED TO THE SOFTWARE, EVEN IF THE AUTHORS HAVE BEEN ADVISED ON THE POSSIBILITY OF SUCH DAMAGE OR IF SUCH DAMAGE COULD HAVE BEEN REASONABLY FORESEEN, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY EXCLUSIVE REMEDY PROVIDED. SUCH LIMITATION ON DAMAGES INCLUDES, BUT IS NOT LIMITED TO, DAMAGES FOR LOSS OF GOODWILL, LOST PROFITS, LOSS OF DATA OR SOFTWARE, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION OR IMPAIRMENT OF OTHER GOODS. IN NO EVENT WILL THE AUTHORS BE LIABLE FOR THE COSTS OF PROCUREMENT OF SUBSTITUTE SOFTWARE OR SERVICES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED FOR USE IN ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS SUCH AS OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR CONTROL, OR LIFE-CRITICAL APPLICATIONS. THE AUTHORS EXPRESSLY DISCLAIM ANY LIABILITY RESULTING FROM USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS AND ACCEPTS NO LIABILITY IN RESPECT OF ANY ACTIONS OR CLAIMS BASED ON THE USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS BY YOU. FOR PURPOSES OF THIS PARAGRAPH, THE TERM "LIFE-CRITICAL APPLICATION" MEANS AN APPLICATION IN WHICH THE FUNCTIONING OR MALFUNCTIONING OF THE SOFTWARE MAY RESULT DIRECTLY OR INDIRECTLY IN PHYSICAL INJURY OR LOSS OF HUMAN LIFE. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.<br></p>
-
-<p><b>8 TERMINATION.</b></p>
-<p>sep 0mm</p>
-<p><b>8.1.</b></p>
-<p>This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.</p>
-<p><b>8.2.</b></p>
-<p><b>8.3.</b></p>
-<p>If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount
-or value of any payment or license. </p>
-<p><b>8.4.</b></p>
-<p>In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.<br></p>
-
-<p><b>9 LIMITATION OF LIABILITY.</b></p>
-<p>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.<br></p>
-
-<p><b>10 U.S. GOVERNMENT END USERS.</b><br></p>
-
-<p><b>11 MISCELLANEOUS.</b><br></p>
-
-<p><b>12 RESPONSIBILITY FOR CLAIMS.</b></p>
-<p>As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.<br></p>
-
-<p>EXHIBIT A.</p>
-<p>"The contents of this file are subject to the gSOAP Public License Version 1.3 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at</p>
-<p>http://www.cs.fsu.edu/~engelen/soaplicense.html</p>
-<p>Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code of the gSOAP Software is: stdsoap.h, stdsoap2.h, stdsoap.c, stdsoap2.c, stdsoap.cpp, stdsoap2.cpp, soapcpp2.h, soapcpp2.c, soapcpp2_lex.l, soapcpp2_yacc.y, error2.h, error2.c, symbol2.c, init2.c, soapdoc2.html, and soapdoc2.pdf, httpget.h, httpget.c, stl.h, stldeque.h, stllist.h, stlvector.h, stlset.h. The Initial Developer of the Original Code is Robert A. van Engelen. Portions created by Robert A. van Engelen are Copyright © 2001-2004 Robert A. van Engelen, Genivia inc. All Rights Reserved. Contributor(s):</p>
-<p>"________________________." </p>
-<p>[Note: The text of this Exhibit A may differ slightly form the text of the notices in the Source Code files of the Original code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.]</p>
-<p>EXHIBIT B.</p>
-<p>"Part of the software embedded in this product is gSOAP software.</p>
-<p>Portions created by gSOAP are Copyright © 2001-2004 Robert A. van Engelen, Genivia inc. All Rights Reserved.</p>
-<p>THE SOFTWARE IN THIS PRODUCT WAS IN PART PROVIDED BY GENIVIA INC AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."</p>
-<p> </p>
-
-
-
<h4>GNU GENERAL PUBLIC LICENSE</h4>
<p>Version 3, 29 June 2007</p>
<p>Copyright © 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a></p>
Binary file sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/atool.exe has changed
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/build.properties Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/build.properties Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
.,\
atool.exe,\
xerces-c_2_7.dll,\
+ license.txt,\
about.html,\
addr2line.exe,\
- binutils-2.19.1-src.zip,\
- license.txt
+ binutils-2.19.1-src.zip
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/license.txt Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.corecomponents/license.txt Wed Apr 21 19:42:48 2010 +0300
@@ -1,4 +1,4 @@
-Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved.
This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0"
which accompanies this distribution, and is available at the URL "http://www.eclipse.org/legal/epl-v10.html".
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/META-INF/MANIFEST.MF Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/META-INF/MANIFEST.MF Wed Apr 21 19:42:48 2010 +0300
@@ -5,6 +5,6 @@
Bundle-Name: Carbide.c++ Extensions - AnalyzeTool Help Plug-in
Bundle-SymbolicName: com.nokia.s60tools.analyzetool.help;singleton:=tr
ue
-Bundle-Version: 1.8.0
+Bundle-Version: 1.9.0
Bundle-Vendor: Nokia
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/about.html Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/about.html Wed Apr 21 19:42:48 2010 +0300
@@ -1,782 +1,928 @@
-<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
-<html>
-<head>
-<title>About</title>
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-</head>
-<body lang=”EN-US”>
-<h2>About This Content</h2>
-
-<p>May 05, 2008</p>
-
-<h3>Copyright</h3>
-
-<p>Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0" which accompanies this distribution, and is available at the URL <a href="http://www.eclipse.org/legal/epl-v10.html">"http://www.eclipse.org/legal/epl-v10.html"</a>.</p>
-
-<p>This Nokia Product includes Open Source Software. Certain software included in this Nokia Product is licensed and distributed under licenses containing obligation or permission to provide the source code of such software with the binary / executable form delivery of the said software. The source code is delivered to you in accordance with the referred license terms and conditions in the media attached to this document. The exact license terms, as well as the required copyright and other notices, permissions and acknowledgements are reproduced in and delivered to you as part of the referred source code.</p>
-
-<h3>Legal Notices</h3>
-<p>This product includes software developed by
- The Apache Software Foundation (http://www.apache.org/).</p>
-<p>Portions of this software were originally based on the following:
- - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.</p>
-
-
-<h4>Apache License</h4>
-<p>Apache License, Version 2.0, January 2004<br>
-<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a></p>
-
-<p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
-
-<p><b>1. Definitions.</b></p>
-<p>"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. </p>
-<p>"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.</p>
-<p>"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.</p>
-<p>"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.</p>
-<p>"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.</p>
-<p>"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.</p>
-<p>"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).</p>
-<p>"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.</p>
-<p>"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."</p>
-<p>"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.<br></p>
-
-<p><b>2. Grant of Copyright License.</b> Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.<br></p>
-
-<p><b>3. Grant of Patent License.</b> Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.<br></p>
-
-<p><b>4. Redistribution.</b> You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:</p>
-<p>(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and</p>
-<p>(b) You must cause any modified files to carry prominent notices stating that You changed the files; and</p>
-<p>(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and</p>
-<p>(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.</p>
-<p>You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.<br></p>
-
-<p><b>5. Submission of Contributions.</b> Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.<br></p>
-
-<p><b>6. Trademarks.</b> This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.<br></p>
-
-<p><b>7. Disclaimer of Warranty.</b> Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.<br></p>
-
-<p><b>8. Limitation of Liability.</b> In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.<br></p>
-
-<p><b>9. Accepting Warranty or Additional Liability.</b> While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.<br></p>
-
-<p>END OF TERMS AND CONDITIONS</p>
-<p> </p>
-
-
-
-<h4>GNU GENERAL PUBLIC LICENSE</h4>
-<p>Version 3, 29 June 2007</p>
-<p>Copyright © 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a></p>
-<p>Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.</p>
-
-<p><b><a name="preamble"></a>Preamble</b></p>
-
-<p>The GNU General Public License is a free, copyleft license for
-software and other kinds of works.</p>
-
-<p>The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.</p>
-
-<p>When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.</p>
-
-<p>To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.</p>
-
-<p>For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.</p>
-
-<p>Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.</p>
-
-<p>For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.</p>
-
-<p>Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.</p>
-
-<p>Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.</p>
-
-<p>The precise terms and conditions for copying, distribution and
-modification follow.</p>
-
-<p><b><a name="terms"></a>TERMS AND CONDITIONS</b></p>
-
-<p><b><a name="section0"></a>0. Definitions.</b></p>
-
-<p>“This License” refers to version 3 of the GNU General Public License.</p>
-
-<p>“Copyright” also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.</p>
-
-
-<p>“The Program” refers to any copyrightable work licensed under this
-License. Each licensee is addressed as “you”. “Licensees” and
-“recipients” may be individuals or organizations.</p>
-
-<p>To “modify” a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a “modified version” of the
-earlier work or a work “based on” the earlier work.</p>
-
-<p>A “covered work” means either the unmodified Program or a work based
-on the Program.</p>
-
-<p>To “propagate” a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.</p>
-
-<p>To “convey” a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.</p>
-
-<p>An interactive user interface displays “Appropriate Legal Notices”
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.</p>
-
-<p><b><a name="section1"></a>1. Source Code.</b></p>
-
-<p>The “source code” for a work means the preferred form of the work
-for making modifications to it. “Object code” means any non-source
-form of a work.</p>
-
-<p>A “Standard Interface” means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.</p>
-
-<p>The “System Libraries” of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-“Major Component”, in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.</p>
-
-<p>The “Corresponding Source” for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.</p>
-
-<p>The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.</p>
-
-<p>The Corresponding Source for a work in source code form is that
-same work.</p>
-
-<p><b><a name="section2"></a>2. Basic Permissions.</b></p>
-
-<p>All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.</p>
-
-<p>You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.</p>
-
-<p>Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.</p>
-
-<p><b><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</b></p>
-
-<p>No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.</p>
-
-<p>When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.</p>
-
-<p><b><a name="section4"></a>4. Conveying Verbatim Copies.</b></p>
-
-<p>You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.</p>
-
-<p>You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.</p>
-
-<p><b><a name="section5"></a>5. Conveying Modified Source Versions.</b></p>
-
-<p>You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:</p>
-
-<ul>
-<li>a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.</li>
-
-<li>b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- “keep intact all notices”.</li>
-
-<li>c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.</li>
-
-<li>d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.</li>
-</ul>
-
-<p>A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-“aggregate” if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.</p>
-
-<p><b><a name="section6"></a>6. Conveying Non-Source Forms.</b></p>
-
-<p>You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:</p>
-
-<ul>
-<li>a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.</li>
-
-<li>b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.</li>
-
-<li>c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.</li>
-
-<li>d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.</li>
-
-<li>e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.</li>
-</ul>
-
-<p>A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.</p>
-
-<p>A “User Product” is either (1) a “consumer product”, which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, “normally used” refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.</p>
-
-<p>“Installation Information” for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.</p>
-
-<p>If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).</p>
-
-<p>The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.</p>
-
-<p>Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.</p>
-
-<p><b><a name="section7"></a>7. Additional Terms.</b></p>
-
-<p>“Additional permissions” are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.</p>
-
-<p>When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.</p>
-
-<p>Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:</p>
-
-<ul>
-<li>a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or</li>
-
-<li>b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or</li>
-
-<li>c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or</li>
-
-<li>d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or</li>
-
-<li>e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or</li>
-
-<li>f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.</li>
-</ul>
-
-<p>All other non-permissive additional terms are considered “further
-restrictions” within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.</p>
-
-<p>If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.</p>
-
-<p>Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.</p>
-
-<p><b><a name="section8"></a>8. Termination.</b></p>
-
-<p>You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).</p>
-
-<p>However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.</p>
-
-<p>Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.</p>
-
-<p>Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.</p>
-
-<p><b><a name="section9"></a>9. Acceptance Not Required for Having Copies.</b></p>
-
-<p>You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.</p>
-
-<p><b><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</b></p>
-
-<p>Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.</p>
-
-<p>An “entity transaction” is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.</p>
-
-<p>You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.</p>
-
-<p><b><a name="section11"></a>11. Patents.</b></p>
-
-<p>A “contributor” is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's “contributor version”.</p>
-
-<p>A contributor's “essential patent claims” are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, “control” includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.</p>
-
-<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.</p>
-
-<p>In the following three paragraphs, a “patent license” is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To “grant” such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.</p>
-
-<p>If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. “Knowingly relying” means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.</p>
-
-
-<p>If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.</p>
-
-<p>A patent license is “discriminatory” if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.</p>
-
-<p>Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.</p>
-
-<p><b><a name="section12"></a>12. No Surrender of Others' Freedom.</b></p>
-
-<p>If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.</p>
-
-<p><b><a name="section13"></a>13. Use with the GNU Affero General Public License.</b></p>
-
-<p>Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.</p>
-
-<p><b><a name="section14"></a>14. Revised Versions of this License.</b></p>
-
-<p>The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.</p>
-
-<p>Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License “or any later version” applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.</p>
-
-<p>If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.</p>
-
-<p>Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.</p>
-
-<p><b><a name="section15"></a>15. Disclaimer of Warranty.</b></p>
-
-<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
-
-<p><b><a name="section16"></a>16. Limitation of Liability.</b></p>
-
-<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.</p>
-
-<p><b><a name="section17"></a>17. Interpretation of Sections 15 and 16.</b></p>
-
-<p>If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.</p>
-
-<p>END OF TERMS AND CONDITIONS</p>
-
-<p><b><a name="howto"></a>How to Apply These Terms to Your New Programs</b></p>
-
-<p>If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.</p>
-
-<p>To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the “copyright” line and a pointer to where the full notice is found.</p>
-
-<pre> <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-</pre>
-
-<p>Also add information on how to contact you by electronic and paper mail.</p>
-
-<p>If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:</p>
-
-<pre> <program> Copyright (C) <year> <name of author>
-
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-</pre>
-
-<p>The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an “about box”.</p>
-
-<p>You should also get your employer (if you work as a programmer) or school,
-if any, to sign a “copyright disclaimer” for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.</p>
-
-<p>The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.</p>
-<p> </p>
-
-
-
-<h4>addr2line notices</h4>
-<p>Copyright © 1987 Regents of the University of California. All rights reserved.</p>
-<p>Redistribution and use in source and binary forms are permitted provided that the above copyright notice and this paragraph are duplicated in all such forms and that any documentation, advertising materials, and other materials related to such distribution and use acknowledge that the software was developed by the University of California, Berkeley. The name of the University may not be used to endorse or promote products derived from this software without specific prior written permission.</p>
-<p>THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p>
-
-<p>Copyright © 1983, 1993, 1998 The Regents of the University of California. All rights reserved.</p>
-<p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p>
-<ol>
-<li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li>
-<li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li>
-<li>Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.</li>
-</ol>
-
-<p>THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-
-<p>Copyright © 1997 John D. Polstra. All rights reserved.</p>
-<p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p>
-<ol>
-<li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li>
-<li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li>
-</ol>
-
-<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-
-</body></html>
-
+<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
+<html>
+<head>
+ <title>About</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body lang="&#8221;EN-US”">
+<h2>About This Content</h2>
+
+<p>April 21, 2010</p>
+
+<h3>Copyright</h3>
+
+<p>Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights
+reserved. This component and the accompanying materials are made available
+under the terms of "Eclipse Public License v1.0" which accompanies this
+distribution, and is available at the URL <a
+href="http://www.eclipse.org/legal/epl-v10.html">"http://www.eclipse.org/legal/epl-v10.html"</a>.</p>
+
+<p>This Nokia Product includes Open Source Software. Certain software included
+in this Nokia Product is licensed and distributed under licenses containing
+obligation or permission to provide the source code of such software with the
+binary / executable form delivery of the said software. The source code is
+delivered to you in accordance with the referred license terms and conditions
+in the media attached to this document. The exact license terms, as well as the
+required copyright and other notices, permissions and acknowledgements are
+reproduced in and delivered to you as part of the referred source code.</p>
+
+<h3>Legal Notices</h3>
+
+<p>This product includes software developed by The Apache Software Foundation
+(http://www.apache.org/).</p>
+
+<p>Portions of this software were originally based on the following: - software
+copyright (c) 1999, IBM Corporation., http://www.ibm.com.</p>
+
+<h4>Apache License</h4>
+
+<p>Apache License, Version 2.0, January 2004<br>
+<a
+href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a></p>
+
+<p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
+
+<p><b>1. Definitions.</b></p>
+
+<p>"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document. </p>
+
+<p>"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.</p>
+
+<p>"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with that
+entity. For the purposes of this definition, "control" means (i) the power,
+direct or indirect, to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or
+more of the outstanding shares, or (iii) beneficial ownership of such
+entity.</p>
+
+<p>"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.</p>
+
+<p>"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source, and
+configuration files.</p>
+
+<p>"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled object
+code, generated documentation, and conversions to other media types.</p>
+
+<p>"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that is
+included in or attached to the work (an example is provided in the Appendix
+below).</p>
+
+<p>"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as a
+whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or merely
+link (or bind by name) to the interfaces of, the Work and Derivative Works
+thereof.</p>
+
+<p>"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the purposes
+of this definition, "submitted" means any form of electronic, verbal, or
+written communication sent to the Licensor or its representatives, including
+but not limited to communication on electronic mailing lists, source code
+control systems, and issue tracking systems that are managed by, or on behalf
+of, the Licensor for the purpose of discussing and improving the Work, but
+excluding communication that is conspicuously marked or otherwise designated in
+writing by the copyright owner as "Not a Contribution."</p>
+
+<p>"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.<br>
+</p>
+
+<p><b>2. Grant of Copyright License.</b> Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable copyright license to
+reproduce, prepare Derivative Works of, publicly display, publicly perform,
+sublicense, and distribute the Work and such Derivative Works in Source or
+Object form.<br>
+</p>
+
+<p><b>3. Grant of Patent License.</b> Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
+section) patent license to make, have made, use, offer to sell, sell, import,
+and otherwise transfer the Work, where such license applies only to those
+patent claims licensable by such Contributor that are necessarily infringed by
+their Contribution(s) alone or by combination of their Contribution(s) with the
+Work to which such Contribution(s) was submitted. If You institute patent
+litigation against any entity (including a cross-claim or counterclaim in a
+lawsuit) alleging that the Work or a Contribution incorporated within the Work
+constitutes direct or contributory patent infringement, then any patent
+licenses granted to You under this License for that Work shall terminate as of
+the date such litigation is filed.<br>
+</p>
+
+<p><b>4. Redistribution.</b> You may reproduce and distribute copies of the
+Work or Derivative Works thereof in any medium, with or without modifications,
+and in Source or Object form, provided that You meet the following
+conditions:</p>
+
+<p>(a) You must give any other recipients of the Work or Derivative Works a
+copy of this License; and</p>
+
+<p>(b) You must cause any modified files to carry prominent notices stating
+that You changed the files; and</p>
+
+<p>(c) You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from the
+Source form of the Work, excluding those notices that do not pertain to any
+part of the Derivative Works; and</p>
+
+<p>(d) If the Work includes a "NOTICE" text file as part of its distribution,
+then any Derivative Works that You distribute must include a readable copy of
+the attribution notices contained within such NOTICE file, excluding those
+notices that do not pertain to any part of the Derivative Works, in at least
+one of the following places: within a NOTICE text file distributed as part of
+the Derivative Works; within the Source form or documentation, if provided
+along with the Derivative Works; or, within a display generated by the
+Derivative Works, if and wherever such third-party notices normally appear. The
+contents of the NOTICE file are for informational purposes only and do not
+modify the License. You may add Your own attribution notices within Derivative
+Works that You distribute, alongside or as an addendum to the NOTICE text from
+the Work, provided that such additional attribution notices cannot be construed
+as modifying the License.</p>
+
+<p>You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such Derivative
+Works as a whole, provided Your use, reproduction, and distribution of the Work
+otherwise complies with the conditions stated in this License.<br>
+</p>
+
+<p><b>5. Submission of Contributions.</b> Unless You explicitly state
+otherwise, any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of this License,
+without any additional terms or conditions. Notwithstanding the above, nothing
+herein shall supersede or modify the terms of any separate license agreement
+you may have executed with Licensor regarding such Contributions.<br>
+</p>
+
+<p><b>6. Trademarks.</b> This License does not grant permission to use the
+trade names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the origin of
+the Work and reproducing the content of the NOTICE file.<br>
+</p>
+
+<p><b>7. Disclaimer of Warranty.</b> Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each Contributor provides
+its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied, including, without limitation, any warranties
+or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any risks
+associated with Your exercise of permissions under this License.<br>
+</p>
+
+<p><b>8. Limitation of Liability.</b> In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, unless required
+by applicable law (such as deliberate and grossly negligent acts) or agreed to
+in writing, shall any Contributor be liable to You for damages, including any
+direct, indirect, special, incidental, or consequential damages of any
+character arising as a result of this License or out of the use or inability to
+use the Work (including but not limited to damages for loss of goodwill, work
+stoppage, computer failure or malfunction, or any and all other commercial
+damages or losses), even if such Contributor has been advised of the
+possibility of such damages.<br>
+</p>
+
+<p><b>9. Accepting Warranty or Additional Liability.</b> While redistributing
+the Work or Derivative Works thereof, You may choose to offer, and charge a fee
+for, acceptance of support, warranty, indemnity, or other liability obligations
+and/or rights consistent with this License. However, in accepting such
+obligations, You may act only on Your own behalf and on Your sole
+responsibility, not on behalf of any other Contributor, and only if You agree
+to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.<br>
+</p>
+
+<p>END OF TERMS AND CONDITIONS</p>
+
+<p> </p>
+
+<h4>GNU GENERAL PUBLIC LICENSE</h4>
+
+<p>Version 3, 29 June 2007</p>
+
+<p>Copyright © 2007 Free Software Foundation, Inc. <a
+href="http://fsf.org/">http://fsf.org/</a></p>
+
+<p>Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.</p>
+
+<p><b><a name="preamble"></a>Preamble</b></p>
+
+<p>The GNU General Public License is a free, copyleft license for software and
+other kinds of works.</p>
+
+<p>The licenses for most software and other practical works are designed to
+take away your freedom to share and change the works. By contrast, the GNU
+General Public License is intended to guarantee your freedom to share and
+change all versions of a program--to make sure it remains free software for all
+its users. We, the Free Software Foundation, use the GNU General Public License
+for most of our software; it applies also to any other work released this way
+by its authors. You can apply it to your programs, too.</p>
+
+<p>When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for them if you wish), that you
+receive source code or can get it if you want it, that you can change the
+software or use pieces of it in new free programs, and that you know you can do
+these things.</p>
+
+<p>To protect your rights, we need to prevent others from denying you these
+rights or asking you to surrender the rights. Therefore, you have certain
+responsibilities if you distribute copies of the software, or if you modify it:
+responsibilities to respect the freedom of others.</p>
+
+<p>For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must pass on to the recipients the same freedoms that you
+received. You must make sure that they, too, receive or can get the source
+code. And you must show them these terms so they know their rights.</p>
+
+<p>Developers that use the GNU GPL protect your rights with two steps: (1)
+assert copyright on the software, and (2) offer you this License giving you
+legal permission to copy, distribute and/or modify it.</p>
+
+<p>For the developers' and authors' protection, the GPL clearly explains that
+there is no warranty for this free software. For both users' and authors' sake,
+the GPL requires that modified versions be marked as changed, so that their
+problems will not be attributed erroneously to authors of previous versions.</p>
+
+<p>Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do so. This
+is fundamentally incompatible with the aim of protecting users' freedom to
+change the software. The systematic pattern of such abuse occurs in the area of
+products for individuals to use, which is precisely where it is most
+unacceptable. Therefore, we have designed this version of the GPL to prohibit
+the practice for those products. If such problems arise substantially in other
+domains, we stand ready to extend this provision to those domains in future
+versions of the GPL, as needed to protect the freedom of users.</p>
+
+<p>Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on
+general-purpose computers, but in those that do, we wish to avoid the special
+danger that patents applied to a free program could make it effectively
+proprietary. To prevent this, the GPL assures that patents cannot be used to
+render the program non-free.</p>
+
+<p>The precise terms and conditions for copying, distribution and modification
+follow.</p>
+
+<p><b><a name="terms"></a>TERMS AND CONDITIONS</b></p>
+
+<p><b><a name="section0"></a>0. Definitions.</b></p>
+
+<p>“This License” refers to version 3 of the GNU General Public
+License.</p>
+
+<p>“Copyright” also means copyright-like laws that apply to other
+kinds of works, such as semiconductor masks.</p>
+
+<p>“The Program” refers to any copyrightable work licensed under
+this License. Each licensee is addressed as “you”.
+“Licensees” and “recipients” may be individuals or
+organizations.</p>
+
+<p>To “modify” a work means to copy from or adapt all or part of
+the work in a fashion requiring copyright permission, other than the making of
+an exact copy. The resulting work is called a “modified version” of
+the earlier work or a work “based on” the earlier work.</p>
+
+<p>A “covered work” means either the unmodified Program or a work
+based on the Program.</p>
+
+<p>To “propagate” a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for infringement
+under applicable copyright law, except executing it on a computer or modifying
+a private copy. Propagation includes copying, distribution (with or without
+modification), making available to the public, and in some countries other
+activities as well.</p>
+
+<p>To “convey” a work means any kind of propagation that enables
+other parties to make or receive copies. Mere interaction with a user through a
+computer network, with no transfer of a copy, is not conveying.</p>
+
+<p>An interactive user interface displays “Appropriate Legal
+Notices” to the extent that it includes a convenient and prominently
+visible feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the extent
+that warranties are provided), that licensees may convey the work under this
+License, and how to view a copy of this License. If the interface presents a
+list of user commands or options, such as a menu, a prominent item in the list
+meets this criterion.</p>
+
+<p><b><a name="section1"></a>1. Source Code.</b></p>
+
+<p>The “source code” for a work means the preferred form of the
+work for making modifications to it. “Object code” means any
+non-source form of a work.</p>
+
+<p>A “Standard Interface” means an interface that either is an
+official standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that is widely
+used among developers working in that language.</p>
+
+<p>The “System Libraries” of an executable work include anything,
+other than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major Component, and
+(b) serves only to enable use of the work with that Major Component, or to
+implement a Standard Interface for which an implementation is available to the
+public in source code form. A “Major Component”, in this context,
+means a major essential component (kernel, window system, and so on) of the
+specific operating system (if any) on which the executable work runs, or a
+compiler used to produce the work, or an object code interpreter used to run
+it.</p>
+
+<p>The “Corresponding Source” for a work in object code form means
+all the source code needed to generate, install, and (for an executable work)
+run the object code and to modify the work, including scripts to control those
+activities. However, it does not include the work's System Libraries, or
+general-purpose tools or generally available free programs which are used
+unmodified in performing those activities but which are not part of the work.
+For example, Corresponding Source includes interface definition files
+associated with source files for the work, and the source code for shared
+libraries and dynamically linked subprograms that the work is specifically
+designed to require, such as by intimate data communication or control flow
+between those subprograms and other parts of the work.</p>
+
+<p>The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.</p>
+
+<p>The Corresponding Source for a work in source code form is that same
+work.</p>
+
+<p><b><a name="section2"></a>2. Basic Permissions.</b></p>
+
+<p>All rights granted under this License are granted for the term of copyright
+on the Program, and are irrevocable provided the stated conditions are met.
+This License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License only
+if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by
+copyright law.</p>
+
+<p>You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force. You may
+convey covered works to others for the sole purpose of having them make
+modifications exclusively for you, or provide you with facilities for running
+those works, provided that you comply with the terms of this License in
+conveying all material for which you do not control copyright. Those thus
+making or running the covered works for you must do so exclusively on your
+behalf, under your direction and control, on terms that prohibit them from
+making any copies of your copyrighted material outside their relationship with
+you.</p>
+
+<p>Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10 makes it
+unnecessary.</p>
+
+<p><b><a name="section3"></a>3. Protecting Users' Legal Rights From
+Anti-Circumvention Law.</b></p>
+
+<p>No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting or
+restricting circumvention of such measures.</p>
+
+<p>When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention is
+effected by exercising rights under this License with respect to the covered
+work, and you disclaim any intention to limit operation or modification of the
+work as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.</p>
+
+<p><b><a name="section4"></a>4. Conveying Verbatim Copies.</b></p>
+
+<p>You may convey verbatim copies of the Program's source code as you receive
+it, in any medium, provided that you conspicuously and appropriately publish on
+each copy an appropriate copyright notice; keep intact all notices stating that
+this License and any non-permissive terms added in accord with section 7 apply
+to the code; keep intact all notices of the absence of any warranty; and give
+all recipients a copy of this License along with the Program.</p>
+
+<p>You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.</p>
+
+<p><b><a name="section5"></a>5. Conveying Modified Source Versions.</b></p>
+
+<p>You may convey a work based on the Program, or the modifications to produce
+it from the Program, in the form of source code under the terms of section 4,
+provided that you also meet all of these conditions:</p>
+<ul>
+ <li>a) The work must carry prominent notices stating that you modified it,
+ and giving a relevant date.</li>
+ <li>b) The work must carry prominent notices stating that it is released
+ under this License and any conditions added under section 7. This
+ requirement modifies the requirement in section 4 to “keep intact all
+ notices”.</li>
+ <li>c) You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will therefore
+ apply, along with any applicable section 7 additional terms, to the whole
+ of the work, and all its parts, regardless of how they are packaged. This
+ License gives no permission to license the work in any other way, but it
+ does not invalidate such permission if you have separately received it.</li>
+ <li>d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work need
+ not make them do so.</li>
+</ul>
+
+<p>A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate” if the
+compilation and its resulting copyright are not used to limit the access or
+legal rights of the compilation's users beyond what the individual works
+permit. Inclusion of a covered work in an aggregate does not cause this License
+to apply to the other parts of the aggregate.</p>
+
+<p><b><a name="section6"></a>6. Conveying Non-Source Forms.</b></p>
+
+<p>You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these ways:</p>
+<ul>
+ <li>a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium customarily used
+ for software interchange.</li>
+ <li>b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a written offer,
+ valid for at least three years and valid for as long as you offer spare
+ parts or customer support for that product model, to give anyone who
+ possesses the object code either (1) a copy of the Corresponding Source for
+ all the software in the product that is covered by this License, on a
+ durable physical medium customarily used for software interchange, for a
+ price no more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the Corresponding Source from a
+ network server at no charge.</li>
+ <li>c) Convey individual copies of the object code with a copy of the written
+ offer to provide the Corresponding Source. This alternative is allowed only
+ occasionally and noncommercially, and only if you received the object code
+ with such an offer, in accord with subsection 6b.</li>
+ <li>d) Convey the object code by offering access from a designated place
+ (gratis or for a charge), and offer equivalent access to the Corresponding
+ Source in the same way through the same place at no further charge. You
+ need not require recipients to copy the Corresponding Source along with the
+ object code. If the place to copy the object code is a network server, the
+ Corresponding Source may be on a different server (operated by you or a
+ third party) that supports equivalent copying facilities, provided you
+ maintain clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the Corresponding
+ Source, you remain obligated to ensure that it is available for as long as
+ needed to satisfy these requirements.</li>
+ <li>e) Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of the
+ work are being offered to the general public at no charge under subsection
+ 6d.</li>
+</ul>
+
+<p>A separable portion of the object code, whose source code is excluded from
+the Corresponding Source as a System Library, need not be included in conveying
+the object code work.</p>
+
+<p>A “User Product” is either (1) a “consumer product”,
+which means any tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling. In determining whether a product is a consumer
+product, doubtful cases shall be resolved in favor of coverage. For a
+particular product received by a particular user, “normally used”
+refers to a typical or common use of that class of product, regardless of the
+status of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product is a
+consumer product regardless of whether the product has substantial commercial,
+industrial or non-consumer uses, unless such uses represent the only
+significant mode of use of the product.</p>
+
+<p>“Installation Information” for a User Product means any methods,
+procedures, authorization keys, or other information required to install and
+execute modified versions of a covered work in that User Product from a
+modified version of its Corresponding Source. The information must suffice to
+ensure that the continued functioning of the modified object code is in no case
+prevented or interfered with solely because modification has been made.</p>
+
+<p>If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as part of a
+transaction in which the right of possession and use of the User Product is
+transferred to the recipient in perpetuity or for a fixed term (regardless of
+how the transaction is characterized), the Corresponding Source conveyed under
+this section must be accompanied by the Installation Information. But this
+requirement does not apply if neither you nor any third party retains the
+ability to install modified object code on the User Product (for example, the
+work has been installed in ROM).</p>
+
+<p>The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates for a
+work that has been modified or installed by the recipient, or for the User
+Product in which it has been modified or installed. Access to a network may be
+denied when the modification itself materially and adversely affects the
+operation of the network or violates the rules and protocols for communication
+across the network.</p>
+
+<p>Corresponding Source conveyed, and Installation Information provided, in
+accord with this section must be in a format that is publicly documented (and
+with an implementation available to the public in source code form), and must
+require no special password or key for unpacking, reading or copying.</p>
+
+<p><b><a name="section7"></a>7. Additional Terms.</b></p>
+
+<p>“Additional permissions” are terms that supplement the terms of
+this License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall be
+treated as though they were included in this License, to the extent that they
+are valid under applicable law. If additional permissions apply only to part of
+the Program, that part may be used separately under those permissions, but the
+entire Program remains governed by this License without regard to the
+additional permissions.</p>
+
+<p>When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added
+by you to a covered work, for which you have or can give appropriate copyright
+permission.</p>
+
+<p>Notwithstanding any other provision of this License, for material you add to
+a covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:</p>
+<ul>
+ <li>a) Disclaiming warranty or limiting liability differently from the terms
+ of sections 15 and 16 of this License; or</li>
+ <li>b) Requiring preservation of specified reasonable legal notices or author
+ attributions in that material or in the Appropriate Legal Notices displayed
+ by works containing it; or</li>
+ <li>c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in reasonable
+ ways as different from the original version; or</li>
+ <li>d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or</li>
+ <li>e) Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or</li>
+ <li>f) Requiring indemnification of licensors and authors of that material by
+ anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any liability
+ that these contractual assumptions directly impose on those licensors and
+ authors.</li>
+</ul>
+
+<p>All other non-permissive additional terms are considered “further
+restrictions” within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is governed
+by this License along with a term that is a further restriction, you may remove
+that term. If a license document contains a further restriction but permits
+relicensing or conveying under this License, you may add to a covered work
+material governed by the terms of that license document, provided that the
+further restriction does not survive such relicensing or conveying.</p>
+
+<p>If you add terms to a covered work in accord with this section, you must
+place, in the relevant source files, a statement of the additional terms that
+apply to those files, or a notice indicating where to find the applicable
+terms.</p>
+
+<p>Additional terms, permissive or non-permissive, may be stated in the form of
+a separately written license, or stated as exceptions; the above requirements
+apply either way.</p>
+
+<p><b><a name="section8"></a>8. Termination.</b></p>
+
+<p>You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void,
+and will automatically terminate your rights under this License (including any
+patent licenses granted under the third paragraph of section 11).</p>
+
+<p>However, if you cease all violation of this License, then your license from
+a particular copyright holder is reinstated (a) provisionally, unless and until
+the copyright holder explicitly and finally terminates your license, and (b)
+permanently, if the copyright holder fails to notify you of the violation by
+some reasonable means prior to 60 days after the cessation.</p>
+
+<p>Moreover, your license from a particular copyright holder is reinstated
+permanently if the copyright holder notifies you of the violation by some
+reasonable means, this is the first time you have received notice of violation
+of this License (for any work) from that copyright holder, and you cure the
+violation prior to 30 days after your receipt of the notice.</p>
+
+<p>Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under this
+License. If your rights have been terminated and not permanently reinstated,
+you do not qualify to receive new licenses for the same material under section
+10.</p>
+
+<p><b><a name="section9"></a>9. Acceptance Not Required for Having
+Copies.</b></p>
+
+<p>You are not required to accept this License in order to receive or run a
+copy of the Program. Ancillary propagation of a covered work occurring solely
+as a consequence of using peer-to-peer transmission to receive a copy likewise
+does not require acceptance. However, nothing other than this License grants
+you permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or
+propagating a covered work, you indicate your acceptance of this License to do
+so.</p>
+
+<p><b><a name="section10"></a>10. Automatic Licensing of Downstream
+Recipients.</b></p>
+
+<p>Each time you convey a covered work, the recipient automatically receives a
+license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance by
+third parties with this License.</p>
+
+<p>An “entity transaction” is a transaction transferring control of
+an organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered work
+results from an entity transaction, each party to that transaction who receives
+a copy of the work also receives whatever licenses to the work the party's
+predecessor in interest had or could give under the previous paragraph, plus a
+right to possession of the Corresponding Source of the work from the
+predecessor in interest, if the predecessor has it or can get it with
+reasonable efforts.</p>
+
+<p>You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under this
+License, and you may not initiate litigation (including a cross-claim or
+counterclaim in a lawsuit) alleging that any patent claim is infringed by
+making, using, selling, offering for sale, or importing the Program or any
+portion of it.</p>
+
+<p><b><a name="section11"></a>11. Patents.</b></p>
+
+<p>A “contributor” is a copyright holder who authorizes use under
+this License of the Program or a work on which the Program is based. The work
+thus licensed is called the contributor's “contributor version”.</p>
+
+<p>A contributor's “essential patent claims” are all patent claims
+owned or controlled by the contributor, whether already acquired or hereafter
+acquired, that would be infringed by some manner, permitted by this License, of
+making, using, or selling its contributor version, but do not include claims
+that would be infringed only as a consequence of further modification of the
+contributor version. For purposes of this definition, “control”
+includes the right to grant patent sublicenses in a manner consistent with the
+requirements of this License.</p>
+
+<p>Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents of
+its contributor version.</p>
+
+<p>In the following three paragraphs, a “patent license” is any
+express agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to sue for
+patent infringement). To “grant” such a patent license to a party
+means to make such an agreement or commitment not to enforce a patent against
+the party.</p>
+
+<p>If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free of
+charge and under the terms of this License, through a publicly available
+network server or other readily accessible means, then you must either (1)
+cause the Corresponding Source to be so available, or (2) arrange to deprive
+yourself of the benefit of the patent license for this particular work, or (3)
+arrange, in a manner consistent with the requirements of this License, to
+extend the patent license to downstream recipients. “Knowingly
+relying” means you have actual knowledge that, but for the patent
+license, your conveying the covered work in a country, or your recipient's use
+of the covered work in a country, would infringe one or more identifiable
+patents in that country that you have reason to believe are valid.</p>
+
+<p>If, pursuant to or in connection with a single transaction or arrangement,
+you convey, or propagate by procuring conveyance of, a covered work, and grant
+a patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients
+of the covered work and works based on it.</p>
+
+<p>A patent license is “discriminatory” if it does not include
+within the scope of its coverage, prohibits the exercise of, or is conditioned
+on the non-exercise of one or more of the rights that are specifically granted
+under this License. You may not convey a covered work if you are a party to an
+arrangement with a third party that is in the business of distributing
+software, under which you make payment to the third party based on the extent
+of your activity of conveying the work, and under which the third party grants,
+to any of the parties who would receive the covered work from you, a
+discriminatory patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the covered
+work, unless you entered into that arrangement, or that patent license was
+granted, prior to 28 March 2007.</p>
+
+<p>Nothing in this License shall be construed as excluding or limiting any
+implied license or other defenses to infringement that may otherwise be
+available to you under applicable patent law.</p>
+
+<p><b><a name="section12"></a>12. No Surrender of Others' Freedom.</b></p>
+
+<p>If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not excuse
+you from the conditions of this License. If you cannot convey a covered work so
+as to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may not convey it at all. For
+example, if you agree to terms that obligate you to collect a royalty for
+further conveying from those to whom you convey the Program, the only way you
+could satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.</p>
+
+<p><b><a name="section13"></a>13. Use with the GNU Affero General Public
+License.</b></p>
+
+<p>Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the
+GNU Affero General Public License into a single combined work, and to convey
+the resulting work. The terms of this License will continue to apply to the
+part which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.</p>
+
+<p><b><a name="section14"></a>14. Revised Versions of this License.</b></p>
+
+<p>The Free Software Foundation may publish revised and/or new versions of the
+GNU General Public License from time to time. Such new versions will be similar
+in spirit to the present version, but may differ in detail to address new
+problems or concerns.</p>
+
+<p>Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU General Public License
+“or any later version” applies to it, you have the option of
+following the terms and conditions either of that numbered version or of any
+later version published by the Free Software Foundation. If the Program does
+not specify a version number of the GNU General Public License, you may choose
+any version ever published by the Free Software Foundation.</p>
+
+<p>If the Program specifies that a proxy can decide which future versions of
+the GNU General Public License can be used, that proxy's public statement of
+acceptance of a version permanently authorizes you to choose that version for
+the Program.</p>
+
+<p>Later license versions may give you additional or different permissions.
+However, no additional obligations are imposed on any author or copyright
+holder as a result of your choosing to follow a later version.</p>
+
+<p><b><a name="section15"></a>15. Disclaimer of Warranty.</b></p>
+
+<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+OR CORRECTION.</p>
+
+<p><b><a name="section16"></a>16. Limitation of Liability.</b></p>
+
+<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b><a name="section17"></a>17. Interpretation of Sections 15 and 16.</b></p>
+
+<p>If the disclaimer of warranty and limitation of liability provided above
+cannot be given local legal effect according to their terms, reviewing courts
+shall apply local law that most closely approximates an absolute waiver of all
+civil liability in connection with the Program, unless a warranty or assumption
+of liability accompanies a copy of the Program in return for a fee.</p>
+
+<p>END OF TERMS AND CONDITIONS</p>
+
+<p><b><a name="howto"></a>How to Apply These Terms to Your New Programs</b></p>
+
+<p>If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.</p>
+
+<p>To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively state the
+exclusion of warranty; and each file should have at least the
+“copyright” line and a pointer to where the full notice is
+found.</p>
+<pre> <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.</pre>
+
+<p>Also add information on how to contact you by electronic and paper mail.</p>
+
+<p>If the program does terminal interaction, make it output a short notice like
+this when it starts in an interactive mode:</p>
+<pre> <program> Copyright (C) <year> <name of author>
+
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.</pre>
+
+<p>The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands might
+be different; for a GUI interface, you would use an “about box”.</p>
+
+<p>You should also get your employer (if you work as a programmer) or school,
+if any, to sign a “copyright disclaimer” for the program, if
+necessary. For more information on this, and how to apply and follow the GNU
+GPL, see <http://www.gnu.org/licenses/>.</p>
+
+<p>The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General Public
+License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.</p>
+
+<p> </p>
+
+<h4>addr2line notices</h4>
+
+<p>Copyright © 1987 Regents of the University of California. All rights
+reserved.</p>
+
+<p>Redistribution and use in source and binary forms are permitted provided
+that the above copyright notice and this paragraph are duplicated in all such
+forms and that any documentation, advertising materials, and other materials
+related to such distribution and use acknowledge that the software was
+developed by the University of California, Berkeley. The name of the University
+may not be used to endorse or promote products derived from this software
+without specific prior written permission.</p>
+
+<p>THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p>
+
+<p>Copyright © 1983, 1993, 1998 The Regents of the University of California.
+All rights reserved.</p>
+
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:</p>
+<ol>
+ <li>Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.</li>
+ <li>Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.</li>
+ <li>Neither the name of the University nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.</li>
+</ol>
+
+<p>THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+
+<p>Copyright © 1997 John D. Polstra. All rights reserved.</p>
+
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:</p>
+<ol>
+ <li>Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.</li>
+ <li>Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.</li>
+</ol>
+
+<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/book.css Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,184 @@
+/*
+ Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ License: http://www.eclipse.org/legal/epl-v10.html
+*/
+
+/* Add whitespace around entire display to avoid crowding edges of view */
+/* 20070523-Removed top margin size to close gap between location breadcrumbs and page title */
+html {
+ margin: 2px 10px 10px 10px;
+ }
+
+/* Set default font to serif style, 12-pt and plain */
+body, p, table {
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+}
+
+/* Use sans-serif fonts for all title styles */
+h1, h2, h3, h4, h5, h6, strong, em {
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ color: #000000;
+ }
+
+h1 { font-size:20px }
+h2 { font-size:18px }
+h3 { font-size:16px }
+h4 { font-size:14px }
+h5 { font-size:13px }
+h6 { font-size:12px }
+
+/* For headlines at the top of a view, add space */
+/* 20090224-changed green fade to gold header image */
+h1, h2, h3 {
+ background-image: url(html/images/gold_header.png);
+ background-repeat: no-repeat;
+ padding:10px 0px 10px 12px;
+ }
+
+li {
+ margin-bottom:8px;
+ margin-top:8px;
+ }
+
+/* Footer includes space and a gray line above the company logo */
+#footer {
+ padding-top:10px;
+ margin-top:20px;
+ border-top:1px solid #999;
+ font-family: Helvetica, sans-serif;
+ font-size: 11px;
+ color:#333;
+ }
+
+.listing {
+ font-family: "Courier New", Courier, mono;
+ color: #000000;
+ background-color: #FFFFCC;
+ margin: 5px 0px;
+ }
+
+.code, pre {
+ font-family: "Courier New", Courier, mono;
+ font-size: 13px;
+ color: #000000;
+ }
+
+.step {
+ /* background-color: #EEE; */
+ /* margin: 10px 0px; */
+ /* color: #111; */
+ /* border-bottom:2px solid #EEE; */
+ }
+
+.substep {
+ background-color: #EEE;
+ }
+
+
+/* Figure/Listing/Table titles are centered and gray */
+p.table {
+ color: #999;
+ font-weight: bold;
+ padding-top: 5px;
+ }
+
+table {
+ border: solid #999 1px;
+ table-layout: auto;
+ font-size: 13px;
+ }
+
+td, th {
+ border: solid #999 1px;
+ padding: 5px;
+ vertical-align:top;
+ }
+
+/* 20070522-replaced gray with green background to match gradiant color for title */
+th {
+ background-color:#FFC550; /* background-color:#acd79b;
+ background-color:#999;
+ color:#FFF; */
+ }
+
+div.ol.p {
+ margin-left: 3em;
+ }
+
+/* Make all ordered/unordered list items appear in bold gray */
+div ol > li, div ul > li {
+ font-weight:bold;
+ color: #333;
+ }
+
+div ol > p, div ul > p, div li > p {
+ font-weight:normal;
+ }
+
+/* Make all H4 and H5 items appear in bold gray against a light green background */
+div h5, div h4 {
+ padding:5px 0px 5px 12px;
+ background-color:#FDCB2F;
+ /* background-color: #EEE; */
+ font-weight:bold;
+ color: #000000;
+ }
+
+
+/* Notes stand out using a light top & bottom borders with dark gray text */
+p.note {
+ /* color: #03C; */
+ /* background-color: #FFFF99; */
+ color: #333;
+ padding: 5px;
+ margin-left: 1em;
+ margin-right: 1em;
+ border-top: solid #BBB thin;
+ border-bottom: solid #BBB thin;
+ }
+
+
+/* Figure/Listing/Table titles are centered and gray */
+p.figure {
+ color: #333;
+ text-align: center;
+ font-weight: bold;
+ }
+
+/* highly visible red background and white text for things that need fixing before release */
+/* SHOULD NOT BE PRESENT IN RELEASED PRODUCTS */
+.fix {
+ background-color: red;
+ font-weight: bold;
+ color: white;
+ }
+
+.question {
+ font-style:italic;
+ font-weight:bold;
+ color: #555;
+ }
+
+.titleSmall {
+ font-family: Helvetica, sans-serif;
+ font-size: 11px;
+ }
+
+
+.plain {
+ font-family: Helvetica, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ line-height: normal;
+ font-weight: normal;
+ font-variant: normal;
+ color: #000000;
+ text-decoration: none;
+ }
+
+a:link { color: #0033CC }
+a:visited { color: #555555 }
+a:hover { color: #0033CC }
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/build.properties Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/build.properties Wed Apr 21 19:42:48 2010 +0300
@@ -3,4 +3,6 @@
META-INF/,\
.,\
html/,\
- about.html
\ No newline at end of file
+ about.html,\
+ book.css
+
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/advanced.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/advanced.htm Wed Apr 21 19:42:48 2010 +0300
@@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
<title>AnalyzeTool preferences</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -30,7 +30,7 @@
</tbody>
</table>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/concepts.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/concepts.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Concepts</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -17,7 +17,7 @@
<li><a href="tracing.htm">Tracing</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/datafile.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/datafile.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta content="text/html; charset=us-ascii" http-equiv="content-type">
<meta content="text/css" http-equiv="content-style-type">
-<link href="../nokia.css" rel="StyleSheet" type="text/css">
+<link href="../../book.css" rel="StyleSheet" type="text/css">
<title>AnalyzeTool data file</title>
</head>
<body>
@@ -19,7 +19,7 @@
<h4>Saving analysis data</h4>
<p>You can save the memory leak results or raw test run data. The difference between the file formats is that the raw test run data contains all available data collected during the test run, whereas the memory leak results file only contains the test results from the currently selected project. The memory leak results file can be opened and the results read without source codes, but the raw data always needs the source codes built with AnalyzeTool before it can be opened.</p>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/memory_leaks.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/memory_leaks.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Memory leaks</title>
-<link href="../nokia.css" type="text/css" rel="stylesheet">
+<link href="../../book.css" type="text/css" rel="stylesheet">
</head>
<body>
@@ -19,7 +19,7 @@
<li><a href="../tasks/viewmemoryleaks.htm">Viewing memory leaks</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/preferences.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/preferences.htm Wed Apr 21 19:42:48 2010 +0300
@@ -1,92 +1,119 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 1.0 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="content-style-type" content="text/css">
-<title>AnalyzeTool preferences</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
-</head>
-<body>
-
-<h2>AnalyzeTool preferences</h2>
-<p>You can change the AnalyzeTool preferences by selecting <b>Window > Preferences...> Carbide Extensions > AnalyzeTool</b>.</p>
-<p><img src="../images/AT_preferences.png" alt="Setting preferences"></p>
-<p>The AnalyzeTool preferences are described in the following table:</p>
-<table width="615" border="1" cellspacing="1" cellpadding="2">
-<colgroup>
-<col width="250*">
-<col width="356*"></colgroup>
-<tbody>
-<tr>
-<th>Options</th>
-<th align="center">Description</th>
-</tr>
-<tr>
-<td>AnalyzeTool Engine</td>
-<td>AnalyzeTool uses the command line utility <i>atool.exe</i> which is used for instrumenting and uninstrumenting the project and analysing captured data.
-<ul>
-<li>
-Use internal engine. This option uses the built-in version of <i>atool.exe</i>.
-</li>
-<li>
-Use external command line engine. This options uses <i>atool.exe</i> from a user-defined location.
-</li>
-<ul>
-</ul>
-</td>
-</tr>
-<!--<tr>
-<td>Generate statistics</td>
-<td>Enables AnalyzeTool to generate memory statistics.</td>
-</tr>-->
-<tr>
-<td>Verbose output</td>
-<td>Enables command line engine debug information to the <b>Console</b> view.</td>
-</tr>
-<tr>
-<td>Engine version</td>
-<td>Displays selected engine version number.</td>
-</tr>
-<tr>
-<td>Data gathering mode</td>
-<td>Specifies the data gathering mode for AnalyzeTool build.
-<ul>
-<li>Monitored External or External: This option will send the memory analysis data through tracing utility connection. For more information, see <a href="../tasks/capture.htm#capture_external">Capturing data in external data gathering mode</a>.</li>
-<li>Internal: This option will create a data file to the target hardware. The data file name is the same as the project name. If you select the <b>Name from the user</b> option, you must define a name for the data file. For more information, see <a href="../tasks/capture.htm#capture_s60_file">Capturing data in internal data gathering mode</a>
-<ul>
-<li>Name from the process: This option will a use data file name which is the same as application target name.</li>
-<li>Name from the user: This option will ask a data file name every time a project is built with the <i>atool.exe</i>.</li>
-</ul>
-</li>
-<li>Ask always: This option will ask before each build which data gathering mode to use, External or Internal</li>
-</ul></td>
-</tr>
-<tr>
-<td>Stored callstack size</td>
-<td>
-<ul>
-<li>No items. This option does not store any callstack items.</li>
-<li>40 items. This option stores forty callstack items.</li>
-<li>100 items. This option stores hundred callstack items</li>
-<li>Custom callstack size. This option provides possibility to define custom size of callstack items. Custom size of callstack items is limited to 0-255</li>
-
-</ul>
-<b>Note!</b> The callstack size affects the speed of hooked process, lower callstack size is faster.
-</td>
-</tr>
-<tr>
-<td>Report level</td>
-<td>Specifies the report level of memory leak analysis results.
-<ul>
-<li>Show every detail: This option displays all the call stack information.</li>
-<li>Show only known code lines: This option displays all the known line numbers of call stack information.</li>
-<li>Show only topmost memory allocation code line: This option displays the first known line of call stack information.</li>
-</ul></td>
-</tr>
-</tbody>
-</table>
-
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 1.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+ <meta http-equiv="content-style-type" content="text/css">
+ <title>AnalyzeTool preferences</title>
+ <link href="../../book.css" type="text/css" rel="StyleSheet">
+</head>
+
+<body>
+<h2>AnalyzeTool preferences</h2>
+
+<p>You can change the AnalyzeTool preferences by selecting <b>Window >
+Preferences...> Carbide Extensions > AnalyzeTool</b>.</p>
+
+<p><img src="../images/AT_preferences.png" alt="Setting preferences"></p>
+
+<p>The AnalyzeTool preferences are described in the following table:</p>
+
+<table width="615" border="1" cellspacing="1" cellpadding="2">
+ <colgroup><col width="250*">
+ <col width="356*">
+ </colgroup>
+ <tbody>
+ <tr>
+ <th>Options</th>
+ <th align="center">Description</th>
+ </tr>
+ <tr>
+ <td>AnalyzeTool Engine</td>
+ <td>AnalyzeTool uses the command line utility <i>atool.exe</i> which is
+ used for instrumenting and uninstrumenting the project and analysing
+ captured data.
+ <ul>
+ <li>Use internal engine. This option uses the built-in version of
+ <i>atool.exe</i>. </li>
+ <li>Use external command line engine. This options uses
+ <i>atool.exe</i> from a user-defined location.
+ <ul>
+ </ul>
+ </li>
+ </ul>
+ </td>
+ </tr>
+ <!--<tr>
+ <td>Generate statistics</td>
+ <td>Enables AnalyzeTool to generate memory statistics.</td>
+ </tr>-->
+ <tr>
+ <td>Verbose output</td>
+ <td>Enables command line engine debug information to the <b>Console</b>
+ view.</td>
+ </tr>
+ <tr>
+ <td>Engine version</td>
+ <td>Displays selected engine version number.</td>
+ </tr>
+ <tr>
+ <td>Data gathering mode</td>
+ <td>Specifies the data gathering mode for AnalyzeTool build.
+ <ul>
+ <li>Monitored External or External: This option will send the memory
+ analysis data through tracing utility connection. For more
+ information, see <a
+ href="../tasks/capture.htm#capture_external">Capturing data in
+ external data gathering mode</a>.</li>
+ <li>Internal: This option will create a data file to the target
+ hardware. The data file name is the same as the project name. If
+ you select the <b>Name from the user</b> option, you must define a
+ name for the data file. For more information, see <a
+ href="../tasks/capture.htm#capture_s60_file">Capturing data in
+ internal data gathering mode</a>
+ <ul>
+ <li>Name from the process: This option will a use data file name
+ which is the same as application target name.</li>
+ <li>Name from the user: This option will ask a data file name
+ every time a project is built with the <i>atool.exe</i>.</li>
+ </ul>
+ </li>
+ <li>Ask always: This option will ask before each build which data
+ gathering mode to use, External or Internal</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>Stored callstack size</td>
+ <td><ul>
+ <li>No items. This option does not store any callstack items.</li>
+ <li>40 items. This option stores forty callstack items.</li>
+ <li>100 items. This option stores hundred callstack items</li>
+ <li>Custom callstack size. This option provides possibility to define
+ custom size of callstack items. Custom size of callstack items is
+ limited to 0-255</li>
+ </ul>
+ <b>Note!</b> The callstack size affects the speed of hooked process,
+ lower callstack size is faster. </td>
+ </tr>
+ <tr>
+ <td>Report level</td>
+ <td>Specifies the report level of memory leak analysis results.
+ <ul>
+ <li>Show every detail: This option displays all the call stack
+ information.</li>
+ <li>Show only known code lines: This option displays all the known
+ line numbers of call stack information.</li>
+ <li>Show only topmost memory allocation code line: This option
+ displays the first known line of call stack information.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<div id="footer">
+Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights
+reserved. License: <a
+href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
+</body>
+</html>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/tracing.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/concepts/tracing.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Tracing</title>
-<link href="../nokia.css" type="text/css" rel="stylesheet">
+<link href="../../book.css" type="text/css" rel="stylesheet">
</head>
<body>
@@ -16,7 +16,7 @@
<li><a href="../tasks/capture.htm#capture_external">Capturing data in monitored external or external data gathering mode</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/basic.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/basic.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>AnalyzeTool Basic walk-through</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -25,7 +25,7 @@
<li><a href="../tasks/viewactivitygraph.htm">View memory activity graph</a>.</li>
</ol>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/gs_index.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/gs_index.htm Wed Apr 21 19:42:48 2010 +0300
@@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
<title>Concepts</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -16,7 +16,7 @@
<li><a href="basic.htm">Basic walk-through</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/overview.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/overview.htm Wed Apr 21 19:42:48 2010 +0300
@@ -5,15 +5,12 @@
<meta http-equiv="content-style-type" content="text/css">
<meta name="lastupdated" content="06/17/05 11:09:43">
<title>Analyze Tool Overview</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
<h2>Overview</h2>
-<p>AnalyzeTool is a tool used for testing Symbian software for memory leaks and pinpointing the leaking problems in source code. AnalyzeTool is used from Windows command prompt or from Carbide.c++ 2.0 onwards. Using AnalyzeTool requires an S60 3.1, S60 3.2, or S60 5.0 device with R&D certificates. Tracing utility Connection (USB) is required as follows:</p>
-<ul>
-<li>Tracing utility Connection (USB) is required for collecting real time data from target hardware to PC.</li>
-</ul>
+<p>AnalyzeTool is a tool used for testing Symbian software for memory leaks and pinpointing the leaking problems in source code. AnalyzeTool is used from Windows command prompt or from Carbide.c++ 2.0 onwards. Using AnalyzeTool requires an S60 5.x device with R&D certificates.</p>
<p><b>Note!</b> You cannot use AnalyzeTool if you do not have access to source codes of a tested application. Testing is also limited to user side SW instead of kernel SW.</p>
<p>You can use the AnalyzeTool Carbide.c++ Extension for the whole test cycle or just to read the analysis file generated by the command line tool. AnalyzeTool supports automated testing without a need for any user interaction. AnalyzeTool works as a background service, so no user input is necessary during the test run. Analysis does not interfere with program run so it can be executed among any other testing activities.</p>
<p>Currently AnalyzeTool supports memory analysis on S60 based devices by storing all the reserved memory addresses that were never released. Memory addresses with call stack information are used for identifying the code line of the possible memory issue. AnalyzeTool can also spot unclosed resource handles at process exit, and in most cases it can pinpoint the exact code line where the memory issue was introduced.</p>
@@ -26,7 +23,7 @@
<li>Data is collected to PC/target hardware while tests are run. Analysis is run after the test run is completed to spot memory issues.</li>
</ol>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/prerequisites.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/gettingstarted/prerequisites.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>AnalyzeTool Prerequisites</title>
-<link href="../nokia.css" type="text/css" rel="stylesheet">
+<link href="../../book.css" type="text/css" rel="stylesheet">
</head>
<body>
@@ -13,26 +13,26 @@
<li>AnalyzeTool command line tool (atool.exe).</li>
<li>Symbian component of AnalyzeTool extracted in build environment.</li>
<li>AnalyzeTool for target hardware (through SIS or ROM build).</li>
- <li>Tracing utility Carbide.c++ Extension (any connection method to target hardware that can pass information through RDebug).</li>
+ <li>TraceViewer Carbide.c++ Extension (any connection method to target hardware that can pass information through RDebug).</li>
</ul>
<p><b>Note!</b> If you have taken AnalyzeTool into use through the Nokia internal SymSEE Installer, the required components have been automatically installed to your PC.</p>
<h5>AnalyzeTool for target hardware</h5>
-<p>To run analysis in the target hardware, AnalyzeTool needs to be installed. You can either choose to install AnalyzeTool through an installation package, or add AnalyzeTool to a phone image. You can find the needed files from the <b>c:\apps\atool</b> directory, if you have acquired AnalyzeTool through the Nokia internal SymSEE environment. If you want to install AnalyzeTool from a SIS package, unzip the <i>AnalyzeToolPhone.zip</i> which contains the binaries of the release and debug versions for the supported platforms. In case of ROM image inclusion (with the 3.2 release), <i>AnalyzeTool.iby</i> needs to be included. In case of 5.x release, it is automatically included.</p>
+<p>To run analysis in the target hardware, AnalyzeTool needs to be installed. You can either choose to install AnalyzeTool through an installation package, or add AnalyzeTool to a phone image. You can find the needed files from the <b>c:\apps\atool</b> directory, if you have acquired AnalyzeTool through the Nokia internal SymSEE environment. If you want to install AnalyzeTool from a SIS package, unzip the <i>AnalyzeToolPhone.zip</i> which contains the binaries of the release and debug versions for the supported platforms. In case of ROM image inclusion, <i>AnalyzeTool.iby</i> needs to be included. In case of 5.x release, it is automatically included.</p>
<h5>Additions to build environment</h5>
-<p>S60 version 3.2.x, 5.0, 5.0.1, and 5.1 platforms and MCL releases include AnalyzeTool so if you are using one of those you do not need to take any actions. If you are using a platform which does not include AnalyzeTool, you have to add some AnalyzeTool files to the platform to be able to build with AnalyzeTool. If you have installed AnalyzeTool through the Nokia internal SymSEE environment, these files can be found from <b>c:\apps\atool</b>. The file name is <i>S60_environment_changes_xx.zip</i> where <i>xx</i> specifies the S60 platform version number. To install these files, unzip the file to the directory which contains the <i>epoc32</i> directory. The zip file includes the necessary directory structure.</p>
+<p>S60 version 5.0, 5.0.1, and 5.1 platforms and MCL releases include AnalyzeTool so if you are using one of those you do not need to take any actions. If you are using a platform which does not include AnalyzeTool, you have to add some AnalyzeTool files to the platform to be able to build with AnalyzeTool. If you have installed AnalyzeTool through the Nokia internal SymSEE environment, these files can be found from <b>c:\apps\atool</b>. The file name is <i>S60_environment_changes_xx.zip</i> where <i>xx</i> specifies the S60 platform version number. To install these files, unzip the file to the directory which contains the <i>epoc32</i> directory. The zip file includes the necessary directory structure.</p>
<p><b>Note!</b> Errors about missing AnalyzeTool files are displayed in the problems view if your build environment is missing any necessary AnalyzeTool files.</p>
<h5>Checking the AnalyzeTool Carbide.c++ Extension installation</h5>
-<p>If you intend to use <a href="../tasks/capture.htm#capture_external">External data gathering mode</a>, check that Tracing utility Carbide.c++ Extension is configured correctly. </p>
+<p>If you intend to use <a href="../tasks/capture.htm#capture_external">External data gathering mode</a>, check that TraceViewer Carbide.c++ Extension is configured correctly. Check the TraceViewer settings from <b>Window > Preferences > Carbide Extensions > TraceViewer > Connection</b>. For more information, see the <a href="../../../com.nokia.traceviewer.help/html/toc.htm">TraceViewer Help.</a></p>
<h5>Related concepts</h5>
<ul>
<li><a href="../gettingstarted/basic.htm">Basic walk-through</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
Binary file sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/images/AT_preferences.png has changed
Binary file sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/images/about_cpp.png has changed
Binary file sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/images/background_carbide.jpg has changed
Binary file sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/images/brandmark_cpp.gif has changed
Binary file sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/images/gold_header.png has changed
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/legal.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/legal.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,14 +3,14 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>License Information</title>
-<link href="nokia.css" type="text/css" rel="stylesheet">
+<link href="../book.css" type="text/css" rel="stylesheet">
</head>
<body>
<h3>License Information</h3>
<h5>COPYRIGHTS</h5>
-<p>Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0" which accompanies this distribution, and is available at the URL <a href="http://www.eclipse.org/legal/epl-v10.html">"http://www.eclipse.org/legal/epl-v10.html"</a>.</p>
+<p>Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0" which accompanies this distribution, and is available at the URL <a href="http://www.eclipse.org/legal/epl-v10.html">"http://www.eclipse.org/legal/epl-v10.html"</a>.</p>
<p>Initial Contributors:<br>
Nokia Corporation - initial contribution</p>
@@ -68,7 +68,6 @@
-
<h5>GNU GENERAL PUBLIC LICENSE</h5>
<p>Version 3, 29 June 2007</p>
<p>Copyright © 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a></p>
@@ -782,7 +781,7 @@
<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/nokia.css Wed Apr 21 15:14:16 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-/* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
- License: http://www.eclipse.org/legal/epl-v10.html.
-
-*/
-
-/* Add whitespace around entire display to avoid crowding edges of view */
-html {
- margin: 10px;
- /* fixes gray backgrounds when displayed in external browsers */
- background-color:#FFFFFF;
- }
-
-/* Set default font to serif style, 12-pt and plain */
-body, p, table {
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 12px;
- font-weight: normal;
-}
-
-/* Use sans-serif fonts for all title styles */
-h1, h2, h3, h4, h5, h6, strong, em {
- font-family: Arial, Helvetica, sans-serif;
- color: #000000;
- }
-
-h1 { font-size:20px }
-h2 { font-size:18px }
-h3 { font-size:16px }
-h4 { font-size:14px }
-h5 { font-size:12px }
-h6 { font-size:10px }
-
-/* For headlines at the top of a view, add space */
-/* 20070522-added gradiant to background to update visual style of docs */
-h1, h2, h3 {
- background-image: url(images/green_fade_left_68_165_28.png);
- background-repeat: no-repeat;
- padding:10px 0px 10px 12px;
- }
-
-li {
- margin-bottom:8px;
- margin-top:8px;
- }
-
-/* Footer includes space and a gray line above the company logo */
-#footer {
- padding-top:10px;
- margin-top:20px;
- border-top:1px solid #999;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- color: #03C;
- }
-
-.listing {
- font-family: "Courier New", Courier, mono;
- color: #009;
- background-color: #EEE;
- padding: 10px 0px;
- margin: 10px 0px;
- }
-
-.code, pre {
- font-family: "Courier New", Courier, mono;
- font-size: 11px;
- color: #333;
- }
-
-.step {
- /* background-color: #EEE; */
- /* margin: 10px 0px; */
- color: #333;
- border-bottom:2px solid #EEE;
- }
-
-.substep {
- background-color: #EEE;
- }
-
-
-/* Figure/Listing/Table titles are centered and gray */
-p.table {
- color: #999;
- font-weight: bold;
- padding-top: 5px;
- }
-
-table {
- border: solid #999 1px;
- table-layout: auto;
- font-size: 12px;
- }
-
-td, th {
- border: solid #999 1px;
- padding: 5px;
- vertical-align:top;
- }
-
-/* 20070522-replaced gray with green background to match gradiant color for title */
-th {
- background-color:#ACD79B;
- /* background-color:#999;
- color:#FFF; */
- }
-
-div.ol.p {
- margin-left: 3em;
- }
-
-/* Make all ordered/unordered list items appear in bold gray */
-div ol > li, div ul > li {
- font-weight:bold;
- color: #333;
- }
-
-div ol > p, div ul > p, div li > p {
- font-weight:normal;
- }
-
-/* Make all H4 and H5 items appear in bold gray against a light green background */
-div h5, div h4 {
- padding:5px 0px 5px 12px;
- background-color:#ECFBEA;
- /* background-color: #EEE; */
- font-weight:bold;
- color: #333;
- }
-
-
-/* Notes stand out using a light top & bottom borders with dark gray text */
-p.note {
- /* color: #03C; */
- /* background-color: #FFFF99; */
- color: #333;
- padding: 5px;
- margin-left: 1em;
- margin-right: 1em;
- border-top: solid #BBB thin;
- border-bottom: solid #BBB thin;
- }
-
-
-/* Figure/Listing/Table titles are centered and gray */
-p.figure {
- color: #333;
- text-align: center;
- font-weight: bold;
- }
-
-/* highly visible red background and white text for things that need fixing before release */
-/* SHOULD NOT BE PRESENT IN RELEASED PRODUCTS */
-.fix {
- background-color: red;
- font-weight: bold;
- color: white;
- }
-
-.question {
- font-style:italic;
- font-weight:bold;
- color: #555;
- }
-
-.titleSmall {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- }
-
-
-.plain {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- font-style: normal;
- line-height: normal;
- font-weight: normal;
- font-variant: normal;
- color: #000000;
- text-decoration: none;
- }
-
-a:link { color: #0033CC }
-a:visited { color: #555555 }
-a:hover { color: #0033CC }
-
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/reference/references.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/reference/references.htm Wed Apr 21 19:42:48 2010 +0300
@@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
<title>References</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -15,7 +15,7 @@
<li><a href="troubleshooting.htm">Troubleshooting</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/reference/toolbar.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/reference/toolbar.htm Wed Apr 21 19:42:48 2010 +0300
@@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
<title>AnalyzeTool Toolbar</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -74,7 +74,7 @@
<li><a href="../tasks/viewmemoryleaks.htm">Viewing memory leaks</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/reference/troubleshooting.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/reference/troubleshooting.htm Wed Apr 21 19:42:48 2010 +0300
@@ -4,7 +4,7 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
<title>AnalyzeTool Troubleshooting</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -29,6 +29,18 @@
<td>AnalyzeTool Carbide.c++ Extension could not load the mmp file info. Ensure that project's <i>bld.inf</i> file contains mmp files.</td>
</tr>
<tr>
+<td>TraceViewer connection reserved for another plug-in.</td>
+<td>Another Carbide.c++ Extension uses TraceViewer. First close the other TraceViewer Carbide.c++ Extension connection, and then try again.</td>
+</tr>
+<tr>
+<td>Invalid TraceViewer connection settings.</td>
+<td>The TraceViewer has invalid connection settings and could not connect to target hardware. Check the TraceViewer options from <b>Window > Preferences... > Carbide Extensions > TraceViewer > Connection</b>.</td>
+</tr>
+<tr>
+<td>General TraceViewer error.</td>
+<td>The TraceViewer cannot connect to target hardware and the AnalyzeTool Carbide.c++ Extension could not resolve the problem. Check the TraceViewer options from <b>Window > Preferences... > Carbide Extensions > TraceViewer > Connection</b>.</td>
+</tr>
+<tr>
<td>Invalid name. Do you want to specify a valid name?</td>
<td>You have entered an invalid subtest name, for example the name is empty or starts with an illegal parameter.</td>
</tr>
@@ -103,7 +115,7 @@
</tr>
<tr>
<td>Can not find AnalyzeTool libraries from current SDK</td>
-<td>Your build environment is missing the necessary files for building with AnalyzeTool. You need to compile AnalyzeTool to all platforms in your environment.</td>
+<td>Your build environment is missing the necessary files for building with AnalyzeTool. These files can be found from the AnalyzeTool installation folder from files S60_environment_changes31.zip, S60_environment_changes32.zip or S60_environment_changes50.zip. Unzip one of these to the desired Symbian OS root directory. The zip-package itself includes the necessary subfolder structure.</td>
</tr>
<tr>
<td>AnalyzeTool : Errors :<br>
@@ -113,7 +125,7 @@
</tbody>
</table>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/release_notes.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/release_notes.htm Wed Apr 21 19:42:48 2010 +0300
@@ -1,338 +1,451 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-<title>Release Notes</title>
-<link href="nokia.css" type="text/css" rel="stylesheet">
-</head>
-<body>
-
-<h2>Release note</h2>
-<h4>AnalyzeTool Carbide.c++ Extension – Version 1.8.0</h4>
-<p>Released 12th December 2009</p>
-
-<ul>
- <li><a href="#description">Product description</a></li>
- <li><a href="#features">Main features</a></li>
- <li><a href="#newfeatures">What's new</a></li>
- <li><a href="#installation">Installation notes</a></li>
- <li><a href="#requirements">System requirements</a></li>
- <li><a href="#compissues">Compatibility issues</a></li>
- <li><a href="#issues">Known issues</a></li>
-</ul>
-
-<h3><a name="description"></a>Product description</h3>
-<p>AnalyzeTool is a test software tool that is used for testing Symbian software for memory leaks and pinpointing the leaking problems in the source code.</p>
-<p>For any support email list "D-AnalyzeTool-Support DG" should be used.</p>
-
-<h3><a name="features"></a>Main features</h3>
-<ul>
- <li>UI for activating a memory leak analysis. </li>
- <li>UI for seeing results of a memory leak analysis.</li>
- <li>Pinpoints memory leaks from target hardware to source code lines.</li>
- <li>Discovers resource leaks from process.</li>
- <li>Command line interface and Carbide.c++ Extension.</li>
-</ul>
-
-<h3><a name="newfeatures"></a>What's new</h3>
-<ul>
- <li>N/A</li>
-</ul>
-
-<h3><a name="installation"></a>Installation notes</h3>
-<ul>
- <li>N/A</li>
-</ul>
-
-<h3><a name="requirements"></a>System requirements</h3>
-<p>Basic Requirements:</p>
-<ul>
- <li>Windows XP.</li>
- <li>S60 3.1, 3.2, 5.0 or 5.1 (R&D SW).</li>
- <li>ARMV5 or GCCE compiler.</li>
- <li>Tracing utility Carbide.c++ Extension (version 1.0.1+).</li>
-</ul>
-<p>Additional Requirements:</p>
-<ul>
- <li>Tracing utility connection (USB connection) is required for collecting real time data from target hardware to PC.</li>
-</ul>
-
-<h3><a name="compissues"></a>Compatibility issues</h3>
-<ul>
- <li>AnalyzeTool iby files (ROM image creation) at S60 5.0 SDK and higher are not compatible with older than week 16/2009 release of SDK.</li>
- <li>Not compatible with older versions than 1.6.0 of AnalyzeTool command line engine.</li>
- <li>Kernel code analysis not supported.</li>
-</ul>
-
-<h3><a name="issues"></a>Known issues</h3>
-<ul>
- <li><b>Note:</b> If you are updating AnalyzeTool from the version older than 1.5.0, AnalyzeTool uses a different folder structure compared to previous versions. Therefore it is essential that you check that there are no header files in the folder <i>\epoc32\include\applications\analyzetool</i> or <i>\epoc32\include\analyzetool</i>.</li>
- <li>Tested processes must be closed successfully, meaning that they cannot be panicked or exited abnormally (will cause also a lot of false memory leaks).</li>
- <li>Handle leaks in subtest shows substraction of open handles within the subtest.</li>
- <li>The subtesting feature cannot be used with internal data gathering mode.</li>
- <li>Memory leaks from ECOM plugins are reported, but not pinpointed to code lines inside plugin.</li>
- <li>Pinpointing memory leaks from urel binaries shows only function names.</li>
-</ul>
-
-<h3>Version history</h3>
-<h5>Version 1.7.4 – 4th November 2009</h5>
-<ul>
- <li>Feature: [AT-560] - Third data gathering mode which is simple and fast.</li>
- <li>Feature: [AT-592] - Support for specifying call stack size(s).</li>
- <li>Feature: [AT-627] - Button to open preferences.</li>
- <li>Feature: [AT-551] - New error dialogs in Carbide extension.</li>
- <li>Feature: [AT-583] - Extension version number shown in AnalyzeTool view.</li>
- <li>Fix: [AT-568] - Inform user in build phase that kernel mode is not supported/hooked.</li>
- <li>Fix: [AT-623] - Version conflict not shown to user.</li>
- <li>Fix: [AT-632] - Selecting leak from sub test does not give call stack info.</li>
-</ul>
-
-<h5>Version 1.7.3 – 1st October 2009</h5>
-<ul>
- <li>Fix: [AT-570] - Support for define multiple symbol files</li>
- <li>Fix: [AT-586] - Carbide extension builds project although the selected target is not supported.
-</ul>
-
-<h5>Version in 1.7.2 – 3th September 2009</h5>
-<ul>
- <li>Fix: [AT-538] - Memory leak information copied to clipboard.</li>
-</ul>
-
-<h5>Version in 1.7.1 – 19th August 2009</h5>
-<ul>
- <li>Fix: [AT-542] - Decrease extension memory usage when creating results.</li>
- <li>Fix: [AT-553] - Device data file input should not accept path.</li>
-</ul>
-
-<h5>Version in 1.7.0 – 25th June 2009</h5>
-<ul>
- <li>Feature: [AT-520] - "-debug" passed as build argument in Carbide.</li>
- <li>Feature: [AT-134] - Carbide.c++ AnalyzeTool building of a QT project.</li>
- <li>Feature: [AT-236] - Refresh button which makes results again.</li>
- <li>Feature: [AT-136] - AnalyzeTool Carbide.c++ Extension can be used to visualize results for emulator/simulator memory leaks automatically.</li>
- <li>Fix: [AT-517] - Improve parsing speed of addresses.</li>
- <li>Fix: [AT-464] - Verbose output renders AnalyzeTool unusable slow.</li>
- <li>Fix: [AT-279] - Usability Improvement: Console view should be opened after building done.</li>
-</ul>
-
-<h5>Version in 1.6.0 – 20th April 2009</h5>
-<ul>
- <li>Feature: [AT-480] - Rom symbol file can be defined in Carbide Extension preferences.</li>
- <li>Feature: [AT-489] - AnalyzeTool memory leak results can be cleared from view.</li>
- <li>Feature: [AT-475] - Number of max callstack items increased to 40.</li>
- <li>Feature: [AT-453] - On the fly call stack filtering improved.</li>
- <li>Feature: [AT-481] - "PROCESS_END x ABNORMAL" are now printed also when internal data gathering mode is used.</li>
- <li>Feature: [AT-337] - Supports for pinpointing codelines from GCCE binaries.</li>
- <li>Feature: [AT-113] - Pinpoint memory leaks to code lines also in urel builds.</li>
- <li>Feature: [AT-467] - Cheat sheet for AnalyzeTool created.</li>
- <li>Feature: [AT-416] - Carbide extension checks atool.exe version before using it.</li>
- <li>Feature: [AT-440] - atool.exe version number showed in AnalyzeTool preference page.</li>
- <li>Feature: [AT-442] - AnalyzeTool "core" version number is displayed in Carbide preferences.</li>
- <li>Feature: [AT-451] - Added support for pinpointing codelines from static libraries in ARMV5 platform.</li>
- <li>Fix: [AT-461] - Pinpointing works also to dlls in emulator environment.</li>
- <li>Fix: [AT-419] - Clear AnalyzeTool changes runs reallyclean also.</li>
- <li>Fix: [AT-446] - Error message is displayed when user analysis invalid data.</li>
- <li>Fix: [AT-466] - Cancelling build enabled during pre-builder.</li>
- <li>Fix: [AT-420] - Analysis progress bar now progresses.</li>
-</ul>
-
-<h5>Version in 1.5.2 – 27th March 2009</h5>
-<ul>
- <li>Feature: [AT-254] - AnalyzeTool to work also in emulator.</li>
- <li>Feature: [AT-323] - AnalyzeTool Carbide extension can be used without Traceviewer Extension.</li>
- <li>Fix: [AT-350] - Running atool -c in directory where only empty atool_temp directory exists will not delete atool_temp directory.</li>
- <li>Fix: [AT-330] - In analyze report pinpointed memoryleak count is always zero when using sbs v.2, in logging levels 1 & 2.</li>
- <li>Fix: [AT-333] - Use of raptor build variables leads to incorrect listing file name with certain types.</li>
- <li>Fix: [AT-357] - AnalyzeTool can share existing Tracing utility connection.</li>
- <li>Fix: [AT-361] - Unnecessary "Can not analyze" dialog is no longer displayed after the project is built with AnalyzeTool.</li>
- <li>Fix: [AT-363] - Needed files for AnalyzeTool hooking are also checked for winscw.</li>
- <li>Fix: [AT-376] - Analyze Tool Pre- and Post-Build Errors are added to Problems View.</li>
- <li>Fix: [AT-272] - AnalyzeTool debug logging improved.</li>
- <li>Fix: [AT-374] - Start tracing icon changed.</li>
- <li>Fix: [AT-372] - If SDK prefs not ok in Carbide, atool gives error: missing libraries from SDK.</li>
- <li>Fix: [AT-378] - Crash when trying to navigate to source location.</li>
- <li>Fix: [AT-390] - Emulator pinpoints to wrong cpp file.</li>
- <li>Fix: [AT-393] - Progress monitor is shown while starting the Tracing utility connection.</li>
- <li>Fix: [AT-410] - Command line tool, "atool.exe", is bundled into the Carbide extension.</li>
- <li>Fix: [AT-325] - unnecessary copying of trace file removed from Carbide.</li>
- <li>Fix: [AT-358] - Disable unnecessary AnalyzeTool buttons when trace is started.</li>
-</ul>
-
-<h5>Version 1.5.1 – 19th March 2009</h5>
-<ul>
- <li>Feature: [AT-443] - Atool version is checked when hooked application is started.</li>
- <li>Fearure: [AT-451] - Added support for pinpointing codelines from static libraries in ARMV5 platform.</li>
- <li>Fix: [AT-422] - Abnormal process ends not anymore showed for non-AnalyzeTool processes.</li>
-</ul>
-
-<h5>Version 1.5.0 – 19th February 2009</h5>
-<ul>
- <li>Feature: [AT-254] - AnalyzeTool to work also in emulator.</li>
- <li>Feature: [AT-323] - AnalyzeTool Carbide extension can be used without Traceviewer Extension.</li>
- <li>Fix: [AT-350] - Running atool -c in directory where only empty atool_temp directory exists will not delete atool_temp directory.</li>
- <li>Fix: [AT-330] - In analyze report pinpointed memoryleak count is always zero when using sbs v.2, in logging levels 1 & 2.</li>
- <li>Fix: [AT-333] - Use of raptor build variables leads to incorrect listing file name with certain types.</li>
- <li>Fix: [AT-357] - AnalyzeTool can share existing Tracing utility connection.</li>
- <li>Fix: [AT-361] - Unnecessary "Can not analyze" dialog is no longer displayed after the project is built with AnalyzeTool.</li>
- <li>Fix: [AT-363] - Needed files for AnalyzeTool hooking are also checked for winscw.</li>
- <li>Fix: [AT-376] - Analyze Tool Pre- and Post-Build Errors are added to Problems View.</li>
- <li>Fix: [AT-272] - AnalyzeTool debug logging improved.</li>
- <li>Fix: [AT-374] - Start tracing icon changed.</li>
- <li>Fix: [AT-372] - If SDK prefs not ok in Carbide, atool gives error: missing libraries from SDK.</li>
- <li>Fix: [AT-378] - Crash when trying to navigate to source location.</li>
- <li>Fix: [AT-390] - Emulator pinpoints to wrong cpp file.</li>
- <li>Fix: [AT-393] - Progress monitor is shown while starting the Tracing utility connection.</li>
- <li>Fix: [AT-410] - Command line tool, "atool.exe", is bundled into the Carbide extension.</li>
- <li>Fix: [AT-325] - unnecessary copying of trace file removed from Carbide.</li>
- <li>Fix: [AT-358] - Disable unnecessary AnalyzeTool buttons when trace is started.</li>
-</ul>
-
-<h5>Version 1.4.1 – 19th December 2008</h5>
-<ul>
- <li>Change: [AT-235] - Carbide Extension could show which modules are built with atool.</li>
- <li>Change: [AT-263] - Atool supports Symbian build system version 2 (SBS v.2).</li>
- <li>Change: [AT-69] - Subtest memory analysis summary should be separated inside to subtest information.</li>
- <li>Change: [AT-252] - Carbide extension to ask user "to continue or abort compilation" if target is not supported.</li>
- <li>Change: [AT-274] - AnalyzeTool window buttons improvement.</li>
- <li>Change: [AT-218] - History of files opened added to open file button.</li>
- <li>Change: [AT-219] - Verbose configuration option for Carbide.c++.</li>
- <li>Change: [AT-233] - Results include processes udeb/urel info.</li>
- <li>Fix: [AT-205] - Carbide Extension cannot find the .cpp file where memoryleak is pinpointed.</li>
- <li>Fix: [AT-278] - Usability Improvement: Preferences page and Logging mode.</li>
- <li>Fix: [AT-300] - Number of leaks in subtest is displayed in report.</li>
- <li>Fix: [AT-237] - Support analysing datafiles without /epoc32/build content or from sub folder where build was made.</li>
- <li>Fix: [AT-276] - Atool will not show the correct name of subtest if it contains spaces.</li>
- <li>Fix: [AT-280] - Compiling a project deletes logging data file from atool_temp.</li>
- <li>Fix: [AT-285] - Temporary file left to output directory in atool.exe analyze.</li>
- <li>Fix: [AT-286] - AnalyzeTool window not updated after current project change.</li>
- <li>Fix: [AT-289] - Number of memory leaks info should be updated after report detail level change.</li>
- <li>Fix: [AT-226] - Project only specifies one MMP but all the MMP files are built.</li>
- <li>Fix: [AT-234] - Changing detail level of report clears call stack window.</li>
- <li>Fix: [AT-249] - AnalyzeTool post-builder is not working with variants on Carbide.c++.</li>
- <li>Fix: [AT-273] - "Start Trace" clears results from all open projects.</li>
- <li>Fix: [AT-275] - Pinpointing from urel module does not work from Carbide.c++.</li>
-</ul>
-
-<h5>Version 1.4.0 – 12th December 2008</h5>
-<ul>
- <li>Change: [AT-218] - History of files opened added to open file button.</li>
- <li>Change: [AT-219] - Verbose configuration option for Carbide.c++.</li>
- <li>Change: [AT-233] - Results include processes udeb/urel info.</li>
- <li>Fix: [AT-226] - Project only specifies one MMP but all the mmp files are built.</li>
- <li>Fix: [AT-234] - Changing detail level of report clears callstack window.</li>
- <li>Fix: [AT-249] - AnalyzeTool post-builder is not working with variants on Carbide.c++.</li>
- <li>Fix: [AT-273] - "Start Trace" clears results from all open projects.</li>
- <li>Fix: [AT-275] - Pinpointing from urel module does not work from Carbide.</li>
-</ul>
-
-<h5>Version 1.3.3 – 27th November 2008</h5>
-<ul>
- <li>Change: [AT-218] - History of files opened added to open file button.</li>
- <li>Change: [AT-219] - Verbose configuration option for Carbide.c++.</li>
- <li>Change: [AT-233] - Results include processes udeb/urel info.</li>
- <li>Fix: [AT-226] - Project only specifies one MMP but all the mmp files are built.</li>
- <li>Fix: [AT-234] - Changing detail level of report clears callstack window.</li>
- <li>Fix: [AT-249] - AnalyzeTool post-builder is not working with variants on Carbide.c++.</li>
- <li>Fix: [AT-273] - "Start Trace" clears results from all open projects.</li>
- <li>Fix: [AT-275] - Pinpointing from urel module does not work from Carbide.</li>
-</ul>
-
-<h5>Version 1.3.2 – 13th November 2008</h5>
-<ul>
- <li>Change: [AT-218] - History of files opened added to open file button.</li>
- <li>Change: [AT-219] - Verbose configuration option for Carbide.c++.</li>
- <li>Change: [AT-233] - Results include processes udeb/urel info.</li>
- <li>Fix: [AT-226] - Project only specifies one MMP but all the mmp files are built.</li>
- <li>Fix: [AT-234] - Changing detail level of report clears callstack window.</li>
- <li>Fix: [AT-249] - AnalyzeTool post-builder is not working with variants on Carbide.c++.</li>
- <li>Fix: [AT-273] - "Start Trace" clears results from all open projects.</li>
- <li>Fix: [AT-275] - Pinpointing from urel module does not work from Carbide.</li>
-</ul>
-
-<h5>Version 1.3.1 – 30th October 2008</h5>
-<ul>
- <li>Change: [AT-163] - A single process start - end, should not be a test run.</li>
- <li>Change: [AT-189] - Carbide.c++ Extension shows ABNORMAL text when system exception happens in the phone.</li>
- <li>Change: [AT-190] - Carbide.c++ Extension could filter memory leaks which does not contain any call stack.</li>
- <li>Change: [AT-191] - MemoryHook reports PROCESS_END with ABNORMAL tag.</li>
- <li>Change: [AT-192] - atool -c to undo mmp change.</li>
- <li>Change: [AT-202] - Modules with read only mmp files can be hooked.</li>
- <li>Change: [AT-209] - Print S60 logging filename if not given.</li>
- <li>Fix: [AT-156] - Multiple subtests within test run show only one subtest.</li>
- <li>Fix: [AT-181] - Logging levels 1 and 3 produce same results when using UREL target.</li>
- <li>Fix: [AT-204] - Memoryhook prints PROCESS_END when child threads are killed.</li>
- <li>Fix: [AT-206] - Atool reports runs from irrelevant PROCESS_ENDS.</li>
- <li>Fix: [AT-222] - No error message data file can not be opened.</li>
- <li>Fix: [AT-225] - NPE when using the Analyze View in Carbide 2.0.</li>
- <li>Fix: [AT-243] - "Error 1 make[1]: *** Waiting for unfinished jobs...." error is displayed during the AnalyzeTool build.</li>
- <li>Fix: [AT-247] - run abld reallyclean instead of abld clean.</li>
- <li>Fix: [AT-248] - AnalyzeTool builder "is shown active" after importing a deleted project again to Carbide.c++.</li>
- <li>Fix: [AT-212] - Progress information: Executing AnalyzeTool, Cannot send to background.</li>
- <li>Fix: [AT-250] - Devlon52 or other ARMV5 based variants cannot be built from Carbide.</li>
-</ul>
-
-<h5>Version 1.3.0 – 23rd October 2008</h5>
-<ul>
- <li>Change: [AT-163] - A single process start - end, should not be a test run.</li>
- <li>Change: [AT-189] - Carbide.c++ Extension shows ABNORMAL text when system exception happens in the phone.</li>
- <li>Change: [AT-190] - Carbide.c++ Extension could filter memory leaks which does not contain any call stack.</li>
- <li>Change: [AT-191] - MemoryHook reports PROCESS_END with ABNORMAL tag.</li>
- <li>Change: [AT-192] - atool -c to undo mmp change.</li>
- <li>Change: [AT-202] - Modules with read only mmp files can be hooked.</li>
- <li>Change: [AT-209] - Print S60 logging filename if not given.</li>
- <li>Fix: [AT-156] - Multiple subtests within test run show only one subtest.</li>
- <li>Fix: [AT-181] - Logging levels 1 and 3 produce same results when using UREL target.</li>
- <li>Fix: [AT-204] - Memoryhook prints PROCESS_END when child threads are killed.</li>
- <li>Fix: [AT-206] - Atool reports runs from irrelevant PROCESS_ENDS.</li>
- <li>Fix: [AT-222] - No error message data file can not be opened.</li>
- <li>Fix: [AT-225] - NPE when using the Analyze View in Carbide 2.0.</li>
-</ul>
-
-<h5>Version 1.2.1 – 2nd October 2008</h5>
-<ul>
- <li>Change: AnalyzeTool building method changed: AnalyzeTool Carbide.c++ Extension uses now the Carbide builder.</li>
-</ul>
-
-<h5>Version 1.2.0 – 18th September 2008</h5>
-<ul>
- <li>Change: AnalyzeTool building method changed: AnalyzeTool Carbide.c++ Extension uses now the Carbide builder.</li>
-</ul>
-
-<h5>Version 1.1.2 – 21th August 2008</h5>
-<ul>
- <li>Fix: [AT-97] - Launching Carbide.c++ generates error message to the atool error log.</li>
- <li>Fix: [AT-99] - 'Module not build with AnalyzeTool' is still displayed after AnalyzeTool build.</li>
-</ul>
-
-<h5>Version 1.1.1 – 7th August 2008</h5>
-<ul>
- <li>Fix: [AT-72] - Command line tool can not handle project where two MMP-files are in same directory.</li>
-</ul>
-
-<h5>Version 1.1.0 – 10th July 2008</h5>
-<ul>
- <li>Feature: [AT-59] - Trace data can be saved to a file.</li>
- <li>Feature: [AT-68] - Cancel logging from ConfigUI feature.</li>
- <li>Fix: [AT-70] - Redundant handle leak information.</li>
-</ul>
-
-<h5>Version 1.0.0 – 7th July 2008</h5>
-<p>The first version.</p>
-
-<div id="footer">
-Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies).<br>
-All rights reserved. <br>
-This component and the accompanying materials are made available <br>
-under the terms of "Eclipse Public License v1.0" <br>
-which accompanies this distribution and is available <br>
-at the URL <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-<br><br>
-Initial Contributors:<br>
-Nokia Corporation - initial contribution
-<br><br>
-Contributors:<br>
-Description:
-
-</div>
-</body>
-</html>
\ No newline at end of file
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+ <title>Release Notes</title>
+ <link href="../book.css" type="text/css" rel="stylesheet">
+</head>
+
+<body>
+<h2>Release note</h2>
+
+<h4>AnalyzeTool Carbide.c++ Extension – Version 1.9.0</h4>
+
+<p>Released 21st April 2010</p>
+<ul>
+ <li><a href="#description">Product description</a></li>
+ <li><a href="#features">Main features</a></li>
+ <li><a href="#newfeatures">What's new</a></li>
+ <li><a href="#installation">Installation notes</a></li>
+ <li><a href="#requirements">System requirements</a></li>
+ <li><a href="#compissues">Compatibility issues</a></li>
+ <li><a href="#issues">Known issues</a></li>
+</ul>
+
+<h3><a name="description"></a>Product description</h3>
+
+<p>AnalyzeTool is a dynamic test tool that is used for testing Symbian software
+for memory and resource leaks and pinpointing the leaks from the source
+code.</p>
+
+<p>For a general questions about the tool <a
+href="https://s60wiki.nokia.com/S60Forum/forumdisplay.php?f=183">Dynamic
+Analysis Tools discussion forum</a> can be used.</p>
+
+<p>For more specific questions AnalyzeTool has e-mail list <a
+href="mailto:AnalyzeTool_Support@lists.research.nokia.com">AnalyzeTool_Support@lists.research.nokia.com</a>
+to contact project team and other users directly.</p>
+
+<h3><a name="features"></a>Main features</h3>
+<ul>
+ <li>UI for activating a memory leak analysis. </li>
+ <li>UI for seeing results of a memory leak analysis.</li>
+ <li>Pinpoints memory leaks from target hardware to source code lines.</li>
+ <li>Discovers resource leaks from process.</li>
+ <li>Command line interface and Carbide.c++ Extension.</li>
+</ul>
+
+<h3><a name="newfeatures"></a>What's new</h3>
+<ul>
+ <li>Feature: The version of the dbghelp.dll library provided by Windows is
+ checked when user starts tracing. If the version is not at least 6.3.0.0, a
+ confirmation dialog will appear with instructions on how to update a later
+ version. </li>
+ <li>Fix: Substantially reduced the graph memory usage in the callstack area.
+ This allowed removing the option for disabling the graph feature in the
+ Preferences page.</li>
+ <li>Fix: Cleaning dialog functionality has been fixed, the graph is no longer
+ cleaned if user selects <strong>No</strong>.</li>
+ <li>Fix: Warning "No project selected" is no longer mistakenly displayed if
+ the project is selected in Navigator.</li>
+</ul>
+
+<h3><a name="installation"></a>Installation notes</h3>
+<ul>
+ <li>N/A</li>
+</ul>
+
+<h3><a name="requirements"></a>System requirements</h3>
+
+<p>Basic Requirements:</p>
+<ul>
+ <li>Windows XP.</li>
+ <li>S60 5.x (R&D SW).</li>
+ <li>ARMV5 or GCCE compiler.</li>
+ <li>TraceViewer Carbide.c++ Extension (version 1.0.1+).</li>
+</ul>
+
+<p>Additional Requirements:</p>
+<ul>
+ <li>TraceViewer connection is required for collecting real time data from
+ target hardware to PC.</li>
+</ul>
+
+<h3><a name="compissues"></a>Compatibility issues</h3>
+<ul>
+ <li>Not compatible with versions 1.7.3 or older of AnalyzeTool (any
+ component).</li>
+ <li>AnalyzeTool iby files (ROM image creation) at S60 5.0 SDK and higher are
+ not compatible with older than week 16/2009 release of SDK.</li>
+ <li>Kernel code analysis not supported.</li>
+</ul>
+
+<h3><a name="issues"></a>Known issues</h3>
+<ul>
+ <li><b>Note:</b> If you are updating AnalyzeTool from the version older than
+ 1.5.0, AnalyzeTool uses a different folder structure compared to previous
+ versions. Therefore it is essential that you check that there are no header
+ files in the folder <i>\epoc32\include\applications\analyzetool</i> or
+ <i>\epoc32\include\analyzetool</i>.</li>
+ <li>Tested processes must be closed successfully, meaning that they cannot be
+ panicked or exited abnormally (will cause also a lot of false memory
+ leaks).</li>
+ <li>Handle leaks in subtest shows subtraction of open handles within the
+ subtest.</li>
+ <li>The subtesting feature cannot be used with internal data gathering
+ mode.</li>
+ <li>Memory leaks from ECOM plugins are reported, but not pinpointed to code
+ lines inside plugin.</li>
+ <li>Pinpointing memory leaks from urel binaries shows only function
+ names.</li>
+</ul>
+
+<h3>Version history</h3>
+
+<h5>Version 1.8.1 - 14th January 2010</h5>
+<ul>
+ <li>Feature: Add linefeeds to CLE generated XML report</li>
+ <li>Fix: Support for hooking test components (abld).</li>
+ <li>Fix: Error reading raptor makefile(line lenght over 16k)</li>
+ <li>Fix: Data file saved to wrong location on C drive.</li>
+ <li>Fix: Graph pinpointing prevents further project builds.</li>
+ <li>Fix: Graph memory usage improvements and preferences page feature for
+ disabling graph features.</li>
+ <li>Fix: Configuration UI crashes if can't connect to storage server</li>
+</ul>
+
+<h5>Version 1.8.0 – 12th December 2009</h5>
+<ul>
+ <li>Feature: Memory usage shown as graph.</li>
+</ul>
+
+<h5>Version 1.7.4 – 4th November 2009</h5>
+<ul>
+ <li>Feature: Third data gathering mode which is simple and fast.</li>
+ <li>Feature: Support for specifying call stack size(s).</li>
+ <li>Feature: Button to open preferences.</li>
+ <li>Feature: New error dialogs in Carbide extension.</li>
+ <li>Feature: Extension version number shown in AnalyzeTool view.</li>
+ <li>Fix: Inform user in build phase that kernel mode is not
+ supported/hooked.</li>
+ <li>Fix: Version conflict not shown to user.</li>
+ <li>Fix: Selecting leak from sub test does not give call stack info.</li>
+</ul>
+
+<h5>Version 1.7.3 – 1st October 2009</h5>
+<ul>
+ <li>Fix: Support for define multiple symbol files</li>
+ <li>Fix: Carbide extension builds project although the selected target is not
+ supported. </li>
+</ul>
+
+<h5>Version in 1.7.2 – 3th September 2009</h5>
+<ul>
+ <li>Fix: Memory leak information copied to clipboard.</li>
+</ul>
+
+<h5>Version in 1.7.1 – 19th August 2009</h5>
+<ul>
+ <li>Fix: Decrease extension memory usage when creating results.</li>
+ <li>Fix: Device data file input should not accept path.</li>
+</ul>
+
+<h5>Version in 1.7.0 – 25th June 2009</h5>
+<ul>
+ <li>Feature: "-debug" passed as build argument in Carbide.</li>
+ <li>Feature: Carbide.c++ AnalyzeTool building of a QT project.</li>
+ <li>Feature: Refresh button which makes results again.</li>
+ <li>Feature: AnalyzeTool Carbide.c++ Extension can be used to visualize
+ results for emulator/simulator memory leaks automatically.</li>
+ <li>Fix: Improve parsing speed of addresses.</li>
+ <li>Fix: Verbose output renders AnalyzeTool unusable slow.</li>
+ <li>Fix: Usability Improvement: Console view should be opened after building
+ done.</li>
+</ul>
+
+<h5>Version in 1.6.0 – 20th April 2009</h5>
+<ul>
+ <li>Feature: Rom symbol file can be defined in Carbide Extension
+ preferences.</li>
+ <li>Feature: AnalyzeTool memory leak results can be cleared from view.</li>
+ <li>Feature: Number of max callstack items increased to 40.</li>
+ <li>Feature: On the fly call stack filtering improved.</li>
+ <li>Feature: "PROCESS_END x ABNORMAL" are now printed also when internal data
+ gathering mode is used.</li>
+ <li>Feature: Supports for pinpointing codelines from GCCE binaries.</li>
+ <li>Feature: Pinpoint memory leaks to code lines also in urel builds.</li>
+ <li>Feature: Cheat sheet for AnalyzeTool created.</li>
+ <li>Feature: Carbide extension checks atool.exe version before using it.</li>
+ <li>Feature: atool.exe version number showed in AnalyzeTool preference
+ page.</li>
+ <li>Feature: AnalyzeTool "core" version number is displayed in Carbide
+ preferences.</li>
+ <li>Feature: Added support for pinpointing codelines from static libraries in
+ ARMV5 platform.</li>
+ <li>Fix: Pinpointing works also to dlls in emulator environment.</li>
+ <li>Fix: Clear AnalyzeTool changes runs reallyclean also.</li>
+ <li>Fix: Error message is displayed when user analysis invalid data.</li>
+ <li>Fix: Cancelling build enabled during pre-builder.</li>
+ <li>Fix: Analysis progress bar now progresses.</li>
+</ul>
+
+<h5>Version in 1.5.2 – 27th March 2009</h5>
+<ul>
+ <li>Feature: AnalyzeTool to work also in emulator.</li>
+ <li>Feature: AnalyzeTool Carbide extension can be used without Traceviewer
+ Extension.</li>
+ <li>Fix: Running atool -c in directory where only empty atool_temp directory
+ exists will not delete atool_temp directory.</li>
+ <li>Fix: In analyze report pinpointed memory </li>
+ <li>leak count is always zero when using sbs v.2, in logging levels 1 &
+ 2.</li>
+ <li>Fix: Use of raptor build variables leads to incorrect listing file name
+ with certain types.</li>
+ <li>Fix: AnalyzeTool can share existing TraceViewer connection.</li>
+ <li>Fix: Unnecessary "Can not analyze" dialog is no longer displayed after
+ the project is built with AnalyzeTool.</li>
+ <li>Fix: Needed files for AnalyzeTool hooking are also checked for
+ winscw.</li>
+ <li>Fix: Analyze Tool Pre- and Post-Build Errors are added to Problems
+ View.</li>
+ <li>Fix: AnalyzeTool debug logging improved.</li>
+ <li>Fix: Start tracing icon changed.</li>
+ <li>Fix: If SDK prefs not ok in Carbide, atool gives error: missing libraries
+ from SDK.</li>
+ <li>Fix: Crash when trying to navigate to source location.</li>
+ <li>Fix: Emulator pinpoints to wrong cpp file.</li>
+ <li>Fix: Progress monitor is shown while starting the TraceViewer
+ connection.</li>
+ <li>Fix: Command line tool, "atool.exe", is bundled into the Carbide
+ extension.</li>
+ <li>Fix: unnecessary copying of trace file removed from Carbide.</li>
+ <li>Fix: Disable unnecessary AnalyzeTool buttons when trace is started.</li>
+</ul>
+
+<h5>Version 1.5.1 – 19th March 2009</h5>
+<ul>
+ <li>Feature: Atool version is checked when hooked application is started.</li>
+ <li>Feature: Added support for pinpointing codelines from static libraries in
+ ARMV5 platform</li>
+ <li>Fix: Abnormal process ends not anymore showed for non-AnalyzeTool
+ processes.</li>
+</ul>
+
+<h5>Version 1.5.0 – 19th February 2009</h5>
+<ul>
+ <li>Feature: AnalyzeTool to work also in emulator.</li>
+ <li>Feature: AnalyzeTool Carbide extension can be used without Traceviewer
+ Extension.</li>
+ <li>Fix: Running atool -c in directory where only empty atool_temp directory
+ exists will not delete atool_temp directory.</li>
+ <li>Fix: In analyze report pinpointed memory leak count is always zero when
+ using sbs v.2, in logging levels 1 & 2.</li>
+ <li>Fix: Use of raptor build variables leads to incorrect listing file name
+ with certain types.</li>
+ <li>Fix: AnalyzeTool can share existing TraceViewer connection.</li>
+ <li>Fix: Unnecessary "Can not analyze" dialog is no longer displayed after
+ the project is built with AnalyzeTool.</li>
+ <li>Fix: Needed files for AnalyzeTool hooking are also checked for
+ winscw.</li>
+ <li>Fix: Analyze Tool Pre- and Post-Build Errors are added to Problems
+ View.</li>
+ <li>Fix: AnalyzeTool debug logging improved.</li>
+ <li>Fix: Start tracing icon changed.</li>
+ <li>Fix: If SDK prefs not ok in Carbide, atool gives error: missing libraries
+ from SDK.</li>
+ <li>Fix: Crash when trying to navigate to source location.</li>
+ <li>Fix: Emulator pinpoints to wrong cpp file.</li>
+ <li>Fix: Progress monitor is shown while starting the TraceViewer
+ connection.</li>
+ <li>Fix: Command line tool, "atool.exe", is bundled into the Carbide
+ extension.</li>
+ <li>Fix: unnecessary copying of trace file removed from Carbide.</li>
+ <li>Fix: Disable unnecessary AnalyzeTool buttons when trace is started.</li>
+</ul>
+
+<h5>Version 1.4.1 – 19th December 2008</h5>
+<ul>
+ <li>Change: Carbide Extension could show which modules are built with
+ atool.</li>
+ <li>Change: Atool supports Symbian build system version 2 (SBS v.2).</li>
+ <li>Change: Subtest memory analysis summary should be separated inside to
+ subtest information.</li>
+ <li>Change: Carbide extension to ask user "to continue or abort compilation"
+ if target is not supported.</li>
+ <li>Change: AnalyzeTool window buttons improvement.</li>
+ <li>Change: History of files opened added to open file button.</li>
+ <li>Change: Verbose configuration option for Carbide.c++.</li>
+ <li>Change: Results include processes udeb/urel info.</li>
+ <li>Fix: Carbide Extension cannot find the .cpp file where memoryleak is
+ pinpointed.</li>
+ <li>Fix: Usability Improvement: Preferences page and Logging mode.</li>
+ <li>Fix: Number of leaks in subtest is displayed in report.</li>
+ <li>Fix: Support analysing data files without /epoc32/build content or from
+ sub folder where build was made.</li>
+ <li>Fix: Atool will not show the correct name of subtest if it contains
+ spaces.</li>
+ <li>Fix: Compiling a project deletes logging data file from atool_temp.</li>
+ <li>Fix: Temporary file left to output directory in atool.exe analyze.</li>
+ <li>Fix: AnalyzeTool window not updated after current project change.</li>
+ <li>Fix: Number of memory leaks info should be updated after report detail
+ level change.</li>
+ <li>Fix: Project only specifies one MMP but all the MMP files are built.</li>
+ <li>Fix: Changing detail level of report clears call stack window.</li>
+ <li>Fix: AnalyzeTool post-builder is not working with variants on
+ Carbide.c++.</li>
+ <li>Fix: "Start Trace" clears results from all open projects.</li>
+ <li>Fix: Pinpointing from urel module does not work from Carbide.c++.</li>
+</ul>
+
+<h5>Version 1.4.0 – 12th December 2008</h5>
+<ul>
+ <li>Change: History of files opened added to open file button.</li>
+ <li>Change: Verbose configuration option for Carbide.c++.</li>
+ <li>Change: Results include processes udeb/urel info.</li>
+ <li>Fix: Project only specifies one MMP but all the mmp files are built.</li>
+ <li>Fix: Changing detail level of report clears callstack window.</li>
+ <li>Fix: AnalyzeTool post-builder is not working with variants on
+ Carbide.c++.</li>
+ <li>Fix: "Start Trace" clears results from all open projects.</li>
+ <li>Fix: Pinpointing from urel module does not work from Carbide.</li>
+</ul>
+
+<h5>Version 1.3.3 – 27th November 2008</h5>
+<ul>
+ <li>Change: History of files opened added to open file button.</li>
+ <li>Change: Verbose configuration option for Carbide.c++.</li>
+ <li>Change: Results include processes udeb/urel info.</li>
+ <li>Fix: Project only specifies one MMP but all the mmp files are built.</li>
+ <li>Fix: Changing detail level of report clears callstack window.</li>
+ <li>Fix: AnalyzeTool post-builder is not working with variants on
+ Carbide.c++.</li>
+ <li>Fix: "Start Trace" clears results from all open projects.</li>
+ <li>Fix: Pinpointing from urel module does not work from Carbide.</li>
+</ul>
+
+<h5>Version 1.3.2 – 13th November 2008</h5>
+<ul>
+ <li>Change: History of files opened added to open file button.</li>
+ <li>Change: Verbose configuration option for Carbide.c++.</li>
+ <li>Change: Results include processes udeb/urel info.</li>
+ <li>Fix: Project only specifies one MMP but all the mmp files are built.</li>
+ <li>Fix: Changing detail level of report clears callstack window.</li>
+ <li>Fix: AnalyzeTool post-builder is not working with variants on
+ Carbide.c++.</li>
+ <li>Fix: "Start Trace" clears results from all open projects.</li>
+ <li>Fix: Pinpointing from urel module does not work from Carbide.</li>
+</ul>
+
+<h5>Version 1.3.1 – 30th October 2008</h5>
+<ul>
+ <li>Change: - A single process start - end, should not be a test run.</li>
+ <li>Change: Carbide.c++ Extension shows ABNORMAL text when system exception
+ happens in the phone.</li>
+ <li>Change: Carbide.c++ Extension could filter memory leaks which does not
+ contain any call stack.</li>
+ <li>Change: MemoryHook reports PROCESS_END with ABNORMAL tag.</li>
+ <li>Change: atool -c to undo mmp change.</li>
+ <li>Change: Modules with read only mmp files can be hooked.</li>
+ <li>Change: Print S60 logging filename if not given.</li>
+ <li>Fix: Multiple subtests within test run show only one subtest.</li>
+ <li>Fix: Logging levels 1 and 3 produce same results when using UREL
+ target.</li>
+ <li>Fix: Memoryhook prints PROCESS_END when child threads are killed.</li>
+ <li>Fix: Atool reports runs from irrelevant PROCESS_ENDS.</li>
+ <li>Fix: No error message data file can not be opened.</li>
+ <li>Fix: NPE when using the Analyze View in Carbide 2.0.</li>
+ <li>Fix: "Error 1 make[1]: *** Waiting for unfinished jobs...." error is
+ displayed during the AnalyzeTool build.</li>
+ <li>Fix: run abld reallyclean instead of abld clean.</li>
+ <li>Fix: AnalyzeTool builder "is shown active" after importing a deleted
+ project again to Carbide.c++.</li>
+ <li>Fix: Progress information: Executing AnalyzeTool, Cannot send to
+ background.</li>
+ <li>Fix: Devlon52 or other ARMV5 based variants cannot be built from
+ Carbide.</li>
+</ul>
+
+<h5>Version 1.3.0 – 23rd October 2008</h5>
+<ul>
+ <li>Change: A single process start - end, should not be a test run.</li>
+ <li>Change: Carbide.c++ Extension shows ABNORMAL text when system exception
+ happens in the phone.</li>
+ <li>Change: Carbide.c++ Extension could filter memory leaks which does not
+ contain any call stack.</li>
+ <li>Change: MemoryHook reports PROCESS_END with ABNORMAL tag.</li>
+ <li>Change: atool -c to undo mmp change.</li>
+ <li>Change: Modules with read only mmp files can be hooked.</li>
+ <li>Change: Print S60 logging filename if not given.</li>
+ <li>Fix: Multiple subtests within test run show only one subtest.</li>
+ <li>Fix: Logging levels 1 and 3 produce same results when using UREL
+ target.</li>
+ <li>Fix: Memoryhook prints PROCESS_END when child threads are killed.</li>
+ <li>Fix: Atool reports runs from irrelevant PROCESS_ENDS.</li>
+ <li>Fix: No error message data file can not be opened.</li>
+ <li>Fix: NPE when using the Analyze View in Carbide 2.0.</li>
+</ul>
+
+<h5>Version 1.2.1 – 2nd October 2008</h5>
+<ul>
+ <li>Change: AnalyzeTool building method changed: AnalyzeTool Carbide.c++
+ Extension uses now the Carbide builder.</li>
+</ul>
+
+<h5>Version 1.2.0 – 18th September 2008</h5>
+<ul>
+ <li>Change: AnalyzeTool building method changed: AnalyzeTool Carbide.c++
+ Extension uses now the Carbide builder.</li>
+</ul>
+
+<h5>Version 1.1.2 – 21th August 2008</h5>
+<ul>
+ <li>Fix: Launching Carbide.c++ generates error message to the atool error
+ log.</li>
+ <li>Fix: 'Module not build with AnalyzeTool' is still displayed after
+ AnalyzeTool build.</li>
+</ul>
+
+<h5>Version 1.1.1 – 7th August 2008</h5>
+<ul>
+ <li>Fix: Command line tool can not handle project where two MMP-files are in
+ same directory.</li>
+</ul>
+
+<h5>Version 1.1.0 – 10th July 2008</h5>
+<ul>
+ <li>Feature: Trace data can be saved to a file.</li>
+ <li>Feature: Cancel logging from ConfigUI feature.</li>
+ <li>Fix: Redundant handle leak information.</li>
+</ul>
+
+<h5>Version 1.0.0 – 7th July 2008</h5>
+
+<p>The first version.</p>
+
+<div id="footer">
+Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies).<br>
+All rights reserved. <br>
+This component and the accompanying materials are made available <br>
+under the terms of "Eclipse Public License v1.0" <br>
+which accompanies this distribution and is available <br>
+at the URL <a
+href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+<br>
+<br>
+Initial Contributors:<br>
+Nokia Corporation - initial contribution <br>
+<br>
+Contributors:<br>
+Description: </div>
+</body>
+</html>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/build.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/build.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
<title>Build project</title>
</head>
<body>
@@ -33,7 +33,7 @@
<p>Information about the build process is displayed in the <b>Console view</b>. The last row of the <b>Console view</b> indicates if the build was successful or not.</p> <p>For more information on error messages, see <a href="../reference/troubleshooting.htm">Troubleshooting</a>.</p></li>
</ol>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/capture.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/capture.htm Wed Apr 21 19:42:48 2010 +0300
@@ -1,40 +1,91 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
-<html>
-<head>
-<meta content="text/html; charset=us-ascii" http-equiv="content-type">
-<meta content="text/css" http-equiv="content-style-type">
-<link href="../nokia.css" rel="StyleSheet" type="text/css">
-<title>Capturing data</title>
-</head>
-<body>
-
-<h2>Capturing data</h2>
-<p>There are two alternative ways to capture data, depending on the data gathering mode.</p>
-
-<h3 id="capture_external">Capturing data in monitored external or external data gathering mode</h3>
-<p><b>Note!</b> AnalyzeTool decides which connection method to use by checking the project active build configuration settings. If the active build configuration is set to <b>WINSCW</b>, AnalyzeTool captures data from the emulator output file <i>(%tmp%\epocwind.out)</i>; in <b>ARMV5</b> and <b>GCEE</b> build configurations AnalyzeTool captures data using the tracing utility connection.</p>
-<p><b>Note!</b> This option requires that a tracing utility is available and a connection is established to the target hardware.</p>
-<p>USB tracing can not be run from the device bootup because it requires USB tracing activation from the device side.</p>
-<p>To capture data:</p>
-<ol>
-<li>Open the <b>AnalyzeTool</b> view (if it is not already open) by selecting <b>Window > Show View > Other... > Carbide Extensions > AnalyzeTool.</b></li>
-<li>Start capturing data by clicking <b>Start tracing</b> in the AnalyzeTool toolbar.</li>
-<li>Start the application built with AnalyzeTool, and run the desired test cases. Note that Carbide.c++ needs to be connected to the target hardware.</li>
-<li>At the end of a test run, close the tested application (process). After you have closed the application, stop the test run by clicking <b>Stop tracing</b>. <p>Now AnalyzeTool has captured data, saved it into the project's <i>bld.inf\atool_temp</i> directory, and the memory analysis results are displayed in the <b>AnalyzeTool</b> view.</p></li>
-</ol>
-<h3 id="capture_s60_file">Capturing data in monitored internal data gathering mode</h3>
-<p>When you select the <b>monitored internal</b> data gathering mode in AnalyzeTool build, AnalyzeTool collects the test data into a file.</p><p><b>Note!</b> If you are analyzing an application in the target hardware, the file must be transferred to a PC after the test run is completed.</p>
-<p>To capture data:</p>
-<ol>
-<li>Install the AnalyzeTool software to the target hardware if not already installed.</li>
-<li>Install the test software built with AnalyzeTool to the target hardware.</li>
-<li>Start the application built with AnalyzeTool in the target hardware, and run the desired test cases.</li>
-<li>At the end of a test run, close the tested application (process). This will write the test data to a file. In the target hardware the file is saved in <i>e:\analyzetool\</i> or <i>c:\data\analyzetool\</i> depending if the memory card is used or not. In the emulator environment the file is saved in <i>\epoc32\winscw\c\logs\analyzetool\</i>.
-<p><b>Note!</b> The data file name was specified before the build.</p></li>
-<li>While the tested software project is active in the <b>Project Explorer</b>, open the data file by clicking <b>Open and analyze data file</b> in the <b>AnalyzeTool</b> toolbar. This will run the analysis and display the results in the <b>AnalyzeTool</b> view.</li>
-</ol>
-
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
-</body>
-</html>
\ No newline at end of file
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 1.0 Transitional//EN">
+<html>
+<head>
+ <meta content="text/html; charset=us-ascii" http-equiv="content-type">
+ <meta content="text/css" http-equiv="content-style-type">
+ <link href="../../book.css" rel="StyleSheet" type="text/css">
+ <title>Capturing data</title>
+</head>
+
+<body>
+<h2>Capturing data</h2>
+
+<p>There are two alternative ways to capture data, depending on the data
+gathering mode.</p>
+
+<h3 id="capture_external">Capturing data in monitored external or external data
+gathering mode</h3>
+
+<p><b>Note!</b> AnalyzeTool decides which connection method to use by checking
+the project active build configuration settings. If the active build
+configuration is set to <b>WINSCW</b>, AnalyzeTool captures data from the
+emulator output file <i>(%tmp%\epocwind.out)</i>; in <b>ARMV5</b> and
+<b>GCEE</b> build configurations AnalyzeTool captures data using the tracing
+utility connection.</p>
+
+<p><b>Note!</b> This option requires that a tracing utility is available and a
+connection is established to the target hardware.</p>
+
+<p>USB tracing can not be run from the device bootup because it requires USB
+tracing activation from the device side.</p>
+
+<p>To capture data:</p>
+<ol>
+ <li>Open the <b>AnalyzeTool</b> view (if it is not already open) by selecting
+ <b>Window > Show View > Other... > Carbide Extensions >
+ AnalyzeTool.</b></li>
+ <li>Start capturing data by clicking <b>Start tracing</b> in the AnalyzeTool
+ toolbar.
+ <p><strong>Note</strong> that at this point the system checks the version
+ of the dbghelp.dll library provided by Windows. If the version is not at
+ least 6.3.0.0, a confirmation dialog will appear with instructions on how
+ to update a later version. </p>
+ </li>
+ <li>Start the application built with AnalyzeTool, and run the desired test
+ cases. Note that Carbide.c++ needs to be connected to the target
+ hardware.</li>
+ <li>At the end of a test run, close the tested application (process). After
+ you have closed the application, stop the test run by clicking <b>Stop
+ tracing</b>.
+ <p>Now AnalyzeTool has captured data, saved it into the project's
+ <i>bld.inf\atool_temp</i> directory, and the memory analysis results are
+ displayed in the <b>AnalyzeTool</b> view.</p>
+ </li>
+</ol>
+
+<h3 id="capture_s60_file">Capturing data in monitored internal data gathering
+mode</h3>
+
+<p>When you select the <b>monitored internal</b> data gathering mode in
+AnalyzeTool build, AnalyzeTool collects the test data into a file.</p>
+
+<p><b>Note!</b> If you are analyzing an application in the target hardware, the
+file must be transferred to a PC after the test run is completed.</p>
+
+<p>To capture data:</p>
+<ol>
+ <li>Install the AnalyzeTool software to the target hardware if not already
+ installed.</li>
+ <li>Install the test software built with AnalyzeTool to the target
+ hardware.</li>
+ <li>Start the application built with AnalyzeTool in the target hardware, and
+ run the desired test cases.</li>
+ <li>At the end of a test run, close the tested application (process). This
+ will write the test data to a file. In the target hardware the file is
+ saved in <i>e:\analyzetool\</i> or <i>c:\data\analyzetool\</i> depending if
+ the memory card is used or not. In the emulator environment the file is
+ saved in <i>\epoc32\winscw\c\logs\analyzetool\</i>.
+ <p><b>Note!</b> The data file name was specified before the build.</p>
+ </li>
+ <li>While the tested software project is active in the <b>Project
+ Explorer</b>, open the data file by clicking <b>Open and analyze data
+ file</b> in the <b>AnalyzeTool</b> toolbar. This will run the analysis and
+ display the results in the <b>AnalyzeTool</b> view.</li>
+</ol>
+
+<div id="footer">
+Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights
+reserved. License: <a
+href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
+</body>
+</html>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/emulatorsupport.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/emulatorsupport.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Emulator support</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -23,6 +23,6 @@
In the internal data gathering mode, analysis data is saved to the <i>\epoc32\winscw\c\logs\analyzetool\</i> folder.
</p>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</html>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/subtest.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/subtest.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=us-ascii">
<meta http-equiv="content-style-type" content="text/css">
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
<title>Subtests</title>
</head>
<body>
@@ -18,7 +18,7 @@
</ol>
<p>When the test run is finished, AnalyzeTool shows the data about subtests run under the test run.</p>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/tasks.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/tasks.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-style-type" content="text/css">
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
<title>Tasks</title>
</head>
<body>
@@ -20,7 +20,7 @@
<li><a href="viewactivitygraph.htm">Viewing memory activity graph</a></li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/viewactivitygraph.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/viewactivitygraph.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Viewing AnalyzeTool memory activity graphs</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -46,7 +46,7 @@
<p>Double-clicking an item in the callstack opens the appropriate source code file to that code line, provided the source code file can be found in the selected project in Carbide.c++.</p>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/viewmemoryleaks.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/viewmemoryleaks.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Viewing AnalyzeTool memory leaks</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -31,7 +31,7 @@
<li>(<img src="../images/module_outside.png">) Describes that the module does not belong to an active/selected project. It is some library that has been loaded but is not available in the Carbide.c++ project at the moment. You need to take additional steps (identifying component, importing to Carbide.c++, building with AnalyzeTool etc.) for being able to analyze.</li>
</ul>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/viewstatistic.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tasks/viewstatistic.htm Wed Apr 21 19:42:48 2010 +0300
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Viewing AnalyzeTool memory statistic</title>
-<link href="../nokia.css" type="text/css" rel="StyleSheet">
+<link href="../../book.css" type="text/css" rel="StyleSheet">
</head>
<body>
@@ -31,7 +31,7 @@
<p>Double-clicking the statistic item opens the appropriate source code file to that code line.</p>
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+<div id="footer">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tool.htm Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/tool.htm Wed Apr 21 19:42:48 2010 +0300
@@ -1,51 +1,32 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 1.0 Transitional//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
<html>
<head>
-<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-<link href="nokia.css" type="text/css" rel="StyleSheet">
-<title>Analyze Tool</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Carbide.c++ User Guide</title>
+ <link href="../book.css" rel="stylesheet" type="text/css">
+ <style>
+ table, td, th { border: 0px none #FFF; }
+ </style>
</head>
-<body>
-
-<h1>AnalyzeTool Online Help</h1>
-<p><a href="release_notes.htm">Release note</a></p>
-
-<p><a href="gettingstarted/gs_index.htm">Getting started</a></p>
-<ul>
- <li><a href="gettingstarted/overview.htm">Overview</a></li>
- <li><a href="gettingstarted/prerequisites.htm">Prerequisites</a></li>
- <li><a href="gettingstarted/basic.htm">Basic walk-through</a></li>
-</ul>
-<p><a href="concepts/concepts.htm">Concepts</a></p>
-<ul>
- <li><a href="concepts/preferences.htm">AnalyzeTool preferences</a></li>
- <li><a href="concepts/advanced.htm">AnalyzeTool properties</a></li>
- <li><a href="concepts/datafile.htm">AnalyzeTool files</a></li>
- <li><a href="concepts/memory_leaks.htm">Memory leaks</a></li>
- <li><a href="concepts/tracing.htm">Tracing</a></li>
-</ul>
-
-<p><a href="tasks/tasks.htm">Tasks</a></p>
-<ul>
- <li><a href="tasks/build.htm">Building the project with AnalyzeTool</a></li>
- <li><a href="tasks/capture.htm">Capturing trace data</a></li>
- <li><a href="tasks/subtest.htm">Running subtests</a></li>
- <li><a href="tasks/viewmemoryleaks.htm">Viewing memory leaks</a></li>
- <!--<li><a href="tasks/viewstatistic.htm">Viewing memory statistics</a></li>
- <li><a href="tasks/emulatorsupport.htm">Emulator support</a></li>-->
- <li><a href="tasks/viewactivitygraph.htm">Viewing memory activity graph</a></li>
-</ul>
-
-<p><a href="reference/references.htm">References</a></p>
-<ul>
- <li><a href="reference/toolbar.htm">Toolbar</a></li>
- <li><a href="reference/troubleshooting.htm">Troubleshooting</a></li>
-</ul>
-
-<p><a href="legal.htm">Legal</a></p>
-
-<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.</div>
+<body background="images/background_carbide.jpg" >
+<p> </p>
+<table width="530" border="0" align="center" cellpadding="0" cellspacing="5" bgcolor="#FFFFFF" >
+ <tr>
+ <td width="215"><img src="images/about_cpp.png" width="225" height="200"></td>
+ <td width="294" valign="bottom"><p align="right"><b><img src="images/brandmark_cpp.gif" width="106" height="52"></b></p>
+ <p> </p>
+ <p> </p>
+ <p> </p>
+ <p class="titleSmall">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>
+ License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><h1 align="center">AnalyzeTool User Guide </h1>
+ <p align="center" class="titleSmall">Version 1.9.0; April, 2010</p></td>
+ </tr>
+</table>
</body>
</html>
\ No newline at end of file
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/toolTOC.xml Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool.help/html/toolTOC.xml Wed Apr 21 19:42:48 2010 +0300
@@ -31,6 +31,9 @@
<topic label="Capturing trace data" href="html/tasks/capture.htm" />
<topic label="Running subtests" href="html/tasks/subtest.htm" />
<topic label="Viewing memory leaks" href="html/tasks/viewmemoryleaks.htm" />
+ <topic label="Viewing memory activity graph" href="html/tasks/viewactivitygraph.htm" />
+ <!--<topic label="Viewing memory statistics" href="html/tasks/viewstatistic.htm" />
+ <topic label="Emulator support" href="html/tasks/emulatorsupport.htm" />-->
</topic>
<topic label="References" href="html/reference/references.htm">
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/META-INF/MANIFEST.MF Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/META-INF/MANIFEST.MF Wed Apr 21 19:42:48 2010 +0300
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: Carbide.c++ Extensions - AnalyzeTool
Bundle-SymbolicName: com.nokia.s60tools.analyzetool;singleton:=true
-Bundle-Version: 1.8.0
+Bundle-Version: 1.9.0
Bundle-Activator: com.nokia.s60tools.analyzetool.Activator
Bundle-Vendor: Nokia
Require-Bundle: org.eclipse.ui,
@@ -25,7 +25,8 @@
com.trolltech.qtcppproject,
com.nokia.s60tools.util,
org.eclipse.gef,
- org.eclipse.help
+ org.eclipse.help,
+ org.eclipse.ui.forms
Bundle-ActivationPolicy: lazy
Eclipse-BuddyPolicy: registered
Bundle-RequiredExecutionEnvironment: J2SE-1.5
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.html Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.html Wed Apr 21 19:42:48 2010 +0300
@@ -66,142 +66,6 @@
-<h4>gSOAP Public License</h4>
-<p> Version 1.3a</p>
-<p> The gSOAP public license is derived from the Mozilla Public License (MPL1.1). The sections that were deleted from the original MPL1.1 text are 1.0.1, 2.1.(c),(d), 2.2.(c),(d), 8.2.(b), 10, and 11. Section 3.8 was added. The modified sections are 2.1.(b), 2.2.(b), 3.2 (simplified), 3.5 (deleted the last sentence), and 3.6 (simplified).</p>
-
-<p><b>1 DEFINITIONS.</b></p>
-<p>sep 0mm </p>
-<p><b>1.0.</b></p>
-<p><b>1.1.1. "Contributor"</b></p>
-<p>means each entity that creates or contributes to the creation of Modifications.</p>
-<p><b>1.2. "Contributor Version"</b></p>
-<p>means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.</p>
-<p><b>1.3. "Covered Code"</b></p>
-<p>means the Original Code, or Modifications or the combination of the Original Code, and Modifications, in each case including portions thereof. </p>
-<p><b>1.4. "Electronic Distribution Mechanism"</b></p>
-<p>means a mechanism generally accepted in the software development community for the electronic transfer of data.</p>
-<p><b>1.5. "Executable"</b></p>
-<p>means Covered Code in any form other than Source Code.</p>
-<p><b>1.6. "Initial Developer"</b></p>
-<p>means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.</p>
-<p><b>1.7. "Larger Work"</b></p>
-<p>means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.</p>
-<p><b>1.8. "License"</b></p>
-<p>means this document.</p>
-<p><b>1.8.1. "Licensable"</b></p>
-<p> means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.</p>
-<p><b>1.9. "Modifications"</b></p>
-<p>means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:</p>
-<p>sep 0mm</p>
-<p>A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.</p>
-<p>B. Any new file that contains any part of the Original Code, or previous Modifications.</p>
-
-<p><b>1.10. "Original Code"</b></p>
-<p>means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. </p>
-<p><b>1.10.1. "Patent Claims"</b></p>
-<p>means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. </p>
-<p><b>1.11. "Source Code"</b></p>
-<p>means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.</p>
-<p><b>1.12. "You" (or "Your")</b></p>
-<p>means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.<br></p>
-
-<p><b>2 SOURCE CODE LICENSE.</b></p>
-<p>sep 0mm</p>
-<p><b>2.1. The Initial Developer Grant.</b></p>
-<p>The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: </p>
-<p>sep 0mm</p>
-<p>(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and</p>
-<p>(b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell ("offer to sell and import") the Original Code, Modifications, or portions thereof, but solely to the extent that any such patent is reasonably necessary to enable You to utilize, alone or in combination with other software, the Original Code, Modifications, or any combination or portions thereof.</p>
-<p>(c) </p>
-<p>(d) </p>
-
-<p><b>2.2. Contributor Grant.</b></p>
-<p>Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license </p>
-<p>sep 0mm</p>
-<p>(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and</p>
-<p>(b) under patents now or hereafter owned or controlled by Contributor, to make, have made, use and sell ("offer to sell and import") the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to utilize, alone or in combination with other software, the Contributor Version (or portions thereof).</p>
-<p>(c)</p>
-<p>(d)<br></p>
-
-<p><b>3 DISTRIBUTION OBLIGATIONS.</b></p>
-<p>sep 0mm </p>
-<p><b>3.1. Application of License.</b></p>
-<p>The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.</p>
-<p><b>3.2. Availability of Source Code.</b></p>
-<p>Any Modification created by You will be provided to the Initial Developer in Source Code form and are subject to the terms of the License.</p>
-<p><b>3.3. Description of Modifications.</b></p>
-<p>You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.</p>
-<p><b>3.4. Intellectual Property Matters.</b></p>
-<p>sep 0mm</p>
-<p>(a) Third Party Claims.</p>
-<p>If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.</p>
-<p>(b) Contributor APIs.</p>
-<p>If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.</p>
-<p>(c) Representations.</p>
-<p>Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.</p>
-<p><b>3.5. Required Notices.</b></p>
-<p>You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor.</p>
-<p><b>3.6. Distribution of Executable Versions.</b></p>
-<p>You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. If you distribute executable versions containing Covered Code as part of a product, you must reproduce the notice in Exhibit B in the documentation and/or other materials provided with the product.</p>
-<p><b>3.7. Larger Works.</b></p>
-<p>You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.</p>
-<p><b>3.8. Restrictions.</b></p>
-<p>You may not remove any product identification, copyright, proprietary notices or labels from gSOAP.<br></p>
-
-<p><b>4 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION.</b></p>
-<p>If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.<br></p>
-
-<p><b>5 APPLICATION OF THIS LICENSE.</b></p>
-<p>This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.<br></p>
-
-<p><b>6 VERSIONS OF THE LICENSE.</b></p>
-<p>sep 0mm</p>
-<p><b>6.1. New Versions.</b></p>
-<p>Grantor may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.</p>
-<p><b>6.2. Effect of New Versions.</b></p>
-<p>Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License.</p>
-<p><b>6.3. Derivative Works.</b></p>
-<p>If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrase "gSOAP" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the gSOAP Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)<br></p>
-
-<p><b>7 DISCLAIMER OF WARRANTY.</b></p>
-<p>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, AND ANY WARRANTY THAT MAY ARISE BY REASON OF TRADE USAGE, CUSTOM, OR COURSE OF DEALING. WITHOUT LIMITING THE FOREGOING, YOU ACKNOWLEDGE THAT THE SOFTWARE IS PROVIDED "AS IS" AND THAT THE AUTHORS DO NOT WARRANT THE SOFTWARE WILL RUN UNINTERRUPTED OR ERROR FREE. LIMITED LIABILITY THE ENTIRE RISK AS TO RESULTS AND PERFORMANCE OF THE SOFTWARE IS ASSUMED BY YOU. UNDER NO CIRCUMSTANCES WILL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND OR NATURE WHATSOEVER, WHETHER BASED ON CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, ARISING OUT OF OR IN ANY WAY RELATED TO THE SOFTWARE, EVEN IF THE AUTHORS HAVE BEEN ADVISED ON THE POSSIBILITY OF SUCH DAMAGE OR IF SUCH DAMAGE COULD HAVE BEEN REASONABLY FORESEEN, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY EXCLUSIVE REMEDY PROVIDED. SUCH LIMITATION ON DAMAGES INCLUDES, BUT IS NOT LIMITED TO, DAMAGES FOR LOSS OF GOODWILL, LOST PROFITS, LOSS OF DATA OR SOFTWARE, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION OR IMPAIRMENT OF OTHER GOODS. IN NO EVENT WILL THE AUTHORS BE LIABLE FOR THE COSTS OF PROCUREMENT OF SUBSTITUTE SOFTWARE OR SERVICES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED FOR USE IN ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS SUCH AS OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR CONTROL, OR LIFE-CRITICAL APPLICATIONS. THE AUTHORS EXPRESSLY DISCLAIM ANY LIABILITY RESULTING FROM USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS AND ACCEPTS NO LIABILITY IN RESPECT OF ANY ACTIONS OR CLAIMS BASED ON THE USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS BY YOU. FOR PURPOSES OF THIS PARAGRAPH, THE TERM "LIFE-CRITICAL APPLICATION" MEANS AN APPLICATION IN WHICH THE FUNCTIONING OR MALFUNCTIONING OF THE SOFTWARE MAY RESULT DIRECTLY OR INDIRECTLY IN PHYSICAL INJURY OR LOSS OF HUMAN LIFE. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.<br></p>
-
-<p><b>8 TERMINATION.</b></p>
-<p>sep 0mm</p>
-<p><b>8.1.</b></p>
-<p>This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.</p>
-<p><b>8.2.</b></p>
-<p><b>8.3.</b></p>
-<p>If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount
-or value of any payment or license. </p>
-<p><b>8.4.</b></p>
-<p>In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.<br></p>
-
-<p><b>9 LIMITATION OF LIABILITY.</b></p>
-<p>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.<br></p>
-
-<p><b>10 U.S. GOVERNMENT END USERS.</b><br></p>
-
-<p><b>11 MISCELLANEOUS.</b><br></p>
-
-<p><b>12 RESPONSIBILITY FOR CLAIMS.</b></p>
-<p>As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.<br></p>
-
-<p>EXHIBIT A.</p>
-<p>"The contents of this file are subject to the gSOAP Public License Version 1.3 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at</p>
-<p>http://www.cs.fsu.edu/~engelen/soaplicense.html</p>
-<p>Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code of the gSOAP Software is: stdsoap.h, stdsoap2.h, stdsoap.c, stdsoap2.c, stdsoap.cpp, stdsoap2.cpp, soapcpp2.h, soapcpp2.c, soapcpp2_lex.l, soapcpp2_yacc.y, error2.h, error2.c, symbol2.c, init2.c, soapdoc2.html, and soapdoc2.pdf, httpget.h, httpget.c, stl.h, stldeque.h, stllist.h, stlvector.h, stlset.h. The Initial Developer of the Original Code is Robert A. van Engelen. Portions created by Robert A. van Engelen are Copyright © 2001-2004 Robert A. van Engelen, Genivia inc. All Rights Reserved. Contributor(s):</p>
-<p>"________________________." </p>
-<p>[Note: The text of this Exhibit A may differ slightly form the text of the notices in the Source Code files of the Original code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.]</p>
-<p>EXHIBIT B.</p>
-<p>"Part of the software embedded in this product is gSOAP software.</p>
-<p>Portions created by gSOAP are Copyright © 2001-2004 Robert A. van Engelen, Genivia inc. All Rights Reserved.</p>
-<p>THE SOFTWARE IN THIS PRODUCT WAS IN PART PROVIDED BY GENIVIA INC AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."</p>
-<p> </p>
-
-
-
<h4>GNU GENERAL PUBLIC LICENSE</h4>
<p>Version 3, 29 June 2007</p>
<p>Copyright © 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a></p>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.ini Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.ini Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
# All rights reserved.
# This component and the accompanying materials are made available
# under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.mappings Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.mappings Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
# All rights reserved.
# This component and the accompanying materials are made available
# under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.properties Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/about.properties Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
# All rights reserved.
# This component and the accompanying materials are made available
# under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/buildAT.xml Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/buildAT.xml Wed Apr 21 19:42:48 2010 +0300
@@ -17,7 +17,7 @@
<property name="compilerArg" value=""/>
<property name="javacSource" value="1.5"/>
<property name="javacTarget" value="1.5"/>
- <property name="carbide.plugins" location="e:/carbide_libs"/>
+ <property name="carbide.plugins" location="C:\Carbide\Carbide.c_SYMSEE_layout_2.4.0.v200912150001_74"/>
<condition property="dir_bootclasspath" value="${java.home}/../Classes">
<os family="mac"/>
</condition>
@@ -187,4 +187,25 @@
<delete dir="${temp.folder}"/>
</target>
+ <target name="javadoc" depends="build.jars">
+ <javadoc access="private" author="true"
+ destdir="doc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false"
+ packagenames="com.nokia.s60tools.analyzetool.global,
+ com.nokia.s60tools.analyzetool.ui,
+ com.nokia.s60tools.analyzetool.ui.actions,
+ com.nokia.s60tools.analyzetool.ui.statistics,
+ com.nokia.s60tools.analyzetool,
+ com.nokia.s60tools.analyzetool.builder,
+ com.nokia.s60tools.analyzetool.engine,
+ com.nokia.s60tools.analyzetool.engine.statistics,
+ com.nokia.s60tools.analyzetool.preferences,
+ com.nokia.s60tools.analyzetool.properties"
+ source="1.5" sourcepath="src" splitindex="true"
+ use="true"
+ version="true"
+ useexternalfile="true"
+ classpathref="build_classpath"
+ />
+ </target>
+
</project>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/ccbuild.xml Wed Apr 21 15:14:16 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,397 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="com.nokia.s60tools.analyzetool" default="cc" basedir=".">
-
- <target name="cc" depends="clean-test,jar, instr, feature, analyze, test, zip" description="Build, instrument, run unit tests and analyze code"/>
-
- <property name="basews" value="${ws}"/>
- <property name="baseos" value="${os}"/>
- <property name="basearch" value="${arch}"/>
- <property name="basenl" value="${nl}"/>
-
- <!-- Compiler settings -->
- <property name="javacFailOnError" value="true"/>
- <property name="javacDebugInfo" value="on"/>
- <property name="javacVerbose" value="false"/>
- <property name="logExtension" value=".log"/>
- <property name="compilerArg" value=""/>
- <property name="javacSource" value="5"/>
- <property name="javacTarget" value="5"/>
-
- <property name="bootclasspath" refid="path_bootclasspath"/>
- <property name="bundleJavacSource" value="${javacSource}"/>
- <property name="bundleJavacTarget" value="${javacTarget}"/>
- <property name="bundleBootClasspath" value="${bootclasspath}"/>
-
- <property name="help.project.name" value="${ant.project.name}.help"/>
- <property name="trace.project.name" value="${ant.project.name}.trace"/>
- <property name="feature.project.folder" location="../com.nokia.carbide.extensions.analyzetool"/>
- <property name="feature.project.name" value="com.nokia.carbide.extensions.analyzetool"/>
- <property name="feature.name" value="AnalyzeTool"/>
-
- <property name="jar.filename" value="${ant.project.name}.jar"/>
- <property name="help.jar.filename" value="${help.project.name}.jar"/>
- <property name="trace.jar.filename" value="${trace.project.name}.jar"/>
-
- <!-- Folder definitions -->
- <property name="carbide.dev.folder" location="c:/Carbide_development/plugins"/>
- <property name="carbide.int.folder" location="c:/Carbide_internal/plugins"/>
- <property name="carbide.adt.folder" location="c:/Carbide_ADT/plugins"/>
- <property name="test.folder" location="../com.nokia.s60tools.analyzetool.tests"/>
-
- <property name="binaries.folder" location="../${feature.name}.binaries"/>
- <property name="reports.folder" location="../reports"/>
- <property name="reports.emma" location="${reports.folder}/emma"/>
- <property name="instr.folder" location="../instr"/>
-
-
- <!-- EMMA configuration -->
- <path id="emma.lib" >
- <pathelement location="${ant.home}/lib/emma.jar" />
- <pathelement location="${ant.home}/lib/emma_ant.jar" />
- </path>
-
- <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
-
- <!-- PMD configuration -->
- <path id="pmd.lib" >
- <pathelement location="${ant.home}/lib/pmd-4.2.5.jar" />
- <pathelement location="${ant.home}/lib/asm-3.1.jar" />
- <pathelement location="${ant.home}/lib/jaxen-1.1.1.jar" />
- </path>
-
- <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.lib" />
-
- <path id="path_bootclasspath">
- <fileset dir="${java.home}/lib">
- <include name="*.jar"/>
- </fileset>
- </path>
-
- <path id="build_classpath">
- <path refid="carbide_classpath"/>
- </path>
-
- <path id="carbide_classpath">
- <fileset dir="${carbide.int.folder}" includes="**/*.jar" />
- </path>
-
- <target name="properties" if="eclipse.running">
- <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
- </target>
-
- <!-- Initialization -->
- <target name="init" depends="properties">
- <condition property="pluginTemp" value="${buildTempFolder}/plugins">
- <isset property="buildTempFolder"/>
- </condition>
- <property name="pluginTemp" value="${basedir}"/>
- <condition property="build.result.folder" value="${pluginTemp}/${ant.project.name}">
- <isset property="buildTempFolder"/>
- </condition>
- <property name="build.result.folder" value="${basedir}"/>
- <property name="temp.folder" value="${basedir}/temp.folder"/>
- <property name="plugin.destination" value="${basedir}"/>
-
- <property name="jar.filename" value="${ant.project.name}.jar"/>
-
- <delete dir="${temp.folder}"/>
- <mkdir dir="${temp.folder}"/>
-
- <delete dir="${temp.folder}/bin"/>
- <mkdir dir="${temp.folder}/bin"/>
-
- <delete dir="${reports.folder}"/>
- <mkdir dir="${reports.folder}"/>
-
- <delete dir="../features"/>
- <mkdir dir="../features"/>
-
- <delete dir="../plugins"/>
- <mkdir dir="../plugins"/>
-
- <exec executable="svn" dir="../.">
- <arg line="up"/>
- </exec>
- </target>
-
- <!-- Build target -->
- <target name="build" depends="init" description="Build the source">
- <!-- Build the source -->
- <javac destdir="${temp.folder}/bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}">
- <compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
- <classpath refid="build_classpath" />
- <src path="src/" />
- <src path="../com.nokia.s60tools.analyzetool.trace/src/" />
- <compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
- <compilerarg line="-log '${temp.folder}/bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
- </javac>
-
- <!-- Copy necessary resources -->
- <copy todir="${temp.folder}/bin" failonerror="true" overwrite="false">
- <fileset dir="src/" excludes="**/*.java, **/package.htm*" />
- </copy>
-
- <!-- Create build result folder -->
- <mkdir dir="${build.result.folder}"/>
-
- <!-- Copy classes from the temporary folder to bin -->
- <copy todir="${build.result.folder}" failonerror="true" overwrite="false">
- <fileset dir="${temp.folder}/bin" />
- </copy>
-
- <!-- Delete temporary folder -->
- <delete dir="${temp.folder}"/>
- </target>
-
-
- <!-- JAR target -->
- <target name="jar" depends="build" description="Create JAR">
- <!-- Create JAR -->
-
- <delete dir="binaries"/>
- <mkdir dir="binaries"/>
- <delete dir="binaries_trace/com/nokia/s60tools/analyzetool/trace"/>
- <mkdir dir="binaries_trace/com/nokia/s60tools/analyzetool/trace"/>
-
- <copy todir="binaries" failonerror="true" overwrite="false">
- <fileset dir="${build.result.folder}" />
- </copy>
-
- <copy todir="binaries_trace/com/nokia/s60tools/analyzetool/trace" failonerror="true" overwrite="false">
- <fileset dir="${build.result.folder}/com/nokia/s60tools/analyzetool/trace" />
- </copy>
-
- <!--<mkdir dir="${published.plugins.folder}"/>-->
- <echo message="Copying files to binaries"/>
- <copy todir="binaries" failonerror="true" overwrite="false">
- <fileset dir="${build.result.folder}">
- <include name="META-INF/**"/>
- <include name="plugin.xml"/>
- <include name="about.html"/>
- <include name="icons/**"/>
- <include name="plugin.xml"/>
- <include name="about.html"/>
- <include name="about.ini"/>
- <include name="about.properties"/>
- <include name="plugin.properties"/>
- <include name="license.txt"/>
- <include name="about.mappings"/>
- </fileset>
- </copy>
-
- <copy todir="binaries_trace" failonerror="true" overwrite="false">
- <fileset dir="../com.nokia.s60tools.analyzetool.trace" >
- <include name="META-INF/**"/>
- <include name="plugin.xml"/>
- <include name="about.html"/>
- <include name="license.txt"/>
- </fileset>
- </copy>
-
- <echo message="Creating ${jar.filename}..."/>
- <zip destfile="${binaries.folder}/${jar.filename}" basedir="binaries" />
- <zip destfile="${binaries.folder}/${trace.jar.filename}" basedir="binaries_trace" />
-
- <delete>
- <fileset dir="binaries"/>
- <fileset dir="binaries_trace"/>
- <fileset dir="com"/>
- </delete>
-
- </target>
-
-
- <!-- Instrumentation target, depends on JAR -->
- <target name="instr" depends="jar">
- <!-- Instrument the source code -->
- <emma>
- <instr instrpath="${binaries.folder}/${jar.filename}" destdir="${instr.folder}" metadatafile="${reports.emma}/metadata.emma" merge="true"/>
- <instr instrpath="${binaries.folder}/${trace.jar.filename}" destdir="${instr.folder}" metadatafile="${reports.emma}/metadata.emma" merge="true"/>
- </emma>
- </target>
-
- <!-- Feature target -->
- <target name="feature" depends="jar" description="Create feature">
- <property name="feature.folder" location="${binaries.folder}/feature"/>
-
- <mkdir dir="${feature.folder}"/>
- <mkdir dir="${feature.folder}/plugins/com.nokia.s60tools.analyzetool.corecomponents"/>
- <mkdir dir="${feature.folder}/features/${feature.project.name}"/>
- <mkdir dir="${binaries.folder}/nightly_builds"/>
-
- <!-- Create help JAR -->
- <zip destfile="../plugins/${help.jar.filename}" basedir="../${help.project.name}" excludes="src/,.*"/>
-
- <!-- Copy feature stuff to the temp folder -->
- <copy todir="${feature.folder}/features/${feature.project.name}" file="${feature.project.folder}/feature.xml"/>
- <copy todir="${feature.folder}/features/${feature.project.name}" file="${feature.project.folder}/license.txt"/>
-
- <!-- Copy the actual plug-in to the temp folder -->
- <copy todir="../plugins" file="${binaries.folder}/${jar.filename}"/>
- <copy todir="../plugins" file="${binaries.folder}/${trace.jar.filename}"/>
- <copy todir="../plugins/com.nokia.s60tools.analyzetool.corecomponents">
- <fileset dir="../com.nokia.s60tools.analyzetool.corecomponents">
- <include name="META-INF/**"/>
- <include name="atool.exe"/>
- <include name="xerces-c_2_7.dll"/>
- <include name="license.txt"/>
- <include name="about.html"/>
- <include name="atool_gsoap_src.zip"/>
- <include name="AToolManageHTI.dll"/>
- <include name="addr2line.exe"/>
- <include name="binutils-2.19.1-src.zip"/>
- </fileset>
- </copy>
-
- <exec dir="../" executable="bash" resolveexecutable="true" failonerror="true">
- <arg value="-c"/>
- <arg value="C:\\hudson\\jobs\\setPluginVersion.sh ${ant.project.name}"/>
- </exec>
- <exec dir="../" executable="bash" resolveexecutable="true" failonerror="true">
- <arg value="-c"/>
- <arg value="C:\\hudson\\jobs\\setPluginVersion.sh ${ant.project.name}.help"/>
- </exec>
- <exec dir="../" executable="bash" resolveexecutable="true" failonerror="true">
- <arg value="-c"/>
- <arg value="C:\\hudson\\jobs\\setPluginVersion.sh ${ant.project.name}.trace"/>
- </exec>
-
- <!-- Copy the actual plug-in to the feature folder -->
- <copy todir="${feature.folder}/plugins">
- <fileset dir="../plugins"/>
- </copy>
-
-
- <!-- Copy the actual plug-ins to the carbide folders -->
- <copy todir="${carbide.int.folder}" failonerror="true" overwrite="true">
- <fileset dir="${feature.folder}/plugins"/>
- </copy>
- <copy todir="${carbide.dev.folder}" failonerror="true" overwrite="true">
- <fileset dir="${feature.folder}/plugins"/>
- </copy>
- <copy todir="${carbide.adt.folder}" failonerror="true" overwrite="true">
- <fileset dir="${feature.folder}/plugins"/>
- </copy>
-
- </target>
-
- <!-- Analyze target -->
- <target name="analyze">
- <!-- PMD -->
- <pmd>
- <!-- Rules -->
- <ruleset>basic</ruleset>
- <ruleset>codesize</ruleset>
- <ruleset>coupling</ruleset>
- <ruleset>design</ruleset>
- <ruleset>strictexception</ruleset>
- <ruleset>strings</ruleset>
- <ruleset>sunsecure</ruleset>
- <ruleset>junit</ruleset>
- <ruleset>unusedcode</ruleset>
-
- <!-- XML output -->
- <formatter type="xml" toFile="${reports.folder}/report.pmd.xml"/>
-
- <!-- Files to analyze -->
- <fileset dir="src/">
- <include name="**/*.java"/>
- </fileset>
- <fileset dir="../com.nokia.s60tools.analyzetool.tests/src/">
- <include name="**/*.java"/>
- </fileset>
- <fileset dir="../com.nokia.s60tools.analyzetool.trace/src/">
- <include name="**/*.java"/>
- </fileset>
-
- </pmd>
- </target>
-
- <!-- Clean target -->
- <target name="clean" description="Clean" depends="clean-test">
- <delete dir="binaries"/>
- </target>
-
- <!-- Clean tests target -->
- <target name="clean-test" description="Clean test">
-
- <delete>
- <fileset dir="${test.folder}" includes="**/*.class" />
- </delete>
- <delete dir="temp.folder"/>
- <delete dir="com"/>
- <delete dir="bin"/>
- <delete dir="binaries"/>
- <delete dir="binaries_trace"/>
- <delete dir="instr"/>
- </target>
-
- <!-- Test target, depends on instrumentation and analyze -->
- <target name="test" depends="instr" description="Run unit tests">
- <!-- Test classpath -->
- <path id="test_classpath">
- <!-- Test classes -->
- <pathelement location="${test.folder}/src"/>
-
- <!-- Instrumented class files -->
- <pathelement location="${instr.folder}"/>
-
- <!-- EMMA -->
- <pathelement path="${ant.home}/lib/emma.jar"/>
-
- <fileset dir="${carbide.adt.folder}" includes="**/*.jar" />
-
- </path>
-
- <!-- Compile the tests -->
- <javac srcdir="${test.folder}" verbose="${javacVerbose}">
- <classpath refid="test_classpath"/>
- </javac>
-
- <!-- Run JUnit -->
- <junit printsummary="yes" fork="yes" haltonfailure="yes">
- <classpath refid="test_classpath" />
-
- <!-- Plain format and XML -->
- <formatter type="plain" />
- <formatter type="xml" />
-
- <!-- Instrumentation arguments to JVM -->
- <jvmarg value="-Demma.coverage.out.file=${reports.emma}/coverage.emma" />
- <jvmarg value="-Demma.coverage.out.merge=true" />
-
- <!-- Test classes -->
- <test name="com.nokia.s60tools.analyzetool.tests.AllPureJUnitTests" todir="${reports.folder}"/>
- </junit>
-
- <!-- Create EMMA report -->
- <emma>
- <report sourcepath="src/" >
- <fileset dir="${reports.emma}" >
- <include name="*.emma" />
- </fileset>
- <xml outfile="${reports.emma}/coverage.xml" />
- </report>
- </emma>
- </target>
-
- <target name="zip">
-
- <!-- Create the feature zip -->
- <zip destfile="${binaries.folder}/${feature.name}.zip" basedir="${feature.folder}"/>
-
- <deltree dir="${feature.folder}"/>
-
- <!-- Nightly build -->
- <tstamp>
- <format property="timestamp" pattern="dd-MM-yyyy" />
- </tstamp>
-
- <delete dir="${binaries.folder}/nightly_builds"/>
- <mkdir dir="${binaries.folder}/nightly_builds"/>
-
- <copy tofile="${binaries.folder}/nightly_builds/${feature.name}-${timestamp}.zip" file="${binaries.folder}/${feature.name}.zip"/>
- </target>
-
-
-</project>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/javadoc.xml Wed Apr 21 15:14:16 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<project default="javadoc">
- <target name="javadoc">
- <javadoc access="public" author="true" classpath="C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.jface_3.4.0.I20080606-1300.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.jobs_3.4.0.v20080512.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.ide_3.4.0.I20080606-1300.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\com.nokia.carbide.cpp.project.ui_2.0.0.007.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.workbench_3.4.0.I20080606-1300.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.resources_3.4.0.v20080604-1400.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.cdt.core_5.0.1.007.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.swt.win32.win32.x86_3.4.0.v3448f.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.console_3.3.0.v20080529-1300.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.equinox.common_3.4.0.v20080421-2006.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.navigator_3.3.100.I20080606-1300.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.editors_3.4.0.v20080603-2000.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.osgi_3.4.0.v20080605-1900.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.runtime.compatibility.registry_3.2.200.v20080610\runtime_registry_compatibility.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.equinox.app_1.1.0.v20080421-2006.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui_3.4.0.I20080610-1200.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.runtime_3.4.0.v20080512.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.filebuffers_3.4.0.v20080603-2000.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.core.commands_3.4.0.I20080509-2000.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.views_3.3.0.I20080509-2000.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.swt_3.4.0.v3448f.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.draw2d_3.4.0.v20080529.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.ui.workbench.texteditor_3.4.0.v20080603-2000.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.text_3.4.0.v20080605-1800.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\com.nokia.carbide.cpp.epoc.engine_2.0.0.007.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\com.nokia.carbide.cpp.sdk.core_2.0.0.007\sdkCorePlugin.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.cdt.ui_5.0.1.007.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\com.nokia.carbide.cdt.builder_2.0.0.007.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.jface.text_3.4.0.v20080603-2000.jar;C:\Program Files\Nokia\Carbide.c++ v2.0\plugins\org.eclipse.cdt.make.core_5.0.1.007.jar" destdir="doc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="com.nokia.s60tools.analyzetool.global,com.nokia.s60tools.analyzetool.ui,com.nokia.s60tools.analyzetool,com.nokia.s60tools.analyzetool.builder,com.nokia.s60tools.analyzetool.engine,com.nokia.s60tools.analyzetool.preferences" source="1.5" sourcepath="src" splitindex="true" use="true" version="true"/>
- </target>
-</project>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/license.txt Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/license.txt Wed Apr 21 19:42:48 2010 +0300
@@ -1,4 +1,4 @@
-Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved.
This component and the accompanying materials are made available under the terms of "Eclipse Public License v1.0"
which accompanies this distribution, and is available at the URL "http://www.eclipse.org/legal/epl-v10.html".
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/plugin.xml Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/plugin.xml Wed Apr 21 19:42:48 2010 +0300
@@ -84,7 +84,6 @@
class="com.nokia.s60tools.analyzetool.ui.actions.CompileSymbianComponent"
menubarPath="com.nokia.s60tools.analyzetool.menu1/submen"
enablesFor="+"
- definitionId="com.nokia.s60tools.analyzetool.ui.actions.CompileSymbianComponent"
id="com.nokia.s60tools.analyzetool.ui.actions.CompileSymbianComponent"
tooltip="Instrument and build with AnalyzeTool">
</action>
@@ -219,8 +218,12 @@
class="com.nokia.s60tools.analyzetool.properties.PropertiesPage"
id="com.nokia.s60tools.analyzetool.properties.PropertiesPage"
name="AnalyzeTool"
- objectClass="org.eclipse.core.resources.IProject">
>
+ <enabledWhen>
+ <instanceof
+ value="org.eclipse.core.resources.IProject">
+ </instanceof>
+ </enabledWhen>
</page>
</extension>
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ActivateTrace.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ActivateTrace.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/Activator.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/Activator.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -37,7 +37,8 @@
import com.nokia.s60tools.analyzetool.ui.IActionListener;
/**
- * @author kihe The activator class controls the plug-in life cycle
+ * The activator class controls the plug-in life cycle
+ * @author kihe
*/
public class Activator extends AbstractUIPlugin {
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/AnalyzeToolHelpContextIDs.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/AnalyzeToolHelpContextIDs.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/AnalyzeToolBuilder.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/AnalyzeToolBuilder.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -202,8 +202,8 @@
* @param monitor
* Currently running progress monitor
* @param continueBuild
- * Stop the whole build chain (including Carbide other builders)
- * or not
+ * False stops the whole build chain (including Carbide and other builders)
+ * otherwise other than AnalyzeTool builds are executed normally.
*/
public final void buildCancelled(final IProgressMonitor monitor,
final boolean continueBuild) {
@@ -278,8 +278,8 @@
// run pre steps for the build
if (!runPreSteps(cmdLauncher, monitor, cpi)) {
- return new Status(IStatus.ERROR, Constants.ANALYZE_TOOL_TITLE,
- IStatus.ERROR, Constants.CANCELLED, null);
+ return new Status(IStatus.OK, Constants.ANALYZE_TOOL_TITLE,
+ IStatus.OK, Constants.CANCELLED, null);
}
// build selected components
@@ -374,6 +374,7 @@
usedArguments.add(Constants.ATOOL_SHOW_DEBUG);
}
+ // get callstack size
IPreferenceStore store = Activator.getPreferences();
if( store.getBoolean(Constants.USE_CALLSTACK_SIZE) ) {
int callstackSize = store.getInt(Constants.CALLSTACK_SIZE);
@@ -393,7 +394,7 @@
buildCommand.append(buildTarget);
usedArguments.add(buildCommand.toString());
}
- else
+ else //use abld
{
usedArguments.add("abld");
usedArguments.add("build");
@@ -529,9 +530,10 @@
/**
* Parses mmp file from the entered path
- * @param fileLocation MMP file location
- * @param sbsBuild IS sbsv2 build system activated
- * @return MMP file name without path
+ * @param fileLocation MMP file location with path.
+ * @param sbsBuild Is sbsv2 build system activated
+ * @return MMP file name without path. If SBSv2 is not activated the MMP
+ * file is returned without file extension.
*/
public String getMMPFileName(IPath fileLocation, boolean sbsBuild)
{
@@ -548,7 +550,7 @@
mmpFileName = fileLocation.toString().substring(
index + 1, fileLocation.toString().length());
- //if not using the SBS2 builds => nees to remove mmp file name extension
+ //if not using the SBS2 builds => needs to remove mmp file name extension
if( !sbsBuild && mmpFileName.endsWith(".mmp")) {
mmpFileName = mmpFileName.substring(0, mmpFileName.length()-4);
}
@@ -736,7 +738,7 @@
* Progress monitor
* @param cpi
* Carbide project info
- * @return True is all checks are OK, otherwise False
+ * @return True if all checks are OK, otherwise False
*/
protected final boolean runPreSteps(final CarbideCommandLauncher launcher,
final IProgressMonitor monitor, final ICarbideProjectInfo cpi) {
@@ -754,13 +756,30 @@
}
// check AnalyzeTool version, 1.6.0 and forward versions is supported
- int compared = Util.compareVersionNumber(Util.getAtoolVersionNumber(Util.getAtoolInstallFolder()), Constants.MIN_VERSION);
+ String atoolVersion = Util.getAtoolVersionNumber(Util.getAtoolInstallFolder());
+ int compared = Util.compareVersionNumber(atoolVersion, Constants.MIN_VERSION);
if( compared == Constants.VERSION_NUMBERS_SECOND || compared == Constants.VERSION_NUMBERS_INVALID ) {
buildCancelled(monitor, false);
Util.showMessage(Constants.TOO_OLD_ENGINE);
return false;
}
+ /**
+ *
+ * Below is code a sample which are related to the AT-682,
+ * but it is decided to let out from current release.
+ String coreVersion = Util.getAtoolCoreVersion(cpi.getProject());
+ compared = Util.compareVersionNumber(coreVersion, atoolVersion);
+ if( compared != Constants.VERSION_NUMBERS_EQUALS )
+ {
+ boolean retValue = Util.openConfirmationDialog("AnalyzeTool command line engine and AnalyzeTool core version mismatch.\n" +
+ "This usually leads to problems.\n\nDo you want to continue?");
+ if( !retValue ) {
+ buildCancelled(monitor, false);
+ return false;
+ }
+ }
+ */
// remove existing error markers
try {
CarbideCPPBuilder.removeAllMarkers(cpi.getProject());
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/BuilderUtil.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/BuilderUtil.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/CustomPostBuilder.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/CustomPostBuilder.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/CustomPreBuilder.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/CustomPreBuilder.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/PostNature.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/PostNature.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/PreNature.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/PreNature.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides methods to add and remove AnalyzeTool builders.
+*/
+package com.nokia.s60tools.analyzetool.builder;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/AnalysisItem.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/AnalysisItem.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -21,20 +21,23 @@
import java.util.ArrayList;
/**
- * Contains information of one memory leak item Information is parsed from
+ * Contains information of one memory leak item. Information is parsed from
* atool.exe generated XML file so we can assume that all the information is
* valid and no other checking is needed.
- *
+ *
* @author kihe
- *
+ *
*/
public class AnalysisItem extends BaseItem {
+ /** Call stack addresses. */
+ private final AbstractList<CallstackItem> callstackItems;
+
/** Size of leak. */
private int leakSize = 0;
- /** Call stack addresses. */
- private final AbstractList<CallstackItem> callstackItems;
+ /** Memory leak time. */
+ private String memoryLeakTime;
/**
* Constructor.
@@ -46,7 +49,7 @@
/**
* Adds new Callstack item.
- *
+ *
* @param item
* Callstack item
*/
@@ -55,9 +58,10 @@
}
/**
- * Check contains current item valid callstack item.
- *
- * @return True one callstack info contains Function name and leak line
+ * Check if any stored callstack items has is pinpointed to file and line
+ * number.
+ *
+ * @return True if any callstack item contains file name and leak line
* number, otherwise False
*/
public final boolean containValidCallstack() {
@@ -78,7 +82,7 @@
/**
* Gets stored callstack items.
- *
+ *
* @return Callstack items
*/
public final AbstractList<CallstackItem> getCallstackItems() {
@@ -87,21 +91,43 @@
/**
* Gets size of memory leak.
- *
+ *
* @return Memory leak size
*/
public final int getLeakSize() {
return this.leakSize;
}
+ /**
+ * Gets memory leak time.
+ *
+ * @return Memory leak time
+ */
+ public final String getMemoryLeakTime() {
+ if (memoryLeakTime == null) {
+ return "";
+ }
+ return this.memoryLeakTime;
+ }
/**
* Sets size for the memory leak.
- *
+ *
* @param newSize
* Memory leak size
*/
public final void setLeakSize(final int newSize) {
this.leakSize = newSize;
}
+
+ /**
+ * Sets memory leak time.
+ *
+ * @param newMemoryLeakTime
+ * Memory leak time
+ */
+ public final void setMemoryLeakTime(final String newMemoryLeakTime) {
+ this.memoryLeakTime = newMemoryLeakTime;
+
+ }
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/AnalyzeFactory.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/AnalyzeFactory.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -40,7 +40,7 @@
/**
* Returns an empty model
- * @return
+ * @return Empty memory model
*/
public static IMemoryActivityModel getEmptyModel(){
return EMPTY_MODEL;
@@ -118,7 +118,24 @@
public void setSelectedProcess(ProcessInfo processInfo) {
//cannot occur in empty model
}
-
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel#isDeferredCallstackReading()
+ */
+ public boolean isDeferredCallstackReading() {
+ return false;
+ }
+
+ public void setDeferredCallstackReading(boolean value) {
+ //nothing to do
+ }
+
+ public ICallstackManager getCallstackManager() {
+ return null;
+ }
+
+ public void setCallstackManager(ICallstackManager callstackManager) {
+ //nothing to do
+ }
}
-
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/BaseItem.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/BaseItem.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -18,8 +18,8 @@
package com.nokia.s60tools.analyzetool.engine;
/**
- * Base class for {@link AnalysisItem} and {@link CallstackItem} Provides
- * methods to store basic information of one item
+ * Base class for {@link AnalysisItem} and {@link CallstackItem}. Provides
+ * methods to store basic information of one item.
*
* Information is parsed from atool.exe generated XML file so we can assume that
* all the information is valid and no other checking is needed.
@@ -32,9 +32,6 @@
/** Module name. */
private String moduleName;
- /** Memory leak time. */
- private String memoryLeakTime;
-
/** Memory item memory address. */
private String memoryAddress;
@@ -62,17 +59,7 @@
return memoryAddress;
}
- /**
- * Gets memory leak time.
- *
- * @return Memory leak time
- */
- public final String getMemoryLeakTime() {
- if (memoryLeakTime == null) {
- return "";
- }
- return this.memoryLeakTime;
- }
+
/**
* Gets module name.
@@ -107,17 +94,6 @@
}
/**
- * Sets memory leak time.
- *
- * @param newMemoryLeakTime
- * Memory leak time
- */
- public final void setMemoryLeakTime(final String newMemoryLeakTime) {
- this.memoryLeakTime = newMemoryLeakTime;
-
- }
-
- /**
* Sets module name.
*
* @param newModuleName
@@ -135,7 +111,6 @@
*/
protected boolean checkData() {
if ((moduleName == null || ("").equals(moduleName))
- && (memoryLeakTime == null || ("").equals(memoryLeakTime))
&& (memoryAddress == null || ("").equals(memoryAddress))) {
return false;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/CallstackDataParser.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,324 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Definitions for the class ParseAnalyzeData
+ *
+ */
+package com.nokia.s60tools.analyzetool.engine;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import com.nokia.s60tools.analyzetool.engine.statistic.AllocCallstack;
+import com.nokia.s60tools.analyzetool.engine.statistic.AllocInfo;
+import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
+import com.nokia.s60tools.analyzetool.engine.statistic.DllLoad;
+import com.nokia.s60tools.analyzetool.engine.statistic.FreeInfo;
+import com.nokia.s60tools.analyzetool.engine.statistic.ProcessInfo;
+import com.nokia.s60tools.analyzetool.global.Constants;
+import com.nokia.s60tools.analyzetool.global.Constants.Operation;
+
+/**
+ * This class parses line of .dat file format and extracts
+ * callstack data. For now this is a separate class but could
+ * eventually be moved into ParseAnalyzeData after some refactoring.
+ *
+ */
+public class CallstackDataParser {
+ /** true if callstack reading for this BaseInfo is now complete*/
+ boolean complete = false;
+ /** resulting callstack */
+ private List<AllocCallstack> callstack;
+ /** BaseInfo for the current alloc or free */
+ private BaseInfo baseInfo;
+ /** ProcessInfo for the current alloc or free */
+ private ProcessInfo process;
+ /** number of remaining callstack elements expected to be processed with ALLOCF or FREEF */
+ private int remainingSize;
+
+ /** Cache for callstack items. Used when allocation fragment is parsed in the wrong order. */
+ private HashMap<Integer, List<AllocCallstack>> callstackCache = null;
+
+ /**
+ * Constructor
+ * @param baseInfo BaseInfo for the current alloc or free
+ * @param p ProcessInfo for the current alloc or free
+ */
+ public CallstackDataParser(BaseInfo baseInfo, ProcessInfo p) {
+ if (p == null || baseInfo == null || p.getProcessID() != baseInfo.getProcessID()){
+ throw new IllegalArgumentException("BaseInfo and ProcessInfo are mandatory and must not be null; and the process id of both must match."); //$NON-NLS-1$
+ }
+ this.baseInfo = baseInfo;
+ this.process = p;
+ callstack = new ArrayList<AllocCallstack>();
+ }
+
+ /**
+ * Parses one line of PCSS statement
+ * @param aLine
+ * @return true, if this callstack is now complete (all parts are available)
+ */
+ public final boolean parseLine(final String aLine) {
+
+ if (aLine.indexOf(Constants.PREFIX) == -1){
+ //not a PCSS statement
+ return false;
+ }
+
+ String[] lineFragments = getLineFragments(aLine);
+ if (lineFragments.length < 5){
+ //not a valid PCSS statment for callstack processing
+ return false;
+ }
+ int processID = Integer.parseInt(lineFragments[1], 16);
+ if (baseInfo.getProcessID() != processID || process.getProcessID() != processID){
+ //statement is not for current process id
+ return false;
+ }
+
+ //the operation must match
+ Constants.Operation op = Constants.Operation.toOperation(lineFragments[2]);
+ if (!verifyOperation(op, baseInfo)){
+ return false;
+ }
+
+ //the memory address must match
+ long memoryAddress = Long.parseLong(lineFragments[3],16);
+ if (baseInfo.getMemoryAddress() != memoryAddress){
+ return false;
+ }
+
+
+ boolean ret = false;
+
+ switch (op) {
+ case ALLOC:
+ ret = parseAlloc(lineFragments);
+ break;
+ case ALLOCH:
+ ret = parseHeader(lineFragments, 6);
+ break;
+ case FREEH:
+ int traceFileVersion = process.getTraceDataVersion();
+ ret = parseHeader(lineFragments, traceFileVersion > 1 ? 5 : 4);
+ break;
+ case ALLOCF:
+ //fall through
+ case FREEF:
+ ret = parseFragment(lineFragments);
+ break;
+ default:
+ // ignore this line
+ break;
+ }
+
+ return ret;
+ }
+
+ private static boolean verifyOperation(Operation op, BaseInfo aBaseInfo) {
+ return ((aBaseInfo instanceof AllocInfo && (op == Constants.Operation.ALLOC
+ || op == Constants.Operation.ALLOCH || op == Constants.Operation.ALLOCF))
+ || (aBaseInfo instanceof FreeInfo && (op == Constants.Operation.FREEH
+ || op == Constants.Operation.FREEF)));
+ }
+
+ /**
+ * Returns the line fragments of the PCSS statement
+ * @param aLine the PCSS statement
+ * @return the line fragments separated by space
+ */
+ private String[] getLineFragments(final String aLine){
+ int index = aLine.indexOf(Constants.PREFIX); // lines should be preceded
+
+ if (index == -1){
+ return new String[0];
+ }
+
+ String usedString = (index == 0) ? aLine : aLine.substring(index, aLine.length());
+ return usedString.split(" "); //$NON-NLS-1$
+ }
+
+ /**
+ * Parses an ALLOC statement. This statement contains a complete callstack.
+ * @param fragments the line fragments of the statement to process
+ * @return true if statement is complete (this method will always return true)
+ */
+ private boolean parseAlloc(String[] fragments) {
+
+ if (fragments.length > 5) {
+ createCallstack(fragments, process, callstack, 6);
+ }
+
+ complete = true;
+ return true; //we are done; there are no fragments for this alloc
+ }
+
+ /**
+ * Parses an ALLOCH or FREEH statement
+ * @param fragments the line fragments of the statement to process
+ * @param startIndex index at which the callstack size is to be found
+ * @return true if callstack is complete, false if callstack fragment is expected
+ */
+ private boolean parseHeader(String[] fragments, int startIndex) {
+
+ if (callstack.size() > 0 || remainingSize > 0) {
+ throw new IllegalStateException(
+ "Callstack list should still be empty when starting to process ALLOCH"); //$NON-NLS-1$
+ }
+
+ if (fragments.length > startIndex) {
+
+ int callstackSize = Integer.parseInt(fragments[startIndex], 16);
+ startIndex ++;
+
+ createCallstack(fragments, process, callstack, startIndex);
+
+ callstackSize -= callstack.size();
+ if (callstackSize > 0) {
+ // expect fragments
+ remainingSize = callstackSize;
+ } else {
+ complete = true;
+ }
+ } else {
+ complete = true; // this header doesn't have callstacks - a bit strange
+ }
+ return complete;
+ }
+
+ /**
+ * Parses an ALLOCF or FREEF callstack fragment
+ * @param fragments the line fragments of the statement to process
+ * @return true if callstack is now complete; false otherwise
+ */
+ private boolean parseFragment(String[] fragments) {
+ long time = Long.parseLong(fragments[4],16);
+ int packetNumber = Integer.parseInt(fragments[5], 16);
+
+ if (baseInfo.getTime() == time) {
+ List<AllocCallstack> tmpCallstack = new ArrayList<AllocCallstack>();
+ createCallstack(fragments, process, tmpCallstack, 6);
+ updateFragment(tmpCallstack, packetNumber);
+
+ remainingSize -= tmpCallstack.size();
+ if (remainingSize <= 0){
+ complete = true;
+ finaliseCallstack();
+ }
+ }
+ return complete;
+ }
+
+ private DllLoad getDllForAddress(ProcessInfo p, Long memoryAddress,
+ long time) {
+ for (DllLoad oneLoad : p.getDllLoads()) {
+ if (memoryAddress >= oneLoad.getStartAddress()
+ && memoryAddress <= oneLoad.getEndAddress()
+ && time >= oneLoad.getLoadTime()
+ && time <= oneLoad.getUnloadTime()) {
+ // dll load found
+ return oneLoad;
+ }
+ }
+ return null;
+ }
+ private void createCallstack(String[] fragments, ProcessInfo p, List<AllocCallstack> callstack, int startIndex) {
+ for (int i = startIndex; i < fragments.length; i++) {
+ AllocCallstack callstackElem = new AllocCallstack(fragments[i]);
+
+ // find matching dll
+ DllLoad dllLoad = getDllForAddress(process, callstackElem.getMemoryAddress(), baseInfo.getTime());
+ if (dllLoad != null) {
+ callstackElem.setDllLoad(dllLoad);
+ }
+ callstack.add(callstackElem);
+ }
+ }
+ /**
+ * Updates allocation fragment. Means that given callstack is addition to
+ * previous added alloc
+ *
+ * @param callstack
+ * Addition tmpcallstack items
+ * @param packetNumber
+ * ordinal of callstack fragment
+ */
+ private void updateFragment(List<AllocCallstack> tmpcallstack,
+ int packetNumber) {
+ if (packetNumber == 1){
+ //special case; this can be added to the end of the list straight away
+ callstack.addAll(tmpcallstack);
+ } else {
+ //packages may come out of order; this is managed in the callstackCache
+ if (callstackCache == null){
+ callstackCache = new HashMap<Integer, List<AllocCallstack>>();
+ }
+ callstackCache.put(packetNumber, tmpcallstack);
+ }
+ }
+ /**
+ * Optimises internal callstack data structures.
+ * Should only be called after all data for this memory operation
+ * has been loaded (i.e. all fragments)
+ */
+ public void finaliseCallstack(){
+ if (callstackCache == null){
+ //nothing to do
+ return;
+ }
+
+ if (!complete){
+ throw new IllegalStateException("callstack processing is not yet complete."); //$NON-NLS-1$
+ }
+
+ if (callstack == null && callstackCache != null){
+ throw new IllegalStateException(); //first set of callstacks should always be in callstacks
+ }
+
+ if (callstackCache != null){
+ int size = callstackCache.size();
+ int i = 2;
+ while(size != 0){
+ List<AllocCallstack> nextCallStacks = callstackCache.get(i);
+ if (nextCallStacks != null){
+ size --;
+ callstack.addAll(nextCallStacks);
+ } //TODO else: missing callstack: shall we report it or log it?
+ i++;
+ }
+ callstackCache = null;
+ }
+ }
+
+ /**
+ * @return the completed callstack.
+ */
+ public List<AllocCallstack> getCallstack(){
+ if (!complete){
+ throw new IllegalStateException("Callstack has not been completely processed."); //$NON-NLS-1$
+ }
+
+ finaliseCallstack();
+ return callstack;
+ }
+
+ /**
+ * Forces the callstack state to be set to complete. This should only be used when the end of file is encountered.
+ */
+ public void forceComplete(){
+ complete = true;
+ finaliseCallstack();
+ }
+
+}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/CallstackItem.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/CallstackItem.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -18,7 +18,7 @@
package com.nokia.s60tools.analyzetool.engine;
/**
- * Contains information of one memory leak item Information is parsed from
+ * Contains information of one memory leak item. Information is parsed from
* atool.exe generated XML file so we can assume that all the information is
* valid and no other checking is needed.
*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/DeferredCallstackManager.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Definitions for the class ReadFile
+ *
+ */
+package com.nokia.s60tools.analyzetool.engine;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.nokia.s60tools.analyzetool.engine.statistic.AllocCallstack;
+import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
+import com.nokia.s60tools.analyzetool.engine.statistic.ProcessInfo;
+
+/**
+ * CallstackManager for reading of callstacks on demand by accessing the .dat file
+ * after the initial parsing of the file has completed.
+ *
+ */
+public class DeferredCallstackManager implements ICallstackManager{
+ /** max number of lines to parse before giving up and forcing the callstack as complete
+ * This helps to deal with corrupt files */
+ private static final int BAIL_OUT_LIMIT = 100;
+
+ /** Location of the .dat file */
+ String fileLocation;
+ /** list of processes for this file; this has to contain all DllLoads for each process */
+ private Map<Integer, ProcessInfo> processMap;
+
+ /**
+ * Contructor
+ * @param fileLocation full path of the file to read callstacks from
+ */
+ public DeferredCallstackManager(String fileLocation) {
+ this.fileLocation = fileLocation;
+ }
+
+ /**
+ * Setter for all processes valid for this data file. This has to contain
+ * all DllInfo information for each of the processes
+ * @param processes List of processes for the file
+ */
+ public void setProcesses(AbstractList<ProcessInfo> processes){
+ //make a copy
+ if (processMap == null) {
+ processMap = new HashMap<Integer, ProcessInfo>();
+ for (ProcessInfo processInfo : processes) {
+ processMap.put(processInfo.getProcessID(), processInfo);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.statistic.ICallstackManager#readCallstack(com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo)
+ */
+ public List<AllocCallstack> readCallstack(BaseInfo baseInfo) throws IOException{
+ //Returns a fully resolved callstack file in .dat format.
+ //The baseInfo's file position points to the beginning of a record where the callstack information starts
+
+ if (!hasCallstack(baseInfo)){
+ return null;
+ }
+
+ ProcessInfo p = processMap.get(baseInfo.getProcessID());
+
+ if (p == null){
+ //no matching process found
+ return new ArrayList<AllocCallstack>();
+ }
+
+
+ RandomAccessFile fileReader = null;
+ List<AllocCallstack> ret = null;
+
+
+ try {
+ // Open .dat file for reading
+ fileReader = new RandomAccessFile(new File(fileLocation), "r"); //$NON-NLS-1$
+
+ // Parsing the ELF header to read the Program Header Offset 'e_phoff' value
+ fileReader.seek(baseInfo.getFilePos());
+
+ CallstackDataParser parser = new CallstackDataParser(baseInfo, p);
+ int lineCnt = 0;
+ String line;
+ while((line = fileReader.readLine()) != null){
+ if (parser.parseLine(line)){
+ parser.finaliseCallstack();
+ ret = parser.getCallstack();
+ break;
+ }
+
+ //let's count the lines we parse and bail out after <n> lines in case the file is corrupt
+ lineCnt ++;
+ if (lineCnt == BAIL_OUT_LIMIT){
+ parser.forceComplete();
+ ret = parser.getCallstack();
+ break;
+ }
+ }
+ } finally {
+ if (fileReader != null){
+ fileReader.close();
+ }
+ }
+
+ return ret == null ? new ArrayList<AllocCallstack>() : ret;
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.statistic.ICallstackManager#hasCallstack(com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo)
+ */
+ public boolean hasCallstack(BaseInfo baseInfo) {
+ return baseInfo.getFilePos() > -1;
+ }
+
+}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/EpocReader.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/EpocReader.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ICallstackManager.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Definitions for the class ReadFile
+ *
+ */
+package com.nokia.s60tools.analyzetool.engine;
+
+import java.io.IOException;
+import java.util.List;
+
+import com.nokia.s60tools.analyzetool.engine.statistic.AllocCallstack;
+import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
+
+/**
+ * Interface for access to callstack. This allows the transparent use of either the old-style saving
+ * of callstacks in BaseInfo, or the newer deferred reading of callstacks.
+ */
+public interface ICallstackManager {
+
+ /**
+ * Returns the callstack for the given BaseInfo. Note, this should not return null
+ * if hasCallstack() returns true.
+ * @param baseInfo the BaseInfo to use
+ * @return the callstack for the given BaseInfo
+ * @throws IOException when problems accessing the .dat file for callstacks
+ */
+ public List<AllocCallstack> readCallstack(BaseInfo baseInfo) throws IOException;
+
+ /**
+ * Returns true if the given BaseInfo has a callstack, false otherwise
+ * @param baseInfo the BaseInfo to use
+ * @return true if callstack present
+ */
+ public boolean hasCallstack(BaseInfo baseInfo);
+
+}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/IMemoryActivityModel.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/IMemoryActivityModel.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -39,31 +39,31 @@
/**
* returns the last selected process
- * @return
+ * @return Selected process
*/
public ProcessInfo getSelectedProcess();
/**
- * get the start time of the process that started first
+ * Get the start time of the process that started first
* @return time
*/
public Long getFirstProcessTime();
/**
- * get end time of the process that ended last
- * @return
+ * Get end time of the process that ended last
+ * @return Last process time
*/
public Long getLastProcessTime();
/**
- * get get first point time from all processes
- * @return time
+ * Get time of the first memory operation
+ * @return First memory operation time.
*/
public Long getFirstMemOpTime();
/**
- * get last point time from all processes
- * @return time
+ * Get last memory operation time from all processes
+ * @return Last memory operation time.
*/
public Long getLastMemOpTime();
@@ -74,8 +74,8 @@
public int getHighestCumulatedMemoryAlloc();
/**
- * get list of processes
- * @return processes
+ * Get list of processes
+ * @return processes list
*/
public AbstractList<ProcessInfo> getProcesses();
@@ -90,4 +90,31 @@
*/
void removeListener(IMemoryActivityModelChangeListener listener);
+ /**
+ * Returns true if callstack reading from files is done on demand after the
+ * initial parsing phase. This assumes file positions are available from
+ * BaseInfo
+ * @return true for deferred callstack reading, false otherwise
+ */
+ public boolean isDeferredCallstackReading();
+
+ /**
+ * Indicates whether this model is reading callstacks on demand
+ * after the initial parsing phase has finished
+ * @param value
+ */
+ public void setDeferredCallstackReading(boolean value);
+
+ /**
+ * Setter for the ICallstackManager
+ * @param callstackManager the CallstackManager to set
+ */
+ public void setCallstackManager(ICallstackManager callstackManager);
+
+ /**
+ * Getter for ICallstackManager.
+ * @return CallstackManager
+ */
+ public ICallstackManager getCallstackManager();
+
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/IMemoryActivityModelChangeListener.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/IMemoryActivityModelChangeListener.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -32,7 +32,7 @@
/**
* callback when a process has been selected
- * @param ProcessInfo The ProcessInfo of the newly selected process
+ * @param processId The ProcessInfo of the newly selected process
*/
public void onProcessSelected(ProcessInfo processId);
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/MMPInfo.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/MMPInfo.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -90,27 +90,21 @@
}
/**
- * Sets info is mmp file build with AnalyzeTool.
- *
- * @param build
- * Build info
- */
- public final void setBuildInfo(final boolean build) {
- buildSuccesfully = build;
- }
-
- /**
- * Sets info is mmp file build with AnalyzeTool.
+ * Based on given MMP file checks is the module already
+ * built with AnalyzeTool and sets the internal data.
*
* @param location
* MMP file location
*/
- public final void setBuildInfoAndCheck(final String location) {
- buildSuccesfully = Util.isModuleBuild(location);
+ private final void setBuildInfo(final String location) {
+ if( location != null ) {
+ buildSuccesfully = Util.isModuleBuilt(location);
+ }
}
/**
- * MMP file location.
+ * Sets the MMP file location.
+ * Checks that file exists for the given location and updates internal data.
*
* @param location
* MMP file location
@@ -127,7 +121,7 @@
mmpFilePath = file.getLocation().toOSString();
}
- setBuildInfoAndCheck(mmpFilePath);
+ setBuildInfo(mmpFilePath);
}
/**
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ParseAnalyzeData.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ParseAnalyzeData.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -23,22 +23,26 @@
import java.io.IOException;
import java.util.AbstractList;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
import org.eclipse.core.runtime.IStatus;
import com.nokia.s60tools.analyzetool.Activator;
import com.nokia.s60tools.analyzetool.engine.statistic.AllocCallstack;
import com.nokia.s60tools.analyzetool.engine.statistic.AllocInfo;
+import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
import com.nokia.s60tools.analyzetool.engine.statistic.DllLoad;
import com.nokia.s60tools.analyzetool.engine.statistic.FreeInfo;
import com.nokia.s60tools.analyzetool.engine.statistic.ProcessInfo;
import com.nokia.s60tools.analyzetool.global.Constants;
/**
- * Parses trace messages which comes thru tracing utility.
- * If one message contains PCSS prefix the message will saved to the data file Data file will be saved
+ * Parses trace messages which comes thru TraceViewer.
+ * If one message contains PCSS prefix the message will be saved to the data file. Data file will be saved
* to the project [bld.inf location]\atool_temp folder.
*
* @author kihe
@@ -74,25 +78,33 @@
/**
* Allocation cache
- * Used when one free info is separated to multiple lines.
+ * Used when one alloc info is separated to multiple lines.
*/
- private final Hashtable<Long, AllocInfo> allocCache;
+ private Hashtable<Long, AllocInfo> allocCache = null;
+
+ /**
+ * For each memory operation, keeps count of how many
+ * callstacks are outstanding. This is used to clean up
+ * after all fragments have been processed.
+ *
+ * Zero callstack counts should not be kept.
+ */
+ private Map<BaseInfo, Integer> remainingCallstacksMap = null;
/**
* Deallocation cache.
* Used when one free info is separated to multiple lines.
*/
- private final Hashtable<Long, FreeInfo> freeCache;
-
-
+ private Hashtable<Long, FreeInfo> freeCache = null;
+
/**
* Cache for dll loads.
* We must find dll load item for every allocation callstack item.
* This is heavy process and usually we must find more than thousand times.
* So when using cache for found items => it makes finding process more rapid than without it.
*/
- private final Hashtable<Long, DllLoad> dllLoadCache;
+ private Hashtable<Long, DllLoad> dllLoadCache = null;
/**
@@ -103,23 +115,78 @@
boolean saveDataToFile;
boolean createGraphModel;
+
+ /** When set to true, ignore any callstack information. Can be used decrease memory consumption of the model */
+ boolean ignoreCallstacks;
+
+ /** Callstacks will be read later on demand directly from file */
+ private boolean deferCallstacks;
+ /** file position showing current write position, this is saved in BaseInfo for deferred callstack reading */
+ private long filePos;
+
+ long lastTime = 0;
+ private int lineBreakSize;
+
+
/**
* Constructor.
- * @param saveData Need to save data to file.
+ *
+ * @param saveData
+ * if true, save PCSS statements to file. Typical use case is for
+ * TraceWrapper
+ * @param createModel
+ * boolean indicating whether to create a graph model. Used to
+ * improve performance.
+ * @param deferCallstackReading
+ * true, if callstack reading is to be done later. This requires
+ * saving the file position during parse phase, so saveData must
+ * be true or use constructor with FileChannel.
*/
- public ParseAnalyzeData(boolean saveData, boolean createModel) {
+ public ParseAnalyzeData(boolean saveData, boolean createModel, boolean deferCallstackReading) {
+ this(saveData, createModel, deferCallstackReading, 0);
+ }
+
+ /**
+ * Constructor. Use this constructor when working with deferred callstacks and not
+ * saving an output file.
+ *
+ * @param saveData
+ * if true, save PCSS statements to file. Typical use case is for
+ * TraceWrapper
+ * @param createModel
+ * boolean indicating whether to create a graph model. Used to
+ * improve performance.
+ * @param deferCallstackReading
+ * true, if callstack reading is to be done later. This requires
+ * saving the file position during parse phase, so saveData must
+ * be true or use constructor with FileChannel.
+ * @param lineBreakSize
+ * Size of line break, usually 1 for device-side file, and 2 for host-side file
+ */
+ public ParseAnalyzeData(boolean saveData, boolean createModel, boolean deferCallstackReading, int lineBreakSize) {
+
+ if (deferCallstackReading && !saveData && lineBreakSize == 0){
+ throw new IllegalArgumentException("linebreak size must be specified when trying to use deferred callstack reading with a .dat input file ");
+ }
processStart = new Hashtable<String, Integer>();
processEnd = new ArrayList<Integer>();
processes = new Hashtable<Integer, ProcessInfo>();
processList = new ArrayList<ProcessInfo>();
- allocCache = new Hashtable<Long, AllocInfo>();
saveDataToFile = saveData;
- dllLoadCache = new Hashtable<Long, DllLoad>();
- freeCache = new Hashtable<Long, FreeInfo>();
+ deferCallstacks = deferCallstackReading; //orig data input might be streamed through TraceWrapper
createGraphModel = createModel;
+ ignoreCallstacks = !createGraphModel ;
+ if (!ignoreCallstacks && !deferCallstacks){
+ allocCache = new Hashtable<Long, AllocInfo>();
+ freeCache = new Hashtable<Long, FreeInfo>();
+ remainingCallstacksMap = new HashMap<BaseInfo, Integer>();
+ dllLoadCache = new Hashtable<Long, DllLoad>();
+ }
+ filePos = deferCallstacks ? 0 : -1;//set to beginning of file if applicable
+ this.lineBreakSize = lineBreakSize;
}
-
+
/**
* Add one dllLoad object to process related list
*
@@ -177,6 +244,7 @@
// clear file and fis
file = null;
fis = null;
+ filePos = 0;
}
} catch (IOException ioe) {
ioe.printStackTrace();
@@ -207,9 +275,18 @@
processes.clear();
processStart.clear();
processEnd.clear();
- allocCache.clear();
- freeCache.clear();
- dllLoadCache.clear();
+ if (allocCache != null){
+ allocCache.clear();
+ }
+ if (freeCache != null){
+ freeCache.clear();
+ }
+ if (dllLoadCache != null){
+ dllLoadCache.clear();
+ }
+ if (remainingCallstacksMap != null){
+ remainingCallstacksMap.clear();
+ }
}
/**
@@ -322,6 +399,7 @@
*
* @param data
* File name to be used
+ * @return true on success
*/
public final boolean parse(final String data) {
@@ -333,6 +411,8 @@
//some unexpected error occurs
return true;
}
+
+
// if data must be saved to project group\atool_temp folder
if(saveDataToFile) {
@@ -346,6 +426,10 @@
if (contains) {
writeDataToFile(data);
}
+
+ if (deferCallstacks && !saveDataToFile){
+ filePos += (data.length()+lineBreakSize);
+ }
return true;
}catch(OutOfMemoryError oome) {
return false;
@@ -374,10 +458,13 @@
//thats why we must check which version is used.
if( processInfo.getTraceDataVersion() > 1 && splittedText.length > 6 ) {
dllLoad.setLoadTime(splittedText[4]);
+ lastTime = dllLoad.getLoadTime();
dllLoad.setStartAddress(splittedText[5]);
dllLoad.setEndAddress(splittedText[6]);
}
else {
+ //load time note present - assume last available time (typically from an alloc or process start)
+ dllLoad.setLoadTime(lastTime);
dllLoad.setStartAddress(splittedText[4]);
dllLoad.setEndAddress(splittedText[5]);
}
@@ -398,9 +485,9 @@
// which is forth item of trace data
if( splitted.length > 3 ) {
String processID = splitted[1];
- FreeInfo freeInfo = new FreeInfo();
+ FreeInfo freeInfo = new FreeInfo(splitted[3]);
freeInfo.setProcessID(processID);
- freeInfo.setMemoryAddress(splitted[3]);
+ freeInfo.setFilePos(-1);//a free doesn't have a callstack
removeMemAddress(freeInfo);
}
}
@@ -408,15 +495,14 @@
/**
* Parse dealloction header from the line
- * @param line Allocation header line
+ * @param splitted Split trace message
*/
private void parseFreeHeader(String[] splitted) {
//get free line info
String processID = splitted[1];
- FreeInfo freeInfo = new FreeInfo();
+ FreeInfo freeInfo = new FreeInfo(splitted[3]);
freeInfo.setProcessID(processID);
-
- freeInfo.setMemoryAddress(splitted[3]);
+ freeInfo.setFilePos(splitted.length > 6 ? filePos : -1);
if( createGraphModel ) {
@@ -426,7 +512,7 @@
ProcessInfo processInfo = processes.get(freeInfo.getProcessID());
traceFileVersion = processInfo.getTraceDataVersion();
}
- // how many callstakc items
+ // how many callstack items
int callstackCount = 0;
// index where the callstack addresses begins
@@ -435,22 +521,27 @@
//if using the new trace file format
if( traceFileVersion > 1 ) {
freeInfo.setTime(splitted[4]);
+ lastTime = freeInfo.getTime();
callstackCount = Integer.parseInt(splitted[5], 16);
startIndex = 6;
}
else {
- callstackCount = Integer.parseInt(splitted[5], 16);
+ callstackCount = Integer.parseInt(splitted[4], 16);
}
- AbstractList<AllocCallstack> callstack = new ArrayList<AllocCallstack>();
- createCallstack(splitted, freeInfo.getProcessID(), callstack, startIndex);
- freeInfo.addCallstack(callstack);
-
- //if this free item contains fragments
- //so we must store this info to cache
- //and rest of the callstack items later
- if( callstackCount > (splitted.length-startIndex) ) {
- freeCache.put(freeInfo.getMemoryAddress(), freeInfo);
+ if (!ignoreCallstacks && !deferCallstacks){
+ AbstractList<AllocCallstack> callstack = new ArrayList<AllocCallstack>();
+ createCallstack(splitted, freeInfo.getProcessID(), callstack, startIndex, lastTime);
+ freeInfo.addCallstack(callstack);
+
+ //if this free item contains fragments
+ //so we must store this info to cache
+ //and rest of the callstack items later
+ if( callstackCount > (splitted.length-startIndex) ) {
+ freeCache.put(freeInfo.getMemoryAddress(), freeInfo);
+ //expect fragments
+ remainingCallstacksMap.put(freeInfo, callstackCount - callstack.size());
+ }
}
}
@@ -462,7 +553,7 @@
/**
* Parse dealloction fragment from the line
- * @param line Allocation fragment line
+ * @param splitted Split trace message
*/
private void parseFreeFragment(String[] splitted)
{
@@ -473,6 +564,7 @@
String memAddr = splitted[3];
Long memoryAddress =Long.parseLong(memAddr, 16);
Long time = Long.parseLong(splitted[4],16);
+ lastTime = time;
String packetNumber = splitted[5];
//if cache contains corresponding free info
@@ -480,44 +572,75 @@
FreeInfo info = freeCache.get(memoryAddress);
if (info.getMemoryAddress() == memoryAddress && info.getTime() == time ) {
AbstractList<AllocCallstack> callstack = new ArrayList<AllocCallstack>();
- createCallstack(splitted, processId, callstack, 6);
+ createCallstack(splitted, processId, callstack, 6, time);
info.updateFragment(callstack, packetNumber);
+
+ int callstackCount = callstack.size();
+ int remaining = remainingCallstacksMap.get(info);
+ remaining -= callstackCount;
+ if (remaining <= 0){
+ remainingCallstacksMap.remove(info);
+ freeCache.remove(info);
+ info.finaliseCallstack();
+ } else {
+ remainingCallstacksMap.put(info, remaining);
+ }
}
+
}
}
}
}
/**
- * Remove dll load from the list.
+ * Mark dll as unloaded
* This provides functionality for dynamically loaded dll loads
- * @param dllLoad DllLoad item to unload
+ * @param lineFragments elements of text to parse for unloading dll
*/
- private void unloadDll( DllLoad dllLoad )
+ private void unloadDll(String[] lineFragments)
{
- if (processes.containsKey(dllLoad.getProcessID())) {
- ProcessInfo tempProcessInfo = processes.get(dllLoad.getProcessID());
- tempProcessInfo.unloadOneDll(dllLoad);
+ int processID = Integer.parseInt(lineFragments[1], 16);
+
+ if(processes.containsKey(processID)) {
+ ProcessInfo processInfo = processes.get(processID);
+ String dllName = lineFragments[3];
+ //timestamp only exists for more recent trace versions
+ long dllUnloadTime;
+ long startAddr;
+ long endAddr;
+
+ if( processInfo.getTraceDataVersion() > 1 && lineFragments.length > 6 ) {
+ dllUnloadTime = Long.parseLong(lineFragments[4], 16);
+ lastTime = dllUnloadTime;
+ startAddr = Long.parseLong(lineFragments[5], 16);
+ endAddr = Long.parseLong(lineFragments[6], 16);
+ }
+ else {
+ //load time note present - assume last available time (typically from an alloc or process start)
+ dllUnloadTime = lastTime;
+ startAddr = Long.parseLong(lineFragments[4], 16);
+ endAddr = Long.parseLong(lineFragments[5], 16);
+ }
+
+ ProcessInfo p = processes.get(processID);
+ DllLoad dll = p.unloadOneDll(dllName, startAddr, endAddr, dllUnloadTime);
+
//remove found dll load item from cache
- for( java.util.Enumeration<Long> e = dllLoadCache.keys(); e.hasMoreElements();)
- {
- Long key = e.nextElement();
- DllLoad tempDllLoad = dllLoadCache.get(key);
-
- // if values equals remove it from the list
- if (tempDllLoad.getProcessID() == dllLoad.getProcessID() && tempDllLoad.getStartAddress() == dllLoad.getStartAddress()
- && tempDllLoad.getEndAddress() == dllLoad.getEndAddress() && tempDllLoad.getName() == tempDllLoad.getName()) {
- dllLoadCache.remove(key);
+ if (!ignoreCallstacks && !deferCallstacks && dll != null){
+ for (Entry<Long, DllLoad> entry : dllLoadCache.entrySet()) {
+ if (entry.getValue().equals(dll)){
+ dllLoadCache.remove(entry.getKey());
+ System.out.println("dllLoadCache.removedEntry for"+dll.getName());
+ }
}
}
-
}
}
/**
* Parse allocation header info from the line
- * @param line Allocation line
+ * @param splitted Split trace message
*/
private void parseAllocHeader(String[] splitted)
{
@@ -525,20 +648,29 @@
String procID = splitted[1];
int processID = Integer.parseInt(procID, 16);
if (processes.containsKey(processID)) {
- AllocInfo oneAlloc = new AllocInfo();
+ AllocInfo oneAlloc = new AllocInfo(splitted[3]);
oneAlloc.setProcessID(procID);
- oneAlloc.setMemoryAddress(splitted[3]);
+ oneAlloc.setFilePos(splitted.length > 6 ? filePos : -1);
if( createGraphModel ) {
oneAlloc.setTime(splitted[4]);
+ lastTime = oneAlloc.getTime();
oneAlloc.setSizeInt(Integer.parseInt(splitted[5], 16));
// if one trace message contains callstack
- if (splitted.length > 6) {
+ if (!ignoreCallstacks && !deferCallstacks && splitted.length > 6) {
+
+ int callstackSize = Integer.parseInt(splitted[6], 16);
AbstractList<AllocCallstack> callstack = new ArrayList<AllocCallstack>();
- createCallstack(splitted, processID, callstack, 7);
+ createCallstack(splitted, processID, callstack, 7, oneAlloc.getTime());
oneAlloc.addCallstack(callstack);
- allocCache.put(oneAlloc.getMemoryAddress(), oneAlloc);
+
+ callstackSize -= callstack.size();
+ if (callstackSize > 0){
+ //expect fragments
+ remainingCallstacksMap.put(oneAlloc, callstackSize);
+ allocCache.put(oneAlloc.getMemoryAddress(), oneAlloc);
+ }
}
}
addMemAddress(oneAlloc);
@@ -552,8 +684,7 @@
/**
* Parse allocation fragment from the line
*
- * @param line
- * Allocation fragment line
+ * @param splitted Split trace message
*/
private void parseAllocFragment(String[] splitted) {
if( createGraphModel ) {
@@ -561,16 +692,28 @@
int processId = Integer.parseInt(procId, 16);
if (processes.containsKey(processId)) {
String memAddr = splitted[3];
- Long memoryAddress = Long.parseLong(memAddr,16);
- Long time = Long.parseLong(splitted[4],16);
+ long memoryAddress = Long.parseLong(memAddr,16);
+ long time = Long.parseLong(splitted[4],16);
+ lastTime = time;
String packetNumber = splitted[5];
if (allocCache.containsKey(memoryAddress)) {
AllocInfo info = allocCache.get(memoryAddress);
if (info.getMemoryAddress() == memoryAddress && info.getTime() == time) {
AbstractList<AllocCallstack> callstack = new ArrayList<AllocCallstack>();
- createCallstack(splitted, processId, callstack, 6);
+ createCallstack(splitted, processId, callstack, 6, time);
info.updateFragment(callstack, packetNumber);
+
+ int callstackCount = callstack.size();
+ int remaining = remainingCallstacksMap.get(info);
+ remaining -= callstackCount;
+ if (remaining <= 0){
+ remainingCallstacksMap.remove(info);
+ info.finaliseCallstack();
+ allocCache.remove(info);
+ } else {
+ remainingCallstacksMap.put(info, remaining);
+ }
}
}
}
@@ -589,15 +732,14 @@
* @param startIndex
* Index where to start parse callstack values
*/
- private void createCallstack(String[] splitted, int processId, AbstractList<AllocCallstack> callstack, int startIndex) {
+ private void createCallstack(String[] splitted, int processId, AbstractList<AllocCallstack> callstack, int startIndex, long time) {
// append whole callstack as a one memory address
for (int i = startIndex; i < splitted.length; i++) {
try{
- AllocCallstack allocCAll = new AllocCallstack();
- allocCAll.setMemoryAddress(splitted[i]);
+ AllocCallstack allocCAll = new AllocCallstack(splitted[i]);
// define dll load for current alloc
- DllLoad dllLoad = getDllLoadName(processId, Long.parseLong(splitted[i],16));
+ DllLoad dllLoad = getDllLoadName(processId, Long.parseLong(splitted[i],16), time);
if( dllLoad != null ) {
allocCAll.setDllLoad(dllLoad);
callstack.add(allocCAll);
@@ -617,30 +759,28 @@
* message whole callstack to one memory address. This memory address is
* used to calculate most used memory allocation location.
*
- * @param line
- * One trace message
+ * @param splitted Split trace message
*/
private void parseMemAddressesFromLine(String[] splitted) {
- //TODO
String processID = splitted[1];
if (processes.containsKey(processID)) {
- AllocInfo oneAlloc = new AllocInfo();
+ AllocInfo oneAlloc = new AllocInfo(splitted[3]);
oneAlloc.setProcessID(processID);
- oneAlloc.setMemoryAddress(splitted[3]);
+ oneAlloc.setFilePos(splitted.length > 5 ? filePos : -1);
oneAlloc.setTime(splitted[4]);
+ lastTime = oneAlloc.getTime();
oneAlloc.setSizeInt(Integer.parseInt(splitted[5], 16));
// if one trace message contains callstack
- if (splitted.length > 5) {
+ if (!ignoreCallstacks && !deferCallstacks && splitted.length > 5) {
AbstractList<AllocCallstack> callstack = new ArrayList<AllocCallstack>();
// append whole callstack as a one memory address
for (int i = 6; i < splitted.length; i++) {
- AllocCallstack allocCAll = new AllocCallstack();
- allocCAll.setMemoryAddress(splitted[i]);
+ AllocCallstack allocCAll = new AllocCallstack(splitted[i]);
// define dll load for current alloc
- DllLoad dllLoad = getDllLoadName(oneAlloc.getProcessID(), allocCAll.getMemoryAddress());
+ DllLoad dllLoad = getDllLoadName(oneAlloc.getProcessID(), allocCAll.getMemoryAddress(), lastTime);
if (dllLoad != null) {
allocCAll.setDllLoad(dllLoad);
}
@@ -648,8 +788,8 @@
callstack.add(allocCAll);
}
oneAlloc.addCallstack(callstack);
- addMemAddress(oneAlloc);
}
+ addMemAddress(oneAlloc);
}
}
@@ -663,10 +803,8 @@
* Memory address
* @return DllLoad item if found otherwise null
*/
- private DllLoad getDllLoadName(int processId, Long memoryAddress) {
+ private DllLoad getDllLoadName(int processId, Long memoryAddress, long time) {
if (processes.containsKey(processId)) {
- ProcessInfo tempProcessInfo = processes.get(processId);
- Hashtable<String, DllLoad> loads = tempProcessInfo.getDllLoads();
// check does cache contains already corresponding item
if (dllLoadCache.containsKey(memoryAddress)) {
@@ -674,20 +812,13 @@
}
// no item found in the cache loop thru the loaded dlls
- for (java.util.Enumeration<String> e = loads.keys(); e.hasMoreElements();) {
- try {
- String key = e.nextElement();
- DllLoad oneLoad = loads.get(key);
- Long start = oneLoad.getStartAddress();
- Long end = oneLoad.getEndAddress();
- Long actual = memoryAddress;
- if (actual >= start && actual <= end) {
- // dll load found => save it to cache and return it
- dllLoadCache.put(memoryAddress, oneLoad);
- return oneLoad;
- }
- } catch (java.lang.NumberFormatException nfe) {
- // trace message corrupt?
+ ProcessInfo p = processes.get(processId);
+
+ for (DllLoad oneLoad : p.getDllLoads()) {
+ if (memoryAddress >= oneLoad.getStartAddress() && memoryAddress <= oneLoad.getEndAddress() && time >= oneLoad.getLoadTime() && time <= oneLoad.getUnloadTime()) {
+ // dll load found => save it to cache and return it
+ dllLoadCache.put(memoryAddress, oneLoad);
+ return oneLoad;
}
}
}
@@ -747,13 +878,17 @@
parseFreeHeader(lineFragments);
break;
case ALLOCF:
- parseAllocFragment(lineFragments);
+ if (!ignoreCallstacks && !deferCallstacks){
+ parseAllocFragment(lineFragments);
+ }
break;
case FREEF:
- parseFreeFragment(lineFragments);
+ if (!ignoreCallstacks && !deferCallstacks){
+ parseFreeFragment(lineFragments);
+ }
break;
case DLL_LOAD:
- if(createGraphModel) {
+ if(createGraphModel && !ignoreCallstacks) {
dllLoad = new DllLoad();
dllLoad.setProcessID(lineFragments[1]);
dllLoad.setName(lineFragments[3]);
@@ -762,18 +897,15 @@
}
break;
case DLL_UNLOAD:
- if(createGraphModel) {
- dllLoad = new DllLoad();
- dllLoad.setProcessID(lineFragments[1]);
- dllLoad.setName(lineFragments[3]);
- fillDllLoadInfo(dllLoad, lineFragments);
- unloadDll(dllLoad);
+ if(createGraphModel && !ignoreCallstacks) {
+ unloadDll(lineFragments);
}
break;
default:
// ignore this line
break;
}
+
}catch(Exception e) {
Activator.getDefault().log(IStatus.ERROR, "Error while parsing data", e);
}
@@ -798,12 +930,14 @@
if (processes.containsKey(processId)) {
if( lineFragments.length > 4 ){
//check is ABNORMAL process end and that there are enough data to parse
+ ProcessInfo p = processes.get(processId);
if( lineFragments[4].equals(KEYWORD_ABNORMAL) && lineFragments.length > 5 ) {
- processes.get(processId).setEndTime(lineFragments[5]);
+ p.setEndTime(lineFragments[5]);
}
else {
- processes.get(processId).setEndTime(lineFragments[4]);
+ p.setEndTime(lineFragments[4]);
}
+ lastTime = p.getEndTime();
}
@@ -836,7 +970,9 @@
// clear the founded dll load items list
// this prevent that results between runs do not mixed up
- dllLoadCache.clear();
+ if (dllLoadCache != null){
+ dllLoadCache.clear();
+ }
}
}
@@ -858,6 +994,7 @@
if (lineFragments.length > 5) {
processInfo.setStartTime(lineFragments[5]);
+ lastTime = processInfo.getStartTime();
}
// set trace data version number
@@ -924,10 +1061,21 @@
// write data
fis.write(dataAndLineFeed.getBytes("UTF-8"));
+ filePos = deferCallstacks ? fis.getChannel().position() : -1;
}
} catch (IOException ioe) {
return;
}
}
+
+ /**
+ * Returns true if callstack reading from file is done
+ * on demand; false if callstacks are made available during parsing
+ * phase.
+ * @return true for deferred callstack reading
+ */
+ public boolean hasDeferredCallstacks(){
+ return deferCallstacks;
+ }
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ParseXMLFileSAX.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ParseXMLFileSAX.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -102,13 +102,21 @@
/** xml file path. */
private final String filePath;
- /** Do we parsing module leak summary field */
+ /**
+ * Flag to demonstrate that is the memory leak summary parsing active.
+ * If this flag is set to False, then information is stored to the handle leak summary object,
+ * otherwise information is stored to the memory leak summary object.
+ */
private boolean moduleLeakActive = true;
/** List of modules */
private final AbstractList<String> moduleList;
- /** Do we parsing subtest info just now */
+ /**
+ * Is subtest related information parsing active.
+ * If this flag is set to true all the information (such as
+ * memory leaks etc) is stored to the subtest object.
+ */
private boolean parsingSubtest = false;
/** Project reference */
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ProjectResults.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ProjectResults.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -24,7 +24,9 @@
import java.util.Locale;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IStatus;
+import com.nokia.s60tools.analyzetool.Activator;
import com.nokia.s60tools.analyzetool.global.Util;
/**
@@ -87,11 +89,11 @@
}
/**
- * Check that contains given project some data.
+ * Checks is there stored results available for the given project reference.
*
* @param project
* Project reference
- * @return True if project contains data, otherwise False
+ * @return True if project contains results, otherwise False
*/
public final boolean contains(final IProject project) {
if (project == null) {
@@ -292,16 +294,27 @@
*/
public void setProjectModules(IProject project, AbstractList<MMPInfo> mmps, AbstractList<String> modules)
{
- Iterator<String> iterModules = modules.iterator();
- AbstractList<String> unknownComponents = new ArrayList<String>();
- while( iterModules.hasNext() ) {
- String moduleName = iterModules.next();
- boolean build = Util.isModulePartOfProject(mmps, moduleName);
- if( !build ) {
- unknownComponents.add(moduleName);
+ try{
+ if( modules.isEmpty() || mmps.isEmpty() ) {
+ return;
}
+ Iterator<String> iterModules = modules.iterator();
+ AbstractList<String> unknownComponents = new ArrayList<String>();
+ while( iterModules.hasNext() ) {
+ String moduleName = iterModules.next();
+ boolean build = Util.isModulePartOfProject(mmps, moduleName);
+ if( !build ) {
+ unknownComponents.add(moduleName);
+ }
+ }
+ setProjectUnknownModules(project, unknownComponents);
}
- setProjectUnknownModules(project, unknownComponents);
+ catch(Exception e)
+ {
+ Activator.getDefault().log(IStatus.ERROR, "Can not set project modules", e);
+ }
+
+
}
/**
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ResultsBase.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/ResultsBase.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/RunResults.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/RunResults.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/SimpleCallstackManager.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Definitions for the class ReadFile
+ *
+ */
+package com.nokia.s60tools.analyzetool.engine;
+
+import java.io.IOException;
+import java.util.List;
+
+import com.nokia.s60tools.analyzetool.engine.statistic.AllocCallstack;
+import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
+
+/**
+ * This class supports the "old" way of reading callstacks from BaseInfo directly.
+ * This requires that callstack information is filled in during the initial parsing phase
+ *
+ */
+public class SimpleCallstackManager implements ICallstackManager{
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.statistic.ICallstackManager#readCallstack(com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo)
+ */
+ public List<AllocCallstack> readCallstack(BaseInfo baseInfo)
+ throws IOException {
+ return baseInfo.getCallstack();
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.statistic.ICallstackManager#hasCallstack(com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo)
+ */
+ public boolean hasCallstack(BaseInfo baseInfo) {
+ return baseInfo.getCallstack() != null && baseInfo.getCallstack().size() > 0;
+ }
+
+}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/Subtest.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/Subtest.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/UseAtool.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/UseAtool.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -41,7 +41,7 @@
import com.nokia.s60tools.analyzetool.global.Util;
/**
- * Class to use atool.exe Atool.exe is usually used in command prompt so that's
+ * Class to use atool.exe. Atool.exe is usually used in command prompt so that's
* why we executes atool commands with using CarbideCommandLauncher class.
*
* @author kihe
@@ -61,7 +61,7 @@
}
/**
- * Check data file type Gets first line of file and compares that to
+ * Check data file type. Gets first line of file and compares that to
* predefined constants.
*
* @param path
@@ -308,7 +308,7 @@
/**
* Sets data file name and path
- * @param dataFileName Data file name and path
+ * @param newDataFileName Data file name and path
*/
private void setDataFileName(String newDataFileName) {
dataFileName = newDataFileName;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides methods to parse trace messages and creates model for memory leak results.
+*/
+package com.nokia.s60tools.analyzetool.engine;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/AllocCallstack.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/AllocCallstack.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -14,6 +14,7 @@
* Description: Definitions for the class AllocCallstack
*
*/
+
package com.nokia.s60tools.analyzetool.engine.statistic;
/**
@@ -24,26 +25,25 @@
public class AllocCallstack {
/** Callstack memory address */
- Long memoryAddress;
+ long memoryAddress;
/** Dll name where this callstack belongs*/
DllLoad dllLoad;
/**
- * Returns memory address.
- * @return Memory address
+ * Constructor
+ * @param newMemoryAddress the memory address for this allocation
*/
- public Long getMemoryAddress() {
- return memoryAddress;
+ public AllocCallstack(String newMemoryAddress) {
+ this.memoryAddress = Long.parseLong(newMemoryAddress,16);
}
/**
- * Sets memory address
- * @param newMemoryAddress Memory address
+ * Returns memory address as decimal value.
+ * @return Memory address
*/
- public void setMemoryAddress(String newMemoryAddress) {
- Long iValue = Long.parseLong(newMemoryAddress,16);
- this.memoryAddress = iValue;
+ public long getMemoryAddress() {
+ return memoryAddress;
}
/**
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/AllocInfo.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/AllocInfo.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -25,6 +25,14 @@
*/
public class AllocInfo extends BaseInfo {
+ /**
+ * Constructor
+ * @param memoryAddress memory address for this allocation
+ */
+ public AllocInfo(String memoryAddress) {
+ super(memoryAddress);
+ }
+
private FreeInfo freedBy = null;
/**
@@ -50,4 +58,17 @@
public boolean isFreed() {
return this.freedBy != null;
}
+
+ @Override
+ public String toString() {
+ return String.format("AllocInfo [%s freedBy=[%s]]", super.toString(), freedByToString());
+ }
+
+ private String freedByToString(){
+ if (freedBy == null){
+ return "null";
+ }
+
+ return String.format("addr=0x%08X time=%s", freedBy.getMemoryAddress(), freedBy.getTime());
+ }
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/BaseInfo.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/BaseInfo.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -19,8 +19,9 @@
import java.util.AbstractList;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Hashtable;
-import java.util.Iterator;
+import java.util.List;
/**
* Base class for {@link AllocInfo} and {@link FreeInfo}
@@ -29,62 +30,64 @@
*
*/
public class BaseInfo {
-
+
+ private List<AllocCallstack> callstacks = null;
+
/**
* Cache for callstack items. Used when allocation fragment is parsed wrong
* order.
*/
- private final Hashtable<Integer, AbstractList<AllocCallstack>> callstackCache;
+ private Hashtable<Integer, AbstractList<AllocCallstack>> callstackCache = null;
/** Memory address of this memory allocation. */
- private Long memoryAddress;
+ private long memoryAddress;
/** Memory allocation process id. */
private int processID;
/** Allocation time */
- private Long time;
+ private long time;
/** Total memory size at this time */
- private int totalMemory = 0;
- private int size = 0;
+ private int totalMemory;
+ private int size;
+
+ /** file position to defer callstack reading */
+ private long filePos;
/**
* Constructor
+ * @param memoryAddress The address for this memory operation
*/
- public BaseInfo() {
- callstackCache = new Hashtable<Integer, AbstractList<AllocCallstack>>();
+ public BaseInfo(String memoryAddress) {
+ this.memoryAddress = Long.parseLong(memoryAddress, 16);
}
/**
- * Sets memory allocation callstack
+ * Sets memory allocation callstack. Use this method
+ * only for the first set of callstacks.
*
* @param callstack
* Memory allocation callstack
*/
public void addCallstack(AbstractList<AllocCallstack> callstack) {
- callstackCache.put(0, callstack);
+ if (callstack.size() > 0){
+ callstacks = new ArrayList<AllocCallstack>(callstack);
+ }
}
/**
- * Returns memory allocation callstack.
- *
+ * Returns memory allocation callstack. This method should only be called
+ * after all data has finished loading.
+ *
* @return Callstack of memory allocation
*/
- public AbstractList<AllocCallstack> getCallstack() {
- AbstractList<AllocCallstack> wholeCallstack = new ArrayList<AllocCallstack>();
- int callstacksize = callstackCache.size();
- for (int i = 0; i < callstacksize; i++) {
- AbstractList<AllocCallstack> tempCallstack = callstackCache
- .get(i);
- if (tempCallstack == null || tempCallstack.isEmpty())
- continue;
- Iterator<AllocCallstack> iterCall = tempCallstack.iterator();
- while (iterCall.hasNext()) {
- wholeCallstack.add(iterCall.next());
- }
- }
- return wholeCallstack;
+ public List<AllocCallstack> getCallstack() {
+
+ //we assume all data has been loaded at this point
+ finaliseCallstack();
+
+ return callstacks == null ? Collections.<AllocCallstack>emptyList() : Collections.unmodifiableList(callstacks);
}
/**
@@ -92,7 +95,7 @@
*
* @return Memory address
*/
- public Long getMemoryAddress() {
+ public long getMemoryAddress() {
return memoryAddress;
}
@@ -110,20 +113,8 @@
*
* @return Allocation time
*/
- public Long getTime() {
- return time == null ? 0 : time;
- }
-
-
- /**
- * Sets memory address
- *
- * @param newMemoryAddress
- * Memory address
- */
- public void setMemoryAddress(String newMemoryAddress) {
- Long lValue = Long.parseLong(newMemoryAddress, 16);
- this.memoryAddress = lValue;
+ public long getTime() {
+ return time;
}
/**
@@ -144,11 +135,15 @@
* Allocation time
*/
public void setTime(String newTime) {
- Long lValue = Long.parseLong(newTime, 16);
+ long lValue = Long.parseLong(newTime, 16);
this.time = lValue;
}
- public void setTime(Long newTime)
+ /**
+ * Sets the timestamp of event occurrence
+ * @param newTime
+ */
+ public void setTime(long newTime)
{
this.time = newTime;
}
@@ -164,12 +159,47 @@
*/
public void updateFragment(AbstractList<AllocCallstack> callstack,
String packetNumber) {
- callstackCache.put(Integer.parseInt(packetNumber, 16), callstack);
+ int pck = Integer.parseInt(packetNumber, 16);
+ if (pck == 1){
+ //special case; this can be added to the end of the list straight away
+ callstacks.addAll(callstack);
+ } else {
+ //packages may come out of order; this is managed in the callstackCache
+ if (callstackCache == null){
+ callstackCache = new Hashtable<Integer, AbstractList<AllocCallstack>>();
+ }
+ callstackCache.put(pck, callstack);
+ }
+ }
+
+ /**
+ * Optimises internal callstack data structures.
+ * Should only be called after all data for this memory operation
+ * has been loaded (i.e. all fragments)
+ */
+ public void finaliseCallstack(){
+ if (callstacks == null && callstackCache != null){
+ throw new IllegalStateException(); //first set of callstacks should always be in callstacks
+ }
+
+ if (callstackCache != null){
+ int size = callstackCache.size();
+ int i = 2;
+ while(size != 0){
+ AbstractList<AllocCallstack> nextCallStacks = callstackCache.get(i);
+ if (nextCallStacks != null){
+ size --;
+ callstacks.addAll(nextCallStacks);
+ } //TODO else: missing callstack: shall we report it or log it?
+ i++;
+ }
+ callstackCache = null;
+ }
}
/**
* set total memory used at this time.
- * @param size
+ * @param newSize
*/
public void setTotalMem(int newSize) {
totalMemory = newSize;
@@ -183,11 +213,73 @@
return totalMemory;
}
+ /**
+ * Sets the number of bytes allocated or freed in this memory operation
+ * @param aSize size in bytes
+ */
public void setSizeInt(int aSize) {
size = aSize;
}
+ /**
+ * Gets the number of bytes allocated or freed in this memory operation
+ * @return size in bytes
+ */
public int getSizeInt() {
return size;
}
+
+ /**
+ * Getter for file position pointing to first record in
+ * .dat file where callstack for this BaseInfo starts.
+ * @return the file position for the start of callstack information,
+ * or -1 if no callstack available for this BaseInfo
+ */
+ public long getFilePos() {
+ return filePos;
+ }
+
+ /**
+ * Setter for file position pointing to callstack information
+ * @param filePos the file position pointing to start of record with callstack information;
+ * or -1 if no callstack available for this BaseInfo
+ */
+ public void setFilePos(long filePos) {
+ this.filePos = filePos;
+ }
+
+ @Override
+ public String toString() {
+ if (filePos > -1 && (callstacks == null || callstacks.size() == 0)){
+ return String.format(
+ "BaseInfo [memoryAddress=0x%08X, processID=%s, time=%s, size=%s, totalMemory=%s, callstacks on demand]",
+ memoryAddress, processID, time, size, totalMemory);
+
+ } else {
+ return String.format(
+ "BaseInfo [memoryAddress=0x%08X, processID=%s, time=%s, size=%s, totalMemory=%s, callstacks=%s]",
+ memoryAddress, processID, time, size, totalMemory,
+ callstacksToString());
+
+ }
+ }
+
+ private String callstacksToString() {
+ if (callstacks == null){
+ return "null";
+ }
+
+ StringBuilder sb = new StringBuilder();
+ boolean addComma = false;
+ for (AllocCallstack callstack : callstacks) {
+ if (addComma){
+ sb.append(", ");
+ }
+ addComma = true;
+ sb.append(String.format("addr=0x%08X dll=%s", callstack.getMemoryAddress(), callstack.getDllLoad() == null ? "null" : callstack.getDllLoad().getName()));
+ }
+ return sb.toString();
+ }
+
+
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/DllLoad.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/DllLoad.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -26,19 +26,21 @@
public class DllLoad {
/** Dll load end address */
- Long endAddress;
+ private Long endAddress;
/** Time when this dll is loaded. */
- Long loadTime;
+ private long loadTime;
+ /** Time when this dll is unloaded */
+ private long unloadTime = Long.MAX_VALUE;
/** Name of the dll */
- String name;
+ private String name;
/** Process ID of the dll load */
- int processID;
+ private int processID;
/** Dll load start address */
- Long startAddress;
+ private Long startAddress;
/**
* Returns dll load end address
@@ -54,11 +56,20 @@
*
* @return Time when this dll item is loaded
*/
- public Long getLoadTime() {
+ public long getLoadTime() {
return loadTime;
}
/**
+ * Returns unload time of the dll
+ *
+ * @return Time when this dll item is unloaded
+ */
+ public long getUnloadTime() {
+ return unloadTime;
+ }
+
+ /**
* Returns name of the dll load
*
* @return Dll load name
@@ -106,6 +117,24 @@
Long lValue = Long.parseLong(newLoadTime, 16);
this.loadTime = lValue;
}
+ /**
+ * Set load time of this item
+ *
+ * @param loadTime
+ * Time when this dll is loaded.
+ */
+ public void setLoadTime(long loadTime) {
+ this.loadTime = loadTime;
+ }
+ /**
+ * Set unload time of this dll
+ *
+ * @param unloadTime
+ * Time when this dll is unloaded.
+ */
+ public void setUnloadTime(long unloadTime) {
+ this.unloadTime = unloadTime;
+ }
/**
* Sets dll load name
@@ -138,4 +167,13 @@
Long lValue = Long.parseLong(newStartAddress, 16);
this.startAddress = lValue;
}
+
+ @Override
+ public String toString() {
+ return String
+ .format(
+ "DllLoad [name=%s, processID=%d, startAddress=0x%08X, endAddress=0x%08X, loadTime=%s, unloadTime=%s]",
+ name, processID, startAddress, endAddress, loadTime, unloadTime);
+ }
+
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/FreeInfo.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/FreeInfo.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -14,11 +14,12 @@
* Description: Definitions for the class FreeInfo
*
*/
+
package com.nokia.s60tools.analyzetool.engine.statistic;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Set;
@@ -29,17 +30,23 @@
*
*/
public class FreeInfo extends BaseInfo {
- Set<AllocInfo> allocsFreed;
-
+
/**
- * Adds an alloc which has been freed by this Free
- * @param alloc the alloc to add
+ * Constructor
+ * @param memoryAddress memory address for this free
*/
- public void addFreedAlloc(AllocInfo alloc){
- if (allocsFreed == null){
- allocsFreed = new HashSet<AllocInfo>();
- }
- allocsFreed.add(alloc);
+ public FreeInfo(String memoryAddress) {
+ super(memoryAddress);
+ }
+
+ AllocInfo[] allocsFreedArr;
+
+ /**
+ * Sets all AllocInfos which were freed by this free
+ * @param allocs The AllocInfos to set
+ */
+ public void setFreedAllocs(Set<AllocInfo> allocs){
+ allocsFreedArr = allocs.toArray(new AllocInfo[allocs.size()]);
}
/**
@@ -47,7 +54,29 @@
* @return the Collection of AllocInfos freed
*/
public Collection<AllocInfo> getFreedAllocs(){
- return Collections.unmodifiableSet(allocsFreed == null ? new HashSet<AllocInfo>() : allocsFreed);
+ return allocsFreedArr == null ? Collections.<AllocInfo>emptyList() : Arrays.asList(allocsFreedArr);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("FreeInfo [%s allocsFreedArr=[%s]]", super.toString(), allocsFreedArrToString());
+ }
+
+ private String allocsFreedArrToString() {
+ if (allocsFreedArr == null){
+ return "null";
+ }
+
+ StringBuilder sb = new StringBuilder();
+ boolean addComma = false;
+ for (AllocInfo allocInfo : allocsFreedArr) {
+ if (addComma){
+ sb.append(", ");
+ }
+ addComma = true;
+ sb.append(String.format("addr=0x%08X time=%s", allocInfo.getMemoryAddress(), allocInfo.getTime()));
+ }
+ return sb.toString();
}
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/ProcessInfo.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/ProcessInfo.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -14,16 +14,18 @@
* Description: Definitions for the class ProcessInfo
*
*/
+
package com.nokia.s60tools.analyzetool.engine.statistic;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Hashtable;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
+
import com.nokia.s60tools.analyzetool.Activator;
/**
@@ -35,25 +37,25 @@
public class ProcessInfo {
/** List of allocations and frees sorted as they arrive in time */
- AbstractList<BaseInfo> allocsFrees;
+ private AbstractList<BaseInfo> allocsFrees;
/** List of dll loads */
- Hashtable<String, DllLoad> dllLoads;
+ private List<DllLoad> dllLoads;
/** Process id */
- int processID;
+ private int processID;
/** Process Name */
- String processName;
+ private String processName;
/** Process start time */
- Long startTime;
+ private Long startTime;
/** Process start time */
- Long endTime;
+ private Long endTime;
/** Trace data format version number */
- int traceDataVersion = 1;
+ private int traceDataVersion = 1;
/** active allocations account */
private int allocCount = 0;
@@ -69,7 +71,7 @@
* Constructor
*/
public ProcessInfo() {
- dllLoads = new Hashtable<String, DllLoad>();
+ dllLoads = new ArrayList<DllLoad>();
allocsFrees = new ArrayList<BaseInfo>();
allocCount = 0;
potentialLeaksMap = new HashMap<Long, List<AllocInfo>>();
@@ -106,7 +108,15 @@
* One dll load
*/
public void addOneDllLoad(DllLoad dllLoad) {
- dllLoads.put(dllLoad.getName(), dllLoad);
+ //make sure there is no dll with the same details already loaded
+ for (DllLoad dll : dllLoads) {
+ if (dll.getName().equalsIgnoreCase(dllLoad.getName()) && dll.getProcessID() == dllLoad.getProcessID()
+ && dll.getUnloadTime()> dllLoad.getLoadTime()){
+ return;
+ }
+ }
+
+ dllLoads.add(dllLoad);
}
/**
@@ -121,28 +131,29 @@
//remove allocs with the same address from the potential leaks map
Long freeAddr = info.getMemoryAddress();
- List<AllocInfo> allocsSameAddr = potentialLeaksMap.remove(freeAddr);
+ List<AllocInfo> allocsSameAddr = potentialLeaksMap.remove(freeAddr);
if (allocsSameAddr != null && allocsSameAddr.size()>0){
for(AllocInfo allocInfo : allocsSameAddr){
allocInfo.setFreedBy(info);
- info.addFreedAlloc(allocInfo);
allocCount--;
int thisFreedSize = allocInfo.getSizeInt();
freeSize = freeSize + thisFreedSize;
totalMemory = totalMemory - thisFreedSize;
- }
+ }
+ info.setFreedAllocs(new HashSet<AllocInfo>(allocsSameAddr));
}
+
info.setSizeInt(freeSize);
info.setTotalMem(totalMemory);
- if (info.getTime() == null || info.getTime() == 0 ) {
+ if ( info.getTime() == 0 ) {
// support old format
//set time as last operation time or start time.
Long time = getPreviousTime();
if (time == null || time == -1L) {
Activator.getDefault().log(IStatus.WARNING, String.format("AnalyzeTool encountered a process = %s, which starts with FREE.", processID), null);
- time = startTime;
+ time = startTime == null ? 0 : startTime;
}
info.setTime(time);
}
@@ -183,7 +194,7 @@
*
* @return List of dll loads
*/
- public Hashtable<String, DllLoad> getDllLoads() {
+ public List<DllLoad> getDllLoads() {
return dllLoads;
}
@@ -271,7 +282,7 @@
* Process start time
*/
public void setStartTime(String newTime) {
- Long lValue = Long.parseLong(newTime, 16);
+ long lValue = Long.parseLong(newTime, 16);
this.startTime = lValue;
}
@@ -292,17 +303,25 @@
traceDataVersion = 1;
}
}
-
/**
- * Unloads one dll load from the stored items
- *
- * @param dllLoad
- * Dll unload item
+ * Marks given dll as unloaded
+ * @param dllName Dll name
+ * @param startAddr memory start address for DLL
+ * @param endAddr memory end address for DLL
+ * @param dllUnloadTime time when DLL is unloaded
+ * @return the dll marked as unloaded, or null if no match found
*/
- public void unloadOneDll(DllLoad dllLoad) {
- if (dllLoads.containsKey(dllLoad.getName())) {
- dllLoads.remove(dllLoad.getName());
+ public DllLoad unloadOneDll(String dllName, long startAddr, long endAddr, long dllUnloadTime) {
+ DllLoad ret = null;
+ for (DllLoad dll : dllLoads) {
+ if (dll.getName().equals(dllName)
+ && dll.getStartAddress().longValue() == startAddr
+ && dll.getEndAddress().longValue() == endAddr) {
+ dll.setUnloadTime(dllUnloadTime);
+ ret = dll;
+ }
}
+ return ret;
}
/**
@@ -339,7 +358,7 @@
/**
* get end time of the process
- * @return
+ * @return End time
*/
public Long getEndTime() {
return endTime;
@@ -369,4 +388,5 @@
return highestMemory;
}
+
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/ReadFile.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/ReadFile.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -18,8 +18,10 @@
package com.nokia.s60tools.analyzetool.engine.statistic;
import java.io.BufferedReader;
+import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.AbstractList;
@@ -34,14 +36,13 @@
public class ReadFile {
/** Parser */
- ParseAnalyzeData parser;
+ private ParseAnalyzeData parser;
/**
* Constructor
*/
public ReadFile()
{
- parser = new ParseAnalyzeData(false, true);
}
@@ -71,8 +72,10 @@
// get input
fis = new FileInputStream(file);
input = new BufferedReader(new InputStreamReader(fis,"UTF-8"));
+ int linebreakSize = lineBreakSize(file); //important to determine file position for deferred callstack reading
// get first line of data file
+ parser = new ParseAnalyzeData(false, true, true, linebreakSize);
String line = null;
// go thru file
while ((line = input.readLine()) != null) {
@@ -126,4 +129,44 @@
parser.finish();
}
+
+ /**
+ * Returns true if callstack reading from file is done
+ * on demand; false if callstacks are made available during parsing
+ * phase.
+ * @return true for deferred callstack reading
+ */
+ public boolean hasDeferredCallstacks(){
+ return parser.hasDeferredCallstacks();
+ }
+
+ /**
+ * Determines the size of line breaks in the given file. File produced on the device-side
+ * should have while Windows files have.
+ * @param aFile the file to check
+ * @return 1 or 2 for size of line break, or 0 if it cannot be determined
+ */
+ private static int lineBreakSize(File aFile){
+ int ret = 0;
+ try {
+ BufferedReader br = new BufferedReader(new FileReader( aFile.getPath() ));
+
+ int ch;
+ int cnt = 0;
+ while ((ch = br.read()) >=0){
+ cnt ++;
+ if (ch == '\r'){
+ ret ++;
+ } else if (ch == '\n'){
+ ret ++;
+ break;
+ }
+ }
+
+ } catch (IOException e) {
+ // do nothing, a return value of 0 will indicate some problem
+ }
+ return ret;
+ }
+
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/SourceFile.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/SourceFile.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/SymReader.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/SymReader.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -15,7 +15,6 @@
*
*/
-
package com.nokia.s60tools.analyzetool.engine.statistic;
import java.io.File;
@@ -286,7 +285,7 @@
if (manager == null) {
//it's strange that we need to create another Object here so that DE releases the
//targets
- manager = new SymbolReaderManager().getSymbolReaderManager();
+ manager = SymbolReaderManager.getSymbolReaderManager();
}
Set<String> keySet = allreayOpen.keySet();
for (String moduleName : keySet) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/engine/statistic/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides model for memory statistics results.
+*/
+package com.nokia.s60tools.analyzetool.engine.statistic;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/global/Constants.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/global/Constants.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -28,9 +28,9 @@
public static enum ACTIONS {
RUN_VIEW_MEM_LEAKS, RUN_BUILD, RUN_CLEAN
}
-
public static enum Operation {
- PROCESS_START, PROCESS_END, ALLOC, FREE, ALLOCH, FREEH, ALLOCF, FREEF, DLL_LOAD, DLL_UNLOAD, NOVALUE;
+ PROCESS_START,
+ PROCESS_END, ALLOC, FREE, ALLOCH, FREEH, ALLOCF, FREEF, DLL_LOAD, DLL_UNLOAD, NOVALUE;
public static Operation toOperation(String str) {
try {
@@ -47,6 +47,7 @@
public final static String MAIN_TAB_TITLE = "Results";
public final static String ANALYZE_TOOL_VIEW_ID = "com.nokia.s60tools.analyzetool.ui.MainView";
public final static String ANALYZE_TOOL_PREFS_ID = "com.nokia.s60tools.analyzetool.preferences.AnalyzeToolPreferencePage";
+ public final static String DBGHELPDLL_IS_UP_TO_DATE = "dbghelp.dll is up to date";
/**
* Progress monitor text displayed when AnalyzeTool processing some action
* long time
@@ -170,14 +171,14 @@
public static final String INFO_ALLOCATED_MEM = "Number of memory allocations: ";
public static final String NO_OPENED_FILES = "No recently opened files.";
public static final String STARTING_TRACE = "Starting trace capture";
- /** Tracing utility error information */
- public static final String TRACE_ALLREADY_CONNECTED = "Tracing utility connection reserved for another plug-in.";
- public static final String TRACE_GENERAL_ERROR = "General Tracing utility error.";
- public static final String TRACE_CON_SET_ERROR = "Invalid Tracing utility connection settings.";
+ /** TraceViewer error information */
+ public static final String TRACE_ALLREADY_CONNECTED = "TraceViewer connection reserved for another plug-in.";
+ public static final String TRACE_GENERAL_ERROR = "General TraceViewer error.";
+ public static final String TRACE_CON_SET_ERROR = "Invalid TraceViewer connection settings.";
public static final String TRACE_CANT_FIND_DATAPR = "Cannot find dataprocessor. \nPlease contact the support team.";
public static final String TRACE_ERROR_NONE = "";
- public static final String TRACE_DISC_ERROR = "Error while disconnecting Tracing utility.";
- public static final String TRACE_NOT_FOUND = "Could not load Tracing utility plugin.";
+ public static final String TRACE_DISC_ERROR = "Error while disconnecting TraceViewer.";
+ public static final String TRACE_NOT_FOUND = "Could not load TraceViewer plugin.";
/** Main view tree model related constants */
public static final String HANDLE_LEAK_MODULES_TITLE = "Modules with handle leaks";
@@ -277,6 +278,7 @@
public static final String PREFS_CUSTOM_BUTTON = "Custom size (0-255)";
public static final String PREFS_CS_SIZE_DISABLED_TOOLTIP = "Command line engine version is too old, version must be 1.7.4 or higher";
+
/**Statistics view constants*/
public static final String STATISTICS_TAB_TITLE = "Top allocation locations";
public static final String STATISTICS_SELECT_RUN = "Select run";
@@ -289,6 +291,7 @@
public static final String STATISTICS_GENERATING = "Generating statistics. Please wait...";
public static final String STATISTICS_GENERATING_PROG_TITLE = "Generating statistics";
public static final String GRAPH_GENERATING_PROG_TITLE = "Generating graph model";
+ public static final String GRAPH_LOAD_JOB_TITLE = "AnalyzeTool Loading Graph Data...";
public static final String STATISTICS_NO_STATS = "No statistics available.";
@@ -307,7 +310,7 @@
/** Parser id's to command launcher */
public static final String[] atoolParserIds = new String[] { "com.nokia.s60tools.analyzetool" };
- /** File name which is used when saving captured data thru Tracing utility */
+ /** File name which is used when saving captured data thru TraceViewer */
public static final String FILENAME = "AtoolDataFile.dat";
/** File name which is used when generating memory analysis results */
@@ -400,7 +403,7 @@
/** S60 logging mode data file name */
public static final String LOGGING_S60_PROCESS_NAME = "process_name";
public static final String LOGGING_S60_USER_SPECIFIED = "user_secified";
-
+
/** Save report file types */
public static final int SAVE_REPORT_FILE_DATA = 0;
public static final int SAVE_REPORT_FILE_XML = 1;
@@ -490,6 +493,7 @@
/* Analyze errors */
WRONG_DATA_FILE_VERSION(10),
ANALYZE_ERROR(12),
+ EMPTY_DATA_FILE(13),
SYMBOL_FILE_ERROR(14),
DATA_FILE_EMPTY(31),
DATA_FILE_INVALID(32),
@@ -514,4 +518,13 @@
return code;
}
}
+
+
+ static final String AT_CORE_INCLUDE_FILE_WITH_VERSION_NUMBER[] = {
+ "epoc32\\include\\domain\\osextensions\\analyzetool\\analyzetool.h",
+ "epoc32\\include\\oem\\analyzetool\\analyzetool.h",
+ "epoc32\\include\\platform\\analyzetool\\analyzetool.h"
+ };
+
+ static final String AT_CORE_VERSION_NUMBER_TAG="ANALYZETOOL_CORE_VERSION_FOR_CLE";
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/global/Util.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/global/Util.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -77,1195 +77,1350 @@
/**
* Provides commonly used functions.
- *
+ *
* @author kihe
- *
+ *
*/
-public class Util {
+public final class Util {
- /** Contains user selection in the confirmation dialog. */
- private static boolean ret;
+ /** Contains user selection in the confirmation dialog. */
+ private static boolean ret;
- /** Contains user selection (integer) in the selection dialog. */
- private static int retValue;
+ /** Contains user selection (integer) in the selection dialog. */
+ private static int retValue;
+
+ /** Contains user selection (String) in the selection dialog. */
+ private static String userSelection = "";
- /** Contains user selection (String) in the selection dialog. */
- private static String userSelection = "";
+ /** Contains StringBuffer size. */
+ private static int bufferSize = 32;
- /** Contains StringBuffer size. */
- private static int bufferSize = 32;
+ // make constructor private so class doesn't get instantiated
+ private Util() {
+ // do nothing by design
+ }
- /**
- * Checks is module built.
- *
- * @param modules
- * Project modules
- * @param oneModuleName
- * Current module
- * @return True if module found and it is build
- */
- public static boolean chechModuleBuildState(
- final AbstractList<MMPInfo> modules, final String oneModuleName) {
- Iterator<MMPInfo> iterModules = modules.iterator();
- while (iterModules.hasNext()) {
- MMPInfo oneMMPInfo = iterModules.next();
- String target = oneMMPInfo.getTarget();
- if (target == null) {
- continue;
- } else if (oneMMPInfo.getTarget().equalsIgnoreCase(oneModuleName)) {
- return oneMMPInfo.isBuildSuccesfully();
- }
+ /**
+ * Checks is module built.
+ *
+ * @param modules
+ * Project modules
+ * @param oneModuleName
+ * Current module
+ * @return True if module found and it is build
+ */
+ public static boolean checkModuleBuildState(
+ final AbstractList<MMPInfo> modules, final String oneModuleName) {
+ Iterator<MMPInfo> iterModules = modules.iterator();
+ while (iterModules.hasNext()) {
+ MMPInfo oneMMPInfo = iterModules.next();
+ String target = oneMMPInfo.getTarget();
+ if (target == null) {
+ continue;
+ } else if (oneMMPInfo.getTarget().equalsIgnoreCase(oneModuleName)) {
+ return oneMMPInfo.isBuildSuccesfully();
+ }
- // target not found try remove {}
- // for example process name is
- // "AToolMemoryLeakerDll2.dll{000a0000}[04463b81]"
- // but target name is AToolMemoryLeakerDll2.dll
- CharSequence brace = "{";
- if (oneModuleName.contains(brace)) {
- // parse braces
- String tmpTargetName = oneModuleName.substring(0, oneModuleName
- .indexOf('{'));
- if (tmpTargetName != null
- && oneMMPInfo.getTarget().equalsIgnoreCase(
- tmpTargetName)) {
- return oneMMPInfo.isBuildSuccesfully();
- }
- }
- }
- return false;
- }
+ // target not found try remove {}
+ // for example process name is
+ // "AToolMemoryLeakerDll2.dll{000a0000}[04463b81]"
+ // but target name is AToolMemoryLeakerDll2.dll
+ CharSequence brace = "{";
+ if (oneModuleName.contains(brace)) {
+ // parse braces
+ String tmpTargetName = oneModuleName.substring(0, oneModuleName
+ .indexOf('{'));
+ if (tmpTargetName != null
+ && oneMMPInfo.getTarget().equalsIgnoreCase(
+ tmpTargetName)) {
+ return oneMMPInfo.isBuildSuccesfully();
+ }
+ }
+ }
+ return false;
+ }
- /**
- * Checks is AnalyzeTool libraries installed from the current SDK.
- *
- * @param cpi
- * {@link ICarbideProjectInfo} reference
- * @return True if libraries are installed otherwise false.
- */
- public static boolean checkAtoolLibs(final ICarbideProjectInfo cpi) {
- // get active platform
- String platform = cpi.getDefaultConfiguration().getPlatformString();
+ /**
+ * Checks is AnalyzeTool libraries installed from the current SDK.
+ *
+ * @param cpi
+ * {@link ICarbideProjectInfo} reference
+ * @return True if libraries are installed otherwise false.
+ */
+ public static boolean checkAtoolLibs(final ICarbideProjectInfo cpi) {
+ // get active platform
+ String platform = cpi.getDefaultConfiguration().getPlatformString();
- // get epoc root
- IPath epocRootPath = EpocEngineHelper.getEpocRootForProject(cpi.getProject());
+ // get epoc root
+ IPath epocRootPath = EpocEngineHelper.getEpocRootForProject(cpi
+ .getProject());
- //check that epocroot path found
- if( epocRootPath == null ) {
- return false;
- }
+ // check that epocroot path found
+ if (epocRootPath == null) {
+ return false;
+ }
- String epocroot = epocRootPath.toOSString();
- boolean found = true;
- StringBuffer fileBuffer = new StringBuffer(bufferSize);
- fileBuffer.append(Constants.CAN_NOT_FIND_LIBRARIES_MARKER);
- fileBuffer.append(": ");
- if ((Constants.BUILD_TARGET_WINSCW).equalsIgnoreCase(platform)) {
- for (int i = 0; i < Constants.atoolLibsSbs2.length; i++) {
- java.io.File file = new java.io.File(epocroot
- + Constants.atoolLibsWinscw[i]);
- if (!file.exists()) {
- found = false;
- fileBuffer.append(epocroot);
- fileBuffer.append(Constants.atoolLibsWinscw[i]);
- fileBuffer.append(' ');
- }
- }
- } else if ((Constants.BUILD_TARGET_ARMV5).equalsIgnoreCase(platform)) {
- if (AnalyzeToolBuilder.isSBSBuildActivated(cpi)) {
- for (int i = 0; i < Constants.atoolLibsSbs2.length; i++) {
- java.io.File file = new java.io.File(epocroot
- + Constants.atoolLibsSbs2[i]);
- if (!file.exists()) {
- found = false;
- fileBuffer.append(epocroot);
- fileBuffer.append(Constants.atoolLibsSbs2[i]);
- fileBuffer.append(' ');
- }
- }
- } else {
- for (int i = 0; i < Constants.atoolLibs.length; i++) {
- java.io.File file = new java.io.File(epocroot
- + Constants.atoolLibs[i]);
- if (!file.exists()) {
- found = false;
- fileBuffer.append(epocroot);
- fileBuffer.append(Constants.atoolLibs[i]);
- fileBuffer.append(' ');
- }
- }
- }
- }
- if (!found) {
- createErrorMarker(cpi.getProject(), fileBuffer.toString());
- }
+ String epocroot = epocRootPath.toOSString();
+ boolean found = true;
+ StringBuffer fileBuffer = new StringBuffer(bufferSize);
+ fileBuffer.append(Constants.CAN_NOT_FIND_LIBRARIES_MARKER);
+ fileBuffer.append(": ");
+ if ((Constants.BUILD_TARGET_WINSCW).equalsIgnoreCase(platform)) {
+ for (int i = 0; i < Constants.atoolLibsSbs2.length; i++) {
+ java.io.File file = new java.io.File(epocroot
+ + Constants.atoolLibsWinscw[i]);
+ if (!file.exists()) {
+ found = false;
+ fileBuffer.append(epocroot);
+ fileBuffer.append(Constants.atoolLibsWinscw[i]);
+ fileBuffer.append(' ');
+ }
+ }
+ } else if ((Constants.BUILD_TARGET_ARMV5).equalsIgnoreCase(platform)) {
+ if (AnalyzeToolBuilder.isSBSBuildActivated(cpi)) {
+ for (int i = 0; i < Constants.atoolLibsSbs2.length; i++) {
+ java.io.File file = new java.io.File(epocroot
+ + Constants.atoolLibsSbs2[i]);
+ if (!file.exists()) {
+ found = false;
+ fileBuffer.append(epocroot);
+ fileBuffer.append(Constants.atoolLibsSbs2[i]);
+ fileBuffer.append(' ');
+ }
+ }
+ } else {
+ for (int i = 0; i < Constants.atoolLibs.length; i++) {
+ java.io.File file = new java.io.File(epocroot
+ + Constants.atoolLibs[i]);
+ if (!file.exists()) {
+ found = false;
+ fileBuffer.append(epocroot);
+ fileBuffer.append(Constants.atoolLibs[i]);
+ fileBuffer.append(' ');
+ }
+ }
+ }
+ }
+ if (!found) {
+ createErrorMarker(cpi.getProject(), fileBuffer.toString());
+ }
- return found;
- }
+ return found;
+ }
- /**
- * Copies stored memory leak analysis file to given folder.
- *
- * @param resultFile
- * Existing results file
- * @param targetPath
- * Where to save xml file
- * @return True if copy success otherwise False
- */
- public static boolean copyFileToFolder(final String resultFile,
- final String targetPath) {
- FileChannel inputChannel = null;
- FileChannel ouputChannel = null;
- FileInputStream inStream = null;
- FileOutputStream outStream = null;
- boolean returnValue = true;
- try {
+ /**
+ * Copies stored memory leak analysis file to given folder.
+ *
+ * @param resultFile
+ * Existing results file
+ * @param targetPath
+ * Where to save xml file
+ * @return True if copy success otherwise False
+ */
+ public static boolean copyFileToFolder(final String resultFile,
+ final String targetPath) {
+ FileChannel inputChannel = null;
+ FileChannel ouputChannel = null;
+ FileInputStream inStream = null;
+ FileOutputStream outStream = null;
+ boolean returnValue = true;
+ try {
+
+ // get channel to existing file
+ inStream = new FileInputStream(resultFile);
+ inputChannel = inStream.getChannel();
+
+ // get channel to new file
+ outStream = new FileOutputStream(targetPath, false);
+ ouputChannel = outStream.getChannel();
- // get channel to existing file
- inStream = new FileInputStream(resultFile);
- inputChannel = inStream.getChannel();
+ // get existing file size
+ final long size = inputChannel.size();
+
+ // position inside the file
+ long position = 0;
- // get channel to new file
- outStream = new FileOutputStream(targetPath, false);
- ouputChannel = outStream.getChannel();
+ // copy file contents if there are data to copy
+ while (position < size) {
+ position += ouputChannel.transferFrom(inputChannel, position,
+ size - position);
+ }
- // get existing file size
- final long size = inputChannel.size();
-
- // position inside the file
- long position = 0;
-
- // copy file contents if there are data to copy
- while (position < size) {
- position += ouputChannel.transferFrom(inputChannel, position,
- size - position);
- }
+ // close opened channels
+ inputChannel.close();
+ inStream.close();
+ ouputChannel.close();
+ outStream.close();
+ } catch (FileNotFoundException fnfe) {
+ returnValue = false;
+ } catch (IOException ioe) {
+ returnValue = false;
+ } finally {
+ try {
+ if (inputChannel != null) {
+ inputChannel.close();
+ inputChannel = null;
+ }
+ } catch (IOException ioe) {
+ returnValue = false;
+ }
- // close opened channels
- inputChannel.close();
- inStream.close();
- ouputChannel.close();
- outStream.close();
- } catch (FileNotFoundException fnfe) {
- returnValue = false;
- } catch (IOException ioe) {
- returnValue = false;
- } finally {
- try {
- if (inputChannel != null) {
- inputChannel.close();
- inputChannel = null;
- }
- } catch (IOException ioe) {
- returnValue = false;
- }
+ try {
+ if (inStream != null) {
+ inStream.close();
+ inStream = null;
+ }
+ } catch (IOException ioe) {
+ returnValue = false;
+ }
+
+ try {
+ if (ouputChannel != null) {
+ ouputChannel.close();
+ ouputChannel = null;
+ }
+ } catch (IOException ioe) {
+ returnValue = false;
+ }
- try {
- if (inStream != null) {
- inStream.close();
- inStream = null;
- }
- } catch (IOException ioe) {
- returnValue = false;
- }
+ try {
+ if (outStream != null) {
+ outStream.close();
+ outStream = null;
+ }
+ } catch (IOException ioe) {
+ returnValue = false;
+ }
+
+ }
+
+ return returnValue;
+ }
- try {
- if (ouputChannel != null) {
- ouputChannel.close();
- ouputChannel = null;
- }
- } catch (IOException ioe) {
- returnValue = false;
- }
-
- try {
- if (outStream != null) {
- outStream.close();
- outStream = null;
- }
- } catch (IOException ioe) {
- returnValue = false;
- }
-
- }
-
- return returnValue;
- }
+ /**
+ * Creates AnalyzeTool related error marker for the selected project.
+ *
+ * @param project
+ * Project reference
+ * @param errorText
+ * Error information
+ */
+ public static void createErrorMarker(final IProject project,
+ final String errorText) {
+ try {
+ // check project validity
+ if (project == null || !project.isOpen()) {
+ return;
+ }
- /**
- * Creates AnalyzeTool related error marker for the selected project.
- *
- * @param project
- * Project reference
- * @param errorText
- * Error information
- */
- public static void createErrorMarker(final IProject project,
- final String errorText) {
- try {
- // check project validity
- if (project == null || !project.isOpen()) {
- return;
- }
+ // create marker for the project
+ IMarker marker = project
+ .createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
+ if (marker.exists()) {
+ // set marker attributes
+ marker.setAttribute(IMarker.SEVERITY, IMarker.PRIORITY_HIGH);
+ marker.setAttribute(IMarker.TEXT, errorText);
+ marker.setAttribute(IMarker.MESSAGE, errorText);
+ }
+ } catch (CoreException ce) {
+ // #ifdef DEBUG
+ ce.printStackTrace();
+ // #endif
+ }
+ }
+
+ /**
+ * Deletes existing data file.
+ *
+ * @param project
+ * Project reference
+ */
+ public static void deleteDataFile(final IProject project) {
+ String bldInfFolder = getBldInfFolder(project, false);
+ String dataFileLocation = bldInfFolder + Constants.FILENAME;
+ java.io.File tmpFile = new java.io.File(dataFileLocation);
+ if (tmpFile.exists()) {
+ tmpFile.delete();
+ }
- // create marker for the project
- IMarker marker = project
- .createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
- if (marker.exists()) {
- // set marker attributes
- marker.setAttribute(IMarker.SEVERITY, IMarker.PRIORITY_HIGH);
- marker.setAttribute(IMarker.TEXT, errorText);
- marker.setAttribute(IMarker.MESSAGE, errorText);
- }
- } catch (CoreException ce) {
- // #ifdef DEBUG
- ce.printStackTrace();
- // #endif
- }
- }
+ String xmlFileLocation = bldInfFolder + Constants.FILENAME_CARBIDE;
+ java.io.File tmpXMLFile = new java.io.File(xmlFileLocation);
+ if (tmpXMLFile.exists()) {
+ tmpXMLFile.delete();
+ }
+
+ tmpFile = null;
+ tmpXMLFile = null;
+ }
- /**
- * Deletes existing data file.
- *
- * @param project
- * Project reference
- */
- public static void deleteDataFile(final IProject project) {
- String bldInfFolder = getBldInfFolder(project, false);
- String dataFileLocation = bldInfFolder + Constants.FILENAME;
- java.io.File tmpFile = new java.io.File(dataFileLocation);
- if (tmpFile.exists()) {
- tmpFile.delete();
- }
+ /**
+ * Open file save dialog.
+ *
+ * @param title
+ * Save dialog title
+ * @param ext
+ * Used extension filters
+ *
+ * @param shell
+ * Used Shell reference
+ *
+ * @return User selected path
+ */
+ public static String fileSaveDialog(final String title, final String[] ext,
+ final Shell shell) {
+ FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
+ fileDialog.setText(title);
+ fileDialog.setFilterExtensions(ext);
+ return fileDialog.open();
+
+ }
- String xmlFileLocation = bldInfFolder + Constants.FILENAME_CARBIDE;
- java.io.File tmpXMLFile = new java.io.File(xmlFileLocation);
- if (tmpXMLFile.exists()) {
- tmpXMLFile.delete();
- }
+ /**
+ * Gets atool.exe installation folder which is specified on preferences
+ * page.
+ *
+ * @return Atool.exe installation folder
+ */
+ public static String getAtoolInstallFolder() {
+ // get preference store
+ IPreferenceStore store = Activator.getPreferences();
- tmpFile = null;
- tmpXMLFile = null;
- }
+ // create new string buffer
+ StringBuffer atoolInstallFolder = new StringBuffer();
+ boolean useInternal = store.getBoolean(Constants.USE_INTERNAL);
- /**
- * Open file save dialog.
- *
- * @param title
- * Save dialog title
- * @param ext
- * Used extension filters
- *
- * @param shell
- * Used Shell reference
- *
- * @return User selected path
- */
- public static String fileSaveDialog(final String title, final String[] ext,
- final Shell shell) {
- FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
- fileDialog.setText(title);
- fileDialog.setFilterExtensions(ext);
- return fileDialog.open();
+ // append atool.exe installation folder
+ String folder = store.getString(Constants.ATOOL_FOLDER);
+ if (useInternal) {
+ atoolInstallFolder.append(getDefaultAtoolLocation());
+ } else if (("").equals(folder)) {
+ store.setValue(Constants.USE_INTERNAL, true);
+ atoolInstallFolder.append(getDefaultAtoolLocation());
+ } else if (folder.equals(Constants.DEFAULT_ATOOL_FOLDER)) {
+ java.io.File file = new java.io.File(Constants.DEFAULT_ATOOL_FOLDER);
+ if (file.exists()) {
+ atoolInstallFolder.append(Constants.DEFAULT_ATOOL_FOLDER);
+ } else {
+ store.setValue(Constants.USE_INTERNAL, true);
+ atoolInstallFolder.append(getDefaultAtoolLocation());
+ }
+ } else {
+ atoolInstallFolder.append(folder);
+ }
+ // append atool.exe to installation path
+ atoolInstallFolder.append("\\atool.exe");
+ return atoolInstallFolder.toString();
+ }
- }
+ /**
+ * Returns atool.exe version number Executes atool.exe via Process class and
+ * parses atool.exe output to get version number.
+ *
+ * @param path
+ * Atool.exe path
+ * @return Atool.exe version number if found otherwise "Not available"
+ */
+ public static String getAtoolVersionNumber(final String path) {
+
+ BufferedInputStream br = null;
- /**
- * Gets atool.exe installation folder which is specified on preferences
- * page.
- *
- * @return Atool.exe installation folder
- */
- public static String getAtoolInstallFolder() {
- // get preference store
- IPreferenceStore store = Activator.getPreferences();
+ try {
+ // used atool.exe location
+ String usedPath = null;
- // create new string buffer
- StringBuffer atoolInstallFolder = new StringBuffer();
+ // if path not given => use default location
+ if (path == null) {
+ usedPath = getDefaultAtoolLocation() + "\\atool.exe";
+ } else if (path.contains("atool.exe")) {
+ usedPath = path;
+ }
+ // else use given location
+ else {
+ usedPath = path + "\\atool.exe";
+ }
- boolean useInternal = store.getBoolean(Constants.USE_INTERNAL);
+ // command
+ String[] args = { "cmd", "/c", usedPath, "-v" };
- // append atool.exe installation folder
- String folder = store.getString(Constants.ATOOL_FOLDER);
- if (useInternal) {
- atoolInstallFolder.append(getDefaultAtoolLocation());
- } else if (("").equals(folder)) {
- store.setValue(Constants.USE_INTERNAL, true);
- atoolInstallFolder.append(getDefaultAtoolLocation());
- } else if (folder.equals(Constants.DEFAULT_ATOOL_FOLDER)) {
- java.io.File file = new java.io.File(Constants.DEFAULT_ATOOL_FOLDER);
- if (file.exists()) {
- atoolInstallFolder.append(Constants.DEFAULT_ATOOL_FOLDER);
- } else {
- store.setValue(Constants.USE_INTERNAL, true);
- atoolInstallFolder.append(getDefaultAtoolLocation());
- }
- } else {
- atoolInstallFolder.append(folder);
- }
- // append atool.exe to installation path
- atoolInstallFolder.append("\\atool.exe");
- return atoolInstallFolder.toString();
- }
+ // execute command
+ Process pr = Runtime.getRuntime().exec(args);
+
+ // get atool.exe response to buffer
+ br = new BufferedInputStream(pr.getInputStream());
+
+ // wait that all the input is captured
+ pr.waitFor();
+
+ // create new stringbuffer for the input
+ StringBuffer bf = new StringBuffer("");
+ int r = -1;
+
+ // read atool.exe response to stringbufffer
+ while ((r = br.read()) != -1) {
+ bf.append((char) r);
+ }
+
+ // because atool.exe response is following format
+ // Version: [version number]
+ // Path: [location]
+ // Modified: [date and time]
+ // we only need to get first row of response
+ String[] array = bf.toString().split("\r\n");
+
+ // check array
+ if (array != null && array.length > 0) {
+
+ String version = "Version:";
- /**
- * Returns atool.exe version number Executes atool.exe via Process class and
- * parses atool.exe output to get version number.
- *
- * @param path
- * Atool.exe path
- * @return Atool.exe version number if found otherwise "Not available"
- */
- public static String getAtoolVersionNumber(final String path) {
+ // get first array
+ String versionStr = array[0];
+
+ // if first row contains "version:"
+ if (versionStr.contains(version)) {
- BufferedInputStream br = null;
+ // get atool.exe version number
+ String atoolVersionNbr = versionStr.substring(version
+ .length() + 1, versionStr.length());
- try {
- // used atool.exe location
- String usedPath = null;
+ if (atoolVersionNbr == null || ("").equals(atoolVersionNbr)) {
+ return Constants.PREFS_ATOOL_VER_NOT_FOUND;
+ }
- // if path not given => use default location
- if (path == null) {
- usedPath = getDefaultAtoolLocation() + "\\atool.exe";
- }
- else if( path.contains("atool.exe") ){
- usedPath = path;
- }
- // else use given location
- else {
- usedPath = path + "\\atool.exe";
- }
+ return atoolVersionNbr;
+ }
+ }
+ br.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (br != null) {
+ br.close();
+ br = null;
+ }
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
- // command
- String[] args = { "cmd", "/c", usedPath, "-v" };
-
- // execute command
- Process pr = Runtime.getRuntime().exec(args);
-
- // get atool.exe response to buffer
- br = new BufferedInputStream(pr
- .getInputStream());
+ }
+ return Constants.PREFS_ATOOL_VER_NOT_FOUND;
+ }
- // wait that all the input is captured
- pr.waitFor();
+ /**
+ * Returns dbghelp.dll version information
+ *
+ * @param path
+ * atool.exe path
+ * @return dbghelp.dll version information
+ */
+ public static String getDbghelpDllVersionInfo(final String path) {
- // create new stringbuffer for the input
- StringBuffer bf = new StringBuffer("");
- int r = -1;
+ String dbghelpDllVersionInfo = Constants.DBGHELPDLL_IS_UP_TO_DATE;
+ BufferedInputStream bis = null;
- // read atool.exe response to stringbufffer
- while ((r = br.read()) != -1) {
- bf.append((char) r);
- }
+ try {
+ String usedPath = null;
- // because atool.exe response is following format
- // Version: [version number]
- // Path: [location]
- // Modified: [date and time]
- // we only need to get first row of response
- String[] array = bf.toString().split("\r\n");
+ if (path == null) {
+ usedPath = getDefaultAtoolLocation() + "\\atool.exe";
+ } else if (path.contains("atool.exe")) {
+ usedPath = path;
+ } else {
+ usedPath = path + "\\atool.exe";
+ }
- // check array
- if (array != null && array.length > 0) {
+ String[] args = { "cmd", "/c", usedPath, "-vdbghelp" };
- String version = "Version:";
+ Process pr = Runtime.getRuntime().exec(args);
- // get first array
- String versionStr = array[0];
+ bis = new BufferedInputStream(pr.getInputStream());
- // if first row contains "version:"
- if (versionStr.contains(version)) {
+ pr.waitFor();
- // get atool.exe version number
- String atoolVersionNbr = versionStr.substring(version
- .length() + 1, versionStr.length());
+ StringBuffer sb = new StringBuffer("");
+ int r = -1;
- if( atoolVersionNbr == null || ("").equals(atoolVersionNbr ) ) {
- return Constants.PREFS_ATOOL_VER_NOT_FOUND;
- }
+ while ((r = bis.read()) != -1) {
+ sb.append((char) r);
+ }
+
+ if (pr.exitValue() == 1)
+ dbghelpDllVersionInfo = sb.toString();
- return atoolVersionNbr;
- }
- }
- br.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if( br != null ) {
- br.close();
- br = null;
- }
- }catch( IOException ioe ) {
- ioe.printStackTrace();
- }
+ bis.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (bis != null) {
+ bis.close();
+ bis = null;
+ }
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+ return dbghelpDllVersionInfo;
+ }
- }
- return Constants.PREFS_ATOOL_VER_NOT_FOUND;
- }
-
- /**
- * Returns the version number of the AnalyzeTool host-side feature, or "Unknown" if it cannot be determined
- * @return feature version string
- */
- public static String getAToolFeatureVersionNumber(){
- String version = Constants.UNKNOWN;
- IBundleGroupProvider[] providers = Platform.getBundleGroupProviders();
+ /**
+ * Returns the version number of the AnalyzeTool host-side feature, or
+ * "Unknown" if it cannot be determined
+ *
+ * @return feature version string
+ */
+ public static String getAToolFeatureVersionNumber() {
+ String version = Constants.UNKNOWN;
+ IBundleGroupProvider[] providers = Platform.getBundleGroupProviders();
if (providers != null) {
for (IBundleGroupProvider bundleGroupProvider : providers) {
- for (IBundleGroup feature : bundleGroupProvider.getBundleGroups()) {
- if (feature.getIdentifier().equals("com.nokia.carbide.extensions.analyzetool")){
+ for (IBundleGroup feature : bundleGroupProvider
+ .getBundleGroups()) {
+ if (feature.getIdentifier().equals(
+ "com.nokia.carbide.extensions.analyzetool")) {
version = feature.getVersion();
break;
}
}
}
}
- return version;
- }
-
- /**
- * Gets project bld.inf folder path.
- *
- * @param project
- * Project reference
- * @param createTempFolder
- * Flag to create atool_temp folder
- * @return Project bld.inf folder path
- */
- public static String getBldInfFolder(final IProject project,
- final boolean createTempFolder) {
- // get bld.inf directory
- ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager()
- .getProjectInfo(project);
- if (cpi == null) {
- return "";
- }
-
- String infDir = cpi.getINFWorkingDirectory().toOSString();
-
- // create atool_temp folder if it does not exists
- if (createTempFolder) {
- UseAtool.createAToolFolderIfNeeded(infDir);
- }
+ return version;
+ }
- return infDir + "\\atool_temp\\";
- }
-
- /**
- * Gets cpp file name and path.
- *
- * @param resource
- * One resource file
- * @return MMP file name and path if resource is mmp file, otherwise null
- */
- public static String getCPPFileNameAndPath(final IResource resource) {
- // get file extension
- String fileExt = resource.getFileExtension();
- String cppFileAndPath = null;
-
- // if file contains extension and it equals to mmp
- if (fileExt != null && fileExt.compareTo("cpp") == 0) {
- // get resource location/path
- String resourcePath = resource.getLocation().toString();
-
- // if resource path does not contain atool_temp folder
- // save resource location
- if (resourcePath.indexOf(Constants.ATOOL_TEMP) == -1) {
- cppFileAndPath = resource.getProjectRelativePath().toString();
- }
-
- }
+ /**
+ *
+ * Below is code a sample which are related to the AT-682, but it is decided
+ * to let out from current release.
+ *
+ * /** Finds and returns AnalyzeTool core version number. Version number is
+ * read from the analyzetool header file and it can be located under the
+ * epoc32 folder.
+ *
+ * @param project
+ * Project reference
+ * @return Found version number, otherwise null.
+ *
+ * public static String getAtoolCoreVersion(IProject project) { if(
+ * project != null && project.isOpen() ) {
+ *
+ * //get Carbide project info IPath epocRootPath =
+ * EpocEngineHelper.getEpocRootForProject(project); if( epocRootPath
+ * == null ) { return null; }
+ *
+ * File file = null; //thru all the possible locations for( int i=0;
+ * i< Constants.AT_CORE_INCLUDE_FILE_WITH_VERSION_NUMBER.length;
+ * i++) { //get file path StringBuffer location = new
+ * StringBuffer(); location.append(epocRootPath.toOSString());
+ * location
+ * .append(Constants.AT_CORE_INCLUDE_FILE_WITH_VERSION_NUMBER[i]);
+ *
+ * //check that file exists file = new File(location.toString());
+ * if( file.exists() ) { break; } }
+ *
+ * //read file content FileInputStream fis = null; BufferedReader
+ * input = null; try{ // get input fis = new FileInputStream(file);
+ * input = new BufferedReader(new InputStreamReader(fis,"UTF-8"));
+ *
+ * // get first line of data file String line = null; String version
+ * = null; // go thru file while ((line = input.readLine()) != null)
+ * { if( line.contains(Constants.AT_CORE_VERSION_NUMBER_TAG) ) {
+ * String[] text = line.split(" "); version = text[1]; } }
+ * fis.close(); input.close(); return version; } catch(Exception e)
+ * { e.printStackTrace(); } } return null; }
+ */
- // return cpp file name and path
- return cppFileAndPath;
- }
+ /**
+ * Gets project bld.inf folder path.
+ *
+ * @param project
+ * Project reference
+ * @param createTempFolder
+ * Flag to create atool_temp folder
+ * @return Project bld.inf folder path
+ */
+ public static String getBldInfFolder(final IProject project,
+ final boolean createTempFolder) {
+ // get bld.inf directory
+ ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager()
+ .getProjectInfo(project);
+ if (cpi == null) {
+ return "";
+ }
- /**
- * Returns atool.exe location inside the plugin.
- *
- * @return Atool.exe location folder could be found otherwise ""
- */
- public static String getDefaultAtoolLocation() {
- try {
- // AnalyzeTool bundle
- Bundle bunble = Platform
- .getBundle("com.nokia.s60tools.analyzetool.corecomponents"); //$NON-NLS-1$
+ String infDir = cpi.getINFWorkingDirectory().toOSString();
- // if bundle not found return empty path
- if( bunble == null ) {
- return "";
- }
- // get bundle URL
- URL bundleURL = bunble.getEntry("/");
+ // create atool_temp folder if it does not exists
+ if (createTempFolder) {
+ UseAtool.createAToolFolderIfNeeded(infDir);
+ }
- // get file URL
- URL fileURL = FileLocator.toFileURL(bundleURL);
-
- // create new file
- File file = new File(fileURL.getPath());
+ return infDir + "\\atool_temp\\";
+ }
- // if file exists return file path + atool.exe folder name
- if (file.exists()) {
- return file.getAbsolutePath();
- }
- return "";
-
- } catch (Exception e) {
- e.printStackTrace();
- return "";
- }
- }
+ /**
+ * Gets cpp file name and path.
+ *
+ * @param resource
+ * One resource file
+ * @return MMP file name and path if resource is mmp file, otherwise null
+ */
+ public static String getCPPFileNameAndPath(final IResource resource) {
+ // get file extension
+ String fileExt = resource.getFileExtension();
+ String cppFileAndPath = null;
- /**
- * Gets last slash index for current string.
- *
- * @param line
- * Line where to find slash index
- * @return Integer value of slash index
- */
- public static int getLastSlashIndex(final String line) {
- // get last slash index
- char slash = '/';
- int slashIndex = line.lastIndexOf(slash);
- if (slashIndex == -1) {
- char backSlash = '\\';
- slashIndex = line.lastIndexOf(backSlash);
- }
+ // if file contains extension and it equals to mmp
+ if (fileExt != null && fileExt.compareTo("cpp") == 0) {
+ // get resource location/path
+ String resourcePath = resource.getLocation().toString();
+
+ // if resource path does not contain atool_temp folder
+ // save resource location
+ if (resourcePath.indexOf(Constants.ATOOL_TEMP) == -1) {
+ cppFileAndPath = resource.getProjectRelativePath().toString();
+ }
+
+ }
+
+ // return cpp file name and path
+ return cppFileAndPath;
+ }
- return slashIndex;
- }
+ /**
+ * Returns atool.exe location inside the plugin.
+ *
+ * @return Atool.exe location folder could be found otherwise ""
+ */
+ public static String getDefaultAtoolLocation() {
+ try {
+ // AnalyzeTool bundle
+ Bundle bunble = Platform
+ .getBundle("com.nokia.s60tools.analyzetool.corecomponents"); //$NON-NLS-1$
- /**
- * Check is atool.exe available.
- *
- * @return True if atool.exe found otherwise False
- */
- public static boolean isAtoolAvailable() {
- IPreferenceStore store = Activator.getPreferences();
- String folderLocation = store.getString(Constants.ATOOL_FOLDER);
+ // if bundle not found return empty path
+ if (bunble == null) {
+ return "";
+ }
+ // get bundle URL
+ URL bundleURL = bunble.getEntry("/");
- if (folderLocation.length() > 0) {
- if (!folderLocation.endsWith("\\")) {
- folderLocation += "\\";
- }
+ // get file URL
+ URL fileURL = FileLocator.toFileURL(bundleURL);
- IPath atoolPath = new Path(folderLocation + "atool.exe");
+ // create new file
+ File file = new File(fileURL.getPath());
- // if folder does not exists
- if (atoolPath.toFile().exists()) {
- return true;
- }
- }
+ // if file exists return file path + atool.exe folder name
+ if (file.exists()) {
+ return file.getAbsolutePath();
+ }
+ return "";
- return false;
- }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
- /**
- * Checks is data file available.
- *
- * @param project
- * Project reference
- * @return Data file path if it's available otherwise null
- */
- public static String isDataFileAvailable(final IProject project) {
- String bldInfFolder = getBldInfFolder(project, false);
- String dataFileLocation = bldInfFolder + Constants.FILENAME;
- java.io.File dataFile = new java.io.File(dataFileLocation);
- if (dataFile.exists() && dataFile.length() > 0 ) {
- return dataFileLocation;
- }
- return null;
- }
+ /**
+ * Gets last slash index for current string.
+ *
+ * @param line
+ * Line where to find slash index
+ * @return Integer value of slash index
+ */
+ public static int getLastSlashIndex(final String line) {
+ // get last slash index
+ char slash = '/';
+ int slashIndex = line.lastIndexOf(slash);
+ if (slashIndex == -1) {
+ char backSlash = '\\';
+ slashIndex = line.lastIndexOf(backSlash);
+ }
- /**
- * Checks is file extension .xml.
- *
- * @param filePath
- * File location
- * @return True if file contains xml extension otherwise false
- */
- public static boolean isFileXML(final String filePath) {
- String fileNameAndExt = null;
- // get index of last backslash
- int index = Util.getLastSlashIndex(filePath);
+ return slashIndex;
+ }
+
+ /**
+ * Check is atool.exe available.
+ *
+ * @return True if atool.exe found otherwise False
+ */
+ public static boolean isAtoolAvailable() {
+ IPreferenceStore store = Activator.getPreferences();
+ String folderLocation = store.getString(Constants.ATOOL_FOLDER);
- // if backslash found
- if (index != -1) {
+ if (folderLocation.length() > 0) {
+ if (!folderLocation.endsWith("\\")) {
+ folderLocation += "\\";
+ }
- // get file name
- fileNameAndExt = filePath.substring(index + 1, filePath.length());
+ IPath atoolPath = new Path(folderLocation + "atool.exe");
- // if file name contains xml extension
- if (fileNameAndExt.contains(".xml")) {
- return true;
- }
- }
- return false;
+ // if folder does not exists
+ if (atoolPath.toFile().exists()) {
+ return true;
+ }
+ }
- }
+ return false;
+ }
- /**
- * Check if current module is build.
- *
- * @param mmpFile
- * MMP file name and path
- * @return True if module is build otherwise False
- */
- public static boolean isModuleBuild(final String mmpFile) {
- String path = null;
- // remove mmp file name for path
- int slash = Util.getLastSlashIndex(mmpFile);
- if (slash == -1) {
- return false;
- }
- path = mmpFile.substring(0, slash);
- String buildFile = path + "\\atool_temp\\BuildComplete";
- java.io.File file = new java.io.File(buildFile);
- return file.exists();
- }
+ /**
+ * Checks is data file available.
+ *
+ * @param project
+ * Project reference
+ * @return Data file path if it's available otherwise null
+ */
+ public static String isDataFileAvailable(final IProject project) {
+ String bldInfFolder = getBldInfFolder(project, false);
+ String dataFileLocation = bldInfFolder + Constants.FILENAME;
+ java.io.File dataFile = new java.io.File(dataFileLocation);
+ if (dataFile.exists() && dataFile.length() > 0) {
+ return dataFileLocation;
+ }
+ return null;
+ }
- /**
- * Checks that belongs given module to selected project.
- *
- * @param modules
- * Project modules
- * @param oneModuleName
- * One module name
- * @return True if module belongs to selected project otherwise false
- */
- public static boolean isModulePartOfProject(
- final AbstractList<MMPInfo> modules, final String oneModuleName) {
- Iterator<MMPInfo> iterModules = modules.iterator();
- while (iterModules.hasNext()) {
- MMPInfo oneMMPInfo = iterModules.next();
- String target = oneMMPInfo.getTarget();
- if (target == null) {
- continue;
- } else if (oneMMPInfo.getTarget().equalsIgnoreCase(oneModuleName)) {
- return true;
- }
+ /**
+ * Checks is file extension .xml.
+ *
+ * @param filePath
+ * File location
+ * @return True if file contains xml extension otherwise false
+ */
+ public static boolean isFileXML(final String filePath) {
+ String fileNameAndExt = null;
+ // get index of last backslash
+ int index = Util.getLastSlashIndex(filePath);
- // target not found try remove {}
- // for example process name is
- // "AToolMemoryLeakerDll2.dll{000a0000}[04463b81]"
- // but target name is AToolMemoryLeakerDll2.dll
- CharSequence brace = "{";
- if (oneModuleName.contains(brace)) {
- // parse braces
- String tmpTargetName = oneModuleName.substring(0, oneModuleName
- .indexOf('{'));
- if (tmpTargetName != null
- && oneMMPInfo.getTarget().equalsIgnoreCase(
- tmpTargetName)) {
- return true;
- }
- }
- }
- return false;
- }
+ // if backslash found
+ if (index != -1) {
+
+ // get file name
+ fileNameAndExt = filePath.substring(index + 1, filePath.length());
+
+ // if file name contains xml extension
+ if (fileNameAndExt.contains(".xml")) {
+ return true;
+ }
+ }
+ return false;
+
+ }
- /**
- * Gets current project targets info.
- *
- * @param project
- * Project reference
- *
- * @return AbstractList<MMPInfo> List of project targets
- */
- public static AbstractList<MMPInfo> loadProjectTargetsInfo(
- final IProject project) {
- AbstractList<MMPInfo> targets = new ArrayList<MMPInfo>();
- if (project == null || !project.isOpen()) {
- return targets;
- }
-
- // Assumes buildConfig (ICarbideBuildConfiguration) is known
- ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager()
- .getProjectInfo(project);
- if (cpi == null) {
- return new ArrayList<MMPInfo>();
- }
-
- ICarbideBuildConfiguration buildConfig = cpi.getDefaultConfiguration();
-
- for (IPath mmpPath : EpocEngineHelper
- .getMMPFilesForBuildConfiguration(buildConfig)) {
- Object data = EpocEnginePlugin.runWithMMPData(mmpPath,
- new DefaultMMPViewConfiguration(buildConfig
- .getCarbideProject().getProject(), buildConfig,
- new AcceptedNodesViewFilter()),
- new MMPDataRunnableAdapter() {
- public Object run(IMMPData mmpData) {
- // The real return value, getting a single argument
- // setting
- return mmpData.getSingleArgumentSettings().get(
- EMMPStatement.TARGET);
-
- }
- });
+ /**
+ * Check if current module is built.
+ *
+ * @param mmpFile
+ * MMP file name and path
+ * @return True if module is build otherwise False
+ */
+ public static boolean isModuleBuilt(final String mmpFile) {
+ String path = null;
+ // remove mmp file name for path
+ int slash = Util.getLastSlashIndex(mmpFile);
+ if (slash == -1) {
+ return false;
+ }
+ path = mmpFile.substring(0, slash);
+ String buildFile = path + "\\atool_temp\\BuildComplete";
+ java.io.File file = new java.io.File(buildFile);
+ return file.exists();
+ }
- // Make sure to test for and cast to proper Object type!
- int index = Util.getLastSlashIndex(mmpPath.toOSString());
- String mmpFileName = "";
- if (index != -1) {
- mmpFileName = mmpPath.toOSString().substring(index + 1,
- mmpPath.toOSString().length());
- }
- MMPInfo oneMMPInfo = new MMPInfo(mmpFileName);
- oneMMPInfo.setLocation(mmpPath.toOSString());
-
- String mmpStatement = (String) data; // Now we should have the
- // TARGETTYPE
- oneMMPInfo.setTarget(mmpStatement);
- targets.add(oneMMPInfo);
- }
- return targets;
- }
-
- /**
- * Opens confirmation Dialog.
- *
- * @param text
- * Dialog info text
- * @return boolean True if user selects "Yes" False if user selects "No"
- */
- public static boolean openConfirmationDialog(final String text) {
+ /**
+ * Checks that does given module belong to selected project.
+ *
+ * @param modules
+ * Project modules
+ * @param oneModuleName
+ * One module name
+ * @return True if module belongs to selected project otherwise false
+ */
+ public static boolean isModulePartOfProject(
+ final AbstractList<MMPInfo> modules, final String oneModuleName) {
+ Iterator<MMPInfo> iterModules = modules.iterator();
+ while (iterModules.hasNext()) {
+ MMPInfo oneMMPInfo = iterModules.next();
+ String target = oneMMPInfo.getTarget();
+ if (target == null) {
+ continue;
+ } else if (oneMMPInfo.getTarget().equalsIgnoreCase(oneModuleName)) {
+ return true;
+ }
- Activator.getDefault().getWorkbench().getDisplay().syncExec(
- new Runnable() {
- public void run() {
- ret = MessageDialog.openQuestion(new Shell(),
- Constants.ANALYZE_TOOL_TITLE, text);
- }
- });
- return ret;
- }
-
- /**
- * Opens confirmation Dialog.
- *
- * @param text
- * Dialog info text
- * @return int User selected index
- */
- public static int openConfirmationDialogWithCancel(final String text) {
+ // target not found try remove {}
+ // for example process name is
+ // "AToolMemoryLeakerDll2.dll{000a0000}[04463b81]"
+ // but target name is AToolMemoryLeakerDll2.dll
+ CharSequence brace = "{";
+ if (oneModuleName.contains(brace)) {
+ // parse braces
+ String tmpTargetName = oneModuleName.substring(0, oneModuleName
+ .indexOf('{'));
+ if (tmpTargetName != null
+ && oneMMPInfo.getTarget().equalsIgnoreCase(
+ tmpTargetName)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
- Activator.getDefault().getWorkbench().getDisplay().syncExec(
- new Runnable() {
- public void run() {
+ /**
+ * Gets current project targets info.
+ *
+ * @param project
+ * Project reference
+ *
+ * @return AbstractList<MMPInfo> List of project targets
+ */
+ public static AbstractList<MMPInfo> loadProjectTargetsInfo(
+ final IProject project) {
+ AbstractList<MMPInfo> targets = new ArrayList<MMPInfo>();
+ if (project == null || !project.isOpen()) {
+ return targets;
+ }
- String[] labels = new String[3];
- labels[0] = "Yes";
- labels[1] = "No";
- labels[2] = "Cancel";
- MessageDialog mDialog = new MessageDialog(new Shell(),
- Constants.ANALYZE_TOOL_TITLE, null, text, 0,
- labels, 0);
- mDialog.open();
- mDialog.create();
- retValue = mDialog.getReturnCode();
- }
- });
- return retValue;
- }
+ // Assumes buildConfig (ICarbideBuildConfiguration) is known
+ ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager()
+ .getProjectInfo(project);
+ if (cpi == null) {
+ return new ArrayList<MMPInfo>();
+ }
+
+ ICarbideBuildConfiguration buildConfig = cpi.getDefaultConfiguration();
- /**
- * Opens console view.
- */
- public static void openConsoleView() {
- // sync with UI thread
- PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable(){
- public void run() {
-
- try {
- // get active workspace page
- IWorkbenchPage page = Activator.getDefault().getWorkbench()
- .getActiveWorkbenchWindow().getActivePage();
-
+ for (IPath mmpPath : EpocEngineHelper
+ .getMMPFilesForBuildConfiguration(buildConfig)) {
+ Object data = EpocEnginePlugin.runWithMMPData(mmpPath,
+ new DefaultMMPViewConfiguration(buildConfig
+ .getCarbideProject().getProject(), buildConfig,
+ new AcceptedNodesViewFilter()),
+ new MMPDataRunnableAdapter() {
+ public Object run(IMMPData mmpData) {
+ // The real return value, getting a single argument
+ // setting
+ return mmpData.getSingleArgumentSettings().get(
+ EMMPStatement.TARGET);
- // display main view
- if (page != null) {
- IWorkbenchPart part = page.getActivePart();
-
-
- String activePageID = part.getSite().getId();
+ }
+ });
- if( activePageID.equals(Constants.ANALYZE_TOOL_VIEW_ID) || part instanceof org.eclipse.ui.navigator.CommonNavigator) {
- page
- .showView(org.eclipse.ui.console.IConsoleConstants.ID_CONSOLE_VIEW);
- }
-
- }
+ // Make sure to test for and cast to proper Object type!
+ int index = Util.getLastSlashIndex(mmpPath.toOSString());
+ String mmpFileName = "";
+ if (index != -1) {
+ mmpFileName = mmpPath.toOSString().substring(index + 1,
+ mmpPath.toOSString().length());
+ }
+ MMPInfo oneMMPInfo = new MMPInfo(mmpFileName);
+ oneMMPInfo.setLocation(mmpPath.toOSString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
+ String mmpStatement = (String) data; // Now we should have the
+ // TARGETTYPE
+ oneMMPInfo.setTarget(mmpStatement);
+ targets.add(oneMMPInfo);
+ }
+ return targets;
+ }
- /**
- * Opens selection dialog.
- *
- * @param shell
- * Shell reference
- * @param title
- * Dialog title
- * @param defaultLocation
- * Dialog default location
- * @return User selection
- */
- public static String openFileDialog(final Shell shell, final String title,
- final String defaultLocation) {
- FileDialog fileDialog = new FileDialog(shell);
- fileDialog.setText(title);
- // set the file extension filter
- String[] filterExt = { "*.*", "*.dat", "*.xml" };
- fileDialog.setFilterExtensions(filterExt);
+ /**
+ * Opens confirmation Dialog.
+ *
+ * @param text
+ * Dialog info text
+ * @return boolean True if user selects "Yes" False if user selects "No"
+ */
+ public static boolean openConfirmationDialog(final String text) {
- // fileDialog.setFilterPath( defaultLocation );
- return fileDialog.open();
- }
+ Activator.getDefault().getWorkbench().getDisplay().syncExec(
+ new Runnable() {
+ public void run() {
+ ret = MessageDialog.openQuestion(new Shell(),
+ Constants.ANALYZE_TOOL_TITLE, text);
+ }
+ });
+ return ret;
+ }
- /**
- * Opens selection dialog.
- *
- * @param title
- * Dialog title
- * @param message
- * Dialog message text
- * @param input
- * Dialog input
- * @return Selected item
- */
- public static String openSelectionDialog(final String title,
- final String message, final AbstractList<String> input) {
- Activator.getDefault().getWorkbench().getDisplay().syncExec(
- new Runnable() {
- public void run() {
- userSelection = "";
+ /**
+ * Opens confirmation Dialog.
+ *
+ * @param text
+ * Dialog info text
+ * @return int User selected index
+ */
+ public static int openConfirmationDialogWithCancel(final String text) {
+
+ Activator.getDefault().getWorkbench().getDisplay().syncExec(
+ new Runnable() {
+ public void run() {
- ListDialog ld = new ListDialog(new Shell());
- ld.setAddCancelButton(true);
- ld.setContentProvider(new ArrayContentProvider());
- ld.setLabelProvider(new LabelProvider());
-
- int width = 0;
- // calculate dialog width
- for (int i = 0; i < input.size(); i++) {
- String tempStr = input.get(i);
-
- if (tempStr.length() > width) {
- width = tempStr.length();
- }
- }
+ String[] labels = new String[3];
+ labels[0] = "Yes";
+ labels[1] = "No";
+ labels[2] = "Cancel";
+ MessageDialog mDialog = new MessageDialog(new Shell(),
+ Constants.ANALYZE_TOOL_TITLE, null, text, 0,
+ labels, 0);
+ mDialog.open();
+ mDialog.create();
+ retValue = mDialog.getReturnCode();
+ }
+ });
+ return retValue;
+ }
- // set dialog width
- // ld.setWidthInChars( width + 2 );
- ld.setInput(input);
- ld.setTitle(title);
- if (message != null) {
- ld.setMessage(message);
- }
+ /**
+ * Opens console view.
+ */
+ public static void openConsoleView() {
+ // sync with UI thread
+ PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
+ public void run() {
- ld.setHelpAvailable(false);
- ld.open();
-
- Object[] objs = ld.getResult();
- if (objs != null) {
- userSelection = objs[0].toString();
- }
+ try {
+ // get active workspace page
+ IWorkbenchPage page = Activator.getDefault().getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage();
- }
- });
- return userSelection;
- }
+ // display main view
+ if (page != null) {
+ IWorkbenchPart part = page.getActivePart();
+
+ String activePageID = part.getSite().getId();
- /**
- * Displays error message.
- *
- * @param message
- * Error note content
- */
- public static void showErrorMessage(final String message) {
-
- PlatformUI.getWorkbench().getDisplay().asyncExec( new Runnable() {
- public void run() {
- MessageDialog
- .openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), Constants.DIALOG_TITLE, message);
+ if (activePageID.equals(Constants.ANALYZE_TOOL_VIEW_ID)
+ || part instanceof org.eclipse.ui.navigator.CommonNavigator) {
+ page
+ .showView(org.eclipse.ui.console.IConsoleConstants.ID_CONSOLE_VIEW);
+ }
+
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
});
-
- }
+ }
- /**
- * Displays information note.
- *
- * @param message
- * Information note content
- */
- public static void showMessage(final String message) {
+ /**
+ * Opens selection dialog.
+ *
+ * @param shell
+ * Shell reference
+ * @param title
+ * Dialog title
+ * @param defaultLocation
+ * Dialog default location
+ * @return User selection
+ */
+ public static String openFileDialog(final Shell shell, final String title,
+ final String defaultLocation) {
+ FileDialog fileDialog = new FileDialog(shell);
+ fileDialog.setText(title);
+ // set the file extension filter
+ String[] filterExt = { "*.*", "*.dat", "*.xml" };
+ fileDialog.setFilterExtensions(filterExt);
- //sync with the UI thread
- PlatformUI.getWorkbench().getDisplay().syncExec( new Runnable() {
- public void run() {
+ // fileDialog.setFilterPath( defaultLocation );
+ return fileDialog.open();
+ }
- MessageDialog
- .openInformation(Activator.getDefault().getWorkbench()
- .getDisplay().getActiveShell(), Constants.DIALOG_TITLE,
- message);
- }
- });
+ /**
+ * Opens selection dialog.
+ *
+ * @param title
+ * Dialog title
+ * @param message
+ * Dialog message text
+ * @param input
+ * Dialog input
+ * @return Selected item
+ */
+ public static String openSelectionDialog(final String title,
+ final String message, final AbstractList<String> input) {
+ Activator.getDefault().getWorkbench().getDisplay().syncExec(
+ new Runnable() {
+ public void run() {
+ userSelection = "";
- }
+ ListDialog ld = new ListDialog(new Shell());
+ ld.setAddCancelButton(true);
+ ld.setContentProvider(new ArrayContentProvider());
+ ld.setLabelProvider(new LabelProvider());
- /**
- * Check is atool.exe verbose output checked.
- *
- * @return True verbose output is checked otherwise False
- */
- public static boolean verboseAtoolOutput() {
- IPreferenceStore store = Activator.getPreferences();
- return store.getBoolean(Constants.ATOOL_VERBOSE);
- }
+ int width = 0;
+ // calculate dialog width
+ for (int i = 0; i < input.size(); i++) {
+ String tempStr = input.get(i);
+
+ if (tempStr.length() > width) {
+ width = tempStr.length();
+ }
+ }
- /**
- * Creates progress dialog and clears atool.exe made changes.
- *
- * @param newProject
- * Project reference
- */
- public final void clearAtoolChanges(final IProject newProject) {
+ // set dialog width
+ // ld.setWidthInChars( width + 2 );
+ ld.setInput(input);
+ ld.setTitle(title);
+ if (message != null) {
+ ld.setMessage(message);
+ }
+
+ ld.setHelpAvailable(false);
+ ld.open();
- // project reference
- final IProject project = newProject;
+ Object[] objs = ld.getResult();
+ if (objs != null) {
+ userSelection = objs[0].toString();
+ }
- Job cleanJob = new Job(Constants.PROGRESSDIALOG_CLEAR_CHANGES) {
- @Override
- protected IStatus run(IProgressMonitor monitor) {
+ }
+ });
+ return userSelection;
+ }
- // update progress monitor state
- monitor.beginTask(Constants.PROGRESSDIALOG_CLEAR_CHANGES, IProgressMonitor.UNKNOWN);
+ /**
+ * Displays error message.
+ *
+ * @param message
+ * Error note content
+ */
+ public static void showErrorMessage(final String message) {
- // get project info
- ICarbideProjectInfo cpi = CarbideBuilderPlugin
- .getBuildManager().getProjectInfo(project);
- if (cpi == null) {
- return new Status(IStatus.OK, Constants.ANALYZE_CONSOLE_ID,
- IStatus.OK,
- Constants.PROGRESSDIALOG_CLEAN_COMPLETE, null);
- }
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ MessageDialog.openError(PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getShell(),
+ Constants.DIALOG_TITLE, message);
+ }
+ });
+
+ }
- // new command launcher
- CarbideCommandLauncher cmdLauncher = new CarbideCommandLauncher(
- project, monitor, Constants.atoolParserIds, cpi
- .getINFWorkingDirectory());
- cmdLauncher.startTimingStats();
+ /**
+ * Displays information note.
+ *
+ * @param message
+ * Information note content
+ */
+ public static void showMessage(final String message) {
- cmdLauncher.showCommand(true);
+ // sync with the UI thread
+ PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
+ public void run() {
- cmdLauncher.writeToConsole(cmdLauncher.getTimingStats());
+ MessageDialog.openInformation(Activator.getDefault()
+ .getWorkbench().getDisplay().getActiveShell(),
+ Constants.DIALOG_TITLE, message);
+ }
+ });
+
+ }
- AbstractList<String> usedArguments = new ArrayList<String>();
- usedArguments.add("-c");
- if (Util.verboseAtoolOutput()) {
- usedArguments.add(Constants.ATOOL_SHOW_DEBUG);
- }
+ /**
+ * Check is atool.exe verbose output checked.
+ *
+ * @return True verbose output is checked otherwise False
+ */
+ public static boolean verboseAtoolOutput() {
+ IPreferenceStore store = Activator.getPreferences();
+ return store.getBoolean(Constants.ATOOL_VERBOSE);
+ }
- String[] arguments = new String[usedArguments.size()];
- usedArguments.toArray(arguments);
- int error = Constants.COMMAND_LINE_ERROR_CODE.OK.getCode();
- error = cmdLauncher.executeCommand(new Path(Util
- .getAtoolInstallFolder()), arguments,
- CarbideCPPBuilder.getResolvedEnvVars(cpi
- .getDefaultConfiguration()), cpi
- .getINFWorkingDirectory());
+ /**
+ * Creates progress dialog and clears atool.exe made changes.
+ *
+ * @param newProject
+ * Project reference
+ */
+ public static final void clearAtoolChanges(final IProject newProject) {
- // if command line engine returns some error code => display the error
- if( error != Constants.COMMAND_LINE_ERROR_CODE.OK.getCode() ) {
- Constants.COMMAND_LINE_ERROR_CODE errorCode = Util.getErrorCode(error);
- Util.displayCommandLineError(errorCode);
- }
+ // project reference
+ final IProject project = newProject;
+
+ Job cleanJob = new Job(Constants.PROGRESSDIALOG_CLEAR_CHANGES) {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+
+ // update progress monitor state
+ monitor.beginTask(Constants.PROGRESSDIALOG_CLEAR_CHANGES,
+ IProgressMonitor.UNKNOWN);
- return new Status(IStatus.OK, Constants.ANALYZE_CONSOLE_ID,
- IStatus.OK, Constants.PROGRESSDIALOG_CLEAN_COMPLETE,
- null);
- }
- };
- cleanJob.setUser(true);
- cleanJob.schedule();
- }
+ // get project info
+ ICarbideProjectInfo cpi = CarbideBuilderPlugin
+ .getBuildManager().getProjectInfo(project);
+ if (cpi == null) {
+ return new Status(IStatus.OK, Constants.ANALYZE_CONSOLE_ID,
+ IStatus.OK,
+ Constants.PROGRESSDIALOG_CLEAN_COMPLETE, null);
+ }
+ // new command launcher
+ CarbideCommandLauncher cmdLauncher = new CarbideCommandLauncher(
+ project, monitor, Constants.atoolParserIds, cpi
+ .getINFWorkingDirectory());
+ cmdLauncher.startTimingStats();
+
+ cmdLauncher.showCommand(true);
+
+ cmdLauncher.writeToConsole(cmdLauncher.getTimingStats());
+
+ AbstractList<String> usedArguments = new ArrayList<String>();
+ usedArguments.add("-c");
+ if (Util.verboseAtoolOutput()) {
+ usedArguments.add(Constants.ATOOL_SHOW_DEBUG);
+ }
- /**
- * Compares two atool.exe version numbers and returns
- * higher one.
- * @param firstVersion First version number
- * @param secondVersion Second version number
- * @return 0 if the first one is higher, 1 if the second one is higher otherwise -1
- */
- public static int compareVersionNumber(String firstVersion, String secondVersion)
- {
-
- // split version numbers
- String first[] = firstVersion.split("[.]");
- String second[] = secondVersion.split("[.]");
+ String[] arguments = new String[usedArguments.size()];
+ usedArguments.toArray(arguments);
+ int error = Constants.COMMAND_LINE_ERROR_CODE.OK.getCode();
+ error = cmdLauncher.executeCommand(new Path(Util
+ .getAtoolInstallFolder()), arguments, CarbideCPPBuilder
+ .getResolvedEnvVars(cpi.getDefaultConfiguration()), cpi
+ .getINFWorkingDirectory());
- // check that version numbers contains valid formatting
- if( first == null || second == null || first.length <1 || second.length < 1 || (first.length != second.length) ) {
- return Constants.VERSION_NUMBERS_INVALID;
- }
- // if version number equals => no need to check which one is higher
- if( firstVersion.equalsIgnoreCase(secondVersion) )
- {
- return Constants.VERSION_NUMBERS_EQUALS;
- }
- // thru splitted version number
- for( int i=0; i<first.length; i++ ) {
- try{
- int firstNumber = Integer.parseInt( first[i] );
- int secondNumber = Integer.parseInt( second[i] );
+ // if command line engine returns some error code => display the
+ // error
+ if (error != Constants.COMMAND_LINE_ERROR_CODE.OK.getCode()) {
+ Constants.COMMAND_LINE_ERROR_CODE errorCode = Util
+ .getErrorCode(error);
+ Util.displayCommandLineError(errorCode);
+ }
+
+ return new Status(IStatus.OK, Constants.ANALYZE_CONSOLE_ID,
+ IStatus.OK, Constants.PROGRESSDIALOG_CLEAN_COMPLETE,
+ null);
+ }
+ };
+ cleanJob.setUser(true);
+ cleanJob.schedule();
+ }
- // if first and second given number equals => skip to next number
- if( firstNumber == secondNumber ) {
- continue;
- }
- else if( firstNumber > secondNumber ) {
- return Constants.VERSION_NUMBERS_FIRST;
- }
- else {
- return Constants.VERSION_NUMBERS_SECOND;
- }
+ /**
+ * Compares two atool.exe version numbers and returns index of the higher
+ * one.
+ *
+ * @param firstVersion
+ * First version number
+ * @param secondVersion
+ * Second version number
+ * @return 0 if the first one is higher, 1 if the second one is higher, 2 if
+ * the versions equals otherwise -1
+ */
+ public static int compareVersionNumber(String firstVersion,
+ String secondVersion) {
+
+ // split version numbers
+ String first[] = firstVersion.split("[.]");
+ String second[] = secondVersion.split("[.]");
+
+ // check that version numbers contains valid formatting
+ if (first == null || second == null || first.length < 1
+ || second.length < 1 || (first.length != second.length)) {
+ return Constants.VERSION_NUMBERS_INVALID;
+ }
+ // if version number equals => no need to check which one is higher
+ if (firstVersion.equalsIgnoreCase(secondVersion)) {
+ return Constants.VERSION_NUMBERS_EQUALS;
+ }
+ // thru splitted version number
+ for (int i = 0; i < first.length; i++) {
+ try {
+ int firstNumber = Integer.parseInt(first[i]);
+ int secondNumber = Integer.parseInt(second[i]);
+
+ // if first and second given number equals => skip to next
+ // number
+ if (firstNumber == secondNumber) {
+ continue;
+ } else if (firstNumber > secondNumber) {
+ return Constants.VERSION_NUMBERS_FIRST;
+ } else {
+ return Constants.VERSION_NUMBERS_SECOND;
+ }
+
+ } catch (NumberFormatException nfe) {
+ nfe.printStackTrace();
+ return Constants.VERSION_NUMBERS_INVALID;
+ }
+ }
+ return Constants.VERSION_NUMBERS_INVALID;
+ }
- }catch(NumberFormatException nfe) {
- nfe.printStackTrace();
- return Constants.VERSION_NUMBERS_INVALID;
- }
- }
- return Constants.VERSION_NUMBERS_INVALID;
- }
+ /**
+ * Displays corresponding error message.
+ *
+ * @param errorCode
+ * Error code
+ */
+ public static final void displayCommandLineError(
+ Constants.COMMAND_LINE_ERROR_CODE errorCode) {
+ switch (errorCode) {
+ case EXECUTE_ERROR:
+ Util.showErrorMessage(Constants.ERROR_ATOOL_NOT_AVAILABLE);
+ break;
+ case OK:
+ // everything is OK, no need to do anything
+ break;
+
+ case INVALID_ARGUMENT_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool tried to execute command line engine with invalid parameters. \n\nTo avoid this go to AnalyzeTool preference page and select \"Use internal "
+ + "command line engine\".");
+ Activator
+ .getDefault()
+ .logInfo(
+ IStatus.ERROR,
+ IStatus.ERROR,
+ "AnalyzeTool - Extension tried to execute command line engine with invalid parameters.");
+ break;
+
+ case CANNOT_FIND_EPOCROOT:
+ Util
+ .showErrorMessage("AnalyzeTool can not find epocroot. \nCheck SDK preferences and build project again.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Can not find epocroot.");
+ break;
+
+ case MAKEFILE_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool command line engine fails to create makefiles.\n\nTry to clean AnalyzeTool changes and build project again."
+ + "\nIf problem still occurs contact AnalyzeTool development team.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Make file error.");
+ break;
+
+ case NO_SUPPORTED_MODULES_ERROR:
+ Util
+ .showErrorMessage("Project contains unsupported modules, this project could not build with AnalyzeTool!");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - No supported modules error.");
+ break;
+
+ case WRONG_DATA_FILE_VERSION:
+ Util
+ .showErrorMessage("Selected data file contains invalid version number. \nThis usually means that data file "
+ + "format is changed and AnalyzeTool command line engine can not resolve that. \n\nTry run tests again with the newest version of AnalyzeTool.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Wrong data file version.");
+ break;
-
- /**
- * Displays corresponding error message.
- * @param errorCode Error code
- */
- public static final void displayCommandLineError( Constants.COMMAND_LINE_ERROR_CODE errorCode ) {
- switch(errorCode) {
- case EXECUTE_ERROR:
- Util.showErrorMessage(Constants.ERROR_ATOOL_NOT_AVAILABLE);
- break;
- case OK:
- // everything is OK, no need to do anything
- break;
-
- case INVALID_ARGUMENT_ERROR:
- Util.showErrorMessage("AnalyzeTool tried to execute command line engine with invalid parameters. \n\nTo avoid this go to AnalyzeTool preference page and select \"Use internal " +
- "command line engine\".");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Extension tried to execute command line engine with invalid parameters.");
- break;
-
- case CANNOT_FIND_EPOCROOT:
- Util.showErrorMessage("AnalyzeTool can not find epocroot. \nCheck SDK preferences and build project again.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Can not find epocroot.");
- break;
-
- case MAKEFILE_ERROR:
- Util.showErrorMessage("AnalyzeTool command line engine fails to create makefiles.\n\nTry to clean AnalyzeTool changes and build project again." +
- "\nIf problem still occurs contact AnalyzeTool development team.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Make file error.");
- break;
-
- case NO_SUPPORTED_MODULES_ERROR:
- Util.showErrorMessage("Project contains unsupported modules, this project could not build with AnalyzeTool!");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - No supported modules error.");
- break;
-
- case WRONG_DATA_FILE_VERSION:
- Util.showErrorMessage("Selected data file contains invalid version number. \nThis usually means that data file " +
- "format is changed and AnalyzeTool command line engine can not resolve that. \n\nTry run tests again with the newest version of AnalyzeTool.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Wrong data file version.");
- break;
-
- case ANALYZE_ERROR:
- Util.showErrorMessage("AnalyzeTool can not analyze the selected data file.\nThis problem usually occurs when selected file contains corrupted AnalyzeTool data. \nTry to run " +
- "tests again with the newest version of AnalyzeTool.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - General Analyze Error.");
- break;
-
- case SYMBOL_FILE_ERROR:
- Util.showErrorMessage("AnalyzeTool can not resolve selected symbol file(s). \n\nGo to AnalyzeTool advanced preference page and check selected symbol file(s).");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Symbol file error.");
- break;
-
- case DATA_FILE_EMPTY:
- Util.showErrorMessage("Can not analyze. \n\nSelected file is empty.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Selected file is empty.");
- break;
-
- case DATA_FILE_INVALID:
- Util.showErrorMessage("Can not analyze. \n\nSelected data file does not contain AnalyzeTool data.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Invalid data file.");
- break;
-
- case RELEASABLES_ERROR:
- Util.showErrorMessage("AnalyzeTool can not copy needed files, therefore callstack can not be displayed when analyzing data." +
- "\n\nTry to clean AnalyzeTool made changes and build project again.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Releasebles error.");
- break;
-
- case RESTORE_MODULES_ERROR:
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Restore module error.");
- break;
+ case ANALYZE_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool can not analyze the selected data file.\nThis problem usually occurs when selected file contains corrupted AnalyzeTool data. \nTry to run "
+ + "tests again with the newest version of AnalyzeTool.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - General Analyze Error.");
+ break;
+
+ case SYMBOL_FILE_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool can not resolve selected symbol file(s). \n\nGo to AnalyzeTool advanced preference page and check selected symbol file(s).");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Symbol file error.");
+ break;
+
+ case DATA_FILE_EMPTY:
+ Util
+ .showErrorMessage("Can not analyze. \n\nSelected file is empty.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Selected file is empty.");
+ break;
+
+ case DATA_FILE_INVALID:
+ Util
+ .showErrorMessage("Can not analyze. \n\nSelected data file does not contain AnalyzeTool data.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Invalid data file.");
+ break;
+
+ case RELEASABLES_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool can not copy needed files, therefore callstack can not be displayed when analyzing data."
+ + "\n\nTry to clean AnalyzeTool made changes and build project again.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Releasebles error.");
+ break;
+
+ case RESTORE_MODULES_ERROR:
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Restore module error.");
+ break;
+
+ case CREATING_TEMP_CPP_ERROR:
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Creating temp cpp file error.");
+ break;
+
+ case CLEANING_TEMP_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool failed to clean project. You may have to clean changes manually.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Clean error.");
+ break;
- case CREATING_TEMP_CPP_ERROR:
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Creating temp cpp file error.");
- break;
-
- case CLEANING_TEMP_ERROR:
- Util.showErrorMessage("AnalyzeTool failed to clean project. You may have to clean changes manually.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Clean error.");
- break;
+ case READ_MAKEFILE_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool command line engine can not read project make files. \n\nTry to clean AnalyzeTool"
+ + " made changes and build project again.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Read make file error.");
+ break;
- case READ_MAKEFILE_ERROR:
- Util.showErrorMessage("AnalyzeTool command line engine can not read project make files. \n\nTry to clean AnalyzeTool" +
- " made changes and build project again.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Read make file error.");
- break;
+ case MODIFY_MODULES_ERROR:
+ Util
+ .showErrorMessage("AnalyzeTool command line engine can not modify project modules.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Modify modules error.");
+ break;
- case MODIFY_MODULES_ERROR:
- Util.showErrorMessage("AnalyzeTool command line engine can not modify project modules.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Modify modules error.");
- break;
+ case INVALID_MMP_DEFINED:
+ // I think this case is not possible in extension side.
+ // because we ask mmp files from Carbide
+ // however if this case happens we just log it Carbide error log
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Invalid mmp file.");
+ break;
- case INVALID_MMP_DEFINED:
- // I think this case is not possible in extension side.
- // because we ask mmp files from Carbide
- // however if this case happens we just log it Carbide error log
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - Invalid mmp file.");
- break;
+ case EMPTY_DATA_FILE:
+ Util
+ .showErrorMessage("Can not analyze. \n\nSelected file is empty.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - Selected file is empty.");
+ break;
+ case UNKNOWN_ERROR:
+ Util
+ .showErrorMessage("Unable to execute action for current project.");
+ Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR,
+ "AnalyzeTool - unknown error.");
+ break;
- case UNKNOWN_ERROR:
- Util.showErrorMessage("Unable to execute action for current project.");
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "AnalyzeTool - unknown error.");
- break;
-
- }
- }
+ }
+ }
- /**
- * Finds correct Enum value for integer value.
- *
- * @param value Value to find from enum values
- * @return Enum value if found otherwise COMMAND_LINE_ERROR_CODE.UNKNOWN_ERROR
- */
- public static COMMAND_LINE_ERROR_CODE getErrorCode(final int value) {
- for( COMMAND_LINE_ERROR_CODE errorCode : COMMAND_LINE_ERROR_CODE.values() ) {
- if( errorCode.getCode() == value ) {
- return errorCode;
- }
- }
- return COMMAND_LINE_ERROR_CODE.UNKNOWN_ERROR;
- }
+ /**
+ * Finds correct Enum value for integer value.
+ *
+ * @param value
+ * Value to find from enum values
+ * @return Enum value if found otherwise
+ * COMMAND_LINE_ERROR_CODE.UNKNOWN_ERROR
+ */
+ public static COMMAND_LINE_ERROR_CODE getErrorCode(final int value) {
+ for (COMMAND_LINE_ERROR_CODE errorCode : COMMAND_LINE_ERROR_CODE
+ .values()) {
+ if (errorCode.getCode() == value) {
+ return errorCode;
+ }
+ }
+ return COMMAND_LINE_ERROR_CODE.UNKNOWN_ERROR;
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/global/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides commonly used methods and all the used strings.
+*/
+package com.nokia.s60tools.analyzetool.global;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/engine/MemoryActivityModel.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/engine/MemoryActivityModel.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import com.nokia.s60tools.analyzetool.engine.ICallstackManager;
import com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel;
import com.nokia.s60tools.analyzetool.engine.IMemoryActivityModelChangeListener;
import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
@@ -62,6 +63,9 @@
/** computed values for currently selected process*/
private ProcessInfoComputedValues selectedProcessComputedValues;
+
+ private boolean deferredCallstackReading;
+ private ICallstackManager callstackManager;
/**
@@ -386,7 +390,34 @@
}
}
-
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel#setDeferredCallstackReading(boolean)
+ */
+ public void setDeferredCallstackReading(boolean deferredCallstackReading) {
+ this.deferredCallstackReading = deferredCallstackReading;
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel#isDeferredCallstackReading()
+ */
+ public boolean isDeferredCallstackReading() {
+ return deferredCallstackReading;
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel#getCallstackManager()
+ */
+ public ICallstackManager getCallstackManager() {
+ return callstackManager;
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel#setCallstackManager(com.nokia.s60tools.analyzetool.engine.statistic.CallstackManager)
+ */
+ public void setCallstackManager(ICallstackManager callstackManager) {
+ this.callstackManager = callstackManager;
+
+ }
// Other public methods can be added here.
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/AnalyzeToolGraph.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/AnalyzeToolGraph.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -238,7 +238,7 @@
graphics.setForegroundColor(ColorUtil.COLOR_100);
graphics.setBackgroundColor(ColorUtil.WHITE);
- int alignedLeftEdge = ((int)(canvasRect.x / 50))*50;
+ int alignedLeftEdge = (canvasRect.x / 50)*50;
// vertical lines (one darker, one lighter vertical line in turns every
// 50 points in width)
@@ -434,7 +434,7 @@
/**
* Returns the current scaling factor for the graph's width
- * @return
+ * @return Scale
*/
public double getScale() {
return scale;
@@ -442,7 +442,7 @@
/**
* Sets the scaling factor for the graph's width
- * @param scale
+ * @param newScale
*/
public void setScale(double newScale) {
this.scale = newScale;
@@ -450,7 +450,7 @@
/**
* Returns the highest time value of the current graph in milliseconds
- * @return
+ * @return Last time
*/
public long getLastTimeValueInMilliSeconds() {
return model.getLastProcessTime() - model.getFirstProcessTime();
@@ -467,7 +467,7 @@
/**
* Adds a new model to this class
- * @param model the IMemoryActivityModel to use
+ * @param newModel the IMemoryActivityModel to use
*/
public void setInput(IMemoryActivityModel newModel) {
if (this.model != null){
@@ -508,7 +508,7 @@
horizontalBar.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent arg0) {
-
+ //do nothing by design
}
public void widgetSelected(SelectionEvent event) {
@@ -637,6 +637,7 @@
* .MouseEvent)
*/
public void mouseEntered(MouseEvent e) {
+ //do nothing by design
}
/*
@@ -647,6 +648,7 @@
* .MouseEvent)
*/
public void mouseExited(MouseEvent e) {
+ //do nothing by design
}
/*
@@ -671,6 +673,7 @@
* .MouseEvent)
*/
public void mouseMoved(MouseEvent e) {
+ //do nothing by design
}
/*
@@ -755,7 +758,7 @@
} else if (me.button == 1) {
BaseInfo info = findClosest(me.x, me.y);
if (info != null) {
- iDotsSelecProv.setSelection(new StructuredSelection(new MemOpDescriptor(model.getFirstProcessTime(), info, iCurrentProject, iSymReader, cppFileNames)));
+ iDotsSelecProv.setSelection(new StructuredSelection(new MemOpDescriptor(model.getFirstProcessTime(), info, iCurrentProject, iSymReader, cppFileNames, model.getCallstackManager())));
lastShownAlloc = info;
}
}
@@ -764,6 +767,7 @@
public void keyPressed(KeyEvent ke) {
+ //do nothing by design
}
public void keyReleased(KeyEvent ke) {
@@ -771,7 +775,7 @@
if (lastShownAlloc != null) {
BaseInfo info = findNextAlloc(lastShownAlloc, ke.keycode == SWT.ARROW_RIGHT);
if (info != null) {
- iDotsSelecProv.setSelection(new StructuredSelection(new MemOpDescriptor(model.getFirstProcessTime(), info, iCurrentProject, iSymReader, cppFileNames)));
+ iDotsSelecProv.setSelection(new StructuredSelection(new MemOpDescriptor(model.getFirstProcessTime(), info, iCurrentProject, iSymReader, cppFileNames, model.getCallstackManager())));
lastShownAlloc = info;
//if info is hidden from the visible graph area, scroll to reveal
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/ChartContainer.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/ChartContainer.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -98,6 +98,7 @@
propViewItem.addSelectionListener(new SelectionListener(){
public void widgetDefaultSelected(SelectionEvent e) {
+ //do nothing by design
}
public void widgetSelected(SelectionEvent e) {
@@ -119,6 +120,7 @@
helpItem.addSelectionListener(new SelectionListener(){
public void widgetDefaultSelected(SelectionEvent e) {
+ //do nothing by design
}
public void widgetSelected(SelectionEvent e) {
@@ -178,6 +180,7 @@
graphCanvas.setBackground(new Color(Display.getDefault(), new RGB(255,255,255)));
graphCanvas.createContent();
graphCanvas.addControlListener(new ControlAdapter() {
+ @Override
public void controlResized(ControlEvent e) {
//the client area of the graph panel might change if a scrollbar gets added/removed
//this needs to be passed on to the y axis
@@ -213,7 +216,9 @@
processCombo.addSelectionListener(new SelectionListener(){
- public void widgetDefaultSelected(SelectionEvent e) {}
+ public void widgetDefaultSelected(SelectionEvent e) {
+ //do nothing by design
+ }
public void widgetSelected(SelectionEvent e) {
int sel = processCombo.getSelectionIndex();
@@ -238,13 +243,13 @@
* callbacks to model change listeners.
* @param aProject The currently selected project in the IDE, used for pinpointing
*
- * @param model the new IMemoryActivityModel to set
+ * @param newModel the new IMemoryActivityModel to set
*/
- public void setInput(IProject aProject, IMemoryActivityModel model) {
+ public void setInput(IProject aProject, IMemoryActivityModel newModel) {
if (this.model != null){
this.model.removeListener(this);
}
- this.model = model;
+ this.model = newModel;
this.model.addListener(this);
graphCanvas.setInput(model);
@@ -258,6 +263,7 @@
* @see com.nokia.s60tools.analyzetool.engine.IMemoryActivityModelChangeListener#onProcessSelected(com.nokia.s60tools.analyzetool.engine.statistic.ProcessInfo)
*/
public void onProcessSelected(ProcessInfo p) {
+ //do nothing by design
}
/* (non-Javadoc)
@@ -269,6 +275,7 @@
}
+ @Override
public void update(){
graphCanvas.zoomGraph();
graphCanvas.redraw();
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/MemOpDescriptor.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/MemOpDescriptor.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -17,6 +17,7 @@
package com.nokia.s60tools.analyzetool.internal.ui.graph;
+import java.io.IOException;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.HashMap;
@@ -29,6 +30,7 @@
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.TextCellEditor;
@@ -51,6 +53,8 @@
import com.nokia.cdt.debug.cw.symbian.symbolreader.IFunction;
import com.nokia.cdt.debug.cw.symbian.symbolreader.ISourceLocation;
import com.nokia.cdt.debug.cw.symbian.symbolreader.ISymbolFile;
+import com.nokia.s60tools.analyzetool.Activator;
+import com.nokia.s60tools.analyzetool.engine.ICallstackManager;
import com.nokia.s60tools.analyzetool.engine.statistic.AllocCallstack;
import com.nokia.s60tools.analyzetool.engine.statistic.AllocInfo;
import com.nokia.s60tools.analyzetool.engine.statistic.BaseInfo;
@@ -71,38 +75,38 @@
BaseInfo memInfo;
/** process Id descriptor */
- private static final String PID_ID = "pid";
- private final DotTextPropertyDescriptor PID_DESCRIPTOR = new DotTextPropertyDescriptor(PID_ID, "Process Id");
+ private static final String PID_ID = "pid"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor PID_DESCRIPTOR = new DotTextPropertyDescriptor(PID_ID, Messages.MemOpDescriptor_1);
/** Memory operation type Allocation/Leak/Free descriptor */
- private static final String TYPE_ID = "type";
- private final DotTextPropertyDescriptor TYPE_DESCRIPTOR = new DotTextPropertyDescriptor(TYPE_ID, "Operation Type");
+ private static final String TYPE_ID = "type"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor TYPE_DESCRIPTOR = new DotTextPropertyDescriptor(TYPE_ID, Messages.MemOpDescriptor_3);
/** Time descriptor */
- private static final String TIME_ID = "time";
- private final DotTextPropertyDescriptor TIME_DESCRIPTOR = new DotTextPropertyDescriptor(TIME_ID, "Time");
+ private static final String TIME_ID = "time"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor TIME_DESCRIPTOR = new DotTextPropertyDescriptor(TIME_ID, Messages.MemOpDescriptor_5);
/** size descriptor */
- private static final String SIZE_ID = "size";
- private final DotTextPropertyDescriptor SIZE_DESCRIPTOR = new DotTextPropertyDescriptor(SIZE_ID, "Size");
+ private static final String SIZE_ID = "size"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor SIZE_DESCRIPTOR = new DotTextPropertyDescriptor(SIZE_ID, Messages.MemOpDescriptor_7);
/** memory address descriptor */
- private static final String ADDR_ID = "address";
- private final DotTextPropertyDescriptor ADDR_DESCRIPTOR = new DotTextPropertyDescriptor(ADDR_ID, "Address");
+ private static final String ADDR_ID = "address"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor ADDR_DESCRIPTOR = new DotTextPropertyDescriptor(ADDR_ID, Messages.MemOpDescriptor_9);
/** total memory size consumed by the process descriptor */
- private static final String TSIZE_ID = "total";
- private final DotTextPropertyDescriptor TSIZE_DESCRIPTOR = new DotTextPropertyDescriptor(TSIZE_ID, "Total Size");
+ private static final String TSIZE_ID = "total"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor TSIZE_DESCRIPTOR = new DotTextPropertyDescriptor(TSIZE_ID, Messages.MemOpDescriptor_11);
/** life time of an allocation descriptor. This applies only to non Leaked allocations */
- private static final String LIFETIME_ID = "lifetime";
- private final DotTextPropertyDescriptor LIFETIME_DESCRIPTOR = new DotTextPropertyDescriptor(LIFETIME_ID, "Life Time");
- private static final String ATTRIBUTES_GROUP = "Attributes";
+ private static final String LIFETIME_ID = "lifetime"; //$NON-NLS-1$
+ private final DotTextPropertyDescriptor LIFETIME_DESCRIPTOR = new DotTextPropertyDescriptor(LIFETIME_ID, Messages.MemOpDescriptor_13);
+ private static final String ATTRIBUTES_GROUP = "Attributes"; //$NON-NLS-1$
/** used for making absolute time values relative */
private long baseTime;
/** callstack item descriptor id*/
- private static final String CALL_STACK_ID = "callstack";
+ private static final String CALL_STACK_ID = "callstack"; //$NON-NLS-1$
/** current project */
IProject iCurrentProject = null;
@@ -110,21 +114,25 @@
SymReader iSymReader = null;
/** c++ files from the current project */
AbstractList<String> cppFileNames;
- static final String LINE_SEPARATOR = " :: ";
+ static final String LINE_SEPARATOR = " :: "; //$NON-NLS-1$
+
+ private ICallstackManager callstackManager;
/**
* Constructor
- * @param baseTime usually process start time, used for making absolute time values relative
+ * @param newBaseTime usually process start time, used for making absolute time values relative
* @param info the alloc or free info
* @param project IProject to use for locating source file
* @param symReader the SymReader to use for pinpointing
* @param cppFiles
+ * @param callstackManager CallstackManager for reading callstacks from BaseInfo
*/
- public MemOpDescriptor(Long baseTime, BaseInfo info, IProject project, SymReader symReader, AbstractList<String> cppFiles) {
+ public MemOpDescriptor(Long newBaseTime, BaseInfo info, IProject project, SymReader symReader, AbstractList<String> cppFiles, ICallstackManager callstackManager) {
memInfo = info;
iCurrentProject = project;
iSymReader = symReader;
cppFileNames = cppFiles;
- this.baseTime = baseTime;
+ this.baseTime = newBaseTime;
+ this.callstackManager = callstackManager;
}
/* (non-Javadoc)
@@ -159,12 +167,21 @@
completeList.add(LIFETIME_DESCRIPTOR); //only non leaks
}
// add callstack descriptors
- AbstractList<AllocCallstack> callstack = memInfo.getCallstack();
- for (int i = 0; i < callstack.size(); i++) {
-
- final DotTextPropertyDescriptor propDesc = new DotTextPropertyDescriptor(i, CALL_STACK_ID);
- propDesc.setCategory("CallStack");
- completeList.add(propDesc);
+ if (callstackManager != null && callstackManager.hasCallstack(memInfo)){
+ try {
+ List<AllocCallstack> callstack = callstackManager.readCallstack(memInfo);
+ if (callstack != null){
+ for (int i = 0; i < callstack.size(); i++) {
+
+ final DotTextPropertyDescriptor propDesc = new DotTextPropertyDescriptor(i, CALL_STACK_ID);
+ propDesc.setCategory("CallStack"); //$NON-NLS-1$
+ completeList.add(propDesc);
+ }
+ }
+ } catch (IOException e) {
+ //since callstacks aren't fatal and we can't handle it usefully here, log this to the error log
+ Activator.getDefault().log(IStatus.ERROR, Messages.MemOpDescriptor_18, e);
+ }
}
return completeList.toArray(new TextPropertyDescriptor[completeList.size()]);
}
@@ -178,40 +195,46 @@
return String.valueOf(memInfo.getProcessID());//process ids are usually decimal values
}
if (TYPE_ID.equals(id))
- return memInfo instanceof AllocInfo ? ((AllocInfo)memInfo).isFreed() ? "Allocation" : "Leak" : "Free";
+ return memInfo instanceof AllocInfo ? ((AllocInfo)memInfo).isFreed() ? Messages.MemOpDescriptor_19 : Messages.MemOpDescriptor_20 : Messages.MemOpDescriptor_21;
if (TIME_ID.equals(id))
return GraphUtils.renderTime(memInfo.getTime() - baseTime);
if (SIZE_ID.equals(id))
- return String.format("%,d B",memInfo.getSizeInt());
+ return String.format(Messages.MemOpDescriptor_22,memInfo.getSizeInt());
if (ADDR_ID.equals(id))
return Long.toString(memInfo.getMemoryAddress(),16);
if (TSIZE_ID.equals(id))
- return String.format("%,d B",memInfo.getTotalMem());
+ return String.format(Messages.MemOpDescriptor_23,memInfo.getTotalMem());
if (LIFETIME_ID.equals(id)) {
if (memInfo instanceof AllocInfo && ((AllocInfo)memInfo).isFreed()) {
AllocInfo info = (AllocInfo) memInfo;
return GraphUtils.renderTime(info.getFreedBy().getTime() - info.getTime());
}
- throw new IllegalStateException("Should not happen because we did not provide a lifetime descriptor for leak and free");
+ throw new IllegalStateException("Should not happen because we did not provide a lifetime descriptor for leak and free"); //$NON-NLS-1$
}
- if (id instanceof Integer && memInfo.getCallstack() != null){
+ if (id instanceof Integer && callstackManager.hasCallstack(memInfo)){
int callstackId = (Integer)id;
- if (callstackId < memInfo.getCallstack().size()){
- AllocCallstack callstackItem = memInfo.getCallstack().get(callstackId);
- DllLoad tempLoad = callstackItem.getDllLoad();
- long addr = callstackItem.getMemoryAddress();
-
- String name = String.format("%1$08x",addr);
- if (tempLoad != null && callstackItem.getMemoryAddress()!= tempLoad.getStartAddress()) {
- SourceFile aSourcefile = pinpoint(callstackItem.getMemoryAddress(),
- callstackItem.getDllLoad());
- if (aSourcefile != null) { //callstack resolved to a file-function-line
- return name + LINE_SEPARATOR + callstackItem.getDllLoad().getName() + LINE_SEPARATOR + aSourcefile.getFileName()+ LINE_SEPARATOR + aSourcefile.getFunctionName() + LINE_SEPARATOR + aSourcefile.getLineNumber();
+ try {
+ List<AllocCallstack> callstackList = callstackManager.readCallstack(memInfo);
+ if (callstackId < callstackList.size()){
+ AllocCallstack callstackItem = callstackList.get(callstackId);
+ DllLoad tempLoad = callstackItem.getDllLoad();
+ long addr = callstackItem.getMemoryAddress();
+
+ String name = String.format(Messages.MemOpDescriptor_25,addr);
+ if (tempLoad != null && callstackItem.getMemoryAddress()!= tempLoad.getStartAddress()) {
+ SourceFile aSourcefile = pinpoint(callstackItem.getMemoryAddress(),
+ callstackItem.getDllLoad());
+ if (aSourcefile != null) { //callstack resolved to a file-function-line
+ return name + LINE_SEPARATOR + callstackItem.getDllLoad().getName() + LINE_SEPARATOR + aSourcefile.getFileName()+ LINE_SEPARATOR + aSourcefile.getFunctionName() + LINE_SEPARATOR + aSourcefile.getLineNumber();
+ }
}
+ return name + (tempLoad != null ? LINE_SEPARATOR + tempLoad.getName() : ""); //$NON-NLS-1$
}
- return name + (tempLoad != null ? LINE_SEPARATOR + tempLoad.getName() : "");
- }
+ } catch (IOException e) {
+ //since callstacks aren't fatal and we can't handle it usefully here, log this to the error log
+ Activator.getDefault().log(IStatus.ERROR, Messages.MemOpDescriptor_27, e);
}
+ }
return null;
}
@@ -312,6 +335,7 @@
//key
public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
+ //do nothing by design
}
public void keyReleased(org.eclipse.swt.events.KeyEvent keyEvent) {
@@ -341,9 +365,11 @@
}
public void mouseDown(MouseEvent e) {
+ //do nothing by design
}
public void mouseUp(MouseEvent e) {
+ //do nothing by design
}
}
@@ -409,14 +435,14 @@
if (func != null && loc != null) {
String sourceFile = loc.getSourceFile();
if (sourceFile == null
- || sourceFile.equalsIgnoreCase(""))
+ || sourceFile.equalsIgnoreCase("")) //$NON-NLS-1$
return null;
int lineNumber = loc.getLineNumber();
if (lineNumber == 0)
return null;
String name = func.getName();
if (name == null
- || name.equalsIgnoreCase(""))
+ || name.equalsIgnoreCase("")) //$NON-NLS-1$
return null;
/*
* if( onlyForProjectFiles &&
@@ -455,8 +481,8 @@
//check that used information is given
//we need to know file name and file line number
//that we could open the right line in editor
- if (cppFileName == null || ("").equals(cppFileName)
- || lineNumber == null || ("").equals(lineNumber)) {
+ if (cppFileName == null || ("").equals(cppFileName) //$NON-NLS-1$
+ || lineNumber == null || ("").equals(lineNumber)) { //$NON-NLS-1$
return;
}
try {
@@ -477,7 +503,7 @@
IProject[] projects = myWorkspaceRoot.getProjects();
for (int i = 0; i < projects.length; i++) {
file = ResourcesPlugin.getWorkspace().getRoot().getFile(
- new Path(projects[i].getName() + "\\"
+ new Path(projects[i].getName() + "\\" //$NON-NLS-1$
+ usedFileName));
// file found => skip the rest of the projects
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/Messages.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,29 @@
+package com.nokia.s60tools.analyzetool.internal.ui.graph;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "com.nokia.s60tools.analyzetool.internal.ui.graph.messages"; //$NON-NLS-1$
+ public static String MemOpDescriptor_1;
+ public static String MemOpDescriptor_11;
+ public static String MemOpDescriptor_13;
+ public static String MemOpDescriptor_18;
+ public static String MemOpDescriptor_19;
+ public static String MemOpDescriptor_20;
+ public static String MemOpDescriptor_21;
+ public static String MemOpDescriptor_22;
+ public static String MemOpDescriptor_23;
+ public static String MemOpDescriptor_25;
+ public static String MemOpDescriptor_27;
+ public static String MemOpDescriptor_3;
+ public static String MemOpDescriptor_5;
+ public static String MemOpDescriptor_7;
+ public static String MemOpDescriptor_9;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/YAxis.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/YAxis.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -72,13 +72,13 @@
/**
* Sets a new model as input
- * @param model
+ * @param newModel
*/
- public void setInput(IMemoryActivityModel model) {
+ public void setInput(IMemoryActivityModel newModel) {
if (this.model != null){
this.model.removeListener(this);
}
- this.model = model;
+ this.model = newModel;
this.model.addListener(this);
}
@@ -121,12 +121,12 @@
}
org.eclipse.swt.graphics.Point extent = gc.stringExtent(legend);
- gc.drawLine(YLEGENDSPACE - 3, (int)y + 1, YLEGENDSPACE, (int)y + 1);
+ gc.drawLine(YLEGENDSPACE - 3, y + 1, YLEGENDSPACE, y + 1);
if (y >= previousBottom)
{
- gc.drawString(legend, YLEGENDSPACE - extent.x -2, (int)y);
- previousBottom = (int)y + extent.y;
+ gc.drawString(legend, YLEGENDSPACE - extent.x -2, y);
+ previousBottom = y + extent.y;
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/graph/messages.properties Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,15 @@
+MemOpDescriptor_1=Process Id
+MemOpDescriptor_11=Total Size
+MemOpDescriptor_13=Life Time
+MemOpDescriptor_18=Error while reading callstacks from file.
+MemOpDescriptor_19=Allocation
+MemOpDescriptor_20=Leak
+MemOpDescriptor_21=Free
+MemOpDescriptor_22=%,d B
+MemOpDescriptor_23=%,d B
+MemOpDescriptor_25=%1$08x
+MemOpDescriptor_27=Error while reading callstacks from file.
+MemOpDescriptor_3=Operation Type
+MemOpDescriptor_5=Time
+MemOpDescriptor_7=Size
+MemOpDescriptor_9=Address
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/util/ColorUtil.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/util/ColorUtil.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -52,5 +52,7 @@
public static final Color COLOR_170 = new Color(Display.getDefault(), RGB_170[0], RGB_170[1], RGB_170[2]);
// Guard against instantiation
- private ColorUtil() {}
+ private ColorUtil() {
+ //do nothing by design
+ }
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/util/GraphUtils.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/internal/ui/util/GraphUtils.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -43,7 +43,7 @@
//make constructor private so class doesn't get instantiated
private GraphUtils(){
-
+ //do nothing by design
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides entry point for application.
+*/
+package com.nokia.s60tools.analyzetool;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/AdvancedPreferencePage.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/AdvancedPreferencePage.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/AnalyzeToolPreferencePage.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/AnalyzeToolPreferencePage.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -62,7 +62,7 @@
Button askButton = null;
/** Atool.exe path field. */
- Text atooDirText = null;
+ Text atoolDirText = null;
/** User specified atool.exe path. */
Label atoolDir = null;
@@ -92,7 +92,7 @@
Button processButton = null;
/** Button to refresh atool.exe version. */
- Button refeshAtoolVersion = null;
+ Button refreshAtoolVersion = null;
/** Radio group for report level. */
RadioGroupFieldEditor reportLevels = null;
@@ -121,7 +121,7 @@
/** Button to verbose atool.exe output. */
Button verboseButton = null;
- /** Button to select Tracing utility connection. */
+ /** Button to select TraceViewer connection. */
Button externalButton = null;
/** Button to select fast external data gathering mode */
@@ -130,6 +130,7 @@
/** No items button. */
Button zeroButton;
+
/**
* Constructor.
*/
@@ -143,7 +144,7 @@
* Checks preferences initial values if logging mode is not set to S60
* disables S60 data file name selections.
*/
- public final void chechInitValues() {
+ public final void checkInitValues() {
IPreferenceStore store = Activator.getPreferences();
// get stored atool folder
@@ -153,7 +154,7 @@
// if atool folder is set to point default atool location
if (atoolFolder.equals(Constants.DEFAULT_ATOOL_FOLDER)) {
- // check stored atool location exists
+ // check that stored atool location exists
java.io.File file = new java.io.File(atoolFolder);
if (file.exists()) { // if exists use this location and update
// preference page buttons
@@ -173,7 +174,7 @@
// get atool.exe path and set it atool.exe path field
String atoolPath = store.getString(Constants.USER_SELECTED_FOLDER);
- atooDirText.setText(atoolPath);
+ atoolDirText.setText(atoolPath);
// update preference page buttons
handleDefaultLocationChange();
@@ -182,7 +183,7 @@
if (useDefaultLocation.getSelection()) {
updateAtoolVersion(null);
} else {
- updateAtoolVersion(atooDirText.getText());
+ updateAtoolVersion(atoolDirText.getText());
}
// get logging mode and update buttons
@@ -219,7 +220,7 @@
spinner.setEnabled(true);
spinner.setSelection(callstackSize);
}
-
+
}
/**
@@ -413,8 +414,8 @@
atoolDir.setText(Constants.PREFS_ATOOL_PATH);
// directory field
- atooDirText = new Text(compAtool, SWT.BORDER);
- atooDirText.setLayoutData(new GridData(200, SWT.DEFAULT));
+ atoolDirText = new Text(compAtool, SWT.BORDER);
+ atoolDirText.setLayoutData(new GridData(200, SWT.DEFAULT));
// button which opens the folder selection dialog
browseButton = new Button(compAtool, SWT.NONE);
@@ -456,9 +457,9 @@
atoolVerLabel.setLayoutData(vergd13);
// create button to refresh atool.exe version
- refeshAtoolVersion = new Button(groupVersion, SWT.NONE);
- refeshAtoolVersion.setText(Constants.PREFS_REFRESH_VERSION);
- refeshAtoolVersion.addListener(SWT.Selection, this);
+ refreshAtoolVersion = new Button(groupVersion, SWT.NONE);
+ refreshAtoolVersion.setText(Constants.PREFS_REFRESH_VERSION);
+ refreshAtoolVersion.addListener(SWT.Selection, this);
// create data gathering group
createGatheringGroup();
@@ -476,7 +477,8 @@
getFieldEditorParent(), true);
addField(reportLevels);
- chechInitValues();
+
+ checkInitValues();
PlatformUI.getWorkbench().getHelpSystem().setHelp(super.getControl(),
AnalyzeToolHelpContextIDs.ANALYZE_TOOL_VIEW_MEM_LEAKS);
@@ -488,23 +490,21 @@
*/
public final void handleDefaultLocationChange() {
if (useDefaultLocation.getSelection()) {
- atooDirText.setEnabled(false);
+ atoolDirText.setEnabled(false);
browseButton.setEnabled(false);
atoolDir.setEnabled(false);
useUserSpecified.setSelection(false);
} else {
- atooDirText.setEnabled(true);
+ atoolDirText.setEnabled(true);
browseButton.setEnabled(true);
atoolDir.setEnabled(true);
useUserSpecified.setSelection(true);
}
}
-
- /**
- * Handles events.
- *
- * @param event
- * Preference page event
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
public final void handleEvent(final Event event) {
if (event.widget == browseButton) {
@@ -518,11 +518,11 @@
} else if (event.widget == useDefaultLocation
|| event.widget == atoolDir) {
handleDefaultLocationChange();
- } else if (event.widget == refeshAtoolVersion) {
+ } else if (event.widget == refreshAtoolVersion) {
if (useDefaultLocation.getSelection()) {
updateAtoolVersion(null);
} else {
- updateAtoolVersion(atooDirText.getText());
+ updateAtoolVersion(atoolDirText.getText());
}
} else if (event.widget == zeroButton || event.widget == fortyButton
|| event.widget == hundredButton) {
@@ -546,13 +546,13 @@
* Opens folder selection dialog.
*/
public final void openFolderDialog() {
- DirectoryDialog folderDialog = new DirectoryDialog(atooDirText
+ DirectoryDialog folderDialog = new DirectoryDialog(atoolDirText
.getShell(), SWT.OPEN);
folderDialog.setText(Constants.PREFS_SELECT_DIR);
- folderDialog.setFilterPath(atooDirText.getText());
+ folderDialog.setFilterPath(atoolDirText.getText());
String folderPath = folderDialog.open();
if (folderPath != null) {
- atooDirText.setText(folderPath);
+ atoolDirText.setText(folderPath);
}
}
@@ -568,7 +568,7 @@
userButton.setSelection(false);
setGroupButtons(Constants.LOGGING_EXT);
- atooDirText.setText(Constants.DEFAULT_ATOOL_FOLDER);
+ atoolDirText.setText(Constants.DEFAULT_ATOOL_FOLDER);
useDefaultLocation.setSelection(true);
handleDefaultLocationChange();
verboseButton.setSelection(false);
@@ -577,6 +577,7 @@
hundredButton.setSelection(false);
customButton.setSelection(false);
spinner.setEnabled(false);
+
//generateStatistic.setSelection(false);
super.performDefaults();
//}
@@ -592,7 +593,7 @@
//check that AT prefs page is displayed
//if( getControl() != null && getControl().isVisible() ) {
IPreferenceStore store = Activator.getPreferences();
- String atoolFolder = atooDirText.getText();
+ String atoolFolder = atoolDirText.getText();
// use default location is selected
if (useDefaultLocation.getSelection()) {
@@ -676,7 +677,7 @@
// store callstack size
store.setValue(Constants.USE_CALLSTACK_SIZE, userDefinedCSSize);
store.setValue(Constants.CALLSTACK_SIZE, size);
-
+
// update view with new settings
IActionListener listener = Activator.getActionListener();
if (listener != null) {
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/PreferenceInitializer.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/PreferenceInitializer.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/preferences/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides preference page for AnalyzeTool.
+*/
+package com.nokia.s60tools.analyzetool.preferences;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/properties/PropertiesPage.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/properties/PropertiesPage.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/properties/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides project properties page for AnalyzeTool.
+*/
+package com.nokia.s60tools.analyzetool.properties;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/ATResourceListener.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/ATResourceListener.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -28,7 +28,7 @@
import com.nokia.s60tools.analyzetool.Activator;
/**
- * Listens projec changes
+ * Listens project changes
* @author kihe
*
*/
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/ActiveSubtests.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/ActiveSubtests.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/CustomInputDialog.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/CustomInputDialog.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -25,7 +25,7 @@
import com.nokia.s60tools.analyzetool.global.Constants;
/**
- * Provides input dialog Checks that user input does not contain spaces.
+ * Provides input dialog. Checks that user input does not contain spaces.
*
* @author kihe
*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/DbghelpDllVersionInfoDialog.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Definitions for the class DbghelpDllVersionInfoDialog
+ *
+ */
+
+package com.nokia.s60tools.analyzetool.ui;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.browser.IWebBrowser;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.events.IHyperlinkListener;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+
+import com.nokia.s60tools.analyzetool.Activator;
+import com.nokia.s60tools.analyzetool.global.Constants;
+
+/**
+ * Custom dialog with clickable link and Ok and Cancel buttons for
+ * displaying of dbghelp.dll version information.
+ *
+ * @author lukamil
+ *
+ */
+public class DbghelpDllVersionInfoDialog extends Dialog {
+
+ private String dbghelpDllVersionInfo;
+
+ public DbghelpDllVersionInfoDialog(Shell shell, String dbghelpDllVersionInfo) {
+ super(shell);
+ this.dbghelpDllVersionInfo = dbghelpDllVersionInfo;
+ }
+
+ @Override
+ protected void configureShell(Shell shell) {
+ shell.setText(Constants.ANALYZE_TOOL_TITLE);
+ super.configureShell(shell);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+
+ final Composite container = (Composite) super.createDialogArea(parent);
+ container.setLayout(new GridLayout(2, false));
+
+ Composite imageComposite = new Composite(container, SWT.NONE);
+ imageComposite.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false,
+ false));
+ imageComposite.setLayout(new GridLayout());
+
+ Label imageLabel = new Label(imageComposite, SWT.NONE);
+ imageLabel.setImage(getShell().getDisplay().getSystemImage(
+ SWT.ICON_INFORMATION));
+
+ Composite infoComposite = new Composite(container, SWT.NONE);
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.verticalSpacing = 0;
+ infoComposite.setLayout(gridLayout);
+
+ String[] array = dbghelpDllVersionInfo.split("\n");
+ String info = "";
+
+ for (int i = 0; i < array.length - 1; i++) {
+ info = info + array[i] + "\n";
+ }
+
+ String link = array[array.length - 1];
+
+ Label infoLabel = new Label(infoComposite, SWT.NONE);
+ infoLabel.setText(info);
+
+ FormToolkit toolkit = new FormToolkit(getShell().getDisplay());
+ Hyperlink hyperlink = toolkit.createHyperlink(infoComposite, link,
+ SWT.NONE);
+ hyperlink.setBackground(getShell().getBackground());
+ hyperlink.setUnderlined(false);
+ hyperlink.setHref(link);
+
+ hyperlink.addHyperlinkListener(new IHyperlinkListener() {
+ public void linkEntered(HyperlinkEvent event) {
+ }
+
+ public void linkExited(HyperlinkEvent event) {
+ }
+
+ public void linkActivated(HyperlinkEvent event) {
+ IWorkbenchBrowserSupport browserSupport = Activator
+ .getDefault().getWorkbench().getBrowserSupport();
+
+ try {
+ IWebBrowser browser = browserSupport.getExternalBrowser();
+ browser.openURL(new URL(event.getHref().toString()));
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ Label questionLabel = new Label(infoComposite, SWT.NONE);
+ questionLabel.setText("Would you like to continue?");
+
+ return container;
+ }
+}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/IActionListener.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/IActionListener.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -38,7 +38,7 @@
/**
- * Disables or enables trace related actions If Tracing utility plugin could not
+ * Disables or enables trace related actions If TraceViewer plugin could not
* loaded the trace actions are disable at plugin startup.
*
* @param disable
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/MainView.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/MainView.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -39,6 +39,7 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
@@ -60,6 +61,7 @@
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
@@ -67,8 +69,12 @@
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
@@ -84,17 +90,21 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.views.navigator.ResourceNavigator;
import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
+import com.nokia.carbide.cpp.internal.project.ui.views.SymbianProjectNavigatorView;
import com.nokia.s60tools.analyzetool.Activator;
import com.nokia.s60tools.analyzetool.AnalyzeToolHelpContextIDs;
import com.nokia.s60tools.analyzetool.builder.BuilderUtil;
import com.nokia.s60tools.analyzetool.engine.AnalysisItem;
import com.nokia.s60tools.analyzetool.engine.AnalyzeFactory;
import com.nokia.s60tools.analyzetool.engine.CallstackItem;
+import com.nokia.s60tools.analyzetool.engine.DeferredCallstackManager;
import com.nokia.s60tools.analyzetool.engine.EpocReader;
import com.nokia.s60tools.analyzetool.engine.IMemoryActivityModel;
import com.nokia.s60tools.analyzetool.engine.MMPInfo;
@@ -102,6 +112,7 @@
import com.nokia.s60tools.analyzetool.engine.ParseXMLFileSAX;
import com.nokia.s60tools.analyzetool.engine.ProjectResults;
import com.nokia.s60tools.analyzetool.engine.RunResults;
+import com.nokia.s60tools.analyzetool.engine.SimpleCallstackManager;
import com.nokia.s60tools.analyzetool.engine.UseAtool;
import com.nokia.s60tools.analyzetool.engine.statistic.ProcessInfo;
import com.nokia.s60tools.analyzetool.engine.statistic.ReadFile;
@@ -113,28 +124,29 @@
import com.nokia.s60tools.analyzetool.ui.statistic.StatisticView;
/**
- * Class to display memory analysis results also provides all the
- * functionalities what AnalyzeTool has.
- *
+ * AnalyzeTool main view which displays memory analysis results and provides
+ * interface for all the functionalities what AnalyzeTool has.
+ *
* @author kihe
- *
+ *
*/
public class MainView extends ViewPart implements ISelectionListener,
- ITreeViewerListener, IActionListener, ISelectionChangedListener, KeyListener {
+ ITreeViewerListener, IActionListener, ISelectionChangedListener,
+ KeyListener {
/**
* Sorts tree view objects.
- *
+ *
* @author kihe
*/
public static class NameSorter extends ViewerSorter {
/**
* Compares view items.
- *
+ *
* @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
- *
+ *
* @param viewer
* Viewer
* @param e1
@@ -159,7 +171,7 @@
class ViewContentProvider implements ITreeContentProvider {
/**
- *
+ *
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
@@ -168,7 +180,7 @@
}
/**
- *
+ *
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object parent) {
@@ -180,8 +192,10 @@
/*
* (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ *
+ * @see
+ * org.eclipse.jface.viewers.IStructuredContentProvider#getElements(
+ * java.lang.Object)
*/
public Object[] getElements(Object parent) {
if (parent.equals(getViewSite())) {
@@ -195,8 +209,10 @@
/*
* (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang
+ * .Object)
*/
public Object getParent(Object child) {
if (child instanceof TreeObject) {
@@ -207,8 +223,10 @@
/*
* (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang
+ * .Object)
*/
public boolean hasChildren(Object parent) {
if (parent instanceof TreeParent) {
@@ -219,9 +237,10 @@
/*
* (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
- * java.lang.Object, java.lang.Object)
+ *
+ * @see
+ * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse
+ * .jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
// MethodDeclaration/Block[count(BlockStatement) = 0 and
@@ -232,9 +251,9 @@
/**
* Provides elements of tree view.
- *
+ *
* @author kihe
- *
+ *
*/
public class ViewLabelProvider extends LabelProvider {
@@ -285,9 +304,9 @@
/**
* Gets current tree object image.
- *
+ *
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
- *
+ *
* @param obj
* Current tree model item
* @return Corresponding image of tree view object
@@ -324,9 +343,9 @@
/**
* Gets current tree view object name.
- *
+ *
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
- *
+ *
* @return Current tree view object name
*/
@Override
@@ -361,7 +380,7 @@
public Action changeDetails;
/** Select S60 log file action. */
private Action s60LogTargetAction;
- /** Select Tracing utility connection action. */
+ /** Select TraceViewer connection action. */
private Action externalLogTargetAction;
/** Select fast data gathering mode */
private Action externalFastLogTargetAction;
@@ -383,11 +402,11 @@
private Action startSubtest;
/** Stop subtest action. */
private Action stopSubtest;
- /**Refresh(re-creates) project results*/
+ /** Refresh(re-creates) project results */
private Action refreshResults;
- /**Copies selected memory leak item info to the clipboard.*/
+ /** Copies selected memory leak item info to the clipboard. */
private Action copyAction;
- /** Action to open AnalyzeTool preference page.*/
+ /** Action to open AnalyzeTool preference page. */
private Action openPrefs;
/**
* Clears selected project results without removing temporary files
@@ -430,10 +449,13 @@
/** Job for analyzing data files. */
private Job analyzeJob;
+ /** Job for reading the data files for the graph. */
+ private GraphLoadJob graphLoadJob;
+
/** Last selected tree item. */
private Object lastSelectedObject;
- /** Contains information of which files is opened. */
+ /** Contains information of which files were opened. */
public FileActionHistory fileOpenHistory;
/** File open drop down menu. */
@@ -448,7 +470,7 @@
/** Tab item for the "Top allocation locations" tab */
CTabItem memoryTab;
- /** Tab item for the memory results tab*/
+ /** Tab item for the memory results tab */
CTabItem mainTab;
/** StatisticView reference */
@@ -457,18 +479,17 @@
/** Contains project related modules */
private final Hashtable<IProject, AbstractList<MMPInfo>> projectModules;
- /**Reads epocwind.out file*/
+ /** Reads epocwind.out file */
EpocReader listeningJob;
-
+
/** The chart view composite */
protected ChartContainer chart;
-
/**
* The constructor.
*/
public MainView() {
- parser = new ParseAnalyzeData(true, false);
+ parser = new ParseAnalyzeData(true, false, true);
cppFileNames = new ArrayList<String>();
startedSubtest = new ArrayList<ActiveSubtests>();
projectResults = new ProjectResults();
@@ -499,17 +520,16 @@
/*
* (non-Javadoc)
- *
+ *
* @see com.nokia.s60tools.analyzetool.ui.IActionListener#allModulesBuilt()
*/
public final void buildStateChanged(final IProject projRef) {
- //check validity
- if(!project.equals(projRef) || projectResults == null) {
+ // check validity
+ if (!project.equals(projRef) || projectResults == null) {
return;
}
-
final String datafile = projectResults.getDataFileName(projRef);
// if trace is captured or data file is opened
@@ -543,21 +563,23 @@
}
}
-
- //data file is available
+ // data file is available
int dataFileType = UseAtool.checkFileType(datafile);
- if( dataFileType == Constants.DATAFILE_INVALID || dataFileType == Constants.DATAFILE_XML || dataFileType == Constants.DATAFILE_EMPTY ) {
+ if (dataFileType == Constants.DATAFILE_INVALID
+ || dataFileType == Constants.DATAFILE_XML
+ || dataFileType == Constants.DATAFILE_EMPTY) {
return;
}
- boolean reGenerate = Util.openConfirmationDialog(Constants.BUILD_STATE_CHANGED);
-
- if( reGenerate ) {
+ boolean reGenerate = Util
+ .openConfirmationDialog(Constants.BUILD_STATE_CHANGED);
+
+ if (reGenerate) {
// sync with UI thread
runView.getControl().getDisplay().asyncExec(new Runnable() {
public void run() {
- analyzeDataFile(Constants.ANALYZE_USE_DATA_FILE, datafile,
- false);
+ analyzeDataFile(Constants.ANALYZE_USE_DATA_FILE,
+ datafile, false);
}
});
}
@@ -565,10 +587,9 @@
}
}
-
/**
* Opens file dialog and analyzing data file for given location.
- *
+ *
* @param type
* Type to define is data file asked from the user or using the
* give data file
@@ -610,7 +631,8 @@
runView.setInput(getStartupContent());
changeViewTitle(viewTitle);
- AbstractList<MMPInfo> modules = Util.loadProjectTargetsInfo(project);
+ AbstractList<MMPInfo> modules = Util
+ .loadProjectTargetsInfo(project);
projectModules.put(project, modules);
boolean xmlFile = Util.isFileXML(selectedFile);
@@ -626,7 +648,8 @@
monitor.beginTask(Constants.PROGRESSDIALOG_TITLE,
IProgressMonitor.UNKNOWN);
// Parse the data file
- ParseXMLFileSAX dataFileParser = new ParseXMLFileSAX(project, selectedFile, projectResults);
+ ParseXMLFileSAX dataFileParser = new ParseXMLFileSAX(
+ project, selectedFile, projectResults);
boolean ret = dataFileParser.parse();
// set used datafile name
@@ -638,7 +661,9 @@
// display memory leak results
if (ret) {
// update project results
- projectResults.setProjectModules(project, projectModules.get(project), dataFileParser.getModules());
+ projectResults.setProjectModules(project,
+ projectModules.get(project), dataFileParser
+ .getModules());
} else {
fileOpenHistory.removeFileName(selectedFile);
if (showErrorInfo) {
@@ -657,10 +682,9 @@
analyzingXMLJob.schedule();
} else {
- try{
+ try {
analyzeWithAtool(project, selectedFile, showErrorInfo);
- }
- catch( Exception e ) {
+ } catch (Exception e) {
analyzeJob = null;
}
}
@@ -669,7 +693,7 @@
/**
* Analyzing memory analysis results using atool.exe.
- *
+ *
* @param projectRef
* Project reference
* @param usedFile
@@ -690,26 +714,31 @@
// this make progressdialog visible on the UI
monitor.beginTask(Constants.PROGRESSDIALOG_ATOOL,
IProgressMonitor.UNKNOWN);
-
+
fileOpenHistory.setFileName(usedFile);
// add2UserActionHistory( "File opened: " + usedFile );
// set used datafile name
usedDataFileName = usedFile;
+ if (chart != null) {
+ resetGraphView();// clear out the graph view
+ }
+
// create atool object and execute atool
UseAtool atool = new UseAtool();
// create xml file
- Constants.COMMAND_LINE_ERROR_CODE errorCode = atool.createXMLFileToCarbide(
- monitor, projectRef, usedFile, "-a");
+ Constants.COMMAND_LINE_ERROR_CODE errorCode = atool
+ .createXMLFileToCarbide(monitor, projectRef,
+ usedFile, "-a");
String xmlFileLocation = null;
xmlFileLocation = atool.getDataFileName();
-
+
// if some error occurs display it to user.
- if( errorCode != Constants.COMMAND_LINE_ERROR_CODE.OK ) {
+ if (errorCode != Constants.COMMAND_LINE_ERROR_CODE.OK) {
fileOpenHistory.removeFileName(usedFile);
- Util.displayCommandLineError(errorCode);
+ Util.displayCommandLineError(errorCode);
}
// if XML file generation failed => info to the user
else if (xmlFileLocation == null) {
@@ -719,65 +748,73 @@
}
} else {
// Parse the xml file
- ParseXMLFileSAX dataFileParser = new ParseXMLFileSAX(project,
- xmlFileLocation, projectResults);
+ ParseXMLFileSAX dataFileParser = new ParseXMLFileSAX(
+ project, xmlFileLocation, projectResults);
boolean error = dataFileParser.parse();
if (showErrorInfo && !error) {
fileOpenHistory.removeFileName(usedFile);
showErrorMessage(Constants.INFO_FILE_INVALID);
}
- projectResults.setProjectModules(project, projectModules.get(project), dataFileParser.getModules());
- projectResults.setDataFileName(projectRef, usedDataFileName);
+ projectResults.setProjectModules(project,
+ projectModules.get(project), dataFileParser
+ .getModules());
+ projectResults.setDataFileName(projectRef,
+ usedDataFileName);
// update display
refreshView();
}
updateChangeDetailState(projectRef);
-
-// //this only generates statistics and this feature is currently disabled
-// if( !monitor.isCanceled() ) {
-//
-// IPreferenceStore store = Activator.getPreferences();
-// boolean generateStatistic = store.getBoolean(Constants.CREATE_STATISTIC);
-// //used file data file create statistic also
-// if( generateStatistic && UseAtool.checkFileType(usedFile) == Constants.DATAFILE_TRACE )
-// {
-// monitor.setTaskName(Constants.STATISTICS_GENERATING_PROG_TITLE);
-//
-// ReadFile fileReader = new ReadFile();
-// boolean error = fileReader.readFile(usedFile);
-// if( error && statisticView != null) {
-// AbstractList<ProcessInfo> processes = fileReader.getStatistic();
-// statisticView.setData( project, processes);
-// fileReader.finish();
-// }
-//
-// }
-// }
+
+ // //this only generates statistics and this feature is
+ // currently disabled
+ // if( !monitor.isCanceled() ) {
+ //
+ // IPreferenceStore store = Activator.getPreferences();
+ // boolean generateStatistic =
+ // store.getBoolean(Constants.CREATE_STATISTIC);
+ // //used file data file create statistic also
+ // if( generateStatistic && UseAtool.checkFileType(usedFile)
+ // == Constants.DATAFILE_TRACE )
+ // {
+ // monitor.setTaskName(Constants.STATISTICS_GENERATING_PROG_TITLE);
+ //
+ // ReadFile fileReader = new ReadFile();
+ // boolean error = fileReader.readFile(usedFile);
+ // if( error && statisticView != null) {
+ // AbstractList<ProcessInfo> processes =
+ // fileReader.getStatistic();
+ // statisticView.setData( project, processes);
+ // fileReader.finish();
+ // }
+ //
+ // }
+ // }
if (!monitor.isCanceled()) {
- monitor.setTaskName(Constants.GRAPH_GENERATING_PROG_TITLE);
- try {
- ReadFile fileReader = new ReadFile();
- boolean success = fileReader.readFile(usedFile);
- if (success) {
- if (chart != null){
- resetGraphView();
- }
- AbstractList<ProcessInfo> processes = fileReader.getStatistic();
- IMemoryActivityModel model = new AnalyzeFactory().createModel(processes.size() == 0);
- chart.setInput(project, model);
- model.addProcesses(processes);
- fileReader.finish();
- }
- }catch( OutOfMemoryError oome ) {
- Activator.getDefault().logInfo(IStatus.ERROR, IStatus.ERROR, "Can not allocate enough memory for the memory usage graph model.");
- analyzeJob = null;
- }catch (Exception e ) {
- Activator.getDefault().log(IStatus.ERROR, "Error while generating graph model", e);
- analyzeJob = null;
- }
+ // create the job for loading the graph model
+ // but only schedule it when the user gets to the graph
+ // tab
+ graphLoadJob = new GraphLoadJob(usedFile);
+ graphLoadJob.setUser(true);// set progress bar
+ graphLoadJob.setPriority(Job.LONG);
+
+ // run the following in UI thread, since widgets get
+ // accessed
+ PlatformUI.getWorkbench().getDisplay().syncExec(
+ new Runnable() {
+ public void run() {
+ if (((CTabFolder) chart.getParent())
+ .getSelection() != null && ((CTabFolder) chart.getParent())
+ .getSelection().getControl() == chart) {
+ // chart tab is currently selected
+ // so we can run the load job
+ // straight away
+ graphLoadJob.schedule();
+ }
+ }
+ });
}
analyzeJob = null;
return new Status(IStatus.OK, Constants.ANALYZE_CONSOLE_ID,
@@ -785,6 +822,11 @@
Constants.PROGRESSDIALOG_ANALYZE_COMPLETE, null);
}
};
+
+ if (graphLoadJob != null && graphLoadJob.getState() == Job.RUNNING) {
+ graphLoadJob.cancel();
+ }
+ graphLoadJob = null;
analyzeJob.setUser(true);
analyzeJob.setPriority(Job.LONG);
@@ -795,7 +837,6 @@
}
}
-
/**
* Change report detail level.
*/
@@ -865,7 +906,7 @@
/**
* Change logging mode.
- *
+ *
* @param loggingMode
* Used logging mode
*/
@@ -895,7 +936,7 @@
.getImageDescriptor(Constants.BUTTON_COMPUTER));
logTargetMenu
.setToolTipText(Constants.ACTION_CHANGE_LOGGING_MODE_TOOLTIP_EXT);
- if (loggingMode == null){
+ if (loggingMode == null) {
externalLogTargetAction.setChecked(true);
s60LogTargetAction.setChecked(false);
externalFastLogTargetAction.setChecked(false);
@@ -909,7 +950,7 @@
.getImageDescriptor(Constants.BUTTON_CELLURAR));
logTargetMenu
.setToolTipText(Constants.ACTION_CHANGE_LOGGING_MODE_TOOLTIP_S60);
- if (loggingMode == null){
+ if (loggingMode == null) {
externalLogTargetAction.setChecked(false);
s60LogTargetAction.setChecked(true);
externalFastLogTargetAction.setChecked(false);
@@ -917,11 +958,12 @@
}
}
- else if( Constants.LOGGING_EXT_FAST.equals(usedLoggingMode)) {
+ else if (Constants.LOGGING_EXT_FAST.equals(usedLoggingMode)) {
logTargetMenu.setImageDescriptor(Activator
.getImageDescriptor(Constants.BUTTON_COMPUTER_FAST));
- logTargetMenu.setToolTipText(Constants.ACTION_CHANGE_LOGGING_MODE_TOOLTIP_FAST);
- if( loggingMode == null) {
+ logTargetMenu
+ .setToolTipText(Constants.ACTION_CHANGE_LOGGING_MODE_TOOLTIP_FAST);
+ if (loggingMode == null) {
externalLogTargetAction.setChecked(false);
s60LogTargetAction.setChecked(false);
externalFastLogTargetAction.setChecked(true);
@@ -934,7 +976,7 @@
.getImageDescriptor(Constants.BUTTON_ASK));
logTargetMenu
.setToolTipText(Constants.ACTION_CHANGE_LOGGING_MODE_TOOLTIP_ASK);
- if (loggingMode == null){
+ if (loggingMode == null) {
externalLogTargetAction.setChecked(false);
s60LogTargetAction.setChecked(false);
externalFastLogTargetAction.setChecked(false);
@@ -942,9 +984,11 @@
}
}
- // if the fast data gathering mode is enabled by the preference page => enable also toolbar option
+ // if the fast data gathering mode is enabled by the preference page =>
+ // enable also toolbar option
// else disable fast data gathering mode
- externalFastLogTargetAction.setEnabled(store.getBoolean(Constants.LOGGING_FAST_ENABLED));
+ externalFastLogTargetAction.setEnabled(store
+ .getBoolean(Constants.LOGGING_FAST_ENABLED));
}
/**
@@ -983,7 +1027,7 @@
/**
* Change view title.
- *
+ *
* @param newTitle
* New title text
*/
@@ -996,8 +1040,8 @@
}
/**
- * Check project validity that is project is selected.
- *
+ * Check that selected project is open and project information can be read.
+ *
* @return True if project is open and accessible otherwise False
*/
public final boolean checkProjectValidity() {
@@ -1029,21 +1073,16 @@
// if user confirms
if (ret) {
// clear AnalyzeTool made changes
- Util util = new Util();
- util.clearAtoolChanges(project);
+ Util.clearAtoolChanges(project);
cleanAnalyzeData(null);
+ resetGraphView();
updateChangeDetailState(project);
}
- if( statisticView != null ) {
+ if (statisticView != null) {
statisticView.clean(null);
}
-
- if (chart != null){
- resetGraphView();
- }
-
}
/**
@@ -1055,27 +1094,23 @@
// clean all the project related info and data
projectResults.clear();
projectModules.clear();
- }
- else {
+ } else {
// clear only one project results
if (projectResults.contains(projectRef)) {
projectResults.clearProjectData(projectRef);
}
- if( projectModules.contains(projectRef)) {
+ if (projectModules.contains(projectRef)) {
projectModules.remove(projectRef);
}
}
-
-
cppFileNames.clear();
// update variables
activeTreeItem = null;
usedDataFileName = "";
-
// set default view contents
if (runView != null) {
runView.getControl().getDisplay().syncExec(new Runnable() {
@@ -1086,7 +1121,7 @@
}
changeViewTitle(viewTitle);
- if( statisticView != null ) {
+ if (statisticView != null) {
statisticView.clean(projectRef);
}
}
@@ -1094,9 +1129,9 @@
}
clearCallstackViewContent();
- if( clearProjectResults != null && clearProjectResults != null ) {
+ if (clearProjectResults != null && clearProjectResults != null) {
clearProjectResults.setEnabled(false);
- }else if( clearProjectResults != null ) {
+ } else if (clearProjectResults != null) {
updateChangeDetailState(projectRef);
}
@@ -1134,76 +1169,123 @@
fillLocalToolBar(bars.getToolBarManager());
}
-
/**
- * This is a callback that will allow us
- * to create the viewer and initialize it.
- */
+ * This is a callback that will allow us to create the viewer and initialize
+ * it.
+ */
@Override
- public void createPartControl( Composite parent ){
-
- //create new Tab
- CTabFolder mainFolder = new CTabFolder( parent, SWT.TOP );
-
- //create main view and add it tab
- createMainView( mainFolder );
-
- //create new statistic view
- //createMemoryView( mainFolder );
- //create graph
+ public void createPartControl(Composite parent) {
+
+ // create new Tab
+ final CTabFolder mainFolder = new CTabFolder(parent, SWT.TOP);
+
+ // create main view and add it tab
+ createMainView(mainFolder);
+
+ // create new statistic view
+ // createMemoryView( mainFolder );
+ // create graph
createGraphView(mainFolder);
- //set initial selection
- mainFolder.setSelection( mainTab );
+ // set initial selection
+ mainFolder.setSelection(mainTab);
+
+ mainFolder.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ // if we changed to the graph tab and the graph load job isn't already running
+ // schedule it now
+ if (graphLoadJob != null
+ && graphLoadJob.getState() != Job.RUNNING
+ && mainFolder.getSelection() != null
+ && mainFolder.getSelection().getControl() == chart) {
+ graphLoadJob.schedule();
+ }
+
+
+ if (mainFolder.getSelectionIndex() == 1) {
+ changeDetails.setEnabled(false);
+ } else {
+ changeDetails.setEnabled(true);
+
+ }
+ }
+ });
+
+ // stop any jobs that may be scheduled
+ mainFolder.addDisposeListener(new DisposeListener(){
+ public void widgetDisposed(DisposeEvent e) {
+ if (graphLoadJob != null){
+ graphLoadJob.cancel();
+ graphLoadJob = null;
+ }
+ if (analyzeJob != null){
+ analyzeJob.cancel();
+ analyzeJob = null;
+ }
+ }
+ });
+
}
/**
* Creates graph view and add it to graph tab
- * @param parent CTabFolder parent of the view
+ *
+ * @param mainFolder
+ * CTabFolder parent of the view
*/
private void createGraphView(CTabFolder mainFolder) {
final CTabItem chartTabItem = new CTabItem(mainFolder, SWT.NONE);
- chartTabItem.setText("Graph");
- chartTabItem.setToolTipText("AnalyzeTool graph per process");
-
+ chartTabItem.setText("Graph");
+ chartTabItem.setToolTipText("AnalyzeTool graph per process");
+
chart = new ChartContainer(mainFolder, SWT.NONE);
chartTabItem.setControl(chart);
IMemoryActivityModel model = AnalyzeFactory.getEmptyModel();
chart.setInput(project, model);
- model.addProcesses(model.getProcesses());//charts should get notified via listeners on the model
+ model.addProcesses(model.getProcesses());// charts should get notified
+ // via listeners on the
+ // model
}
-
+
/**
* Clears the graph by setting an empty model and causing paint events
*/
- private void resetGraphView(){
- if (chart != null){
+ private void resetGraphView() {
+ if (chart != null) {
chart.setInput(project, AnalyzeFactory.getEmptyModel());
- //chart.update();
+ // chart.update();
}
}
/**
* Creates new statistic view and add it to memory tab
- * @param parent Statistic view parent( CTabFolder )
+ *
+ * @param parent
+ * Statistic view parent( CTabFolder )
*/
- public void createMemoryView( CTabFolder parent )
- {
+ public void createMemoryView(CTabFolder parent) {
statisticView = new StatisticView();
- memoryTab = statisticView.createView( parent );
+ memoryTab = statisticView.createView(parent);
}
/**
* Creates memory results view
- * @param parent View parent ( CTabFolder )
+ *
+ * @param parent
+ * View parent ( CTabFolder )
*/
public void createMainView(CTabFolder parent) {
// Create SashForm this form includes all the current view components
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
- mainTab = new CTabItem( parent, SWT.NONE );
- mainTab.setControl( sashForm );
+ mainTab = new CTabItem(parent, SWT.NONE);
+ mainTab.setControl(sashForm);
mainTab.setText(Constants.MAIN_TAB_TITLE);
// create new treeviewer to shown memory analysis runs and leaks
@@ -1263,7 +1345,8 @@
contributeToActionBars();
// set view title
- viewTitle = String.format(Constants.ANALYZE_TOOL_TITLE_WITH_VERSION, Util.getAToolFeatureVersionNumber());
+ viewTitle = String.format(Constants.ANALYZE_TOOL_TITLE_WITH_VERSION,
+ Util.getAToolFeatureVersionNumber());
this.setContentDescription(viewTitle);
// add selection listener
@@ -1282,33 +1365,37 @@
PlatformUI.getWorkbench().getHelpSystem().setHelp(runView.getControl(),
AnalyzeToolHelpContextIDs.ANALYZE_MAIN);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(new ATResourceListener());
-
- //get used command line engine version
- String version = Util.getAtoolVersionNumber(Util.getAtoolInstallFolder());
-
- //compare current version to min version
- int comp = Util.compareVersionNumber(Constants.CS_SUPPORT_MIN_VERSION, version);
-
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(
+ new ATResourceListener());
+
+ // get used command line engine version
+ String version = Util.getAtoolVersionNumber(Util
+ .getAtoolInstallFolder());
+
+ // compare current version to min version
+ int comp = Util.compareVersionNumber(Constants.CS_SUPPORT_MIN_VERSION,
+ version);
+
IPreferenceStore store = Activator.getPreferences();
- //if current version is same or higher than required version => set flag to true
- if( comp == Constants.VERSION_NUMBERS_EQUALS || comp == Constants.VERSION_NUMBERS_SECOND ) {
+ // if current version is same or higher than required version => set
+ // flag to true
+ if (comp == Constants.VERSION_NUMBERS_EQUALS
+ || comp == Constants.VERSION_NUMBERS_SECOND) {
store.setValue(Constants.LOGGING_FAST_ENABLED, true);
- }
- else {
+ } else {
store.setValue(Constants.LOGGING_FAST_ENABLED, false);
}
-
+
// get default value for logging mode
preferenceChanged();
}
/**
- * When AnalyzeTool view is activated and Tracing utility plug-in is not
+ * When AnalyzeTool view is activated and TraceViewer plug-in is not
* available disable AnalyzeTool trace actions.
- *
+ *
* @see com.nokia.s60tools.analyzetool.ui.IActionListener#disableTraceActions(boolean)
- *
+ *
* @param disable
* Boolean state of trace action
*/
@@ -1329,7 +1416,7 @@
/**
* Fills context menu.
- *
+ *
* @param manager
* Menu manager
*/
@@ -1353,7 +1440,7 @@
/**
* Fills local pull down menu.
- *
+ *
* @param manager
* Menu manager
*/
@@ -1374,7 +1461,7 @@
/**
* Fills local toolbar.
- *
+ *
* @param manager
* Menu manager
*/
@@ -1419,7 +1506,7 @@
/**
* Gets call stack information of current leak.
- *
+ *
* @param treeObject
* Tree object
* @return Object
@@ -1462,10 +1549,9 @@
return parent;
}
-
/**
* Gets callstack item name.
- *
+ *
* @param callstackItem
* One callstack item
* @return Callstack name if found otherwise null
@@ -1486,14 +1572,15 @@
// check that project contains cpp file which is parsed from call stack
// list
Iterator<String> iterCppFiles = cppFileNames.iterator();
- while( iterCppFiles.hasNext() ) {
+ while (iterCppFiles.hasNext()) {
String cppFileLocation = iterCppFiles.next();
- //parse file name from the source path
+ // parse file name from the source path
int slash = Util.getLastSlashIndex(cppFileLocation);
- if( slash != -1 ) {
- String cppFile = cppFileLocation.substring(slash+1, cppFileLocation.length());
- if( cppFile.equalsIgnoreCase(fileName)) {
+ if (slash != -1) {
+ String cppFile = cppFileLocation.substring(slash + 1,
+ cppFileLocation.length());
+ if (cppFile.equalsIgnoreCase(fileName)) {
cppFileName = cppFileLocation;
break;
}
@@ -1504,7 +1591,7 @@
/**
* Gets file info for current project.
- *
+ *
* @param projectRef
* Project reference
*/
@@ -1541,7 +1628,7 @@
/**
* Gets project results.
- *
+ *
* @param projectRef
* Project reference
*/
@@ -1573,18 +1660,17 @@
}
}
- //update clear project results action state
- if( projectResults.contains(projectRef) ) {
+ // update clear project results action state
+ if (projectResults.contains(projectRef)) {
clearProjectResults.setEnabled(true);
- }
- else {
+ } else {
clearProjectResults.setEnabled(false);
}
}
/**
* Gets memory leak analysis results.
- *
+ *
* @param showErrorInfo
* Display error info or not
* @return Object memory leak analysis results
@@ -1606,9 +1692,9 @@
return getStartupContent();
}
- if( !projectModules.containsKey(project) )
- {
- AbstractList<MMPInfo> modules = Util.loadProjectTargetsInfo(project);
+ if (!projectModules.containsKey(project)) {
+ AbstractList<MMPInfo> modules = Util
+ .loadProjectTargetsInfo(project);
projectModules.put(project, modules);
}
@@ -1639,8 +1725,7 @@
// create TreeHelper object
// TreeHelper class creates tree model to this view.
- TreeHelper helper = new TreeHelper(lastSelectedObject,
- store);
+ TreeHelper helper = new TreeHelper(lastSelectedObject, store);
// clear active item
activeTreeItem = null;
@@ -1649,8 +1734,8 @@
usedDataFileName = projectResults.getDataFileName(project);
// change view title
- changeViewTitle(viewTitle
- + " results from file: " + usedDataFileName);
+ changeViewTitle(viewTitle + " results from file: "
+ + usedDataFileName);
// thru runs
Iterator<RunResults> runIterator = runs.iterator();
@@ -1659,7 +1744,8 @@
RunResults oneRunResults = runIterator.next();
// creates one run information at the time
- TreeParent oneRunTree = helper.createRunResults(oneRunResults, modules);
+ TreeParent oneRunTree = helper.createRunResults(oneRunResults,
+ modules);
// get active item
// active must ask from the TreeHelper class
@@ -1682,7 +1768,7 @@
/**
* Sets startup contents for view.
- *
+ *
* @return Object which can be displayd
*/
public TreeParent getStartupContent() {
@@ -1734,13 +1820,13 @@
}
/**
- * Check that if subtest by given name allready exists.
- *
+ * Check that if subtest by given name already exists.
+ *
* @param subTestName
* Subtest name
* @param target
* Testing target
- * @return True if allready exists otherwise False
+ * @return True if already exists otherwise False
*/
public final boolean isSubtestExists(final String subTestName,
final String target) {
@@ -1756,11 +1842,9 @@
return false;
}
-
-
/**
* Go thru the project files and stores mmp files.
- *
+ *
* @param resource
* One resource file of project
*/
@@ -1804,14 +1888,13 @@
if (obj instanceof TreeObject) {
lastSelectedObject = obj;
- //get callstack items
+ // get callstack items
Object resultObject = getCallStack((TreeObject) obj);
// if results not found
- if( resultObject == null ) {
+ if (resultObject == null) {
copyAction.setEnabled(false);
- }
- else {
+ } else {
callstackView.setInput(resultObject);
copyAction.setEnabled(true);
}
@@ -1967,7 +2050,7 @@
@Override
public void run() {
cleanAnalyzeData(project);
- if(statisticView != null ) {
+ if (statisticView != null) {
statisticView.clean(project);
}
updateChangeDetailState(project);
@@ -1979,13 +2062,14 @@
refreshResults = new Action() {
@Override
public void run() {
- if( project != null && project.isOpen() && projectResults != null ) {
+ if (project != null && project.isOpen()
+ && projectResults != null) {
String dataFile = projectResults.getDataFileName(project);
- if( dataFile != null || !("").equals(dataFile) ) {
- analyzeDataFile(Constants.ANALYZE_USE_DATA_FILE, dataFile, true);
- }
- else {
- //some internal error occurred => disable this action
+ if (dataFile != null || !("").equals(dataFile)) {
+ analyzeDataFile(Constants.ANALYZE_USE_DATA_FILE,
+ dataFile, true);
+ } else {
+ // some internal error occurred => disable this action
refreshResults.setEnabled(false);
}
@@ -1996,51 +2080,57 @@
refreshResults.setToolTipText(Constants.ACTION_RE_ANALYZE_TOOLTIP);
refreshResults.setEnabled(false);
- //copy active item contents to clipboard
- copyAction = new Action(){
+ // copy active item contents to clipboard
+ copyAction = new Action() {
@Override
public void run() {
- //copy active item contents to clipboard
-
- //Create new clipboard object
+ // copy active item contents to clipboard
+
+ // Create new clipboard object
Clipboard cp = new Clipboard(runView.getControl().getDisplay());
- //Create new TextTransfer object
- //TextTransfer converts plain text represented as a java String to a platform specific representation of the data and vice versa
+ // Create new TextTransfer object
+ // TextTransfer converts plain text represented as a java String
+ // to a platform specific representation of the data and vice
+ // versa
TextTransfer tt = TextTransfer.getInstance();
- //new StringBuffer which contains the copied text
+ // new StringBuffer which contains the copied text
StringBuffer sb = new StringBuffer(64);
// chech that project contains results
- if( projectResults == null || !projectResults.contains(project) || activeTreeItem == null ) {
+ if (projectResults == null || !projectResults.contains(project)
+ || activeTreeItem == null) {
return;
}
- //get active item info (also callstack info)
+ // get active item info (also callstack info)
AnalysisItem item = null;
// if selected item is subtest
- if( activeTreeItem.isSubTest() ) {
+ if (activeTreeItem.isSubTest()) {
item = projectResults.getSubtestItem(project,
- activeTreeItem.getRunID(), activeTreeItem.getMemLeakID(),
- activeTreeItem.getSubtestID());
- }
- else {
- item = projectResults.getSpecific(project, activeTreeItem.getRunID(), activeTreeItem.getMemLeakID());
+ activeTreeItem.getRunID(), activeTreeItem
+ .getMemLeakID(), activeTreeItem
+ .getSubtestID());
+ } else {
+ item = projectResults.getSpecific(project, activeTreeItem
+ .getRunID(), activeTreeItem.getMemLeakID());
}
// check that item found
- if( item == null ) {
+ if (item == null) {
return;
}
sb.append(activeTreeItem.getName());
- String separator = System.getProperty ( "line.separator" );
+ String separator = System.getProperty("line.separator");
sb.append(separator);
char space = ' ';
- AbstractList<CallstackItem> callstackItems = item.getCallstackItems();
- Iterator<CallstackItem> iterCallstack = callstackItems.iterator();
- while( iterCallstack.hasNext() ) {
+ AbstractList<CallstackItem> callstackItems = item
+ .getCallstackItems();
+ Iterator<CallstackItem> iterCallstack = callstackItems
+ .iterator();
+ while (iterCallstack.hasNext()) {
CallstackItem oneItem = iterCallstack.next();
sb.append(" ");
sb.append(oneItem.getMemoryAddress());
@@ -2052,36 +2142,39 @@
sb.append(oneItem.getFileName());
sb.append(space);
int lineNbr = oneItem.getLeakLineNumber();
- if( lineNbr > 0 ) {
+ if (lineNbr > 0) {
sb.append(lineNbr);
}
sb.append(separator);
}
- //info is ready => now copy info to clipboard
+ // info is ready => now copy info to clipboard
cp.setContents(new Object[] { sb.toString() },
- new Transfer[] { tt });
+ new Transfer[] { tt });
}
};
copyAction.setText(Constants.ACTION_COPY);
copyAction.setEnabled(false);
-
+
// open preferences action
openPrefs = new Action() {
@Override
public void run() {
- PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
- Constants.ANALYZE_TOOL_PREFS_ID, null, null);
-
- if( dialog != null ) {
+ PreferenceDialog dialog = PreferencesUtil
+ .createPreferenceDialogOn(PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getShell(),
+ Constants.ANALYZE_TOOL_PREFS_ID, null, null);
+
+ if (dialog != null) {
dialog.open();
}
}
};
openPrefs.setText(Constants.ACTION_OPEN_PREFS);
openPrefs.setToolTipText(Constants.ACTION_OPEN_PREFS_TOOLTIP);
- openPrefs.setImageDescriptor(Activator.getImageDescriptor(Constants.BUTTON_OPEN_PREFS));
-
+ openPrefs.setImageDescriptor(Activator
+ .getImageDescriptor(Constants.BUTTON_OPEN_PREFS));
+
changeReportActionTooltip();
updateChangeDetailState(project);
updateBuildState(project);
@@ -2098,11 +2191,12 @@
}
/**
- * Creates file open actions.
+ * Creates data gathering actions.
*/
private void makeLogTargetActions() {
- s60LogTargetAction = new Action(Constants.LOGGING_S60, Action.AS_RADIO_BUTTON) {
+ s60LogTargetAction = new Action(Constants.LOGGING_S60,
+ IAction.AS_RADIO_BUTTON) {
@Override
public void run() {
changeLogTarget(Constants.LOGGING_S60);
@@ -2114,7 +2208,8 @@
s60LogTargetAction.setImageDescriptor(Activator
.getImageDescriptor(Constants.BUTTON_CELLURAR));
- externalLogTargetAction = new Action(Constants.LOGGING_EXT, Action.AS_RADIO_BUTTON) {
+ externalLogTargetAction = new Action(Constants.LOGGING_EXT,
+ IAction.AS_RADIO_BUTTON) {
@Override
public void run() {
changeLogTarget(Constants.LOGGING_EXT);
@@ -2126,25 +2221,27 @@
externalLogTargetAction.setImageDescriptor(Activator
.getImageDescriptor(Constants.BUTTON_COMPUTER));
- externalFastLogTargetAction = new Action(Constants.LOGGING_EXT_FAST, Action.AS_RADIO_BUTTON) {
+ externalFastLogTargetAction = new Action(Constants.LOGGING_EXT_FAST,
+ IAction.AS_RADIO_BUTTON) {
@Override
public void run() {
changeLogTarget(Constants.LOGGING_EXT_FAST);
}
};
externalFastLogTargetAction.setText(Constants.PREFS_EXT_FAST);
- externalFastLogTargetAction.setToolTipText(Constants.PREFS_EXT_FAST_TOOLTIP);
+ externalFastLogTargetAction
+ .setToolTipText(Constants.PREFS_EXT_FAST_TOOLTIP);
externalFastLogTargetAction.setImageDescriptor(Activator
.getImageDescriptor(Constants.BUTTON_COMPUTER_FAST));
- askLogTargetAction = new Action(Constants.LOGGING_ASK_ALLWAYS, Action.AS_RADIO_BUTTON) {
+ askLogTargetAction = new Action(Constants.LOGGING_ASK_ALLWAYS,
+ IAction.AS_RADIO_BUTTON) {
@Override
public void run() {
changeLogTarget(Constants.LOGGING_ASK_ALLWAYS);
}
};
-
askLogTargetAction.setText(Constants.PREFS_ASK_ALWAYS);
askLogTargetAction
.setToolTipText(Constants.ACTION_CHANGE_LOGGING_MODE_TOOLTIP_ASK);
@@ -2154,9 +2251,8 @@
}
/**
- * Opens current callstack item on default editor and pinpoints memory leak.
- * line
- *
+ * Displays selected callstack item location on default file editor.
+ *
* @param treeObject
* Tree object
*/
@@ -2245,7 +2341,7 @@
/**
* Updates log target action and report action tooltips.
- *
+ *
* @see com.nokia.s60tools.analyzetool.ui.IActionListener#preferenceChanged()
*/
public void preferenceChanged() {
@@ -2270,10 +2366,10 @@
// refresh callstack view
getCallStack(activeTreeItem);
- if( project != null && project.isOpen() && projectResults.contains(project)) {
+ if (project != null && project.isOpen()
+ && projectResults.contains(project)) {
clearProjectResults.setEnabled(true);
- }
- else {
+ } else {
clearProjectResults.setEnabled(false);
}
updateChangeDetailState(project);
@@ -2284,12 +2380,13 @@
/**
* Runs user selected AnalyzeTool action.
- *
- * @see com.nokia.s60tools.analyzetool.ui.IActionListener#runAction(IProject, com.nokia.s60tools.analyzetool.global.Constants.ACTIONS)
- *
+ *
+ * @see com.nokia.s60tools.analyzetool.ui.IActionListener#runAction(IProject,
+ * com.nokia.s60tools.analyzetool.global.Constants.ACTIONS)
+ *
* @param projectRef
* Project reference
- *
+ *
* @param action
* Which action to execute
*/
@@ -2315,12 +2412,13 @@
}
/**
- * Saves existing report or data file asks user where to save.
- *
+ * Copies existing report or data file to the new location. Asks from user
+ * new location where to copy the file.
+ *
* @param type
* Which kind of type the file is. Possible types xml or data
* file
- *
+ *
* @return True if saving successfully otherwise false
*/
public final boolean saveReportFile(final int type) {
@@ -2432,10 +2530,10 @@
/**
* Notifies this action delegate that the selection in the workbench has
* changed.
- *
+ *
* @param part
* Workbench part
- *
+ *
* @param selection
* User selection
*/
@@ -2444,9 +2542,12 @@
// project reference
IProject selectedProject = null;
- // check where the selection comes
- // supported views: CommonNavigator and SymbianProjectNavigator
- if (!(part instanceof org.eclipse.ui.navigator.CommonNavigator) ) {
+ // Check where the selection comes from
+ // Supported views: CommonNavigator, SymbianProjectNavigatorView and
+ // ResourceNavigator
+
+ if (!(part instanceof CommonNavigator
+ || part instanceof SymbianProjectNavigatorView || part instanceof ResourceNavigator)) {
return;
}
@@ -2470,8 +2571,7 @@
selectedProject = ((org.eclipse.cdt.core.model.ICProject) adaptable)
.getProject();
} else {
- resource = (IResource) adaptable
- .getAdapter(IResource.class);
+ resource = (IResource) adaptable.getAdapter(IResource.class);
}
// resource found => get resource project
@@ -2490,18 +2590,17 @@
project = selectedProject;
getProjectResults(selectedProject);
updateBuildState(project);
- if( statisticView != null ) {
+ if (statisticView != null) {
statisticView.handleProjectChange(project);
}
}
}
-
/**
- * Executes clicAction when user selects item in the AnalyzeTool view.
- *
+ * Executes clickAction when user selects item in the AnalyzeTool view.
+ *
* @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
- *
+ *
* @param event
* Selection changed event
*/
@@ -2558,7 +2657,7 @@
/**
* Shows error message.
- *
+ *
* @param message
* Error message to show
*/
@@ -2572,7 +2671,7 @@
/**
* Shows message.
- *
+ *
* @param message
* Message to show
*/
@@ -2614,11 +2713,24 @@
Util.deleteDataFile(project);
}
- ICarbideProjectInfo info = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
+ ICarbideProjectInfo info = CarbideBuilderPlugin.getBuildManager()
+ .getProjectInfo(project);
ICarbideBuildConfiguration config = info.getDefaultConfiguration();
- //start listening emulator output
- if( config.getPlatformString().equals(Constants.BUILD_TARGET_WINSCW) ) {
+ // start listening emulator output
+ if (config.getPlatformString().equals(Constants.BUILD_TARGET_WINSCW)) {
+
+ String dbghelpDllVersionInfo = Util.getDbghelpDllVersionInfo(Util
+ .getAtoolInstallFolder());
+
+ if (dbghelpDllVersionInfo != Constants.DBGHELPDLL_IS_UP_TO_DATE) {
+
+ DbghelpDllVersionInfoDialog dialog = new DbghelpDllVersionInfoDialog(
+ getSite().getShell(), dbghelpDllVersionInfo);
+
+ if (dialog.open() == Window.CANCEL)
+ return;
+ }
listeningJob = new EpocReader(project, this);
listeningJob.start();
@@ -2628,7 +2740,7 @@
return;
}
- // else start trace capturing using Tracing utility connection
+ // else start trace capturing using TraceViewer connection
// main view class instance
// this instance if passed to the TraceWrapper class
@@ -2750,7 +2862,7 @@
Constants.SUBTEST_RUNNING_PROCESSES_INFO, targets);
}
- if (target == null || ("").equals(target) ) {
+ if (target == null || ("").equals(target)) {
return;
}
@@ -2767,7 +2879,7 @@
// get process id for selected target
int processID = startedPros.get(target);
- // if subtest allready exists
+ // if subtest already exists
if (isSubtestExists(subTestName, target)) {
Util.showMessage(Constants.SUBTEST_ALLREADY_RUNNING);
return;
@@ -2779,8 +2891,8 @@
startedSubtest.add(subtes);
// start subtest
- parser.parse(Constants.PREFIX + " " + processID + " TEST_START 0000 "
- + subTestName);
+ parser.parse(Constants.PREFIX + " " + subtes.getProcessID()
+ + " TEST_START 0000 " + subTestName);
updateSubtestInfoText(Constants.SUBTEST_STARTED + target
+ Constants.ENRULE + subTestName);
@@ -2792,15 +2904,17 @@
*/
public final void stop(boolean analyze) {
- ICarbideProjectInfo info = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
+ ICarbideProjectInfo info = CarbideBuilderPlugin.getBuildManager()
+ .getProjectInfo(project);
ICarbideBuildConfiguration config = info.getDefaultConfiguration();
- if( config.getPlatformString().equalsIgnoreCase(Constants.BUILD_TARGET_WINSCW) ) {
+ if (config.getPlatformString().equalsIgnoreCase(
+ Constants.BUILD_TARGET_WINSCW)) {
listeningJob.stop();
traceStopped(analyze);
return;
}
- //else stop Tracing utility connection
+ // else stop TraceViewer connection
try {
Class<?> buildManagerClass = Class
.forName("com.nokia.s60tools.analyzetool.trace.TraceWrapper");
@@ -2817,7 +2931,7 @@
if (("").equals(returnValue)) {
traceStopped(analyze);
} else {
- showErrorMessage("Error while disconnecting Tracing utility");
+ showErrorMessage("Error while disconnecting TraceViewer");
traceAction.setImageDescriptor(Activator
.getImageDescriptor((Constants.BUTTON_STOP)));
traceActive = true;
@@ -2853,19 +2967,15 @@
traceAction.setImageDescriptor(Activator
.getImageDescriptor((Constants.BUTTON_RUN)));
traceAction.setText(Constants.ACTION_START_TRACE);
- traceAction
- .setToolTipText(Constants.ACTION_START_TRACE);
+ traceAction.setToolTipText(Constants.ACTION_START_TRACE);
traceActive = false;
// close any active subtests
if (!startedSubtest.isEmpty()) {
for (int j = 0; j < startedSubtest.size(); j++) {
- ActiveSubtests oneSubtest = startedSubtest
- .get(j);
- parser.parse(Constants.PREFIX + " "
- + oneSubtest.getProcessID()
- + " TEST_END" + " 0000 "
- + oneSubtest.getName());
+ ActiveSubtests oneSubtest = startedSubtest.get(j);
+ parser.parse(Constants.PREFIX + " " + oneSubtest.getProcessID()
+ + " TEST_END" + " 0000 " + oneSubtest.getName());
}
startedSubtest.clear();
}
@@ -2886,15 +2996,14 @@
project = traceStartedProjectRef;
// parse and analyze saved data file
- if( analyze ) {
- analyzeDataFile(Constants.ANALYZE_USE_DATA_FILE, null,
- true);
+ if (analyze) {
+ analyzeDataFile(Constants.ANALYZE_USE_DATA_FILE, null, true);
}
}
/**
- * Stop one subtest If there multiple subtest running ask for user to which
- * one to stop.
+ * Stop one subtest. If there is multiple subtests running ask for user to
+ * which one to stop.
*/
public final void stopSubTest() {
// no processes show info
@@ -2960,9 +3069,9 @@
/**
* When AnalyzeTool view tree model is collapsed.
- *
+ *
* @see org.eclipse.jface.viewers.ITreeViewerListener#treeCollapsed(org.eclipse.jface.viewers.TreeExpansionEvent)
- *
+ *
* @param event
* Tree expansion event
*/
@@ -2973,9 +3082,9 @@
/**
* When AnalyzeTool view tree model is expanded.
- *
+ *
* @see org.eclipse.jface.viewers.ITreeViewerListener#treeExpanded(org.eclipse.jface.viewers.TreeExpansionEvent)
- *
+ *
* @param event
* Tree expansion event
*/
@@ -2986,7 +3095,7 @@
/**
* Updates allocation count in the information label.
- *
+ *
* The information layout is hard to modify so we need to manage information
* label text
*/
@@ -3036,7 +3145,7 @@
/**
* Update build action icon and tooltip text.
- *
+ *
* @param projectRef
* Project reference
*/
@@ -3067,18 +3176,25 @@
}
/**
- * Indicates the target (emulator/device) by inspecting the given projects build configuration.
- * @param selectedProject the currently active project
- * @return "emulator" if the build configuration is WINSCW, "device" otherwise
+ * Indicates the target (emulator/device) by inspecting the given projects
+ * build configuration.
+ *
+ * @param selectedProject
+ * the currently active project
+ * @return "emulator" if the build configuration is WINSCW, "device"
+ * otherwise
*/
private static String getTraceTarget(final IProject selectedProject) {
String target = "";
if (selectedProject != null && selectedProject.isOpen()) {
- ICarbideProjectInfo info = CarbideBuilderPlugin.getBuildManager().getProjectInfo(selectedProject);
+ ICarbideProjectInfo info = CarbideBuilderPlugin.getBuildManager()
+ .getProjectInfo(selectedProject);
if (info != null) {
- ICarbideBuildConfiguration config = info.getDefaultConfiguration();
+ ICarbideBuildConfiguration config = info
+ .getDefaultConfiguration();
target = config.getPlatformString().equals(
- Constants.BUILD_TARGET_WINSCW) ? Constants.INFO_TRACE_FROM_EMULATOR : Constants.INFO_TRACE_FROM_DEVICE;
+ Constants.BUILD_TARGET_WINSCW) ? Constants.INFO_TRACE_FROM_EMULATOR
+ : Constants.INFO_TRACE_FROM_DEVICE;
}
}
return target;
@@ -3086,7 +3202,7 @@
/**
* Update change detail action state.
- *
+ *
* @param projectRef
* Current project
*/
@@ -3106,23 +3222,22 @@
}
String dataFile = projectResults.getDataFileName(projectRef);
- if( dataFile != null ) {
+ if (dataFile != null) {
int fileType = UseAtool.checkFileType(dataFile);
- if( fileType == Constants.DATAFILE_TRACE || fileType == Constants.DATAFILE_LOG ) {
+ if (fileType == Constants.DATAFILE_TRACE
+ || fileType == Constants.DATAFILE_LOG) {
refreshResults.setEnabled(true);
- }
- else {
+ } else {
refreshResults.setEnabled(false);
}
- }
- else {
+ } else {
refreshResults.setEnabled(false);
}
}
/**
* Sets information to the information label.
- *
+ *
* @param infoText
* Info text
*/
@@ -3145,7 +3260,7 @@
/**
* Updates label by given string.
- *
+ *
* @param line
* String to display
*/
@@ -3167,10 +3282,10 @@
/**
* Updates Subtest info to the information label.
- *
+ *
* The information layout is hard to modify so we need to manage information
* label text
- *
+ *
* @param text
* New label text
*/
@@ -3221,17 +3336,16 @@
traceStartedProjectRef = project;
// change icon and information text
- traceAction
- .setImageDescriptor(Activator
- .getImageDescriptor((Constants.BUTTON_STOP)));
- traceAction
- .setText(Constants.ACTION_STOP_TRACE);
- traceAction
- .setToolTipText(Constants.ACTION_STOP_TRACE);
+ traceAction.setImageDescriptor(Activator
+ .getImageDescriptor((Constants.BUTTON_STOP)));
+ traceAction.setText(Constants.ACTION_STOP_TRACE);
+ traceAction.setToolTipText(Constants.ACTION_STOP_TRACE);
traceActive = true;
String fromTarget = getTraceTarget(traceStartedProjectRef);
- updateLabel(fromTarget.length()==0 ? Constants.INFO_TRACE_START : String.format(Constants.INFO_TRACE_FROM_TARGET_START, fromTarget));
+ updateLabel(fromTarget.length() == 0 ? Constants.INFO_TRACE_START
+ : String.format(Constants.INFO_TRACE_FROM_TARGET_START,
+ fromTarget));
// add2UserActionHistory( "Trace started for
// project: "
// +project.getName() +" at "+ Util.getTime() );
@@ -3248,7 +3362,7 @@
/**
* Overrided method to capture keyevents.
- *
+ *
* @see org.eclipse.swt.events.KeyListener#keyPressed(org.eclipse.swt.events.KeyEvent)
*/
public void keyPressed(KeyEvent e) {
@@ -3265,8 +3379,8 @@
// ctrl key pressed
boolean ctrlPressed = (e.stateMask & SWT.CTRL) != 0;
- //if ctrl and c key pressed => run copy action
- if(ctrlPressed & cPressed){
+ // if ctrl and c key pressed => run copy action
+ if (ctrlPressed & cPressed) {
// Triggering copy action
copyAction.run();
}
@@ -3275,9 +3389,77 @@
/**
* (non-Javadoc)
+ *
* @see org.eclipse.swt.events.KeyListener#keyReleased(org.eclipse.swt.events.KeyEvent)
*/
public void keyReleased(KeyEvent e) {
// This method is overrided
}
+
+ /**
+ * This job parses the .dat file and loads the graph
+ *
+ */
+ class GraphLoadJob extends Job {
+
+ /** Location of file to parse for graph model */
+ private String datFileLocation;
+
+ /**
+ * Constructor
+ *
+ * @param aDatFileLocation
+ * Location of file to parse for graph model
+ */
+ public GraphLoadJob(String aDatFileLocation) {
+ super(Constants.GRAPH_LOAD_JOB_TITLE);
+ this.datFileLocation = aDatFileLocation;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+
+ monitor.beginTask(Constants.GRAPH_GENERATING_PROG_TITLE,
+ IProgressMonitor.UNKNOWN);
+ try {
+ ReadFile fileReader = new ReadFile();
+ boolean success = fileReader.readFile(datFileLocation);
+ if (success) {
+ AbstractList<ProcessInfo> processes = fileReader
+ .getStatistic();
+ IMemoryActivityModel model = new AnalyzeFactory()
+ .createModel(processes.size() == 0);
+ if (processes.size() > 0) {
+ model.setDeferredCallstackReading(fileReader
+ .hasDeferredCallstacks());
+ if (model.isDeferredCallstackReading()) {
+ DeferredCallstackManager callstackManager = new DeferredCallstackManager(
+ datFileLocation);
+ callstackManager.setProcesses(processes);
+ model.setCallstackManager(callstackManager);
+ } else {
+ model.setCallstackManager(new SimpleCallstackManager());
+ }
+ }
+ if (!monitor.isCanceled()) {
+ chart.setInput(project, model);
+ model.addProcesses(processes);
+ }
+ fileReader.finish();
+ }
+
+ } catch (OutOfMemoryError oome) {
+ Activator
+ .getDefault()
+ .logInfo(IStatus.ERROR, IStatus.ERROR,
+ "Can not allocate enough memory for the memory usage graph model.");
+ } catch (Exception e) {
+ Activator.getDefault().log(IStatus.ERROR,
+ "Error while generating graph model", e);
+ }
+ graphLoadJob = null;
+ return Status.OK_STATUS;
+ }
+
+ }
}
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/ResourceVisitor.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/ResourceVisitor.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/TreeHelper.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/TreeHelper.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -194,7 +194,7 @@
return checkedModules.get(moduleName);
}
else if (!modules.isEmpty()) {
- boolean build = Util.chechModuleBuildState(modules, moduleName);
+ boolean build = Util.checkModuleBuildState(modules, moduleName);
if( !build ) {
checkedModules.put(moduleName, build);
}
@@ -358,14 +358,20 @@
// get active logging mode
String reportLevel = store.getString(Constants.REPORT_LEVEL);
-
+
// create tree parent for test runs
- TreeParent testRuns = new TreeParent(Constants.ITEM_TREE_MEM_LEAKS
- + item.getID() + " " + item.getMemoryLeakTime());
-
+ String title = null;
+ if( item.getCallstackItems() != null ) {
+ title = Constants.ITEM_TREE_MEM_LEAKS
+ + item.getID() + " - " + item.getMemoryLeakTime() +" - Callstack size: " +item.getCallstackItems().size();
+ }
+ else {
+ title = Constants.ITEM_TREE_MEM_LEAKS + item.getID() + " - " + item.getMemoryLeakTime();
+ }
+ TreeParent testRuns = new TreeParent(title);
+
// get callstack items
- Iterator<CallstackItem> stackItems = item.getCallstackItems()
- .iterator();
+ Iterator<CallstackItem> stackItems = item.getCallstackItems().iterator();
// is one know line printed
boolean printed = false;
@@ -451,7 +457,19 @@
}
}
-
+
+ Object[] childs = testRuns.getChildren();
+ int childCount = 0;
+ if( childs != null ) {
+ childCount = childs.length;
+ }
+ int callstackCount = item.getCallstackItems().size();
+
+ if( callstackCount != childCount ) {
+ title = Constants.ITEM_TREE_MEM_LEAKS
+ + item.getID() + " - " + item.getMemoryLeakTime() +" - Callstack size: " +callstackCount +" ("+(callstackCount - childCount)+" filtered)";
+ testRuns.setName(title);
+ }
TreeParent incRoot;
incRoot = new TreeParent(Constants.ANALYZE_TOOL_TITLE);
incRoot.addChild(testRuns);
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/TreeObject.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/TreeObject.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/TreeParent.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/TreeParent.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/ActivateMainView.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/ActivateMainView.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/ClearAtoolChanges.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/ClearAtoolChanges.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/CompileSymbianComponent.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/CompileSymbianComponent.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/CompileWithAtool.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/CompileWithAtool.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/DropDownMenu.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/DropDownMenu.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/FileAction.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/FileAction.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/FileActionHistory.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/FileActionHistory.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/ViewMemoryLeakFromFile.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/ViewMemoryLeakFromFile.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/actions/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides actions for AnalyzeTool, such as project pop-up menu actions.
+*/
+package com.nokia.s60tools.analyzetool.ui.actions;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/package-info.java Wed Apr 21 19:42:48 2010 +0300
@@ -0,0 +1,4 @@
+/**
+* Provides User Interface elements for AnalyzeTool.
+*/
+package com.nokia.s60tools.analyzetool.ui;
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/statistic/ATComparator.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/statistic/ATComparator.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
--- a/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/statistic/StatisticView.java Wed Apr 21 15:14:16 2010 +0300
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/ui/statistic/StatisticView.java Wed Apr 21 19:42:48 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -19,10 +19,11 @@
import java.util.AbstractList;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
-import java.util.Calendar;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
@@ -63,8 +64,8 @@
import com.nokia.s60tools.analyzetool.engine.statistic.ProcessInfo;
import com.nokia.s60tools.analyzetool.engine.statistic.SourceFile;
import com.nokia.s60tools.analyzetool.engine.statistic.SymReader;
+import com.nokia.s60tools.analyzetool.global.Constants;
import com.nokia.s60tools.analyzetool.global.Util;
-import com.nokia.s60tools.analyzetool.global.Constants;
import com.nokia.s60tools.analyzetool.ui.ResourceVisitor;
/**
@@ -341,7 +342,7 @@
AllocInfo oneInfo = iterAllocs.next();
//get allocation callstack
- AbstractList<AllocCallstack> allocCalls = oneInfo.getCallstack();
+ List<AllocCallstack> allocCalls = oneInfo.getCallstack();
Iterator<AllocCallstack> iterAllocCalls = allocCalls.iterator();
//go thru callstack values until find first source file