diff --git a/include/profiler/profiler.h b/include/profiler/profiler.h index 038e9c8..b9da0d5 100644 --- a/include/profiler/profiler.h +++ b/include/profiler/profiler.h @@ -251,7 +251,7 @@ namespace profiler { typedef BlockType block_type_t; extern "C" { - PROFILER_API block_id_t registerDescription(const char* _name, const char* _filename, int _line, block_type_t _block_type, color_t _color = DefaultBlockColor); + PROFILER_API block_id_t registerDescription(const char* _name, const char* _filename, int _line, block_type_t _block_type, color_t _color = ::profiler::colors::Default); PROFILER_API void beginBlock(Block& _block); PROFILER_API void endBlock(); PROFILER_API void setEnabled(bool isEnable); diff --git a/include/profiler/profiler_colors.h b/include/profiler/profiler_colors.h index 8b69439..8107305 100644 --- a/include/profiler/profiler_colors.h +++ b/include/profiler/profiler_colors.h @@ -26,77 +26,24 @@ along with this program.If not, see . namespace profiler { - ////////////////////////////////////////////////////////////////////// - typedef uint32_t color_t; // Standard four-byte ARGB color format - //typedef uint8_t color_t; // One-byte RGB color format: RRR-GGG-BB - //typedef uint32_t rgb32_t; // Standard four-byte ARGB color format - - ////////////////////////////////////////////////////////////////////// - namespace colors { -// ///< Extracts [0 .. 224] Red value from one-byte RGB format. Possible values are: [0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xe0]. -// inline rgb32_t get_red(color_t color) { return color & 0xe0; } -// -// ///< Extracts [0 .. 224] Green value from one-byte RGB format. Possible values are: [0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xe0]. -// inline rgb32_t get_green(color_t color) { return (color & 0x1c) << 3; } -// -// ///< Extracts [0 .. 192] Blue value from one-byte RGB format. Possible values are: [0x0, 0x40, 0x80, 0xc0] -// inline rgb32_t get_blue(color_t color) { return (color & 3) << 6; } -// -// -// ///< Extracts [0 .. 255] Red value from four-byte RGB format. -// inline rgb32_t rgb_red(rgb32_t color) { return (color & 0x00ff0000) >> 16; } -// -// ///< Extracts [0 .. 255] Green value from four-byte RGB format. -// inline rgb32_t rgb_green(rgb32_t color) { return (color & 0x0000ff00) >> 8; } -// -// ///< Extracts [0 .. 255] Blue value from four-byte RGB format. -// inline rgb32_t rgb_blue(rgb32_t color) { return color & 0x000000ff; } -// -// ///< Unpacks one-byte RGB value into standard four-byte RGB value. -// inline rgb32_t convert_to_rgb(color_t color) { return (get_red(color) << 16) | ((color & 0x1c) << 11) | get_blue(color); } -// -// ///< Packs standard four-byte RGB value into one-byte RGB value. R & G values packed with 0x20 (32) step, B value is packed with 0x40 (64) step. -// inline color_t from_rgb(rgb32_t color) { return (rgb_red(color) & 0xe0) | (((color & 0x0000ff00) >> 11) & 0x1c) | (rgb_blue(color) >> 6); } -// -// ///< Packs standard four-byte RGB value into one-byte RGB value. R & G values packed with 0x20 (32) step, B value is packed with 0x40 (64) step. -// inline color_t from_rgb(color_t red, color_t green, color_t blue) { return (red & 0xe0) | ((green >> 3) & 0x1c) | (blue >> 6); } + ///< Change alpha for color. Only 8 major bytes (0xff000000) used from alpha. + inline color_t modify_alpha32(color_t _color, color_t _alpha) { + return (_alpha & 0xff000000) | (_color & 0x00ffffff); + } + ///< Change alpha for color. + inline color_t modify_alpha8(color_t _color, uint8_t _alpha) { + return (static_cast(_alpha) << 24) | (_color & 0x00ffffff); + } -// const color_t Black = 0x00; // 0x00000000 -// const color_t Random = Black; // Black // Currently GUI interprets Black color as permission to select random color for block -// const color_t Lightgray = 0x6E; // 0x00606080 -// const color_t Darkgray = 0x25; // 0x00202040 -// const color_t White = 0xFF; // 0x00E0E0C0 -// const color_t Red = 0xE0; // 0x00E00000 -// const color_t Green = 0x1C; // 0x0000E000 -// const color_t Blue = 0x03; // 0x000000C0 -// const color_t Magenta = (Red | Blue); // 0x00E000C0 -// const color_t Cyan = (Green | Blue); // 0x0000E0C0 -// const color_t Yellow = (Red | Green); // 0x00E0E000 -// const color_t Darkred = 0x60; // 0x00600000 -// const color_t Darkgreen = 0x0C; // 0x00006000 -// const color_t Darkblue = 0x01; // 0x00000040 -// const color_t Darkmagenta = (Darkred | Darkblue); // 0x00600040 -// const color_t Darkcyan = (Darkgreen | Darkblue); // 0x00006040 -// const color_t Darkyellow = (Darkred | Darkgreen); // 0x00606000 -// const color_t Navy = 0x02; // 0x00000080 -// const color_t Teal = 0x12; // 0x00008080 -// const color_t Maroon = 0x80; // 0x00800000 -// const color_t Purple = 0x82; // 0x00800080 -// const color_t Olive = 0x90; // 0x00808000 -// const color_t Grey = 0x92; // 0x00808080 -// const color_t Silver = 0xDB; // 0x00C0C0C0 -// const color_t Orange = 0xF4; // 0x00E0A000 -// const color_t Coral = 0xF6; // 0x00E0A080 -// const color_t Brick = 0xED; // 0x00E06040 -// const color_t Clay = 0xD6; // 0x00C0A080 -// const color_t Skin = 0xFA; // 0x00E0C080 -// const color_t Palegold = 0xFE; // 0x00E0E080 - + ///< Create color from ARGB components. + inline color_t color(uint8_t _red, uint8_t _green, uint8_t _blue, uint8_t _alpha = 0xff) { + return (static_cast(_alpha) << 24) | (static_cast(_red) << 16) | (static_cast(_green) << 8) | static_cast(_blue); + } // Google Material Design colors @@ -420,17 +367,17 @@ namespace profiler { const color_t Coral = DeepOrange200; const color_t Brown = Brown500; const color_t DarkBrown = Brown900; - const color_t CreamWhite = Brown50; + const color_t CreamWhite = Orange50; + const color_t Wheat = Amber100; const color_t Grey = Grey500; + const color_t Dark = Grey900; const color_t Silver = Grey300; const color_t BlueGrey = BlueGrey500; + const color_t Default = Wheat; + } // END of namespace colors. - const color_t DefaultBlockColor = colors::OrangeA100; - - ////////////////////////////////////////////////////////////////////// - } // END of namespace profiler. ////////////////////////////////////////////////////////////////////// diff --git a/profiler_gui/common_types.h b/profiler_gui/common_types.h index 7a195c6..ab84095 100644 --- a/profiler_gui/common_types.h +++ b/profiler_gui/common_types.h @@ -101,24 +101,22 @@ struct do_no_hash { ////////////////////////////////////////////////////////////////////////// -const QRgb DEFAULT_COLOR = profiler::DefaultBlockColor;// 0x00d4b494; - -inline QRgb toRgb(unsigned int _red, unsigned int _green, unsigned int _blue) +inline QRgb toRgb(uint32_t _red, uint32_t _green, uint32_t _blue) { return (_red << 16) + (_green << 8) + _blue; } -inline QRgb fromProfilerRgb(unsigned int _red, unsigned int _green, unsigned int _blue) +inline QRgb fromProfilerRgb(uint32_t _red, uint32_t _green, uint32_t _blue) { if (_red == 0 && _green == 0 && _blue == 0) - return DEFAULT_COLOR; + return ::profiler::colors::Default; return toRgb(_red, _green, _blue) | 0x00141414; } -inline QRgb textColorForRgb(QRgb _color) +inline ::profiler::color_t textColorForRgb(::profiler::color_t _color) { - const QRgb sum = 0xff - ((_color & 0xff000000) >> 24) + ((_color & 0x00ff0000) >> 16) + ((_color & 0x0000ff00) >> 8) + (_color & 0x000000ff); - return sum > 0x215 ? ::profiler::colors::Black : ::profiler::colors::White; + const auto sum = 255. - (((_color & 0x00ff0000) >> 16) * 0.299 + ((_color & 0x0000ff00) >> 8) * 0.587 + (_color & 0x000000ff) * 0.114); + return sum < 76.5 || ((_color & 0xff000000) >> 24) < 0x80 ? ::profiler::colors::Dark : ::profiler::colors::CreamWhite; } ////////////////////////////////////////////////////////////////////////// diff --git a/sample/main.cpp b/sample/main.cpp index 1773295..350ac99 100644 --- a/sample/main.cpp +++ b/sample/main.cpp @@ -14,7 +14,7 @@ std::mutex cv_m; int g_i = 0; int OBJECTS = 500; -int RENDER_SPEPS = 1600; +int RENDER_STEPS = 1600; int MODELLING_STEPS = 1000; int RESOURCE_LOADING_COUNT = 50; @@ -32,7 +32,7 @@ void loadingResources(){ } void prepareMath(){ - EASY_FUNCTION(profiler::colors::Blue); + EASY_FUNCTION(profiler::colors::Green); int* intarray = new int[OBJECTS]; for (int i = 0; i < OBJECTS; ++i) intarray[i] = i * i; @@ -41,7 +41,7 @@ void prepareMath(){ } void calcIntersect(){ - EASY_FUNCTION(profiler::colors::Blue); + EASY_FUNCTION(profiler::colors::Gold); //int* intarray = new int[OBJECTS * OBJECTS]; int* intarray = new int[OBJECTS]; for (int i = 0; i < OBJECTS; ++i) @@ -61,7 +61,7 @@ double multModel(double i) } void calcPhys(){ - EASY_FUNCTION(profiler::colors::Blue); + EASY_FUNCTION(profiler::colors::Amber); double* intarray = new double[OBJECTS]; for (int i = 0; i < OBJECTS; ++i) intarray[i] = multModel(double(i)) + double(i / 3) - double((OBJECTS - i) / 2); @@ -71,12 +71,12 @@ void calcPhys(){ double calcSubbrain(int i) { - EASY_FUNCTION(profiler::colors::Blue); + EASY_FUNCTION(profiler::colors::Navy); return i * i * i - i / 10 + (OBJECTS - i) * 7 ; } void calcBrain(){ - EASY_FUNCTION(profiler::colors::Blue); + EASY_FUNCTION(profiler::colors::LightBlue); double* intarray = new double[OBJECTS]; for (int i = 0; i < OBJECTS; ++i) intarray[i] = calcSubbrain(i) + double(i * 180 / 3); @@ -85,19 +85,19 @@ void calcBrain(){ } void calculateBehavior(){ - EASY_FUNCTION(profiler::colors::DarkBlue); + EASY_FUNCTION(profiler::colors::Blue); calcPhys(); calcBrain(); } void modellingStep(){ - EASY_FUNCTION(profiler::colors::Navy); + EASY_FUNCTION(); prepareMath(); calculateBehavior(); } void prepareRender(){ - EASY_FUNCTION(profiler::colors::DarkRed); + EASY_FUNCTION(profiler::colors::Brick); localSleep(); //std::this_thread::sleep_for(std::chrono::milliseconds(8)); @@ -105,7 +105,7 @@ void prepareRender(){ int multPhys(int i) { - EASY_FUNCTION(profiler::colors::Red); + EASY_FUNCTION(profiler::colors::Red700); return i * i * i * i / 100; } @@ -146,7 +146,7 @@ void modellingThread(){ //std::unique_lock lk(cv_m); //cv.wait(lk, []{return g_i == 1; }); EASY_THREAD("Modelling"); - for (int i = 0; i < RENDER_SPEPS; i++){ + for (int i = 0; i < RENDER_STEPS; i++){ modellingStep(); localSleep(1200000); //std::this_thread::sleep_for(std::chrono::milliseconds(20)); @@ -164,60 +164,7 @@ void renderThread(){ } } -void four() -{ - EASY_FUNCTION(profiler::colors::Red); - std::this_thread::sleep_for(std::chrono::milliseconds(37)); -} - -void five() -{ - EASY_FUNCTION(profiler::colors::Red); - std::this_thread::sleep_for(std::chrono::milliseconds(20)); -} -void six() -{ - EASY_FUNCTION(profiler::colors::Red); - std::this_thread::sleep_for(std::chrono::milliseconds(42)); -} - -void three() -{ - EASY_FUNCTION(profiler::colors::Red); - four(); - five(); - six(); -} - -void seven() -{ - EASY_FUNCTION(profiler::colors::Red); - std::this_thread::sleep_for(std::chrono::milliseconds(147)); -} - -void two() -{ - EASY_FUNCTION(profiler::colors::Red); - std::this_thread::sleep_for(std::chrono::milliseconds(26)); -} - -void one() -{ - EASY_FUNCTION(profiler::colors::Red); - two(); - three(); - seven(); -} - -/* -one - two - three - four - five - six - seven -*/ +////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { @@ -225,7 +172,7 @@ int main(int argc, char* argv[]) OBJECTS = std::atoi(argv[1]); } if (argc > 2 && argv[2]){ - RENDER_SPEPS = std::atoi(argv[2]); + RENDER_STEPS = std::atoi(argv[2]); } if (argc > 3 && argv[3]){ MODELLING_STEPS = std::atoi(argv[3]); @@ -235,16 +182,14 @@ int main(int argc, char* argv[]) } std::cout << "Objects count: " << OBJECTS << std::endl; - std::cout << "Render steps: " << RENDER_SPEPS << std::endl; + std::cout << "Render steps: " << RENDER_STEPS << std::endl; std::cout << "Modelling steps: " << MODELLING_STEPS << std::endl; std::cout << "Resource loading count: " << RESOURCE_LOADING_COUNT << std::endl; auto start = std::chrono::system_clock::now(); EASY_PROFILER_ENABLE; EASY_MAIN_THREAD; - //one(); - //one(); - /**/ + std::vector threads; std::thread render = std::thread(renderThread); @@ -262,7 +207,7 @@ int main(int argc, char* argv[]) } cv.notify_all(); - for (int i = 0; i < RENDER_SPEPS; ++i) { + for (int i = 0; i < RENDER_STEPS; ++i) { modellingStep(); localSleep(1200000); }