Easyprofiler added
16
3rdparty/easyprofiler/profiler_gui/CMakeFiles/CMakeDirectoryInformation.cmake
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.5
|
||||
|
||||
# Relative path conversion top directories.
|
||||
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/alex/Work/C++Projects/easyprofiler")
|
||||
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/alex/Work/C++Projects/easyprofiler")
|
||||
|
||||
# Force unix paths in dependencies.
|
||||
set(CMAKE_FORCE_UNIX_PATHS 1)
|
||||
|
||||
|
||||
# The C and CXX include file regular expressions for this directory.
|
||||
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
|
||||
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
|
59
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/DependInfo.cmake
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
# The set of languages for which implicit dependencies are needed:
|
||||
set(CMAKE_DEPENDS_LANGUAGES
|
||||
"CXX"
|
||||
)
|
||||
# The set of files for implicit dependencies of each language:
|
||||
set(CMAKE_DEPENDS_CHECK_CXX
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/qrc_resources.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/arbitrary_value_inspector.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_graphics_view.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_tree_widget.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_functions.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/descriptors_tree_widget.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_chronometer_item.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_frame_rate_viewer.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_item.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_scrollbar.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_qtimer.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals_qobjects.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/main.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/main_window.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/profiler_gui_automoc.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_item.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_loader.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o"
|
||||
"/home/alex/Work/C++Projects/easyprofiler/profiler_gui/treeview_first_column_delegate.cpp" "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o"
|
||||
)
|
||||
set(CMAKE_CXX_COMPILER_ID "GNU")
|
||||
|
||||
# Preprocessor definitions for this target.
|
||||
set(CMAKE_TARGET_DEFINITIONS_CXX
|
||||
"BUILD_WITH_EASY_PROFILER=1"
|
||||
"EASY_DEFAULT_PORT=28077"
|
||||
"EASY_PROFILER_VERSION_MAJOR=1"
|
||||
"EASY_PROFILER_VERSION_MINOR=3"
|
||||
"EASY_PROFILER_VERSION_PATCH=0"
|
||||
"QT_CORE_LIB"
|
||||
"QT_GUI_LIB"
|
||||
"QT_NO_DEBUG"
|
||||
"QT_WIDGETS_LIB"
|
||||
)
|
||||
|
||||
# The include file search paths:
|
||||
set(CMAKE_CXX_TARGET_INCLUDE_PATH
|
||||
"profiler_gui"
|
||||
"/home/alex/Work/Qt/5.8/gcc_64/include"
|
||||
"/home/alex/Work/Qt/5.8/gcc_64/include/QtWidgets"
|
||||
"/home/alex/Work/Qt/5.8/gcc_64/include/QtGui"
|
||||
"/home/alex/Work/Qt/5.8/gcc_64/include/QtCore"
|
||||
"/home/alex/Work/Qt/5.8/gcc_64/./mkspecs/linux-g++"
|
||||
"easy_profiler_core/include"
|
||||
)
|
||||
|
||||
# Targets to which this target links.
|
||||
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||
"/home/alex/Work/C++Projects/easyprofiler/easy_profiler_core/CMakeFiles/easy_profiler.dir/DependInfo.cmake"
|
||||
)
|
||||
|
||||
# Fortran module output directory.
|
||||
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
603
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/build.make
vendored
Normal file
@@ -0,0 +1,603 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.5
|
||||
|
||||
# Delete rule output on recipe failure.
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
|
||||
# Remove some rules from gmake that .SUFFIXES does not remove.
|
||||
SUFFIXES =
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
|
||||
# Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E remove -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/alex/Work/C++Projects/easyprofiler
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/alex/Work/C++Projects/easyprofiler
|
||||
|
||||
# Include any dependencies generated for this target.
|
||||
include profiler_gui/CMakeFiles/profiler_gui.dir/depend.make
|
||||
|
||||
# Include the progress variables for this target.
|
||||
include profiler_gui/CMakeFiles/profiler_gui.dir/progress.make
|
||||
|
||||
# Include the compile flags for this target's objects.
|
||||
include profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o: profiler_gui/main.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/main.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/main.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/main.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/main.cpp > CMakeFiles/profiler_gui.dir/main.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/main.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/main.cpp -o CMakeFiles/profiler_gui.dir/main.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o: profiler_gui/arbitrary_value_inspector.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/arbitrary_value_inspector.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/arbitrary_value_inspector.cpp > CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/arbitrary_value_inspector.cpp -o CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o: profiler_gui/blocks_graphics_view.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_graphics_view.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_graphics_view.cpp > CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_graphics_view.cpp -o CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o: profiler_gui/blocks_tree_widget.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_tree_widget.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_tree_widget.cpp > CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_tree_widget.cpp -o CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o: profiler_gui/common_functions.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/common_functions.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_functions.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/common_functions.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_functions.cpp > CMakeFiles/profiler_gui.dir/common_functions.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/common_functions.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_functions.cpp -o CMakeFiles/profiler_gui.dir/common_functions.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o: profiler_gui/descriptors_tree_widget.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/descriptors_tree_widget.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/descriptors_tree_widget.cpp > CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/descriptors_tree_widget.cpp -o CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o: profiler_gui/easy_chronometer_item.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_chronometer_item.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_chronometer_item.cpp > CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_chronometer_item.cpp -o CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o: profiler_gui/easy_frame_rate_viewer.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_frame_rate_viewer.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_frame_rate_viewer.cpp > CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_frame_rate_viewer.cpp -o CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o: profiler_gui/easy_graphics_item.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_item.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_item.cpp > CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_item.cpp -o CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o: profiler_gui/easy_graphics_scrollbar.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_scrollbar.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_scrollbar.cpp > CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_scrollbar.cpp -o CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o: profiler_gui/easy_qtimer.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_qtimer.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_qtimer.cpp > CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_qtimer.cpp -o CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o: profiler_gui/globals.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/globals.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/globals.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals.cpp > CMakeFiles/profiler_gui.dir/globals.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/globals.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals.cpp -o CMakeFiles/profiler_gui.dir/globals.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o: profiler_gui/globals_qobjects.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals_qobjects.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals_qobjects.cpp > CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals_qobjects.cpp -o CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o: profiler_gui/main_window.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/main_window.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/main_window.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/main_window.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/main_window.cpp > CMakeFiles/profiler_gui.dir/main_window.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/main_window.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/main_window.cpp -o CMakeFiles/profiler_gui.dir/main_window.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o: profiler_gui/tree_widget_item.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_item.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_item.cpp > CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_item.cpp -o CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o: profiler_gui/tree_widget_loader.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_loader.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_loader.cpp > CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_loader.cpp -o CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o: profiler_gui/treeview_first_column_delegate.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/treeview_first_column_delegate.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/treeview_first_column_delegate.cpp > CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/treeview_first_column_delegate.cpp -o CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o: profiler_gui/profiler_gui_automoc.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/profiler_gui_automoc.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/profiler_gui_automoc.cpp > CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/profiler_gui_automoc.cpp -o CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o
|
||||
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o: profiler_gui/CMakeFiles/profiler_gui.dir/qrc_resources.cpp
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o -c /home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/qrc_resources.cpp
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.i"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/qrc_resources.cpp > CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.i
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.s"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/qrc_resources.cpp -o CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.s
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.requires:
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.provides: profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.requires
|
||||
$(MAKE) -f profiler_gui/CMakeFiles/profiler_gui.dir/build.make profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.provides.build
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.provides
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.provides.build: profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o
|
||||
|
||||
|
||||
# Object files for target profiler_gui
|
||||
profiler_gui_OBJECTS = \
|
||||
"CMakeFiles/profiler_gui.dir/main.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/common_functions.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/globals.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/main_window.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o" \
|
||||
"CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o"
|
||||
|
||||
# External object files for target profiler_gui
|
||||
profiler_gui_EXTERNAL_OBJECTS =
|
||||
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/build.make
|
||||
bin/profiler_gui: /home/alex/Work/Qt/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
|
||||
bin/profiler_gui: bin/libeasy_profiler.so
|
||||
bin/profiler_gui: /home/alex/Work/Qt/5.8/gcc_64/lib/libQt5Gui.so.5.8.0
|
||||
bin/profiler_gui: /home/alex/Work/Qt/5.8/gcc_64/lib/libQt5Core.so.5.8.0
|
||||
bin/profiler_gui: profiler_gui/CMakeFiles/profiler_gui.dir/link.txt
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Linking CXX executable ../bin/profiler_gui"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/profiler_gui.dir/link.txt --verbose=$(VERBOSE)
|
||||
|
||||
# Rule to build all files generated by this target.
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/build: bin/profiler_gui
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/build
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/globals.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/main_window.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o.requires
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/requires: profiler_gui/CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o.requires
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/requires
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/clean:
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && $(CMAKE_COMMAND) -P CMakeFiles/profiler_gui.dir/cmake_clean.cmake
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/clean
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui.dir/depend:
|
||||
cd /home/alex/Work/C++Projects/easyprofiler && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alex/Work/C++Projects/easyprofiler /home/alex/Work/C++Projects/easyprofiler/profiler_gui /home/alex/Work/C++Projects/easyprofiler /home/alex/Work/C++Projects/easyprofiler/profiler_gui /home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/DependInfo.cmake --color=$(COLOR)
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui.dir/depend
|
||||
|
30
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/cmake_clean.cmake
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
file(REMOVE_RECURSE
|
||||
"profiler_gui_automoc.cpp"
|
||||
"CMakeFiles/profiler_gui.dir/qrc_resources.cpp"
|
||||
"CMakeFiles/profiler_gui.dir/main.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/common_functions.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/globals.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/main_window.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o"
|
||||
"CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o"
|
||||
"../bin/profiler_gui.pdb"
|
||||
"../bin/profiler_gui"
|
||||
)
|
||||
|
||||
# Per-language clean rules from dependency scanning.
|
||||
foreach(lang CXX)
|
||||
include(CMakeFiles/profiler_gui.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||
endforeach()
|
2
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/depend.make
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Empty dependencies file for profiler_gui.
|
||||
# This may be replaced when dependencies are built.
|
10
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/flags.make
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.5
|
||||
|
||||
# compile CXX with /usr/bin/c++
|
||||
CXX_FLAGS = -O3 -DNDEBUG -fPIC -DEASY_CHRONO_STEADY_CLOCK=0 -DEASY_CHRONO_HIGHRES_CLOCK=0 -DEASY_OPTION_START_LISTEN_ON_STARTUP=0 -DEASY_OPTION_MEASURE_STORAGE_EXPAND=0 -DEASY_OPTION_STORAGE_EXPAND_BLOCKS_ON=0 -DEASY_OPTION_IMPLICIT_THREAD_REGISTRATION=1 -DEASY_OPTION_REMOVE_EMPTY_UNGUARDED_THREADS=0 -DEASY_OPTION_LOG_ENABLED=0 -DEASY_OPTION_PRETTY_PRINT_FUNCTIONS=0 -DEASY_OPTION_BUILTIN_COLORS=1 -std=gnu++11 -std=gnu++11
|
||||
|
||||
CXX_DEFINES = -DBUILD_WITH_EASY_PROFILER=1 -DEASY_DEFAULT_PORT=28077 -DEASY_PROFILER_VERSION_MAJOR=1 -DEASY_PROFILER_VERSION_MINOR=3 -DEASY_PROFILER_VERSION_PATCH=0 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB
|
||||
|
||||
CXX_INCLUDES = -I/home/alex/Work/C++Projects/easyprofiler/profiler_gui -isystem /home/alex/Work/Qt/5.8/gcc_64/include -isystem /home/alex/Work/Qt/5.8/gcc_64/include/QtWidgets -isystem /home/alex/Work/Qt/5.8/gcc_64/include/QtGui -isystem /home/alex/Work/Qt/5.8/gcc_64/include/QtCore -isystem /home/alex/Work/Qt/5.8/gcc_64/./mkspecs/linux-g++ -I/home/alex/Work/C++Projects/easyprofiler/easy_profiler_core/include
|
||||
|
1
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/link.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/profiler_gui.dir/main.cpp.o CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o CMakeFiles/profiler_gui.dir/common_functions.cpp.o CMakeFiles/profiler_gui.dir/descriptors_tree_widget.cpp.o CMakeFiles/profiler_gui.dir/easy_chronometer_item.cpp.o CMakeFiles/profiler_gui.dir/easy_frame_rate_viewer.cpp.o CMakeFiles/profiler_gui.dir/easy_graphics_item.cpp.o CMakeFiles/profiler_gui.dir/easy_graphics_scrollbar.cpp.o CMakeFiles/profiler_gui.dir/easy_qtimer.cpp.o CMakeFiles/profiler_gui.dir/globals.cpp.o CMakeFiles/profiler_gui.dir/globals_qobjects.cpp.o CMakeFiles/profiler_gui.dir/main_window.cpp.o CMakeFiles/profiler_gui.dir/tree_widget_item.cpp.o CMakeFiles/profiler_gui.dir/tree_widget_loader.cpp.o CMakeFiles/profiler_gui.dir/treeview_first_column_delegate.cpp.o CMakeFiles/profiler_gui.dir/profiler_gui_automoc.cpp.o CMakeFiles/profiler_gui.dir/CMakeFiles/profiler_gui.dir/qrc_resources.cpp.o -o ../bin/profiler_gui -rdynamic /home/alex/Work/Qt/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0 ../bin/libeasy_profiler.so /home/alex/Work/Qt/5.8/gcc_64/lib/libQt5Gui.so.5.8.0 /home/alex/Work/Qt/5.8/gcc_64/lib/libQt5Core.so.5.8.0 -lpthread -Wl,-rpath,/home/alex/Work/Qt/5.8/gcc_64/lib:/home/alex/Work/C++Projects/easyprofiler/bin:
|
21
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui.dir/progress.make
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
CMAKE_PROGRESS_1 = 9
|
||||
CMAKE_PROGRESS_2 = 10
|
||||
CMAKE_PROGRESS_3 = 11
|
||||
CMAKE_PROGRESS_4 = 12
|
||||
CMAKE_PROGRESS_5 = 13
|
||||
CMAKE_PROGRESS_6 = 14
|
||||
CMAKE_PROGRESS_7 = 15
|
||||
CMAKE_PROGRESS_8 = 16
|
||||
CMAKE_PROGRESS_9 = 17
|
||||
CMAKE_PROGRESS_10 = 18
|
||||
CMAKE_PROGRESS_11 = 19
|
||||
CMAKE_PROGRESS_12 = 20
|
||||
CMAKE_PROGRESS_13 = 21
|
||||
CMAKE_PROGRESS_14 = 22
|
||||
CMAKE_PROGRESS_15 = 23
|
||||
CMAKE_PROGRESS_16 = 24
|
||||
CMAKE_PROGRESS_17 = 25
|
||||
CMAKE_PROGRESS_18 = 26
|
||||
CMAKE_PROGRESS_19 = 27
|
||||
CMAKE_PROGRESS_20 = 28
|
||||
|
29
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/AutogenInfo.cmake
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
set(AM_SOURCES "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/main.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/arbitrary_value_inspector.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_graphics_view.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_tree_widget.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_functions.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/descriptors_tree_widget.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_chronometer_item.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_frame_rate_viewer.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_item.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_scrollbar.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_qtimer.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals_qobjects.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/main_window.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_item.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_loader.cpp;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/treeview_first_column_delegate.cpp" )
|
||||
set(AM_RCC_SOURCES "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/resources.qrc" )
|
||||
set(AM_RCC_INPUTS "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/logo.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/arrow-up-hover.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/radio-indicator.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/settings.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/reload.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/open-folder2.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/arrow-up-disabled.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/statistics.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/lan_on.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/wifi.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/check-disabled.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/close-white.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/maximize-white-pressed.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/save.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/play.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/close-white-hover.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/collapse.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/reload-folder2.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/list.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/search-prev.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/off.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/arrow-down-disabled.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/radio-indicator-disabled.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/search-next.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/arrow-up.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/maximize-white.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/check.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/lan.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/maximize-white-hover.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/lan.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/minimize-white.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/stop.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/minimize-white-pressed.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/delete.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/arrow-down.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/wifi_on.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/lan_on.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/expand.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/close-white-pressed.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/arrow-down-hover.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/minimize-white-hover.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/images/default/statistics2.svg@list_sep@/home/alex/Work/C++Projects/easyprofiler/profiler_gui/themes/default.css")
|
||||
set(AM_SKIP_MOC "" )
|
||||
set(AM_SKIP_UIC )
|
||||
set(AM_HEADERS "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/arbitrary_value_inspector.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_graphics_view.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/blocks_tree_widget.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_functions.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/common_types.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/descriptors_tree_widget.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_chronometer_item.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_frame_rate_viewer.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_item.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_graphics_scrollbar.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/easy_qtimer.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/globals.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/main_window.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_item.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/tree_widget_loader.h;/home/alex/Work/C++Projects/easyprofiler/profiler_gui/treeview_first_column_delegate.h" )
|
||||
set(AM_MOC_COMPILE_DEFINITIONS "BUILD_WITH_EASY_PROFILER=1;EASY_DEFAULT_PORT=28077;EASY_PROFILER_VERSION_MAJOR=1;EASY_PROFILER_VERSION_MINOR=3;EASY_PROFILER_VERSION_PATCH=0;QT_CORE_LIB;QT_GUI_LIB;QT_NO_DEBUG;QT_WIDGETS_LIB")
|
||||
set(AM_MOC_INCLUDES "/home/alex/Work/C++Projects/easyprofiler/profiler_gui;/home/alex/Work/Qt/5.8/gcc_64/include;/home/alex/Work/Qt/5.8/gcc_64/include/QtWidgets;/home/alex/Work/Qt/5.8/gcc_64/include/QtGui;/home/alex/Work/Qt/5.8/gcc_64/include/QtCore;/home/alex/Work/Qt/5.8/gcc_64/./mkspecs/linux-g++;/home/alex/Work/C++Projects/easyprofiler/easy_profiler_core/include;/usr/include")
|
||||
set(AM_MOC_OPTIONS "")
|
||||
set(AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE "")
|
||||
set(AM_CMAKE_BINARY_DIR "/home/alex/Work/C++Projects/easyprofiler/")
|
||||
set(AM_CMAKE_SOURCE_DIR "/home/alex/Work/C++Projects/easyprofiler/")
|
||||
set(AM_QT_MOC_EXECUTABLE "/home/alex/Work/Qt/5.8/gcc_64/bin/moc")
|
||||
set(AM_QT_UIC_EXECUTABLE "")
|
||||
set(AM_QT_RCC_EXECUTABLE "/home/alex/Work/Qt/5.8/gcc_64/bin/rcc")
|
||||
if(DEFINED ENV{DEB_BUILD_MULTIARCH} AND DEFINED ENV{DEB_HOST_MULTIARCH} AND "/home/alex/Work/Qt/5.8/gcc_64/bin/moc" MATCHES "/usr/lib/$ENV{DEB_HOST_MULTIARCH}/qt5/bin/moc")
|
||||
set(AM_QT_MOC_EXECUTABLE "/usr/lib/$ENV{DEB_BUILD_MULTIARCH}/qt5/bin/moc")
|
||||
endif()
|
||||
set(AM_CMAKE_CURRENT_SOURCE_DIR "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/")
|
||||
set(AM_CMAKE_CURRENT_BINARY_DIR "/home/alex/Work/C++Projects/easyprofiler/profiler_gui/")
|
||||
set(AM_QT_VERSION_MAJOR "5")
|
||||
set(AM_TARGET_NAME "profiler_gui_automoc")
|
||||
set(AM_ORIGIN_TARGET_NAME "profiler_gui")
|
||||
set(AM_RELAXED_MODE "FALSE")
|
||||
set(AM_UIC_TARGET_OPTIONS )
|
||||
set(AM_UIC_OPTIONS_FILES )
|
||||
set(AM_UIC_OPTIONS_OPTIONS )
|
||||
set(AM_RCC_OPTIONS_FILES "")
|
||||
set(AM_RCC_OPTIONS_OPTIONS "")
|
11
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/DependInfo.cmake
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# The set of languages for which implicit dependencies are needed:
|
||||
set(CMAKE_DEPENDS_LANGUAGES
|
||||
)
|
||||
# The set of files for implicit dependencies of each language:
|
||||
|
||||
# Targets to which this target links.
|
||||
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Fortran module output directory.
|
||||
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
77
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/build.make
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.5
|
||||
|
||||
# Delete rule output on recipe failure.
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
|
||||
# Remove some rules from gmake that .SUFFIXES does not remove.
|
||||
SUFFIXES =
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
|
||||
# Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E remove -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/alex/Work/C++Projects/easyprofiler
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/alex/Work/C++Projects/easyprofiler
|
||||
|
||||
# Utility rule file for profiler_gui_automoc.
|
||||
|
||||
# Include the progress variables for this target.
|
||||
include profiler_gui/CMakeFiles/profiler_gui_automoc.dir/progress.make
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui_automoc:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/alex/Work/C++Projects/easyprofiler/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Automatic moc and rcc for target profiler_gui"
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && /usr/bin/cmake -E cmake_autogen /home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/ Release
|
||||
|
||||
profiler_gui_automoc: profiler_gui/CMakeFiles/profiler_gui_automoc
|
||||
profiler_gui_automoc: profiler_gui/CMakeFiles/profiler_gui_automoc.dir/build.make
|
||||
|
||||
.PHONY : profiler_gui_automoc
|
||||
|
||||
# Rule to build all files generated by this target.
|
||||
profiler_gui/CMakeFiles/profiler_gui_automoc.dir/build: profiler_gui_automoc
|
||||
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui_automoc.dir/build
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui_automoc.dir/clean:
|
||||
cd /home/alex/Work/C++Projects/easyprofiler/profiler_gui && $(CMAKE_COMMAND) -P CMakeFiles/profiler_gui_automoc.dir/cmake_clean.cmake
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui_automoc.dir/clean
|
||||
|
||||
profiler_gui/CMakeFiles/profiler_gui_automoc.dir/depend:
|
||||
cd /home/alex/Work/C++Projects/easyprofiler && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alex/Work/C++Projects/easyprofiler /home/alex/Work/C++Projects/easyprofiler/profiler_gui /home/alex/Work/C++Projects/easyprofiler /home/alex/Work/C++Projects/easyprofiler/profiler_gui /home/alex/Work/C++Projects/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/DependInfo.cmake --color=$(COLOR)
|
||||
.PHONY : profiler_gui/CMakeFiles/profiler_gui_automoc.dir/depend
|
||||
|
10
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/cmake_clean.cmake
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
file(REMOVE_RECURSE
|
||||
"profiler_gui_automoc.cpp"
|
||||
"CMakeFiles/profiler_gui.dir/qrc_resources.cpp"
|
||||
"CMakeFiles/profiler_gui_automoc"
|
||||
)
|
||||
|
||||
# Per-language clean rules from dependency scanning.
|
||||
foreach(lang )
|
||||
include(CMakeFiles/profiler_gui_automoc.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||
endforeach()
|
2
3rdparty/easyprofiler/profiler_gui/CMakeFiles/profiler_gui_automoc.dir/progress.make
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
CMAKE_PROGRESS_1 = 29
|
||||
|
1
3rdparty/easyprofiler/profiler_gui/CMakeFiles/progress.marks
vendored
Normal file
@@ -0,0 +1 @@
|
||||
29
|
70
3rdparty/easyprofiler/profiler_gui/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
#set(CMAKE_PREFIX_PATH f:/qt/5.5/5.6/msvc2013_64/lib/cmake)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
find_package(Qt5Widgets)
|
||||
|
||||
if (Qt5Widgets_FOUND)
|
||||
if (NOT("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") AND WIN32)
|
||||
set(APPLICATION_PLATFORM WIN32)
|
||||
endif ()
|
||||
add_executable(profiler_gui ${APPLICATION_PLATFORM}
|
||||
main.cpp
|
||||
arbitrary_value_inspector.h
|
||||
arbitrary_value_inspector.cpp
|
||||
blocks_graphics_view.h
|
||||
blocks_graphics_view.cpp
|
||||
blocks_tree_widget.h
|
||||
blocks_tree_widget.cpp
|
||||
common_functions.h
|
||||
common_functions.cpp
|
||||
common_types.h
|
||||
descriptors_tree_widget.h
|
||||
descriptors_tree_widget.cpp
|
||||
easy_chronometer_item.h
|
||||
easy_chronometer_item.cpp
|
||||
easy_frame_rate_viewer.h
|
||||
easy_frame_rate_viewer.cpp
|
||||
easy_graphics_item.h
|
||||
easy_graphics_item.cpp
|
||||
easy_graphics_scrollbar.h
|
||||
easy_graphics_scrollbar.cpp
|
||||
easy_qtimer.h
|
||||
easy_qtimer.cpp
|
||||
globals.h
|
||||
globals.cpp
|
||||
globals_qobjects.cpp
|
||||
main_window.h
|
||||
main_window.cpp
|
||||
tree_widget_item.h
|
||||
tree_widget_item.cpp
|
||||
tree_widget_loader.h
|
||||
tree_widget_loader.cpp
|
||||
treeview_first_column_delegate.h
|
||||
treeview_first_column_delegate.cpp
|
||||
resources.qrc
|
||||
resources.rc
|
||||
)
|
||||
target_link_libraries(profiler_gui Qt5::Widgets easy_profiler)
|
||||
if (WIN32)
|
||||
target_compile_definitions(profiler_gui PRIVATE -D_WIN32_WINNT=0x0600)
|
||||
endif ()
|
||||
if (MINGW)
|
||||
target_compile_definitions(profiler_gui PRIVATE -DSTRSAFE_NO_DEPRECATE)
|
||||
endif ()
|
||||
|
||||
install(
|
||||
TARGETS
|
||||
profiler_gui
|
||||
RUNTIME
|
||||
DESTINATION
|
||||
bin
|
||||
)
|
||||
|
||||
set_property(TARGET profiler_gui PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
else ()
|
||||
message(STATUS "INFO\n\n\tQt5 not found! Generating EasyProfiler projects without GUI.\n")
|
||||
endif ()
|
||||
|
1060
3rdparty/easyprofiler/profiler_gui/arbitrary_value_inspector.cpp
vendored
Normal file
299
3rdparty/easyprofiler/profiler_gui/arbitrary_value_inspector.h
vendored
Normal file
@@ -0,0 +1,299 @@
|
||||
/************************************************************************
|
||||
* file name : arbitrary_value_inspector.h
|
||||
* ----------------- :
|
||||
* creation time : 2017/11/30
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of .
|
||||
* ----------------- :
|
||||
* change log : * 2017/11/30 Victor Zarubkin: initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_PROFILER_GUI_ARBITRARY_VALUE_INSPECTOR_H
|
||||
#define EASY_PROFILER_GUI_ARBITRARY_VALUE_INSPECTOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTreeWidget>
|
||||
#include <QTreeWidgetItem>
|
||||
#include <QGraphicsItem>
|
||||
#include <QGraphicsView>
|
||||
#include <QTimer>
|
||||
#include <QPointF>
|
||||
#include <QList>
|
||||
#include <easy/serialized_block.h>
|
||||
#include <easy/reader.h>
|
||||
#include <easy/utility.h>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <atomic>
|
||||
#include <memory>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using Points = std::vector<QPointF>;
|
||||
using ArbitraryValues = std::vector<const profiler::ArbitraryValue*>;
|
||||
using ArbitraryValuesMap = std::unordered_map<profiler::thread_id_t, ArbitraryValues, estd::hash<profiler::thread_id_t> >;
|
||||
|
||||
class ArbitraryValuesCollection EASY_FINAL
|
||||
{
|
||||
public:
|
||||
|
||||
enum JobStatus : uint8_t { Idle = 0, Ready, InProgress };
|
||||
enum JobType : uint8_t { None = 0, ValuesJob = 1 << 0, PointsJob = 1 << 1 };
|
||||
|
||||
private:
|
||||
|
||||
using This = ArbitraryValuesCollection;
|
||||
|
||||
ArbitraryValuesMap m_values;
|
||||
Points m_points;
|
||||
std::thread m_collectorThread;
|
||||
profiler::timestamp_t m_beginTime;
|
||||
qreal m_minValue;
|
||||
qreal m_maxValue;
|
||||
std::atomic<uint8_t> m_status;
|
||||
std::atomic_bool m_bInterrupt;
|
||||
uint8_t m_jobType;
|
||||
|
||||
public:
|
||||
|
||||
explicit ArbitraryValuesCollection();
|
||||
~ArbitraryValuesCollection();
|
||||
|
||||
const ArbitraryValuesMap& valuesMap() const;
|
||||
const Points& points() const;
|
||||
JobStatus status() const;
|
||||
size_t size() const;
|
||||
|
||||
qreal minValue() const;
|
||||
qreal maxValue() const;
|
||||
|
||||
void collectValues(profiler::thread_id_t _threadId, profiler::vin_t _valueId, const char* _valueName);
|
||||
void collectValues(profiler::thread_id_t _threadId, profiler::vin_t _valueId, const char* _valueName, profiler::timestamp_t _beginTime);
|
||||
bool calculatePoints(profiler::timestamp_t _beginTime);
|
||||
void interrupt();
|
||||
|
||||
private:
|
||||
|
||||
void setStatus(JobStatus _status);
|
||||
void collectById(profiler::thread_id_t _threadId, profiler::vin_t _valueId);
|
||||
void collectByName(profiler::thread_id_t _threadId, const std::string _valueName);
|
||||
bool collectByIdForThread(const profiler::BlocksTreeRoot& _threadRoot, profiler::vin_t _valueId, bool _calculatePoints);
|
||||
bool collectByNameForThread(const profiler::BlocksTreeRoot& _threadRoot, const std::string& _valueName, bool _calculatePoints);
|
||||
|
||||
QPointF point(const profiler::ArbitraryValue& _value) const;
|
||||
|
||||
}; // end of class ArbitraryValuesCollection.
|
||||
|
||||
enum class ChartType : uint8_t
|
||||
{
|
||||
Line = 0,
|
||||
Points
|
||||
};
|
||||
|
||||
struct EasyCollectionPaintData EASY_FINAL
|
||||
{
|
||||
const ArbitraryValuesCollection* ptr;
|
||||
QRgb color;
|
||||
ChartType chartType;
|
||||
bool selected;
|
||||
};
|
||||
|
||||
using Collections = std::vector<EasyCollectionPaintData>;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyArbitraryValuesChartItem : public QGraphicsItem
|
||||
{
|
||||
using Parent = QGraphicsItem;
|
||||
using This = EasyArbitraryValuesChartItem;
|
||||
|
||||
Collections m_collections;
|
||||
QRectF m_boundingRect;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyArbitraryValuesChartItem();
|
||||
~EasyArbitraryValuesChartItem() override;
|
||||
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||
|
||||
QRectF boundingRect() const override;
|
||||
void setBoundingRect(const QRectF& _rect);
|
||||
void setBoundingRect(qreal _left, qreal _top, qreal _width, qreal _height);
|
||||
|
||||
void update(Collections _collections);
|
||||
void update(const ArbitraryValuesCollection* _selected);
|
||||
|
||||
}; // end of class EasyArbitraryValuesChartItem.
|
||||
|
||||
class EasyGraphicsChart : public QGraphicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
using Parent = QGraphicsView;
|
||||
using This = EasyGraphicsChart;
|
||||
|
||||
EasyArbitraryValuesChartItem* m_chartItem;
|
||||
qreal m_left;
|
||||
qreal m_right;
|
||||
qreal m_offset;
|
||||
qreal m_xscale;
|
||||
qreal m_visibleRegionWidth;
|
||||
bool m_bBindMode;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyGraphicsChart(QWidget* _parent = nullptr);
|
||||
~EasyGraphicsChart() override;
|
||||
|
||||
void resizeEvent(QResizeEvent* _event) override;
|
||||
|
||||
void clear();
|
||||
|
||||
bool bindMode() const;
|
||||
qreal xscale() const;
|
||||
|
||||
qreal left() const;
|
||||
qreal right() const;
|
||||
qreal range() const;
|
||||
qreal offset() const;
|
||||
qreal region() const;
|
||||
|
||||
void setOffset(qreal _offset);
|
||||
void setRange(qreal _left, qreal _right);
|
||||
void setRegion(qreal _visibleRegionWidth);
|
||||
|
||||
void update(Collections _collections);
|
||||
void update(const ArbitraryValuesCollection* _selected);
|
||||
|
||||
private slots:
|
||||
|
||||
void onSceneSizeChanged();
|
||||
void onWindowSizeChanged(qreal _width, qreal _height);
|
||||
|
||||
}; // end of class EasyGraphicsChart.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyArbitraryTreeWidgetItem : public QTreeWidgetItem
|
||||
{
|
||||
using Parent = QTreeWidgetItem;
|
||||
using This = EasyArbitraryTreeWidgetItem;
|
||||
using CollectionPtr = std::unique_ptr<ArbitraryValuesCollection>;
|
||||
|
||||
CollectionPtr m_collection;
|
||||
profiler::vin_t m_vin;
|
||||
profiler::color_t m_color;
|
||||
int m_widthHint;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyArbitraryTreeWidgetItem(QTreeWidgetItem* _parent, profiler::color_t _color, profiler::vin_t _vin = 0);
|
||||
~EasyArbitraryTreeWidgetItem() override;
|
||||
|
||||
QVariant data(int _column, int _role) const override;
|
||||
|
||||
void setWidthHint(int _width);
|
||||
|
||||
const ArbitraryValuesCollection* collection() const;
|
||||
void collectValues(profiler::thread_id_t _threadId);
|
||||
void interrupt();
|
||||
|
||||
profiler::color_t color() const;
|
||||
|
||||
}; // end of class EasyArbitraryTreeWidgetItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyArbitraryValuesWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
using Parent = QWidget;
|
||||
using This = EasyArbitraryValuesWidget;
|
||||
|
||||
QTimer m_timer;
|
||||
QTimer m_collectionsTimer;
|
||||
QList<EasyArbitraryTreeWidgetItem*> m_checkedItems;
|
||||
QTreeWidget* m_treeWidget;
|
||||
EasyGraphicsChart* m_chart;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyArbitraryValuesWidget(QWidget* _parent = nullptr);
|
||||
~EasyArbitraryValuesWidget() override;
|
||||
|
||||
void clear();
|
||||
|
||||
public slots:
|
||||
|
||||
void rebuild();
|
||||
|
||||
private slots:
|
||||
|
||||
void onSelectedThreadChanged(profiler::thread_id_t _id);
|
||||
void onSelectedBlockChanged(uint32_t _block_index);
|
||||
void onSelectedBlockIdChanged(profiler::block_id_t _id);
|
||||
void onItemDoubleClicked(QTreeWidgetItem* _item, int _column);
|
||||
void onItemChanged(QTreeWidgetItem* _item, int _column);
|
||||
void onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*);
|
||||
void onCollectionsTimeout();
|
||||
|
||||
private:
|
||||
|
||||
void buildTree(profiler::thread_id_t _threadId, profiler::block_index_t _blockIndex, profiler::block_id_t _blockId);
|
||||
QTreeWidgetItem* buildTreeForThread(const profiler::BlocksTreeRoot& _threadRoot, profiler::block_index_t _blockIndex, profiler::block_id_t _blockId);
|
||||
|
||||
}; // end of class EasyArbitraryValuesWidget.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_PROFILER_GUI_ARBITRARY_VALUE_INSPECTOR_H
|
2509
3rdparty/easyprofiler/profiler_gui/blocks_graphics_view.cpp
vendored
Normal file
349
3rdparty/easyprofiler/profiler_gui/blocks_graphics_view.h
vendored
Normal file
@@ -0,0 +1,349 @@
|
||||
/************************************************************************
|
||||
* file name : blocks_graphics_view.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/06/26
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of GraphicsScene and GraphicsView and
|
||||
* : it's auxiliary classes for displyaing easy_profiler blocks tree.
|
||||
* ----------------- :
|
||||
* change log : * 2016/06/26 Victor Zarubkin: moved sources from graphics_view.h
|
||||
* : and renamed classes from My* to Prof*.
|
||||
* :
|
||||
* : * 2016/06/29 Victor Zarubkin: Highly optimized painting performance and memory consumption.
|
||||
* :
|
||||
* : * 2016/06/30 Victor Zarubkin: Replaced doubles with floats (in ProfBlockItem) for less memory consumption.
|
||||
* :
|
||||
* : * 2016/09/15 Victor Zarubkin: Moved sources of EasyGraphicsItem and EasyChronometerItem to separate files.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_GRAPHICS_VIEW_H
|
||||
#define EASY_GRAPHICS_VIEW_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unordered_set>
|
||||
|
||||
#include <QGraphicsView>
|
||||
#include <QGraphicsItem>
|
||||
#include <QPoint>
|
||||
#include <QRectF>
|
||||
#include <QTimer>
|
||||
#include <QLabel>
|
||||
|
||||
#include <easy/reader.h>
|
||||
|
||||
#include "common_functions.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class QGraphicsProxyWidget;
|
||||
class EasyGraphicsView;
|
||||
class EasyGraphicsItem;
|
||||
class EasyGraphicsScrollbar;
|
||||
class EasyChronometerItem;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define EASY_QGRAPHICSITEM(ClassName) \
|
||||
class ClassName : public QGraphicsItem { \
|
||||
QRectF m_boundingRect; \
|
||||
public: \
|
||||
ClassName() : QGraphicsItem() {} \
|
||||
virtual ~ClassName() {} \
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override; \
|
||||
QRectF boundingRect() const override { return m_boundingRect; } \
|
||||
void setBoundingRect(qreal x, qreal y, qreal w, qreal h) { m_boundingRect.setRect(x, y, w, h); } \
|
||||
void setBoundingRect(const QRectF& _rect) { m_boundingRect = _rect; } \
|
||||
}
|
||||
|
||||
EASY_QGRAPHICSITEM(EasyBackgroundItem);
|
||||
EASY_QGRAPHICSITEM(EasyTimelineIndicatorItem);
|
||||
EASY_QGRAPHICSITEM(EasyThreadNameItem);
|
||||
|
||||
#undef EASY_QGRAPHICSITEM
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct EasyBoldLabel : public QLabel {
|
||||
EasyBoldLabel(const QString& _text, QWidget* _parent = nullptr);
|
||||
virtual ~EasyBoldLabel();
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyGraphicsView : public QGraphicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
using Parent = QGraphicsView;
|
||||
using This = EasyGraphicsView;
|
||||
using Items = ::std::vector<EasyGraphicsItem*>;
|
||||
//using Keys = ::std::unordered_set<int, ::estd::hash<int> >;
|
||||
|
||||
Items m_items; ///< Array of all EasyGraphicsItem items
|
||||
//Keys m_keys; ///< Pressed keyboard keys
|
||||
::profiler_gui::TreeBlocks m_selectedBlocks; ///< Array of items which were selected by selection zone (EasyChronometerItem)
|
||||
QTimer m_flickerTimer; ///< Timer for flicking behavior
|
||||
QTimer m_idleTimer; ///<
|
||||
QRectF m_visibleSceneRect; ///< Visible scene rectangle
|
||||
::profiler::timestamp_t m_beginTime; ///< Begin time of profiler session. Used to reduce values of all begin and end times of profiler blocks.
|
||||
qreal m_sceneWidth; ///<
|
||||
qreal m_scale; ///< Current scale
|
||||
qreal m_offset; ///< Have to use manual offset for all scene content instead of using scrollbars because QScrollBar::value is 32-bit integer :(
|
||||
qreal m_timelineStep; ///<
|
||||
uint64_t m_idleTime; ///<
|
||||
QPoint m_mousePressPos; ///< Last mouse global position (used by mousePressEvent and mouseMoveEvent)
|
||||
QPoint m_mouseMovePath; ///< Mouse move path between press and release of any button
|
||||
Qt::MouseButtons m_mouseButtons; ///< Pressed mouse buttons
|
||||
EasyGraphicsScrollbar* m_pScrollbar; ///< Pointer to the graphics scrollbar widget
|
||||
EasyChronometerItem* m_chronometerItem; ///< Pointer to the EasyChronometerItem which is displayed when you press right mouse button and move mouse left or right. This item is used to select blocks to display in tree widget.
|
||||
EasyChronometerItem* m_chronometerItemAux; ///< Pointer to the EasyChronometerItem which is displayed when you double click left mouse button and move mouse left or right. This item is used only to measure time.
|
||||
QGraphicsProxyWidget* m_popupWidget; ///<
|
||||
int m_flickerSpeedX; ///< Current flicking speed x
|
||||
int m_flickerSpeedY; ///< Current flicking speed y
|
||||
int m_flickerCounterX;
|
||||
int m_flickerCounterY;
|
||||
bool m_bDoubleClick; ///< Is mouse buttons double clicked
|
||||
bool m_bUpdatingRect; ///< Stub flag which is used to avoid excess calculations on some scene update (flicking, scaling and so on)
|
||||
bool m_bEmpty; ///< Indicates whether scene is empty and has no items
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyGraphicsView(QWidget* _parent = nullptr);
|
||||
virtual ~EasyGraphicsView();
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
void wheelEvent(QWheelEvent* _event) override;
|
||||
void mousePressEvent(QMouseEvent* _event) override;
|
||||
void mouseDoubleClickEvent(QMouseEvent* _event) override;
|
||||
void mouseReleaseEvent(QMouseEvent* _event) override;
|
||||
void mouseMoveEvent(QMouseEvent* _event) override;
|
||||
void keyPressEvent(QKeyEvent* _event) override;
|
||||
void keyReleaseEvent(QKeyEvent* _event) override;
|
||||
void resizeEvent(QResizeEvent* _event) override;
|
||||
|
||||
void dragEnterEvent(QDragEnterEvent*) override {}
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
qreal sceneWidth() const;
|
||||
qreal chronoTime() const;
|
||||
qreal chronoTimeAux() const;
|
||||
|
||||
void setScrollbar(EasyGraphicsScrollbar* _scrollbar);
|
||||
void clear();
|
||||
|
||||
void setTree(const ::profiler::thread_blocks_tree_t& _blocksTree);
|
||||
|
||||
const Items& getItems() const;
|
||||
|
||||
signals:
|
||||
|
||||
// Signals
|
||||
|
||||
void sceneUpdated();
|
||||
void treeChanged();
|
||||
void intervalChanged(const ::profiler_gui::TreeBlocks& _blocks, ::profiler::timestamp_t _session_begin_time, ::profiler::timestamp_t _left, ::profiler::timestamp_t _right, bool _strict);
|
||||
|
||||
private:
|
||||
|
||||
// Private non-virtual methods
|
||||
|
||||
void removePopup(bool _removeFromScene = false);
|
||||
|
||||
EasyChronometerItem* createChronometer(bool _main = true);
|
||||
bool moveChrono(EasyChronometerItem* _chronometerItem, qreal _mouseX);
|
||||
void initMode();
|
||||
int updateVisibleSceneRect();
|
||||
void updateTimelineStep(qreal _windowWidth);
|
||||
void scaleTo(qreal _scale);
|
||||
void scrollTo(const EasyGraphicsItem* _item);
|
||||
void onWheel(qreal _mouseX, int _wheelDelta);
|
||||
qreal setTree(EasyGraphicsItem* _item, const ::profiler::BlocksTree::children_t& _children, qreal& _height, uint32_t& _maxDepthChild, qreal _y, short _level);
|
||||
|
||||
private slots:
|
||||
|
||||
// Private Slots
|
||||
|
||||
void repaintScene();
|
||||
void onGraphicsScrollbarWheel(qreal _mouseX, int _wheelDelta);
|
||||
void onScrollbarValueChange(int);
|
||||
void onGraphicsScrollbarValueChange(qreal);
|
||||
void onFlickerTimeout();
|
||||
void onIdleTimeout();
|
||||
void onHierarchyFlagChange(bool _value);
|
||||
void onSelectedThreadChange(::profiler::thread_id_t _id);
|
||||
void onSelectedBlockChange(unsigned int _block_index);
|
||||
void onRefreshRequired();
|
||||
void onThreadViewChanged();
|
||||
|
||||
public:
|
||||
|
||||
// Public inline methods
|
||||
|
||||
inline qreal scale() const
|
||||
{
|
||||
return m_scale;
|
||||
}
|
||||
|
||||
inline qreal offset() const
|
||||
{
|
||||
return m_offset;
|
||||
}
|
||||
|
||||
inline const QRectF& visibleSceneRect() const
|
||||
{
|
||||
return m_visibleSceneRect;
|
||||
}
|
||||
|
||||
inline qreal timelineStep() const
|
||||
{
|
||||
return m_timelineStep;
|
||||
}
|
||||
|
||||
inline qreal time2position(const profiler::timestamp_t& _time) const
|
||||
{
|
||||
return PROF_MICROSECONDS(qreal(_time - m_beginTime));
|
||||
//return PROF_MILLISECONDS(qreal(_time - m_beginTime));
|
||||
}
|
||||
|
||||
inline ::profiler::timestamp_t position2time(qreal _pos) const
|
||||
{
|
||||
return PROF_FROM_MICROSECONDS(_pos);
|
||||
//return PROF_FROM_MILLISECONDS(_pos);
|
||||
}
|
||||
|
||||
}; // END of class EasyGraphicsView.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyThreadNamesWidget : public QGraphicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
typedef QGraphicsView Parent;
|
||||
typedef EasyThreadNamesWidget This;
|
||||
|
||||
QTimer m_idleTimer; ///<
|
||||
uint64_t m_idleTime; ///<
|
||||
EasyGraphicsView* m_view; ///<
|
||||
QGraphicsProxyWidget* m_popupWidget; ///<
|
||||
int m_maxLength; ///<
|
||||
const int m_additionalHeight; ///<
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyThreadNamesWidget(EasyGraphicsView* _view, int _additionalHeight, QWidget* _parent = nullptr);
|
||||
virtual ~EasyThreadNamesWidget();
|
||||
|
||||
void mousePressEvent(QMouseEvent* _event) override;
|
||||
void mouseDoubleClickEvent(QMouseEvent* _event) override;
|
||||
void mouseReleaseEvent(QMouseEvent* _event) override;
|
||||
void mouseMoveEvent(QMouseEvent* _event) override;
|
||||
void keyPressEvent(QKeyEvent* _event) override;
|
||||
void keyReleaseEvent(QKeyEvent* _event) override;
|
||||
void wheelEvent(QWheelEvent* _event) override;
|
||||
|
||||
void dragEnterEvent(QDragEnterEvent*) override {}
|
||||
|
||||
void clear();
|
||||
|
||||
const EasyGraphicsView* view() const
|
||||
{
|
||||
return m_view;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
void removePopup(bool _removeFromScene = false);
|
||||
|
||||
private slots:
|
||||
|
||||
void setVerticalScrollbarRange(int _minValue, int _maxValue);
|
||||
void onTreeChange();
|
||||
void onIdleTimeout();
|
||||
void repaintScene();
|
||||
|
||||
}; // END of class EasyThreadNamesWidget.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyGraphicsViewWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
EasyGraphicsScrollbar* m_scrollbar;
|
||||
EasyGraphicsView* m_view;
|
||||
EasyThreadNamesWidget* m_threadNamesWidget;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyGraphicsViewWidget(QWidget* _parent = nullptr);
|
||||
virtual ~EasyGraphicsViewWidget();
|
||||
|
||||
EasyGraphicsView* view();
|
||||
void clear();
|
||||
|
||||
private:
|
||||
|
||||
void initWidget();
|
||||
|
||||
}; // END of class EasyGraphicsViewWidget.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_GRAPHICS_VIEW_H
|
1280
3rdparty/easyprofiler/profiler_gui/blocks_tree_widget.cpp
vendored
Normal file
219
3rdparty/easyprofiler/profiler_gui/blocks_tree_widget.h
vendored
Normal file
@@ -0,0 +1,219 @@
|
||||
/************************************************************************
|
||||
* file name : blocks_tree_widget.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/06/26
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyTreeWidget and it's auxiliary classes
|
||||
* : for displyaing EasyProfiler blocks tree.
|
||||
* ----------------- :
|
||||
* change log : * 2016/06/26 Victor Zarubkin: moved sources from tree_view.h
|
||||
* : and renamed classes from My* to Prof*.
|
||||
* :
|
||||
* : * 2016/06/27 Victor Zarubkin: Added possibility to colorize rows
|
||||
* : with profiler blocks' colors.
|
||||
* :
|
||||
* : * 2016/06/29 Victor Zarubkin: Added clearSilent() method.
|
||||
* :
|
||||
* : * 2016/08/18 Victor Zarubkin: Added loading blocks hierarchy in separate thread;
|
||||
* : Moved sources of TreeWidgetItem into tree_widget_item.h/.cpp
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_TREE_WIDGET_H
|
||||
#define EASY_TREE_WIDGET_H
|
||||
|
||||
#include <QTreeWidget>
|
||||
#include <QTimer>
|
||||
|
||||
#include "tree_widget_loader.h"
|
||||
#include "tree_widget_item.h"
|
||||
|
||||
#include <easy/reader.h>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyTreeWidget : public QTreeWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
typedef QTreeWidget Parent;
|
||||
typedef EasyTreeWidget This;
|
||||
|
||||
protected:
|
||||
|
||||
EasyTreeWidgetLoader m_hierarchyBuilder;
|
||||
Items m_items;
|
||||
RootsMap m_roots;
|
||||
::profiler_gui::TreeBlocks m_inputBlocks;
|
||||
QTimer m_fillTimer;
|
||||
QString m_lastSearch;
|
||||
QTreeWidgetItem* m_lastFound;
|
||||
::profiler::timestamp_t m_beginTime;
|
||||
class QProgressDialog* m_progress;
|
||||
class QLabel* m_hintLabel;
|
||||
EasyTreeMode m_mode;
|
||||
bool m_bLocked;
|
||||
bool m_bSilentExpandCollapse;
|
||||
char m_columnsHiddenStatus[COL_COLUMNS_NUMBER];
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyTreeWidget(QWidget* _parent = nullptr);
|
||||
virtual ~EasyTreeWidget();
|
||||
|
||||
void contextMenuEvent(QContextMenuEvent* _event) override;
|
||||
|
||||
void clearSilent(bool _global = false);
|
||||
int findNext(const QString& _str, Qt::MatchFlags _flags);
|
||||
int findPrev(const QString& _str, Qt::MatchFlags _flags);
|
||||
|
||||
public slots:
|
||||
|
||||
void setTree(const unsigned int _blocksNumber, const ::profiler::thread_blocks_tree_t& _blocksTree);
|
||||
|
||||
void setTreeBlocks(const ::profiler_gui::TreeBlocks& _blocks, ::profiler::timestamp_t _session_begin_time, ::profiler::timestamp_t _left, ::profiler::timestamp_t _right, bool _strict);
|
||||
|
||||
protected:
|
||||
|
||||
void resizeEvent(QResizeEvent* _event) override;
|
||||
void moveEvent(QMoveEvent* _event) override;
|
||||
|
||||
private slots:
|
||||
|
||||
void onJumpToItemClicked(bool);
|
||||
|
||||
void onCollapseAllClicked(bool);
|
||||
|
||||
void onExpandAllClicked(bool);
|
||||
|
||||
void onCollapseAllChildrenClicked(bool);
|
||||
|
||||
void onExpandAllChildrenClicked(bool);
|
||||
|
||||
void onItemExpand(QTreeWidgetItem* _item);
|
||||
void onItemCollapse(QTreeWidgetItem* _item);
|
||||
void onCurrentItemChange(QTreeWidgetItem* _item, QTreeWidgetItem*);
|
||||
|
||||
void onSelectedThreadChange(::profiler::thread_id_t _id);
|
||||
|
||||
void onSelectedBlockChange(uint32_t _block_index);
|
||||
|
||||
void onBlockStatusChangeClicked(bool);
|
||||
|
||||
void resizeColumnsToContents();
|
||||
|
||||
void onHideShowColumn(bool);
|
||||
void onModeChange(bool);
|
||||
|
||||
void onFillTimerTimeout();
|
||||
|
||||
protected:
|
||||
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
void alignProgressBar();
|
||||
|
||||
private:
|
||||
|
||||
void destroyProgressDialog();
|
||||
void createProgressDialog();
|
||||
|
||||
}; // END of class EasyTreeWidget.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyHierarchyWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
typedef QWidget Parent;
|
||||
typedef EasyHierarchyWidget This;
|
||||
|
||||
private:
|
||||
|
||||
EasyTreeWidget* m_tree;
|
||||
class QLineEdit* m_searchBox;
|
||||
class QLabel* m_foundNumber;
|
||||
class QAction* m_searchButton;
|
||||
bool m_bCaseSensitiveSearch;
|
||||
|
||||
public:
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
explicit EasyHierarchyWidget(QWidget* _parent = nullptr);
|
||||
virtual ~EasyHierarchyWidget();
|
||||
void keyPressEvent(QKeyEvent* _event) override;
|
||||
void contextMenuEvent(QContextMenuEvent* _event) override;
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
EasyTreeWidget* tree();
|
||||
void clear(bool _global = false);
|
||||
|
||||
private slots:
|
||||
|
||||
// Private slots
|
||||
|
||||
void onSeachBoxReturnPressed();
|
||||
void findNext(bool);
|
||||
void findPrev(bool);
|
||||
void findNextFromMenu(bool);
|
||||
void findPrevFromMenu(bool);
|
||||
|
||||
private:
|
||||
|
||||
// Private non-virtual methods
|
||||
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
|
||||
}; // END of class EasyHierarchyWidget.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_TREE_WIDGET_H
|
54
3rdparty/easyprofiler/profiler_gui/cmake_install.cmake
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
# Install script for directory: /home/alex/Work/C++Projects/easyprofiler/profiler_gui
|
||||
|
||||
# Set the install prefix
|
||||
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
||||
set(CMAKE_INSTALL_PREFIX "/usr/local")
|
||||
endif()
|
||||
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
|
||||
# Set the install configuration name.
|
||||
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||
if(BUILD_TYPE)
|
||||
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_CONFIG_NAME "Release")
|
||||
endif()
|
||||
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||
endif()
|
||||
|
||||
# Set the component getting installed.
|
||||
if(NOT CMAKE_INSTALL_COMPONENT)
|
||||
if(COMPONENT)
|
||||
message(STATUS "Install component: \"${COMPONENT}\"")
|
||||
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_COMPONENT)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Install shared libraries without execute permission?
|
||||
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
|
||||
set(CMAKE_INSTALL_SO_NO_EXE "1")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
|
||||
if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui" AND
|
||||
NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui")
|
||||
file(RPATH_CHECK
|
||||
FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui"
|
||||
RPATH "$ORIGIN:/home/alex/Work/Qt/5.8/gcc_64/lib")
|
||||
endif()
|
||||
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/alex/Work/C++Projects/easyprofiler/bin/profiler_gui")
|
||||
if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui" AND
|
||||
NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui")
|
||||
file(RPATH_CHANGE
|
||||
FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui"
|
||||
OLD_RPATH "/home/alex/Work/Qt/5.8/gcc_64/lib:/home/alex/Work/C++Projects/easyprofiler/bin:"
|
||||
NEW_RPATH "$ORIGIN:/home/alex/Work/Qt/5.8/gcc_64/lib")
|
||||
if(CMAKE_INSTALL_DO_STRIP)
|
||||
execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/profiler_gui")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
345
3rdparty/easyprofiler/profiler_gui/common_functions.cpp
vendored
Normal file
@@ -0,0 +1,345 @@
|
||||
/************************************************************************
|
||||
* file name : common_functions.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2017/12/06
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains implementaion of common functions used by different UI widgets.
|
||||
* ----------------- :
|
||||
* change log : * 2017/12/06 Victor Zarubkin: Initial commit. Moved sources from common_types.h
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include "common_functions.h"
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
qreal timeFactor(qreal _interval)
|
||||
{
|
||||
if (_interval < 1) // interval in nanoseconds
|
||||
return 1e3;
|
||||
|
||||
if (_interval < 1e3) // interval in microseconds
|
||||
return 1;
|
||||
|
||||
if (_interval < 1e6) // interval in milliseconds
|
||||
return 1e-3;
|
||||
|
||||
// interval in seconds
|
||||
return 1e-6;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QString autoTimeStringReal(qreal _interval, int _precision)
|
||||
{
|
||||
if (_interval < 1) // interval in nanoseconds
|
||||
return QString("%1 ns").arg(static_cast<quint64>(_interval * 1e3));
|
||||
|
||||
if (_interval < 1e3) // interval in microseconds
|
||||
return QString("%1 us").arg(_interval, 0, 'f', _precision);
|
||||
|
||||
if (_interval < 1e6) // interval in milliseconds
|
||||
return QString("%1 ms").arg(_interval * 1e-3, 0, 'f', _precision);
|
||||
|
||||
// interval in seconds
|
||||
return QString("%1 s").arg(_interval * 1e-6, 0, 'f', _precision);
|
||||
}
|
||||
|
||||
QString autoTimeStringInt(qreal _interval)
|
||||
{
|
||||
if (_interval < 1) // interval in nanoseconds
|
||||
return QString("%1 ns").arg(static_cast<quint64>(_interval * 1e3 + 0.5));
|
||||
|
||||
if (_interval < 1e3) // interval in microseconds
|
||||
return QString("%1 us").arg(static_cast<quint32>(_interval + 0.5));
|
||||
|
||||
if (_interval < 1e6) // interval in milliseconds
|
||||
return QString("%1 ms").arg(static_cast<quint32>(_interval * 1e-3 + 0.5));
|
||||
|
||||
// interval in seconds
|
||||
return QString("%1 s").arg(static_cast<quint32>(_interval * 1e-6 + 0.5));
|
||||
}
|
||||
|
||||
QString autoTimeStringRealNs(::profiler::timestamp_t _interval, int _precision)
|
||||
{
|
||||
if (_interval < 1000) // interval in nanoseconds
|
||||
return QString("%1 ns").arg(_interval);
|
||||
|
||||
if (_interval < 1000000) // interval in microseconds
|
||||
return QString("%1 us").arg(_interval * 1e-3, 0, 'f', _precision);
|
||||
|
||||
if (_interval < 1000000000U) // interval in milliseconds
|
||||
return QString("%1 ms").arg(_interval * 1e-6, 0, 'f', _precision);
|
||||
|
||||
// interval in seconds
|
||||
return QString("%1 s").arg(_interval * 1e-9, 0, 'f', _precision);
|
||||
}
|
||||
|
||||
QString autoTimeStringIntNs(::profiler::timestamp_t _interval)
|
||||
{
|
||||
if (_interval < 1000) // interval in nanoseconds
|
||||
return QString("%1 ns").arg(_interval);
|
||||
|
||||
if (_interval < 1000000) // interval in microseconds
|
||||
return QString("%1 us").arg(static_cast<quint32>(_interval * 1e-3 + 0.5));
|
||||
|
||||
if (_interval < 1000000000U) // interval in milliseconds
|
||||
return QString("%1 ms").arg(static_cast<quint32>(_interval * 1e-6 + 0.5));
|
||||
|
||||
// interval in seconds
|
||||
return QString("%1 s").arg(static_cast<quint32>(_interval * 1e-9 + 0.5));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QString timeStringReal(TimeUnits _units, qreal _interval, int _precision)
|
||||
{
|
||||
switch (_units)
|
||||
{
|
||||
case TimeUnits_ms:{
|
||||
const char fmt = _interval <= 1 ? 'g' : 'f';
|
||||
return QString("%1 ms").arg(_interval * 1e-3, 0, fmt, _precision);
|
||||
}
|
||||
|
||||
case TimeUnits_us:
|
||||
return QString("%1 us").arg(_interval, 0, 'f', _precision);
|
||||
|
||||
case TimeUnits_ns:
|
||||
return QString("%1 ns").arg(static_cast<quint64>(_interval * 1e3 + 0.5));
|
||||
|
||||
case TimeUnits_auto:
|
||||
default:
|
||||
return autoTimeStringReal(_interval, _precision);
|
||||
}
|
||||
}
|
||||
|
||||
QString timeStringRealNs(TimeUnits _units, ::profiler::timestamp_t _interval, int _precision)
|
||||
{
|
||||
switch (_units)
|
||||
{
|
||||
case TimeUnits_ms:{
|
||||
const char fmt = _interval <= 1000 ? 'g' : 'f';
|
||||
return QString("%1 ms").arg(_interval * 1e-6, 0, fmt, _precision);
|
||||
}
|
||||
|
||||
case TimeUnits_us:
|
||||
return QString("%1 us").arg(_interval * 1e-3, 0, 'f', _precision);
|
||||
|
||||
case TimeUnits_ns:
|
||||
return QString("%1 ns").arg(_interval);
|
||||
|
||||
case TimeUnits_auto:
|
||||
default:
|
||||
return autoTimeStringRealNs(_interval, _precision);
|
||||
}
|
||||
}
|
||||
|
||||
QString timeStringInt(TimeUnits _units, qreal _interval)
|
||||
{
|
||||
switch (_units)
|
||||
{
|
||||
case TimeUnits_ms:
|
||||
return QString("%1 ms").arg(static_cast<quint32>(_interval * 1e-3 + 0.5));
|
||||
|
||||
case TimeUnits_us:
|
||||
return QString("%1 us").arg(static_cast<quint32>(_interval + 0.5));
|
||||
|
||||
case TimeUnits_ns:
|
||||
return QString("%1 ns").arg(static_cast<quint64>(_interval * 1e3 + 0.5));
|
||||
|
||||
case TimeUnits_auto:
|
||||
default:
|
||||
return autoTimeStringInt(_interval);
|
||||
}
|
||||
}
|
||||
|
||||
QString timeStringIntNs(TimeUnits _units, ::profiler::timestamp_t _interval)
|
||||
{
|
||||
switch (_units)
|
||||
{
|
||||
case TimeUnits_ms:
|
||||
return QString("%1 ms").arg(static_cast<quint32>(_interval * 1e-6 + 0.5));
|
||||
|
||||
case TimeUnits_us:
|
||||
return QString("%1 us").arg(static_cast<quint32>(_interval * 1e-3 + 0.5));
|
||||
|
||||
case TimeUnits_ns:
|
||||
return QString("%1 ns").arg(_interval);
|
||||
|
||||
case TimeUnits_auto:
|
||||
default:
|
||||
return autoTimeStringIntNs(_interval);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QFont EFont(QFont::StyleHint _hint, const char* _family, int _size, int _weight)
|
||||
{
|
||||
QFont f;
|
||||
f.setStyleHint(_hint, QFont::PreferMatch);
|
||||
f.setFamily(_family);
|
||||
f.setPointSize(_size);
|
||||
f.setWeight(_weight);
|
||||
return f;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QString valueTypeString(::profiler::DataType _dataType)
|
||||
{
|
||||
switch (_dataType)
|
||||
{
|
||||
case ::profiler::DataType::Bool: return QStringLiteral("bool");
|
||||
case ::profiler::DataType::Char: return QStringLiteral("char");
|
||||
case ::profiler::DataType::Int8: return QStringLiteral("int8");
|
||||
case ::profiler::DataType::Uint8: return QStringLiteral("unsigned int8");
|
||||
case ::profiler::DataType::Int16: return QStringLiteral("int16");
|
||||
case ::profiler::DataType::Uint16: return QStringLiteral("unsigned int16");
|
||||
case ::profiler::DataType::Int32: return QStringLiteral("int32");
|
||||
case ::profiler::DataType::Uint32: return QStringLiteral("unsigned int32");
|
||||
case ::profiler::DataType::Int64: return QStringLiteral("int64");
|
||||
case ::profiler::DataType::Uint64: return QStringLiteral("unsigned int64");
|
||||
case ::profiler::DataType::Float: return QStringLiteral("float");
|
||||
case ::profiler::DataType::Double: return QStringLiteral("double");
|
||||
case ::profiler::DataType::String: return QStringLiteral("string");
|
||||
default: return QStringLiteral("unknown");
|
||||
}
|
||||
}
|
||||
|
||||
QString valueTypeString(const ::profiler::ArbitraryValue& _serializedValue)
|
||||
{
|
||||
const auto type = _serializedValue.type();
|
||||
if (_serializedValue.isArray() && type != ::profiler::DataType::String)
|
||||
return valueTypeString(type) + QStringLiteral("[]");
|
||||
return valueTypeString(type);
|
||||
}
|
||||
|
||||
QString valueString(const ::profiler::ArbitraryValue& _serializedValue)
|
||||
{
|
||||
if (_serializedValue.isArray())
|
||||
{
|
||||
if (_serializedValue.type() == ::profiler::DataType::String)
|
||||
return _serializedValue.data();
|
||||
return QStringLiteral("[...] array");
|
||||
}
|
||||
|
||||
switch (_serializedValue.type())
|
||||
{
|
||||
case ::profiler::DataType::Bool: return _serializedValue.toValue<bool>()->value() ? QStringLiteral("true") : QStringLiteral("false");
|
||||
case ::profiler::DataType::Char: return QChar(_serializedValue.toValue<char>()->value());
|
||||
case ::profiler::DataType::Int8: return QChar(_serializedValue.toValue<int8_t>()->value());
|
||||
case ::profiler::DataType::Uint8: return QString::number(_serializedValue.toValue<uint8_t>()->value());
|
||||
case ::profiler::DataType::Int16: return QString::number(_serializedValue.toValue<int16_t>()->value());
|
||||
case ::profiler::DataType::Uint16: return QString::number(_serializedValue.toValue<uint16_t>()->value());
|
||||
case ::profiler::DataType::Int32: return QString::number(_serializedValue.toValue<int32_t>()->value());
|
||||
case ::profiler::DataType::Uint32: return QString::number(_serializedValue.toValue<uint32_t>()->value());
|
||||
case ::profiler::DataType::Int64: return QString::number(_serializedValue.toValue<int64_t>()->value());
|
||||
case ::profiler::DataType::Uint64: return QString::number(_serializedValue.toValue<uint64_t>()->value());
|
||||
case ::profiler::DataType::Float: return QString::number(_serializedValue.toValue<float>()->value());
|
||||
case ::profiler::DataType::Double: return QString::number(_serializedValue.toValue<double>()->value());
|
||||
case ::profiler::DataType::String: return _serializedValue.data();
|
||||
default: return QStringLiteral("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
double value2real(const ::profiler::ArbitraryValue& _serializedValue, int _index)
|
||||
{
|
||||
if (_serializedValue.isArray())
|
||||
{
|
||||
switch (_serializedValue.type())
|
||||
{
|
||||
case ::profiler::DataType::Bool:
|
||||
{
|
||||
const auto value = _serializedValue.toArray<bool>()->at(_index);
|
||||
return value ? 1 : 0;
|
||||
}
|
||||
|
||||
case ::profiler::DataType::Char: return static_cast<double>(_serializedValue.toArray<char>()->at(_index));
|
||||
case ::profiler::DataType::Int8: return static_cast<double>(_serializedValue.toArray<int8_t>()->at(_index));
|
||||
case ::profiler::DataType::Uint8: return static_cast<double>(_serializedValue.toArray<uint8_t>()->at(_index));
|
||||
case ::profiler::DataType::Int16: return static_cast<double>(_serializedValue.toArray<int16_t>()->at(_index));
|
||||
case ::profiler::DataType::Uint16: return static_cast<double>(_serializedValue.toArray<uint16_t>()->at(_index));
|
||||
case ::profiler::DataType::Int32: return static_cast<double>(_serializedValue.toArray<int32_t>()->at(_index));
|
||||
case ::profiler::DataType::Uint32: return static_cast<double>(_serializedValue.toArray<uint32_t>()->at(_index));
|
||||
case ::profiler::DataType::Int64: return static_cast<double>(_serializedValue.toArray<int64_t>()->at(_index));
|
||||
case ::profiler::DataType::Uint64: return static_cast<double>(_serializedValue.toArray<uint64_t>()->at(_index));
|
||||
case ::profiler::DataType::Float: return static_cast<double>(_serializedValue.toArray<float>()->at(_index));
|
||||
case ::profiler::DataType::Double: return _serializedValue.toArray<double>()->at(_index);
|
||||
case ::profiler::DataType::String: return static_cast<double>(_serializedValue.data()[_index]);
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
switch (_serializedValue.type())
|
||||
{
|
||||
case ::profiler::DataType::Bool:
|
||||
{
|
||||
const auto value = _serializedValue.toValue<bool>()->value();
|
||||
return value ? 1 : 0;
|
||||
}
|
||||
|
||||
case ::profiler::DataType::Char: return static_cast<double>(_serializedValue.toValue<char>()->value());
|
||||
case ::profiler::DataType::Int8: return static_cast<double>(_serializedValue.toValue<int8_t>()->value());
|
||||
case ::profiler::DataType::Uint8: return static_cast<double>(_serializedValue.toValue<uint8_t>()->value());
|
||||
case ::profiler::DataType::Int16: return static_cast<double>(_serializedValue.toValue<int16_t>()->value());
|
||||
case ::profiler::DataType::Uint16: return static_cast<double>(_serializedValue.toValue<uint16_t>()->value());
|
||||
case ::profiler::DataType::Int32: return static_cast<double>(_serializedValue.toValue<int32_t>()->value());
|
||||
case ::profiler::DataType::Uint32: return static_cast<double>(_serializedValue.toValue<uint32_t>()->value());
|
||||
case ::profiler::DataType::Int64: return static_cast<double>(_serializedValue.toValue<int64_t>()->value());
|
||||
case ::profiler::DataType::Uint64: return static_cast<double>(_serializedValue.toValue<uint64_t>()->value());
|
||||
case ::profiler::DataType::Float: return static_cast<double>(_serializedValue.toValue<float>()->value());
|
||||
case ::profiler::DataType::Double: return _serializedValue.toValue<double>()->value();
|
||||
case ::profiler::DataType::String: return static_cast<double>(_serializedValue.data()[_index]);
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
} // end of namespace profiler_gui.
|
205
3rdparty/easyprofiler/profiler_gui/common_functions.h
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
/************************************************************************
|
||||
* file name : common_functions.h
|
||||
* ----------------- :
|
||||
* creation time : 2017/12/06
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains common functions used by different UI widgets.
|
||||
* ----------------- :
|
||||
* change log : * 2017/12/06 Victor Zarubkin: Initial commit. Moved sources from common_types.h
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_PROFILER_GUI_COMMON_FUNCTIONS_H
|
||||
#define EASY_PROFILER_GUI_COMMON_FUNCTIONS_H
|
||||
|
||||
#include <QRgb>
|
||||
#include <QString>
|
||||
#include <QFont>
|
||||
#include <type_traits>
|
||||
#include "common_types.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define PROF_MICROSECONDS(timestamp) ((timestamp) * 1e-3)
|
||||
//#define PROF_MICROSECONDS(timestamp) (timestamp)
|
||||
|
||||
#define PROF_FROM_MICROSECONDS(to_timestamp) ((to_timestamp) * 1e3)
|
||||
//#define PROF_FROM_MICROSECONDS(to_timestamp) (to_timestamp)
|
||||
|
||||
#define PROF_MILLISECONDS(timestamp) ((timestamp) * 1e-6)
|
||||
//#define PROF_MILLISECONDS(timestamp) ((timestamp) * 1e-3)
|
||||
|
||||
#define PROF_FROM_MILLISECONDS(to_timestamp) ((to_timestamp) * 1e6)
|
||||
//#define PROF_FROM_MILLISECONDS(to_timestamp) ((to_timestamp) * 1e3)
|
||||
|
||||
#define PROF_NANOSECONDS(timestamp) (timestamp)
|
||||
//#define PROF_NANOSECONDS(timestamp) ((timestamp) * 1000)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EASY_FORCE_INLINE qreal units2microseconds(qreal _value) {
|
||||
return _value;
|
||||
//return _value * 1e3;
|
||||
}
|
||||
|
||||
EASY_FORCE_INLINE qreal microseconds2units(qreal _value) {
|
||||
return _value;
|
||||
//return _value * 1e-3;
|
||||
}
|
||||
|
||||
#ifdef EASY_CONSTEXPR_AVAILABLE
|
||||
template <class TEnum>
|
||||
EASY_FORCE_INLINE EASY_CONSTEXPR_FCN typename ::std::underlying_type<TEnum>::type int_cast(TEnum _enumValue) {
|
||||
return static_cast<typename ::std::underlying_type<TEnum>::type>(_enumValue);
|
||||
}
|
||||
#else
|
||||
# define int_cast(_enumValue) static_cast<::std::underlying_type<decltype(_enumValue)>::type>(_enumValue)
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class T> inline
|
||||
EASY_CONSTEXPR_FCN T numeric_max() {
|
||||
return ::std::numeric_limits<T>::max();
|
||||
}
|
||||
|
||||
template <class T> inline
|
||||
EASY_CONSTEXPR_FCN T numeric_max(T) {
|
||||
return ::std::numeric_limits<T>::max();
|
||||
}
|
||||
|
||||
template <class T> inline
|
||||
EASY_CONSTEXPR_FCN bool is_max(const T& _value) {
|
||||
return _value == ::std::numeric_limits<T>::max();
|
||||
}
|
||||
|
||||
template <class T> inline
|
||||
void set_max(T& _value) {
|
||||
_value = ::std::numeric_limits<T>::max();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline EASY_CONSTEXPR_FCN QRgb toRgb(uint32_t _red, uint32_t _green, uint32_t _blue) {
|
||||
return (_red << 16) + (_green << 8) + _blue;
|
||||
}
|
||||
|
||||
inline EASY_CONSTEXPR_FCN QRgb fromProfilerRgb(uint32_t _red, uint32_t _green, uint32_t _blue) {
|
||||
return _red == 0 && _green == 0 && _blue == 0 ? ::profiler::colors::Default : toRgb(_red, _green, _blue) | 0x00141414;
|
||||
}
|
||||
|
||||
EASY_FORCE_INLINE EASY_CONSTEXPR_FCN qreal colorSum(::profiler::color_t _color) {
|
||||
return 255. - (((_color & 0x00ff0000) >> 16) * 0.299 + ((_color & 0x0000ff00) >> 8) * 0.587 + (_color & 0x000000ff) * 0.114);
|
||||
}
|
||||
|
||||
inline EASY_CONSTEXPR_FCN bool isLightColor(::profiler::color_t _color) {
|
||||
return colorSum(_color) < 76.5 || ((_color & 0xff000000) >> 24) < 0x80;
|
||||
}
|
||||
|
||||
inline EASY_CONSTEXPR_FCN bool isLightColor(::profiler::color_t _color, qreal _maxSum) {
|
||||
return colorSum(_color) < _maxSum || ((_color & 0xff000000) >> 24) < 0x80;
|
||||
}
|
||||
|
||||
inline EASY_CONSTEXPR_FCN ::profiler::color_t textColorForFlag(bool _is_light) {
|
||||
return _is_light ? ::profiler::colors::Dark : ::profiler::colors::CreamWhite;
|
||||
}
|
||||
|
||||
inline EASY_CONSTEXPR_FCN ::profiler::color_t textColorForRgb(::profiler::color_t _color) {
|
||||
return isLightColor(_color) ? ::profiler::colors::Dark : ::profiler::colors::CreamWhite;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
qreal timeFactor(qreal _interval);
|
||||
|
||||
QString autoTimeStringReal(qreal _interval, int _precision = 1);
|
||||
QString autoTimeStringInt(qreal _interval);
|
||||
QString autoTimeStringRealNs(::profiler::timestamp_t _interval, int _precision = 1);
|
||||
QString autoTimeStringIntNs(::profiler::timestamp_t _interval);
|
||||
|
||||
QString timeStringReal(TimeUnits _units, qreal _interval, int _precision = 1);
|
||||
QString timeStringRealNs(TimeUnits _units, ::profiler::timestamp_t _interval, int _precision = 1);
|
||||
QString timeStringInt(TimeUnits _units, qreal _interval);
|
||||
QString timeStringIntNs(TimeUnits _units, ::profiler::timestamp_t _interval);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline double percentReal(::profiler::timestamp_t _partial, ::profiler::timestamp_t _total) {
|
||||
return _total != 0 ? 100. * static_cast<double>(_partial) / static_cast<double>(_total) : 0.;
|
||||
}
|
||||
|
||||
inline int percent(::profiler::timestamp_t _partial, ::profiler::timestamp_t _total) {
|
||||
return static_cast<int>(0.5 + percentReal(_partial, _total));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QFont EFont(QFont::StyleHint _hint, const char* _family, int _size, int _weight = -1);
|
||||
|
||||
inline QFont EFont(const char* _family, int _size, int _weight = -1) {
|
||||
return EFont(QFont::Helvetica, _family, _size, _weight);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QString valueTypeString(::profiler::DataType _dataType);
|
||||
QString valueTypeString(const ::profiler::ArbitraryValue& _serializedValue);
|
||||
QString valueString(const ::profiler::ArbitraryValue& _serializedValue);
|
||||
double value2real(const ::profiler::ArbitraryValue& _serializedValue, int _index = 0);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_PROFILER_GUI_COMMON_FUNCTIONS_H
|
205
3rdparty/easyprofiler/profiler_gui/common_types.h
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
/************************************************************************
|
||||
* file name : common_types.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/07/31
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of common types for both GraphicsView
|
||||
* : and TreeWidget.
|
||||
* ----------------- :
|
||||
* change log : * 2016/07/31 Victor Zarubkin: initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_PROFILER__GUI_COMMON_TYPES_H
|
||||
#define EASY_PROFILER__GUI_COMMON_TYPES_H
|
||||
|
||||
#include <vector>
|
||||
#include <easy/reader.h>
|
||||
#include <QObject>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
#define EASY_GRAPHICS_ITEM_RECURSIVE_PAINT
|
||||
//#undef EASY_GRAPHICS_ITEM_RECURSIVE_PAINT
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct EasyBlockItem Q_DECL_FINAL
|
||||
{
|
||||
qreal x; ///< x coordinate of the item (this is made qreal=double to avoid mistakes on very wide scene)
|
||||
float w; ///< Width of the item
|
||||
::profiler::block_index_t block; ///< Index of profiler block
|
||||
|
||||
#ifndef EASY_GRAPHICS_ITEM_RECURSIVE_PAINT
|
||||
::profiler::block_index_t neighbours; ///< Number of neighbours (parent.children.size())
|
||||
uint32_t children_begin; ///< Index of first child item on the next sublevel
|
||||
int8_t state; ///< 0 = no change, 1 = paint, -1 = do not paint
|
||||
#else
|
||||
::profiler::block_index_t max_depth_child; ///< Index of child with maximum tree depth
|
||||
uint32_t children_begin; ///< Index of first child item on the next sublevel
|
||||
#endif
|
||||
|
||||
// Possible optimizations:
|
||||
// 1) We can save 1 more byte per block if we will use char instead of short + real time calculations for "totalHeight" var;
|
||||
// 2) We can save 12 bytes per block if "x" and "w" vars will be removed (all this information exist inside BlocksTree),
|
||||
// but this requires runtime x-coodinate calculation because BlocksTree has x value in nanoseconds.
|
||||
|
||||
inline void setPos(qreal _x, float _w) { x = _x; w = _w; }
|
||||
inline qreal left() const { return x; }
|
||||
inline qreal right() const { return x + w; }
|
||||
inline float width() const { return w; }
|
||||
|
||||
}; // END of struct EasyBlockItem.
|
||||
|
||||
//#define EASY_TREE_WIDGET__USE_VECTOR
|
||||
struct EasyBlock Q_DECL_FINAL
|
||||
{
|
||||
::profiler::BlocksTree tree;
|
||||
#ifdef EASY_TREE_WIDGET__USE_VECTOR
|
||||
uint32_t tree_item;
|
||||
#endif
|
||||
uint32_t graphics_item_index;
|
||||
uint8_t graphics_item_level;
|
||||
uint8_t graphics_item;
|
||||
bool expanded;
|
||||
|
||||
EasyBlock() = default;
|
||||
|
||||
EasyBlock(EasyBlock&& that)
|
||||
: tree(::std::move(that.tree))
|
||||
#ifdef EASY_TREE_WIDGET__USE_VECTOR
|
||||
, tree_item(that.tree_item)
|
||||
#endif
|
||||
, graphics_item_index(that.graphics_item_index)
|
||||
, graphics_item_level(that.graphics_item_level)
|
||||
, graphics_item(that.graphics_item)
|
||||
, expanded(that.expanded)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
EasyBlock(const EasyBlock&) = delete;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef ::std::vector<EasyBlockItem> EasyItems;
|
||||
typedef ::std::vector<EasyBlock> EasyBlocks;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct EasySelectedBlock Q_DECL_FINAL
|
||||
{
|
||||
const ::profiler::BlocksTreeRoot* root;
|
||||
::profiler::block_index_t tree;
|
||||
|
||||
EasySelectedBlock() : root(nullptr), tree(0xffffffff)
|
||||
{
|
||||
}
|
||||
|
||||
EasySelectedBlock(const ::profiler::BlocksTreeRoot* _root, const ::profiler::block_index_t _tree)
|
||||
: root(_root)
|
||||
, tree(_tree)
|
||||
{
|
||||
}
|
||||
|
||||
}; // END of struct EasySelectedBlock.
|
||||
|
||||
typedef ::std::vector<EasySelectedBlock> TreeBlocks;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum TimeUnits : int8_t
|
||||
{
|
||||
TimeUnits_ms = 0,
|
||||
TimeUnits_us,
|
||||
TimeUnits_ns,
|
||||
TimeUnits_auto
|
||||
|
||||
}; // END of enum TimeUnits.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
template <typename ... Args>
|
||||
struct Overload
|
||||
{
|
||||
template <typename TClass, typename TReturn>
|
||||
static EASY_CONSTEXPR_FCN auto of(TReturn (TClass::*method)(Args...)) -> decltype(method)
|
||||
{
|
||||
return method;
|
||||
}
|
||||
|
||||
template <typename TReturn>
|
||||
static EASY_CONSTEXPR_FCN auto of(TReturn (*func)(Args...)) -> decltype(func)
|
||||
{
|
||||
return func;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct Overload<void>
|
||||
{
|
||||
template <typename TClass, typename TReturn>
|
||||
static EASY_CONSTEXPR_FCN auto of(TReturn (TClass::*method)()) -> decltype(method)
|
||||
{
|
||||
return method;
|
||||
}
|
||||
|
||||
template <typename TReturn>
|
||||
static EASY_CONSTEXPR_FCN auto of(TReturn (*func)()) -> decltype(func)
|
||||
{
|
||||
return func;
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_PROFILER__GUI_COMMON_TYPES_H
|
982
3rdparty/easyprofiler/profiler_gui/descriptors_tree_widget.cpp
vendored
Normal file
@@ -0,0 +1,982 @@
|
||||
/************************************************************************
|
||||
* file name : descriptors_tree_widget.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2016/09/17
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains implementation of EasyDescTreeWidget and it's auxiliary classes
|
||||
* : for displyaing EasyProfiler blocks descriptors tree.
|
||||
* ----------------- :
|
||||
* change log : * 2016/09/17 Victor Zarubkin: initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QActionGroup>
|
||||
#include <QHeaderView>
|
||||
#include <QString>
|
||||
#include <QContextMenuEvent>
|
||||
#include <QKeyEvent>
|
||||
#include <QSignalBlocker>
|
||||
#include <QSettings>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QToolBar>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QVariant>
|
||||
#include <QTimer>
|
||||
#include <thread>
|
||||
#include "descriptors_tree_widget.h"
|
||||
#include "arbitrary_value_inspector.h"
|
||||
#include "treeview_first_column_delegate.h"
|
||||
#include "globals.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include <processthreadsapi.h>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef max
|
||||
#undef max
|
||||
#endif
|
||||
|
||||
#ifdef min
|
||||
#undef min
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum DescColumns
|
||||
{
|
||||
DESC_COL_FILE_LINE = 0,
|
||||
DESC_COL_TYPE,
|
||||
DESC_COL_NAME,
|
||||
DESC_COL_STATUS,
|
||||
|
||||
DESC_COL_COLUMNS_NUMBER
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
::profiler::EasyBlockStatus nextStatus(::profiler::EasyBlockStatus _status)
|
||||
{
|
||||
switch (_status)
|
||||
{
|
||||
case ::profiler::OFF:
|
||||
return ::profiler::ON;
|
||||
|
||||
case ::profiler::ON:
|
||||
return ::profiler::FORCE_ON;
|
||||
|
||||
case ::profiler::FORCE_ON:
|
||||
return ::profiler::OFF_RECURSIVE;
|
||||
|
||||
case ::profiler::OFF_RECURSIVE:
|
||||
return ::profiler::ON_WITHOUT_CHILDREN;
|
||||
|
||||
case ::profiler::ON_WITHOUT_CHILDREN:
|
||||
return ::profiler::FORCE_ON_WITHOUT_CHILDREN;
|
||||
|
||||
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
||||
return ::profiler::OFF;
|
||||
}
|
||||
|
||||
return ::profiler::OFF;
|
||||
}
|
||||
|
||||
const char* statusText(::profiler::EasyBlockStatus _status)
|
||||
{
|
||||
switch (_status)
|
||||
{
|
||||
case ::profiler::OFF:
|
||||
return "OFF";
|
||||
|
||||
case ::profiler::ON:
|
||||
return "ON";
|
||||
|
||||
case ::profiler::FORCE_ON:
|
||||
return "FORCE_ON";
|
||||
|
||||
case ::profiler::OFF_RECURSIVE:
|
||||
return "OFF_RECURSIVE";
|
||||
|
||||
case ::profiler::ON_WITHOUT_CHILDREN:
|
||||
return "ON_WITHOUT_CHILDREN";
|
||||
|
||||
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
||||
return "FORCE_ON_WITHOUT_CHILDREN";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
::profiler::color_t statusColor(::profiler::EasyBlockStatus _status)
|
||||
{
|
||||
switch (_status)
|
||||
{
|
||||
case ::profiler::OFF:
|
||||
return ::profiler::colors::Red900;
|
||||
|
||||
case ::profiler::ON:
|
||||
return ::profiler::colors::LightGreen900;
|
||||
|
||||
case ::profiler::FORCE_ON:
|
||||
return ::profiler::colors::LightGreen900;
|
||||
|
||||
case ::profiler::OFF_RECURSIVE:
|
||||
return ::profiler::colors::Red900;
|
||||
|
||||
case ::profiler::ON_WITHOUT_CHILDREN:
|
||||
return ::profiler::colors::Lime900;
|
||||
|
||||
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
||||
return ::profiler::colors::Lime900;
|
||||
}
|
||||
|
||||
return ::profiler::colors::Black;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyDescWidgetItem::EasyDescWidgetItem(::profiler::block_id_t _desc, Parent* _parent)
|
||||
: Parent(_parent, QTreeWidgetItem::UserType)
|
||||
, m_desc(_desc)
|
||||
, m_type(EasyDescWidgetItem::Type::File)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
EasyDescWidgetItem::~EasyDescWidgetItem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool EasyDescWidgetItem::operator < (const Parent& _other) const
|
||||
{
|
||||
const auto col = treeWidget()->sortColumn();
|
||||
|
||||
switch (col)
|
||||
{
|
||||
case DESC_COL_FILE_LINE:
|
||||
{
|
||||
if (parent() != nullptr)
|
||||
return data(col, Qt::UserRole).toInt() < _other.data(col, Qt::UserRole).toInt();
|
||||
}
|
||||
}
|
||||
|
||||
return Parent::operator < (_other);
|
||||
}
|
||||
|
||||
QVariant EasyDescWidgetItem::data(int _column, int _role) const
|
||||
{
|
||||
if (_column == DESC_COL_TYPE)
|
||||
{
|
||||
if (_role == Qt::ToolTipRole)
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Type::File: return QStringLiteral("File");
|
||||
case Type::Event: return QStringLiteral("Event");
|
||||
case Type::Block: return QStringLiteral("Block");
|
||||
case Type::Value: return QStringLiteral("Arbitrary Value");
|
||||
}
|
||||
}
|
||||
else if (_role == Qt::DisplayRole)
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Type::File: return QStringLiteral("F");
|
||||
case Type::Event: return QStringLiteral("E");
|
||||
case Type::Block: return QStringLiteral("B");
|
||||
case Type::Value: return QStringLiteral("V");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QTreeWidgetItem::data(_column, _role);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyDescTreeWidget::EasyDescTreeWidget(QWidget* _parent)
|
||||
: Parent(_parent)
|
||||
, m_lastFound(nullptr)
|
||||
, m_lastSearchColumn(-1)
|
||||
, m_searchColumn(DESC_COL_NAME)
|
||||
, m_bLocked(false)
|
||||
{
|
||||
setAutoFillBackground(false);
|
||||
setAlternatingRowColors(true);
|
||||
setItemsExpandable(true);
|
||||
setAnimated(true);
|
||||
setSortingEnabled(false);
|
||||
setColumnCount(DESC_COL_COLUMNS_NUMBER);
|
||||
setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
||||
auto header_item = new QTreeWidgetItem();
|
||||
header_item->setText(DESC_COL_FILE_LINE, "File/Line");
|
||||
header_item->setText(DESC_COL_TYPE, "Type");
|
||||
header_item->setText(DESC_COL_NAME, "Name");
|
||||
header_item->setText(DESC_COL_STATUS, "Status");
|
||||
setHeaderItem(header_item);
|
||||
|
||||
connect(&EASY_GLOBALS.events, &::profiler_gui::EasyGlobalSignals::selectedBlockChanged, this, &This::onSelectedBlockChange);
|
||||
connect(&EASY_GLOBALS.events, &::profiler_gui::EasyGlobalSignals::blockStatusChanged, this, &This::onBlockStatusChange);
|
||||
connect(this, &Parent::itemExpanded, this, &This::onItemExpand);
|
||||
connect(this, &Parent::itemDoubleClicked, this, &This::onDoubleClick);
|
||||
connect(this, &Parent::currentItemChanged, this, &This::onCurrentItemChange);
|
||||
|
||||
loadSettings();
|
||||
|
||||
setItemDelegateForColumn(0, new EasyTreeViewFirstColumnItemDelegate(this));
|
||||
}
|
||||
|
||||
EasyDescTreeWidget::~EasyDescTreeWidget()
|
||||
{
|
||||
if (::profiler_gui::is_max(EASY_GLOBALS.selected_block) && !::profiler_gui::is_max(EASY_GLOBALS.selected_block_id))
|
||||
{
|
||||
::profiler_gui::set_max(EASY_GLOBALS.selected_block_id);
|
||||
emit EASY_GLOBALS.events.refreshRequired();
|
||||
}
|
||||
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::setSearchColumn(int column)
|
||||
{
|
||||
m_searchColumn = column;
|
||||
}
|
||||
|
||||
int EasyDescTreeWidget::searchColumn() const
|
||||
{
|
||||
return m_searchColumn;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::contextMenuEvent(QContextMenuEvent* _event)
|
||||
{
|
||||
_event->accept();
|
||||
|
||||
QMenu menu;
|
||||
menu.setToolTipsVisible(true);
|
||||
auto action = menu.addAction("Expand all");
|
||||
action->setIcon(QIcon(imagePath("expand")));
|
||||
connect(action, &QAction::triggered, this, &This::expandAll);
|
||||
|
||||
action = menu.addAction("Collapse all");
|
||||
action->setIcon(QIcon(imagePath("collapse")));
|
||||
connect(action, &QAction::triggered, this, &This::collapseAll);
|
||||
|
||||
auto item = currentItem();
|
||||
if (item != nullptr && item->parent() != nullptr && currentColumn() >= DESC_COL_TYPE)
|
||||
{
|
||||
const auto& desc = easyDescriptor(static_cast<EasyDescWidgetItem*>(item)->desc());
|
||||
|
||||
menu.addSeparator();
|
||||
auto submenu = menu.addMenu("Change status");
|
||||
submenu->setToolTipsVisible(true);
|
||||
|
||||
#define ADD_STATUS_ACTION(NameValue, StatusValue, ToolTipValue)\
|
||||
action = submenu->addAction(NameValue);\
|
||||
action->setCheckable(true);\
|
||||
action->setChecked(desc.status() == StatusValue);\
|
||||
action->setData(static_cast<quint32>(StatusValue));\
|
||||
action->setToolTip(ToolTipValue);\
|
||||
connect(action, &QAction::triggered, this, &This::onBlockStatusChangeClicked)
|
||||
|
||||
ADD_STATUS_ACTION("Off", ::profiler::OFF, "Do not profile this block.");
|
||||
ADD_STATUS_ACTION("On", ::profiler::ON, "Profile this block\nif parent enabled children.");
|
||||
ADD_STATUS_ACTION("Force-On", ::profiler::FORCE_ON, "Always profile this block even\nif it's parent disabled children.");
|
||||
ADD_STATUS_ACTION("Off-recursive", ::profiler::OFF_RECURSIVE, "Do not profile neither this block\nnor it's children.");
|
||||
ADD_STATUS_ACTION("On-without-children", ::profiler::ON_WITHOUT_CHILDREN, "Profile this block, but\ndo not profile it's children.");
|
||||
ADD_STATUS_ACTION("Force-On-without-children", ::profiler::FORCE_ON_WITHOUT_CHILDREN, "Always profile this block, but\ndo not profile it's children.");
|
||||
#undef ADD_STATUS_ACTION
|
||||
|
||||
submenu->setEnabled(EASY_GLOBALS.connected);
|
||||
if (!EASY_GLOBALS.connected)
|
||||
submenu->setTitle(QString("%1 (connection needed)").arg(submenu->title()));
|
||||
}
|
||||
|
||||
menu.exec(QCursor::pos());
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::clearSilent(bool _global)
|
||||
{
|
||||
const QSignalBlocker b(this);
|
||||
|
||||
setSortingEnabled(false);
|
||||
m_lastFound = nullptr;
|
||||
m_lastSearch.clear();
|
||||
|
||||
m_highlightItems.clear();
|
||||
m_items.clear();
|
||||
|
||||
::std::vector<QTreeWidgetItem*> topLevelItems;
|
||||
topLevelItems.reserve(topLevelItemCount());
|
||||
for (int i = topLevelItemCount() - 1; i >= 0; --i)
|
||||
{
|
||||
const bool expanded = !_global && topLevelItem(i)->isExpanded();
|
||||
auto item = takeTopLevelItem(i);
|
||||
if (expanded)
|
||||
m_expandedFilesTemp.insert(item->text(DESC_COL_FILE_LINE).toStdString());
|
||||
topLevelItems.push_back(item);
|
||||
}
|
||||
|
||||
auto deleter_thread = ::std::thread([](decltype(topLevelItems) _items)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
|
||||
#endif
|
||||
|
||||
for (auto item : _items)
|
||||
delete item;
|
||||
|
||||
}, ::std::move(topLevelItems));
|
||||
|
||||
deleter_thread.detach();
|
||||
|
||||
//clear();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct FileItems
|
||||
{
|
||||
using Items = ::std::unordered_map<int, EasyDescWidgetItem*, ::estd::hash<int> >;
|
||||
Items children;
|
||||
QTreeWidgetItem* item = nullptr;
|
||||
};
|
||||
|
||||
void EasyDescTreeWidget::build()
|
||||
{
|
||||
auto f = font();
|
||||
f.setBold(true);
|
||||
|
||||
typedef ::std::unordered_map<::std::string, FileItems> Files;
|
||||
Files fileItems;
|
||||
|
||||
m_items.resize(EASY_GLOBALS.descriptors.size());
|
||||
memset(m_items.data(), 0, sizeof(void*) * m_items.size());
|
||||
|
||||
const QSignalBlocker b(this);
|
||||
::profiler::block_id_t id = 0;
|
||||
for (auto desc : EASY_GLOBALS.descriptors)
|
||||
{
|
||||
if (desc != nullptr)
|
||||
{
|
||||
auto& p = fileItems[desc->file()];
|
||||
if (p.item == nullptr)
|
||||
{
|
||||
auto item = new EasyDescWidgetItem(0);
|
||||
item->setText(DESC_COL_FILE_LINE, QString(desc->file()).remove(QRegExp("^(\\.{2}\\\\+|\\/+)+")));
|
||||
item->setType(EasyDescWidgetItem::Type::File);
|
||||
p.item = item;
|
||||
}
|
||||
|
||||
auto it = p.children.find(desc->line());
|
||||
if (it == p.children.end())
|
||||
{
|
||||
auto item = new EasyDescWidgetItem(desc->id(), p.item);
|
||||
item->setText(DESC_COL_FILE_LINE, QString::number(desc->line()));
|
||||
item->setData(DESC_COL_FILE_LINE, Qt::UserRole, desc->line());
|
||||
item->setText(DESC_COL_NAME, desc->name());
|
||||
|
||||
switch (desc->type())
|
||||
{
|
||||
case ::profiler::BlockType::Block:
|
||||
item->setType(EasyDescWidgetItem::Type::Block);
|
||||
break;
|
||||
|
||||
case ::profiler::BlockType::Event:
|
||||
item->setType(EasyDescWidgetItem::Type::Event);
|
||||
break;
|
||||
|
||||
case ::profiler::BlockType::Value:
|
||||
item->setType(EasyDescWidgetItem::Type::Value);
|
||||
break;
|
||||
}
|
||||
|
||||
item->setFont(DESC_COL_STATUS, f);
|
||||
item->setText(DESC_COL_STATUS, statusText(desc->status()));
|
||||
item->setForeground(DESC_COL_STATUS, QColor::fromRgba(statusColor(desc->status())));
|
||||
|
||||
m_items[id] = item;
|
||||
p.children.insert(::std::make_pair(desc->line(), item));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_items[id] = it->second;
|
||||
}
|
||||
}
|
||||
|
||||
++id;
|
||||
}
|
||||
|
||||
for (auto& p : fileItems)
|
||||
{
|
||||
addTopLevelItem(p.second.item);
|
||||
if (m_expandedFilesTemp.find(p.first) != m_expandedFilesTemp.end())
|
||||
p.second.item->setExpanded(true);
|
||||
}
|
||||
|
||||
m_expandedFilesTemp.clear();
|
||||
setSortingEnabled(true);
|
||||
sortByColumn(DESC_COL_FILE_LINE, Qt::AscendingOrder);
|
||||
resizeColumnsToContents();
|
||||
QTimer::singleShot(100, [this](){ onSelectedBlockChange(EASY_GLOBALS.selected_block); });
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::onItemExpand(QTreeWidgetItem*)
|
||||
{
|
||||
resizeColumnsToContents();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::onDoubleClick(QTreeWidgetItem* _item, int _column)
|
||||
{
|
||||
if (!EASY_GLOBALS.connected)
|
||||
return;
|
||||
|
||||
if (_column >= DESC_COL_TYPE && _item->parent() != nullptr)
|
||||
{
|
||||
auto item = static_cast<EasyDescWidgetItem*>(_item);
|
||||
auto& desc = easyDescriptor(item->desc());
|
||||
desc.setStatus(nextStatus(desc.status()));
|
||||
|
||||
item->setText(DESC_COL_STATUS, statusText(desc.status()));
|
||||
item->setForeground(DESC_COL_STATUS, QColor::fromRgba(statusColor(desc.status())));
|
||||
|
||||
m_bLocked = true;
|
||||
emit EASY_GLOBALS.events.blockStatusChanged(desc.id(), desc.status());
|
||||
m_bLocked = false;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::onCurrentItemChange(QTreeWidgetItem* _item, QTreeWidgetItem* _prev)
|
||||
{
|
||||
if (_prev != nullptr)
|
||||
{
|
||||
auto f = font();
|
||||
for (int i = 0; i < DESC_COL_STATUS; ++i)
|
||||
_prev->setFont(i, f);
|
||||
}
|
||||
|
||||
if (_item != nullptr)
|
||||
{
|
||||
auto f = font();
|
||||
f.setBold(true);
|
||||
for (int i = 0; i < DESC_COL_STATUS; ++i)
|
||||
_item->setFont(i, f);
|
||||
|
||||
if (::profiler_gui::is_max(EASY_GLOBALS.selected_block) && _item->parent() != nullptr)
|
||||
{
|
||||
const auto id = static_cast<EasyDescWidgetItem*>(_item)->desc();
|
||||
if (EASY_GLOBALS.selected_block_id != id)
|
||||
{
|
||||
EASY_GLOBALS.selected_block_id = id;
|
||||
emit EASY_GLOBALS.events.selectedBlockIdChanged(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (::profiler_gui::is_max(EASY_GLOBALS.selected_block) && !::profiler_gui::is_max(EASY_GLOBALS.selected_block_id))
|
||||
{
|
||||
::profiler_gui::set_max(EASY_GLOBALS.selected_block_id);
|
||||
emit EASY_GLOBALS.events.selectedBlockIdChanged(EASY_GLOBALS.selected_block_id);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::onBlockStatusChangeClicked(bool _checked)
|
||||
{
|
||||
if (!_checked || !EASY_GLOBALS.connected)
|
||||
return;
|
||||
|
||||
auto item = currentItem();
|
||||
if (item == nullptr || item->parent() == nullptr)
|
||||
return;
|
||||
|
||||
auto action = qobject_cast<QAction*>(sender());
|
||||
if (action != nullptr)
|
||||
{
|
||||
auto& desc = easyDescriptor(static_cast<EasyDescWidgetItem*>(item)->desc());
|
||||
desc.setStatus(static_cast<::profiler::EasyBlockStatus>(action->data().toUInt()));
|
||||
item->setText(DESC_COL_STATUS, statusText(desc.status()));
|
||||
item->setForeground(DESC_COL_STATUS, QColor::fromRgba(statusColor(desc.status())));
|
||||
|
||||
m_bLocked = true;
|
||||
emit EASY_GLOBALS.events.blockStatusChanged(desc.id(), desc.status());
|
||||
m_bLocked = false;
|
||||
}
|
||||
}
|
||||
|
||||
void EasyDescTreeWidget::onBlockStatusChange(::profiler::block_id_t _id, ::profiler::EasyBlockStatus _status)
|
||||
{
|
||||
if (m_bLocked)
|
||||
return;
|
||||
|
||||
auto item = m_items[_id];
|
||||
if (item == nullptr)
|
||||
return;
|
||||
|
||||
auto& desc = easyDescriptor(item->desc());
|
||||
item->setText(DESC_COL_STATUS, statusText(desc.status()));
|
||||
item->setForeground(DESC_COL_STATUS, QColor::fromRgba(statusColor(desc.status())));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::resizeColumnsToContents()
|
||||
{
|
||||
for (int i = 0; i < DESC_COL_COLUMNS_NUMBER; ++i)
|
||||
resizeColumnToContents(i);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::onSelectedBlockChange(uint32_t _block_index)
|
||||
{
|
||||
if (::profiler_gui::is_max(_block_index))
|
||||
{
|
||||
setCurrentItem(nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
auto item = m_items[easyBlocksTree(_block_index).node->id()];
|
||||
if (item == nullptr)
|
||||
return;
|
||||
|
||||
scrollToItem(item, QAbstractItemView::PositionAtCenter);
|
||||
setCurrentItem(item);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyDescTreeWidget::resetHighlight()
|
||||
{
|
||||
for (auto item : m_highlightItems) {
|
||||
for (int i = 0; i < DESC_COL_COLUMNS_NUMBER; ++i)
|
||||
item->setBackground(i, Qt::NoBrush);
|
||||
}
|
||||
m_highlightItems.clear();
|
||||
}
|
||||
|
||||
void EasyDescTreeWidget::loadSettings()
|
||||
{
|
||||
QSettings settings(::profiler_gui::ORGANAZATION_NAME, ::profiler_gui::APPLICATION_NAME);
|
||||
settings.beginGroup("desc_tree_widget");
|
||||
|
||||
auto val = settings.value("searchColumn");
|
||||
if (!val.isNull())
|
||||
m_searchColumn = val.toInt();
|
||||
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void EasyDescTreeWidget::saveSettings()
|
||||
{
|
||||
QSettings settings(::profiler_gui::ORGANAZATION_NAME, ::profiler_gui::APPLICATION_NAME);
|
||||
settings.beginGroup("desc_tree_widget");
|
||||
|
||||
settings.setValue("searchColumn", m_searchColumn);
|
||||
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int EasyDescTreeWidget::findNext(const QString& _str, Qt::MatchFlags _flags)
|
||||
{
|
||||
if (_str.isEmpty())
|
||||
{
|
||||
resetHighlight();
|
||||
m_lastSearchColumn = m_searchColumn;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const bool isNewSearch = (m_lastSearchColumn != m_searchColumn || m_lastSearch != _str);
|
||||
auto itemsList = findItems(_str, Qt::MatchContains | Qt::MatchRecursive | _flags, m_searchColumn);
|
||||
|
||||
if (!isNewSearch)
|
||||
{
|
||||
if (!itemsList.empty())
|
||||
{
|
||||
bool stop = false;
|
||||
decltype(m_lastFound) next = nullptr;
|
||||
for (auto item : itemsList)
|
||||
{
|
||||
if (stop)
|
||||
{
|
||||
next = item;
|
||||
break;
|
||||
}
|
||||
|
||||
stop = item == m_lastFound;
|
||||
}
|
||||
|
||||
m_lastFound = next == nullptr ? itemsList.front() : next;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lastFound = nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
resetHighlight();
|
||||
|
||||
m_lastSearchColumn = m_searchColumn;
|
||||
m_lastSearch = _str;
|
||||
m_lastFound = !itemsList.empty() ? itemsList.front() : nullptr;
|
||||
|
||||
for (auto item : itemsList)
|
||||
{
|
||||
m_highlightItems.push_back(item);
|
||||
for (int i = 0; i < DESC_COL_COLUMNS_NUMBER; ++i)
|
||||
item->setBackgroundColor(i, QColor::fromRgba(0x80000000 | (0x00ffffff & ::profiler::colors::Yellow)));
|
||||
}
|
||||
}
|
||||
|
||||
if (m_lastFound != nullptr)
|
||||
{
|
||||
scrollToItem(m_lastFound, QAbstractItemView::PositionAtCenter);
|
||||
setCurrentItem(m_lastFound);
|
||||
}
|
||||
|
||||
return itemsList.size();
|
||||
}
|
||||
|
||||
int EasyDescTreeWidget::findPrev(const QString& _str, Qt::MatchFlags _flags)
|
||||
{
|
||||
if (_str.isEmpty())
|
||||
{
|
||||
resetHighlight();
|
||||
m_lastSearchColumn = m_searchColumn;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const bool isNewSearch = (m_lastSearchColumn != m_searchColumn || m_lastSearch != _str);
|
||||
auto itemsList = findItems(_str, Qt::MatchContains | Qt::MatchRecursive | _flags, m_searchColumn);
|
||||
|
||||
if (!isNewSearch)
|
||||
{
|
||||
if (!itemsList.empty())
|
||||
{
|
||||
decltype(m_lastFound) prev = nullptr;
|
||||
for (auto item : itemsList)
|
||||
{
|
||||
if (item == m_lastFound)
|
||||
break;
|
||||
|
||||
prev = item;
|
||||
}
|
||||
|
||||
m_lastFound = prev == nullptr ? itemsList.back() : prev;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lastFound = nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
resetHighlight();
|
||||
|
||||
m_lastSearchColumn = m_searchColumn;
|
||||
m_lastSearch = _str;
|
||||
m_lastFound = !itemsList.empty() ? itemsList.front() : nullptr;
|
||||
|
||||
m_highlightItems.reserve(itemsList.size());
|
||||
for (auto item : itemsList)
|
||||
{
|
||||
m_highlightItems.push_back(item);
|
||||
for (int i = 0; i < DESC_COL_COLUMNS_NUMBER; ++i)
|
||||
item->setBackgroundColor(i, QColor::fromRgba(0x80000000 | (0x00ffffff & ::profiler::colors::Yellow)));
|
||||
}
|
||||
}
|
||||
|
||||
if (m_lastFound != nullptr)
|
||||
{
|
||||
scrollToItem(m_lastFound, QAbstractItemView::PositionAtCenter);
|
||||
setCurrentItem(m_lastFound);
|
||||
}
|
||||
|
||||
return itemsList.size();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyDescWidget::EasyDescWidget(QWidget* _parent) : Parent(_parent)
|
||||
, m_tree(new EasyDescTreeWidget(this))
|
||||
, m_values(new EasyArbitraryValuesWidget(this))
|
||||
, m_searchBox(new QLineEdit(this))
|
||||
, m_foundNumber(new QLabel("Found 0 matches", this))
|
||||
, m_searchButton(nullptr)
|
||||
, m_bCaseSensitiveSearch(false)
|
||||
{
|
||||
loadSettings();
|
||||
|
||||
m_searchBox->setFixedWidth(300);
|
||||
m_searchBox->setContentsMargins(5, 0, 0, 0);
|
||||
|
||||
auto tb = new QToolBar(this);
|
||||
tb->setIconSize(::profiler_gui::ICONS_SIZE);
|
||||
auto refreshButton = tb->addAction(QIcon(imagePath("reload")), tr("Refresh blocks list"));
|
||||
refreshButton->setEnabled(EASY_GLOBALS.connected);
|
||||
refreshButton->setToolTip(tr("Refresh blocks list.\nConnection needed."));
|
||||
connect(refreshButton, &QAction::triggered, &EASY_GLOBALS.events, &::profiler_gui::EasyGlobalSignals::blocksRefreshRequired);
|
||||
|
||||
|
||||
|
||||
auto menu = new QMenu(this);
|
||||
m_searchButton = menu->menuAction();
|
||||
m_searchButton->setText("Find next");
|
||||
m_searchButton->setIcon(QIcon(imagePath("find-next")));
|
||||
m_searchButton->setData(true);
|
||||
connect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
||||
|
||||
auto actionGroup = new QActionGroup(this);
|
||||
actionGroup->setExclusive(true);
|
||||
|
||||
auto a = new QAction(tr("Find next"), actionGroup);
|
||||
a->setCheckable(true);
|
||||
a->setChecked(true);
|
||||
connect(a, &QAction::triggered, this, &This::findNextFromMenu);
|
||||
menu->addAction(a);
|
||||
|
||||
a = new QAction(tr("Find previous"), actionGroup);
|
||||
a->setCheckable(true);
|
||||
connect(a, &QAction::triggered, this, &This::findPrevFromMenu);
|
||||
menu->addAction(a);
|
||||
|
||||
a = menu->addAction("Case sensitive");
|
||||
a->setCheckable(true);
|
||||
a->setChecked(m_bCaseSensitiveSearch);
|
||||
connect(a, &QAction::triggered, [this](bool _checked){ m_bCaseSensitiveSearch = _checked; });
|
||||
menu->addAction(a);
|
||||
|
||||
menu->addSeparator();
|
||||
auto headerItem = m_tree->headerItem();
|
||||
actionGroup = new QActionGroup(this);
|
||||
actionGroup->setExclusive(true);
|
||||
for (int i = 0; i < DESC_COL_STATUS; ++i)
|
||||
{
|
||||
if (i == DESC_COL_TYPE)
|
||||
continue;
|
||||
|
||||
a = new QAction(QStringLiteral("Search by ") + headerItem->text(i), actionGroup);
|
||||
a->setData(i);
|
||||
a->setCheckable(true);
|
||||
if (i == m_tree->searchColumn())
|
||||
a->setChecked(true);
|
||||
connect(a, &QAction::triggered, this, &This::onSearchColumnChange);
|
||||
|
||||
menu->addAction(a);
|
||||
}
|
||||
|
||||
tb->addSeparator();
|
||||
tb->addAction(m_searchButton);
|
||||
tb->addWidget(m_searchBox);
|
||||
|
||||
auto searchbox = new QHBoxLayout();
|
||||
searchbox->setContentsMargins(0, 0, 5, 0);
|
||||
searchbox->addWidget(tb);
|
||||
searchbox->addStretch(100);
|
||||
searchbox->addWidget(m_foundNumber, Qt::AlignRight);
|
||||
|
||||
auto lay = new QVBoxLayout(this);
|
||||
lay->setContentsMargins(1, 1, 1, 1);
|
||||
lay->addLayout(searchbox);
|
||||
lay->addWidget(m_tree);
|
||||
lay->addWidget(m_values);
|
||||
|
||||
connect(m_searchBox, &QLineEdit::returnPressed, this, &This::onSeachBoxReturnPressed);
|
||||
connect(&EASY_GLOBALS.events, &::profiler_gui::EasyGlobalSignals::connectionChanged, refreshButton, &QAction::setEnabled);
|
||||
}
|
||||
|
||||
EasyDescWidget::~EasyDescWidget()
|
||||
{
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
void EasyDescWidget::loadSettings()
|
||||
{
|
||||
QSettings settings(::profiler_gui::ORGANAZATION_NAME, ::profiler_gui::APPLICATION_NAME);
|
||||
settings.beginGroup("EasyDescWidget");
|
||||
|
||||
auto val = settings.value("case_sensitive");
|
||||
if (!val.isNull())
|
||||
m_bCaseSensitiveSearch = val.toBool();
|
||||
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void EasyDescWidget::saveSettings()
|
||||
{
|
||||
QSettings settings(::profiler_gui::ORGANAZATION_NAME, ::profiler_gui::APPLICATION_NAME);
|
||||
settings.beginGroup("EasyDescWidget");
|
||||
settings.setValue("case_sensitive", m_bCaseSensitiveSearch);
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void EasyDescWidget::keyPressEvent(QKeyEvent* _event)
|
||||
{
|
||||
if (_event->key() == Qt::Key_F3)
|
||||
{
|
||||
if (_event->modifiers() & Qt::ShiftModifier)
|
||||
findPrev(true);
|
||||
else
|
||||
findNext(true);
|
||||
}
|
||||
|
||||
_event->accept();
|
||||
}
|
||||
|
||||
void EasyDescWidget::contextMenuEvent(QContextMenuEvent* _event)
|
||||
{
|
||||
m_tree->contextMenuEvent(_event);
|
||||
}
|
||||
|
||||
void EasyDescWidget::build()
|
||||
{
|
||||
m_tree->clearSilent(false);
|
||||
m_foundNumber->setText(QString("Found 0 matches"));
|
||||
m_tree->build();
|
||||
m_values->rebuild();
|
||||
}
|
||||
|
||||
void EasyDescWidget::clear()
|
||||
{
|
||||
m_tree->clearSilent(true);
|
||||
m_foundNumber->setText(QString("Found 0 matches"));
|
||||
m_values->clear();
|
||||
}
|
||||
|
||||
void EasyDescWidget::onSeachBoxReturnPressed()
|
||||
{
|
||||
if (m_searchButton->data().toBool() == true)
|
||||
findNext(true);
|
||||
else
|
||||
findPrev(true);
|
||||
}
|
||||
|
||||
void EasyDescWidget::onSearchColumnChange(bool)
|
||||
{
|
||||
auto action = qobject_cast<QAction*>(sender());
|
||||
if (action != nullptr)
|
||||
m_tree->setSearchColumn(action->data().toInt());
|
||||
}
|
||||
|
||||
void EasyDescWidget::findNext(bool)
|
||||
{
|
||||
auto matches = m_tree->findNext(m_searchBox->text(), m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags());
|
||||
|
||||
if (matches == 1)
|
||||
m_foundNumber->setText(QString("Found 1 match"));
|
||||
else
|
||||
m_foundNumber->setText(QString("Found %1 matches").arg(matches));
|
||||
}
|
||||
|
||||
void EasyDescWidget::findPrev(bool)
|
||||
{
|
||||
auto matches = m_tree->findPrev(m_searchBox->text(), m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags());
|
||||
|
||||
if (matches == 1)
|
||||
m_foundNumber->setText(QString("Found 1 match"));
|
||||
else
|
||||
m_foundNumber->setText(QString("Found %1 matches").arg(matches));
|
||||
}
|
||||
|
||||
void EasyDescWidget::findNextFromMenu(bool _checked)
|
||||
{
|
||||
if (!_checked)
|
||||
return;
|
||||
|
||||
if (m_searchButton->data().toBool() == false)
|
||||
{
|
||||
m_searchButton->setData(true);
|
||||
m_searchButton->setText(tr("Find next"));
|
||||
m_searchButton->setIcon(QIcon(imagePath("find-next")));
|
||||
disconnect(m_searchButton, &QAction::triggered, this, &This::findPrev);
|
||||
connect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
||||
}
|
||||
|
||||
findNext(true);
|
||||
}
|
||||
|
||||
void EasyDescWidget::findPrevFromMenu(bool _checked)
|
||||
{
|
||||
if (!_checked)
|
||||
return;
|
||||
|
||||
if (m_searchButton->data().toBool() == true)
|
||||
{
|
||||
m_searchButton->setData(false);
|
||||
m_searchButton->setText(tr("Find prev"));
|
||||
m_searchButton->setIcon(QIcon(imagePath("find-prev")));
|
||||
disconnect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
||||
connect(m_searchButton, &QAction::triggered, this, &This::findPrev);
|
||||
}
|
||||
|
||||
findPrev(true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
234
3rdparty/easyprofiler/profiler_gui/descriptors_tree_widget.h
vendored
Normal file
@@ -0,0 +1,234 @@
|
||||
/************************************************************************
|
||||
* file name : descriptors_tree_widget.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/09/17
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyDescTreeWidget and it's auxiliary classes
|
||||
* : for displyaing EasyProfiler blocks descriptors tree.
|
||||
* ----------------- :
|
||||
* change log : * 2016/09/17 Victor Zarubkin: initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_DESCRIPTORS_WIDGET_H
|
||||
#define EASY_DESCRIPTORS_WIDGET_H
|
||||
|
||||
#include <QTreeWidget>
|
||||
#include <QStyledItemDelegate>
|
||||
#include <QString>
|
||||
|
||||
#include <vector>
|
||||
#include <unordered_set>
|
||||
|
||||
#include <easy/details/profiler_public_types.h>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyDescWidgetItem : public QTreeWidgetItem
|
||||
{
|
||||
using Parent = QTreeWidgetItem;
|
||||
using This = EasyDescWidgetItem;
|
||||
|
||||
public:
|
||||
|
||||
enum class Type : uint8_t
|
||||
{
|
||||
File,
|
||||
Event,
|
||||
Block,
|
||||
Value
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
::profiler::block_id_t m_desc;
|
||||
Type m_type;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyDescWidgetItem(::profiler::block_id_t _desc, Parent* _parent = nullptr);
|
||||
virtual ~EasyDescWidgetItem();
|
||||
|
||||
bool operator < (const Parent& _other) const override;
|
||||
QVariant data(int _column, int _role) const override;
|
||||
|
||||
public:
|
||||
|
||||
// Public inline methods
|
||||
|
||||
inline ::profiler::block_id_t desc() const
|
||||
{
|
||||
return m_desc;
|
||||
}
|
||||
|
||||
inline void setType(Type _type)
|
||||
{
|
||||
m_type = _type;
|
||||
}
|
||||
|
||||
}; // END of class EasyDescWidgetItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyDescTreeWidget : public QTreeWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
typedef QTreeWidget Parent;
|
||||
typedef EasyDescTreeWidget This;
|
||||
|
||||
typedef ::std::vector<EasyDescWidgetItem*> Items;
|
||||
typedef ::std::vector<QTreeWidgetItem*> TreeItems;
|
||||
typedef ::std::unordered_set<::std::string> ExpandedFiles;
|
||||
|
||||
protected:
|
||||
|
||||
ExpandedFiles m_expandedFilesTemp;
|
||||
Items m_items;
|
||||
TreeItems m_highlightItems;
|
||||
QString m_lastSearch;
|
||||
QTreeWidgetItem* m_lastFound;
|
||||
int m_lastSearchColumn;
|
||||
int m_searchColumn;
|
||||
bool m_bLocked;
|
||||
|
||||
public:
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
explicit EasyDescTreeWidget(QWidget* _parent = nullptr);
|
||||
virtual ~EasyDescTreeWidget();
|
||||
void contextMenuEvent(QContextMenuEvent* _event) override;
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
int findNext(const QString& _str, Qt::MatchFlags _flags);
|
||||
int findPrev(const QString& _str, Qt::MatchFlags _flags);
|
||||
void setSearchColumn(int column);
|
||||
int searchColumn() const;
|
||||
|
||||
public slots:
|
||||
|
||||
void clearSilent(bool _global = false);
|
||||
void build();
|
||||
|
||||
private slots:
|
||||
|
||||
void onBlockStatusChangeClicked(bool);
|
||||
void onCurrentItemChange(QTreeWidgetItem* _item, QTreeWidgetItem* _prev);
|
||||
void onItemExpand(QTreeWidgetItem* _item);
|
||||
void onDoubleClick(QTreeWidgetItem* _item, int _column);
|
||||
void onSelectedBlockChange(uint32_t _block_index);
|
||||
void onBlockStatusChange(::profiler::block_id_t _id, ::profiler::EasyBlockStatus _status);
|
||||
void resizeColumnsToContents();
|
||||
|
||||
private:
|
||||
|
||||
// Private methods
|
||||
|
||||
void resetHighlight();
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
|
||||
}; // END of class EasyDescTreeWidget.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyDescWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
typedef QWidget Parent;
|
||||
typedef EasyDescWidget This;
|
||||
|
||||
private:
|
||||
|
||||
EasyDescTreeWidget* m_tree;
|
||||
class EasyArbitraryValuesWidget* m_values;
|
||||
class QLineEdit* m_searchBox;
|
||||
class QLabel* m_foundNumber;
|
||||
class QAction* m_searchButton;
|
||||
bool m_bCaseSensitiveSearch;
|
||||
|
||||
public:
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
explicit EasyDescWidget(QWidget* _parent = nullptr);
|
||||
virtual ~EasyDescWidget();
|
||||
void keyPressEvent(QKeyEvent* _event) override;
|
||||
void contextMenuEvent(QContextMenuEvent* _event) override;
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
void build();
|
||||
void clear();
|
||||
|
||||
private slots:
|
||||
|
||||
void onSeachBoxReturnPressed();
|
||||
void findNext(bool);
|
||||
void findPrev(bool);
|
||||
void findNextFromMenu(bool);
|
||||
void findPrevFromMenu(bool);
|
||||
void onSearchColumnChange(bool);
|
||||
|
||||
private:
|
||||
|
||||
// Private non-virtual slots
|
||||
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
|
||||
}; // END of class EasyDescWidget.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_DESCRIPTORS_WIDGET_H
|
396
3rdparty/easyprofiler/profiler_gui/easy_chronometer_item.cpp
vendored
Normal file
@@ -0,0 +1,396 @@
|
||||
/************************************************************************
|
||||
* file name : easy_chronometer_item.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2016/09/15
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains implementation of EasyChronometerItem.
|
||||
* ----------------- :
|
||||
* change log : * 2016/09/15 Victor Zarubkin: moved sources from blocks_graphics_view.cpp
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include <QGraphicsScene>
|
||||
#include <QFontMetricsF>
|
||||
#include <math.h>
|
||||
#include "blocks_graphics_view.h"
|
||||
#include "easy_chronometer_item.h"
|
||||
#include "globals.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef max
|
||||
#undef max
|
||||
#endif
|
||||
|
||||
#ifdef min
|
||||
#undef min
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyChronometerItem::EasyChronometerItem(bool _main)
|
||||
: Parent()
|
||||
, m_color(::profiler_gui::CHRONOMETER_COLOR)
|
||||
, m_left(0)
|
||||
, m_right(0)
|
||||
, m_bMain(_main)
|
||||
, m_bReverse(false)
|
||||
, m_bHoverIndicator(false)
|
||||
, m_bHoverLeftBorder(false)
|
||||
, m_bHoverRightBorder(false)
|
||||
{
|
||||
m_indicator.reserve(3);
|
||||
}
|
||||
|
||||
EasyChronometerItem::~EasyChronometerItem()
|
||||
{
|
||||
}
|
||||
|
||||
QRectF EasyChronometerItem::boundingRect() const
|
||||
{
|
||||
return m_boundingRect;
|
||||
}
|
||||
|
||||
void EasyChronometerItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*, QWidget*)
|
||||
{
|
||||
auto const sceneView = view();
|
||||
const auto currentScale = sceneView->scale();
|
||||
const auto offset = sceneView->offset();
|
||||
const auto visibleSceneRect = sceneView->visibleSceneRect();
|
||||
auto sceneLeft = offset, sceneRight = offset + visibleSceneRect.width() / currentScale;
|
||||
|
||||
if (m_bMain)
|
||||
m_indicator.clear();
|
||||
|
||||
if (m_left > sceneRight || m_right < sceneLeft)
|
||||
{
|
||||
// This item is out of screen
|
||||
|
||||
if (m_bMain)
|
||||
{
|
||||
const int size = m_bHoverIndicator ? 12 : 10;
|
||||
auto vcenter = visibleSceneRect.top() + visibleSceneRect.height() * 0.5;
|
||||
auto color = QColor::fromRgb(m_color.rgb());
|
||||
auto pen = _painter->pen();
|
||||
pen.setColor(color);
|
||||
|
||||
m_indicator.clear();
|
||||
if (m_left > sceneRight)
|
||||
{
|
||||
sceneRight = (sceneRight - offset) * currentScale;
|
||||
m_indicator.push_back(QPointF(sceneRight - size, vcenter - size));
|
||||
m_indicator.push_back(QPointF(sceneRight, vcenter));
|
||||
m_indicator.push_back(QPointF(sceneRight - size, vcenter + size));
|
||||
}
|
||||
else
|
||||
{
|
||||
sceneLeft = (sceneLeft - offset) * currentScale;
|
||||
m_indicator.push_back(QPointF(sceneLeft + size, vcenter - size));
|
||||
m_indicator.push_back(QPointF(sceneLeft, vcenter));
|
||||
m_indicator.push_back(QPointF(sceneLeft + size, vcenter + size));
|
||||
}
|
||||
|
||||
_painter->save();
|
||||
_painter->setTransform(QTransform::fromTranslate(-x(), -y()), true);
|
||||
_painter->setBrush(m_bHoverIndicator ? QColor::fromRgb(0xffff0000) : color);
|
||||
_painter->setPen(pen);
|
||||
_painter->drawPolygon(m_indicator);
|
||||
_painter->restore();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
auto selectedInterval = width();
|
||||
QRectF rect((m_left - offset) * currentScale, visibleSceneRect.top(), ::std::max(selectedInterval * currentScale, 1.0), visibleSceneRect.height());
|
||||
selectedInterval = units2microseconds(selectedInterval);
|
||||
|
||||
const QString text = ::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, selectedInterval); // Displayed text
|
||||
const auto textRect = QFontMetricsF(EASY_GLOBALS.chronometer_font, sceneView).boundingRect(text); // Calculate displayed text boundingRect
|
||||
const auto rgb = m_color.rgb() & 0x00ffffff;
|
||||
|
||||
|
||||
|
||||
// Paint!--------------------------
|
||||
_painter->save();
|
||||
|
||||
// instead of scrollbar we're using manual offset
|
||||
_painter->setTransform(QTransform::fromTranslate(-x(), -y()), true);
|
||||
|
||||
if (m_left < sceneLeft)
|
||||
rect.setLeft(0);
|
||||
|
||||
if (m_right > sceneRight)
|
||||
rect.setWidth((sceneRight - offset) * currentScale - rect.left());
|
||||
|
||||
// draw transparent rectangle
|
||||
auto vcenter = rect.top() + rect.height() * 0.5;
|
||||
QLinearGradient g(rect.left(), vcenter, rect.right(), vcenter);
|
||||
g.setColorAt(0, m_color);
|
||||
g.setColorAt(0.2, QColor::fromRgba(0x14000000 | rgb));
|
||||
g.setColorAt(0.8, QColor::fromRgba(0x14000000 | rgb));
|
||||
g.setColorAt(1, m_color);
|
||||
_painter->setBrush(g);
|
||||
_painter->setPen(Qt::NoPen);
|
||||
_painter->drawRect(rect);
|
||||
|
||||
// draw left and right borders
|
||||
_painter->setBrush(Qt::NoBrush);
|
||||
if (m_bMain && !m_bReverse)
|
||||
{
|
||||
QPen p(QColor::fromRgba(0xd0000000 | rgb));
|
||||
p.setStyle(Qt::DotLine);
|
||||
_painter->setPen(p);
|
||||
}
|
||||
else
|
||||
{
|
||||
_painter->setPen(QColor::fromRgba(0xd0000000 | rgb));
|
||||
}
|
||||
|
||||
if (m_left > sceneLeft)
|
||||
{
|
||||
if (m_bHoverLeftBorder)
|
||||
{
|
||||
// Set bold if border is hovered
|
||||
QPen p = _painter->pen();
|
||||
p.setWidth(3);
|
||||
_painter->setPen(p);
|
||||
}
|
||||
|
||||
_painter->drawLine(QPointF(rect.left(), rect.top()), QPointF(rect.left(), rect.bottom()));
|
||||
}
|
||||
|
||||
if (m_right < sceneRight)
|
||||
{
|
||||
if (m_bHoverLeftBorder)
|
||||
{
|
||||
// Restore width
|
||||
QPen p = _painter->pen();
|
||||
p.setWidth(1);
|
||||
_painter->setPen(p);
|
||||
}
|
||||
else if (m_bHoverRightBorder)
|
||||
{
|
||||
// Set bold if border is hovered
|
||||
QPen p = _painter->pen();
|
||||
p.setWidth(3);
|
||||
_painter->setPen(p);
|
||||
}
|
||||
|
||||
_painter->drawLine(QPointF(rect.right(), rect.top()), QPointF(rect.right(), rect.bottom()));
|
||||
|
||||
// This is not necessary because another setPen() invoked for draw text
|
||||
//if (m_bHoverRightBorder)
|
||||
//{
|
||||
// // Restore width
|
||||
// QPen p = _painter->pen();
|
||||
// p.setWidth(1);
|
||||
// _painter->setPen(p);
|
||||
//}
|
||||
}
|
||||
|
||||
// draw text
|
||||
_painter->setCompositionMode(QPainter::CompositionMode_Difference); // This lets the text to be visible on every background
|
||||
_painter->setRenderHint(QPainter::TextAntialiasing);
|
||||
_painter->setPen(0x00ffffff - rgb);
|
||||
_painter->setFont(EASY_GLOBALS.chronometer_font);
|
||||
|
||||
int textFlags = 0;
|
||||
switch (EASY_GLOBALS.chrono_text_position)
|
||||
{
|
||||
case ::profiler_gui::ChronoTextPosition_Top:
|
||||
textFlags = Qt::AlignTop | Qt::AlignHCenter;
|
||||
if (!m_bMain) rect.setTop(rect.top() + textRect.height() * 0.75);
|
||||
break;
|
||||
|
||||
case ::profiler_gui::ChronoTextPosition_Center:
|
||||
textFlags = Qt::AlignCenter;
|
||||
if (!m_bMain) rect.setTop(rect.top() + textRect.height() * 1.5);
|
||||
break;
|
||||
|
||||
case ::profiler_gui::ChronoTextPosition_Bottom:
|
||||
textFlags = Qt::AlignBottom | Qt::AlignHCenter;
|
||||
if (!m_bMain) rect.setHeight(rect.height() - textRect.height() * 0.75);
|
||||
break;
|
||||
}
|
||||
|
||||
const auto textRect_width = textRect.width() * ::profiler_gui::FONT_METRICS_FACTOR;
|
||||
if (textRect_width < rect.width())
|
||||
{
|
||||
// Text will be drawed inside rectangle
|
||||
_painter->drawText(rect, textFlags, text);
|
||||
_painter->restore();
|
||||
return;
|
||||
}
|
||||
|
||||
const auto w = textRect_width / currentScale;
|
||||
if (m_right + w < sceneRight)
|
||||
{
|
||||
// Text will be drawed to the right of rectangle
|
||||
rect.translate(rect.width(), 0);
|
||||
textFlags &= ~Qt::AlignHCenter;
|
||||
textFlags |= Qt::AlignLeft;
|
||||
}
|
||||
else if (m_left - w > sceneLeft)
|
||||
{
|
||||
// Text will be drawed to the left of rectangle
|
||||
rect.translate(-rect.width(), 0);
|
||||
textFlags &= ~Qt::AlignHCenter;
|
||||
textFlags |= Qt::AlignRight;
|
||||
}
|
||||
//else // Text will be drawed inside rectangle
|
||||
|
||||
_painter->drawText(rect, textFlags | Qt::TextDontClip, text);
|
||||
|
||||
_painter->restore();
|
||||
// END Paint!~~~~~~~~~~~~~~~~~~~~~~
|
||||
}
|
||||
|
||||
void EasyChronometerItem::hide()
|
||||
{
|
||||
m_bHoverIndicator = false;
|
||||
m_bHoverLeftBorder = false;
|
||||
m_bHoverRightBorder = false;
|
||||
m_bReverse = false;
|
||||
Parent::hide();
|
||||
}
|
||||
|
||||
bool EasyChronometerItem::indicatorContains(const QPointF& _pos) const
|
||||
{
|
||||
if (m_indicator.empty())
|
||||
return false;
|
||||
|
||||
const auto itemX = toItem(_pos.x());
|
||||
return m_indicator.containsPoint(QPointF(itemX, _pos.y()), Qt::OddEvenFill);
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setHoverLeft(bool _hover)
|
||||
{
|
||||
m_bHoverLeftBorder = _hover;
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setHoverRight(bool _hover)
|
||||
{
|
||||
m_bHoverRightBorder = _hover;
|
||||
}
|
||||
|
||||
bool EasyChronometerItem::hoverLeft(qreal _x) const
|
||||
{
|
||||
const auto dx = fabs(_x - m_left) * view()->scale();
|
||||
return dx < 4;
|
||||
}
|
||||
|
||||
bool EasyChronometerItem::hoverRight(qreal _x) const
|
||||
{
|
||||
const auto dx = fabs(_x - m_right) * view()->scale();
|
||||
return dx < 4;
|
||||
}
|
||||
|
||||
QPointF EasyChronometerItem::toItem(const QPointF& _pos) const
|
||||
{
|
||||
const auto sceneView = view();
|
||||
return QPointF((_pos.x() - sceneView->offset()) * sceneView->scale() - x(), _pos.y());
|
||||
}
|
||||
|
||||
qreal EasyChronometerItem::toItem(qreal _x) const
|
||||
{
|
||||
const auto sceneView = view();
|
||||
return (_x - sceneView->offset()) * sceneView->scale() - x();
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setColor(const QColor& _color)
|
||||
{
|
||||
m_color = _color;
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setBoundingRect(qreal x, qreal y, qreal w, qreal h)
|
||||
{
|
||||
m_boundingRect.setRect(x, y, w, h);
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setBoundingRect(const QRectF& _rect)
|
||||
{
|
||||
m_boundingRect = _rect;
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setLeftRight(qreal _left, qreal _right)
|
||||
{
|
||||
if (_left < _right)
|
||||
{
|
||||
m_left = _left;
|
||||
m_right = _right;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_left = _right;
|
||||
m_right = _left;
|
||||
}
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setReverse(bool _reverse)
|
||||
{
|
||||
m_bReverse = _reverse;
|
||||
}
|
||||
|
||||
void EasyChronometerItem::setHoverIndicator(bool _hover)
|
||||
{
|
||||
m_bHoverIndicator = _hover;
|
||||
}
|
||||
|
||||
const EasyGraphicsView* EasyChronometerItem::view() const
|
||||
{
|
||||
return static_cast<const EasyGraphicsView*>(scene()->parent());
|
||||
}
|
||||
|
||||
EasyGraphicsView* EasyChronometerItem::view()
|
||||
{
|
||||
return static_cast<EasyGraphicsView*>(scene()->parent());
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
171
3rdparty/easyprofiler/profiler_gui/easy_chronometer_item.h
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
/************************************************************************
|
||||
* file name : easy_chronometer_item.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/09/15
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyChronometerItem - an item
|
||||
* : used to display selected interval on graphics scene.
|
||||
* ----------------- :
|
||||
* change log : * 2016/09/15 Victor Zarubkin: moved sources from blocks_graphics_view.h
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_CHRONOMETER_ITEM_H
|
||||
#define EASY_CHRONOMETER_ITEM_H
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include <QRectF>
|
||||
#include <QPolygonF>
|
||||
#include <QColor>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class QWidget;
|
||||
class QPainter;
|
||||
class QStyleOptionGraphicsItem;
|
||||
class EasyGraphicsView;
|
||||
|
||||
class EasyChronometerItem : public QGraphicsItem
|
||||
{
|
||||
typedef QGraphicsItem Parent;
|
||||
typedef EasyChronometerItem This;
|
||||
|
||||
QPolygonF m_indicator; ///< Indicator displayed when this chrono item is out of screen (displaying only for main item)
|
||||
QRectF m_boundingRect; ///< boundingRect (see QGraphicsItem)
|
||||
QColor m_color; ///< Color of the item
|
||||
qreal m_left, m_right; ///< Left and right bounds of the selection zone
|
||||
bool m_bMain; ///< Is this chronometer main (true, by default)
|
||||
bool m_bReverse; ///<
|
||||
bool m_bHoverIndicator; ///< Mouse hover above indicator
|
||||
bool m_bHoverLeftBorder;
|
||||
bool m_bHoverRightBorder;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyChronometerItem(bool _main = true);
|
||||
virtual ~EasyChronometerItem();
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
QRectF boundingRect() const override;
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
void hide();
|
||||
|
||||
void setColor(const QColor& _color);
|
||||
|
||||
void setBoundingRect(qreal x, qreal y, qreal w, qreal h);
|
||||
void setBoundingRect(const QRectF& _rect);
|
||||
|
||||
void setLeftRight(qreal _left, qreal _right);
|
||||
|
||||
void setReverse(bool _reverse);
|
||||
|
||||
void setHoverIndicator(bool _hover);
|
||||
|
||||
bool indicatorContains(const QPointF& _pos) const;
|
||||
|
||||
void setHoverLeft(bool _hover);
|
||||
void setHoverRight(bool _hover);
|
||||
|
||||
bool hoverLeft(qreal _x) const;
|
||||
bool hoverRight(qreal _x) const;
|
||||
|
||||
QPointF toItem(const QPointF& _pos) const;
|
||||
qreal toItem(qreal _x) const;
|
||||
|
||||
inline bool hoverIndicator() const
|
||||
{
|
||||
return m_bHoverIndicator;
|
||||
}
|
||||
|
||||
inline bool hoverLeft() const
|
||||
{
|
||||
return m_bHoverLeftBorder;
|
||||
}
|
||||
|
||||
inline bool hoverRight() const
|
||||
{
|
||||
return m_bHoverRightBorder;
|
||||
}
|
||||
|
||||
inline bool reverse() const
|
||||
{
|
||||
return m_bReverse;
|
||||
}
|
||||
|
||||
inline qreal left() const
|
||||
{
|
||||
return m_left;
|
||||
}
|
||||
|
||||
inline qreal right() const
|
||||
{
|
||||
return m_right;
|
||||
}
|
||||
|
||||
inline qreal width() const
|
||||
{
|
||||
return m_right - m_left;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
///< Returns pointer to the EasyGraphicsView widget.
|
||||
const EasyGraphicsView* view() const;
|
||||
EasyGraphicsView* view();
|
||||
|
||||
}; // END of class EasyChronometerItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_CHRONOMETER_ITEM_H
|
339
3rdparty/easyprofiler/profiler_gui/easy_frame_rate_viewer.cpp
vendored
Normal file
@@ -0,0 +1,339 @@
|
||||
/************************************************************************
|
||||
* file name : easy_frame_rate_viewer.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2017/04/02
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : This file contains implementation of EasyFrameRateViewer widget.
|
||||
* ----------------- :
|
||||
* change log : * 2017/04/02 Victor Zarubkin: Initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include <QGraphicsScene>
|
||||
#include <QResizeEvent>
|
||||
#include <QContextMenuEvent>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include "easy_frame_rate_viewer.h"
|
||||
#include "globals.h"
|
||||
|
||||
const int INTERVAL_WIDTH = 20;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyFPSGraphicsItem::EasyFPSGraphicsItem() : Parent(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
EasyFPSGraphicsItem::~EasyFPSGraphicsItem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QRectF EasyFPSGraphicsItem::boundingRect() const
|
||||
{
|
||||
return m_boundingRect;
|
||||
}
|
||||
|
||||
void EasyFPSGraphicsItem::setBoundingRect(const QRectF& _boundingRect)
|
||||
{
|
||||
m_boundingRect = _boundingRect;
|
||||
}
|
||||
|
||||
void EasyFPSGraphicsItem::setBoundingRect(qreal x, qreal y, qreal w, qreal h)
|
||||
{
|
||||
m_boundingRect.setRect(x, y, w, h);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyFPSGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*, QWidget*)
|
||||
{
|
||||
if (m_frames.empty())
|
||||
return;
|
||||
|
||||
const auto fontMetrics = QFontMetrics(scene()->font());
|
||||
const int fontHeight = fontMetrics.height() + 2;
|
||||
const qreal h = m_boundingRect.height() - (fontHeight << 1) - 4;
|
||||
if (h < 0)
|
||||
return;
|
||||
|
||||
const qreal halfWidth = m_boundingRect.width() * 0.5 - INTERVAL_WIDTH;
|
||||
const int halfMax = static_cast<int>(0.5 + halfWidth / INTERVAL_WIDTH);
|
||||
const int half = static_cast<int>(m_frames.size() / 2);
|
||||
const qreal top = fontHeight, bottom = h + 4 + fontHeight;
|
||||
qreal y;
|
||||
|
||||
_painter->save();
|
||||
|
||||
_painter->drawLine(QPointF(0, top), QPointF(m_boundingRect.width(), top));
|
||||
_painter->drawLine(QPointF(0, bottom), QPointF(m_boundingRect.width(), bottom));
|
||||
|
||||
_painter->setPen(Qt::lightGray);
|
||||
y = m_boundingRect.height() * 0.5;
|
||||
_painter->drawLine(QPointF(0, y), QPointF(m_boundingRect.width(), y));
|
||||
y -= h * 0.25;
|
||||
_painter->drawLine(QPointF(0, y), QPointF(m_boundingRect.width(), y));
|
||||
y += h * 0.5;
|
||||
_painter->drawLine(QPointF(0, y), QPointF(m_boundingRect.width(), y));
|
||||
|
||||
m_points1.reserve(m_frames.size());
|
||||
m_points2.reserve(m_frames.size());
|
||||
int n = 0;
|
||||
qreal x = m_boundingRect.width() * 0.5 + std::min(halfMax, half) * INTERVAL_WIDTH, localMax = 0, localMin = 1e30;
|
||||
const qreal xCurrent = x;
|
||||
for (int i = static_cast<int>(m_frames.size()) - 1; i > -1 && x >= 0; --i, x -= INTERVAL_WIDTH, ++n)
|
||||
{
|
||||
const auto& val = m_frames[i];
|
||||
|
||||
if (val.first > localMax)
|
||||
localMax = val.first;
|
||||
if (val.first < localMin)
|
||||
localMin = val.first;
|
||||
m_points1.emplace_back(x, static_cast<qreal>(val.first) + 1e-3);
|
||||
|
||||
if (val.second > localMax)
|
||||
localMax = val.second;
|
||||
if (val.second < localMin)
|
||||
localMin = val.second;
|
||||
m_points2.emplace_back(x, static_cast<qreal>(val.second) + 1e-3);
|
||||
|
||||
_painter->drawLine(QPointF(x, top + 1), QPointF(x, bottom - 1));
|
||||
}
|
||||
|
||||
const auto delta = std::max(localMax - localMin, 1e-3);
|
||||
_painter->setPen(Qt::black);
|
||||
|
||||
qreal frameTime = std::max(localMax, 1.);
|
||||
_painter->drawText(5, 0, m_boundingRect.width() - 10, fontHeight, Qt::AlignVCenter | Qt::AlignLeft, QString("Slowest %1 FPS (%2)")
|
||||
.arg(static_cast<quint64>(1e6 / frameTime)).arg(::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, localMax, 1)));
|
||||
|
||||
frameTime = std::max(m_frames.back().first, 1U);
|
||||
_painter->drawText(5, 0, xCurrent - 5, fontHeight, Qt::AlignVCenter | Qt::AlignRight, QString("Max current %1 FPS (%2)")
|
||||
.arg(static_cast<quint64>(1e6 / frameTime)).arg(::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, m_frames.back().first, 1)));
|
||||
|
||||
frameTime = std::max(m_frames.back().second, 1U);
|
||||
_painter->drawText(5, bottom, xCurrent - 5, fontHeight, Qt::AlignVCenter | Qt::AlignRight, QString("Avg current %1 FPS (%2)")
|
||||
.arg(static_cast<quint64>(1e6 / frameTime)).arg(::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, m_frames.back().second, 1)));
|
||||
|
||||
frameTime = std::max(localMin, 1.);
|
||||
_painter->drawText(5, bottom, m_boundingRect.width() - 10, fontHeight, Qt::AlignVCenter | Qt::AlignLeft, QString("Fastest %1 FPS (%2)")
|
||||
.arg(static_cast<quint64>(1e6 / frameTime)).arg(::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, localMin, 1)));
|
||||
|
||||
if (localMin < EASY_GLOBALS.frame_time && EASY_GLOBALS.frame_time < localMax)
|
||||
{
|
||||
y = fontHeight + 2 + h * (1. - (EASY_GLOBALS.frame_time - localMin) / delta);
|
||||
_painter->setPen(Qt::DashLine);
|
||||
_painter->drawLine(QPointF(0, y), QPointF(m_boundingRect.width(), y));
|
||||
}
|
||||
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
auto& point1 = m_points1[i];
|
||||
point1.setY(fontHeight + 2 + h * (1. - (point1.y() - localMin) / delta));
|
||||
|
||||
auto& point2 = m_points2[i];
|
||||
point2.setY(fontHeight + 2 + h * (1. - (point2.y() - localMin) / delta));
|
||||
}
|
||||
|
||||
_painter->setRenderHint(QPainter::Antialiasing, true);
|
||||
|
||||
QPen pen(QColor::fromRgba(0x80ff0000));
|
||||
pen.setWidth(EASY_GLOBALS.fps_widget_line_width);
|
||||
_painter->setPen(pen);
|
||||
if (n > 1)
|
||||
{
|
||||
_painter->drawPolyline(m_points1.data(), n);
|
||||
|
||||
pen.setColor(QColor::fromRgba(0x800000ff));
|
||||
_painter->setPen(pen);
|
||||
_painter->drawPolyline(m_points2.data(), n);
|
||||
}
|
||||
else
|
||||
{
|
||||
_painter->drawPoint(m_points1.back());
|
||||
|
||||
pen.setColor(QColor::fromRgba(0x800000ff));
|
||||
_painter->setPen(pen);
|
||||
_painter->drawPoint(m_points2.back());
|
||||
}
|
||||
|
||||
const auto txtTop = ::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, localMin + delta * 0.75, 1);
|
||||
const auto txtMid = ::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, localMin + delta * 0.5, 1);
|
||||
const auto txtBtm = ::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, localMin + delta * 0.25, 1);
|
||||
|
||||
_painter->setPen(Qt::NoPen);
|
||||
_painter->setBrush(Qt::white);
|
||||
_painter->drawRect(0, top + 1, std::max({fontMetrics.width(txtTop), fontMetrics.width(txtMid), fontMetrics.width(txtBtm)}) + 8, bottom - top - 1);
|
||||
|
||||
_painter->setPen(Qt::black);
|
||||
_painter->setBrush(Qt::NoBrush);
|
||||
|
||||
y = m_boundingRect.height() * 0.5;
|
||||
_painter->drawText(5, y - (fontHeight >> 1), m_boundingRect.width(), fontHeight, Qt::AlignVCenter | Qt::AlignLeft, txtMid);
|
||||
|
||||
y -= h * 0.25;
|
||||
_painter->drawText(5, y - (fontHeight >> 1), m_boundingRect.width(), fontHeight, Qt::AlignVCenter | Qt::AlignLeft, txtTop);
|
||||
|
||||
y += h * 0.5;
|
||||
_painter->drawText(5, y - (fontHeight >> 1), m_boundingRect.width(), fontHeight, Qt::AlignVCenter | Qt::AlignLeft, txtBtm);
|
||||
|
||||
_painter->restore();
|
||||
|
||||
m_points1.clear();
|
||||
m_points2.clear();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void EasyFPSGraphicsItem::clear()
|
||||
{
|
||||
m_frames.clear();
|
||||
}
|
||||
|
||||
void EasyFPSGraphicsItem::addPoint(uint32_t _maxFrameTime, uint32_t _avgFrameTime)
|
||||
{
|
||||
m_frames.emplace_back(_maxFrameTime, _avgFrameTime);
|
||||
if (static_cast<int>(m_frames.size()) > EASY_GLOBALS.max_fps_history)
|
||||
m_frames.pop_front();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyFrameRateViewer::EasyFrameRateViewer(QWidget* _parent) : Parent(_parent), m_fpsItem(nullptr)
|
||||
{
|
||||
setCacheMode(QGraphicsView::CacheNone);
|
||||
//setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
|
||||
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
setOptimizationFlag(QGraphicsView::DontSavePainterState, true);
|
||||
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
||||
setContentsMargins(0, 0, 0, 0);
|
||||
setScene(new QGraphicsScene(this));
|
||||
scene()->setSceneRect(0, 0, 50, 50);
|
||||
|
||||
m_fpsItem = new EasyFPSGraphicsItem();
|
||||
m_fpsItem->setPos(0, 0);
|
||||
m_fpsItem->setBoundingRect(0, 0, 50, 50);
|
||||
scene()->addItem(m_fpsItem);
|
||||
|
||||
centerOn(0, 0);
|
||||
|
||||
// Dirty hack for QDockWidget stupid initial size policy :(
|
||||
setFixedHeight(10); // Set very small height to enable appropriate minimum height on the application startup
|
||||
QTimer::singleShot(100, [this]
|
||||
{
|
||||
// Now set appropriate minimum height
|
||||
setMinimumHeight((QFontMetrics(scene()->font()).height() + 3) * 6);
|
||||
setMaximumHeight(minimumHeight() * 20);
|
||||
});
|
||||
}
|
||||
|
||||
EasyFrameRateViewer::~EasyFrameRateViewer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void EasyFrameRateViewer::clear()
|
||||
{
|
||||
m_fpsItem->clear();
|
||||
scene()->update();
|
||||
}
|
||||
|
||||
void EasyFrameRateViewer::addPoint(uint32_t _maxFrameTime, uint32_t _avgFrameTime)
|
||||
{
|
||||
m_fpsItem->addPoint(_maxFrameTime, _avgFrameTime);
|
||||
scene()->update();
|
||||
}
|
||||
|
||||
void EasyFrameRateViewer::resizeEvent(QResizeEvent* _event)
|
||||
{
|
||||
Parent::resizeEvent(_event);
|
||||
|
||||
auto size = _event->size();
|
||||
m_fpsItem->setBoundingRect(0, 0, size.width(), size.height());
|
||||
|
||||
scene()->setSceneRect(m_fpsItem->boundingRect());
|
||||
scene()->update();
|
||||
}
|
||||
|
||||
void EasyFrameRateViewer::hideEvent(QHideEvent* _event)
|
||||
{
|
||||
Parent::hideEvent(_event);
|
||||
EASY_GLOBALS.fps_enabled = isVisible();
|
||||
clear();
|
||||
}
|
||||
|
||||
void EasyFrameRateViewer::showEvent(QShowEvent* _event)
|
||||
{
|
||||
Parent::showEvent(_event);
|
||||
EASY_GLOBALS.fps_enabled = isVisible();
|
||||
clear();
|
||||
}
|
||||
|
||||
void EasyFrameRateViewer::contextMenuEvent(QContextMenuEvent* _event)
|
||||
{
|
||||
QMenu menu;
|
||||
QAction* action = nullptr;
|
||||
|
||||
action = menu.addAction(QIcon(imagePath("delete")), "Clear");
|
||||
connect(action, &QAction::triggered, [this](bool){ clear(); });
|
||||
|
||||
action = menu.addAction("Close");
|
||||
connect(action, &QAction::triggered, [this](bool){ parentWidget()->hide(); });
|
||||
|
||||
menu.exec(QCursor::pos());
|
||||
|
||||
_event->accept();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
126
3rdparty/easyprofiler/profiler_gui/easy_frame_rate_viewer.h
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
/************************************************************************
|
||||
* file name : easy_frame_rate_viewer.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2017/04/02
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : This file contains declaration of EasyFrameRateViewer widget.
|
||||
* ----------------- :
|
||||
* change log : * 2017/04/02 Victor Zarubkin: Initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY__FRAME_RATE_VIEWER__H
|
||||
#define EASY__FRAME_RATE_VIEWER__H
|
||||
|
||||
#include <QGraphicsView>
|
||||
#include <QGraphicsItem>
|
||||
#include <QTimer>
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
#include <utility>
|
||||
#include <stdint.h>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyFPSGraphicsItem : public QGraphicsItem
|
||||
{
|
||||
typedef QGraphicsItem Parent;
|
||||
typedef EasyFPSGraphicsItem This;
|
||||
typedef std::deque<std::pair<uint32_t, uint32_t> > FrameTimes;
|
||||
|
||||
std::vector<QPointF> m_points1, m_points2;
|
||||
FrameTimes m_frames;
|
||||
QRectF m_boundingRect;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyFPSGraphicsItem();
|
||||
virtual ~EasyFPSGraphicsItem();
|
||||
|
||||
QRectF boundingRect() const override;
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||
|
||||
void setBoundingRect(const QRectF& _boundingRect);
|
||||
void setBoundingRect(qreal x, qreal y, qreal w, qreal h);
|
||||
|
||||
void clear();
|
||||
void addPoint(uint32_t _maxFrameTime, uint32_t _avgFrameTime);
|
||||
|
||||
}; // END of class EasyFPSGraphicsItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyFrameRateViewer : public QGraphicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
typedef QGraphicsView Parent;
|
||||
typedef EasyFrameRateViewer This;
|
||||
|
||||
EasyFPSGraphicsItem* m_fpsItem;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyFrameRateViewer(QWidget* _parent = nullptr);
|
||||
virtual ~EasyFrameRateViewer();
|
||||
|
||||
void resizeEvent(QResizeEvent* _event) override;
|
||||
void hideEvent(QHideEvent* _event) override;
|
||||
void showEvent(QShowEvent* _event) override;
|
||||
void contextMenuEvent(QContextMenuEvent* _event) override;
|
||||
|
||||
public slots:
|
||||
|
||||
void clear();
|
||||
void addPoint(uint32_t _maxFrameTime, uint32_t _avgFrameTime);
|
||||
|
||||
}; // END of class EasyFrameRateViewer.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY__FRAME_RATE_VIEWER__H
|
1460
3rdparty/easyprofiler/profiler_gui/easy_graphics_item.cpp
vendored
Normal file
195
3rdparty/easyprofiler/profiler_gui/easy_graphics_item.h
vendored
Normal file
@@ -0,0 +1,195 @@
|
||||
/************************************************************************
|
||||
* file name : easy_graphics_item.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/09/15
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyGraphicsItem - an item
|
||||
* : used to draw profiler blocks on graphics scene.
|
||||
* ----------------- :
|
||||
* change log : * 2016/09/15 Victor Zarubkin: moved sources from blocks_graphics_view.h/.cpp
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_GRAPHICS_ITEM_H
|
||||
#define EASY_GRAPHICS_ITEM_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include <QRectF>
|
||||
#include <QString>
|
||||
|
||||
#include <easy/reader.h>
|
||||
|
||||
#include "common_types.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyGraphicsView;
|
||||
|
||||
class EasyGraphicsItem : public QGraphicsItem
|
||||
{
|
||||
typedef ::profiler_gui::EasyItems Children;
|
||||
typedef ::std::vector<uint32_t> DrawIndexes;
|
||||
typedef ::std::vector<qreal> RightBounds;
|
||||
typedef ::std::vector<Children> Sublevels;
|
||||
|
||||
DrawIndexes m_levelsIndexes; ///< Indexes of first item on each level from which we must start painting
|
||||
RightBounds m_rightBounds; ///<
|
||||
Sublevels m_levels; ///< Arrays of items for each level
|
||||
|
||||
QRectF m_boundingRect; ///< boundingRect (see QGraphicsItem)
|
||||
QString m_threadName; ///<
|
||||
const ::profiler::BlocksTreeRoot* m_pRoot; ///< Pointer to the root profiler block (thread block). Used by ProfTreeWidget to restore hierarchy.
|
||||
uint8_t m_index; ///< This item's index in the list of items of EasyGraphicsView
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyGraphicsItem(uint8_t _index, const::profiler::BlocksTreeRoot& _root);
|
||||
virtual ~EasyGraphicsItem();
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
QRectF boundingRect() const override;
|
||||
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
void validateName();
|
||||
|
||||
const ::profiler::BlocksTreeRoot* root() const;
|
||||
const QString& threadName() const;
|
||||
|
||||
QRect getRect() const;
|
||||
|
||||
void setBoundingRect(qreal x, qreal y, qreal w, qreal h);
|
||||
void setBoundingRect(const QRectF& _rect);
|
||||
|
||||
::profiler::thread_id_t threadId() const;
|
||||
|
||||
///< Returns number of levels
|
||||
uint8_t levels() const;
|
||||
|
||||
float levelY(uint8_t _level) const;
|
||||
|
||||
/** \brief Sets number of levels.
|
||||
|
||||
\note Must be set before doing anything else.
|
||||
|
||||
\param _levels Desired number of levels */
|
||||
void setLevels(uint8_t _levels);
|
||||
|
||||
/** \brief Reserves memory for desired number of items on specified level.
|
||||
|
||||
\param _level Index of the level
|
||||
\param _items Desired number of items on this level */
|
||||
void reserve(uint8_t _level, unsigned int _items);
|
||||
|
||||
/**\brief Returns reference to the array of items of specified level.
|
||||
|
||||
\param _level Index of the level */
|
||||
const Children& items(uint8_t _level) const;
|
||||
|
||||
/**\brief Returns reference to the item with required index on specified level.
|
||||
|
||||
\param _level Index of the level
|
||||
\param _index Index of required item */
|
||||
const ::profiler_gui::EasyBlockItem& getItem(uint8_t _level, unsigned int _index) const;
|
||||
|
||||
/**\brief Returns reference to the item with required index on specified level.
|
||||
|
||||
\param _level Index of the level
|
||||
\param _index Index of required item */
|
||||
::profiler_gui::EasyBlockItem& getItem(uint8_t _level, unsigned int _index);
|
||||
|
||||
/** \brief Adds new item to required level.
|
||||
|
||||
\param _level Index of the level
|
||||
|
||||
\retval Index of the new created item */
|
||||
unsigned int addItem(uint8_t _level);
|
||||
|
||||
/** \brief Finds top-level blocks which are intersects with required selection zone.
|
||||
|
||||
\note Found blocks will be added into the array of selected blocks.
|
||||
|
||||
\param _left Left bound of the selection zone
|
||||
\param _right Right bound of the selection zone
|
||||
\param _blocks Reference to the array of selected blocks */
|
||||
void getBlocks(qreal _left, qreal _right, ::profiler_gui::TreeBlocks& _blocks) const;
|
||||
|
||||
const ::profiler_gui::EasyBlock* intersect(const QPointF& _pos, ::profiler::block_index_t& _blockIndex) const;
|
||||
const ::profiler_gui::EasyBlock* intersectEvent(const QPointF& _pos) const;
|
||||
|
||||
private:
|
||||
|
||||
///< Returns pointer to the EasyGraphicsView widget.
|
||||
const EasyGraphicsView* view() const;
|
||||
|
||||
#ifdef EASY_GRAPHICS_ITEM_RECURSIVE_PAINT
|
||||
void paintChildren(const float _minWidth, const int _narrowSizeHalf, const uint8_t _levelsNumber, QPainter* _painter, struct EasyPainterInformation& p, ::profiler_gui::EasyBlockItem& _item, const ::profiler_gui::EasyBlock& _itemBlock, RightBounds& _rightBounds, uint8_t _level, int8_t _mode);
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
// Public inline methods
|
||||
|
||||
///< Returns this item's index in the list of graphics items of EasyGraphicsView
|
||||
inline uint8_t index() const
|
||||
{
|
||||
return m_index;
|
||||
}
|
||||
|
||||
}; // END of class EasyGraphicsItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_GRAPHICS_ITEM_H
|
2078
3rdparty/easyprofiler/profiler_gui/easy_graphics_scrollbar.cpp
vendored
Normal file
342
3rdparty/easyprofiler/profiler_gui/easy_graphics_scrollbar.h
vendored
Normal file
@@ -0,0 +1,342 @@
|
||||
/************************************************************************
|
||||
* file name : easy_graphics_scrollbar.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/07/04
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : This file contains declaration of
|
||||
* ----------------- :
|
||||
* change log : * 2016/07/04 Victor Zarubkin: Initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY__GRAPHICS_SCROLLBAR__H
|
||||
#define EASY__GRAPHICS_SCROLLBAR__H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <thread>
|
||||
#include <atomic>
|
||||
#include <QGraphicsView>
|
||||
#include <QGraphicsRectItem>
|
||||
#include <QAction>
|
||||
#include <QPolygonF>
|
||||
#include <QImage>
|
||||
#include "easy_qtimer.h"
|
||||
#include "common_types.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TODO: use profiler_core/spin_lock.h
|
||||
|
||||
#define EASY_GUI_USE_CRITICAL_SECTION // Use CRITICAL_SECTION instead of std::atomic_flag
|
||||
#if defined(_WIN32) && defined(EASY_GUI_USE_CRITICAL_SECTION)
|
||||
namespace profiler_gui {
|
||||
// std::atomic_flag on Windows works slower than critical section, so we will use it instead of std::atomic_flag...
|
||||
// By the way, Windows critical sections are slower than std::atomic_flag on Unix.
|
||||
class spin_lock { void* m_lock; public:
|
||||
void lock();
|
||||
void unlock();
|
||||
spin_lock();
|
||||
~spin_lock();
|
||||
};
|
||||
#else
|
||||
namespace profiler_gui {
|
||||
// std::atomic_flag on Unix works fine and very fast (almost instant!)
|
||||
class spin_lock {
|
||||
::std::atomic_flag m_lock; public:
|
||||
|
||||
void lock() {
|
||||
while (m_lock.test_and_set(::std::memory_order_acquire));
|
||||
}
|
||||
|
||||
void unlock() {
|
||||
m_lock.clear(::std::memory_order_release);
|
||||
}
|
||||
|
||||
spin_lock() {
|
||||
m_lock.clear();
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyGraphicsSliderItem : public QGraphicsRectItem
|
||||
{
|
||||
typedef QGraphicsRectItem Parent;
|
||||
typedef EasyGraphicsSliderItem This;
|
||||
|
||||
private:
|
||||
|
||||
QPolygonF m_indicator;
|
||||
qreal m_halfwidth;
|
||||
bool m_bMain;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyGraphicsSliderItem(bool _main);
|
||||
virtual ~EasyGraphicsSliderItem();
|
||||
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||
|
||||
qreal width() const;
|
||||
qreal halfwidth() const;
|
||||
|
||||
void setWidth(qreal _width);
|
||||
void setHalfwidth(qreal _halfwidth);
|
||||
|
||||
void setColor(QRgb _color);
|
||||
void setColor(const QColor& _color);
|
||||
|
||||
}; // END of class EasyGraphicsSliderItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyHistogramItem : public QGraphicsItem
|
||||
{
|
||||
typedef QGraphicsItem Parent;
|
||||
typedef EasyHistogramItem This;
|
||||
|
||||
public:
|
||||
|
||||
enum HistRegime : uint8_t { Hist_Pointer, Hist_Id };
|
||||
|
||||
private:
|
||||
|
||||
QRectF m_boundingRect;
|
||||
qreal m_topDuration;
|
||||
qreal m_bottomDuration;
|
||||
qreal m_maxDuration;
|
||||
qreal m_minDuration;
|
||||
qreal m_mouseY;
|
||||
qreal m_imageOrigin;
|
||||
qreal m_imageScale;
|
||||
qreal m_imageOriginUpdate;
|
||||
qreal m_imageScaleUpdate;
|
||||
qreal m_workerImageOrigin;
|
||||
qreal m_workerImageScale;
|
||||
qreal m_workerTopDuration;
|
||||
qreal m_workerBottomDuration;
|
||||
::profiler::timestamp_t m_blockTotalDuraion;
|
||||
QString m_topDurationStr;
|
||||
QString m_bottomDurationStr;
|
||||
QString m_threadName;
|
||||
QString m_blockName;
|
||||
::profiler::BlocksTree::children_t m_selectedBlocks;
|
||||
QImage m_mainImage;
|
||||
EasyQTimer m_timer;
|
||||
EasyQTimer m_boundaryTimer;
|
||||
::std::thread m_workerThread;
|
||||
::profiler::timestamp_t m_threadDuration;
|
||||
::profiler::timestamp_t m_threadProfiledTime;
|
||||
::profiler::timestamp_t m_threadWaitTime;
|
||||
const ::profiler_gui::EasyItems* m_pSource;
|
||||
QImage* m_workerImage;
|
||||
const ::profiler::BlocksTreeRoot* m_pProfilerThread;
|
||||
::profiler::thread_id_t m_threadId;
|
||||
::profiler::block_index_t m_blockId;
|
||||
int m_timeouts;
|
||||
::profiler_gui::TimeUnits m_timeUnits;
|
||||
HistRegime m_regime;
|
||||
bool m_bPermitImageUpdate; ///< Is false when m_workerThread is parsing input dataset (when setSource(_block_id) is called)
|
||||
::profiler_gui::spin_lock m_spin;
|
||||
::std::atomic_bool m_bReady;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyHistogramItem();
|
||||
virtual ~EasyHistogramItem();
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
QRectF boundingRect() const override;
|
||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
::profiler::thread_id_t threadId() const;
|
||||
|
||||
void setBoundingRect(const QRectF& _rect);
|
||||
void setBoundingRect(qreal x, qreal y, qreal w, qreal h);
|
||||
|
||||
void setSource(::profiler::thread_id_t _thread_id, const ::profiler_gui::EasyItems* _items);
|
||||
void setSource(::profiler::thread_id_t _thread_id, ::profiler::block_id_t _block_id);
|
||||
void rebuildSource(HistRegime _regime);
|
||||
void rebuildSource();
|
||||
void validateName();
|
||||
void updateImage();
|
||||
void cancelImageUpdate();
|
||||
|
||||
void pickTopBoundary(qreal _y);
|
||||
void increaseTopBoundary();
|
||||
void decreaseTopBoundary();
|
||||
|
||||
void pickBottomBoundary(qreal _y);
|
||||
void increaseBottomBoundary();
|
||||
void decreaseBottomBoundary();
|
||||
|
||||
void setMouseY(qreal _mouseY);
|
||||
void pickFrameTime(qreal _y) const;
|
||||
|
||||
void onValueChanged();
|
||||
void onModeChanged();
|
||||
|
||||
private:
|
||||
|
||||
void paintBusyIndicator(QPainter* _painter, qreal _current_scale);
|
||||
void paintMouseIndicator(QPainter* _painter, qreal _top, qreal _bottom, qreal _width, qreal _height, qreal _top_width, qreal _mouse_y, qreal _delta_time, int _font_h);
|
||||
void paintByPtr(QPainter* _painter);
|
||||
void paintById(QPainter* _painter);
|
||||
void onTimeout();
|
||||
void updateImage(QRectF _boundingRect, HistRegime _regime, qreal _current_scale,
|
||||
qreal _minimum, qreal _maximum, qreal _range,
|
||||
qreal _value, qreal _width, qreal _top_duration, qreal _bottom_duration, bool _bindMode,
|
||||
float _frame_time, ::profiler::timestamp_t _begin_time, qreal _origin, bool _autoAdjustHist);
|
||||
|
||||
}; // END of class EasyHistogramItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyGraphicsScrollbar : public QGraphicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
typedef QGraphicsView Parent;
|
||||
typedef EasyGraphicsScrollbar This;
|
||||
|
||||
qreal m_minimumValue;
|
||||
qreal m_maximumValue;
|
||||
qreal m_value;
|
||||
qreal m_windowScale;
|
||||
QPoint m_mousePressPos;
|
||||
Qt::MouseButtons m_mouseButtons;
|
||||
EasyGraphicsSliderItem* m_slider;
|
||||
EasyGraphicsSliderItem* m_chronometerIndicator;
|
||||
EasyHistogramItem* m_histogramItem;
|
||||
int m_defaultFontHeight;
|
||||
bool m_bScrolling;
|
||||
bool m_bBindMode;
|
||||
bool m_bLocked;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyGraphicsScrollbar(QWidget* _parent = nullptr);
|
||||
virtual ~EasyGraphicsScrollbar();
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
void mousePressEvent(QMouseEvent* _event) override;
|
||||
void mouseReleaseEvent(QMouseEvent* _event) override;
|
||||
void mouseMoveEvent(QMouseEvent* _event) override;
|
||||
void wheelEvent(QWheelEvent* _event) override;
|
||||
void resizeEvent(QResizeEvent* _event) override;
|
||||
|
||||
void dragEnterEvent(QDragEnterEvent*) override {}
|
||||
|
||||
public:
|
||||
|
||||
// Public non-virtual methods
|
||||
|
||||
void clear();
|
||||
|
||||
bool bindMode() const;
|
||||
qreal getWindowScale() const;
|
||||
::profiler::thread_id_t hystThread() const;
|
||||
|
||||
qreal minimum() const;
|
||||
qreal maximum() const;
|
||||
qreal range() const;
|
||||
qreal value() const;
|
||||
qreal sliderWidth() const;
|
||||
qreal sliderHalfWidth() const;
|
||||
int defaultFontHeight() const;
|
||||
|
||||
void setValue(qreal _value);
|
||||
void setRange(qreal _minValue, qreal _maxValue);
|
||||
void setSliderWidth(qreal _width);
|
||||
void setChronoPos(qreal _left, qreal _right);
|
||||
void showChrono();
|
||||
void hideChrono();
|
||||
|
||||
void setHistogramSource(::profiler::thread_id_t _thread_id, const::profiler_gui::EasyItems* _items);
|
||||
void setHistogramSource(::profiler::thread_id_t _thread_id, ::profiler::block_id_t _block_id);
|
||||
|
||||
inline void setHistogramSource(::profiler::thread_id_t _thread_id, const ::profiler_gui::EasyItems& _items)
|
||||
{
|
||||
setHistogramSource(_thread_id, &_items);
|
||||
}
|
||||
|
||||
inline void lock()
|
||||
{
|
||||
m_bLocked = true;
|
||||
}
|
||||
|
||||
inline void unlock()
|
||||
{
|
||||
m_bLocked = false;
|
||||
}
|
||||
|
||||
signals:
|
||||
|
||||
void rangeChanged();
|
||||
void valueChanged(qreal _value);
|
||||
void wheeled(qreal _mouseX, int _wheelDelta);
|
||||
|
||||
private slots:
|
||||
|
||||
void onThreadViewChanged();
|
||||
void onWindowWidthChange(qreal _width);
|
||||
|
||||
}; // END of class EasyGraphicsScrollbar.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY__GRAPHICS_SCROLLBAR__H
|
85
3rdparty/easyprofiler/profiler_gui/easy_qtimer.cpp
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
/************************************************************************
|
||||
* file name : easy_qtimer.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/12/05
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : This file contains implementation of EasyQTimer class used to
|
||||
* : connect QTimer to non-QObject classes.
|
||||
* ----------------- :
|
||||
* change log : * 2016/12/05 Victor Zarubkin: Initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include "easy_qtimer.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyQTimer::EasyQTimer()
|
||||
: QObject()
|
||||
{
|
||||
connect(&m_timer, &QTimer::timeout, [this](){ m_handler(); });
|
||||
}
|
||||
|
||||
EasyQTimer::EasyQTimer(::std::function<void()>&& _handler, bool _isSignleShot)
|
||||
: QObject()
|
||||
, m_handler(::std::forward<::std::function<void()>&&>(_handler))
|
||||
{
|
||||
m_timer.setSingleShot(_isSignleShot);
|
||||
connect(&m_timer, &QTimer::timeout, [this](){ m_handler(); });
|
||||
}
|
||||
|
||||
EasyQTimer::~EasyQTimer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void EasyQTimer::setHandler(::std::function<void()>&& _handler)
|
||||
{
|
||||
m_handler = _handler;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
89
3rdparty/easyprofiler/profiler_gui/easy_qtimer.h
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
/************************************************************************
|
||||
* file name : easy_qtimer.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/12/05
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : This file contains declaration of EasyQTimer class used to
|
||||
* : connect QTimer to non-QObject classes.
|
||||
* ----------------- :
|
||||
* change log : * 2016/12/05 Victor Zarubkin: Initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY__QTIMER__H
|
||||
#define EASY__QTIMER__H
|
||||
|
||||
#include <QTimer>
|
||||
#include <functional>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyQTimer : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
|
||||
QTimer m_timer;
|
||||
::std::function<void()> m_handler;
|
||||
|
||||
public:
|
||||
|
||||
EasyQTimer();
|
||||
EasyQTimer(::std::function<void()>&& _handler, bool _isSignleShot = false);
|
||||
virtual ~EasyQTimer();
|
||||
|
||||
void setHandler(::std::function<void()>&& _handler);
|
||||
|
||||
inline void start(int msec) { m_timer.start(msec); }
|
||||
inline void stop() { if (m_timer.isActive()) m_timer.stop(); }
|
||||
inline bool isActive() const { return m_timer.isActive(); }
|
||||
|
||||
}; // END of class EasyQTimer.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY__QTIMER__H
|
122
3rdparty/easyprofiler/profiler_gui/globals.cpp
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
/************************************************************************
|
||||
* file name : globals.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/03
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains implementation of global constants and variables for profiler gui.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/03 Victor Zarubkin: initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#define IGNORE_GLOBALS_DECLARATION
|
||||
#include "globals.h"
|
||||
#undef IGNORE_GLOBALS_DECLARATION
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
EasyGlobals& EasyGlobals::instance()
|
||||
{
|
||||
// It's okay even without C++11 "magic statics" feature because first call happens
|
||||
// on application initialization - there is only one thread and no data races occur.
|
||||
static EasyGlobals globals;
|
||||
return globals;
|
||||
}
|
||||
|
||||
EasyGlobals::EasyGlobals()
|
||||
: theme("default")
|
||||
, bg_font(::profiler_gui::EFont("DejaVu Sans", 10, QFont::Bold))
|
||||
, chronometer_font(::profiler_gui::EFont("DejaVu Sans", 16, QFont::Bold))
|
||||
, items_font(::profiler_gui::EFont("DejaVu Sans", 10, QFont::Medium))
|
||||
, selected_item_font(::profiler_gui::EFont("DejaVu Sans", 10, QFont::Medium))
|
||||
, scene_left(0)
|
||||
, scene_right(100)
|
||||
, begin_time(0)
|
||||
, selected_thread(0U)
|
||||
, selected_block(::profiler_gui::numeric_max<decltype(selected_block)>())
|
||||
, selected_block_id(::profiler_gui::numeric_max<decltype(selected_block_id)>())
|
||||
, version(0)
|
||||
, frame_time(16700)
|
||||
, blocks_spacing(0)
|
||||
, blocks_size_min(2)
|
||||
, blocks_narrow_size(20)
|
||||
, max_fps_history(90)
|
||||
, fps_timer_interval(500)
|
||||
, fps_widget_line_width(2)
|
||||
, chrono_text_position(ChronoTextPosition_Top)
|
||||
, time_units(TimeUnits_ms)
|
||||
, connected(false)
|
||||
, fps_enabled(true)
|
||||
, use_decorated_thread_name(false)
|
||||
, hex_thread_id(false)
|
||||
, enable_event_markers(true)
|
||||
, enable_statistics(true)
|
||||
, enable_zero_length(true)
|
||||
, add_zero_blocks_to_hierarchy(false)
|
||||
, draw_graphics_items_borders(true)
|
||||
, hide_narrow_children(false)
|
||||
, hide_minsize_blocks(false)
|
||||
, display_only_relevant_stats(true)
|
||||
, collapse_items_on_tree_close(false)
|
||||
, all_items_expanded_by_default(true)
|
||||
, only_current_thread_hierarchy(false)
|
||||
, highlight_blocks_with_same_id(true)
|
||||
, selecting_block_changes_thread(true)
|
||||
, auto_adjust_histogram_height(true)
|
||||
, display_only_frames_on_histogram(false)
|
||||
, bind_scene_and_tree_expand_status(true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
273
3rdparty/easyprofiler/profiler_gui/globals.h
vendored
Normal file
@@ -0,0 +1,273 @@
|
||||
/************************************************************************
|
||||
* file name : globals.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/03
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of global constants and variables for profiler gui.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/03 Victor Zarubkin: initial commit.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_PROFILER__GUI_GLOBALS_H
|
||||
#define EASY_PROFILER__GUI_GLOBALS_H
|
||||
|
||||
#include <string>
|
||||
#include <QObject>
|
||||
#include <QColor>
|
||||
#include <QTextCodec>
|
||||
#include <QSize>
|
||||
#include <QFont>
|
||||
#include "common_functions.h"
|
||||
#include "globals_qobjects.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
const QString ORGANAZATION_NAME = "EasyProfiler";
|
||||
const QString APPLICATION_NAME = "Easy profiler gui application";
|
||||
|
||||
const QColor CHRONOMETER_COLOR = QColor::fromRgba(0x40000000 | (::profiler::colors::RichBlue & 0x00ffffff));// 0x402020c0);
|
||||
const QColor CHRONOMETER_COLOR2 = QColor::fromRgba(0x40000000 | (::profiler::colors::Dark & 0x00ffffff));// 0x40408040);
|
||||
const QColor TEXT_COLOR = QColor::fromRgb(0xff504040);
|
||||
const QColor SYSTEM_BORDER_COLOR = QColor::fromRgb(0xffcccccc);
|
||||
EASY_CONSTEXPR QRgb SELECTED_THREAD_BACKGROUND = 0xffe0e060;
|
||||
EASY_CONSTEXPR QRgb SELECTED_THREAD_FOREGROUND = 0xffffffff - (SELECTED_THREAD_BACKGROUND & 0x00ffffff);
|
||||
|
||||
EASY_CONSTEXPR qreal SCALING_COEFFICIENT = 1.25;
|
||||
EASY_CONSTEXPR qreal SCALING_COEFFICIENT_INV = 1.0 / SCALING_COEFFICIENT;
|
||||
|
||||
EASY_CONSTEXPR uint32_t V130 = 0x01030000;
|
||||
|
||||
Q_CONSTEXPR QSize ICONS_SIZE {28, 28};
|
||||
EASY_CONSTEXPR uint16_t GRAPHICS_ROW_SIZE = 20;
|
||||
EASY_CONSTEXPR uint16_t GRAPHICS_ROW_SPACING = 0;
|
||||
EASY_CONSTEXPR uint16_t GRAPHICS_ROW_SIZE_FULL = GRAPHICS_ROW_SIZE + GRAPHICS_ROW_SPACING;
|
||||
EASY_CONSTEXPR uint16_t THREADS_ROW_SPACING = 10;
|
||||
|
||||
#ifdef _WIN32
|
||||
EASY_CONSTEXPR qreal FONT_METRICS_FACTOR = 1.05;
|
||||
#else
|
||||
EASY_CONSTEXPR qreal FONT_METRICS_FACTOR = 1.;
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class T>
|
||||
inline auto toUnicode(const T& _inputString) -> decltype(QTextCodec::codecForLocale()->toUnicode(_inputString))
|
||||
{
|
||||
return QTextCodec::codecForLocale()->toUnicode(_inputString);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline QString decoratedThreadName(bool _use_decorated_thread_name, const::profiler::BlocksTreeRoot& _root, const QString& _unicodeThreadWord, bool _hex = false)
|
||||
{
|
||||
if (_root.got_name())
|
||||
{
|
||||
QString rootname(toUnicode(_root.name()));
|
||||
if (!_use_decorated_thread_name || rootname.contains(_unicodeThreadWord, Qt::CaseInsensitive))
|
||||
{
|
||||
if (_hex)
|
||||
return QString("%1 0x%2").arg(rootname).arg(_root.thread_id, 0, 16);
|
||||
return QString("%1 %2").arg(rootname).arg(_root.thread_id);
|
||||
}
|
||||
|
||||
if (_hex)
|
||||
return QString("%1 Thread 0x%2").arg(rootname).arg(_root.thread_id, 0, 16);
|
||||
return QString("%1 Thread %2").arg(rootname).arg(_root.thread_id);
|
||||
}
|
||||
|
||||
if (_hex)
|
||||
return QString("Thread 0x%1").arg(_root.thread_id, 0, 16);
|
||||
return QString("Thread %1").arg(_root.thread_id);
|
||||
}
|
||||
|
||||
inline QString decoratedThreadName(bool _use_decorated_thread_name, const ::profiler::BlocksTreeRoot& _root, bool _hex = false)
|
||||
{
|
||||
if (_root.got_name())
|
||||
{
|
||||
QString rootname(toUnicode(_root.name()));
|
||||
if (!_use_decorated_thread_name || rootname.contains(toUnicode("thread"), Qt::CaseInsensitive))
|
||||
{
|
||||
if (_hex)
|
||||
return QString("%1 0x%2").arg(rootname).arg(_root.thread_id, 0, 16);
|
||||
return QString("%1 %2").arg(rootname).arg(_root.thread_id);
|
||||
}
|
||||
|
||||
if (_hex)
|
||||
return QString("%1 Thread 0x%2").arg(rootname).arg(_root.thread_id, 0, 16);
|
||||
return QString("%1 Thread %2").arg(rootname).arg(_root.thread_id);
|
||||
}
|
||||
|
||||
if (_hex)
|
||||
return QString("Thread 0x%1").arg(_root.thread_id, 0, 16);
|
||||
return QString("Thread %1").arg(_root.thread_id);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum ChronometerTextPosition : int8_t
|
||||
{
|
||||
ChronoTextPosition_Center = 0,
|
||||
ChronoTextPosition_Top,
|
||||
ChronoTextPosition_Bottom,
|
||||
|
||||
}; // END of enum ChronometerTextPosition.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct EasyGlobals Q_DECL_FINAL
|
||||
{
|
||||
static EasyGlobals& instance();
|
||||
|
||||
EasyGlobalSignals events; ///< Global signals
|
||||
::profiler::thread_blocks_tree_t profiler_blocks; ///< Profiler blocks tree loaded from file
|
||||
::profiler::descriptors_list_t descriptors; ///< Profiler block descriptors list
|
||||
EasyBlocks gui_blocks; ///< Profiler graphics blocks builded by GUI
|
||||
|
||||
QString theme; ///< Current UI theme name
|
||||
QFont bg_font; ///< Font for blocks_graphics_view
|
||||
QFont chronometer_font; ///< Font for easy_chronometer_item
|
||||
QFont items_font; ///< Font for easy_graphics_item
|
||||
QFont selected_item_font; ///< Font for easy_graphics_item
|
||||
|
||||
double scene_left; ///< Graphics scene left boundary
|
||||
double scene_right; ///< Graphics scene right boundary
|
||||
::profiler::timestamp_t begin_time; ///<
|
||||
::profiler::thread_id_t selected_thread; ///< Current selected thread id
|
||||
::profiler::block_index_t selected_block; ///< Current selected profiler block index
|
||||
::profiler::block_id_t selected_block_id; ///< Current selected profiler block id
|
||||
uint32_t version; ///< Opened file version (files may have different format)
|
||||
float frame_time; ///< Expected frame time value in microseconds to be displayed at minimap on graphics scrollbar
|
||||
int blocks_spacing; ///< Minimum blocks spacing on diagram
|
||||
int blocks_size_min; ///< Minimum blocks size on diagram
|
||||
int blocks_narrow_size; ///< Width indicating narrow blocks
|
||||
int max_fps_history; ///< Max frames history displayed in FPS Monitor
|
||||
int fps_timer_interval; ///< Interval in milliseconds for sending network requests to the profiled application (used by FPS Monitor)
|
||||
int fps_widget_line_width; ///< Line width in pixels of FPS lines for FPS Monitor
|
||||
ChronometerTextPosition chrono_text_position; ///< Selected interval text position
|
||||
TimeUnits time_units; ///< Units type for time (milliseconds, microseconds, nanoseconds or auto-definition)
|
||||
bool connected; ///< Is connected to source (to be able to capture profiling information)
|
||||
bool fps_enabled; ///< Is FPS Monitor enabled
|
||||
bool use_decorated_thread_name; ///< Add "Thread" to the name of each thread (if there is no one)
|
||||
bool hex_thread_id; ///< Use hex view for thread-id instead of decimal
|
||||
bool enable_event_markers; ///< Enable event indicators painting (These are narrow rectangles at the bottom of each thread)
|
||||
bool enable_statistics; ///< Enable gathering and using statistics (Disable if you want to consume less memory)
|
||||
bool enable_zero_length; ///< Enable zero length blocks (if true, then such blocks will have width == 1 pixel on each scale)
|
||||
bool add_zero_blocks_to_hierarchy; ///< Enable adding zero blocks into hierarchy tree
|
||||
bool draw_graphics_items_borders; ///< Draw borders for graphics blocks or not
|
||||
bool hide_narrow_children; ///< Hide children for narrow graphics blocks (See blocks_narrow_size)
|
||||
bool hide_minsize_blocks; ///< Hide blocks which screen size is less than blocks_size_min
|
||||
bool display_only_relevant_stats; ///< Display only relevant information in ProfTreeWidget (excludes min, max, average times if there are only 1 calls number)
|
||||
bool collapse_items_on_tree_close; ///< Collapse all items which were displayed in the hierarchy tree after tree close/reset
|
||||
bool all_items_expanded_by_default; ///< Expand all items after file is opened
|
||||
bool only_current_thread_hierarchy; ///< Build hierarchy tree for current thread only
|
||||
bool highlight_blocks_with_same_id; ///< Highlight all blocks with same id on diagram
|
||||
bool selecting_block_changes_thread; ///< If true then current selected thread will change every time you select block
|
||||
bool auto_adjust_histogram_height; ///< Automatically adjust histogram height to the visible region
|
||||
bool display_only_frames_on_histogram; ///< Display only top-level blocks on histogram when drawing histogram by block id
|
||||
bool bind_scene_and_tree_expand_status; /** \brief If true then items on graphics scene and in the tree (blocks hierarchy) are binded on each other
|
||||
so expanding/collapsing items on scene also expands/collapse items in the tree. */
|
||||
|
||||
private:
|
||||
|
||||
EasyGlobals();
|
||||
|
||||
}; // END of struct EasyGlobals.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
#ifndef IGNORE_GLOBALS_DECLARATION
|
||||
#define EASY_GLOBALS ::profiler_gui::EasyGlobals::instance()
|
||||
|
||||
inline ::profiler_gui::EasyBlock& easyBlock(::profiler::block_index_t i) {
|
||||
return EASY_GLOBALS.gui_blocks[i];
|
||||
}
|
||||
|
||||
inline ::profiler::SerializedBlockDescriptor& easyDescriptor(::profiler::block_id_t i) {
|
||||
return *EASY_GLOBALS.descriptors[i];
|
||||
}
|
||||
|
||||
EASY_FORCE_INLINE const ::profiler::BlocksTree& easyBlocksTree(::profiler::block_index_t i) {
|
||||
return easyBlock(i).tree;
|
||||
}
|
||||
|
||||
EASY_FORCE_INLINE const char* easyBlockName(const ::profiler::BlocksTree& _block) {
|
||||
const char* name = _block.node->name();
|
||||
return *name != 0 ? name : easyDescriptor(_block.node->id()).name();
|
||||
}
|
||||
|
||||
EASY_FORCE_INLINE const char* easyBlockName(const ::profiler::BlocksTree& _block, const ::profiler::SerializedBlockDescriptor& _desc) {
|
||||
const char* name = _block.node->name();
|
||||
return *name != 0 ? name : _desc.name();
|
||||
}
|
||||
|
||||
EASY_FORCE_INLINE const char* easyBlockName(::profiler::block_index_t i) {
|
||||
return easyBlockName(easyBlock(i).tree);
|
||||
}
|
||||
|
||||
inline qreal sceneX(profiler::timestamp_t _time) {
|
||||
return PROF_MICROSECONDS(qreal(_time - EASY_GLOBALS.begin_time));
|
||||
}
|
||||
|
||||
inline QString imagePath(const QString& _resource) {
|
||||
return QString(":/images/%1/%2").arg(EASY_GLOBALS.theme).arg(_resource);
|
||||
}
|
||||
|
||||
inline QString imagePath(const char* _resource) {
|
||||
return QString(":/images/%1/%2").arg(EASY_GLOBALS.theme).arg(_resource);
|
||||
}
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_PROFILER__GUI_GLOBALS_H
|
72
3rdparty/easyprofiler/profiler_gui/globals_qobjects.cpp
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
/************************************************************************
|
||||
* file name : globals_qobjects.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/08
|
||||
* authors : Victor Zarubkin, Sergey Yagovtsev
|
||||
* email : v.s.zarubkin@gmail.com, yse.sey@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains implementation of EasyGlobalSignals QObject class.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/08 Sergey Yagovtsev: moved sources from globals.cpp
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include "globals_qobjects.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
EasyGlobalSignals::EasyGlobalSignals() : QObject()
|
||||
{
|
||||
}
|
||||
|
||||
EasyGlobalSignals::~EasyGlobalSignals()
|
||||
{
|
||||
}
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
95
3rdparty/easyprofiler/profiler_gui/globals_qobjects.h
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
/************************************************************************
|
||||
* file name : globals_qobjects.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/08
|
||||
* authors : Victor Zarubkin, Sergey Yagovtsev
|
||||
* email : v.s.zarubkin@gmail.com, yse.sey@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyGlobalSignals QObject class.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/08 Sergey Yagovtsev: moved sources from globals.h
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_GLOBALS_QOBJECTS_H
|
||||
#define EASY_GLOBALS_QOBJECTS_H
|
||||
|
||||
#include <QObject>
|
||||
#include <easy/details/profiler_public_types.h>
|
||||
|
||||
namespace profiler_gui {
|
||||
|
||||
class EasyGlobalSignals Q_DECL_FINAL : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
EasyGlobalSignals();
|
||||
virtual ~EasyGlobalSignals();
|
||||
|
||||
signals:
|
||||
|
||||
void selectedThreadChanged(::profiler::thread_id_t _id);
|
||||
void selectedBlockChanged(uint32_t _block_index);
|
||||
void selectedBlockIdChanged(::profiler::block_id_t _id);
|
||||
void itemsExpandStateChanged();
|
||||
void blockStatusChanged(::profiler::block_id_t _id, ::profiler::EasyBlockStatus _status);
|
||||
void connectionChanged(bool _connected);
|
||||
void blocksRefreshRequired(bool);
|
||||
void expectedFrameTimeChanged();
|
||||
void autoAdjustHistogramChanged();
|
||||
void displayOnlyFramesOnHistogramChanged();
|
||||
void hierarchyFlagChanged(bool);
|
||||
void threadNameDecorationChanged();
|
||||
void hexThreadIdChanged();
|
||||
void refreshRequired();
|
||||
void blocksTreeModeChanged();
|
||||
void sceneSizeChanged();
|
||||
|
||||
}; // END of class EasyGlobalSignals.
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
#endif // EASY_GLOBALS_QOBJECTS_H
|
43
3rdparty/easyprofiler/profiler_gui/images/attribution.txt
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
logo.svg - Icon made by Freepik from www.flaticon.com
|
||||
|
||||
default/off.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/open-folder.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/open-folder2.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/reload-folder2.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/reload.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/expand.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/collapse.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/colors.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/colors-black.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/save.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/statistics.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/statistics2.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/lan.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/lan_on.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/wifi.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/wifi_on.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/play.svg - Icon made by Google from www.flaticon.com
|
||||
default/stop.svg - Icon made by Google from www.flaticon.com
|
||||
default/delete.svg - Icon made by Google from www.flaticon.com
|
||||
default/list.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/search-prev.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/search-next.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/settings.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/check.svg - Icon made by Kirill Kazachek from www.flaticon.com
|
||||
default/check-disabled.svg - Icon made by Kirill Kazachek from www.flaticon.com
|
||||
default/close-white.svg - Icon made by Cole Bemis from www.flaticon.com
|
||||
default/close-white-hover.svg - Icon made by Cole Bemis from www.flaticon.com
|
||||
default/close-white-pressed.svg - Icon made by Cole Bemis from www.flaticon.com
|
||||
default/maximize-white.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/maximize-white-hover.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/maximize-white-pressed.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/minimize-white.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/minimize-white-pressed.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-down.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-down-hover.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-down-disabled.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-up.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-up-hover.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-up-disabled.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-left.svg - Icon made by Freepik from www.flaticon.com
|
||||
default/arrow-right.svg - Icon made by Freepik from www.flaticon.com
|
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-down-disabled.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.847px" viewBox="0 0 451.847 451.847" style="enable-background:new 0 0 451.847 451.847;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#cccccc" d="M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751
|
||||
c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0
|
||||
c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 868 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-down-hover.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.847px" viewBox="0 0 451.847 451.847" style="enable-background:new 0 0 451.847 451.847;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#302020" d="M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751
|
||||
c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0
|
||||
c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 868 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-down.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.847px" viewBox="0 0 451.847 451.847" style="enable-background:new 0 0 451.847 451.847;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#504040" d="M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751
|
||||
c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0
|
||||
c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 868 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-left.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.847px" viewBox="0 0 451.847 451.847" style="enable-background:new 0 0 451.847 451.847;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#504040" d="M97.141,225.92c0-8.095,3.091-16.192,9.259-22.366L300.689,9.27c12.359-12.359,32.397-12.359,44.751,0
|
||||
c12.354,12.354,12.354,32.388,0,44.748L173.525,225.92l171.903,171.909c12.354,12.354,12.354,32.391,0,44.744
|
||||
c-12.354,12.365-32.386,12.365-44.745,0l-194.29-194.281C100.226,242.115,97.141,234.018,97.141,225.92z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 861 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-right.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.846px" height="451.847px" viewBox="0 0 451.846 451.847" style="enable-background:new 0 0 451.846 451.847;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#504040" d="M345.441,248.292L151.154,442.573c-12.359,12.365-32.397,12.365-44.75,0c-12.354-12.354-12.354-32.391,0-44.744
|
||||
L278.318,225.92L106.409,54.017c-12.354-12.359-12.354-32.394,0-44.748c12.354-12.359,32.391-12.359,44.75,0l194.287,194.284
|
||||
c6.177,6.18,9.262,14.271,9.262,22.366C354.708,234.018,351.617,242.115,345.441,248.292z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 871 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-up-disabled.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.846px" viewBox="0 0 451.847 451.846" style="enable-background:new 0 0 451.847 451.846;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#cccccc" d="M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0
|
||||
L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4
|
||||
c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 867 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-up-hover.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.846px" viewBox="0 0 451.847 451.846" style="enable-background:new 0 0 451.847 451.846;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#302020" d="M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0
|
||||
L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4
|
||||
c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 867 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/arrow-up.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="451.847px" height="451.846px" viewBox="0 0 451.847 451.846" style="enable-background:new 0 0 451.847 451.846;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#504040" d="M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0
|
||||
L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4
|
||||
c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 867 B |
8
3rdparty/easyprofiler/profiler_gui/images/default/check-disabled.svg
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 426.667 426.667" style="enable-background:new 0 0 426.667 426.667;" xml:space="preserve">
|
||||
<g>
|
||||
<polygon fill="#98CE98" points="293.333,135.04 190.08,240.213 137.173,187.093 108.8,215.467 192.213,298.667 326.187,168.747"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 514 B |
8
3rdparty/easyprofiler/profiler_gui/images/default/check.svg
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 426.667 426.667" style="enable-background:new 0 0 426.667 426.667;" xml:space="preserve">
|
||||
<g>
|
||||
<polygon fill="#237423" points="293.333,135.04 190.08,240.213 137.173,187.093 108.8,215.467 192.213,298.667 326.187,168.747"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 514 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/close-white-hover.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#f4b3a6" d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249
|
||||
C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306
|
||||
C514.019,27.23,514.019,14.135,505.943,6.058z"/>
|
||||
<path fill="#f4b3a6" d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636
|
||||
c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 899 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/close-white-pressed.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#f48376" d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249
|
||||
C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306
|
||||
C514.019,27.23,514.019,14.135,505.943,6.058z"/>
|
||||
<path fill="#f48376" d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636
|
||||
c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 899 B |
12
3rdparty/easyprofiler/profiler_gui/images/default/close-white.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#ffffff" d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249
|
||||
C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306
|
||||
C514.019,27.23,514.019,14.135,505.943,6.058z"/>
|
||||
<path fill="#ffffff" d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636
|
||||
c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 899 B |
16
3rdparty/easyprofiler/profiler_gui/images/default/collapse.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 210.002 210.002" style="enable-background:new 0 0 210.002 210.002;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M195.765,76.815l-77.424,11.118l11.119-77.422l19.932,19.931l30.445-30.441l26.439,26.44
|
||||
l-30.441,30.444L195.765,76.815z"/>
|
||||
<path fill="#484848" d="M34.168,153.117L3.725,183.563l26.439,26.439l30.445-30.441l19.932,19.93l11.119-77.422
|
||||
l-77.422,11.119L34.168,153.117z"/>
|
||||
<path fill="#f44336" d="M60.61,30.441L30.164,0L3.725,26.44l30.443,30.444l-19.93,19.931L91.66,87.933L80.541,10.511
|
||||
L60.61,30.441z"/>
|
||||
<path fill="#f44336" d="M195.765,133.188l-77.424-11.119l11.119,77.422l19.932-19.93l30.445,30.441l26.439-26.439l-30.441-30.445
|
||||
L195.765,133.188z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
31
3rdparty/easyprofiler/profiler_gui/images/default/colors-black.svg
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 441.902 441.902" style="enable-background:new 0 0 441.902 441.902;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M372.231,170.869c-4.097-2.365-8.303-4.509-12.595-6.438c0.471-4.651,0.713-9.369,0.713-14.143
|
||||
c0-76.864-62.534-139.397-139.397-139.397S81.553,73.425,81.553,150.289c0,4.773,0.242,9.492,0.713,14.143
|
||||
c-4.293,1.929-8.499,4.073-12.595,6.438C3.105,209.302-19.783,294.724,18.648,361.29c24.829,43.005,71.133,69.721,120.843,69.721
|
||||
c24.332,0,48.392-6.466,69.578-18.698c4.114-2.375,8.076-4.939,11.882-7.675c3.806,2.736,7.768,5.3,11.882,7.675
|
||||
c21.187,12.232,45.246,18.698,69.578,18.698c49.709,0,96.014-26.715,120.843-69.721
|
||||
C461.685,294.724,438.797,209.302,372.231,170.869z M101.553,150.289c0-65.836,53.562-119.397,119.397-119.397
|
||||
s119.397,53.562,119.397,119.397c0,2.377-0.078,4.735-0.216,7.078c-12.175-3.419-24.788-5.194-37.48-5.194
|
||||
c-29.746,0-58.267,9.573-81.702,26.471c-23.435-16.898-51.956-26.471-81.702-26.471c-12.692,0-25.306,1.775-37.48,5.194
|
||||
C101.631,155.024,101.553,152.665,101.553,150.289z M254.699,322.493c-5.869,21.903-17.558,41.245-33.749,56.329
|
||||
c-16.191-15.084-27.88-34.426-33.749-56.329c-3.367-12.566-4.654-25.361-3.917-37.981c11.986,3.368,24.618,5.174,37.666,5.174
|
||||
s25.68-1.807,37.666-5.174C259.353,297.133,258.066,309.927,254.699,322.493z M220.951,269.687c-12.088,0-23.76-1.812-34.765-5.168
|
||||
c2.646-11.307,6.974-22.286,12.945-32.627c5.947-10.3,13.335-19.508,21.82-27.431c8.486,7.923,15.873,17.13,21.82,27.431
|
||||
c5.97,10.34,10.298,21.32,12.945,32.627C244.711,267.875,233.039,269.687,220.951,269.687z M167.433,256.999
|
||||
c-31.244-15.733-54.677-44.784-62.787-79.655c11.197-3.412,22.864-5.173,34.603-5.173c23.75,0,46.588,7.124,65.837,19.809
|
||||
c-8.984,8.764-16.853,18.787-23.276,29.911C175.367,233.053,170.564,244.851,167.433,256.999z M260.092,221.892
|
||||
c-6.423-11.124-14.292-21.147-23.276-29.911c19.249-12.685,42.087-19.809,65.837-19.809c11.738,0,23.405,1.761,34.603,5.173
|
||||
c-8.109,34.87-31.543,63.921-62.787,79.655C271.338,244.851,266.535,233.053,260.092,221.892z M199.069,394.992
|
||||
c-18.15,10.479-38.752,16.018-59.578,16.018c-42.587,0-82.254-22.884-103.522-59.721c-32.917-57.015-13.313-130.182,43.703-163.1
|
||||
c2.042-1.179,4.12-2.286,6.221-3.34c10.581,41.328,39.68,75.319,77.896,92.57c-1.692,16.636-0.362,33.614,4.096,50.25
|
||||
c6.578,24.55,19.418,46.345,37.159,63.631C203.094,392.581,201.106,393.817,199.069,394.992z M405.933,351.29
|
||||
c-21.268,36.837-60.936,59.721-103.522,59.721c-20.826,0-41.428-5.539-59.578-16.018c-2.036-1.176-4.024-2.411-5.974-3.691
|
||||
c17.741-17.286,30.581-39.081,37.159-63.631c4.458-16.636,5.788-33.614,4.096-50.25c38.216-17.251,67.315-51.242,77.896-92.57
|
||||
c2.101,1.053,4.179,2.16,6.221,3.34C419.246,221.108,438.851,294.275,405.933,351.29z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
41
3rdparty/easyprofiler/profiler_gui/images/default/colors.svg
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 297 297" style="enable-background:new 0 0 297 297;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M233.51,115.94c36.58,10.3,63.49,43.94,63.49,83.78c0,47.99-39.04,87.04-87.04,87.04c-23.97,0-45.7-9.74-61.46-25.47
|
||||
c-15.75,15.73-37.49,25.47-61.46,25.47C39.05,286.76,0,247.71,0,199.72c0-39.84,26.91-73.48,63.5-83.78
|
||||
c-1.32-6.01-2.04-12.25-2.04-18.66c0-47.99,39.05-87.04,87.04-87.04c48,0,87.04,39.05,87.04,87.04
|
||||
C235.54,103.69,234.83,109.93,233.51,115.94z M286.82,199.72c0-35.18-23.77-64.89-56.08-73.98c-9.28,26.75-31.26,47.6-58.69,55.32
|
||||
c1.32,6.01,2.03,12.25,2.03,18.66c0,20.36-7.04,39.09-18.8,53.93c13.94,14.14,33.3,22.92,54.68,22.92
|
||||
C252.34,276.57,286.82,242.1,286.82,199.72z M223.56,113.75c1.17-5.31,1.8-10.81,1.8-16.47c0-42.38-34.48-76.85-76.86-76.85
|
||||
S71.65,54.9,71.65,97.28c0,5.66,0.63,11.16,1.79,16.47c4.44-0.7,8.98-1.07,13.6-1.07c23.97,0,45.71,9.74,61.46,25.47
|
||||
c15.76-15.73,37.49-25.47,61.46-25.47C214.59,112.68,219.13,113.05,223.56,113.75z M220.71,123.63c-3.52-0.5-7.1-0.77-10.75-0.77
|
||||
c-21.38,0-40.74,8.78-54.68,22.92c6,7.58,10.77,16.17,14,25.48C193.1,164.56,212.27,146.67,220.71,123.63z M163.9,199.72
|
||||
c0-5.66-0.63-11.16-1.8-16.47c-4.43,0.7-8.97,1.07-13.6,1.07c-4.62,0-9.16-0.37-13.6-1.07c-1.16,5.31-1.79,10.81-1.79,16.47
|
||||
c0,17.27,5.73,33.24,15.39,46.09C158.16,232.96,163.9,216.99,163.9,199.72z M159.24,173.37c-2.61-7.13-6.25-13.77-10.74-19.74
|
||||
c-4.49,5.97-8.13,12.61-10.74,19.74c3.51,0.5,7.1,0.77,10.74,0.77C152.15,174.14,155.73,173.87,159.24,173.37z M127.73,171.26
|
||||
c3.23-9.31,7.99-17.9,14-25.48c-13.95-14.14-33.31-22.92-54.69-22.92c-3.64,0-7.23,0.27-10.74,0.77
|
||||
C84.73,146.67,103.91,164.56,127.73,171.26z M141.73,253.65c-11.76-14.84-18.81-33.57-18.81-53.93c0-6.41,0.72-12.65,2.04-18.66
|
||||
c-27.44-7.72-49.41-28.57-58.69-55.32c-32.32,9.09-56.08,38.8-56.08,73.98c0,42.38,34.47,76.85,76.85,76.85
|
||||
C108.42,276.57,127.78,267.79,141.73,253.65z"/>
|
||||
<path fill="#3498DB" d="M230.74,125.74c32.31,9.09,56.08,38.8,56.08,73.98c0,42.38-34.48,76.85-76.86,76.85
|
||||
c-21.38,0-40.74-8.78-54.68-22.92c11.76-14.84,18.8-33.57,18.8-53.93c0-6.41-0.71-12.65-2.03-18.66
|
||||
C199.48,173.34,221.46,152.49,230.74,125.74z"/>
|
||||
<path fill="#D35400" d="M225.36,97.28c0,5.66-0.63,11.16-1.8,16.47c-4.43-0.7-8.97-1.07-13.6-1.07
|
||||
c-23.97,0-45.7,9.74-61.46,25.47c-15.75-15.73-37.49-25.47-61.46-25.47c-4.62,0-9.16,0.37-13.6,1.07
|
||||
c-1.16-5.31-1.79-10.81-1.79-16.47c0-42.38,34.47-76.85,76.85-76.85S225.36,54.9,225.36,97.28z"/>
|
||||
<path fill="#5E345E" d="M209.96,122.86c3.65,0,7.23,0.27,10.75,0.77c-8.44,23.04-27.61,40.93-51.43,47.63
|
||||
c-3.23-9.31-8-17.9-14-25.48C169.22,131.64,188.58,122.86,209.96,122.86z"/>
|
||||
<path fill="#1ABC9C" d="M162.1,183.25c1.17,5.31,1.8,10.81,1.8,16.47c0,17.27-5.74,33.24-15.4,46.09
|
||||
c-9.66-12.85-15.39-28.82-15.39-46.09c0-5.66,0.63-11.16,1.79-16.47c4.44,0.7,8.98,1.07,13.6,1.07
|
||||
C153.13,184.32,157.67,183.95,162.1,183.25z"/>
|
||||
<path fill="#503B2C" d="M148.5,153.63c4.49,5.97,8.13,12.61,10.74,19.74c-3.51,0.5-7.09,0.77-10.74,0.77
|
||||
c-3.64,0-7.23-0.27-10.74-0.77C140.37,166.24,144.01,159.6,148.5,153.63z"/>
|
||||
<path fill="#FFA800" d="M141.73,145.78c-6.01,7.58-10.77,16.17-14,25.48c-23.82-6.7-43-24.59-51.43-47.63
|
||||
c3.51-0.5,7.1-0.77,10.74-0.77C108.42,122.86,127.78,131.64,141.73,145.78z"/>
|
||||
<path fill="#FFCD02" d="M122.92,199.72c0,20.36,7.05,39.09,18.81,53.93c-13.95,14.14-33.31,22.92-54.69,22.92
|
||||
c-42.38,0-76.85-34.47-76.85-76.85c0-35.18,23.76-64.89,56.08-73.98c9.28,26.75,31.25,47.6,58.69,55.32
|
||||
C123.64,187.07,122.92,193.31,122.92,199.72z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
15
3rdparty/easyprofiler/profiler_gui/images/default/delete-old.svg
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 443 443" style="enable-background:new 0 0 443 443;" xml:space="preserve">
|
||||
<g>
|
||||
<rect fill="#484848" x="61.785" y="128" width="60" height="290"/>
|
||||
<path fill="#484848" d="M211.785,250.65V128h-60v290h44.172c-14.861-21.067-23.602-46.746-23.602-74.43
|
||||
C172.356,307.145,187.486,274.193,211.785,250.65z"/>
|
||||
<path fill="#484848" d="M301.785,214.141l0-86.141h-60v100.918C259.731,219.488,280.144,214.141,301.785,214.141z"/>
|
||||
<path fill="#484848" d="M321.785,38h-83.384V0H125.169v38H41.785v60h280V38z M155.169,30h53.232v8h-53.232V30z"/>
|
||||
<path fill="#f44336" d="M301.785,244.141c-54.826,0-99.429,44.604-99.429,99.429S246.959,443,301.785,443s99.43-44.604,99.43-99.43
|
||||
S356.611,244.141,301.785,244.141z M355.961,376.533l-21.213,21.213l-32.963-32.963l-32.963,32.963l-21.213-21.213l32.963-32.963
|
||||
l-32.963-32.963l21.213-21.213l32.963,32.963l32.963-32.963l21.213,21.213l-32.963,32.963L355.961,376.533z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
10
3rdparty/easyprofiler/profiler_gui/images/default/delete.svg
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 459 459" style="enable-background:new 0 0 459 459;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M76.5,408c0,28.05,22.95,51,51,51h204c28.05,0,51-22.95,51-51V102h-306V408z"/>
|
||||
<path fill="#f44336" d="M408,25.5h-89.25L293.25,0h-127.5l-25.5,25.5 H51v51h357V25.5z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 665 B |
15
3rdparty/easyprofiler/profiler_gui/images/default/expand.svg
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 210 210" style="enable-background:new 0 0 210 210;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#f44336" d="M34.774,152.509l26.441,26.442l19.93,19.931L3.724,210l11.119-77.422L34.774,152.509z"/>
|
||||
<path fill="#484848" d="M175.226,152.509l-30.445-30.441l-26.44,26.439l30.441,30.444l-19.93,19.931L206.276,210l-11.119-77.422L175.226,152.509z"/>
|
||||
<path fill="#f44336" d="M65.22,122.067l26.439,26.439l-30.443,30.444l-26.441-26.442L65.22,122.067z"/>
|
||||
<path fill="#484848" d="M61.216,31.049l30.443,30.444L65.22,87.933
|
||||
L34.774,57.491L14.843,77.422L3.724,0l77.422,11.118L61.216,31.049z"/>
|
||||
<path fill="#f44336" d="M118.341,61.493l30.441-30.444l-19.93-19.931L206.276,0
|
||||
l-11.119,77.422l-19.932-19.931L144.78,87.933L118.341,61.493z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
25
3rdparty/easyprofiler/profiler_gui/images/default/lan.svg
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 94.414 94.414" style="enable-background:new 0 0 94.414 94.414;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M86.522,60.468v-3.16V38.34V19.372c0-1.736-1.421-3.16-3.164-3.16H36.25v2.827h43.068
|
||||
c1.514,0,2.759,1.242,2.759,2.759v33.069c0,1.525-1.245,2.759-2.759,2.759H24.179c-0.229,0-0.433-0.075-0.648-0.132v17.196h66.144
|
||||
c2.616,0,4.738-2.126,4.738-4.746L86.522,60.468z M58.07,73.112H45.426c-0.437,0-0.791-0.351-0.791-0.791
|
||||
c0-0.44,0.354-0.791,0.791-0.791H58.07c0.44,0,0.791,0.351,0.791,0.791C58.861,72.762,58.511,73.112,58.07,73.112z M38.716,69.952
|
||||
l2.412-2.895h21.237l2.416,2.895H38.716z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#484848" d="M31.92,42.935H0V14.258c0-1.793,1.453-3.246,3.246-3.246c1.793,0,3.246,1.453,3.246,3.246v22.178
|
||||
h18.936V14.258c0-1.793,1.453-3.246,3.246-3.246c1.789,0,3.246,1.453,3.246,3.246C31.92,14.258,31.92,42.935,31.92,42.935z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#f44336" d="M12.712,31.784V14.262c0-1.793,1.453-3.246,3.246-3.246s3.246,1.453,3.246,3.246v17.522H12.712z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#f44336" d="M15.962,83.402c-1.793,0-3.246-1.446-3.246-3.242V47.595h6.492v32.564
|
||||
C19.208,81.949,17.755,83.402,15.962,83.402z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
25
3rdparty/easyprofiler/profiler_gui/images/default/lan_on.svg
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 94.414 94.414" style="enable-background:new 0 0 94.414 94.414;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M86.522,60.468v-3.16V38.34V19.372c0-1.736-1.421-3.16-3.164-3.16H36.25v2.827h43.068
|
||||
c1.514,0,2.759,1.242,2.759,2.759v33.069c0,1.525-1.245,2.759-2.759,2.759H24.179c-0.229,0-0.433-0.075-0.648-0.132v17.196h66.144
|
||||
c2.616,0,4.738-2.126,4.738-4.746L86.522,60.468z M58.07,73.112H45.426c-0.437,0-0.791-0.351-0.791-0.791
|
||||
c0-0.44,0.354-0.791,0.791-0.791H58.07c0.44,0,0.791,0.351,0.791,0.791C58.861,72.762,58.511,73.112,58.07,73.112z M38.716,69.952
|
||||
l2.412-2.895h21.237l2.416,2.895H38.716z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#484848" d="M31.92,42.935H0V14.258c0-1.793,1.453-3.246,3.246-3.246c1.793,0,3.246,1.453,3.246,3.246v22.178
|
||||
h18.936V14.258c0-1.793,1.453-3.246,3.246-3.246c1.789,0,3.246,1.453,3.246,3.246C31.92,14.258,31.92,42.935,31.92,42.935z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#4caf50" d="M12.712,31.784V14.262c0-1.793,1.453-3.246,3.246-3.246s3.246,1.453,3.246,3.246v17.522H12.712z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#4caf50" d="M15.962,83.402c-1.793,0-3.246-1.446-3.246-3.242V47.595h6.492v32.564
|
||||
C19.208,81.949,17.755,83.402,15.962,83.402z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
28
3rdparty/easyprofiler/profiler_gui/images/default/list.svg
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 485.69 485.69" style="enable-background:new 0 0 485.69 485.69;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M410.428,34.738h-76.405l5.155,23.852c0.634,2.961,0.603,5.934,0.271,8.859h54.621V452.98H91.588V67.449h54.637
|
||||
c-0.332-2.941-0.348-5.914,0.285-8.891l5.156-23.82H75.248c-9.031,0-16.34,7.324-16.34,16.354v418.243
|
||||
c0,9.016,7.309,16.354,16.34,16.354h335.18c9.031,0,16.354-7.341,16.354-16.354V51.093
|
||||
C426.783,42.062,419.459,34.738,410.428,34.738z"/>
|
||||
<path fill="#484848" d="M355.568,152.949h-111.71c-9.047,0-16.355,7.324-16.355,16.34c0,9.035,7.309,16.355,16.355,16.355h111.71
|
||||
c9.047,0,16.354-7.32,16.354-16.355C371.924,160.273,364.615,152.949,355.568,152.949z"/>
|
||||
<path fill="#484848" d="M355.568,253.254h-111.71c-9.047,0-16.355,7.323-16.355,16.354c0,9.021,7.309,16.357,16.355,16.357h111.71
|
||||
c9.047,0,16.354-7.34,16.354-16.357C371.924,260.577,364.615,253.254,355.568,253.254z"/>
|
||||
<path fill="#f44336" d="M119.556,156.792c-6.898,5.82-7.786,16.137-1.965,23.047l23.855,28.27c3.117,3.699,7.688,5.805,12.496,5.805
|
||||
c0.398,0,0.792-0.016,1.203-0.047c5.219-0.379,9.949-3.258,12.703-7.719l42.914-69.477c4.746-7.688,2.375-17.75-5.312-22.492
|
||||
c-7.688-4.777-17.75-2.375-22.497,5.313l-31.066,50.273l-9.301-11.012C136.763,151.843,126.467,150.956,119.556,156.792z"/>
|
||||
<path fill="#484848" d="M158.72,245.094c-13.554,0-24.535,10.978-24.535,24.517c0,13.543,10.98,24.52,24.535,24.52
|
||||
c13.543,0,24.52-10.977,24.52-24.52C183.24,256.07,172.263,245.094,158.72,245.094z"/>
|
||||
<path fill="#484848" d="M355.568,351.359h-111.71c-9.047,0-16.355,7.309-16.355,16.358c0,9.017,7.309,16.34,16.355,16.34h111.71
|
||||
c9.047,0,16.354-7.323,16.354-16.34C371.924,358.667,364.615,351.359,355.568,351.359z"/>
|
||||
<path fill="#484848" d="M158.72,343.199c-13.554,0-24.535,10.977-24.535,24.52c0,13.539,10.98,24.521,24.535,24.521
|
||||
c13.543,0,24.52-10.979,24.52-24.521C183.24,354.176,172.263,343.199,158.72,343.199z"/>
|
||||
<path fill="#484848" d="M173.463,75.613h138.73c3.401,0,6.613-1.521,8.746-4.176c2.137-2.629,2.961-6.105,2.229-9.43L311.686,8.859
|
||||
C310.564,3.687,305.994,0,300.708,0H184.963c-5.281,0-9.852,3.688-10.977,8.859l-11.5,53.148
|
||||
c-0.695,3.324,0.125,6.801,2.247,9.43C166.868,74.093,170.08,75.613,173.463,75.613z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/maximize-white-hover.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="483.252px" height="483.252px" viewBox="0 0 483.252 483.252" style="enable-background:new 0 0 483.252 483.252;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#e0e0e0" d="M481.354,263.904v166.979c0,28.88-23.507,52.369-52.387,52.369H53.646c-28.889,0-52.393-23.489-52.393-52.369V55.969
|
||||
c0-28.877,23.504-52.372,52.393-52.372h167.428c-9.014,9.247-15.004,21.45-16.319,35.007H53.64c-9.582,0-17.377,7.79-17.377,17.365
|
||||
v374.914c0,9.575,7.796,17.366,17.377,17.366h375.322c9.581,0,17.378-7.791,17.378-17.366V280.199
|
||||
C459.515,278.935,471.744,273.267,481.354,263.904z M277.895,52.52h114.456L207.086,237.79c-10.255,10.249-10.255,26.882,0,37.132
|
||||
c10.252,10.255,26.879,10.255,37.131,0.006L429.482,89.657v114.462c0,14.502,11.756,26.256,26.261,26.256
|
||||
c7.247,0,13.813-2.929,18.566-7.687c4.752-4.764,7.689-11.319,7.689-18.569V26.256C481.999,11.754,470.249,0,455.743,0H277.895
|
||||
c-14.499,0-26.256,11.754-26.256,26.262C251.633,40.764,263.396,52.52,277.895,52.52z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/maximize-white-pressed.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="483.252px" height="483.252px" viewBox="0 0 483.252 483.252" style="enable-background:new 0 0 483.252 483.252;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#e0cccc" d="M481.354,263.904v166.979c0,28.88-23.507,52.369-52.387,52.369H53.646c-28.889,0-52.393-23.489-52.393-52.369V55.969
|
||||
c0-28.877,23.504-52.372,52.393-52.372h167.428c-9.014,9.247-15.004,21.45-16.319,35.007H53.64c-9.582,0-17.377,7.79-17.377,17.365
|
||||
v374.914c0,9.575,7.796,17.366,17.377,17.366h375.322c9.581,0,17.378-7.791,17.378-17.366V280.199
|
||||
C459.515,278.935,471.744,273.267,481.354,263.904z M277.895,52.52h114.456L207.086,237.79c-10.255,10.249-10.255,26.882,0,37.132
|
||||
c10.252,10.255,26.879,10.255,37.131,0.006L429.482,89.657v114.462c0,14.502,11.756,26.256,26.261,26.256
|
||||
c7.247,0,13.813-2.929,18.566-7.687c4.752-4.764,7.689-11.319,7.689-18.569V26.256C481.999,11.754,470.249,0,455.743,0H277.895
|
||||
c-14.499,0-26.256,11.754-26.256,26.262C251.633,40.764,263.396,52.52,277.895,52.52z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/maximize-white.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="483.252px" height="483.252px" viewBox="0 0 483.252 483.252" style="enable-background:new 0 0 483.252 483.252;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#ffffff" d="M481.354,263.904v166.979c0,28.88-23.507,52.369-52.387,52.369H53.646c-28.889,0-52.393-23.489-52.393-52.369V55.969
|
||||
c0-28.877,23.504-52.372,52.393-52.372h167.428c-9.014,9.247-15.004,21.45-16.319,35.007H53.64c-9.582,0-17.377,7.79-17.377,17.365
|
||||
v374.914c0,9.575,7.796,17.366,17.377,17.366h375.322c9.581,0,17.378-7.791,17.378-17.366V280.199
|
||||
C459.515,278.935,471.744,273.267,481.354,263.904z M277.895,52.52h114.456L207.086,237.79c-10.255,10.249-10.255,26.882,0,37.132
|
||||
c10.252,10.255,26.879,10.255,37.131,0.006L429.482,89.657v114.462c0,14.502,11.756,26.256,26.261,26.256
|
||||
c7.247,0,13.813-2.929,18.566-7.687c4.752-4.764,7.689-11.319,7.689-18.569V26.256C481.999,11.754,470.249,0,455.743,0H277.895
|
||||
c-14.499,0-26.256,11.754-26.256,26.262C251.633,40.764,263.396,52.52,277.895,52.52z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/minimize-white-hover.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="480.221px" height="480.221px" viewBox="0 0 480.221 480.221" style="enable-background:new 0 0 480.221 480.221;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#e0e0e0" d="M480.158,260.878v166.979c0,28.874-23.501,52.363-52.381,52.363H52.453c-28.889,0-52.39-23.489-52.39-52.363V52.938
|
||||
c0-28.874,23.501-52.369,52.39-52.369h167.434c-9.011,9.244-15.004,21.45-16.316,35.003H52.447
|
||||
c-9.582,0-17.378,7.791-17.378,17.366v374.92c0,9.569,7.796,17.36,17.378,17.36h375.325c9.581,0,17.372-7.791,17.372-17.36V277.169
|
||||
C458.33,275.904,470.56,270.236,480.158,260.878z M399.287,230.096H284.831L470.099,44.829c10.249-10.261,10.249-26.882,0-37.131
|
||||
c-10.256-10.261-26.883-10.261-37.132-0.012L247.7,192.958V78.497c0-14.499-11.757-26.262-26.259-26.262
|
||||
c-7.25,0-13.816,2.932-18.569,7.689c-4.752,4.765-7.693,11.325-7.693,18.572v177.854c0,14.499,11.754,26.256,26.256,26.256h177.852
|
||||
c14.505,0,26.256-11.751,26.256-26.256S413.792,230.096,399.287,230.096z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/minimize-white-pressed.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="480.221px" height="480.221px" viewBox="0 0 480.221 480.221" style="enable-background:new 0 0 480.221 480.221;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#e0cccc" d="M480.158,260.878v166.979c0,28.874-23.501,52.363-52.381,52.363H52.453c-28.889,0-52.39-23.489-52.39-52.363V52.938
|
||||
c0-28.874,23.501-52.369,52.39-52.369h167.434c-9.011,9.244-15.004,21.45-16.316,35.003H52.447
|
||||
c-9.582,0-17.378,7.791-17.378,17.366v374.92c0,9.569,7.796,17.36,17.378,17.36h375.325c9.581,0,17.372-7.791,17.372-17.36V277.169
|
||||
C458.33,275.904,470.56,270.236,480.158,260.878z M399.287,230.096H284.831L470.099,44.829c10.249-10.261,10.249-26.882,0-37.131
|
||||
c-10.256-10.261-26.883-10.261-37.132-0.012L247.7,192.958V78.497c0-14.499-11.757-26.262-26.259-26.262
|
||||
c-7.25,0-13.816,2.932-18.569,7.689c-4.752,4.765-7.693,11.325-7.693,18.572v177.854c0,14.499,11.754,26.256,26.256,26.256h177.852
|
||||
c14.505,0,26.256-11.751,26.256-26.256S413.792,230.096,399.287,230.096z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/minimize-white.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="480.221px" height="480.221px" viewBox="0 0 480.221 480.221" style="enable-background:new 0 0 480.221 480.221;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#ffffff" d="M480.158,260.878v166.979c0,28.874-23.501,52.363-52.381,52.363H52.453c-28.889,0-52.39-23.489-52.39-52.363V52.938
|
||||
c0-28.874,23.501-52.369,52.39-52.369h167.434c-9.011,9.244-15.004,21.45-16.316,35.003H52.447
|
||||
c-9.582,0-17.378,7.791-17.378,17.366v374.92c0,9.569,7.796,17.36,17.378,17.36h375.325c9.581,0,17.372-7.791,17.372-17.36V277.169
|
||||
C458.33,275.904,470.56,270.236,480.158,260.878z M399.287,230.096H284.831L470.099,44.829c10.249-10.261,10.249-26.882,0-37.131
|
||||
c-10.256-10.261-26.883-10.261-37.132-0.012L247.7,192.958V78.497c0-14.499-11.757-26.262-26.259-26.262
|
||||
c-7.25,0-13.816,2.932-18.569,7.689c-4.752,4.765-7.693,11.325-7.693,18.572v177.854c0,14.499,11.754,26.256,26.256,26.256h177.852
|
||||
c14.505,0,26.256-11.751,26.256-26.256S413.792,230.096,399.287,230.096z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
12
3rdparty/easyprofiler/profiler_gui/images/default/off.svg
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 26.009 26.009" style="enable-background:new 0 0 26.009 26.009;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M17.284,2.033v3.3c3.006,1.551,5.065,4.683,5.065,8.299c0,5.161-4.184,9.344-9.343,9.344c-5.16,0-9.346-4.183-9.346-9.344
|
||||
c0-3.316,1.735-6.223,4.34-7.881V2.32C3.662,4.242,0.63,8.581,0.63,13.632c0,6.834,5.539,12.377,12.374,12.377
|
||||
c6.834,0,12.374-5.543,12.374-12.377C25.378,8.304,22.003,3.779,17.284,2.033z"/>
|
||||
<path fill="#f44336" d="M12.766,15.229c1.359,0,2.457-0.803,2.457-1.79V1.795C15.224,0.804,14.125,0,12.766,0c-1.357,0-2.456,0.804-2.456,1.795
|
||||
V13.44C10.311,14.427,11.41,15.229,12.766,15.229z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 933 B |
14
3rdparty/easyprofiler/profiler_gui/images/default/open-folder.svg
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 250.604 250.604" style="enable-background:new 0 0 250.604 250.604;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M66.34,115.302h173.065c4.148,0,6.846,2.708,8.084,4.322c2.898,3.776,3.847,8.949,2.537,13.839l-23.92,89.297
|
||||
c-1.528,5.707-5.796,9.542-10.619,9.542H42.422c-4.148,0-6.846-2.708-8.084-4.322c-2.898-3.776-3.847-8.949-2.537-13.839
|
||||
l23.919-89.297C57.249,119.137,61.517,115.302,66.34,115.302z"/>
|
||||
<path fill="#f44336" d="M17.312,210.26l23.919-89.297
|
||||
c3.31-12.358,13.399-20.661,25.108-20.661H229v-42c0-4.143-2.524-7-6.667-7H130v-2.633c0-17.021-13.014-30.367-30.033-30.367H31.2
|
||||
C14.18,18.302,0,31.649,0,48.669v9.633v33v115.5c0,4.143,3.69,7.5,7.833,7.5h8.684C16.697,212.947,16.954,211.597,17.312,210.26z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/open-folder2.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 247.355 247.355" style="enable-background:new 0 0 247.355 247.355;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M181.751,79.678h64.049c0.617,0,0.995,0.275,1.204,0.506c0.27,0.297,0.385,0.66,0.344,1.078l-14.7,147.766
|
||||
c-0.086,0.863-0.824,1.65-1.548,1.65H15.792c-0.748,0-1.44-0.667-1.543-1.486L0.013,115.176c-0.05-0.396,0.041-0.719,0.278-0.986
|
||||
c0.168-0.191,0.557-0.512,1.265-0.512h151.291c6.107,0,11.713-3.423,14.639-8.948l12.891-24.474
|
||||
C180.653,79.734,181.429,79.678,181.751,79.678z"/>
|
||||
<path fill="#f44336" d="M152.847,98.678c0.513,0,1.077-0.392,1.375-0.953l12.891-24.474
|
||||
c2.803-5.294,8.409-8.573,14.638-8.573h54.594v-16.75c0-8.837-5.87-15.25-14.417-15.25H91.428c-0.536-0.009-1.569-0.809-1.752-1.342
|
||||
c-0.001-0.113-0.005-0.227-0.011-0.338c-0.304-8.467-6.278-14.32-14.738-14.32h-48.5c-9.393,0-17.083,6.479-17.083,14.75v67.25
|
||||
H152.847z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
11
3rdparty/easyprofiler/profiler_gui/images/default/play.svg
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#f44336" d="M204,369.75L357,255L204,140.25V369.75z"/>
|
||||
<path fill="#484848" d="M255,0C114.75,0,0,114.75,0,255s114.75,255,255,255s255-114.75,255-255
|
||||
S395.25,0,255,0z M255,459c-112.2,0-204-91.8-204-204S142.8,51,255,51s204,91.8,204,204S367.2,459,255,459z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 750 B |
7
3rdparty/easyprofiler/profiler_gui/images/default/radio-indicator-disabled.svg
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="64px" height="64px" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
|
||||
<g>
|
||||
<circle fill="#98CE98" cx="32" cy="32" r="16"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 346 B |
7
3rdparty/easyprofiler/profiler_gui/images/default/radio-indicator.svg
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="64px" height="64px" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
|
||||
<g>
|
||||
<circle fill="#237423" cx="32" cy="32" r="16"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 346 B |
24
3rdparty/easyprofiler/profiler_gui/images/default/reload-folder2.svg
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 247.355 247.355" style="enable-background:new 0 0 247.355 247.355;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#f44336" d="M9.344,98.678v-67.25c0-8.271,7.69-14.75,17.083-14.75h48.5c8.46,0,14.435,5.854,14.738,14.32
|
||||
c0.006,0.111,0.01,0.225,0.011,0.338c0.183,0.533,1.216,1.333,1.752,1.342h130.499c8.547,0,14.417,6.413,14.417,15.25v16.75h-54.594
|
||||
c-6.229,0-11.835,3.279-14.638,8.573l-12.891,24.474c-0.298,0.562-0.862,0.953-1.375,0.953H9.344z"/>
|
||||
<path fill="#484848" d="M247.347,81.262l-14.7,147.766
|
||||
c-0.086,0.863-0.824,1.65-1.548,1.65H15.792c-0.748,0-1.44-0.667-1.543-1.486L0.013,115.176c-0.05-0.396,0.041-0.719,0.278-0.986
|
||||
c0.168-0.191,0.557-0.512,1.265-0.512h151.291c6.107,0,11.713-3.423,14.639-8.948l12.891-24.474
|
||||
c0.276-0.521,1.053-0.578,1.374-0.578h64.049c0.617,0,0.995,0.275,1.204,0.506C247.273,80.48,247.388,80.844,247.347,81.262z"/>
|
||||
<path fill="#f44336" d="M203.177,188.998c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5c0,8.336-6.781,15.117-15.116,15.117
|
||||
c-4.563,0-8.651-2.041-11.425-5.247c2.581,0.161,5.176-1.011,6.714-3.319c2.298-3.446,1.366-8.103-2.08-10.4l-11.466-7.645
|
||||
c-2.52-1.68-5.801-1.68-8.32,0l-11.467,7.645c-3.446,2.298-4.378,6.954-2.08,10.4c1.445,2.168,3.823,3.341,6.247,3.341
|
||||
c1.43,0,2.875-0.408,4.153-1.261l0.734-0.489c3.561,12.662,15.205,21.976,28.99,21.976
|
||||
C189.667,219.115,203.177,205.604,203.177,188.998z M212.917,154.81c-2.298-3.446-6.954-4.377-10.4-2.08l-0.733,0.489
|
||||
c-3.562-12.662-15.205-21.975-28.99-21.975c-16.606,0-30.117,13.511-30.117,30.117c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5
|
||||
c0-8.336,6.781-15.117,15.117-15.117c4.563,0,8.651,2.041,11.425,5.248c-2.582-0.161-5.177,1.012-6.715,3.319
|
||||
c-2.298,3.446-1.366,8.103,2.08,10.4l11.467,7.645c1.26,0.84,2.71,1.26,4.16,1.26s2.9-0.42,4.16-1.26l11.466-7.645
|
||||
C214.284,162.913,215.215,158.257,212.917,154.81z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
13
3rdparty/easyprofiler/profiler_gui/images/default/reload.svg
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 502.707 502.707" style="enable-background:new 0 0 502.707 502.707;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M203.758,153.541l37.576,73.686L297.03,55.674L125.456,0.022l37.274,73.125
|
||||
C75.002,104.467,12.166,188.054,12.166,286.525c0,101.383,66.546,187.17,158.351,216.161
|
||||
c-55.307-34.902-92.15-96.378-92.15-166.526C78.345,252.788,130.525,182.208,203.758,153.541z"/>
|
||||
<path fill="#f44336" d="M298.993,349.209l-37.598-73.707l-55.631,171.531l171.509,55.674l-37.296-73.147
|
||||
c87.75-31.278,150.564-114.886,150.564-213.4C490.541,114.8,424.017,29.013,332.212,0c55.286,34.902,92.172,96.357,92.172,166.526
|
||||
C424.405,249.941,372.225,320.477,298.993,349.209z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 983 B |
73
3rdparty/easyprofiler/profiler_gui/images/default/save.svg
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512"
|
||||
style="enable-background:new 0 0 512 512;"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="save.svg"><metadata
|
||||
id="metadata49"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs47" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1293"
|
||||
inkscape:window-height="921"
|
||||
id="namedview45"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4609375"
|
||||
inkscape:cx="256"
|
||||
inkscape:cy="256"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" /><g
|
||||
id="g3"
|
||||
transform="matrix(0.87890453,0,0,0.87890625,30,32)"><g
|
||||
id="g5"><g
|
||||
id="g7"><path
|
||||
style="fill:#484848"
|
||||
d="M 506.513,98.709 413.291,5.486 C 409.78,1.974 405.014,0 400.047,0 L 385.77,0 c -3.448,0 -6.244,2.796 -6.244,6.244 l 0,151.114 c 0,10.345 -8.387,18.732 -18.732,18.732 l -209.598,0 c -10.345,0 -18.732,-8.387 -18.732,-18.732 l 0,-151.114 C 132.464,2.796 129.668,0 126.22,0 L 18.732,0 C 8.387,0 0,8.387 0,18.732 L 0,493.269 C 0,503.613 8.387,512 18.732,512 l 474.537,0 c 10.345,0 18.732,-8.387 18.732,-18.732 l 0,-381.314 C 512,106.987 510.027,102.221 506.513,98.709 Z M 400.554,410.226 c 0,10.345 -8.387,18.732 -18.732,18.732 l -251.644,0 c -10.345,0 -18.732,-8.387 -18.732,-18.732 l 0,-147.132 c 0,-10.345 8.387,-18.732 18.732,-18.732 l 251.644,0 c 10.345,0 18.732,8.387 18.732,18.732 l 0,147.132 z"
|
||||
id="path9"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#f44336"
|
||||
d="m 176.172,126.138 159.647,0 c 3.449,0 6.244,-2.796 6.244,-6.244 l 0,-113.65 C 342.063,2.796 339.267,0 335.819,0 L 176.172,0 c -3.448,0 -6.244,2.796 -6.244,6.244 l 0,113.65 c 0,3.448 2.796,6.244 6.244,6.244 z M 275.346,46.27 c 0,-10.345 8.387,-18.732 18.732,-18.732 10.345,0 18.732,8.387 18.732,18.732 l 0,33.598 c 0,10.345 -8.387,18.732 -18.732,18.732 -10.345,0 -18.732,-8.387 -18.732,-18.732 l 0,-33.598 z"
|
||||
id="path11"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#f44336"
|
||||
d="m 318.413,317.93 -124.827,0 c -10.345,0 -18.732,8.387 -18.732,18.732 0,10.345 8.387,18.732 18.732,18.732 l 124.828,0 c 10.345,0 18.73,-8.387 18.73,-18.732 0,-10.345 -8.386,-18.732 -18.731,-18.732 z"
|
||||
id="path13"
|
||||
inkscape:connector-curvature="0" /></g></g></g><g
|
||||
id="g15" /><g
|
||||
id="g17" /><g
|
||||
id="g19" /><g
|
||||
id="g21" /><g
|
||||
id="g23" /><g
|
||||
id="g25" /><g
|
||||
id="g27" /><g
|
||||
id="g29" /><g
|
||||
id="g31" /><g
|
||||
id="g33" /><g
|
||||
id="g35" /><g
|
||||
id="g37" /><g
|
||||
id="g39" /><g
|
||||
id="g41" /><g
|
||||
id="g43" /></svg>
|
After Width: | Height: | Size: 3.5 KiB |
23
3rdparty/easyprofiler/profiler_gui/images/default/search-next.svg
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 47 47" style="enable-background:new 0 0 47 47;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M46.368,43.354l-7.177-7.178c-0.476-0.475-1.117-0.67-1.737-0.604l-1.005-1.006c3.353-3.803,5.204-8.623,5.204-13.736
|
||||
c0-5.563-2.166-10.793-6.1-14.727C31.618,2.167,26.388,0,20.825,0S10.03,2.167,6.097,6.102c-8.122,8.12-8.122,21.335,0,29.457
|
||||
c3.934,3.935,9.164,6.101,14.727,6.101c5.115,0,9.934-1.851,13.738-5.204l1.005,1.005c-0.066,0.62,0.129,1.263,0.604,1.737
|
||||
l7.178,7.177C43.765,46.791,44.312,47,44.857,47s1.094-0.208,1.51-0.626C47.203,45.54,47.203,44.188,46.368,43.354z
|
||||
M20.824,37.386c-4.421,0-8.578-1.722-11.706-4.849c-6.456-6.456-6.456-16.96,0-23.415c3.128-3.127,7.285-4.85,11.707-4.85
|
||||
c4.421,0,8.58,1.723,11.708,4.851c3.127,3.127,4.849,7.285,4.849,11.706c0,4.422-1.723,8.579-4.852,11.706
|
||||
C29.403,35.664,25.245,37.386,20.824,37.386z"/>
|
||||
<path fill="#f44336" d="M33.258,25.352L26.85,20.01c-0.319-0.266-0.764-0.322-1.138-0.147c-0.375,0.176-0.614,0.553-0.614,0.967v2.258h-5.341
|
||||
c-0.59,0-1.068,0.479-1.068,1.068v4.023c0,0.59,0.478,1.068,1.068,1.068h5.341v2.261c0,0.415,0.239,0.792,0.614,0.968
|
||||
c0.146,0.067,0.3,0.102,0.453,0.102c0.245,0,0.488-0.084,0.685-0.248l6.408-5.34c0.243-0.203,0.385-0.504,0.385-0.82
|
||||
S33.501,25.555,33.258,25.352z"/>
|
||||
<path fill="#484848" d="M22.96,17.5v-4.023c0-0.59-0.478-1.068-1.068-1.068h-5.339V10.15c0-0.415-0.24-0.792-0.615-0.968
|
||||
c-0.376-0.175-0.819-0.118-1.137,0.146l-6.411,5.341c-0.244,0.203-0.384,0.503-0.384,0.821c0,0.317,0.141,0.618,0.384,0.821
|
||||
l6.411,5.341c0.195,0.163,0.438,0.248,0.684,0.248c0.154,0,0.309-0.034,0.454-0.101c0.375-0.177,0.615-0.553,0.615-0.968v-2.263
|
||||
h5.339C22.482,18.567,22.96,18.089,22.96,17.5z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
23
3rdparty/easyprofiler/profiler_gui/images/default/search-prev.svg
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 47 47" style="enable-background:new 0 0 47 47;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M46.368,43.354l-7.177-7.178c-0.476-0.475-1.117-0.67-1.737-0.604l-1.005-1.006c3.353-3.803,5.204-8.623,5.204-13.736
|
||||
c0-5.563-2.166-10.793-6.1-14.727C31.618,2.167,26.388,0,20.825,0S10.03,2.167,6.097,6.102c-8.122,8.12-8.122,21.335,0,29.457
|
||||
c3.934,3.935,9.164,6.101,14.727,6.101c5.115,0,9.934-1.851,13.738-5.204l1.005,1.005c-0.066,0.62,0.129,1.263,0.604,1.737
|
||||
l7.178,7.177C43.765,46.791,44.312,47,44.857,47s1.094-0.208,1.51-0.626C47.203,45.54,47.203,44.188,46.368,43.354z
|
||||
M20.824,37.386c-4.421,0-8.578-1.722-11.706-4.849c-6.456-6.456-6.456-16.96,0-23.415c3.128-3.127,7.285-4.85,11.707-4.85
|
||||
c4.421,0,8.58,1.723,11.708,4.851c3.127,3.127,4.849,7.285,4.849,11.706c0,4.422-1.723,8.579-4.852,11.706
|
||||
C29.403,35.664,25.245,37.386,20.824,37.386z"/>
|
||||
<path fill="#484848" d="M33.258,25.352L26.85,20.01c-0.319-0.266-0.764-0.322-1.138-0.147c-0.375,0.176-0.614,0.553-0.614,0.967v2.258h-5.341
|
||||
c-0.59,0-1.068,0.479-1.068,1.068v4.023c0,0.59,0.478,1.068,1.068,1.068h5.341v2.261c0,0.415,0.239,0.792,0.614,0.968
|
||||
c0.146,0.067,0.3,0.102,0.453,0.102c0.245,0,0.488-0.084,0.685-0.248l6.408-5.34c0.243-0.203,0.385-0.504,0.385-0.82
|
||||
S33.501,25.555,33.258,25.352z"/>
|
||||
<path fill="#f44336" d="M22.96,17.5v-4.023c0-0.59-0.478-1.068-1.068-1.068h-5.339V10.15c0-0.415-0.24-0.792-0.615-0.968
|
||||
c-0.376-0.175-0.819-0.118-1.137,0.146l-6.411,5.341c-0.244,0.203-0.384,0.503-0.384,0.821c0,0.317,0.141,0.618,0.384,0.821
|
||||
l6.411,5.341c0.195,0.163,0.438,0.248,0.684,0.248c0.154,0,0.309-0.034,0.454-0.101c0.375-0.177,0.615-0.553,0.615-0.968v-2.263
|
||||
h5.339C22.482,18.567,22.96,18.089,22.96,17.5z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
39
3rdparty/easyprofiler/profiler_gui/images/default/settings.svg
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 932.179 932.179" style="enable-background:new 0 0 932.179 932.179;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M61.2,341.538c4.9,16.8,11.7,33,20.3,48.2l-24.5,30.9c-8,10.1-7.1,24.5,1.9,33.6l42.2,42.2c9.1,9.1,23.5,9.899,33.6,1.899
|
||||
l30.7-24.3c15.8,9.101,32.6,16.2,50.1,21.2l4.6,39.5c1.5,12.8,12.3,22.4,25.1,22.4h59.7c12.8,0,23.6-9.601,25.1-22.4l4.4-38.1
|
||||
c18.8-4.9,36.8-12.2,53.7-21.7l29.7,23.5c10.1,8,24.5,7.1,33.6-1.9l42.2-42.2c9.1-9.1,9.9-23.5,1.9-33.6l-23.1-29.3
|
||||
c9.6-16.601,17.1-34.3,22.1-52.8l35.6-4.1c12.801-1.5,22.4-12.3,22.4-25.1v-59.7c0-12.8-9.6-23.6-22.4-25.1l-35.1-4.1
|
||||
c-4.801-18.3-12-35.8-21.199-52.2l21.6-27.3c8-10.1,7.1-24.5-1.9-33.6l-42.1-42.1c-9.1-9.1-23.5-9.9-33.6-1.9l-26.5,21
|
||||
c-17.2-10.1-35.601-17.8-54.9-23l-4-34.3c-1.5-12.8-12.3-22.4-25.1-22.4h-59.7c-12.8,0-23.6,9.6-25.1,22.4l-4,34.3
|
||||
c-19.8,5.3-38.7,13.3-56.3,23.8l-27.5-21.8c-10.1-8-24.5-7.1-33.6,1.9l-42.2,42.2c-9.1,9.1-9.9,23.5-1.9,33.6l23,29.1
|
||||
c-9.2,16.6-16.2,34.3-20.8,52.7l-36.8,4.2c-12.8,1.5-22.4,12.3-22.4,25.1v59.7c0,12.8,9.6,23.6,22.4,25.1L61.2,341.538z
|
||||
M277.5,180.038c54.4,0,98.7,44.3,98.7,98.7s-44.3,98.7-98.7,98.7c-54.399,0-98.7-44.3-98.7-98.7S223.1,180.038,277.5,180.038z"/>
|
||||
<path fill="#f44336" d="M867.699,356.238l-31.5-26.6c-9.699-8.2-24-7.8-33.199,0.9l-17.4,16.3c-14.699-7.1-30.299-12.1-46.4-15l-4.898-24
|
||||
c-2.5-12.4-14-21-26.602-20l-41.1,3.5c-12.6,1.1-22.5,11.4-22.9,24.1l-0.799,24.4c-15.801,5.7-30.701,13.5-44.301,23.3
|
||||
l-20.799-13.8c-10.602-7-24.701-5-32.9,4.7l-26.6,31.7c-8.201,9.7-7.801,24,0.898,33.2l18.201,19.399
|
||||
c-6.301,14.2-10.801,29.101-13.4,44.4l-26,5.3c-12.4,2.5-21,14-20,26.601l3.5,41.1c1.1,12.6,11.4,22.5,24.1,22.9l28.1,0.899
|
||||
c5.102,13.4,11.801,26.101,19.9,38l-15.699,23.7c-7,10.6-5,24.7,4.699,32.9l31.5,26.6c9.701,8.2,24,7.8,33.201-0.9l20.6-19.3
|
||||
c13.5,6.3,27.699,11,42.299,13.8l5.701,28.2c2.5,12.4,14,21,26.6,20l41.1-3.5c12.6-1.1,22.5-11.399,22.9-24.1l0.9-27.601
|
||||
c15-5.3,29.199-12.5,42.299-21.399l22.701,15c10.6,7,24.699,5,32.9-4.7l26.6-31.5c8.199-9.7,7.799-24-0.9-33.2l-18.301-19.399
|
||||
c6.701-14.2,11.602-29.2,14.4-44.601l25-5.1c12.4-2.5,21-14,20-26.601l-3.5-41.1c-1.1-12.6-11.4-22.5-24.1-22.9l-25.1-0.8
|
||||
c-5.201-14.6-12.201-28.399-20.9-41.2l13.699-20.6C879.4,378.638,877.4,364.438,867.699,356.238z M712.801,593.837
|
||||
c-44.4,3.801-83.602-29.3-87.301-73.699c-3.801-44.4,29.301-83.601,73.699-87.301c44.4-3.8,83.602,29.301,87.301,73.7
|
||||
C790.301,550.938,757.199,590.138,712.801,593.837z"/>
|
||||
<path fill="#484848" d="M205,704.438c-12.6,1.3-22.3,11.899-22.4,24.6l-0.3,25.3c-0.2,12.7,9.2,23.5,21.8,25.101l18.6,2.399
|
||||
c3.1,11.301,7.5,22.101,13.2,32.301l-12,14.8c-8,9.899-7.4,24.1,1.5,33.2l17.7,18.1c8.9,9.1,23.1,10.1,33.2,2.3l14.899-11.5
|
||||
c10.5,6.2,21.601,11.101,33.2,14.5l2,19.2c1.3,12.6,11.9,22.3,24.6,22.4l25.301,0.3c12.699,0.2,23.5-9.2,25.1-21.8l2.3-18.2
|
||||
c12.601-3.101,24.601-7.8,36-14l14,11.3c9.9,8,24.101,7.4,33.201-1.5l18.1-17.7c9.1-8.899,10.1-23.1,2.301-33.2L496.6,818.438
|
||||
c6.6-11,11.701-22.7,15.201-35l16.6-1.7c12.6-1.3,22.299-11.9,22.4-24.6l0.299-25.301c0.201-12.699-9.199-23.5-21.799-25.1
|
||||
l-16.201-2.1c-3.1-12.2-7.699-24-13.699-35l10.1-12.4c8-9.9,7.4-24.1-1.5-33.2l-17.699-18.1c-8.9-9.101-23.102-10.101-33.201-2.3
|
||||
l-12.101,9.3c-11.399-6.9-23.6-12.2-36.399-15.8l-1.601-15.7c-1.3-12.601-11.899-22.3-24.6-22.4l-25.3-0.3
|
||||
c-12.7-0.2-23.5,9.2-25.101,21.8l-2,15.601c-13.199,3.399-25.899,8.6-37.699,15.399l-12.5-10.2c-9.9-8-24.101-7.399-33.201,1.5
|
||||
l-18.2,17.801c-9.1,8.899-10.1,23.1-2.3,33.199l10.7,13.801c-6.2,11-11.1,22.699-14.3,35L205,704.438z M368.3,675.837
|
||||
c36.3,0.4,65.399,30.301,65,66.601c-0.4,36.3-30.301,65.399-66.601,65c-36.3-0.4-65.399-30.3-65-66.601
|
||||
C302.1,704.538,332,675.438,368.3,675.837z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.0 KiB |
14
3rdparty/easyprofiler/profiler_gui/images/default/statistics.svg
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 372.465 372.465" style="enable-background:new 0 0 372.465 372.465;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M101.98,186.441H30.484c-5.523,0-10,4.477-10,10v166.021c0,5.523,4.477,10,10,10h71.496c5.523,0,10-4.477,10-10V196.441
|
||||
C111.98,190.919,107.503,186.441,101.98,186.441z"/>
|
||||
<path fill="#f44336" d="M221.98,0h-71.496c-5.523,0-10,4.477-10,10v352.465c0,5.521,4.477,10,10,10h71.496c5.523,0,10-4.479,10-10V10
|
||||
C231.98,4.477,227.504,0,221.98,0z"/>
|
||||
<path fill="#484848" d="M341.98,115.257h-71.496c-5.523,0-10,4.477-10,10v237.208c0,5.521,4.477,10,10,10h71.496c5.523,0,10-4.479,10-10V125.257
|
||||
C351.98,119.734,347.504,115.257,341.98,115.257z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
16
3rdparty/easyprofiler/profiler_gui/images/default/statistics2.svg
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 482 482" style="enable-background:new 0 0 482 482;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M123.7,216.8H13.5c-7.5,0-13.5,6-13.5,13.5v225.4c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V230.3
|
||||
C137.2,222.8,131.2,216.8,123.7,216.8z M110.2,442.2H27V243.8h83.2V442.2z"/>
|
||||
<path fill="#484848" d="M296.1,12.8H185.9c-7.5,0-13.5,6-13.5,13.5v429.4c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V26.3
|
||||
C309.6,18.9,303.6,12.8,296.1,12.8z M199.4,39.8h25.3l-25.3,25.3V39.8z M282.6,442.2h-22.7l22.7-22.7V442.2z M282.6,381.3
|
||||
c-0.1,0.1-0.1,0.1-0.2,0.2l-60.7,60.7h-22.3v-37.5l83.2-83.2L282.6,381.3L282.6,381.3z M282.6,283.4c-0.1,0.1-0.1,0.1-0.2,0.2
|
||||
l-83,83v-67.7l83.2-83.2L282.6,283.4L282.6,283.4z M282.6,177.5c-0.1,0.1-0.1,0.1-0.2,0.2l-83,83v-57.5l83.2-83.2L282.6,177.5
|
||||
L282.6,177.5z M282.6,81.8c-0.1,0.1-0.1,0.1-0.2,0.2l-83,83v-61.7l63.1-63.1c0.1-0.1,0.2-0.3,0.4-0.4h19.7V81.8z"/>
|
||||
<path fill="#484848" d="M468.5,153H358.3c-7.5,0-13.5,6-13.5,13.5v289.2c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V166.5
|
||||
C482,159,475.9,153,468.5,153z M455,442.2h-83.2V180H455V442.2z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
11
3rdparty/easyprofiler/profiler_gui/images/default/stop.svg
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#f44336" d="M178.5,357h-25.5V153h204V357z"/>
|
||||
<path fill="#484848" d="M255,0C114.75,0,0,114.75,0,255s114.75,255,255,255s255-114.75,255-255S395.25,0,255,0z
|
||||
M255,459c-112.2,0-204-91.8-204-204S142.8,51,255,51s204,91.8,204,204S367.2,459,255,459z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 741 B |
18
3rdparty/easyprofiler/profiler_gui/images/default/wifi.svg
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 233.576 233.576" style="enable-background:new 0 0 233.576 233.576;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M176.982,129.274c-16.066-16.113-37.442-24.986-60.193-24.986s-44.128,8.873-60.193,24.986l-21.244-21.182
|
||||
c21.735-21.799,50.657-33.805,81.438-33.805c30.781,0,59.703,12.005,81.438,33.805L176.982,129.274z"/>
|
||||
<path fill="#484848" d="M116.788,54.288
|
||||
c36.109,0,70.045,14.076,95.554,39.636l21.234-21.192c-31.178-31.239-72.654-48.444-116.788-48.444
|
||||
C72.653,24.288,31.178,41.493,0,72.732l21.234,21.192C46.743,68.364,80.678,54.288,116.788,54.288z"/>
|
||||
<path fill="#484848" d="M162.885,143.465
|
||||
c-12.293-12.367-28.664-19.177-46.097-19.177c-17.432,0-33.803,6.811-46.097,19.177l21.275,21.151
|
||||
c6.621-6.66,15.437-10.328,24.821-10.328c9.386,0,18.2,3.667,24.819,10.327L162.885,143.465z"/>
|
||||
<path fill="#f44336" d="M116.788,169.288
|
||||
c-11.046,0-20,8.954-20,20s8.954,20,20,20c11.044,0,20-8.954,20-20S127.832,169.288,116.788,169.288z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
18
3rdparty/easyprofiler/profiler_gui/images/default/wifi_on.svg
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 233.576 233.576" style="enable-background:new 0 0 233.576 233.576;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#4caf50" d="M176.982,129.274c-16.066-16.113-37.442-24.986-60.193-24.986s-44.128,8.873-60.193,24.986l-21.244-21.182
|
||||
c21.735-21.799,50.657-33.805,81.438-33.805c30.781,0,59.703,12.005,81.438,33.805L176.982,129.274z"/>
|
||||
<path fill="#4caf50" d="M116.788,54.288
|
||||
c36.109,0,70.045,14.076,95.554,39.636l21.234-21.192c-31.178-31.239-72.654-48.444-116.788-48.444
|
||||
C72.653,24.288,31.178,41.493,0,72.732l21.234,21.192C46.743,68.364,80.678,54.288,116.788,54.288z"/>
|
||||
<path fill="#4caf50" d="M162.885,143.465
|
||||
c-12.293-12.367-28.664-19.177-46.097-19.177c-17.432,0-33.803,6.811-46.097,19.177l21.275,21.151
|
||||
c6.621-6.66,15.437-10.328,24.821-10.328c9.386,0,18.2,3.667,24.819,10.327L162.885,143.465z"/>
|
||||
<path fill="#f44336" d="M116.788,169.288
|
||||
c-11.046,0-20,8.954-20,20s8.954,20,20,20c11.044,0,20-8.954,20-20S127.832,169.288,116.788,169.288z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
BIN
3rdparty/easyprofiler/profiler_gui/images/logo.ico
vendored
Normal file
After Width: | Height: | Size: 175 KiB |
18
3rdparty/easyprofiler/profiler_gui/images/logo.svg
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 705.299 705.299" style="enable-background:new 0 0 705.299 705.299;" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#484848" d="M395.233,117.99V91.598l64.906,0.023v-5.55C460.151,38.549,421.636,0,374.08,0h-62.632
|
||||
c-47.511,0-86.06,38.549-86.06,86.071v5.515l66.343,0.023v26.163C152.565,141.993,46.651,263.051,46.651,409.157
|
||||
c0,163.594,132.571,296.142,296.107,296.142c163.537,0,296.107-132.548,296.107-296.142
|
||||
C638.876,263.557,533.698,142.786,395.233,117.99z M342.758,637.52c-125.907,0-228.339-102.433-228.339-228.362
|
||||
c0-125.896,102.433-228.305,228.339-228.305c125.895,0,228.339,102.41,228.339,228.305
|
||||
C571.097,535.087,468.665,637.52,342.758,637.52z"/>
|
||||
<path fill="#f44336" d="M651.987,153.333l-48.017-48.028c-4.274-4.286-10.065-6.688-16.098-6.688s-11.823,2.401-16.097,6.665l-38.929,38.939
|
||||
l80.246,80.2l38.894-38.917C660.869,176.612,660.869,162.227,651.987,153.333z"/>
|
||||
<path fill="#f44336" d="M341.724,195.237c-117.714,0.54-212.966,96.125-212.966,213.92c0,118.231,95.815,214.022,214.012,214.022
|
||||
c118.185,0,213.989-95.769,214-214H341.724V195.237z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
74
3rdparty/easyprofiler/profiler_gui/main.cpp
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
/************************************************************************
|
||||
* file name : main.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2016/04/29
|
||||
* authors : Sergey Yagovtsev, Victor Zarubkin
|
||||
* email : yse.sey@gmail.com, v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : Main file for EasyProfiler GUI.
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include <chrono>
|
||||
#include <QApplication>
|
||||
#include "main_window.h"
|
||||
#include "globals.h"
|
||||
|
||||
#if defined(_WIN32) && defined (_BUILD_RELEASE_)
|
||||
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
|
||||
#endif
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
auto now = ::std::chrono::duration_cast<std::chrono::seconds>(::std::chrono::system_clock::now().time_since_epoch()).count() >> 1;
|
||||
srand((unsigned int)now);
|
||||
|
||||
QApplication app(argc, argv);
|
||||
|
||||
//Instanciate easy globals after QApplication to allow creation of global fonts, and on the main thread to avoid data races
|
||||
profiler_gui::EasyGlobals::instance();
|
||||
|
||||
EasyMainWindow window;
|
||||
window.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
2982
3rdparty/easyprofiler/profiler_gui/main_window.cpp
vendored
Normal file
335
3rdparty/easyprofiler/profiler_gui/main_window.h
vendored
Normal file
@@ -0,0 +1,335 @@
|
||||
/************************************************************************
|
||||
* file name : main_window.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/06/26
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of MainWindow for easy_profiler GUI.
|
||||
* ----------------- :
|
||||
* change log : * 2016/06/26 Victor Zarubkin: initial commit.
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_PROFILER_GUI__MAIN_WINDOW__H
|
||||
#define EASY_PROFILER_GUI__MAIN_WINDOW__H
|
||||
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <atomic>
|
||||
#include <sstream>
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QDockWidget>
|
||||
#include <QTimer>
|
||||
#include <QStringList>
|
||||
|
||||
#include <easy/easy_socket.h>
|
||||
#include <easy/reader.h>
|
||||
|
||||
#ifdef max
|
||||
#undef max
|
||||
#endif
|
||||
|
||||
#ifdef min
|
||||
#undef min
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define EASY_GUI_USE_DESCRIPTORS_DOCK_WINDOW 0
|
||||
|
||||
namespace profiler { namespace net { struct EasyProfilerStatus; } }
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyFileReader Q_DECL_FINAL
|
||||
{
|
||||
::profiler::SerializedData m_serializedBlocks; ///<
|
||||
::profiler::SerializedData m_serializedDescriptors; ///<
|
||||
::profiler::descriptors_list_t m_descriptors; ///<
|
||||
::profiler::blocks_t m_blocks; ///<
|
||||
::profiler::thread_blocks_tree_t m_blocksTree; ///<
|
||||
::std::stringstream m_stream; ///<
|
||||
::std::stringstream m_errorMessage; ///<
|
||||
QString m_filename; ///<
|
||||
uint32_t m_descriptorsNumberInFile = 0; ///<
|
||||
uint32_t m_version = 0; ///<
|
||||
::std::thread m_thread; ///<
|
||||
::std::atomic_bool m_bDone; ///<
|
||||
::std::atomic<int> m_progress; ///<
|
||||
::std::atomic<unsigned int> m_size; ///<
|
||||
bool m_isFile = false; ///<
|
||||
|
||||
public:
|
||||
|
||||
EasyFileReader();
|
||||
~EasyFileReader();
|
||||
|
||||
const bool isFile() const;
|
||||
bool done() const;
|
||||
int progress() const;
|
||||
unsigned int size() const;
|
||||
const QString& filename() const;
|
||||
|
||||
void load(const QString& _filename);
|
||||
void load(::std::stringstream& _stream);
|
||||
void interrupt();
|
||||
void get(::profiler::SerializedData& _serializedBlocks, ::profiler::SerializedData& _serializedDescriptors,
|
||||
::profiler::descriptors_list_t& _descriptors, ::profiler::blocks_t& _blocks, ::profiler::thread_blocks_tree_t& _tree,
|
||||
uint32_t& _descriptorsNumberInFile, uint32_t& _version, QString& _filename);
|
||||
|
||||
QString getError();
|
||||
|
||||
}; // END of class EasyFileReader.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum EasyListenerRegime : uint8_t
|
||||
{
|
||||
LISTENER_IDLE = 0,
|
||||
LISTENER_CAPTURE,
|
||||
LISTENER_CAPTURE_RECEIVE,
|
||||
LISTENER_DESCRIBE
|
||||
};
|
||||
|
||||
class EasySocketListener Q_DECL_FINAL
|
||||
{
|
||||
EasySocket m_easySocket; ///<
|
||||
::std::string m_address; ///<
|
||||
::std::stringstream m_receivedData; ///<
|
||||
::std::thread m_thread; ///<
|
||||
uint64_t m_receivedSize; ///<
|
||||
uint16_t m_port; ///<
|
||||
::std::atomic<uint32_t> m_frameMax; ///<
|
||||
::std::atomic<uint32_t> m_frameAvg; ///<
|
||||
::std::atomic_bool m_bInterrupt; ///<
|
||||
::std::atomic_bool m_bConnected; ///<
|
||||
::std::atomic_bool m_bStopReceive; ///<
|
||||
::std::atomic_bool m_bCaptureReady; ///<
|
||||
::std::atomic_bool m_bFrameTimeReady; ///<
|
||||
EasyListenerRegime m_regime; ///<
|
||||
|
||||
public:
|
||||
|
||||
EasySocketListener();
|
||||
~EasySocketListener();
|
||||
|
||||
bool connected() const;
|
||||
bool captured() const;
|
||||
EasyListenerRegime regime() const;
|
||||
uint64_t size() const;
|
||||
const ::std::string& address() const;
|
||||
uint16_t port() const;
|
||||
|
||||
::std::stringstream& data();
|
||||
void clearData();
|
||||
|
||||
void disconnect();
|
||||
void closeSocket();
|
||||
bool connect(const char* _ipaddress, uint16_t _port, ::profiler::net::EasyProfilerStatus& _reply, bool _disconnectFirst = false);
|
||||
bool reconnect(const char* _ipaddress, uint16_t _port, ::profiler::net::EasyProfilerStatus& _reply);
|
||||
|
||||
bool startCapture();
|
||||
void stopCapture();
|
||||
void finalizeCapture();
|
||||
void requestBlocksDescription();
|
||||
|
||||
bool frameTime(uint32_t& _maxTime, uint32_t& _avgTime);
|
||||
bool requestFrameTime();
|
||||
|
||||
template <class T>
|
||||
inline void send(const T& _message)
|
||||
{
|
||||
m_easySocket.send(&_message, sizeof(T));
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
void listenCapture();
|
||||
void listenDescription();
|
||||
void listenFrameTime();
|
||||
|
||||
}; // END of class EasySocketListener.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyDockWidget : public QDockWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit EasyDockWidget(const QString& title, QWidget* parent = nullptr);
|
||||
~EasyDockWidget() override;
|
||||
};
|
||||
|
||||
class EasyMainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
protected:
|
||||
|
||||
typedef EasyMainWindow This;
|
||||
typedef QMainWindow Parent;
|
||||
|
||||
QStringList m_lastFiles;
|
||||
QString m_theme;
|
||||
QString m_lastAddress;
|
||||
QDockWidget* m_treeWidget = nullptr;
|
||||
QDockWidget* m_graphicsView = nullptr;
|
||||
QDockWidget* m_fpsViewer = nullptr;
|
||||
|
||||
#if EASY_GUI_USE_DESCRIPTORS_DOCK_WINDOW != 0
|
||||
QDockWidget* m_descTreeWidget = nullptr;
|
||||
#endif
|
||||
|
||||
class QProgressDialog* m_progress = nullptr;
|
||||
class QDialog* m_descTreeDialog = nullptr;
|
||||
class EasyDescWidget* m_dialogDescTree = nullptr;
|
||||
class QMessageBox* m_listenerDialog = nullptr;
|
||||
QTimer m_readerTimer;
|
||||
QTimer m_listenerTimer;
|
||||
QTimer m_fpsRequestTimer;
|
||||
::profiler::SerializedData m_serializedBlocks;
|
||||
::profiler::SerializedData m_serializedDescriptors;
|
||||
EasyFileReader m_reader;
|
||||
EasySocketListener m_listener;
|
||||
|
||||
class QLineEdit* m_addressEdit = nullptr;
|
||||
class QLineEdit* m_portEdit = nullptr;
|
||||
class QLineEdit* m_frameTimeEdit = nullptr;
|
||||
|
||||
class QMenu* m_loadActionMenu = nullptr;
|
||||
class QAction* m_saveAction = nullptr;
|
||||
class QAction* m_deleteAction = nullptr;
|
||||
|
||||
class QAction* m_captureAction = nullptr;
|
||||
class QAction* m_connectAction = nullptr;
|
||||
class QAction* m_eventTracingEnableAction = nullptr;
|
||||
class QAction* m_eventTracingPriorityAction = nullptr;
|
||||
|
||||
uint32_t m_descriptorsNumberInFile = 0;
|
||||
uint16_t m_lastPort = 0;
|
||||
bool m_bNetworkFileRegime = false;
|
||||
bool m_bOpenedCacheFile = false;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyMainWindow();
|
||||
~EasyMainWindow() override;
|
||||
|
||||
// Public virtual methods
|
||||
|
||||
void closeEvent(QCloseEvent* close_event) override;
|
||||
void dragEnterEvent(QDragEnterEvent* drag_event) override;
|
||||
void dragMoveEvent(QDragMoveEvent* drag_event) override;
|
||||
void dragLeaveEvent(QDragLeaveEvent* drag_event) override;
|
||||
void dropEvent(QDropEvent* drop_event) override;
|
||||
|
||||
protected slots:
|
||||
|
||||
void onThemeChange(bool);
|
||||
void onOpenFileClicked(bool);
|
||||
void onSaveFileClicked(bool);
|
||||
void onDeleteClicked(bool);
|
||||
void onExitClicked(bool);
|
||||
void onEncodingChanged(bool);
|
||||
void onChronoTextPosChanged(bool);
|
||||
void onUnitsChanged(bool);
|
||||
void onEnableDisableStatistics(bool);
|
||||
void onCollapseItemsAfterCloseChanged(bool);
|
||||
void onAllItemsExpandedByDefaultChange(bool);
|
||||
void onBindExpandStatusChange(bool);
|
||||
void onHierarchyFlagChange(bool);
|
||||
void onExpandAllClicked(bool);
|
||||
void onCollapseAllClicked(bool);
|
||||
void onSpacingChange(int _value);
|
||||
void onMinSizeChange(int _value);
|
||||
void onNarrowSizeChange(int _value);
|
||||
void onFpsIntervalChange(int _value);
|
||||
void onFpsHistoryChange(int _value);
|
||||
void onFpsMonitorLineWidthChange(int _value);
|
||||
void onFileReaderTimeout();
|
||||
void onFrameTimeRequestTimeout();
|
||||
void onListenerTimerTimeout();
|
||||
void onFileReaderCancel();
|
||||
void onEditBlocksClicked(bool);
|
||||
void onDescTreeDialogClose(int);
|
||||
void onListenerDialogClose(int);
|
||||
void onCaptureClicked(bool);
|
||||
void onGetBlockDescriptionsClicked(bool);
|
||||
void onConnectClicked(bool);
|
||||
void onEventTracingPriorityChange(bool _checked);
|
||||
void onEventTracingEnableChange(bool _checked);
|
||||
void onFrameTimeEditFinish();
|
||||
void onFrameTimeChanged();
|
||||
|
||||
void onBlockStatusChange(::profiler::block_id_t _id, ::profiler::EasyBlockStatus _status);
|
||||
|
||||
void checkFrameTimeReady();
|
||||
|
||||
private:
|
||||
|
||||
// Private non-virtual methods
|
||||
|
||||
void clear();
|
||||
|
||||
void refreshDiagram();
|
||||
|
||||
void addFileToList(const QString& filename);
|
||||
void loadFile(const QString& filename);
|
||||
void readStream(::std::stringstream& data);
|
||||
|
||||
void loadSettings();
|
||||
void loadGeometry();
|
||||
void saveSettingsAndGeometry();
|
||||
|
||||
void setDisconnected(bool _showMessage = true);
|
||||
|
||||
void destroyProgressDialog();
|
||||
void createProgressDialog(const QString& text);
|
||||
|
||||
}; // END of class EasyMainWindow.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_PROFILER_GUI__MAIN_WINDOW__H
|
51
3rdparty/easyprofiler/profiler_gui/resources.qrc
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="/themes">
|
||||
<file alias="default">themes/default.css</file>
|
||||
</qresource>
|
||||
<qresource prefix="/images">
|
||||
<file alias="logo">images/logo.svg</file>
|
||||
</qresource>
|
||||
<qresource prefix="/images/default">
|
||||
<file alias="exit">images/default/off.svg</file>
|
||||
<file alias="open">images/default/open-folder2.svg</file>
|
||||
<file alias="reopen">images/default/reload-folder2.svg</file>
|
||||
<file alias="reload">images/default/reload.svg</file>
|
||||
<file alias="expand">images/default/expand.svg</file>
|
||||
<file alias="collapse">images/default/collapse.svg</file>
|
||||
<file alias="save">images/default/save.svg</file>
|
||||
<file alias="stats">images/default/statistics.svg</file>
|
||||
<file alias="stats-off">images/default/statistics2.svg</file>
|
||||
<file alias="lan">images/default/lan.svg</file>
|
||||
<file alias="lan-on">images/default/lan_on.svg</file>
|
||||
<file alias="wifi">images/default/wifi.svg</file>
|
||||
<file alias="wifi-on">images/default/wifi_on.svg</file>
|
||||
<file alias="connect">images/default/lan.svg</file>
|
||||
<file alias="connected">images/default/lan_on.svg</file>
|
||||
<file alias="start">images/default/play.svg</file>
|
||||
<file alias="stop">images/default/stop.svg</file>
|
||||
<file alias="delete">images/default/delete.svg</file>
|
||||
<file alias="list">images/default/list.svg</file>
|
||||
<file alias="find-next">images/default/search-next.svg</file>
|
||||
<file alias="find-prev">images/default/search-prev.svg</file>
|
||||
<file alias="settings">images/default/settings.svg</file>
|
||||
<file alias="check">images/default/check.svg</file>
|
||||
<file alias="check-disabled">images/default/check-disabled.svg</file>
|
||||
<file alias="radio-check">images/default/radio-indicator.svg</file>
|
||||
<file alias="radio-check-disabled">images/default/radio-indicator-disabled.svg</file>
|
||||
<file alias="dock-maximize-white">images/default/maximize-white.svg</file>
|
||||
<file alias="dock-maximize-white-hover">images/default/maximize-white-hover.svg</file>
|
||||
<file alias="dock-maximize-white-pressed">images/default/maximize-white-pressed.svg</file>
|
||||
<file alias="dock-minimize-white">images/default/minimize-white.svg</file>
|
||||
<file alias="dock-minimize-white-hover">images/default/minimize-white-hover.svg</file>
|
||||
<file alias="dock-minimize-white-pressed">images/default/minimize-white-pressed.svg</file>
|
||||
<file alias="dock-close-white">images/default/close-white.svg</file>
|
||||
<file alias="dock-close-white-hover">images/default/close-white-hover.svg</file>
|
||||
<file alias="dock-close-white-pressed">images/default/close-white-pressed.svg</file>
|
||||
<file alias="arrow-up">images/default/arrow-up.svg</file>
|
||||
<file alias="arrow-up-hover">images/default/arrow-up-hover.svg</file>
|
||||
<file alias="arrow-up-disabled">images/default/arrow-up-disabled.svg</file>
|
||||
<file alias="arrow-down">images/default/arrow-down.svg</file>
|
||||
<file alias="arrow-down-hover">images/default/arrow-down-hover.svg</file>
|
||||
<file alias="arrow-down-disabled">images/default/arrow-down-disabled.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
33
3rdparty/easyprofiler/profiler_gui/resources.rc
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
IDI_ICON1 ICON DISCARDABLE "images/logo.ico"
|
||||
1 VERSIONINFO
|
||||
FILEVERSION EASY_PROFILER_VERSION_MAJOR, EASY_PROFILER_VERSION_MINOR, EASY_PROFILER_VERSION_PATCH
|
||||
PRODUCTVERSION EASY_PROFILER_VERSION_MAJOR, EASY_PROFILER_VERSION_MINOR, EASY_PROFILER_VERSION_PATCH
|
||||
|
||||
# define EASY_STRINGIFY(a) #a
|
||||
# define EASY_STRINGIFICATION(a) EASY_STRINGIFY(a)
|
||||
|
||||
#define EASY_PROFILER_PRODUCT_VERSION "v" EASY_STRINGIFICATION(EASY_PROFILER_VERSION_MAJOR) "." \
|
||||
EASY_STRINGIFICATION(EASY_PROFILER_VERSION_MINOR) "." \
|
||||
EASY_STRINGIFICATION(EASY_PROFILER_VERSION_PATCH)
|
||||
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "080904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "EasySolutions"
|
||||
VALUE "FileDescription", "EasyProfiler"
|
||||
VALUE "InternalName", "profiler_gui"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2016-2017 Victor Zarubkin, Sergey Yagovtsev"
|
||||
VALUE "LegalTrademarks1", "All Rights Reserved"
|
||||
VALUE "LegalTrademarks2", "All Rights Reserved"
|
||||
VALUE "OriginalFilename", "profiler_gui.exe"
|
||||
VALUE "ProductName", "easy_profiler gui application"
|
||||
VALUE "ProductVersion", EASY_PROFILER_PRODUCT_VERSION
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x809, 1200
|
||||
END
|
||||
END
|
358
3rdparty/easyprofiler/profiler_gui/themes/default.css
vendored
Normal file
@@ -0,0 +1,358 @@
|
||||
/**********************************
|
||||
* *
|
||||
* Light theme for EasyProfiler. *
|
||||
* *
|
||||
* Automatically generated from *
|
||||
* default.scss by pysassc tool *
|
||||
* *
|
||||
***********************************/
|
||||
/* ****************************************************************************************************************** */
|
||||
/* Functions */
|
||||
/* ****************************************************************************************************************** */
|
||||
/* Constants */
|
||||
/* ****************************************************************************************************************** */
|
||||
/* StyleSheet */
|
||||
* {
|
||||
font-family: "DejaVu Sans";
|
||||
font-size: 13px;
|
||||
color: #504040; }
|
||||
|
||||
*:disabled {
|
||||
color: #a08888; }
|
||||
|
||||
EasyMainWindow, QToolBar, QDialog {
|
||||
background-color: #f8f2f2; }
|
||||
|
||||
QToolTip {
|
||||
background-color: #ffeccc;
|
||||
border: 1px solid #cccccc; }
|
||||
|
||||
QGraphicsView {
|
||||
border: 1px solid #cccccc; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QLineEdit, QComboBox, QSpinBox {
|
||||
height: 24px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: white;
|
||||
selection-background-color: rgba(152, 222, 152, 0.5);
|
||||
selection-color: #504040; }
|
||||
|
||||
QLineEdit:disabled, QComboBox:disabled, QSpinBox:disabled {
|
||||
background-color: #f0f0f0;
|
||||
color: #a08888;
|
||||
selection-background-color: rgba(152, 222, 152, 0.5);
|
||||
selection-color: #a08888; }
|
||||
|
||||
QLineEdit:focus {
|
||||
border: 1px solid #ffbcbc; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QComboBox::drop-down {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 24px;
|
||||
border: none;
|
||||
margin-left: 0; }
|
||||
|
||||
QComboBox::down-arrow {
|
||||
image: url(":/images/default/arrow-down");
|
||||
height: 8px;
|
||||
width: 8px; }
|
||||
|
||||
QComboBox::down-arrow:hover {
|
||||
image: url(":/images/default/arrow-down-hover"); }
|
||||
|
||||
QComboBox::down-arrow:disabled {
|
||||
image: url(":/images/default/arrow-down-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QSpinBox::up-button {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
margin-left: 5px;
|
||||
width: 24px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-bottom: 1px solid #cccccc; }
|
||||
|
||||
QSpinBox::down-button {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: bottom right;
|
||||
margin-left: 5px;
|
||||
width: 24px;
|
||||
border-left: 1px solid #cccccc; }
|
||||
|
||||
QSpinBox::up-button:pressed, QSpinBox::down-button:pressed {
|
||||
background-color: #f4f4f4; }
|
||||
|
||||
QSpinBox::up-arrow {
|
||||
image: url(":/images/default/arrow-up");
|
||||
height: 8px;
|
||||
width: 8px; }
|
||||
|
||||
QSpinBox::up-arrow:hover {
|
||||
image: url(":/images/default/arrow-up-hover"); }
|
||||
|
||||
QSpinBox::up-arrow:disabled {
|
||||
image: url(":/images/default/arrow-up-disabled"); }
|
||||
|
||||
QSpinBox::down-arrow {
|
||||
image: url(":/images/default/arrow-down");
|
||||
height: 8px;
|
||||
width: 8px; }
|
||||
|
||||
QSpinBox::down-arrow:hover {
|
||||
image: url(":/images/default/arrow-down-hover"); }
|
||||
|
||||
QSpinBox::down-arrow:disabled {
|
||||
image: url(":/images/default/arrow-down-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QPushButton {
|
||||
height: 24px;
|
||||
min-width: 50px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: white;
|
||||
padding: 0 5px 0 5px; }
|
||||
|
||||
QPushButton:disabled {
|
||||
background-color: #f0f0f0;
|
||||
color: #a08888; }
|
||||
|
||||
QPushButton:hover {
|
||||
border: 1px solid #ffbcbc;
|
||||
color: #922c2c; }
|
||||
|
||||
QPushButton:pressed {
|
||||
border: 1px solid #922c2c;
|
||||
color: #370400; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QListView {
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc; }
|
||||
|
||||
QListView, QTableView, QTreeView {
|
||||
alternate-background-color: #e4e4ec;
|
||||
selection-background-color: rgba(152, 222, 152, 0.8);
|
||||
selection-color: #504040; }
|
||||
|
||||
QListView::item, QTableView::item, QTreeView::item {
|
||||
height: 26px;
|
||||
border-bottom: 1px solid #cccccc; }
|
||||
|
||||
QListView::item:selected, QTableView::item:selected, QTreeView::item:selected {
|
||||
background-color: rgba(152, 222, 152, 0.8); }
|
||||
|
||||
QTreeView::indicator {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
padding: 1px;
|
||||
margin: 0; }
|
||||
|
||||
QTreeView::indicator:hover, QTreeView::indicator:checked {
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc; }
|
||||
|
||||
QTreeView::indicator:checked {
|
||||
image: url(":/images/default/check"); }
|
||||
|
||||
QTreeView::indicator:checked:disabled {
|
||||
image: url(":/images/default/check-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QMenu {
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px; }
|
||||
|
||||
QMenu::item {
|
||||
height: 24px;
|
||||
padding: 0 16px 0 25px;
|
||||
border: 1px solid transparent;
|
||||
/* reserve space for selection border */ }
|
||||
|
||||
QMenu::item:selected {
|
||||
border: 1px solid rgba(152, 222, 152, 0.5);
|
||||
background-color: rgba(152, 222, 152, 0.5); }
|
||||
|
||||
QMenu::icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background: none;
|
||||
border: 1px inset transparent;
|
||||
padding: 1px;
|
||||
margin-left: 2px; }
|
||||
|
||||
QMenu::icon:checked {
|
||||
/* appearance of a 'checked' icon */
|
||||
background-color: #dddddd;
|
||||
border: 1px inset #aaaaaa; }
|
||||
|
||||
QMenu::separator {
|
||||
height: 1px;
|
||||
background: #cccccc;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px; }
|
||||
|
||||
QMenu::indicator {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc;
|
||||
margin-left: 2px;
|
||||
padding: 1px; }
|
||||
|
||||
QMenu::indicator:non-exclusive:checked {
|
||||
image: url(":/images/default/check"); }
|
||||
|
||||
QMenu::indicator:non-exclusive:checked:disabled {
|
||||
image: url(":/images/default/check-disabled"); }
|
||||
|
||||
QMenu::indicator:exclusive {
|
||||
border-radius: 8px; }
|
||||
|
||||
QMenu::indicator:exclusive:checked {
|
||||
image: url(":/images/default/radio-check"); }
|
||||
|
||||
QMenu::indicator:exclusive:checked:disabled {
|
||||
image: url(":/images/default/radio-check-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
/*QToolButton {
|
||||
border: 1px solid transparent;
|
||||
background: none;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
QToolButton:hover {
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QToolButton[popupMode="1"] {
|
||||
padding-right: 13px;
|
||||
}
|
||||
|
||||
QToolButton:pressed {
|
||||
background-color: #808080;
|
||||
}
|
||||
|
||||
QToolButton::menu-button {
|
||||
border: none;
|
||||
border-left: 1px solid transparent;
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
QToolButton::menu-button:hover {
|
||||
border-left: 1px solid $BorderColor;
|
||||
background-color: #bbbbbb;
|
||||
}
|
||||
|
||||
QToolButton::menu-button:pressed {
|
||||
border-left: 1px solid $BorderColor;
|
||||
background-color: #808080;
|
||||
}*/
|
||||
/* ****************************************************************************************************************** */
|
||||
QHeaderView::section {
|
||||
height: 28px;
|
||||
width: 96px;
|
||||
min-width: 64px;
|
||||
background: #eeeeee; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle {
|
||||
background-color: #686464; }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QLabel {
|
||||
color: white;
|
||||
margin-left: 4px; }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton {
|
||||
background: none;
|
||||
border: none;
|
||||
max-height: 12px;
|
||||
min-width: 12px;
|
||||
max-width: 12px;
|
||||
margin-right: 4px;
|
||||
padding: 0; }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton {
|
||||
image: url(":/images/default/dock-maximize-white"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton:hover {
|
||||
image: url(":/images/default/dock-maximize-white-hover"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton:pressed {
|
||||
image: url(":/images/default/dock-maximize-white-pressed"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton[floating=true] {
|
||||
image: url(":/images/default/dock-minimize-white"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton[floating=true]:hover {
|
||||
image: url(":/images/default/dock-minimize-white-hover"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton[floating=true]:pressed {
|
||||
image: url(":/images/default/dock-minimize-white-pressed"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetCloseButton {
|
||||
image: url(":/images/default/dock-close-white"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetCloseButton:hover {
|
||||
image: url(":/images/default/dock-close-white-hover"); }
|
||||
EasyDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetCloseButton:pressed {
|
||||
image: url(":/images/default/dock-close-white-pressed"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QWidget#DiagramPopup, QWidget#ThreadsPopup {
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QProgressBar {
|
||||
height: 24px;
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc;
|
||||
color: #0B530B;
|
||||
text-align: center; }
|
||||
|
||||
QProgressBar::chunk {
|
||||
background-color: #98DE98;
|
||||
width: 2px;
|
||||
margin: 0; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QScrollBar {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0; }
|
||||
|
||||
QScrollBar:hover {
|
||||
background-color: rgba(0, 0, 0, 0.1); }
|
||||
|
||||
QScrollBar:horizontal {
|
||||
margin: 0;
|
||||
height: 8px; }
|
||||
|
||||
QScrollBar:vertical {
|
||||
margin: 0;
|
||||
width: 8px; }
|
||||
|
||||
QScrollBar::handle {
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0; }
|
||||
|
||||
QScrollBar::handle:pressed {
|
||||
background-color: rgba(0, 0, 0, 0.6); }
|
||||
|
||||
QScrollBar::handle:vertical {
|
||||
min-height: 30px;
|
||||
margin-left: 4px; }
|
||||
|
||||
QScrollBar::handle:vertical:hover, QScrollBar::handle:vertical:pressed {
|
||||
margin-left: 0; }
|
||||
|
||||
QScrollBar::handle:horizontal {
|
||||
min-width: 30px;
|
||||
margin-top: 4px; }
|
||||
|
||||
QScrollBar::handle:horizontal:hover, QScrollBar::handle:horizontal:pressed {
|
||||
margin-top: 0; }
|
||||
|
||||
QScrollBar::add-line, QScrollBar::sub-line {
|
||||
background: none;
|
||||
border: none; }
|
391
3rdparty/easyprofiler/profiler_gui/themes/default.scss
vendored
Normal file
@@ -0,0 +1,391 @@
|
||||
/**********************************
|
||||
* *
|
||||
* Light theme for EasyProfiler. *
|
||||
* *
|
||||
* Automatically generated from *
|
||||
* default.scss by pysassc tool *
|
||||
* *
|
||||
***********************************/
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
/* Functions */
|
||||
@function rgb_a($color, $opacity) {
|
||||
@return fade_out($color, 1.0 - $opacity);
|
||||
}
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
/* Constants */
|
||||
$TextColor: #504040;
|
||||
$DisabledTextColor: #a08888;
|
||||
$BorderColor: #cccccc;
|
||||
$MainColor: #f44336;
|
||||
$HoveredMenuRowColor: rgb_a(#98DE98, 0.5);
|
||||
$BackgroundColor: white;
|
||||
$DisabledBackgroundColor: #f0f0f0;
|
||||
$ButtonHoverColor: #922c2c;//#d77d7d;
|
||||
$ButtonPressedColor: #370400;//#922c2c;
|
||||
$FocusBorderColor: #ffbcbc;
|
||||
$DefaultHeight: 24px;
|
||||
$ComboBoxArrowSize: 8px;
|
||||
$SpinBoxArrowSize: 8px;
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
/* StyleSheet */
|
||||
|
||||
* {
|
||||
font-family: "DejaVu Sans";
|
||||
font-size: 13px;
|
||||
color: $TextColor;
|
||||
}
|
||||
|
||||
*:disabled {
|
||||
color: $DisabledTextColor;
|
||||
}
|
||||
|
||||
EasyMainWindow, QToolBar, QDialog {
|
||||
background-color: #f8f2f2;
|
||||
}
|
||||
|
||||
QToolTip {
|
||||
background-color: #ffeccc;
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QGraphicsView {
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QLineEdit, QComboBox, QSpinBox {
|
||||
height: $DefaultHeight;
|
||||
border: 1px solid $BorderColor;
|
||||
background-color: $BackgroundColor;
|
||||
selection-background-color: $HoveredMenuRowColor;
|
||||
selection-color: $TextColor;
|
||||
}
|
||||
|
||||
QLineEdit:disabled, QComboBox:disabled, QSpinBox:disabled {
|
||||
background-color: $DisabledBackgroundColor;
|
||||
color: $DisabledTextColor;
|
||||
selection-background-color: $HoveredMenuRowColor;
|
||||
selection-color: $DisabledTextColor;
|
||||
}
|
||||
|
||||
QLineEdit:focus { border: 1px solid $FocusBorderColor; }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QComboBox::drop-down {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: $DefaultHeight;
|
||||
border: none;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
QComboBox::down-arrow { image: url(":/images/default/arrow-down"); height: $ComboBoxArrowSize; width: $ComboBoxArrowSize; }
|
||||
QComboBox::down-arrow:hover { image: url(":/images/default/arrow-down-hover"); }
|
||||
QComboBox::down-arrow:disabled { image: url(":/images/default/arrow-down-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QSpinBox::up-button {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
margin-left: 5px;
|
||||
width: $DefaultHeight;
|
||||
border-left: 1px solid $BorderColor;
|
||||
border-bottom: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QSpinBox::down-button {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: bottom right;
|
||||
margin-left: 5px;
|
||||
width: $DefaultHeight;
|
||||
border-left: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QSpinBox::up-button:pressed, QSpinBox::down-button:pressed {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
QSpinBox::up-arrow { image: url(":/images/default/arrow-up"); height: $SpinBoxArrowSize; width: $SpinBoxArrowSize; }
|
||||
QSpinBox::up-arrow:hover { image: url(":/images/default/arrow-up-hover"); }
|
||||
QSpinBox::up-arrow:disabled { image: url(":/images/default/arrow-up-disabled"); }
|
||||
|
||||
QSpinBox::down-arrow { image: url(":/images/default/arrow-down"); height: $SpinBoxArrowSize; width: $SpinBoxArrowSize; }
|
||||
QSpinBox::down-arrow:hover { image: url(":/images/default/arrow-down-hover"); }
|
||||
QSpinBox::down-arrow:disabled { image: url(":/images/default/arrow-down-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QPushButton {
|
||||
height: $DefaultHeight;
|
||||
min-width: 50px;
|
||||
border: 1px solid $BorderColor;
|
||||
background-color: $BackgroundColor;
|
||||
padding: 0 5px 0 5px;
|
||||
}
|
||||
|
||||
QPushButton:disabled {
|
||||
background-color: $DisabledBackgroundColor;
|
||||
color: $DisabledTextColor;
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
border: 1px solid $FocusBorderColor;
|
||||
color: $ButtonHoverColor;
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
border: 1px solid $ButtonHoverColor;
|
||||
color: $ButtonPressedColor;
|
||||
}
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QListView {
|
||||
background-color: $BackgroundColor;
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QListView, QTableView, QTreeView {
|
||||
alternate-background-color: #e4e4ec;
|
||||
selection-background-color: rgb_a(#98DE98, 0.8);
|
||||
selection-color: $TextColor;
|
||||
}
|
||||
|
||||
QListView::item, QTableView::item, QTreeView::item {
|
||||
height: $DefaultHeight + 2px;
|
||||
border-bottom: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QListView::item:selected, QTableView::item:selected, QTreeView::item:selected {
|
||||
background-color: rgb_a(#98DE98, 0.8);
|
||||
}
|
||||
|
||||
|
||||
QTreeView::indicator {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
padding: 1px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
QTreeView::indicator:hover, QTreeView::indicator:checked {
|
||||
background-color: $BackgroundColor;
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QTreeView::indicator:checked { image: url(":/images/default/check"); }
|
||||
QTreeView::indicator:checked:disabled { image: url(":/images/default/check-disabled"); }
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QMenu {
|
||||
background-color: $BackgroundColor;
|
||||
border: 1px solid $BorderColor;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
QMenu::item {
|
||||
height: $DefaultHeight;
|
||||
padding: 0 16px 0 25px;
|
||||
border: 1px solid transparent; /* reserve space for selection border */
|
||||
}
|
||||
|
||||
QMenu::item:selected {
|
||||
border: 1px solid $HoveredMenuRowColor;
|
||||
background-color: $HoveredMenuRowColor;
|
||||
}
|
||||
|
||||
QMenu::icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background: none;
|
||||
border: 1px inset transparent;
|
||||
padding: 1px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
QMenu::icon:checked { /* appearance of a 'checked' icon */
|
||||
background-color: #dddddd;
|
||||
border: 1px inset #aaaaaa;
|
||||
}
|
||||
|
||||
QMenu::separator {
|
||||
height: 1px;
|
||||
background: $BorderColor;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
QMenu::indicator {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background-color: $BackgroundColor;
|
||||
border: 1px solid $BorderColor;
|
||||
margin-left: 2px;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
QMenu::indicator:non-exclusive:checked { image: url(":/images/default/check"); }
|
||||
QMenu::indicator:non-exclusive:checked:disabled { image: url(":/images/default/check-disabled"); }
|
||||
|
||||
QMenu::indicator:exclusive { border-radius: 8px; }
|
||||
QMenu::indicator:exclusive:checked { image: url(":/images/default/radio-check"); }
|
||||
QMenu::indicator:exclusive:checked:disabled { image: url(":/images/default/radio-check-disabled"); }
|
||||
|
||||
|
||||
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
/*QToolButton {
|
||||
border: 1px solid transparent;
|
||||
background: none;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
QToolButton:hover {
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
QToolButton[popupMode="1"] {
|
||||
padding-right: 13px;
|
||||
}
|
||||
|
||||
QToolButton:pressed {
|
||||
background-color: #808080;
|
||||
}
|
||||
|
||||
QToolButton::menu-button {
|
||||
border: none;
|
||||
border-left: 1px solid transparent;
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
QToolButton::menu-button:hover {
|
||||
border-left: 1px solid $BorderColor;
|
||||
background-color: #bbbbbb;
|
||||
}
|
||||
|
||||
QToolButton::menu-button:pressed {
|
||||
border-left: 1px solid $BorderColor;
|
||||
background-color: #808080;
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QHeaderView::section {
|
||||
height: 28px;
|
||||
width: 96px;
|
||||
min-width: 64px;
|
||||
background: #eeeeee;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
EasyDockWidget
|
||||
{
|
||||
QWidget#EasyDockWidgetTitle
|
||||
{
|
||||
background-color: #686464;
|
||||
|
||||
QLabel {
|
||||
color: white;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
QPushButton {
|
||||
background: none;
|
||||
border: none;
|
||||
max-height: 12px;
|
||||
min-width: 12px;
|
||||
max-width: 12px;
|
||||
margin-right: 4px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
QPushButton#EasyDockWidgetFloatButton { image: url(":/images/default/dock-maximize-white"); }
|
||||
QPushButton#EasyDockWidgetFloatButton:hover { image: url(":/images/default/dock-maximize-white-hover"); }
|
||||
QPushButton#EasyDockWidgetFloatButton:pressed { image: url(":/images/default/dock-maximize-white-pressed"); }
|
||||
|
||||
QPushButton#EasyDockWidgetFloatButton[floating=true] { image: url(":/images/default/dock-minimize-white"); }
|
||||
QPushButton#EasyDockWidgetFloatButton[floating=true]:hover { image: url(":/images/default/dock-minimize-white-hover"); }
|
||||
QPushButton#EasyDockWidgetFloatButton[floating=true]:pressed { image: url(":/images/default/dock-minimize-white-pressed"); }
|
||||
|
||||
QPushButton#EasyDockWidgetCloseButton { image: url(":/images/default/dock-close-white"); }
|
||||
QPushButton#EasyDockWidgetCloseButton:hover { image: url(":/images/default/dock-close-white-hover"); }
|
||||
QPushButton#EasyDockWidgetCloseButton:pressed { image: url(":/images/default/dock-close-white-pressed"); }
|
||||
}
|
||||
}
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QWidget#DiagramPopup, QWidget#ThreadsPopup {
|
||||
background-color: $BackgroundColor;
|
||||
border: 1px solid $BorderColor;
|
||||
}
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QProgressBar {
|
||||
height: $DefaultHeight;
|
||||
background-color: $BackgroundColor;
|
||||
border: 1px solid $BorderColor;//#64BC64;
|
||||
color: #0B530B;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
QProgressBar::chunk {
|
||||
background-color: #98DE98;
|
||||
width: 2px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QScrollBar {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
QScrollBar:hover {
|
||||
background-color: rgb_a(#000000, 0.1);
|
||||
}
|
||||
|
||||
QScrollBar:horizontal {
|
||||
margin: 0;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
QScrollBar:vertical {
|
||||
margin: 0;
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
QScrollBar::handle {
|
||||
background-color: rgb_a(#000000, 0.4);
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
QScrollBar::handle:pressed {
|
||||
background-color: rgb_a(#000000, 0.6);
|
||||
}
|
||||
|
||||
QScrollBar::handle:vertical { min-height: 30px; margin-left: 4px; }
|
||||
QScrollBar::handle:vertical:hover, QScrollBar::handle:vertical:pressed { margin-left: 0; }
|
||||
|
||||
QScrollBar::handle:horizontal { min-width: 30px; margin-top: 4px; }
|
||||
QScrollBar::handle:horizontal:hover, QScrollBar::handle:horizontal:pressed { margin-top: 0; }
|
||||
|
||||
QScrollBar::add-line, QScrollBar::sub-line {
|
||||
background: none;
|
||||
border: none;
|
||||
}
|
431
3rdparty/easyprofiler/profiler_gui/tree_widget_item.cpp
vendored
Normal file
@@ -0,0 +1,431 @@
|
||||
/************************************************************************
|
||||
* file name : tree_widget_item.cpp
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/18
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains implementation of EasyTreeWidgetItem.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/18 Victor Zarubkin: Moved sources from blocks_tree_widget.cpp
|
||||
* : and renamed classes from Prof* to Easy*.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include "tree_widget_item.h"
|
||||
#include "globals.h"
|
||||
#include <QPainter>
|
||||
#include <QPoint>
|
||||
#include <QBrush>
|
||||
#include <QRect>
|
||||
#include <QSize>
|
||||
#include <QVariant>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EASY_CONSTEXPR int BlockColorRole = Qt::UserRole + 1;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EASY_CONSTEXPR int ColumnBit[COL_COLUMNS_NUMBER] = {
|
||||
-1 // COL_NAME = 0,
|
||||
|
||||
, 0 // COL_BEGIN,
|
||||
|
||||
, 1 // COL_DURATION,
|
||||
, 2 // COL_SELF_DURATION,
|
||||
, 3 // COL_DURATION_SUM_PER_PARENT,
|
||||
, 4 // COL_DURATION_SUM_PER_FRAME,
|
||||
, 5 // COL_DURATION_SUM_PER_THREAD,
|
||||
|
||||
, -1 // COL_SELF_DURATION_PERCENT,
|
||||
, -1 // COL_PERCENT_PER_PARENT,
|
||||
, -1 // COL_PERCENT_PER_FRAME,
|
||||
, -1 // COL_PERCENT_SUM_PER_PARENT,
|
||||
, -1 // COL_PERCENT_SUM_PER_FRAME,
|
||||
, -1 // COL_PERCENT_SUM_PER_THREAD,
|
||||
|
||||
, 6 // COL_END,
|
||||
|
||||
, 7 // COL_MIN_PER_FRAME,
|
||||
, 8 // COL_MAX_PER_FRAME,
|
||||
, 9 // COL_AVERAGE_PER_FRAME,
|
||||
, -1 // COL_NCALLS_PER_FRAME,
|
||||
|
||||
, 10 // COL_MIN_PER_THREAD,
|
||||
, 11 // COL_MAX_PER_THREAD,
|
||||
, 12 // COL_AVERAGE_PER_THREAD,
|
||||
, -1 // COL_NCALLS_PER_THREAD,
|
||||
|
||||
, 13 // COL_MIN_PER_PARENT,
|
||||
, 14 // COL_MAX_PER_PARENT,
|
||||
, 15 // COL_AVERAGE_PER_PARENT,
|
||||
, -1 // COL_NCALLS_PER_PARENT,
|
||||
|
||||
, 16 // COL_ACTIVE_TIME,
|
||||
, -1 // COL_ACTIVE_PERCENT,
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyTreeWidgetItem::EasyTreeWidgetItem(const ::profiler::block_index_t _treeBlock, Parent* _parent)
|
||||
: Parent(_parent, QTreeWidgetItem::UserType)
|
||||
, m_block(_treeBlock)
|
||||
, m_customBGColor(0)
|
||||
, m_bMain(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
EasyTreeWidgetItem::~EasyTreeWidgetItem()
|
||||
{
|
||||
}
|
||||
|
||||
bool EasyTreeWidgetItem::operator < (const Parent& _other) const
|
||||
{
|
||||
const auto col = treeWidget()->sortColumn();
|
||||
|
||||
switch (col)
|
||||
{
|
||||
//case COL_UNKNOWN:
|
||||
case COL_NAME:
|
||||
{
|
||||
if (parent() == nullptr)
|
||||
return false; // Do not sort topLevelItems by name
|
||||
return Parent::operator < (_other);
|
||||
}
|
||||
|
||||
case COL_NCALLS_PER_THREAD:
|
||||
case COL_NCALLS_PER_PARENT:
|
||||
case COL_NCALLS_PER_FRAME:
|
||||
{
|
||||
return data(col, Qt::UserRole).toUInt() < _other.data(col, Qt::UserRole).toUInt();
|
||||
}
|
||||
|
||||
case COL_SELF_DURATION_PERCENT:
|
||||
case COL_PERCENT_PER_PARENT:
|
||||
case COL_PERCENT_PER_FRAME:
|
||||
case COL_PERCENT_SUM_PER_PARENT:
|
||||
case COL_PERCENT_SUM_PER_FRAME:
|
||||
case COL_PERCENT_SUM_PER_THREAD:
|
||||
{
|
||||
return data(col, Qt::UserRole).toInt() < _other.data(col, Qt::UserRole).toInt();
|
||||
}
|
||||
|
||||
case COL_ACTIVE_PERCENT:
|
||||
{
|
||||
return data(col, Qt::UserRole).toDouble() < _other.data(col, Qt::UserRole).toDouble();
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// durations min, max, average
|
||||
return data(col, Qt::UserRole).toULongLong() < _other.data(col, Qt::UserRole).toULongLong();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EasyTreeWidgetItem::hasToolTip(int _column) const
|
||||
{
|
||||
const int bit = ColumnBit[_column];
|
||||
return bit < 0 ? false : m_bHasToolTip.test(static_cast<size_t>(bit));
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setHasToolTip(int _column)
|
||||
{
|
||||
const int bit = ColumnBit[_column];
|
||||
if (bit >= 0)
|
||||
m_bHasToolTip.set(static_cast<size_t>(bit), true);
|
||||
}
|
||||
|
||||
QVariant EasyTreeWidgetItem::data(int _column, int _role) const
|
||||
{
|
||||
if (_column == COL_NAME)
|
||||
{
|
||||
if (_role == Qt::SizeHintRole)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
const float k = m_font.bold() ? 1.2f : 1.f;
|
||||
#else
|
||||
const float k = m_font.bold() ? 1.15f : 1.f;
|
||||
#endif
|
||||
return QSize(static_cast<int>(QFontMetrics(m_font).width(text(COL_NAME)) * k) + 20, 26);
|
||||
}
|
||||
|
||||
if (_role == BlockColorRole)
|
||||
{
|
||||
if (parent() != nullptr || m_bMain)
|
||||
return QBrush(QColor::fromRgba(m_customBGColor));
|
||||
return QVariant();
|
||||
}
|
||||
}
|
||||
|
||||
switch (_role)
|
||||
{
|
||||
case Qt::FontRole:
|
||||
return m_font;
|
||||
|
||||
case Qt::ForegroundRole:
|
||||
return m_bMain ? QVariant::fromValue(QColor::fromRgb(::profiler_gui::SELECTED_THREAD_FOREGROUND)) : QVariant();
|
||||
|
||||
case Qt::ToolTipRole:
|
||||
return hasToolTip(_column) ?
|
||||
QVariant::fromValue(QString("%1 ns").arg(QTreeWidgetItem::data(_column, Qt::UserRole).toULongLong())) :
|
||||
QVariant();
|
||||
|
||||
default:
|
||||
return QTreeWidgetItem::data(_column, _role);
|
||||
}
|
||||
}
|
||||
|
||||
::profiler::block_index_t EasyTreeWidgetItem::block_index() const
|
||||
{
|
||||
return m_block;
|
||||
}
|
||||
|
||||
::profiler_gui::EasyBlock& EasyTreeWidgetItem::guiBlock()
|
||||
{
|
||||
return easyBlock(m_block);
|
||||
}
|
||||
|
||||
const ::profiler::BlocksTree& EasyTreeWidgetItem::block() const
|
||||
{
|
||||
return easyBlocksTree(m_block);
|
||||
}
|
||||
|
||||
::profiler::timestamp_t EasyTreeWidgetItem::duration() const
|
||||
{
|
||||
if (parent() != nullptr)
|
||||
return block().node->duration();
|
||||
return data(COL_DURATION, Qt::UserRole).toULongLong();
|
||||
}
|
||||
|
||||
::profiler::timestamp_t EasyTreeWidgetItem::selfDuration() const
|
||||
{
|
||||
return data(COL_SELF_DURATION, Qt::UserRole).toULongLong();
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setTimeSmart(int _column, ::profiler_gui::TimeUnits _units, const ::profiler::timestamp_t& _time, const QString& _prefix)
|
||||
{
|
||||
const ::profiler::timestamp_t nanosecondsTime = PROF_NANOSECONDS(_time);
|
||||
|
||||
setData(_column, Qt::UserRole, (quint64)nanosecondsTime);
|
||||
setHasToolTip(_column);
|
||||
setText(_column, QString("%1%2").arg(_prefix).arg(::profiler_gui::timeStringRealNs(_units, nanosecondsTime, 3)));
|
||||
|
||||
// if (_time < 1e3)
|
||||
// {
|
||||
// setText(_column, QString("%1%2 ns").arg(_prefix).arg(nanosecondsTime));
|
||||
// }
|
||||
// else if (_time < 1e6)
|
||||
// {
|
||||
// setText(_column, QString("%1%2 us").arg(_prefix).arg(double(nanosecondsTime) * 1e-3, 0, 'f', 3));
|
||||
// }
|
||||
// else if (_time < 1e9)
|
||||
// {
|
||||
// setText(_column, QString("%1%2 ms").arg(_prefix).arg(double(nanosecondsTime) * 1e-6, 0, 'f', 3));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// setText(_column, QString("%1%2 s").arg(_prefix).arg(double(nanosecondsTime) * 1e-9, 0, 'f', 3));
|
||||
// }
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setTimeSmart(int _column, ::profiler_gui::TimeUnits _units, const ::profiler::timestamp_t& _time)
|
||||
{
|
||||
const ::profiler::timestamp_t nanosecondsTime = PROF_NANOSECONDS(_time);
|
||||
|
||||
setData(_column, Qt::UserRole, (quint64)nanosecondsTime);
|
||||
setHasToolTip(_column);
|
||||
setText(_column, ::profiler_gui::timeStringRealNs(_units, nanosecondsTime, 3));
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setTimeMs(int _column, const ::profiler::timestamp_t& _time)
|
||||
{
|
||||
const ::profiler::timestamp_t nanosecondsTime = PROF_NANOSECONDS(_time);
|
||||
setData(_column, Qt::UserRole, (quint64)nanosecondsTime);
|
||||
setHasToolTip(_column);
|
||||
setText(_column, QString::number(double(nanosecondsTime) * 1e-6, 'g', 9));
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setTimeMs(int _column, const ::profiler::timestamp_t& _time, const QString& _prefix)
|
||||
{
|
||||
const ::profiler::timestamp_t nanosecondsTime = PROF_NANOSECONDS(_time);
|
||||
setData(_column, Qt::UserRole, (quint64)nanosecondsTime);
|
||||
setHasToolTip(_column);
|
||||
setText(_column, QString("%1%2").arg(_prefix).arg(double(nanosecondsTime) * 1e-6, 0, 'g', 9));
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setBackgroundColor(QRgb _color)
|
||||
{
|
||||
m_customBGColor = _color;
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setMain(bool _main)
|
||||
{
|
||||
m_bMain = _main;
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::collapseAll()
|
||||
{
|
||||
for (int i = 0, childrenNumber = childCount(); i < childrenNumber; ++i)
|
||||
{
|
||||
static_cast<EasyTreeWidgetItem*>(child(i))->collapseAll();
|
||||
}
|
||||
|
||||
setExpanded(false);
|
||||
if (parent() != nullptr)
|
||||
guiBlock().expanded = false;
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::expandAll()
|
||||
{
|
||||
for (int i = 0, childrenNumber = childCount(); i < childrenNumber; ++i)
|
||||
{
|
||||
static_cast<EasyTreeWidgetItem*>(child(i))->expandAll();
|
||||
}
|
||||
|
||||
setExpanded(true);
|
||||
if (parent() != nullptr)
|
||||
guiBlock().expanded = true;
|
||||
}
|
||||
|
||||
void EasyTreeWidgetItem::setBold(bool _bold)
|
||||
{
|
||||
m_font.setBold(_bold);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EasyItemDelegate::EasyItemDelegate(QTreeWidget* parent) : QStyledItemDelegate(parent), m_treeWidget(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
EasyItemDelegate::~EasyItemDelegate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void EasyItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||
{
|
||||
auto brushData = m_treeWidget->model()->data(index, BlockColorRole);
|
||||
if (brushData.isNull())
|
||||
{
|
||||
#ifdef _WIN32
|
||||
const auto currentTreeIndex = m_treeWidget->currentIndex();
|
||||
if (index.parent() == currentTreeIndex.parent() && index.row() == currentTreeIndex.row())
|
||||
{
|
||||
// Draw selection background for selected row
|
||||
painter->save();
|
||||
painter->setBrush(QColor::fromRgba(0xCC98DE98));
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->drawRect(QRect(0, option.rect.top(), option.rect.left() + 16, option.rect.height()));
|
||||
painter->restore();
|
||||
}
|
||||
#endif
|
||||
|
||||
// Draw item as usual
|
||||
QStyledItemDelegate::paint(painter, option, index);
|
||||
|
||||
// Draw line under tree indicator
|
||||
const auto bottomLeft = option.rect.bottomLeft();
|
||||
if (bottomLeft.x() > 0)
|
||||
{
|
||||
painter->save();
|
||||
painter->setBrush(Qt::NoBrush);
|
||||
painter->setPen(::profiler_gui::SYSTEM_BORDER_COLOR);
|
||||
painter->drawLine(QPoint(0, bottomLeft.y()), bottomLeft);
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const auto currentTreeIndex = m_treeWidget->currentIndex();
|
||||
if (index.parent() == currentTreeIndex.parent() && index.row() == currentTreeIndex.row())
|
||||
{
|
||||
// Draw selection background for selected row
|
||||
|
||||
painter->save();
|
||||
|
||||
painter->setBrush(QColor::fromRgba(0xCC98DE98));
|
||||
painter->setPen(Qt::NoPen);
|
||||
|
||||
#ifdef _WIN32
|
||||
painter->drawRect(QRect(0, option.rect.top(), option.rect.left() + 16, option.rect.height()));
|
||||
#else
|
||||
painter->drawRect(QRect(option.rect.left(), option.rect.top(), 16, option.rect.height()));
|
||||
#endif
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
// Adjust rect size for drawing color marker
|
||||
QStyleOptionViewItem opt = option;
|
||||
opt.rect.adjust(16, 0, 0, 0);
|
||||
|
||||
// Draw item as usual
|
||||
QStyledItemDelegate::paint(painter, opt, index);
|
||||
|
||||
painter->save();
|
||||
|
||||
// Draw color marker with block color
|
||||
const auto brush = m_treeWidget->model()->data(index, Qt::UserRole + 1).value<QBrush>();
|
||||
painter->setBrush(brush);
|
||||
painter->setPen(::profiler_gui::SYSTEM_BORDER_COLOR);
|
||||
painter->drawRect(QRect(option.rect.left(), option.rect.top() + 5, 16, option.rect.height() - 10));
|
||||
|
||||
// Draw line under tree indicator
|
||||
const auto bottomLeft = opt.rect.bottomLeft();
|
||||
if (bottomLeft.x() > 0)
|
||||
{
|
||||
painter->setBrush(Qt::NoBrush);
|
||||
painter->drawLine(QPoint(0, bottomLeft.y()), bottomLeft);
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
}
|
184
3rdparty/easyprofiler/profiler_gui/tree_widget_item.h
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
/************************************************************************
|
||||
* file name : tree_widget_item.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/18
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyTreeWidgetItem
|
||||
* : for displyaing EasyProfiler blocks tree.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/18 Victor Zarubkin: moved sources from blocks_tree_widget.h
|
||||
* : and renamed classes from Prof* to Easy*.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_TREE_WIDGET_ITEM_H
|
||||
#define EASY_TREE_WIDGET_ITEM_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <QTreeWidget>
|
||||
#include <QStyledItemDelegate>
|
||||
#include <easy/reader.h>
|
||||
#include <bitset>
|
||||
|
||||
#include "common_functions.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum EasyColumnsIndexes
|
||||
{
|
||||
COL_UNKNOWN = -1,
|
||||
|
||||
COL_NAME = 0,
|
||||
|
||||
COL_BEGIN,
|
||||
|
||||
COL_DURATION,
|
||||
COL_SELF_DURATION,
|
||||
COL_DURATION_SUM_PER_PARENT,
|
||||
COL_DURATION_SUM_PER_FRAME,
|
||||
COL_DURATION_SUM_PER_THREAD,
|
||||
|
||||
COL_SELF_DURATION_PERCENT,
|
||||
COL_PERCENT_PER_PARENT,
|
||||
COL_PERCENT_PER_FRAME,
|
||||
COL_PERCENT_SUM_PER_PARENT,
|
||||
COL_PERCENT_SUM_PER_FRAME,
|
||||
COL_PERCENT_SUM_PER_THREAD,
|
||||
|
||||
COL_END,
|
||||
|
||||
COL_MIN_PER_FRAME,
|
||||
COL_MAX_PER_FRAME,
|
||||
COL_AVERAGE_PER_FRAME,
|
||||
COL_NCALLS_PER_FRAME,
|
||||
|
||||
COL_MIN_PER_THREAD,
|
||||
COL_MAX_PER_THREAD,
|
||||
COL_AVERAGE_PER_THREAD,
|
||||
COL_NCALLS_PER_THREAD,
|
||||
|
||||
COL_MIN_PER_PARENT,
|
||||
COL_MAX_PER_PARENT,
|
||||
COL_AVERAGE_PER_PARENT,
|
||||
COL_NCALLS_PER_PARENT,
|
||||
|
||||
COL_ACTIVE_TIME,
|
||||
COL_ACTIVE_PERCENT,
|
||||
|
||||
COL_COLUMNS_NUMBER
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyTreeWidgetItem : public QTreeWidgetItem
|
||||
{
|
||||
using Parent = QTreeWidgetItem;
|
||||
using This = EasyTreeWidgetItem;
|
||||
|
||||
QFont m_font;
|
||||
const ::profiler::block_index_t m_block;
|
||||
QRgb m_customBGColor;
|
||||
std::bitset<17> m_bHasToolTip;
|
||||
bool m_bMain;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyTreeWidgetItem(const ::profiler::block_index_t _treeBlock = ::profiler_gui::numeric_max<decltype(m_block)>(), Parent* _parent = nullptr);
|
||||
virtual ~EasyTreeWidgetItem();
|
||||
|
||||
bool operator < (const Parent& _other) const override;
|
||||
QVariant data(int _column, int _role) const override;
|
||||
|
||||
public:
|
||||
|
||||
::profiler::block_index_t block_index() const;
|
||||
::profiler_gui::EasyBlock& guiBlock();
|
||||
const ::profiler::BlocksTree& block() const;
|
||||
|
||||
::profiler::timestamp_t duration() const;
|
||||
::profiler::timestamp_t selfDuration() const;
|
||||
|
||||
void setTimeSmart(int _column, ::profiler_gui::TimeUnits _units, const ::profiler::timestamp_t& _time, const QString& _prefix);
|
||||
void setTimeSmart(int _column, ::profiler_gui::TimeUnits _units, const ::profiler::timestamp_t& _time);
|
||||
|
||||
void setTimeMs(int _column, const ::profiler::timestamp_t& _time);
|
||||
void setTimeMs(int _column, const ::profiler::timestamp_t& _time, const QString& _prefix);
|
||||
|
||||
void setBackgroundColor(QRgb _color);
|
||||
|
||||
void setMain(bool _main);
|
||||
|
||||
void collapseAll();
|
||||
|
||||
void expandAll();
|
||||
|
||||
void setBold(bool _bold);
|
||||
|
||||
private:
|
||||
|
||||
bool hasToolTip(int _column) const;
|
||||
void setHasToolTip(int _column);
|
||||
|
||||
}; // END of class EasyTreeWidgetItem.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyItemDelegate : public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
QTreeWidget* m_treeWidget;
|
||||
|
||||
public:
|
||||
|
||||
explicit EasyItemDelegate(QTreeWidget* parent = nullptr);
|
||||
~EasyItemDelegate() override;
|
||||
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
|
||||
}; // END of class EasyItemDelegate.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_TREE_WIDGET_ITEM_H
|
1031
3rdparty/easyprofiler/profiler_gui/tree_widget_loader.cpp
vendored
Normal file
134
3rdparty/easyprofiler/profiler_gui/tree_widget_loader.h
vendored
Normal file
@@ -0,0 +1,134 @@
|
||||
/************************************************************************
|
||||
* file name : tree_widget_loader.h
|
||||
* ----------------- :
|
||||
* creation time : 2016/08/18
|
||||
* author : Victor Zarubkin
|
||||
* email : v.s.zarubkin@gmail.com
|
||||
* ----------------- :
|
||||
* description : The file contains declaration of EasyTreeWidgetLoader which aim is
|
||||
* : to load EasyProfiler blocks hierarchy in separate thread.
|
||||
* ----------------- :
|
||||
* change log : * 2016/08/18 Victor Zarubkin: moved sources from blocks_tree_widget.h/.cpp
|
||||
* : and renamed Prof* to Easy*.
|
||||
* :
|
||||
* : *
|
||||
* ----------------- :
|
||||
* license : Lightweight profiler library for c++
|
||||
* : Copyright(C) 2016-2017 Sergey Yagovtsev, Victor Zarubkin
|
||||
* :
|
||||
* : Licensed under either of
|
||||
* : * MIT license (LICENSE.MIT or http://opensource.org/licenses/MIT)
|
||||
* : * Apache License, Version 2.0, (LICENSE.APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* : at your option.
|
||||
* :
|
||||
* : The MIT License
|
||||
* :
|
||||
* : Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* : of this software and associated documentation files (the "Software"), to deal
|
||||
* : in the Software without restriction, including without limitation the rights
|
||||
* : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* : of the Software, and to permit persons to whom the Software is furnished
|
||||
* : to do so, subject to the following conditions:
|
||||
* :
|
||||
* : The above copyright notice and this permission notice shall be included in all
|
||||
* : copies or substantial portions of the Software.
|
||||
* :
|
||||
* : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* : INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* : PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* : TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* : USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* :
|
||||
* : The Apache License, Version 2.0 (the "License")
|
||||
* :
|
||||
* : You may not use this file except in compliance with the License.
|
||||
* : You may obtain a copy of the License at
|
||||
* :
|
||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||
* :
|
||||
* : Unless required by applicable law or agreed to in writing, software
|
||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* : See the License for the specific language governing permissions and
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#ifndef EASY_TREE_WIDGET_LOADER_H
|
||||
#define EASY_TREE_WIDGET_LOADER_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
#include <atomic>
|
||||
#include <easy/reader.h>
|
||||
#include "common_types.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyTreeWidgetItem;
|
||||
|
||||
#ifndef EASY_TREE_WIDGET__USE_VECTOR
|
||||
using Items = ::std::unordered_map<::profiler::block_index_t, EasyTreeWidgetItem*, ::estd::hash<::profiler::block_index_t> >;
|
||||
#else
|
||||
using Items = ::std::vector<EasyTreeWidgetItem*>;
|
||||
#endif
|
||||
|
||||
using ThreadedItems = ::std::vector<::std::pair<::profiler::thread_id_t, EasyTreeWidgetItem*> >;
|
||||
using RootsMap = ::std::unordered_map<::profiler::thread_id_t, EasyTreeWidgetItem*, ::estd::hash<::profiler::thread_id_t> >;
|
||||
using IdItems = ::std::unordered_map<::profiler::block_id_t, EasyTreeWidgetItem*, ::estd::hash<::profiler::block_index_t> >;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum EasyTreeMode : uint8_t
|
||||
{
|
||||
EasyTreeMode_Full,
|
||||
EasyTreeMode_Plain
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class EasyTreeWidgetLoader Q_DECL_FINAL
|
||||
{
|
||||
ThreadedItems m_topLevelItems; ///<
|
||||
Items m_items; ///<
|
||||
IdItems m_iditems; ///<
|
||||
::std::thread m_thread; ///<
|
||||
::std::atomic_bool m_bDone; ///<
|
||||
::std::atomic_bool m_bInterrupt; ///<
|
||||
::std::atomic<int> m_progress; ///<
|
||||
EasyTreeMode m_mode; ///<
|
||||
|
||||
public:
|
||||
|
||||
EasyTreeWidgetLoader();
|
||||
~EasyTreeWidgetLoader();
|
||||
|
||||
int progress() const;
|
||||
bool done() const;
|
||||
|
||||
void takeTopLevelItems(ThreadedItems& _output);
|
||||
void takeItems(Items& _output);
|
||||
|
||||
void interrupt(bool _wait = false);
|
||||
void fillTree(::profiler::timestamp_t& _beginTime, const unsigned int _blocksNumber, const ::profiler::thread_blocks_tree_t& _blocksTree, EasyTreeMode _mode);
|
||||
void fillTreeBlocks(const::profiler_gui::TreeBlocks& _blocks, ::profiler::timestamp_t _beginTime, ::profiler::timestamp_t _left, ::profiler::timestamp_t _right, bool _strict, EasyTreeMode _mode);
|
||||
|
||||
private:
|
||||
|
||||
bool interrupted() const;
|
||||
void setDone();
|
||||
void setProgress(int _progress);
|
||||
|
||||
void setTreeInternal1(::profiler::timestamp_t& _beginTime, const unsigned int _blocksNumber, const ::profiler::thread_blocks_tree_t& _blocksTree, bool _addZeroBlocks, bool _decoratedThreadNames, bool _hexThreadId, ::profiler_gui::TimeUnits _units);
|
||||
void setTreeInternal2(const ::profiler::timestamp_t& _beginTime, const ::profiler_gui::TreeBlocks& _blocks, ::profiler::timestamp_t _left, ::profiler::timestamp_t _right, bool _strict, bool _addZeroBlocks, bool _decoratedThreadNames, bool _hexThreadId, ::profiler_gui::TimeUnits _units);
|
||||
size_t setTreeInternal(const ::profiler::BlocksTreeRoot& _threadRoot, ::profiler::block_index_t _firstCswitch, const ::profiler::timestamp_t& _beginTime, const ::profiler::BlocksTree::children_t& _children, EasyTreeWidgetItem* _parent, EasyTreeWidgetItem* _frame, ::profiler::timestamp_t _left, ::profiler::timestamp_t _right, bool _strict, ::profiler::timestamp_t& _duration, bool _addZeroBlocks, ::profiler_gui::TimeUnits _units);
|
||||
size_t setTreeInternalPlain(const ::profiler::BlocksTreeRoot& _threadRoot, ::profiler::block_index_t _firstCswitch, const ::profiler::timestamp_t& _beginTime, const ::profiler::BlocksTree::children_t& _children, EasyTreeWidgetItem* _parent, EasyTreeWidgetItem* _frame, ::profiler::timestamp_t _left, ::profiler::timestamp_t _right, bool _strict, ::profiler::timestamp_t& _duration, bool _addZeroBlocks, ::profiler_gui::TimeUnits _units);
|
||||
|
||||
::profiler::timestamp_t calculateChildrenDurationRecursive(const ::profiler::BlocksTree::children_t& _children, ::profiler::block_id_t _id);
|
||||
|
||||
}; // END of class EasyTreeWidgetLoader.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // EASY_TREE_WIDGET_LOADER_H
|