Skip to content

Releases: yse/easy_profiler

v2.1.0

01 Nov 11:54
v2.1.0
Compare
Choose a tag to compare

Core

  • #106 bookmarks support
  • #134 fixed includes
  • #157 added new build flags EASY_OPTION_TRUNCATE_RUNTIME_NAMES and EASY_OPTION_CHECK_MAX_VALUE_SIZE for checking maximum block runtime-name length and max EASY_VALUE array size at run-time. I recommend you do not use these flags (they're disabled by default) because they add additional runtime checks which would lead to minor slow-down. It is just better not to use very long names and arrays (max 2816 bytes / chars) instead of additional runtime checks.
  • replaced usage of COMPILER_MSVC (which is not defined anywhere) with _MSC_VER in current_time.h

UI

  • #106 bookmarks support
  • added search matches highlighting for Stats tree and Blocks list
  • added statistics for selected area
  • added median duration calculation
  • added avg and median durations to the histogram
  • added borders for the histogram
  • added possibility to select area using selected block begin and end times (just right-click on any block on the Diagram)
  • use transparent RoundProgressDialog everywhere
  • added max rows count calculation for Call-stack Stata-tree mode
  • #112 fixed loosing focus for Diagram tool-tips
  • #125 fixed tool-tips behavior when switching between applications
  • #143 fixed negative weight for QFont
  • #154 fixed reconnect issue after previous connection failure
  • fixed CSS parsing
  • fixed CSS style
  • workaround for Qt huge memory leak on Linux when creating and deleting Qt-objects in different threads
  • rearranged application settings

Build

  • #123 #124 linux deployment fix
  • #128 #129 fixed build with std::chrono clock
  • #126 #127 avoid propagation of -std=gnu++11 to user targets
  • #131 #132 fixed build for MIPS
  • #137 fixed Android build
  • #145 support building with QNX 7.0

Warnings

v2.0.1: Clang build fix, high-dpi displays fix, minor fixes

03 Jun 19:46
91d10c2
Compare
Choose a tag to compare

Core changes

  • (#108) Fixed Clang build

UI changes

  • (#89) Fixed scaling for high-dpi displays + respecting explicitly set font scaling (Windows)
  • Fixed histogram scaling when using mouse wheel
  • Updated UI style

v2.0.0: Arbitrary values, Snapshot, Bug fixes

27 Apr 20:17
7761364
Compare
Choose a tag to compare

Core changes

  • (#31) Added possibility to save user metrics (a.k.a. arbitrary values)
    • #include <easy/arbitrary_value.h>
    • Use EASY_VALUE("Name", variable_ref); // See more options at easy/arbitrary_value.h
  • Added file converter (currently only .prof to .json is supported)
  • (#75) There is no need anymore to wait all threads finish their opened frames when dumping blocks to file/stream
  • (#81) Added CMake option to choose function names format
  • Added CMake option EASY_PROFILER_NO_GUI to build without profiler_gui
  • (#48) Minimized paddings in .prof file header
  • Bug fixes
    • Fixed EASY_ENABLE_ALIGNMENT build error
    • (#75) Fixed UI freeze when hitting Cancel button while transmitting profiled blocks from profiled application to the UI
    • Mac: Added support for building with Apple LLVM clang version < 8.0
      • Add support for building with pre 2016 Apple LLVM clang
      • Automatically detect Apple clang that do not support thread_local
      • Clarify clang thread_local support code comment
    • (#72) Windows: VS2017 build fix
    • Unix: Context switch logger gets the processor cycle counter instead of time of a day
    • Other bug fixes

UI changes

  • (#31) Added arbitrary values viewer
  • (#100) Added possibility to zoom in selected region
  • (#91) Added possibility to take a snapshot. Now you can save selected area to separate file. Works both with blue selection (hold right mouse button + move) and black ruler (double-click + hold mouse button + move)
  • Improved UI styles
  • Blocks histogram (under Diagram scene) is now resizeable
  • (#89) Added viewport info widget. See [Settings] -> [See viewport info]
  • Bug fixes
    • Fixed hierarchy building for zero duration blocks - events and arbitrary values are always visible
    • (#89) Trying to fix high-dpi displays problem (maybe not fixed 😞 )
    • Other bug fixes

v2.0.0-beta.1

28 Dec 16:05
Compare
Choose a tag to compare
v2.0.0-beta.1 Pre-release
Pre-release

Beta version of release v2.0.
Needed to test fonts issue on high-dpi displays.

v1.3.0 - MacOS support and bug fixes

13 Oct 13:47
@yse yse
Compare
Choose a tag to compare

Core

  • MacOS support!
  • Added new API functions:
    • bool profiler::isCapturing() - alias for isEnabled()
    • void profiler::startCapture() - alias for EASY_PROFILER_ENABLE
    • void profiler::stopCapture() - alias for EASY_PROFILER_DISABLE
  • Added new field in BlocksTreeRoot struct
  • Added version argument in fillTrees... functions
  • Added SerializedCSwitch struct
  • Added EASY_FORCE_INLINE macros
  • thread_id_t change to uint64_t with backward compatibility

GUI

  • Improvement
  • Added possibility to display only frames (top-level blocks) on histogram to be able to find unexpected blocks on top level. Use [Settings] -> [Only frames on histogram]
  • Added popup window when moving mouse cursor to thread name in Diagram window
  • Fix bugs (#66 #68)

v1.2.0

08 May 09:56
@yse yse
Compare
Choose a tag to compare

Core

  • Added non-scoped block functionality for beginning and ending block manually from different functions. To open block use EASY_NONSCOPED_BLOCK macro, to close block use EASY_END_BLOCK. See #29 for more information
  • Added new API functions for getting current time (ticks) and converting it to nano- and microseconds:
    • timestamp_t profiler::currentTime() returns current time in ticks;
    • profiler::toNanoseconds() and profiler::toMicroseconds() for converting ticks to nano and microseconds;
  • Add following cmake options to easy_profiler_core CMakeLists.txt:
    • BUILD_WITH_CHRONO_STEADY_CLOCK - use std::chrono::steady_clock as a timer. By default is OFF
    • BUILD_WITH_CHRONO_HIGH_RESOLUTION_CLOCK - use std::chrono::high_resolution_clock as a timer. By default is OFF

If both is set to ON - use std::chrono::high_resolution_clock.
If both is set to OFF - use QueryPerformanceCounter/rtdsc timer.

Note: Do not forget to clean CMakeCache file if you've changed an option.

  • Calculating total children duration per thread/frame/parent

GUI

  • Displaying "total self %" (duration % excluding all children) per thread/frame/parent
  • Changed "Connect" button logic: if connected to the profiled application then additional click performs disconnect. Changed appropriate tool-tip.
  • Fixed displaying unicode text in popup and at histogram window
  • Display current opened file name at the window title;
  • Suggest save file name: using current system date and time as file name;
  • Checking for unsaved network session before opening new file and before exit.
  • Added "Use Right Mouse Button..." hint to Hierarchy window. See #35 #33
  • Changed popup position on Diagram - now it is better positioned for small window also.
  • Added additional field "Self" to the popup on Diagram. Self stands for "self duration" (duration excluding all children).
  • Clear FPS Monitor contents after successful connect.
  • Minor fixes

New functionality

11 Apr 14:20
@yse yse
Compare
Choose a tag to compare

General

  • Relicensed under either of MIT or Apache v2.0 at your option

Core

  • Added following functions:
    • bool profiler::isMainThread() - Returns true if current thread has been marked as Main. Otherwise, returns false
    • profiler::timestamp_t profiler::this_thread_frameTime() returns last frame duration for current thread
    • profiler::timestamp_t profiler::this_thread_frameTimeLocalMax() returns local max of frame duration for current thread. Local max is maximum frame duration since last frameTimeLocalMax() call
    • profiler::timestamp_t profiler::this_thread_frameTimeLocalAvg() returns local average of frame duration for current thread. Local average is average frame duration since last frameTimeLocalAvg() call
    • profiler::timestamp_t profiler::main_thread_frameTime() returns last frame duration for main thread
    • profiler::timestamp_t profiler::main_thread_frameTimeLocalMax() returns local max of frame duration for main thread. Local max is maximum frame duration since last frameTimeLocalMax() call
    • profiler::timestamp_t profiler::main_thread_frameTimeLocalAvg() returns local average of frame duration for main thread. Local average is average frame duration since last frameTimeLocalAvg() call
    • bool profiler::isEnabled() - returns true if profiler is enabled
    • bool profiler::isEventTracingEnabled() - returns true if event tracing is enabled
    • bool profiler::isLowPriorityEventTracing() - returns true if event tracing has low priority
    • bool profiler::isListening() - returns true if profiler is listening a signal for capturing blocks
  • Some errors fixed

GUI

  • Added real-time FPS Monitor which shows current max/avg frame time in GUI even if profiler is disabled. You just need to connect to the profiled app. You can close (hide) FPS Monitor and it would not send network requests to the profiled application anymore. You can increase/decrease FPS Monitor requests interval in "Settings -> FPS Monitor -> Request interval, ms". Right click on FPS Monitor window to show context menu in which you can clear contents or hide FPS Monitor.
  • Added possibility to change Expected-frame-time via histogram: use Any-modifier (Shift, Ctrl, Alt) + RMB-click
  • Added manual version of histogram boundary control:
    • Shift + LMB-click (or Wheel) change top boundary
    • Ctrl + LMB-click (or Wheel) to change bottom boundary
  • Added possibility to adjust selection ruler boundaries (both black and blue rulers)
  • Show capture dialog immediately if profiling session has been already enabled. You may now profile everything from the application launch (initialization etc.).

Note: "Frame" means every top-level block (block without parents).

Minor fixes

28 Feb 07:04
@yse yse
Compare
Choose a tag to compare
  • Improved performance
  • MinGW compatibility
  • CMake package files in correct subdirectory

Add cmake package layout

07 Feb 15:35
@yse yse
Compare
Choose a tag to compare

Add cmake/easy_profiler directory. You can set CMAKE_PREFIX_PATH and use find_package(easy_profiler)

Initial release

17 Jan 14:04
@yse yse
Compare
Choose a tag to compare
v1.0.1

(GUI) Fixed wrong hierarchy tree building in "Plain mode" (not all bl…