All Versions
Latest Version
Avg Release Cycle
108 days
Latest Release
1666 days ago

Changelog History
Page 1

  • v2.1.0 Changes

    November 01, 2019


    • ๐Ÿ‘ #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 Changes

    June 03, 2018

    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 Changes

    April 27, 2018

    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 Changes

    December 28, 2017

    ๐Ÿš€ Beta version of release v2.0.
    โœ… Needed to test fonts issue on high-dpi displays.

  • v1.3.0 Changes

    October 13, 2017


    • ๐ŸŽ 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


    • ๐Ÿ‘Œ 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 Changes

    May 08, 2017


    • 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


    • 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
  • v1.1.0 Changes

    April 11, 2017


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


    • โž• 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


    • 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).

  • v1.0.3 Changes

    February 28, 2017
    • ๐Ÿ‘Œ Improved performance
    • MinGW compatibility
    • ๐Ÿ“ฆ CMake package files in correct subdirectory
  • v1.0.2 Changes

    February 07, 2017

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

  • v1.0.1

    January 17, 2017